news 2026/7/15 2:09:56

从零到一:在Ubuntu 20.04上部署Django项目的避坑指南与实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:在Ubuntu 20.04上部署Django项目的避坑指南与实战

1. 环境准备:从零搭建Ubuntu 20.04服务器

第一次部署Django项目时,我踩过的第一个坑就是服务器环境配置。Ubuntu 20.04虽然预装了Python 3.8,但直接使用系统自带的Python可能会导致后续依赖冲突。这里推荐用pyenv管理多版本Python环境,实测能避开90%的依赖问题。

先更新系统基础包:

sudo apt update && sudo apt upgrade -y sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev

安装pyenv(不要用root用户操作):

curl https://pyenv.run | bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc exec $SHELL

安装特定Python版本(以3.8.12为例):

pyenv install 3.8.12 pyenv global 3.8.12

验证安装:

python -V # 应显示Python 3.8.12 pip -V # 应显示对应pip版本

提示:如果遇到SSL相关错误,可能是系统OpenSSL版本不兼容,可尝试PYTHON_CONFIGURE_OPTS="--with-openssl=/usr/include/openssl" pyenv install 3.8.12

2. 项目依赖与虚拟环境配置

很多教程会推荐直接全局安装依赖,但实际项目中这会导致严重的环境污染。我的血泪教训是:必须为每个项目创建独立虚拟环境!

创建项目目录并初始化虚拟环境:

mkdir ~/myproject && cd ~/myproject python -m venv venv source venv/bin/activate

安装基础依赖(注意版本号):

pip install django==4.2 uwsgi==2.0.21

这里有个隐藏大坑:uWSGI必须用pip安装,如果用apt安装会出现Python插件缺失。我曾因此浪费三小时排查502错误。

验证uWSGI是否正常:

uwsgi --version # 应显示2.0.21

项目依赖建议保存到requirements.txt:

pip freeze > requirements.txt

3. Nginx配置的七个关键细节

Nginx配置不当会导致静态文件404、API请求超时等问题。这是我的生产级配置模板:

server { listen 80; server_name yourdomain.com; # 静态文件配置(必须放在location / 前面!) location /static/ { alias /home/user/myproject/static/; expires 30d; access_log off; } # 媒体文件配置 location /media/ { alias /home/user/myproject/media/; expires 7d; } # 主应用配置 location / { include uwsgi_params; uwsgi_pass unix:///tmp/myproject.sock; uwsgi_read_timeout 300s; # 解决413 Request Entity Too Large client_max_body_size 100M; # 重要头信息传递 uwsgi_param Host $host; uwsgi_param X-Real-IP $remote_addr; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; } # 禁止访问.git等隐藏文件 location ~ /\. { deny all; } }

关键注意事项:

  1. 静态文件alias路径必须以/结尾
  2. uWSGI socket文件权限要设为www-data用户可读写
  3. 超时时间根据业务需求调整,API接口建议300秒以上
  4. 生产环境务必配置SSL证书

4. uWSGI的魔鬼细节配置

uWSGI的配置直接影响服务稳定性。这是我的优化配置(uwsgi.ini):

[uwsgi] chdir = /home/user/myproject module = myproject.wsgi:application # 使用unix socket比TCP性能更好 socket = /tmp/myproject.sock chmod-socket = 666 vacuum = true # 进程数 = CPU核心数*2+1 processes = 5 threads = 2 # 优雅的重启配置 max-requests = 1000 harakiri = 30 reload-on-as = 512 reload-on-rss = 256 # 日志记录 daemonize = /var/log/uwsgi/myproject.log disable-logging = true

常见问题解决方案:

  • socket权限问题:执行sudo chown www-data:www-data /tmp/myproject.sock
  • 内存泄漏:设置max-requests定期重启worker
  • Django静态文件收集:先执行python manage.py collectstatic

5. 部署后的必备调优

部署完成后还有几个关键检查点:

  1. 防火墙配置
sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable
  1. 服务自启动(使用systemd): 创建/etc/systemd/system/myproject.service
[Unit] Description=MyProject uWSGI Service After=network.target [Service] User=user Group=www-data WorkingDirectory=/home/user/myproject Environment="PATH=/home/user/myproject/venv/bin" ExecStart=/home/user/myproject/venv/bin/uwsgi --ini uwsgi.ini [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload sudo systemctl start myproject sudo systemctl enable myproject
  1. 性能监控: 安装uwsgitop实时监控:
pip install uwsgitop uwsgitop /tmp/myproject.sock

6. 故障排查指南

当出现502错误时,按这个顺序排查:

  1. 检查uWSGI日志:tail -f /var/log/uwsgi/myproject.log
  2. 检查Nginx错误日志:tail -f /var/log/nginx/error.log
  3. 手动启动uWSGI测试:uwsgi --ini uwsgi.ini --http :8000
  4. 检查socket文件权限:ls -l /tmp/myproject.sock

数据库连接问题特别常见,在settings.py中增加:

DATABASES = { 'default': { 'CONN_MAX_AGE': 600, # 连接池保持时间 'OPTIONS': { 'connect_timeout': 5, # 连接超时设置 } } }

7. 安全加固措施

生产环境必须做的安全配置:

  1. 关闭DEBUG模式:
DEBUG = False ALLOWED_HOSTS = ['yourdomain.com', 'IP地址']
  1. 配置CSRF_TRUSTED_ORIGINS:
CSRF_TRUSTED_ORIGINS = ['https://yourdomain.com']
  1. 自动备份方案(每日凌晨执行):
# 备份数据库 pg_dump -U username dbname > db_backup.sql # 备份代码和媒体文件 tar -czvf project_backup_$(date +%F).tar.gz /home/user/myproject

这套配置经过多个百万PV项目验证,最久稳定运行超过400天。记得定期更新依赖包版本,我习惯每月第一个周一执行pip list --outdated检查更新。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 2:08:43

清华AI教程:神经网络与OpenCV实战,零基础掌握深度学习

自学AI首选200集清华教程!涵盖神经网络、深度学习与OpenCV实操,零基础补齐全部专业知识!最近很多同学在后台咨询如何系统学习AI技术,特别是神经网络、深度学习和计算机视觉这些热门方向。网上资料虽然多,但往往零散不成…

作者头像 李华
网站建设 2026/7/15 2:06:42

MZmine 4.5.0:5个步骤快速上手,让质谱数据分析变得简单有趣

MZmine 4.5.0:5个步骤快速上手,让质谱数据分析变得简单有趣 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 你是否曾被复杂的质谱数据分析软件吓退?面对海量的质谱数据…

作者头像 李华
网站建设 2026/7/15 2:04:48

Gemma 4B手机端离线部署实战:轻量大模型本地AI推理指南

1. 项目概述:当大模型真正“揣进裤兜”,我们到底在用什么?“谷歌Gemma 4实测:手机断网也能用,本地AI时代真的来了”——这个标题一出来,我手边正在调试的三台测试机同时亮了屏。不是因为推送通知&#xff0…

作者头像 李华
网站建设 2026/7/15 2:04:06

模板驱动型文档自动化:零代码实现专业PDF批量生成

1. 项目概述:用模板把文档生产变成“填空题”你有没有经历过这种场景:每周要给客户出5份结构雷同但内容微调的方案书,每份都要手动调整封面、目录层级、页眉页脚、公司LOGO位置、服务条款段落顺序;或者运营团队每月初要批量生成30…

作者头像 李华
网站建设 2026/7/15 2:03:42

智谱AI GLM-5.2模型API调用实战:低成本构建高性能AI应用

在AI应用开发过程中,API调用成本一直是开发者关注的重点问题。随着智谱AI等国内厂商不断推出更具性价比的模型服务,开发者现在有了更多选择。本文将详细介绍如何基于智谱AI开放平台构建低成本、高性能的AI应用,重点分析GLM-5.2等模型的特性、…

作者头像 李华
网站建设 2026/7/15 2:02:24

Windows 7桌面图标任务栏:从基础操作到系统原理深度解析

如果你正在准备专升本计算机基础考试,或者在工作中需要维护Windows 7系统,那么桌面、图标和任务栏这三个看似基础的概念,可能比你想象的更重要。很多人在学习Windows 7时,往往只记住了表面的操作步骤,却没有理解这些界…

作者头像 李华