Django + uWSGI 部署至 Ubuntu 完整指南

Django + uWSGI 部署至 Ubuntu 完整指南

📋 部署架构

复制代码
用户 → Nginx → uWSGI → Django
        ↓
    静态文件

🔧 一、系统环境准备

1.1 安装 Ubuntu 22.04 Server

  • 下载官方镜像(推荐国内镜像站)
  • 制作启动盘(如 BalenaEtcher)
  • 安装过程选择默认配置,开启 SSH 服务

1.2 基础系统配置

设置 root 密码
bash 复制代码
sudo passwd root
su root
开启 root 远程登录(生产环境慎用)
bash 复制代码
vim /etc/ssh/sshd_config
# 修改:PermitRootLogin yes
service sshd restart
配置固定 IP
bash 复制代码
# 安装网络工具
sudo apt install net-tools
# 编辑网络配置
sudo vim /etc/netplan/00-installer-config.yaml

示例配置:

yaml 复制代码
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
  version: 2

应用配置:

bash 复制代码
sudo netplan apply

🚀 二、安装基础软件

2.1 系统更新

bash 复制代码
sudo apt update
sudo apt upgrade -y

2.2 安装必要软件

bash 复制代码
# SSH
sudo apt install ssh
# Python 相关
sudo apt install python3 python3-pip python3-venv
# 数据库(如需)
sudo apt install postgresql postgresql-contrib
# 缓存服务(如需)
sudo apt install redis-server
# Web 服务器
sudo apt install nginx

2.3 配置 pip 国内源

bash 复制代码
mkdir ~/.pip
vim ~/.pip/pip.conf

内容:

ini 复制代码
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

🐍 三、Python 环境与 Django

3.1 创建虚拟环境

bash 复制代码
cd /var/www
sudo mkdir myproject
cd myproject
python3 -m venv venv
source venv/bin/activate

3.2 安装 Django 及依赖

bash 复制代码
pip install django==4.0.0
pip install uwsgi==2.0.20
pip install psycopg2-binary  # PostgreSQL 驱动
pip install redis

3.3 创建 Django 项目

bash 复制代码
django-admin startproject myproject .
python manage.py startapp myapp

3.4 配置 settings.py

python 复制代码
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-server-ip', '*']
# 静态文件配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
# 数据库配置(示例 PostgreSQL)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'postgres',
        'PASSWORD': 'your-password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

3.5 数据库迁移与静态文件收集

bash 复制代码
python manage.py migrate
python manage.py collectstatic --noinput
python manage.py createsuperuser

⚙️ 四、uWSGI 配置

4.1 安装 uWSGI 插件

bash 复制代码
sudo apt install uwsgi-plugin-python3

4.2 创建 uWSGI 配置文件

在项目根目录创建 uwsgi.ini

ini 复制代码
[uwsgi]
# 使用 socket 与 nginx 通信
socket = 127.0.0.1:8001
# 项目目录
chdir = /var/www/myproject
# WSGI 文件
module = myproject.wsgi:application
# 进程配置
master = true
processes = 4
threads = 2
# 权限
uid = www-data
gid = www-data
# 日志
daemonize = /var/log/uwsgi.log
pidfile = /tmp/uwsgi.pid
# 插件
plugin = python3
# 性能优化
harakiri = 60
max-requests = 5000
vacuum = true

4.3 测试 uWSGI

bash 复制代码
# 直接测试
uwsgi --http-socket :9000 --plugin python3 --wsgi-file myproject/wsgi.py
# 使用配置文件测试
uwsgi --ini uwsgi.ini

🌐 五、Nginx 配置

5.1 创建站点配置文件

bash 复制代码
sudo vim /etc/nginx/sites-available/myproject

配置内容:

nginx 复制代码
server {
    listen 80;
    server_name your-domain.com your-server-ip;
    
    # 字符编码
    charset utf-8;
    
    # 客户端上传大小限制
    client_max_body_size 75M;
    
    # 静态文件处理
    location /static/ {
        alias /var/www/myproject/staticfiles/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    # 媒体文件处理
    location /media/ {
        alias /var/www/myproject/media/;
        expires 30d;
    }
    
    # 主应用处理
    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass 127.0.0.1:8001;
        uwsgi_read_timeout 60;
        uwsgi_send_timeout 60;
    }
    
    # 错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

5.2 启用站点

bash 复制代码
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

🔄 六、服务管理

6.1 创建 uWSGI 系统服务

bash 复制代码
sudo vim /etc/systemd/system/uwsgi.service

服务配置:

ini 复制代码
[Unit]
Description=uWSGI Emperor Service
After=syslog.target
[Service]
User=www-data
Group=www-data
ExecStart=/usr/bin/uwsgi --ini /var/www/myproject/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
StandardError=syslog
[Install]
WantedBy=multi-user.target

6.2 启动和管理服务

bash 复制代码
# 重新加载 systemd
sudo systemctl daemon-reload
# 启动 uWSGI 服务
sudo systemctl start uwsgi
# 设置开机自启
sudo systemctl enable uwsgi
# 管理命令
sudo systemctl status uwsgi
sudo systemctl restart uwsgi
sudo systemctl stop uwsgi

🔍 七、部署验证

7.1 检查服务状态

bash 复制代码
# 检查 uWSGI 进程
ps aux | grep uwsgi
# 检查 Nginx 状态
sudo systemctl status nginx
# 检查端口监听
sudo netstat -tlnp | grep :8001

7.2 测试网站访问

bash 复制代码
# 本地测试
curl http://localhost
# 远程测试
curl http://your-domain.com

⚠️ 八、常见问题解决

8.1 uWSGI 插件问题

bash 复制代码
# 如果出现 plugin 相关错误
sudo apt install uwsgi-plugin-python3

8.2 权限问题

bash 复制代码
# 设置正确的文件权限
sudo chown -R www-data:www-data /var/www/myproject
sudo chmod -R 755 /var/www/myproject

8.3 Nginx 端口占用

bash 复制代码
# 检查端口占用
sudo lsof -i :80
# 杀死占用进程
sudo kill -9 PID

8.4 静态文件 404

bash 复制代码
# 重新收集静态文件
python manage.py collectstatic --noinput
# 检查 Nginx 配置中的路径

📊 九、性能优化

9.1 uWSGI 优化

ini 复制代码
# 在 uwsgi.ini 中添加
enable-threads = true
single-interpreter = true
die-on-term = true
memory-report = true
lazy-apps = true

9.2 Nginx 优化

nginx 复制代码
# 在 server 块中添加
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript;

🔒 十、安全配置

10.1 防火墙设置

bash 复制代码
sudo ufw enable
sudo ufw allow 'Nginx Full'
sudo ufw allow ssh

10.2 HTTPS 配置(Let's Encrypt)

bash 复制代码
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-domain.com

📋 部署检查清单

  • Ubuntu 系统安装完成
  • 网络配置正确
  • Python 虚拟环境创建
  • Django 项目配置完成
  • 数据库迁移完成
  • 静态文件收集完成
  • uWSGI 配置正确
  • Nginx 配置正确
  • 服务自启动设置完成
  • 防火墙配置完成
  • HTTPS 证书配置(如需要)
  • 日志轮转配置完成
  • 备份策略制定

🎯 总结

通过以上步骤,你可以在 Ubuntu 22.04 上成功部署 Django + uWSGI + Nginx 的生产环境。关键点包括:

  1. 环境隔离:使用 Python 虚拟环境
  2. 进程管理:uWSGI 处理 Django 应用
  3. Web 服务:Nginx 处理静态文件和反向代理
  4. 服务管理:systemd 管理服务自启动
  5. 安全配置 :防火墙和 HTTPS 保护
    记得定期检查日志、更新系统和备份数据,确保服务的稳定运行。

以上内容由AI生成,仅供参考和借鉴

相关推荐
q***49452 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
k***82512 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
new_dev2 小时前
Python网络爬虫从入门到实战
爬虫·python·媒体
q***01652 小时前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
今天没有盐2 小时前
Python算法实战:从滑动窗口到数学可视化
python·pycharm·编程语言
Learn Beyond Limits2 小时前
Data Preprocessing|数据预处理
大数据·人工智能·python·ai·数据挖掘·数据处理
lucky_dog2 小时前
python——课堂笔记😻
python
j***51894 小时前
vscode配置django环境并创建django项目(全图文操作)
vscode·django·sqlite
weixin_660096784 小时前
zsh中使用自动补全zsh-autosuggestions
linux·ubuntu·zsh·zshrc