目录
2. Docker构建文件docker/uwsgi/Dockerfile
目标:
- 构建基于docker-compose的django项目部署环境, 可通过 xxx.com 访问uwsgi+python+django的容器服务。
- 定义vhost配置,通过容器间内部端口8001访问
项目目录:
django_project/
├── app
│ ├── asgi.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-38.pyc
│ │ ├── settings.cpython-38.pyc
│ │ ├── urls.cpython-38.pyc
│ │ └── wsgi.cpython-38.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
└── uwsgi.ini
步骤:
1. 编排docker-compose.yml
nginx:
#image: nginx:latest
container_name: ${APP_NAME:?err}-nginx
restart: always
build:
dockerfile: nginx.Dockerfile
context: ./docker
ports:
- '80:80'
- '443:443'
links:
- 'php'
- 'uwsgi'
depends_on:
- php
volumes:
- '/data/Server/Settings/nginx:/etc/nginx'
- '/data/Server/Logs/nginx:/var/log/nginx'
- '/data/Server/Tools:/var/server-tools'
- '/data/Projects:/var/www/html'
- '/data/Auths:/var/server-auths'
- '/data/Server/Backups:/var/backups'
- '/etc/group:/etc/group:ro'
- '/etc/passwd:/etc/passwd:ro'
- '/etc/shadow:/etc/shadow:ro'
uwsgi:
restart: always
container_name: ${APP_NAME:?err}-uwsgi
build:
context: ./docker/uwsgi
command: uwsgi --ini uwsgi.ini
expose:
- 8001
links:
- 'mariadb'
- 'redis'
volumes:
- "/data/Projects/django_project:/workspace"
- "/data/Server/Logs/uwsgi:/var/log/uwsgi"
...
2. Docker构建文件
docker/uwsgi/Dockerfile
FROM python:3.8.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /workspace
WORKDIR /workspace
ADD requirements.txt /workspace/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /workspace/
requirements.txt
Django==3.1
uwsgi==2.0.20
mysqlclient
autopep8
3. 关键的文件 uwsgi.ini
[uwsgi]
#buffer-size = 40960
socket = :8001
#http = :8002
#项目目录
chdir = /workspace
module = app.wsgi:application
callable = app
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file = app/wsgi.py
# 指定启动的工作进程数
processes = 2
enable-threads = true
threads = 2
thunder-lock = true
master = true
logto = /var/log/uwsgi/uwsgi.log
log-reopen = true
py-autoreload = true
4. 项目初始命令
# 初始化项目
docker-compose exec uwsgi django-admin.py startproject app .
# 移植数据
docker-compose exec uwsgi ./manage.py migrate
docker-compose restart uwsgi
5. vhost文件 (xxx.com.conf)
upstream django {
ip_hash;
server uwsgi:8001;
}
server {
listen 80;
listen [::]:80;
server_name xxx-print.com;
#listen 443 ssl;
#ssl_certificate /var/server-auths/certs/$server_name/fullchain.crt;
#ssl_certificate_key /var/server-auths/certs/$server_name/the.key;
access_log /var/log/nginx/django.log main;
error_log /var/log/nginx/django.error.log;
charset utf-8;
location / {
#auth_basic "Authorize Site";
#auth_basic_user_file /var/server-auths/htpasswd;
#autoindex on;
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
add_header Access-Control-Allow-Origin *;
}
#include agent_deny.def;
}
6. 一些django命令
django-admin startproject project # 创建django项目
cd project
pip install django # 为项目安装django支持
python manage.py runserver # 访问默认: http://localhost:8000/
7. 试运行
8. 完成
资料:
Django+MySQL+Nginx with Docker and docker-compose
How to Deploy old Django project using NGINX, Docker and UWSGI - Yasoob Khalid