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地址

标签: 部署Django, web, Gunicorn

添加新评论