使用docker配置生产环境可以说是一劳永逸,现在记录下配置django+nginx+uwsgi的具体内容。
注意,如果是在服务器上使用这个docker的话,一定要把django的settings.py中的ALLOWED_HOSTS配置好,否则无法访问。
容器配置
首先需要相应的容器是肯定的了,我已经配置好了相应的容器,环境包括python3.6.5+django2.1.2+nginx+uwsgi。
如果你不想自己再配置,可以使用我的容器。
docker pull menfershare/djangonu
此容器下,使用django新建一个项目(建议在/usr/project目录),如果你使用的是pull的我的镜像,我已经在该目录下有了一个testdjango项目,可以跳过建项目过程。
cd到项目目录,django-admin startproject testdjango
现在,有了一个测试的项目名叫testdjango(当然,后续的具体项目自己部署,和这个过程是一样的。)
检验nginx
如果已经有了容器,现在来检验一下容器的状态
启动容器并把端口映射到主机上:
docker run -it -p 9999:9999 -p 9998:9998 djangonu
修改nginx的默认端口
vim /etc/nginx/sites-enabled/default
将server里的两个端口改成映射的那个端口,我这里设置的就是9999。
现在,启动nginx看看是否有效:
service nginx start
在主机上访问127.0.0.1:9999
出现这个欢迎界面,说明端口和nginx正常工作了。
检查uwsgi
接下来一步是检查uwsgi的工作状态
现在,cd到项目目录。
cd /usr/project/testdjango
uwsgi --http :9998 --chdir /usr/project/testdjango/ --wsgi-file testdjango/wsgi.py --master --processes 4
--http:后面指定端口
--chdir:项目目录
--wsgi-file:相对于项目路径下的同名目录里的wsgi.py文件,注意,这里写相对路径就可以了
--master:允许主进程存在
--processes:进程数
如果提示进程已经占用,使用
lsof -i:9998
查看相关进程占用情况,并使用kill -9 + 进程号(pid)的方式杀掉进程
现在访问127.0.0.1:9998
django的欢迎界面出现了,uwsgi没问题,现在继续配置。
配置django项目
对django项目的配置其实就是说让项目能够在环境下跑起来,当然是借助nginx和uwsgi。这里的配置不关注django的项目配置(数据库app之类的),我们只让他跑起来,至于跑的是什么,就看项目怎么写了。
退出uwsgi我们才能继续编辑,现在,放心的Ctrl+C吧。
现在cd到项目目录(好像一直就在项目目录)
cd /usr/project/testdjango
创建配置文件:testdjango_uwsgi.ini
vim testdjango_uwsgi.ini
输入:
[uwsgi]
# Django-related settings
socket = :9998
# the base directory (project full path)
chdir = /usr/project/testdjango
# Django s wsgi file
wsgi-file = mysit.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
chmod-socket = 664
# clear environment on exit
vacuum = true
# pidfile for record run pid
pidfile =pid.uwsgi
# run process background and save log to daemonize
daemonize = UWSGI.log
现在使用这个配置文件:
uwsgi --ini testdjango testdjango_uwsgi.ini
现在会自动生成log和pid文件:
然后接着修改nginx的配置文件
vim /etc/nginx/sites-available/default
内容如下:
server {
listen 9999 default_server;
listen [::]:9999 default_server;
server_name www.testdjango.com; #does not matter
charset UTF-8;
client_max_body_size 75M;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.:1:9998; #port in uwsgi.ini
uwsgi_read_timeout 5;
}
location /static { #static files
expires 30d;
autoindex on;
add_header Cache_Control private;
alias /usr/project/testdjango/static/;
}
location /media {
alias /usr/project/testdjango/media/;
}
}
现在,让我们使用lsof -i:9998查看一下9998端口的情况(也就是uwsgi的运行情况):
可以看到uwsgi在监听了。
现在,让我们打开nginx
service nginx start
哈哈哈哈哈哈,配置结束,大功告成。
之后,我们就可以简单的使用git,或者是目录映射来将自己的项目部署到该docker中。
具体的连接数等配置,就自行选择配置了。
uwsgi和nginx部分参考该博客:
https://www.cnblogs.com/if-then/p/7259865.html