在 CentOS 上部署 Django 应用
在 CentOS 上部署 Django 应用,使用 Nginx 和 uWSGI,并连接 PostgreSQL,通常可以按照以下步骤进行操作:
1. 安装系统依赖
首先,确保你系统的包管理器是最新的:
sudo yum update -y
安装 PostgreSQL
你可以使用以下命令安装 PostgreSQL:
sudo yum install -y postgresql postgresql-server postgresql-contrib
然后,初始化 PostgreSQL 数据库:
sudo postgresql-setup initdb
启动并设置 PostgreSQL 服务开机自启:
sudo systemctl start postgresql
sudo systemctl enable postgresql
2. 安装 Python 及必要的依赖
确保你的系统已经安装了 Python 和 pip。可以通过以下命令安装:
sudo yum install -y python3 python3-pip python3-dev
然后,安装 virtualenv:
sudo pip3 install virtualenv
创建虚拟环境
在你的项目目录下创建一个虚拟环境:
cd /path/to/your/project
virtualenv venv
source venv/bin/activate
安装 Django 和 PostgreSQL 依赖
安装 Django 和 psycopg2(PostgreSQL 的 Python 连接库):
pip install django psycopg2 uwsgi
3. 配置 Django 设置
在你的 Django 项目的 settings.py 文件中,配置数据库连接到 PostgreSQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
迁移数据库
确保 PostgreSQL 数据库已创建,并应用 Django 的迁移:
python manage.py migrate
4. 配置 uWSGI
uWSGI 将充当 Django 应用的 WSGI 服务器。你需要为 uWSGI 配置一个 ini 文件。
在你的项目目录下创建一个名为 uwsgi.ini 的文件:
[uwsgi]
chdir = /path/to/your/project
module = your_project_name.wsgi:application
home = /path/to/your/project/venv
master = true
processes = 5
socket = /path/to/your/project/your_project.sock
chmod-socket = 660
vacuum = true
启动 uWSGI:
uwsgi --ini uwsgi.ini
5. 配置 Nginx
Nginx 作为反向代理服务器,转发请求到 uWSGI。安装 Nginx:
sudo yum install -y nginx
创建一个新的 Nginx 配置文件(例如 /etc/nginx/conf.d/django_project.conf):
server {
listen 80;
server_name your_domain_or_ip;
location / {
uwsgi_pass unix:/path/to/your/project/your_project.sock;
include uwsgi_params;
}
location /static/ {
alias /path/to/your/project/static/;
}
location /media/ {
alias /path/to/your/project/media/;
}
}
启动 Nginx
确保 Nginx 服务已启动并设置为开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
6. 配置防火墙
确保防火墙允许 HTTP(80端口)和 HTTPS(443端口)流量:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --reload
7. 收集静态文件
在 Django 中,静态文件需要收集到一个公共目录,以便 Nginx 提供静态内容。运行以下命令:
python manage.py collectstatic
8. 设置 Supervisor 管理 uWSGI(可选)
为了确保 uWSGI 在服务器重启后自动启动,可以使用 Supervisor 来管理它。
首先安装 Supervisor:
sudo yum install -y supervisor
然后创建一个 Supervisor 配置文件,管理 uWSGI:
sudo vi /etc/supervisord.d/uwsgi.ini
内容如下:
[program:uwsgi]
command=/path/to/your/project/venv/bin/uwsgi --ini /path/to/your/project/uwsgi.ini
autostart=true
autorestart=true
stderr_logfile=/var/log/uwsgi.err.log
stdout_logfile=/var/log/uwsgi.out.log
启动 Supervisor:
sudo systemctl start supervisord
sudo systemctl enable supervisord
9. 测试部署
现在,你应该可以通过浏览器访问你的 Django 应用。如果一切配置正确,Django 应该能够通过 Nginx 和 uWSGI提供服务,且数据库连接正常。
总结
通过以上步骤,你就可以在 CentOS 上成功部署一个 Django 应用,结合 Nginx、uWSGI 和 PostgreSQL,实现生产环境的部署。如果遇到任何问题,可以检查日志文件(如 uWSGI、Nginx、Django 的日志)进行排查。

