在部署flask的web服务器时,通过flask官方文档可以看到有几种推荐的方式,选择使用apache+mod_wsgi来部署。尽管之前在学习django时候用apache+mod_wsgi部署过一次,但是这次依然踩了许多坑。记录一下部署的过程。
前提: 我使用的是python3,并且使用虚拟环境。
目录
步骤
在主py文件中,添加如下代码(有了则不用添加)。(我的是test.py文件)
if __name__ == '__main__':
app.run()
安装apache,这一步没什么好说的,直接安装
apt-get install apache2
然后安装mod_wsgi(注意,坑来了!)
注意:根据flask的apache+mod_wsgi文档的步骤,应该运行
$ apt-get install libapache2-mod-wsgi
这条指令,实际上这样默认安装的是python2.7版本的,到最后观察apache服务器错误日志会发现版本,并且提示模块未安装。因此,正确的命令应该是下面这条(好在我在最后直接输入下面一条指令就OK了,不用去卸载掉,防止又踩坑= =):
apt-get install libapache2-mod-wsgi-py3
配置wsgi文件
在项目的主目录下(我的是/root/flasktest/flask_test),创建一个.wsgi文件,内容如下。我命名为flasktest.wsgi。
import sys
sys.path.insert(0,'/root/flasktest/flask_test')
from test import app as application
如果使用虚拟环境,则需要在flasktest.wsgi的顶部添加如下3行代码(针对python3!)
activate_this = '/root/flasktest/flask_env/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
配置apache。
apache2路径为 /etc/apache2。包含如下文件和目录。
其中,会用到的有:
apache2.conf(主要配置文件)
sites-available(可以用的站点配置)
sites-enabled(启用的站点配置)
实际上,我们要做的就是在sites-available中创建一个配置,并且在sites-enabled中创建一个软连接。再重启一下apache服务即可!
- 命令介绍:
a2dissite:移除已经启用的配置。
a2ensite:启用可用的配置。
上图是apache2服务的常用命令,很好理解,常用
apache2ctl configtest 查看状态
apache2ctl restart 重启服务
具体操作:
发现在安装好以后,有一个默认启用的配置,用a2dissite指令把它(软连接)给关(删)了!
a2dissite 000-default.conf
在路径(/etc/apache2/sites-available)下用vim命令创建配置文件.conf。我的命名为(flask_test.conf),其内容如下:(还有很多可以填写的参数,比如媒体文件,静态文件,参考官方文档)
<VirtualHost *:80>
ServerName **.**.**.** #IP地址
DocumentRoot /root/flasktest/flask_test #项目文件夹的绝对路径
WSGIDaemonProcess test #项目文件的名称
WSGIScriptAlias / /root/flasktest/flask_test/flasktest.wsgi #项目.wsgi文件
<Directory /root/flasktest/flask_test> #项目文件夹的路径
WSGIProcessGroup test #项目主文件的名称
WSGIApplicationGroup %{GLOBAL}
Require all granted #授予权限
</Directory>
</VirtualHost>
接着,启用该配置
a2ensite flask_test.conf
修改一下/etc/apache2下的主配置文件(我在测试踩坑的时候修改了,不改可能也没事)
<Directory />
Options FollowSymLinks
AllowOverride None
Require all granted #把deny修改为授予权限granted
</Directory>
重启服务
apache2ctl restart
运行结果
此时,如果项目文件不在root目录下,应该是可以正确运行的。但是我之前把项目放在了root目录下,因此此时看到了如下错误
此时,我在网上查了资料以后猜测可能是root文件夹的权限问题。中途也修改了上述提到的apache.conf文件中的权限。因此使用chmod暴力修改了root权限。(强烈不建议这么干)。
- 修改前:
- 修改后
到此就部署就基本完成了,网页显示成功。
检错
默认的日志文件路径为/var/log/apache2
默认的错误日志文件存放在error.log中,在调试时候查看该文件能更好更快的解决遇到的问题。