ubuntu + Nginx + Gunicorn 部署Django web项目
django 自带web服务器程序,可用于开发调试,但不建议直接用到生产环境,那生产环境该如何部署django web项目呢?
本篇实际上为《Python web 开发 测试驱动方法》学习笔记,由书中内容改编(为适配当前最新环境)。
系统环境: ubuntu 16.4 或以上
项目源码: https://github.com/a523/TDD_django
安装依赖软件:
安装nginx
sudo apt-get install nginx
sudo systemctl start nginx
验证安装:访问服务器的 IP 地址 就能看到 Nginx 的“Welcome to nginx”。
ubuntu 18.04 自带python3, 如果没有请安装Python、Git、pip 和 virtualenv
sudo apt-get install git python3 python3-pip
sudo pip3 install virtualenv
如果在用apt-get安装的时候碰到如下错误:
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
请尝试执行:
sudo dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
创建项目归置文件夹
在家目录下参见如下文件夹
.
└── sites
└── xinmal.com # 改成你的网站URL
├── database
├── source
├── static
└── virtualenv
通过git拉取代码
git clone https://github.com/a523/TDD_django.git ~/sites/xinmal.com/source
在服务器上创建python虚拟环境:
virtualenv --python=python3 ../virtualenv/
../virtualenv/bin/pip install -r requirements.txt # 安装依赖
../virtualenv/bin/python3 manage.py runserver # 验证django项目是否可访问
如果代码中setting 没有关闭debug模式,应该修改setting.py
DEBUG = False
ALLOWED_HOSTS = ['xinmal.com','192.168.0.201'] # 同时记得修改ALLOWED_HOSTS
创建数据库
../virtualenv/bin/python manage.py migrate --noinput
收集静态文件
xin@xin:~/sites/xinmal.com/source$ ../virtualenv/bin/python manage.py collectstatic --noinput
配置nginx
xin@xin:~/sites/xinmal.com$ cat /etc/nginx/sites-available/xinmal.com
server {
listen 80;
listen [::]:80;
server_name xinmal.com;
location /static {
alias /home/xin/sites/xinmal.com/static; # 让Nginx伺服静态文件
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/xinmal.com.socket;
}
}
建立软链接
ln ../sites-available/xinmal.com /etc/nginx/sites-enabled/xinmal.com
# 注意:ln 真实文件位置,如果采用相对路径是指相对于连接符号的相对路径(上行中ln第一个参数所示)
删除默认配置文件
rm /etc/nginx/sites-enabled/default
配置Gunicorn(以服务的方式启动Guicorn):
xin@xin:~$ cat /lib/systemd/system/gunicornxin.service
[Unit]
After=syslog.target network.target remote-fs.target nss-loolup.target # 在某某服务之后启动
[Service]
User=xin
WorkingDirectory=/home/xin/sites/xinmal.com/source
ExecStart=/home/xin/sites/xinmal.com/virtualenv/bin/gunicorn --bind unix:/tmp/xinmal.com.socket superlists.wsgi:application # 注意的点和冒号
Restart=on-failure
[Install]
WantedBy=multi-user.target # 设置enable
现在可以执行下面命令启动:
systemctl start gunicornxin
systemctl enable gunicornxin
验证
打开浏览器访问服务器ip地址