CentOS 7下使用宝塔面板部署Django项目全攻略
1. 环境准备与基础配置在CentOS 7系统上部署Django项目需要先搭建基础运行环境。我推荐使用宝塔面板作为管理工具它能极大简化服务器环境配置流程。以下是具体操作步骤首先通过SSH连接服务器执行宝塔安装命令yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安装完成后通过浏览器访问面板默认地址为http://服务器IP:8888首次登录需要设置用户名和密码。进入面板后在软件商店中安装以下必备组件Nginx 1.20Python项目管理器推荐使用2.0版本MySQL/MariaDB根据项目需求选择版本phpMyAdmin可选用于数据库管理注意安装Python项目管理器时建议选择最新稳定版。我遇到过1.9版本与某些Django插件不兼容的情况2.0版解决了这些问题。2. Python环境与Django项目部署2.1 创建Python项目环境在宝塔面板中打开Python项目管理器点击添加项目选择Python版本推荐3.8指定项目路径如/www/wwwroot/myproject设置启动方式为uWSGI填写绑定端口通常使用8000勾选安装项目依赖选项安装完成后通过SSH进入项目目录创建虚拟环境cd /www/wwwroot/myproject python -m venv venv source venv/bin/activate2.2 部署Django项目代码将你的Django项目代码上传到项目目录可通过宝塔的文件管理器或Git部署。然后安装项目依赖pip install -r requirements.txt特别要注意的是必须包含以下关键依赖Django3.2 uwsgi daphne channels配置Django的settings.py文件确保包含以下关键设置ALLOWED_HOSTS [yourdomain.com, 服务器IP] STATIC_ROOT os.path.join(BASE_DIR, static)收集静态文件python manage.py collectstatic3. WSGI与ASGI服务器配置3.1 uWSGI配置在项目根目录创建uwsgi.ini配置文件[uwsgi] chdir /www/wwwroot/myproject module myproject.wsgi:application home /www/wwwroot/myproject/venv master true processes 4 socket /tmp/myproject.sock chmod-socket 666 vacuum true die-on-term true3.2 Daphne配置对于需要WebSocket支持的项目需要配置ASGI服务器。创建asgi.py如果不存在import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter os.environ.setdefault(DJANGO_SETTINGS_MODULE, myproject.settings) application ProtocolTypeRouter({ http: get_asgi_application(), # 其他协议配置... })创建daphne.service系统服务文件/etc/systemd/system/daphne.service[Unit] DescriptionDaphne ASGI server Afternetwork.target [Service] Userwww Groupwww WorkingDirectory/www/wwwroot/myproject ExecStart/www/wwwroot/myproject/venv/bin/daphne -u /tmp/daphne.sock myproject.asgi:application Restartalways [Install] WantedBymulti-user.target启动并启用服务systemctl daemon-reload systemctl start daphne systemctl enable daphne4. Nginx整合配置4.1 基础反向代理配置在宝塔面板中为项目添加站点然后在站点设置中配置Nginxupstream django { server unix:///tmp/myproject.sock; } upstream daphne { server unix:///tmp/daphne.sock; } server { listen 80; server_name yourdomain.com; location / { include uwsgi_params; uwsgi_pass django; } location /ws/ { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_pass http://daphne; } location /static/ { alias /www/wwwroot/myproject/static/; } location /media/ { alias /www/wwwroot/myproject/media/; } }4.2 HTTPS配置在宝塔面板中申请SSL证书Lets Encrypt免费证书即可然后添加以下配置server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /www/server/panel/vhost/cert/yourdomain.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/privkey.pem; # 其他配置与HTTP版本相同... }5. 常见问题排查与优化5.1 权限问题处理部署过程中最常见的坑是权限配置不当。确保项目目录所有者是www:wwwsock文件有正确的访问权限SELinux状态检查可临时设置为permissive模式测试chown -R www:www /www/wwwroot/myproject chmod 755 /www/wwwroot/myproject5.2 性能优化建议uWSGI进程数调整processes $(nproc) threads 2Nginx优化client_max_body_size 100M; keepalive_timeout 65; gzip on;Django静态文件缓存location /static/ { expires 365d; add_header Cache-Control public; alias /www/wwwroot/myproject/static/; }5.3 日志查看与调试关键日志位置Nginx访问日志/www/wwwlogs/yourdomain.com.logNginx错误日志/www/wwwlogs/yourdomain.com.error.loguWSGI日志/www/wwwroot/myproject/uwsgi.logDaphne日志journalctl -u daphne -f遇到问题时我通常会先检查这些日志文件。一个实用技巧是在开发阶段临时调高日志级别# settings.py DEBUG True LOGGING { version: 1, disable_existing_loggers: False, handlers: { console: { class: logging.StreamHandler, }, }, root: { handlers: [console], level: DEBUG, }, }6. 自动化部署与维护6.1 宝塔计划任务利用宝塔的计划任务功能可以轻松实现每日数据库备份定期清理日志自动更新依赖例如创建每日备份任务mysqldump -uusername -ppassword database_name /backups/db_$(date \%Y\%m\%d).sql find /backups -type f -mtime 7 -exec rm {} \;6.2 项目更新流程我常用的更新步骤通过Git拉取最新代码更新依赖迁移数据库如有变更重启服务可以编写一个简单的部署脚本deploy.sh#!/bin/bash cd /www/wwwroot/myproject git pull source venv/bin/activate pip install -r requirements.txt python manage.py migrate python manage.py collectstatic --noinput systemctl restart uwsgi systemctl restart daphne然后通过宝塔的WebHook功能可以在Git push后自动触发部署。在实际操作中我发现宝塔面板的Python项目管理器虽然方便但在处理复杂项目时可能不够灵活。这时候直接通过命令行管理反而更高效。特别是当需要自定义uWSGI参数或处理特殊依赖时手动配置能提供更好的控制。

相关新闻