Ubuntu+Flask+uwsig+supervisor+Nginx

新弄了一台阿里云的主机,于是琢磨这把原有的一个Flask写项目迁移过来,下面总结下部署的步骤。

一,购买服务器

在阿里云上购买一台Ubuntu系统的主机,获得一个外网ip,本机ssh连接到主机

  • ping 外网ip 提示 Request timeout
1. 进入阿里云后台配置安全组规则
2. 添加协议 ICMP
  • ssh无法通过帐号root登录
1.  cat /etc/ssh/sshd_config
2. 修改PasswordAuthentication no
3. 重启/bin/systemctl restart sshd.service
二,安装virtualenv

该台服务器准备用于部署多个应用,需要各自拥有一套独立的Python运行环境,对每个应用的Python环境进行隔离

sudo pip install virtualenv
三,创建Flask项目应用

项目目录一般放在/home文件夹下。创建一个yys_server的项目,同时始化项目虚拟环境

mkdir /home/yys_server
virtualenv venv
. venv/bin/activate

使用git clone上传应用程序到服务器中,并安装项目依赖

git clone http://url/of/you/git/repo
pip install -r requirements.txt

其中我的项目代码

from flask_script import Manager
from app.api import api
import os
manager = Manager(api)
@manager.command
def runserver():
    port = int(os.environ.get('PORT', 33333))
    api.run(host='0.0.0.0', port=port)
if __name__ == "__main__":
    manager.run()

执行python manage.py runserver,在浏览器输入公网ip地址,加端口号33333即可成功访问。

四,安装 uwsgi服务器

由于Flask自带的wsgi性能低下,生产环境中使用uwsgi作为服务器

# 安装uwsgi
sudo pip install uwsgi
# 新建配置文件`/home/yys_server/uwsgi.ini`
[uwsgi]
wsgi-file = manage.py
module = runserver
callable = api
master = true
processes = 3
chdir = /home/yys_server
socket = /var/sock/yys.sock
chmod-socket = 666
vacuum = true
buffer-size = 232768
uid = www-data
gid = www-data
# 创建目录,用于存放uwsgi启动后生成的sock文件,用来和Nginx 通信 
sudo mkdir /var/sock
# 根据uwsgi.ini配置修改文件夹的所有权
sudo chown -R www-data:www-data /var/sock

执行uwsgi uwsgi.ini即可通过服务器访问应用

五,安装Supervisor

上面命令运行uwsgi的方式,如果进程异常退出后,服务就无法访问,使用supervisor来管理进程,对异常终端的服务进行自动重启

apt-get install supervisor
/etc/supervisor/conf.d/*.conf

它的配置路径在/etc/supervisord/supervisord.conf, 项目的配置文件在/etc/supervisor/conf.d目录下,新建一个yys.conf文件

# /etc/supervisor/conf.d/yys.conf
[program:yys]
autorestart=True
autostart=True
redirect_stderr=True
;environment=PATH="/home/yys_server/venv"
;command=python manage.py runserver
command=uwsgi uwsgi.ini
user=www-data
directory=/home/yys_server/

配置后即可启动项目

service supervisor start
六,安装Nginx作为反向代理
apt-get install nginx

项目nginx的配置文件在/etc/nginx/conf.d目录下,新建一个yys.conf文件

server {
    listen      33333;
    server_name 120.79.81.232;
    charset     utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @yys; }
    location @yys {
        include uwsgi_params;
        uwsgi_pass unix:/var/sock/yys.sock;
    }
}

配置表明Nginx会将收到的端口为33333的所有请求都转发到uwsgi服务器上

# 重启nginx服务器
service nginx restart

大功告成~~~

你可能感兴趣的:(Ubuntu+Flask+uwsig+supervisor+Nginx)