按照书本,这里尝试使用 Gunicorn+Nginx部署flask应用。
1、云服务器登录
我这里用的是腾讯云轻量应用服务器,为了跟书本一致还特意将服务器系统重装成ubuntu。服务器准备好后使用公共ip通过putty登录。这里有一点注意,登录的用户名为ubuntu,密码需要在腾讯云上设定。用ubuntu登录成功后执行sudo passwd root来修改root的密码(所以root的密码是什么呢),修改完后用root来登录。登录后发现指示符变为#。
2、设置新用户、下载相关包、配置环境
①更新包(我这里不知道为什么没成功,显示没有权限,不懂)。
apt update
apt upgrade
②创建新用户xxx并赋予sudo权限。新建用户过程中除了密码其他都可以默认跳过。然后切换到新创建的用户。
adduser xxx
usermod -aG sudo xxx
su xxx
③给云服务器安装python3、pip3、pipenv。
sudo apt install python3-dev python3-pip
sudo -H pip3 install pipenv
④密钥……先跳过
从git克隆仓库到云服务器 。这里注意克隆时会向你索要github的用户名跟密码,密码的话并不是静态密码,而是要到github的setting->developer settings->Personal access tokens获取token密码(可以把权限全勾上),然后在ssh里输入密码的地方输入这个token密码。
cd ~
git clone .../example.git
⑤切进仓库目录,用pipenv安装虚拟环境和依赖,并激活。
cd example
pipenv install
pipenv shell
⑥在当目录下创建.env定义环境变量。内容为
nano .env
-------.env内容-------
FLASK_ENV=production
FLASK_CONFIG=production
⑦执行一些flask数据库的初始化操作(根据自己在__init__里的定义 比如flask init等等)
3、使用Gunicorn
①安装并设置临时防火墙允许8000端口。
pipenv install gunicorn
sudo ufw allow 8000
②在目录下创建个wsgi.py,使gunicorn能通过这个文件执行flask程序。
wsgi.py:
-----------------------------------------
import os
from example import create_app
app = create_app('production')
③运行程序。
gunicorn --workers=4 --bind=0.0.0.0:8000 wsgi:app
#workers代表线程数,--bind代表监听的主机地址和端口,wsgi:app为程序入口
按照书本说执行完上一步后,浏览器输入你的云服务器公网ip:8000或域名:8000应该就能看到你的flask页面了,但我始终没看到页面,也不知道哪里出了问题。
4、nginx
①安装。nginx成功安装后输入公网ip或域名就能看到Welcome to Nginx的页面。
sudo apt install nginx
②重新编写nginx默认配置文件。这里可以先备份一下default.bak文件(我实际操作没备份)。
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-enabled/example
------------example配置文件内容----------------
server{
listen 80 default_server;
server_name _; # 服务器有域名的话下划线可以写成域名
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static{ #处理静态文件夹中的静态文件
alias /home/moming/bluelogtry/bluelogtry/static/;
expires 30d; #设置缓存过期时间
}
}
③编写完配置文件后测试语法正确性。
sudo nginx -t
出现
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
就代表没问题了,然后重启nginx。
sudo service nginx restart
④运行Gunicorn 。然后浏览器进云服务器域名或公网ip(不需要填端口号),flash应用页面显示即告完成。
gunicorn -w 4 wsgi:app
到此为止,虽然能成功将flask应用部署到云服务器并显示在页面上,但还需要个工具来自动后台运行并管理。——Supervisor...这是接下来要学习的东西