行业资讯

在 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 的日志)进行排查。

Search here