Ubuntu Apache Server 部署 Flask 程序

很早前做过一个 HTML table 转 markdown table 的小程序 HTML2Markdown,一直以为出了我别人应该没这么特殊的需求。但博客和 Github 上有小伙伴表示自己也有这个需求,如果能在 windows 上也能用就好了。然而 windows 开发爱莫能助,想了下以前用过 Python Flask,就使用 Flask 简单实现了该功能。下面就简单记录一下把 Flask 程序部署到服务器的过程。

注:本文是 Digital Ocean 社区上的的 How To Deploy a Flask Application on an Ubuntu VPS 的翻译

安装 mod_wsgi

WSGI (Web Server Gateway Interface) 是Python应用程序或框架和Web服务器之间的一种接口。我们需要在服务器上安装并启用它。
ssh连接到服务器后用一下命令安装和启动 WSGI。

1
2
sudo apt-get install libapache2-mod-wsgi python-dev
sudo a2enmod wsgi

创建 Flask 程序

这一步主要是用来创建一个 demo app,如果有现成的 Flask 程序可以跳过这一步。
创建应用目录结构:

1
2
3
4
5
6
cd /var/www
sudo mkdir html2markdown
cd html2markdown
sudo mkdir app
cd app
sudo mkdir static templates

此时你的目录结构应该如下:

1
2
3
4
html2markdown
└── app
├── static
└── templates

在 app 目录下创建 __init__.py 文件,文件内容如下:

1
2
3
4
5
6
7
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, I love Digital Ocean!"
if __name__ == "__main__":
app.run()

安装 Flask

为了避免程序的环境影响系统环境或反之,一般需要用虚拟环境来安装应用依赖。所以我们先为此 app 安装虚拟环境。

我们使用 pip 来安装 virtualenvFlask。如果还没安装 pip ,先使用 apt-get 安装。

1
sudo apt-get install python-pip

接下来使用 pip 安装 virtualenv

1
sudo pip install virtualenv

创建虚拟环境,此操作应该在 html2markdown/app 进行。其中 venv 为虚拟环境名字,可以自定义取名。

1
sudo virtualenv venv

激活虚拟环境

1
source venv/bin/activate

安装 Flask

1
sudo pip install Flask

运行程序

1
sudo python __init__.py

此时如果显示 Running on http://localhost:5000/Running on http://127.0.0.1:5000/ 表示配置成功。

创建 .wsgi 文件

Apache 使用 .wsgi 来启动 Flask 程序。使用以下命令打开 /var/www/html2markdown 目录,创建一个 flaskapp.wsgi 文件。

1
2
cd /var/www/html2markdown
sudo nano flaskapp.wsgi

向文件增加以下内容,不包括#后的中文注释

1
2
3
4
5
6
7
8
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/html2markdown/") #你app的目录
from app import app as application
application.secret_key = 'Add your secret key' #随机秘钥

此时你的目录结构应该如下

1
2
3
4
5
6
7
html2markdown/
├── app
│   ├── __init__.py
│   ├── static
│   ├── templates
│   └── venv
└── flaskapp.wsgi

增加 apache 虚拟主机

输入以下命令创建虚拟主机配置文件

1
sudo nano /etc/apache2/sites-available/html2markdown.conf

配置虚拟主机信息,别忘了修改 ServerName,WSGIScriptAlias 和 项目路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:80>
ServerName html2markdown.eliyar.biz
WSGIScriptAlias / /var/www/html2markdown/flaskapp.wsgi
<Directory /var/www/html2markdown/app/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/html2markdown/app//static
<Directory /var/www/html2markdown/app/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

启动该虚拟主机

1
2
sudo a2ensite html2markdown
sudo service apache2 restart

此时去访问设定的连接 [http://html2markdown.eliyar.biz](http://html2markdown.eliyar.biz) 即可看到部署已成功。

参考