尝试部署flask到云服务器

按照书本,这里尝试使用 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...这是接下来要学习的东西

你可能感兴趣的:(Flask,学习历程,flask)