uwsgi+nginx+ubantu+supervisor部署Flask项目

本机操作

  1. 首先进入项目文件夹,使用命令 pip freeze > requirements.txt 导出 requirements.txt

  2. 然后执行命令git push origin master将自己的项目提交到 git

服务器操作

  1. 安装 UbantuCentOS 虚拟机
  1. 安装 xshell ,安装完成后输入虚拟机 ipport 、用户名、密码来连接虚拟机,连接成功后就可以在xshell 上操作服务器

推荐使用root用户操作服务器,在xshell输入su,然后输入密码进入root权限

如果没有设置root密码,则可以按如下操作设置root密码:

第一步:sudo passwd

第二步:输入密码

第三步:确认密码

  1. 安装 python3apt install python3
  2. 安装 gitsudo apt install git
    • 生成sshkey: sudo ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
    • 查看sshkey: sudo cat ~/.ssh/id_rsa.pub
    • 添加sshkey: 将sshkey添加在自己的github密钥中
  1. su账户下安装 virtualenvvirtualenvwrapper,执行pip3 install virtualenvwrapper即可

注:安装完成后需要设置环境变量,不然无法识别命令。

1)首先安装vimsudo apt install vim

2)输入 vim ~/.bashrc进入编辑,按 ↓ 至底部,输入i进入编辑模式,输入以下两行代码:

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

输入完成后,按ESC,然后输入:wq保存并退出,然后执行source ~/.bashrc激活

  1. 创建虚拟环境,mkvirtualenv -p "/usr/bin/python3" flask-py3flask-py3是虚拟环境名称,可随意取名但不可重复,-p "/usr/bin/python3"是指定python版本为py3,这个py3的路径通过which python3命令获取

  2. 安装mysql

    sudo apt install mysql-server mysql-client

    sudo apt install libmysqld-dev

  3. 设置项目

    1)进入srv文件夹, cd /srvsrv可以是另外有权限访问的文件夹

    2)新建项目文件夹 mkdir Buggg

    3)进入Buggg文件夹,并初始化为git文件夹,

    cd Buggg

    git init

    4)与远程仓库连接

    git remote add origin git@gitee.com:slowchen/Buggg.git

    ​ 备注:如果报错ssh: Could not resolve hostname gitee.com: Name or service not known,则执行以下操作:

    ​ ①ping gitee.com
    ​ 获取到github.comip116.211.167.14
    ​ ②在/ etc/hosts中添加一行如下:
    116.211.167.14 gitee.com

    5)拉取仓库代码

    git pull origin master

    ​ 输入自己的用户名和密码即可拉取

    6)进入虚拟环境

    workon flask-py3

    7)安装python package

    pip3 install -r requirements.txt

    8)进入数据库,并创建

    mysql -uroot -p,输入密码,进入数据库

    create database buggg charset utf8,注意此处的buggg与项目config.py里面的database应该一 致

    9)进入项目文件夹,迁移数据库

    python3 manage.py db init

    python3 manage.py db migrate

    python3 manage.py db upgrade

    ​ 迁移完成后,可以进入数据库查看是否迁移成功

    mysql -uroot -p

    use buggg

    show tables

    10)启动服务

    ​ ①设置运行的host'0.0.0.0',否则无法访问

    ​ ②进入项目文件夹,直接运行主app文件

    python3 app.py

    ​ ③进入项目文件夹,使用flask_script运行

    ​ 在manage.py中添加 manager.add_command('runserver', Server(host='0.0.0.0'))

    ​ 再运行python3 manage.py runserver即可启动服务

    11)本机访问

    ​ 本机访问虚拟机ip+port即可访问,port未改变则为5000,例如http://192.168.40.128:5000

nginx

安装: sudo apt-get install nginx
启动:sudo service nginx start
重启:sudo service nginx restart
停止:sudo service nginx stop
测试:sudo service nginx configtest

/etc/nginx/conf.d编写生成并配置文件buggg.conf

生成: touch buggg.conf

配置:

upstream buggg {
server unix:///srv/Buggg/buggg.sock; #项目目录下的sock文件
}

server{
        listen 80;
        server_name 192.168.1.104; #虚拟机ip
        charset utf-8;
        client_max_body_size 75M;

        location / {
                uwsgi_pass buggg; #对应第一行的 upstream
                include /etc/nginx/uwsgi_params;
        }
}

uwsgi

安装:sudo pip install uwsgi,注意不要安装在虚拟环境中,要安装在系统里面。

启动flask项目:uwsgi --http :5000 --wsgi-file /srv/Buggg/Buggg.py --callable app -H /root/.virtualenvs/buggg-env-py3

在项目文件夹,创建配置文件buggg_uwsgi.ini

[uwsgi]
chdir = /srv/Buggg      #项目文件夹地址
home = /root/.virtualenvs/buggg-env-py3         #虚拟环境
module = Buggg          #项目文件夹名称
master = true
processes = 10
wsgi-file = /srv/Buggg/Buggg.py         #项目主程序
callable = app      #主程序app名称
socket = /srv/Buggg/buggg.sock   #此处的socket应与buggg.conf中的upstream一致
chmod-socket = 666

*注:复制时要删除备注,否则报错

使用配置文件启动flask项目

进入项目文件夹,执行uwsgi --ini buggg_uwsgi.ini

同时启动nginxuwsgi,然后在浏览器输入虚拟机ip即可访问项目

supervisor

  • 安装

    pip install supervisor,使用python2,安装在系统python

  • 启动

    supervisord -c supervisor.conf

  • 配置

    • 在项目文件夹下新建supervisor.conf

    • 填写如下配置

      # 项目名称
      [program:Buggg]
      # supervisor执行的命令
      command=uwsgi --ini /srv/Buggg/buggg_uwsgi.ini
      # 项目的目录
      directory = /srv/Buggg
      # 开始的时候等待多少秒
      startsecs=0
      # 停止的时候等待多少秒
      stopwaitsecs=0
      autostart=true
      # 程序挂了后自动重启
      autorestart=true
      # 输出的log文件
      stdout_logfile=/srv/Buggg/log/supervisord.log
      # 输出的错误文件
      stderr_logfile=/srv/Buggg/log/supervisord.err
      
      [supervisord]
      # log的级别
      loglevel=info
      
      # 使用supervisorctl的配置
      [supervisorctl]
      # 使用supervisorctl登录的地址和端口号
      serverurl = http://127.0.0.1:9001
      
      # 登录supervisorctl的用户名和密码
      username = admin
      password = admin
      
      [inet_http_server]
      # supervisor的服务器
      port = :9001
      # 用户名和密码
      username = admin
      password = admin
      
      [rpcinterface:supervisor]
      supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
      

      *****注:填写配置文件时,千万注意不要在配置后面添加注释,如需注释应该换行

    • 其他

      • 如果报错另外程序在运行中,可执行sudo killall supervisord杀掉进程,然后重新启动
      • 可在浏览器中打开虚拟机ip+配置文件中填写的port(例如http://192.168.1.104:9001),输入用户名+密码(admin:admin)来管理进程

启动

supervisord -c supervisor.conf启动supervisor

service nginx start启动nginx

在浏览器输入虚拟机ip,即可打开网站。

ip绑定域名

在域名控制台解析到服务器ip后,编辑/etc/nginx/conf.d/buggg.conf,在server_name里面添加域名,例如

server_name 118.89.24.114 www.bug-gg.com www.bug-gg.xyz bug-gg.com bug-gg.xyz;

然后在浏览器输入域名即可访问。

推荐阅读更多精彩内容