当我们写完了一个web应用就需要把他部署到服务器上。虽然django自带一个web服务器,但是功能比较简单,不适合在实际的生产环境中进行部署。django比较常用的部署方案是nginx+uwsgi。
本文主要介绍一下如何通过nginx+uwsgi部署web应用,以及通过service保证服务器重启后,web服务能重新启动。
下载nginx就不在赘述,网上的资源比较多。
主要讲一下nginx配置
server {
listen 8001; # 修改端口号
server_name x.x.x.x;
charset utf-8;
access_log /var/log/nginx/mysite_access.log;
error_log /var/log/nginx/mysite_error.log;
#access_log logs/host.access.log main;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8082;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/yerx/djcode/mysite/static/;
}
}
server_name表示web服务器的IP或者域名。
listen表示nginx监听的端口号。
通过uwsgi_pass制定wsgi的IP和端口
static指明静态文件所在的位置
再看一下uwsgi.ini的配置
# myweb_uwsgi.ini file
[uwsgi]
# Django-related settings
socket = /tmp2/mysite.sock
socket = :8082
# the base directory (full path)
chdir = /home/yerx/djcode/mysite
# Django s wsgi file
module = mysite.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
为了让web程序能够开机启动,我们需要添加一个服务器程序就是xxx.service这样的文件。
看一下mysite.service的内容
[Unit]
Description=mysite server daemon
After=network.target
[Service]
WorkingDirectory=/home/xxx/djcode/mysite/
ExecStart=/usr/local/bin/uwsgi --socket mysite.sock --ini mysite_uwsgi.ini --chmod-socket=666
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target