在ubuntu16.04上使用Apache+mod_wsgi部署python的flask服务器

3 篇文章 0 订阅
2 篇文章 0 订阅

在部署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中,在调试时候查看该文件能更好更快的解决遇到的问题。

apache
mod_wsgi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值