在CentOS上运行Flask
由于Heroku取消了免费计划,我将使用Flask和PostgreSQL创建的应用迁移到了Sakura的VPS上。以下是迁移过程的备忘录。
版本
CentOS 7 是操作系统的版本。Python 3.7.9 是编程语言的版本。mod_wsgi 4.5.6 是一个模块的版本。
安装Apache。
yum install httpd
启动Apache
systemctl start httpd
设置使得Apache在服务器启动时自动启动。
systemctl enable httpd
请设置防火墙以允许HTTP通信和HTTPS通信。
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
重新启动防火墙
firewall-cmd --reload
安装用于Python的必要软件包
yum groupinstall "Development Tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
yum install httpd-devel python-devel wget
安装Python3系列
CentOS默认安装了Python 2系列,但要使用mod_wsgi需要安装Python 3系列。
cd /usr/local/src
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
tar zxvf Python-3.7.9.tgz
cd Python-3.7.9
./configure --enable-shared
make && make altinstall
ln -s /usr/local/bin/python3.7 /usr/bin/python3
ln -s /usr/local/lib/libpython3.7m.so.1.0 /lib64/
python3.7 --version //Pythonのバージョンが3.7.9になればOK
ln -s /usr/local/bin/pip3.5 /usr/bin/pip3.7
pip3.7 --version //pipのバージョンを確認
安装mod_wsgi。
cd /usr/local/src
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.6.tar.gz
tar zxvf 4.5.6.tar.gz
cd mod_wsgi-4.5.6
./configure --with-apxs=/bin/apxs --with-python=/usr/local/bin/python3.7
make && make install
chmod 755 /etc/httpd/modules/mod_wsgi.so
安装Flask
pip3.7 install flask
应用程序的设置
目录结构看起来是这样的
-
- /var/www/html/
-
- – app.py
- – application.wsgi
app.py文件的设置
import sys
from flask import Flask,request
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World"
if __name__=="__main__":
app.run()
应用程序.wsgi文件的配置
import sys
sys.path.insert(0,"/var/www/html")
from app import app as application
(附注)如果在Blueprint中分割应用程序,那么就会有application.wsgi文件。
import sys
sys.path.insert(0,"/var/www/html")
from app import create_app
application = create_app()
增加flask.conf
请创建/etc/httpd/conf.d/flask.conf,并在其中写入以下内容。
LoadModule wsgi_module ./modules/mod_wsgi.so
<VirtualHost *:80>
WSGIScriptAlias / /var/www/html/application.wsgi
<Directory /var/www/html/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
重新启动apache。
service httpd restart
安装PostgreSQL。
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql-devel
安装Python库
pip3.7 install sqlalchemy
pip3.7 install flask_login
pip3.7 install openpyxl
pip3.7 install psycopg2
PostgreSQL和应用程序的协作详见本文。