记录一下Linux配置Django的过程。现在不用uwsgi了,用gunicorn比较方便一些。
01 安装Gunicorn
在虚拟机里使用Python项目要弄好虚拟环境,如果没有的话还要先安装python3-venv。这里就省略了。
01 安装Gunicorn
激活虚拟环境,例如虚拟机里我为了使用FMS的虚拟环境放在/home/minko/FMS下,之后用pip直接安装即可:
source /home/minko/FMS/bin/activate
pip install gunicorn
02 修改Django配置
之前的项目因为要在Windows下边跑,直接用Django提供服务,所以设置了邪修的方法,静态文件在Debug=False的情况下强制让服务器提供。现在要部署到Linux上,就采用正式的方法了。
# 这行在Debug=False的时候才需要有
# 这个路径是收集各个APP里的静态文件的路径,也是运行collectstatic之后存放所有静态文件的路径,也是将来Nginx要配置提供静态文件的路径
# 但是已经存放在之前的static目录里的东西不会因为collectstatic复制过来
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
我这里还是指向项目里原本就存放静态文件的地方,然后执行python3 manage.py collectstatic之后,像admin应用的样式就会被收集过来。
03 配置Gunicorn
由于Nginx是反向代理,我们先要启动Gunicorn来提供web服务。由于是服务,所以编辑一个gunicorn.service文件放在/etc/systemd/system/gunicorn.service的位置,文件详情如下:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/minko/FMS_HIGHLY
ExecStart=/home/minko/FMS/bin/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 FMS_HIGHLY.wsgi
[Install]
WantedBy=multi-user.target
这里用户用root用户启动。WorkdingDirectory是Django项目的目录。
最关键的下边启动,要使用前边配置的虚拟环境中的gunicorn来启动。注意要给执行文件提供wsgi的入口。由于现在已经在项目目录下,按照Django项目的结构,项目录下与项目同名的目录下的wsgi.py文件就是入口,但是要写成目录.wsgi的形式。
创建了服务文件之后,就是老套的启动服务,注册服务了:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
之后正常的话,应该可以在指定的端口访问服务了,但静态文件是缺失的。接下来就靠Nginx提供静态文件服务了。
04 配置Nginx
Nginx的默认配置文件在/etc/nginx/nginx.conf
由于服务器的数量不多,就直接更改这个配置文件即可。
在http的配置内部加上:
server {
listen 80;
server_name fms.local;
location /static {
alias /home/minko/FMS_HIGHLY/static/; # 静态文件路径
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这里端口设置了80,然后设置了一个域名(其实没用,只有本机解析用,在hosts里设置其为127.0.0.1)。下边的/static配置是最关键的部分,要指向刚才Django里的static_root设置,也就是收集了所有静态文件的地方。
下边是的location / 设置是服务器的路径入口,反向代理的地址就是Gunicorn启动服务器的绑定地址。
这时候settings.py中的ALLOWED_HOSTS配置就有点用了,写成虚拟机的地址加上自己设置的域名。重新启动Nginx服务就可以了。