如何在生产环境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
相关产品推荐
相关产品推荐

