周末乱折腾.vip


又是一通头脑发热,决定建站玩玩,于是 frendy.vip 开通啦(内含 Nginx + Gunicorn + Flask 部署实践总结)。

记个流水账的话,大概是这样子:
周五晚买域名(68人民币 / 3年);周六同事满月酒,晚上倒腾了下域名解析;周日买阿里云套餐(18人民币 / 6个月,包括云服务器 ECS / 云数据库 RDS / 对象存储 OSS / 云数据库 Redis / 负载均衡等等,当然阿里云号称是免费试用套餐,18元是礼包费用);周一晚上部署服务器。

版权声明:本文为 frendy 原创文章,可以随意转载,但请务必在明确位置注明出处。


两个设想


1.把 frendy.vip 和 www.frendy.vip CNAME 映射到本博客;

2.部署 Hello Flask Socket.IO 系列文章的 Demo


Action One — 把 frendy.vip 和 www.frendy.vip CNAME 映射到本博客


如下是暂定配置,为什么是 frendy.coding.me 而不是 frendyxzc.github.io. ?因为 SEO 的关系,Google 和 Bing 倒是没什么问题,但是 Github 对百度爬虫不太友好,观察了一个多月,索引量没什么动静,于是暂时用码市的连接。另外,为什么没用码云,因为码云暂时还不支持自定义域名。

image


Action Two — 部署 Hello Flask Socket.IO 系列文章的 Demo


1) 配置域名解析

当然,因为域名备案需要几天时间,这里可以晚些配置。

image

2) 通过 SecureCRT 连接云服务器,rz 上传相关项目,并安装好相关依赖后,执行下面命令即可测试:
// start blog
jekyll serve -w --host=0.0.0.0 &
// start flask socketio demo
python run.py  &
3) 部署到服务器:
3.1) Nginx

3.1.1) 更新源

apt update

3.1.2) 安装nginx

apt install nginx

3.1.3) 测试可执行以下命令启动服务,通过浏览器访问域名可以看到 nginx 的 Hello 页面

service nginx start
3.2) 配置 Nginx

3.2.1) 修改 /etc/nginx/sites-available/ 下的defalut 文件为如下内容:

server {
        listen 80;
        server_name chat.frendy.vip;
        location / {
                proxy_pass http://127.0.0.1:5000;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

3.2.2) 配置完之后软链接一份到 /etc/nginx/sites-enabled/defalut 下面,如果之前没有链接过的话

ln -s /etc/nginx/sites-available/defalut /etc/nginx/sites-enabled/defalut
3.3) Python

3.3.1) 安装创建独立的Python 环境所需的 virtualenv

pip install virtualenv

3.3.2) 在指定路径下创建 Python 虚拟环境,这里的 Demo 是放在在 /app/ 目录下

virtualenv -p /usr/bin/python pyenv

3.3.3) 启动虚拟环境

source pyenv/bin/activate

3.3.4) 在虚拟环境下,安装 Gunicorn

pip install gunicorn

3.3.5) 新建配置文件 deploy_config.py,内容如下:

#-*- coding: UTF-8 -*- 
import os

bind='127.0.0.1:5000'	#绑定的端口
workers=4				#worker数量
backlog=2048
debug=True
proc_name='gunicorn.pid'
pidfile='/var/log/gunicorn/debug.log'
loglevel='debug'

3.3.6) 启动 Gunicorn:

gunicorn -c deploy_config.py run:app

其中,run 是入口 Python 文件名,app 是 Flask 实例名。如果输出 worker 相关信息,表明启动成功。

3.4) Supervisor

3.4.1) 安装 Supervisor

easy_install supervisor

3.4.2) 添加配置

echo_supervisord_conf > /etc/supervisord.conf

在 supervisord.conf 末尾添加以下配置:

[program:run]
command=/app/pyenv/bin/gunicorn -c /app/deploy_config.py -b :5000 run:app
autostart=true
director=/app
autorestart=true
startsecs=10
startretries=20

[program:nginx]
command=/usr/sbin/nginx
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
stdout_logfile=/var/deploy/log/nginx.log
stderr_logfile=/var/deploy/log/nginx.err

3.4.3) 启动 Supervisor 完成部署

supervisord -c /etc/supervisord.conf

3.4.4 如果需要关闭或者重载,可以执行以下命令:

supervisorctl shutdown
supervisorctl reload


一通折腾部署完,接下来就等备案通过啦 ~


欢迎来撩

frendy

It will shine for us...