说明
Django 教程 正在计划编写中,欢迎大家加微信 gairuo123 提供意见、建议、纠错、催更。
在 CentOS/Redhat 上利用 Nginx 和 uWSGI 部署多个 Django 开发的网站,可以通过以下步骤实现。这种方式适用于每个 Django 项目有独立的虚拟环境和配置。以下是完整的部署流程:
确保以下软件已安装:
venv
或 virtualenv
)可以通过以下命令安装必要的组件:
sudo yum update
sudo yum install -y python3 python3-pip nginx
pip3 install virtualenv
假设我们有两个 Django 项目,project1
和 project2
。
创建项目目录:
mkdir -p /var/www/project1 /var/www/project2
cd /var/www/project1
python3 -m venv venv
source venv/bin/activate
pip install django uwsgi
django-admin startproject project1 .
cd /var/www/project2
python3 -m venv venv
source venv/bin/activate
pip install django uwsgi
django-admin startproject project2 .
配置各项目的 settings.py
文件:
ALLOWED_HOSTS
为服务器域名或 IP 地址。收集静态文件:
cd /var/www/project1
python manage.py collectstatic
cd /var/www/project2
python manage.py collectstatic
安装到默认环境下:
pip install uwsgi
为每个项目创建独立的 uWSGI 配置文件。
project1
的配置文件 /etc/uwsgi/sites/project1.ini
:
[uwsgi]
chdir = /var/www/project1
module = project1.wsgi:application
home = /var/www/project1/venv
socket = /run/uwsgi/project1.sock
chmod-socket = 664
vacuum = true
master = true
processes = 5
threads = 2
project2
的配置文件 /etc/uwsgi/sites/project2.ini
:
[uwsgi]
chdir = /var/www/project2
module = project2.wsgi:application
home = /var/www/project2/venv
socket = /run/uwsgi/project2.sock
chmod-socket = 664
vacuum = true
master = true
processes = 5
threads = 2
再举一个典型的配置例子:
[uwsgi]
socket = :8009
chdir = /home/site1
module = my_app.wsgi:application
home = /home/miniconda3/envs/py312
master=True
processes = 4
threads = 2
buffer-size = 65536
max-requests = 6000
chmod-socket = 664
# daemonize = uwsgi_my_app.log
# 修改py代码后自动重启uwsgi
py-autoreload = 1
vacuum = true
创建运行目录:
sudo mkdir -p /etc/uwsgi/sites /run/uwsgi
sudo chown nginx:nginx /run/uwsgi
为每个项目配置独立的 Nginx 站点。
project1
的 Nginx 配置 /etc/nginx/conf.d/project1.conf
:
server {
listen 80;
server_name project1.example.com;
location /static/ {
alias /var/www/project1/static/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/project1.sock;
}
}
project2
的 Nginx 配置 /etc/nginx/conf.d/project2.conf
:
server {
listen 80;
server_name project2.example.com;
location /static/ {
alias /var/www/project2/static/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/project2.sock;
}
}
测试 Nginx 配置并重启服务:
sudo nginx -t
sudo systemctl restart nginx
创建 uWSGI 系统服务文件 /etc/systemd/system/uwsgi.service
:
[Unit]
Description=uWSGI Emperor Service
After=network.target
[Service]
ExecStart=/home/miniconda3/bin/uwsgi --emperor /etc/uwsgi/sites --uid nginx --gid nginx
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
启动并启用服务:
sudo systemctl start uwsgi
sudo systemctl enable uwsgi
http://project1.example.com
和 http://project2.example.com
,确认应用正常运行。nginx:
# 安装
sudo yum install nginx
# 启动和重启
sudo service nginx start
sudo service nginx restart
# or
sudo /etc/init.d/nginx restart
# 检查 Nginx 配置是否正确
sudo nginx -t
# 修改后重新加载生效
nginx -s reload
# 设置开机启动 nginx
systemctl enable nginx
# 软链接到 nginx 目录
ln -s /etc/nginx /home/nginx_link
# 实时日志
tail -f /home/nginx/log/access.log
uwsgi:
pip install uwsgi
# 启动
uwsgi --ini uwsgi_config.ini
# 皇帝模式,按目录批量启动
uwsgi --emperor /home/site/uwsgi
# 命令可让 uwsgi 自动重启
touch /home/nginx/uwsgi/*.ini
# 重启某站点的时候,就 touch 一下该站点的配置文件
touch /home/site/site1.ini
# 启动并启用服务:
sudo systemctl start uwsgi
sudo systemctl enable uwsgi
# 设置 uWSGI 服务,自动启动
创建 uWSGI 系统服务文件 /etc/systemd/system/uwsgi.service:
# which uwsgi
/home/miniconda3/bin/uwsgi
其他:
# 修改用户上传文件目录权限
chmod -R 777 /home/site/www/file
# 查看端口情况
ss -tnl
# 查看所有服务
ps aux
nginx
用户拥有。这样即可实现多个 Django 项目在同一服务器上的部署!
更新时间:2024-11-23 17:50:19 标签:django nginx uwsgi 网站