Live2D

Ubuntu16.04 flask + nginx + uWSGI 部署

前言

又有段时间没写博客了,最近一直在写外包项目,都没啥空余时间。这几天花了不少时间做项目部署,也看了不少教程,这里就记录下整个过程,也方便以后要做类似部署的时候不用再查来查去了。

flask + uWSGI

看到网上的教程都是清一色的使用 virtualenv 来创建虚拟环境,但我更倾向于使用 anaconda 来管理虚拟环境,关于 Ubuntu 中 anaconda 的安装,可以参考这篇博客,安装完成后,建议在 anaconda 中添加清华源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
# 以上两条是Anaconda官方库的镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 以上是Anaconda第三方库 Conda Forge的镜像

# for linux
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
# for legacy win-64
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/
以上两条是Pytorch的Anaconda第三方镜像

conda config --set show_channel_urls yes

可以使用 conda info 命令来查看是否添加成功。
接着,我们创建一个虚拟环境

conda create -n "环境名称" python=python版本

然后通过命令 source activate 环境名称 进入虚拟环境

接着开始安装 flask 与 uWSGI

conda install flask
conda install uwsgi

这里我就借用一下别人博客里清一色的 Demo, 创建文件 myproject.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

manage.py

from myproject import app

if __name__ == "__main__":
    app.run()

输入 python manage.py 运行,然后浏览器输入 http://localhost:5000/ 即可看到结果

nginx

sudo apt-get update
sudo apt-get install nginx

接着,在 Nginx 的 sites-available 目录中创建一个新的服务器块配置文件

sudo nano /etc/nginx/sites-available/myproject

这个是我最开始使用的

server {
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include uwsgi_params; # 导入uwsgi配置
        uwsgi_pass 127.0.0.1:8000; # 转发端口,需要和uwsgi配置当中的监听端口一致
    }
}

完成后,保存文件,然后输入 sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled 将配置文件链接到 sites-enabled 目录

然后测试一下是否有语法问题

sudo nginx -t

若无问题,则重启 nginx

sudo systemctl restart nginx

配置 uWSGI

最后开始 uWSGI 相关文件的配置,看了网上的教程,感觉都很麻烦,通过同学了解到一个十分简单的方法,在我们之前创建的 manage.py 所在目录下,创建 uwsgi.iniuwsgi.pid

uwsgi.ini

[uwsgi]
module = manage:app
master = true
chdir = .
socket = 127.0.0.1:8000
chmod-socket = 660
vacuum = true
wsgi-file = manage.py               # flask程序的启动文件
pidfile=./uwsgi.pid
limit-as = 512
http-timeout = 300
socket-timeout = 300
harakiri = 300

uwsgi.pid

20830

接着,通过以下命令,即可启动 uwsgi

注:需在创建的虚拟环境中输入

nohup uwsgi uwsgi.ini > wsgi.log 2>&1 &

结束命令

uwsgi --stop uwsgi.pid

重启命令

uwsgi --reload uwsgi.pid

然后,我们到本地浏览器中输入 http://server_domain_or_IP 即可看到结果


这里顺便再讲讲 nginx 配置 https
首先要先申请 SSL,申请成功后会用申请的域名为包名发送给你,打开后有

将 Nginx 目录下的两个文件上传到 /etc/nginx 目录下

然后将之前的 nginx 服务的配置文件改为

server {
    listen 443;
    server_name xxx; # 你的域名
    ssl on;
    ssl_certificate  /xxx.crt;# 改成你的证书的名字
    ssl_certificate_key /xxx.key;# 你的证书的名字
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        include uwsgi_params;                       # 导入uwsgi配置 
        uwsgi_pass 127.0.0.1:8000;                  # 转发端口,需要和uwsgi配置当中的监听端口一致
    }
}
server {
    
    listen 80;
    
    server_name xxx; # 你的域名
	
    rewrite ^(.*)$ https://$host$1 permanent;#把http的域名请求转成https
    
    client_max_body_size 75M;
     
}

剩下的步骤与上面 nginx 相同。这样,便可通过 https 进行访问了。

小节

这还是我头一次做环境部署,花了不少时间,在部署成功的那一刻,真的是十分开心。一开始是准备在 Windows 服务器上进行项目部署,捣鼓了两天没弄出来,就直接放弃然后转用 linux 服务器,半天多的时间就搞定了。然后今天早上搞 mysql 的远程连接也搞了一早上,服务器中防火墙、mysql权限什么全都做了,就是连不上,最后发现是因为安全组 3306 端口没打开,白白多花几个小时。。。还是太菜了

posted @ 2020-05-18 14:46  ITryagain  阅读(547)  评论(3编辑  收藏  举报