Centos部署flask项目

最近要做一个小程序,某些功能需要用到python的插件,所以选择了python的flask框架来写后端的API,顺手出一个教程。

首先在服务器上安装了centos系统。

使用putty,输入用户名和密码登陆到Centos,打开状态:

输入下面指令安装宝塔服务器管理面板。(这个面板可以快捷的管理服务器以及安装一些常用软件)

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh
我们按照给的地址登陆到宝塔面板,会提示安装软件,我目标是使用python来做后端,所以不安装php这里我只选择了apache和mysql(如果想在web端管理数据库可以安装phpmyadmin,我使用navicat就不安装了)。 安装中: 安装完成后我们创建一个站点测试一下 访问一下站点目录 这里配置一下ssl(https安全访问,非必需)点击网站设置—SSL,宝塔给出了详细帮助,这里不赘述。 再访问一次网站,以及变成了https 接下来安装SVN(代码仓库,可以方便的管理代码,宝塔默认的ftp也是可以的,但不推荐使用) 在终端输入yum install subversion 回车后自动安装 安装完成后输入mkdir {这里填你要放的目录,无需括号}(也可以使用宝塔的文件管理来创建,后面能用宝塔进行的操作都用宝塔来做了) 执行svnadmin create /svn创建一个代码仓库 如果报下面的错误 则创建下面的apr共享库配置文件,可以使用宝塔面板的文件管理创建 在/etc/ld.so.conf.d/目录下建立一个文件httpd-apr.conf,里面写上 /www/server/apache/lib 创建成功后,执行
ldconfig -v重新加载配置

此时svn仓库可以创建了(下图文宝塔文件管理的显示)

目录下有这些文件,接下来我配置一下。(图中可以看到具体是哪个文件)

去掉四项注释(删除前面的#和空格即可,图中显示为绿色)

配置用户名和密码 这里我随意添加了几个。

前面是指定用户组
rw表示读写权限
注意最后的* = (空)意味着除了用户组以外没有权限
然后我们去宝塔的系统安全里面放行svn的3690端口

然后我们启动svn

svnserve -d -r /svn/

接下来可以连接了,在自己电脑上checkout svn://你的服务器ip 尝试一下
接下来我们让SVN提交的代码同步到apache目录(实时更新)
首先我们在web目录(宝塔的站点信心里面有位置)下checkout一次

svn co svn://……此处省略……  ……这里是web目录……


回到svn的hooks目录下,创建文件

post-commit

输入以下内容

#!/bin/sh
REPOS="$1"
REV="$2"
export LANG=en_US.utf8
SVN_PATH=/usr/bin/svn
WEB_PATH=……这里是web目录……
$SVN_PATH update $WEB_PATH --username '用户名' --password '密码' --no-auth-cache

配置完成后可以尝试一下看能不能成功同步。
接下来有个比较坑的问题 安装python3,如果使用python2就不需要安装了,原有的python2不能变动,升版本都不行。否则宝塔面板无法使用。
这里要注意一点安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository)

yum install libffi-devel -y(这个一般被人忽略)
sudo yum install yum-utils

使用yum-builddep为Python3构建环境,安装缺失的软件依赖,使用下面的命令会自动处理.

sudo yum-builddep python

完成后下载Python3的源码包(笔者以Python3.7.1为例),Python源码包目录: https://www.python.org/ftp/python/,执行

curl -O https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz

最后一步,编译安装Python3,默认的安装目录是 /usr/local 如果你要改成其他目录可以在编译(make)前使用 configure 命令后面追加参数 "–prefix=/alternative/path" 来完成修改。

$ tar xf Python-3.7.1.tgz
$ cd Python-3.7.1
$./configure --enable-shared  (--enable-shared很重要,这个坑也很大,不添加可以正常安装,但是会影响mod)
$ make
$ sudo make install

安装成功

/etc/profile.d/目录下建python3.shpip3.shpippython安装扩展的工具)

alias python='/usr/local/bin/python3.7 指向对应的文件, pip

然后ldconfig(重载配置)一下 python3pip3就可以正常运行了


我们安装一下flask框架

执行pip3 install flask

然后到了mod_wsgi了,很多人在这里会遇到找不到对应版本的mod_wsgi.so(windows下是whl文件)的问题,或者版本不匹配,网上的教程大部分都是建议去找这个对应版本的下载。
其实这个文件是可以自己编译的下载mod_wsgi的源代码包,解压缩后编译:

wget https://files.pythonhosted.org/packages/47/69/5139588686eb40053f8355eba1fe18a8bee94dc3efc4e36720c73e07471a/mod_wsgi-4.6.5.tar.gz
tar zxvf ./ mod_wsgi-4.6.5.tar.gz
cd mod_wsgi-4.6.5
./configure --with-apxs=/www/server/apache/bin/apxs --with-python=/usr/local/bin/python3

apxs是apache的东西,需要指定对应目录自己改

make
make install


安装完成,看到没有,mod_wsgi.so自己生成到apache的模块目录下了。
还需要把mod_wsgi加载到apache目录的conf/httpd.conf里面

添加一行 LoadModule wsgi_module modules/mod_wsgi.so
					

至此所有软件都装完了 我们尝试部署一个简易flask项目,注意,这些文件必须使用Linux编码,window下创建的文件直接上传会报500。


				


				

配置一下apache的httpd.conf(由于我们使用的宝塔)
实际网站的配置目录为/www/server/panel/vhost/apache/*.conf(在httpd.conf中include了这个文件)
在443(因为前面配置了https,没配置https默认是在80端口下)端口的<VirtualHost>里面加上,目录自行对应修改

   <Directory "/www/wwwroot/……这里是apache站点目录……/webapi/">
    AllowOverride All
    Require all granted
    </Directory>
    WSGIDaemonProcess webapi python-path=/usr/local/lib/python3.7/site-packages(这一行很重要,容易被忽视,没有的话即使import了flask,也不能使用,报错500)
    WSGIProcessGroup webapi
WSGIScriptAlias /webapi /www/wwwroot/……这里是apache站点目录…… /webapi/webapi.wsgi

好啦全都搞定啦,访问试一下:

配置成功!
顺便提一下通过CGI直接执行*.py程序的配置方式
通过cgi访问python ,还是修改上面那个conf文件

   <Directory "/www/wwwroot/……这里是apache站点目录……/webapi/">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
</Directory>

不需要配置路由,直接访问*.py就可以了(但是这样是不能使用web框架的)

发表评论