个人技术博客
个人技术博客

Subscribe to kk

Subscribe to kk
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
部署Python Web项目时,通常会使用uWSGI+Nginx或者Gunicorn+Nginx,需要开发者同时安装这些软件,做一系列的配置,费时费力,而容器技术如今已经非常火热,开发者可以使用Docker容器来部署Web应用,达到和本地开发一样的环境。
1.准备一个Django项目,通过python manage.py runserver 0.0.0.0:8000可以运行起来 2.项目设置中配置PostgreSQL数据库信息 代码如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres', # 数据库名称 使用docker默认的
'USER': 'postgres', # 使用docker默认的用户名
'HOST': 'db',
'PORT': 5432
}
}
3.设置配置Redis的信息。 代码如下:
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://redis:6379', # redis(容器的地址)
'OPTIONS': {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100},
'SOCKET_TIMEOUT': 10,
},
},
}
在项目目录下新建DockerFile
FROM python:3.7
MAINTAINER liyuankun 705555262@qq.com
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /learntime
WORKDIR /learntime
ADD . /learntime/
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
version: '3'
services:
redis:
image: redis
command: redis-server
volumes:
- ./deployment/redis:/data
ports:
- 6379:6379
restart: always
web:
build: .
expose:
- 8000
volumes:
- .:/learntime
- /tmp/logs:/tmp
command: bash start.sh
links:
- redis
depends_on:
- redis
restart: always
nginx:
build: deployment/nginx
ports:
- 80:80
expose:
- 8000
volumes:
- ./staticfiles:/usr/share/nginx/html/static
- ./learntime/media:/usr/share/nginx/html/media
- ./deployment/nginx/ssl:/usr/share/nginx/ssl
links:
- web
depends_on:
- web
restart: always
#!/bin/bash
python manage.py collectstatic --noinput&& #收集静态文件
python manage.py makemigrations&& # 迁移数据库文件
python manage.py migrate&& # 迁移数据库
python manage.py createsuperuser&& # 生成超级用户
uwsgi -i ./uwsgi.ini # 启动uWSGI
在项目目录下新建deployment文件夹 mkdir -p /deployment/nginx 在该目录下新建DockerFile和nginx.conf文件
DockerFile文件如下:
FROM nginx
# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
RUN rm /etc/nginx/conf.d/default.conf \
&& mkdir -p /usr/share/nginx/html/static \
&& mkdir -p /usr/share/nginx/html/media \
&& mkdir -p /usr/share/nginx/ssl
# 添加配置文件
ADD ./nginx.conf /etc/nginx/conf.d/
nginx.conf文件如下:
# 仅用于本地docker环境测试(80端口代理http请求)
server {
listen 80; # 监听80端口
server_name 127.0.0.1; # 生产环境请换成域名
charset utf-8;
access_log /var/log/nginx/nginx-uwsgi.log;
error_log /var/log/nginx/nginx-error.log;
location / {
proxy_pass http://web:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /usr/share/nginx/html/static/; #静态资源路径
}
location /media/ {
alias /usr/share/nginx/html/media/; #上传文件路径
}
}
将所有项目文件上传到服务器中,来到项目目录下 执行docker-compose up --build 若没有错误则部署成功,成功后可以执行docker-compose up -d来后台运行这些容器,执行docker-compose down关闭这些服务。
部署Python Web项目时,通常会使用uWSGI+Nginx或者Gunicorn+Nginx,需要开发者同时安装这些软件,做一系列的配置,费时费力,而容器技术如今已经非常火热,开发者可以使用Docker容器来部署Web应用,达到和本地开发一样的环境。
1.准备一个Django项目,通过python manage.py runserver 0.0.0.0:8000可以运行起来 2.项目设置中配置PostgreSQL数据库信息 代码如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres', # 数据库名称 使用docker默认的
'USER': 'postgres', # 使用docker默认的用户名
'HOST': 'db',
'PORT': 5432
}
}
3.设置配置Redis的信息。 代码如下:
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://redis:6379', # redis(容器的地址)
'OPTIONS': {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100},
'SOCKET_TIMEOUT': 10,
},
},
}
在项目目录下新建DockerFile
FROM python:3.7
MAINTAINER liyuankun 705555262@qq.com
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /learntime
WORKDIR /learntime
ADD . /learntime/
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
version: '3'
services:
redis:
image: redis
command: redis-server
volumes:
- ./deployment/redis:/data
ports:
- 6379:6379
restart: always
web:
build: .
expose:
- 8000
volumes:
- .:/learntime
- /tmp/logs:/tmp
command: bash start.sh
links:
- redis
depends_on:
- redis
restart: always
nginx:
build: deployment/nginx
ports:
- 80:80
expose:
- 8000
volumes:
- ./staticfiles:/usr/share/nginx/html/static
- ./learntime/media:/usr/share/nginx/html/media
- ./deployment/nginx/ssl:/usr/share/nginx/ssl
links:
- web
depends_on:
- web
restart: always
#!/bin/bash
python manage.py collectstatic --noinput&& #收集静态文件
python manage.py makemigrations&& # 迁移数据库文件
python manage.py migrate&& # 迁移数据库
python manage.py createsuperuser&& # 生成超级用户
uwsgi -i ./uwsgi.ini # 启动uWSGI
在项目目录下新建deployment文件夹 mkdir -p /deployment/nginx 在该目录下新建DockerFile和nginx.conf文件
DockerFile文件如下:
FROM nginx
# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
RUN rm /etc/nginx/conf.d/default.conf \
&& mkdir -p /usr/share/nginx/html/static \
&& mkdir -p /usr/share/nginx/html/media \
&& mkdir -p /usr/share/nginx/ssl
# 添加配置文件
ADD ./nginx.conf /etc/nginx/conf.d/
nginx.conf文件如下:
# 仅用于本地docker环境测试(80端口代理http请求)
server {
listen 80; # 监听80端口
server_name 127.0.0.1; # 生产环境请换成域名
charset utf-8;
access_log /var/log/nginx/nginx-uwsgi.log;
error_log /var/log/nginx/nginx-error.log;
location / {
proxy_pass http://web:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /usr/share/nginx/html/static/; #静态资源路径
}
location /media/ {
alias /usr/share/nginx/html/media/; #上传文件路径
}
}
将所有项目文件上传到服务器中,来到项目目录下 执行docker-compose up --build 若没有错误则部署成功,成功后可以执行docker-compose up -d来后台运行这些容器,执行docker-compose down关闭这些服务。
No activity yet