flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置

深知用户痛点,不要告诉我什么原理不要告诉我什么原因,我只要安装上只要能跑起来,所以,开干吧!

1、pyenv 安装:

    

git clone https://github.com/pyenv/pyenv.git

2、pyenv环境配置 

echo 'export PYENV_ROOT="$HOME/pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

 3、安装python指定版本

pyenv install 3.7.3

 

  安装python指定版本3.7.3,可以换成别的版本,由于下载网络原因,建议换成离线pyenv install安装:

            https://blog.csdn.net/jorg_zhao/article/details/79493519

 

4、设置python全局并且更新pip

pyenv global 3.7.3
pip install –upgrade pip

5、 安装pyenv-virtualenv插件

git clone git://github.com/yyuu/pyenv-virtualenv.git ./pyenv/plugins/pyenv-virtualenv

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile

6、 创建虚拟环境名为webserver

pyenv virtualenv webserver

      6.1激活webserver:

             pyenv activate webserver

      6.2安装flask并且实现个flask程序:

           6.2.1 安装: pip install flask

           6.2.2 flask程序: 

                  6.2.2.1执行vi main.py,按i然后复制

from flask import Flask,request
app = Flask(__name__)

@app.route("/",methods=['POST','GET'])
def helloworld():
    return "success"

if __name__=='__main__':
    app.run(host="0.0.0.0",port=8080,debug=True)

                    然后按esc,按shift+: 输入wq 保存退出

                6.2.2.2 执行python main.py  在浏览器输入你的公网ip+:8080端口

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第1张图片

             6.2.2.3先给域名解析后可以直接输入域名地址+8080端口进行访问,这链接其实是http://mangoit.xyz:8080

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第2张图片

 

7、给服务器nginx配置SSL实现可以使用https://mangoit.xyz  以下以腾讯云为例

      7.1 链接地址https://console.cloud.tencent.com/ssl

           7.1.1点击申请免费证书---》如果没有开通云解析就要自己手动DNS验证(https://b23.tv/BV1Qb411279Y这个视频里面有讲手动DNS验证的配置)

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第3张图片

 

        7.2 SSL配置,注:要先在服务器的安全组中打开443和80端口

           7.2.1配置之前先安装Nginx,执行sudo apt-get install nginx

           7.2.2证书颁发完毕后点击下载,打开压缩包,进入Nginx中,里面有两个文件夹,一个.crt、一个.key结尾的文件

将两个文件上传服务器放到同一个目录中,/etc/nginx/ssl 目录下

//打开etc/nginx目录
~$ cd /etc/nginx/

//新建ssl文件夹
~/etc/nginx$ mkdir ssl

          

           7.2.3执行以下命令

//打开etc/nginx/conf.d目录
~$ cd /etc/nginx/conf.d/

//创建weapp.conf文件
~/etc/nginx/conf.d$ touch weapp.conf

          7.2.4在weapp.conf文件中粘贴下面的内容,我列出需要修改的3个地方,替换成自己域名的信息

                 vi weapp.conf  打开这个文件,将以下代码复制进去保存:

upstream app_weapp {
    server localhost:8080;
    keepalive 8;
server {
    listen      80;
    #=====需要修改=========替换成自己的域名
    server_name mangoit.xyz;
    #服务器自动把 HTTP 的请求重定向到 HTTPS
    rewrite ^(.*)$ https://$server_name$1 permanent;
}

server {
    listen      443;
    #=====需要修改=========替换成自己的域名
    server_name mangoit.xyz;
    ssl on;
    #=====需要修改=========下面两行替换成自己SSL文件的路径
    ssl_certificate           /etc/nginx/ssl/1_mangoit.xyz_bundle.crt;
    ssl_certificate_key       /etc/nginx/ssl/2_mangoit.xyz.key;
    ssl_session_timeout       5m;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache         shared:SSL:50m;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://app_weapp;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

      7.2.5 验证并重启Nginx

//输入nginx -t,出现下列信息说明配置成功了
~$ 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

      注意:此时要在webserver这个虚拟环境中要重新执行python main.py 并且不能是在root用户要转变成普通用户才可以

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第4张图片

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第5张图片

 

  8、安装gunicorn

           要在虚拟环境中安装

           8.1 pip install gunicorn

           8.2 创建文件夹 mkdir logs

           8.3 vi gunicorn.conf

# 并行工作线程数

workers =4

# 监听内网端口8080【按需要更改】
bind ='127.0.0.1:8080'

# 设置守护进程【关闭连接时,程序仍在运行】

daemon =True

# 设置超时时间120s,默认为30s。按自己的需求进行设置

timeout = 120

# 设置访问日志和错误信息日志路径
accesslog ='./logs/acess.log'
errorlog ='./logs/error.log'

       8.4 gunicorn -c gunicorn.conf main:app

flask生产环境部署(pyenv+gunicorn +nginx)+SSL证书Nginx配置_第6张图片

然后就安装完成了。就不用python main.py也能自己挂着运行 了。

 

 

补充: 关闭 gunicorn:

     1、pstree -ap|grep gunicorn 查看端口号

     2、kill - 9 端口   (这个端口是刚才查到的第一个端口号)

 

 

你可能感兴趣的:(运行环境解决办法)