You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在生产环境Apache2上部署搭载ASGI Django应用的EC2实例

在EC2实例的Apache2服务器部署ASGI Django应用(生产环境)

前提准备

  • EC2实例(推荐Ubuntu/Debian系统)正常运行,已开放80/443端口
  • 实例已安装Python3、pip,本地Django应用可正常运行
  • 拥有EC2的SSH访问权限

步骤1:安装核心依赖

更新系统包并安装Apache及相关模块:

sudo apt update && sudo apt upgrade -y
sudo apt install apache2 libapache2-mod-wsgi-py3 python3-dev python3-venv -y

创建并激活Python虚拟环境:

cd /var/www
sudo mkdir django-app && cd django-app
sudo python3 -m venv venv
source venv/bin/activate

安装Django与ASGI服务器依赖:

pip install django uvicorn

步骤2:部署Django应用代码

通过SCP或Git将本地代码上传至EC2的/var/www/django-app/目录:

# SCP示例:替换为你的密钥和实例地址
scp -i your-key.pem -r /本地项目路径/* ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com:/var/www/django-app/

修改Django项目settings.py的生产环境配置:

ALLOWED_HOSTS = ['你的EC2公网IP/域名']
DEBUG = False
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

收集静态文件:

python manage.py collectstatic

步骤3:配置Uvicorn ASGI服务器

创建启动脚本start_uvicorn.sh:

#!/bin/bash
cd /var/www/django-app
source venv/bin/activate
uvicorn 你的项目名.asgi:application --host 127.0.0.1 --port 8000

赋予执行权限并测试启动:

sudo chmod +x start_uvicorn.sh
./start_uvicorn.sh

确认无报错后,按Ctrl+C停止临时运行。

步骤4:配置Apache反向代理

启用Apache代理模块:

sudo a2enmod proxy proxy_http proxy_wstunnel rewrite

创建虚拟主机配置文件/etc/apache2/sites-available/django-app.conf:

<VirtualHost *:80>
    ServerName 你的EC2公网IP或域名

    # 静态文件映射
    Alias /static /var/www/django-app/staticfiles
    <Directory /var/www/django-app/staticfiles>
        Require all granted
    </Directory>

    # 反向代理到Uvicorn
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    ErrorLog ${APACHE_LOG_DIR}/django-app-error.log
    CustomLog ${APACHE_LOG_DIR}/django-app-access.log combined
</VirtualHost>

启用站点并重启Apache:

sudo a2ensite django-app.conf
sudo systemctl restart apache2

步骤5:设置Uvicorn开机自启

创建systemd服务文件/etc/systemd/system/uvicorn-django.service:

[Unit]
Description=Uvicorn service for Django ASGI app
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/var/www/django-app
Environment="PATH=/var/www/django-app/venv/bin"
ExecStart=/var/www/django-app/venv/bin/uvicorn 你的项目名.asgi:application --host 127.0.0.1 --port 8000

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable uvicorn-django.service
sudo systemctl start uvicorn-django.service

检查服务状态:

sudo systemctl status uvicorn-django.service

步骤6:配置SSL证书(生产环境必做)

安装Certbot并生成Let's Encrypt证书:

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d 你的域名

按照提示完成配置,Apache会自动切换为HTTPS访问。

常见问题排查

  • 出现500错误时,查看Apache日志:sudo tail -f /var/log/apache2/django-app-error.log
  • 确认Uvicorn服务正常运行,端口8000未被占用
  • 调整项目权限:sudo chown -R ubuntu:www-data /var/www/django-app

内容的提问来源于stack exchange,提问作者Kathir A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:27:24