在CentOS 8上安装和配置Django的核心步骤是:通过DNF包管理器安装Python及依赖,创建虚拟环境,使用Pip安装Django,最后通过Nginx与Gunicorn构建生产级Web服务器架构。
很多开发者在搭建Python后端环境时,往往被CentOS 8的包管理变化和环境隔离问题困扰,特别是对于习惯使用Ubuntu或Debian的用户来说,RHEL系发行版的逻辑差异容易导致配置失误,本文将提供一套经过验证的实操方案,确保你在2026年的技术栈中,能够稳定、高效地部署Django应用。
CentOS 8环境准备与Python安装
Django是基于Python开发的,因此第一步是确保系统拥有正确版本的Python,CentOS 8默认包含Python 3.6,但对于现代Django版本(如4.x或5.x),建议安装更新的Python 3.9或更高版本。
更新系统包管理器
在开始任何安装之前,刷新软件源索引是基础操作,打开终端,执行以下命令:
sudo dnf update -y
这一步能确保你获取最新的软件包元数据,避免后续安装出现版本冲突。
安装Python 3及必要依赖
CentOS 8的AppStream仓库中通常包含较新的Python版本,如果默认版本过低,可以通过模块流(Module Stream)切换。
sudo dnf module install python39 -y
安装完成后,验证Python版本:
python3 --version
还需要安装编译工具和开发库,因为某些Django依赖包(如psycopg2用于PostgreSQL连接)需要C编译器:
sudo dnf install gcc libpq-devel python3-devel -y
业内专家指出,忽略开发库的安装是导致许多第三方库编译失败的常见原因,务必确保这些依赖齐全。
虚拟环境配置与Django安装
在生产环境中,绝对不要在全局Python环境中安装Django,虚拟环境能隔离项目依赖,防止系统级冲突。
创建虚拟环境
使用Python自带的venv

模块创建隔离环境,假设你的项目目录为/var/www/myproject:
cd /var/www sudo mkdir myproject sudo chown $USER:$USER myproject cd myproject python3 -m venv venv
激活虚拟环境:
source venv/bin/activate
激活后,命令行提示符前会出现(venv)字样,表明当前环境已切换。
安装Django及相关依赖
在虚拟环境中,使用Pip安装Django,建议指定版本以确保稳定性:
pip install django gunicorn psycopg2-binary
这里安装gunicorn作为生产级WSGI服务器,psycopg2-binary用于连接PostgreSQL数据库,如果项目轻量,也可使用MySQL,需安装mysqlclient。
安装完成后,验证Django版本:
django-admin --version
你的开发环境已就绪,接下来需要配置Django项目本身。
Django项目初始化与安全配置
创建项目并配置生产环境参数是部署的关键环节,许多新手在此阶段因配置不当导致安全漏洞或服务无法启动。
创建新项目
django-admin startproject config .
注意末尾的点号,这会将项目文件创建在当前目录,便于管理。
配置settings.py
编辑config/settings.py文件,修改以下关键参数:
- ALLOWED_HOSTS:必须填入你的服务器IP地址或域名。
ALLOWED_HOSTS = ['your_domain.com', '192.168.1.100'],如果不配置,Django将拒绝所有外部请求。 - DEBUG:生产环境中必须设置为
False,这会隐藏错误详情,提升安全性。 - SECRET_KEY:使用
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'生成新的密钥,并替换默认值。 - 数据库设置:根据你选择的数据库(PostgreSQL/MySQL),配置
字典中的ENGINE、NAME、USER和PASSWORD。
DATABASES
静态文件收集
Django在开发模式下自动处理静态文件,但在生产模式下,需要手动收集它们。
python manage.py collectstatic
这会将所有静态资源(CSS、JS、图片)复制到STATIC_ROOT指定的目录,供Nginx直接服务。
Nginx与Gunicorn生产环境部署
Gunicorn负责处理Python请求,Nginx作为反向代理处理静态文件和负载均衡,这种组合是业内共识认为最稳定的Django部署方案。
安装Nginx
sudo dnf install nginx -y sudo systemctl start nginx sudo systemctl enable nginx
创建Gunicorn服务文件
在/etc/systemd/system/目录下创建gunicorn.service文件:
[Unit] Description=Gunicorn daemon for Django project After=network.target [Service] User=your_username Group=nginx WorkingDirectory=/var/www/myproject ExecStart=/var/www/myproject/venv/bin/gunicorn --workers 3 --bind unix:/var/www/myproject/myproject.sock config.wsgi:application [Install] WantedBy=multi-user.target
注意替换your_username和项目名称。--bind unix:/var/www/myproject/myproject.sock指定了Gunicorn通过Unix socket与Nginx通信,比TCP端口更高效且安全。
启动并启用Gunicorn:
sudo systemctl start gunicorn sudo systemctl enable gunicorn
配置Nginx反向代理
在/etc/nginx/conf.d/目录下创建myproject.conf:
server {
listen 80;
server_name your_domain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/myproject.sock;
}
}
重启Nginx使配置生效:

sudo systemctl restart nginx
防火墙与SELinux配置
CentOS 8默认启用防火墙和SELinux,未正确配置会导致访问被拒。
开放HTTP/HTTPS端口
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
SELinux权限设置
如果SELinux阻止Gunicorn创建socket或访问静态文件,需设置上下文:
sudo setsebool -P httpd_can_network_connect 1 sudo chcon -Rt httpd_sys_rw_content_t /var/www/myproject/static
常见问题排查与维护
部署完成后,监控日志是维护的关键。
查看日志
Gunicorn日志可通过journalctl查看:
sudo journalctl -u gunicorn
Nginx错误日志位于/var/log/nginx/error.log。
自动重启机制
确保Gunicorn在系统重启后自动启动,已在[Install]部分配置,若服务异常,可手动重启:
sudo systemctl restart gunicorn
CentOS 8安装Django常见问题解答
CentOS 8如何安装Django虚拟环境
使用python3 -m venv venv创建环境,并通过source venv/bin/activate激活,务必确保Python版本符合Django要求,且所有依赖在虚拟环境中安装,避免污染系统环境。
Django生产环境Nginx配置要点
核心在于设置proxy_pass指向Gunicorn的Unix socket,并正确配置STATIC_ROOT路径,必须设置ALLOWED_HOSTS以匹配域名,否则Django将返回400错误。
CentOS 8配置Django防火墙规则
使用firewall-cmd --permanent --add-service=http开放80端口,--add-service=https开放443端口,最后执行--reload生效,若使用SELinux,需额外配置httpd_can_network_connect布尔值以允许Nginx代理请求。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/401546.html
