我是把nginx uwsgi django 部署在一个容器里,然后mysql部署在另外一个容器里,docker和mysql通讯没问题,主要问题出在nginx和uwsgi的配置,下面简单说一下

docker

1.创建容器

sudo docker run -it --name dj -p 8000:8000 ubuntu:20.04

注意这里有2个坑
–name 取名字的时候尽量不要和以后镜像重名,否则会让你重新改名字
-p 8000:8000 记得一定要映射端口,不然后期再改比较麻烦

2.安装python3,pip,uwsig,nginx

sudo apt update
sudo apt install python3.10
sudo apt install python3-pip
python3 -m pip install uwsgi
sudo apt install nginx

nginx配置

1.打开配置文件
nginx的版本
nginx version: nginx/1.18.0 (Ubuntu)

cd /etc/nginx/sites-enabled
vim default

修改配置文件

server {
		# 监听端口
        listen 8000 default_server;
        listen [::]:8000 default_server;
        # 转发uwsgi
		location / {
                uwsgi_pass 127.0.0.1:8888;
                include /etc/nginx/uwsgi_params;
        }
       # Django的静态文件的绝对路径
        location /static/ {
                alias /data/git/django_test/django_blog/static/;
        }
 }

uwsgi配置

创建uwsgi.ini文件
在django的项目settings的同级目录里创建uwsgi.ini文件.
uwsgi.ini文件内容

[uwsgi]
    # nginx
    socket=0:8888
    # http协议
    # http=127.0.0.1:8888
    # 项目当前工作目 与manage.py同级
    chdir=/data/git/django_test/django_blog
    # wsgi.py的绝对路径 与settings.py同级
    wsgi-file=/data/git/django_test/django_blog/docker_djago/wsgi.py
    # 进程数 不大于cpu核心数
    process=4
    # 进程数
    threads=20
    # pid记录文件
    pidfile=uwsgi.pid
    # 后台启动
    daemonize=uwsgi.log
    # 开启主进程
    master=True

这里有2个坑
chdir的路径是manage.py的同级路径
wsgi-file的路径尽量写绝对路径,我在本地写相对路径可行,在云服务器写相对路径报错,后来写了绝对路径.

django的配置

DEBUG = False
ALLOWED_HOSTS = ['*']

uwsgi操作

每次修改配置需要重启服务

# 开启uwsgi
uwsgi --ini uwsgi.ini
# 关闭uwsgi
uwsgi --stop uwsgi.pid

nginx操作

# 检查配置文件
nginx -t
# 重启nginx
service nginx restart

补充
页面如果是
502,并且有nginx字样,
那就说明nginx能接收到请求,可能是uwsgi或者nginx反向代理配置的问题

页面如果是
Internal Server Error django
说明nginx和uwsgi都没问题,是django的问题

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐