申请到了公司服务器的资源,就不用跑在windows下边,用Django来强制提供静态文件服务,换成Linux正式部署,效率就高很多了,整体网站的速度也快多了。
记录一下折腾的过程以便以后用。
01 安装PgSQL
先安装Postgresql :
apt install postgresql之后设置默认的pgsql密码:
sudo -u postgres psql进入psql的命令行,然后输入:
ALTER USER postgres WITH password '123456';别忘记最后的分号,之后显示ALTER ROLE就可以了。使用\q 退出。
然后修改PgSQL的远程连接,目录在/etc/postgresql/16/main 下。
修改postgresql.conf中的
listen_address = '*' 修改pg_hba.conf,增加一行
host all all 0.0.0.0/0 md5重新启动服务:systemctl restart postgresql,然后使用pgAdmin能远程连接上数据库就成功了。之后在数据库中创建应用所需的用户和对应的数据库。
02 安装Python虚拟环境和相关包
自带的Python是3.12.3,也足够用了。
到/home/sysadmin/下边,执行
apt install python3.12-venv安装完成之后,启动一个虚拟环境目录:
python3 -m venv FMS_VENV之后上传requirements.txt,内容如下:
asgiref==3.11.0
Django==6.0
et_xmlfile==2.0.0
gunicorn==23.0.0
openpyxl==3.1.5
packaging==25.0
psycopg2-binary==2.9.11
python-dateutil==2.9.0.post0
six==1.17.0
sqlparse==0.5.4
tzdata==2025.2先激活虚拟环境,然后安装:
source /home/sysadmin/FMS_VENV/bin/activate
pip install -r requirements.txt这样Python环境就配好了。
03 上传Django项目文件
把项目的settings.py中的Debug改成False,urls.py中删除windows下强制提供静态文件的代码,然后就可以上传到服务器上了。我放在/home/sysadmin/FMS目录下。还要把ALLOWED_HOSTS设置为服务器的IP地址和本地回环地址。
之后更新的时候注意备份一下这两个修改后的文件即可。
然后就可以执行迁移了,这里迁移的时候注意,迁移版本和开发版本一致,这样将来上传到服务器的时候可以迅速的同步开发数据库和生产数据库的表状态。顺便再创建一个管理员账号。
04 配置Gunicorn服务
创建/etc/systemd/system/gunicorn.service,内容如下:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/sysadmin/FMS
ExecStart=/home/sysadmin/FMS_VENV/bin/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 FMS2026.wsgi
[Install]
WantedBy=multi-user.target用户要配置成root以获取足够的权限。WorkingDirectory就是项目目录,下边的启动是虚拟环境下的gunicorn包所在位置,绑定端口可以自己设置,在nginx中要进行相同的配置。最后的FMS2026.wsgi是指的项目目录下的FMS2026目录下的wsgs.py 入口文件。
之后激活为系统服务,并启动:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn正常情况下系统就启动了,由于我这个没有图形界面,就没法通过8000端口访问没有静态文件的页面先测试一下了。但只要服务正常启动,就没问题。
05 配置nginx
先安装:
apt install nginx之后到/etc/nginx/sites-avaiable中修改default文件,这个文件是默认的站点,并通过软链接到/sites-enable中的default来进行激活。将其中的内容全部删除,换成如下内容:
server {
listen 80;
server_name fms.highly.cc;
location /static {
alias /home/sysadmin/FMS/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;
}
}由于直接根据IP提供服务,所以域名其实没有什么用。
/static路径的引用改写到项目的静态文件地址,也就是Django收集静态文件的地址,这样静态文件就通过nginx来提供服务了。
还有一点很关键,编辑nginx.conf,将其中的第一行改成:
user root;否则访问静态文件会报403错误。之后测试一下配置文件,然后重启服务或者直接加载:
nginx -t
nginx -s reload之后再直接访问对应的IP地址,就能看到自己编写的Web服务正常运行啦。