Amazon Linux 2实例pip安装mod_wsgi报错解决及Django部署教程咨询
报错根因说明
mod_wsgi需要从源码编译安装,依赖Apache提供的apxs扩展工具,你当前系统没有安装Apache的开发包所以触发报错。你之前找不到setup.py是因为pip将编译临时文件放在/tmp目录下,安装失败后临时目录会被自动清理,因此在当前工作目录无法搜索到对应文件,不需要再找该文件。
安装mod_wsgi的解决步骤
- 首先安装编译所需的全部依赖组件:
sudo yum install -y httpd httpd-devel gcc python3-devel - 再重新执行安装命令,如果普通用户安装提示目录不可写,可添加
--user参数:python3 -m pip install --user mod_wsgi - 安装完成后执行以下命令验证安装状态,正常返回版本号即说明安装成功:
mod_wsgi-express --version
Amazon Linux 2 EC2 实例使用Apache + mod_wsgi部署Django项目步骤
- 1 配置系统权限:临时关闭SELinux避免访问拦截,执行
sudo setenforce 0,如需永久关闭可修改/etc/selinux/config文件将SELINUX参数值改为disabled。 - 2 上传项目代码:将本地Django项目代码上传到EC2实例的
/var/www/目录下,进入项目根目录执行python3 -m pip install -r requirements.txt --user安装项目依赖。 - 3 修改Django配置:编辑项目根目录下的
settings.py,修改以下参数:DEBUG = FalseALLOWED_HOSTS = ['你的EC2实例公网IP', '你的域名(如有)']- 新增配置
STATIC_ROOT = '/var/www/static/'
- 4 收集静态文件:在项目根目录执行
python3 manage.py collectstatic,系统会自动将所有静态文件导出到/var/www/static/目录。 - 5 配置Apache虚拟主机:新建
/etc/httpd/conf.d/django.conf配置文件,写入以下内容,替换其中的占位符为你自己的项目信息:
<VirtualHost *:80> ServerName 你的EC2公网IP/域名 Alias /static/ /var/www/static/ <Directory /var/www/static> Require all granted </Directory> <Directory /var/www/你的项目根目录名/项目同名核心目录> <Files wsgi.py> Require all granted </Files> </Directory> WSGIDaemonProcess 自定义项目标识 python-path=/var/www/你的项目根目录名 python-home=/home/ec2-user/.local/lib/python3.7/site-packages WSGIProcessGroup 自定义项目标识 WSGIScriptAlias / /var/www/你的项目根目录名/项目同名核心目录/wsgi.py </VirtualHost>
注:python-home路径需要和你实际Python版本匹配,Amazon Linux 2默认Python3.7路径如上,若自行安装了其他版本需修改为对应路径。
- 6 配置目录权限:执行以下命令给Apache用户授予项目目录访问权限:
sudo chown -R apache:apache /var/www/你的项目根目录名sudo chown -R apache:apache /var/www/static - 7 启动服务:执行
sudo systemctl start httpd启动Apache,执行sudo systemctl enable httpd设置开机自启。 - 8 配置安全组:登录AWS控制台进入对应EC2实例的安全组配置,放行80端口的入站规则,之后即可通过公网IP访问Django项目。
内容的提问来源于stack exchange,提问作者tyzion
相关产品推荐
相关产品推荐

