目录
1.创建Python虚拟环境
2.设置Flask应用程序
3.创建WSGI入口点
4.配置Gunicorn
5.配置Supervisor
6.将Nginx配置为代理请求
1.创建Python虚拟环境
接下来,我们将设置一个虚拟环境,以便将Flask应用程序与系统上的其他Python文件隔离开来。
首先安装python3-venv软件包,安装venv模块:
sudo apt install python3-venv
接下来,让我们为Flask项目创建一个父目录。创建后移动到目录:
mkdir ~/myproject
cd ~/myproject
通过键入以下内容创建一个虚拟环境来存储Flask项目的Python需求:
python3.6 -m venv myprojectenv
这将安装Python的本地副本和pip进入项目目录中名为myprojectenv的目录。
在虚拟环境中安装应用程序之前,需要将其激活。输入以下命令:
source myprojectenv/bin/activate
您的提示将更改为表示您现在正在虚拟环境中运行。它看起来像这样:(myprojectenv)user@host:~/myproject$。
2.设置Flask应用程序
现在您已进入虚拟环境,可以安装Flask和Gunicorn并开始设计应用程序。
首先,让我们使用本地实例pip安装wheel,以确保我们的软件包即使丢失了轮存档也会安装:
pip install wheel
注意
无论您使用的是哪个版本的Python,在激活虚拟环境时,都应该使用pip命令(不是pip3)。
接下来,让我们安装Flask和Gunicorn:
pip install gunicorn flask
创建示例应用程序
现在您可以使用Flask,您可以创建一个简单的应用程序。Flask是一个微框架。它不包括许多功能更全面的框架可能存在的工具,并且主要作为一个模块存在,您可以将其导入到项目中以帮助您初始化Web应用程序。
虽然您的应用程序可能更复杂,但我们将在单个文件中创建Flask应用程序,名为myproject.py:
nano ~/myproject/myproject.py
应用程序代码将存在于此文件中。它将导入Flask并实例化Flask对象。您可以使用它来定义在请求特定路由时应运行的函数:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "
Hello There!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
这基本上定义了访问根域时要呈现的内容。完成后保存并关闭文件。
如果您按照初始服务器设置指南进行操作,则应启用UFW防火墙。要测试应用程序,您需要允许访问端口5000:
sudo ufw allow 5000
现在,您可以键入以下内容来测试Flask应用:
python myproject.py
您将看到如下输出,包括一个有用的警告,提醒您不要在生产中使用此服务器设置:
* Serving Flask app "myproject" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
完成后,点击终端窗口的CTRL-C以停止Flask开发服务器。
3.创建WSGI入口点
接下来,让我们创建一个文件,作为我们应用程序的入口点。这将告诉我们的Gunicorn服务器如何与应用程序进行交互。
我们来调用这个文件wsgi.py:
nano ~/myproject/wsgi.py
在这个文件中,让我们从我们的应用程序导入Flask实例,然后运行它:
from myproject import app
if __name__ == "__main__":
app.run()
完成后保存并关闭文件。
4.配置Gunicorn
您的应用程序现在已经建立了入口点。我们现在可以继续配置Gunicorn了。
在继续之前,我们应该检查Gunicorn是否可以正确地提供应用程序。
我们可以通过简单地传递入口点的名称来实现这一点。这被构造为模块的名称(减去.py扩展名),以及应用程序中可调用的名称。在我们的例子中,这是wsgi:app。
我们还将指定要绑定的接口和端口,以便应用程序将在公共可用的界面上启动:
cd ~/myproject
gunicorn --bind 0.0.0.0:5000 wsgi:app
您应该看到如下输出:
[2018-07-13 19:35:13 +0000] [28217] [INFO] Starting gunicorn 19.9.0
[2018-07-13 19:35:13 +0000] [28217] [INFO] Listening at: http://0.0.0.0:5000 (28217)
[2018-07-13 19:35:13 +0000] [28217] [INFO] Using worker: sync
[2018-07-13 19:35:13 +0000] [28220] [INFO] Booting worker with pid: 28220
确认其功能正常后,请按终端窗口的CTRL-C。
我们现在已经完成了虚拟环境,因此我们可以将其停用:
deactivate
5.配置Supervisor
安装Supervisor:
sudo apt-get install surpervisor
开始编辑项目的配置文件 xxx 随意定
sudo nano/etc/supervisor/conf.d/xxx.conf
以下为配置内容:
# 以下为该配置文件的内容
# 进程名
[program:plrproject]
# 需要执行的命令 (一定要指定虚拟环境的 gunicorn 来执行) pid 那个就是套路,就是要写,没为什么.
command=/home/kcsm/plrproject/plrprojectenv/bin/gunicorn wsgi:app -w 3 -b 0.0.0.0:12634 --pid /tmp/plrproject.pid
# 工作目录路径
directory=/home/kcsm/plrproject/alpr
# 自动运行 肯定是 true 啦
autostart=true
autorestart=True
startsecs=5
startretries=3
# 以下为该配置文件的内容# 进程名[program:mysite] # 需要执行的命令(一定要指定虚拟环境的gunicorn来执行) command=/home/yaotiancheng/mysite/ENV/bin/gunicorn wsgi --bind 0.0.0.0:2000 --pid /tmp/mysite.pid# 工作目录路径directory=/home/yaotiancheng/mysite# 自动运行autostart=true
接下来启动该进程(命令中的 status 只是为了让你看到 supervisor 的状态变化,因为现在执行 restart并不会提示你 suepervisor 的状态变更信息, 用 status 来确认自己每一步都有效果。
# 查看一下supervisor的状态service supervisor status# 关闭supervisorservice supervisor stop# 再查看一下 supervisor的状态service supervisor status# 启动supervisorservice supervisor start# 再查看一下supervisor 的状态,确定supervisor是启动的service supervisor status# 另外可以通过supervisorctl 来控制进程的启动, mysite为你配置文件的 program后面的名字supervisorctl restart mysite
到目前为止你已经可以通过IP:端口号来访问你的网站了,重启服务器也没有问题.
接下来是配置 Nginx
6.将Nginx配置为代理请求
# 安装Nginx、sudo apt-get install nginx
首先在Nginx的sites-available目录中创建一个新的服务器块配置文件。让我们称之为myproject确保其与指南的其余部分保持一致:
sudo nano /etc/nginx/sites-available/myproject
打开服务器块并告诉Nginx监听默认端口80,配置Nginx的配置文件。
server {
listen 80; server_name 172.163.1.4; #这里为你的IP地址/域名 #静态文件路径
location /static{
alias/home/kcsm/plrproject/static;
}
location/{ proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; # 这里的地址要与你在 supervisor 里面相同
proxy_pass http://0.0.0.0:12634;
}
}
要启用刚刚创建的Nginx服务器块配置,请将文件链接到sites-enabled目录:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
使用该目录中的文件,您可以测试语法错误:
sudo nginx -t
如果返回但未指示任何问题,请重新启动Nginx进程以读取新配置:
sudo systemctl restart nginx
7.大功告成



