ubuntu20.4系统pyenv+nginx+https部署flask应用手册(亲测可用)

部署运行你感兴趣的模型镜像

系统是ubuntu20.4,需要安装多个flask的后台应用,而且这些flask应用都会使用不同的python版本,必须3.8.10,3.10.0等。现在需要梳理一下在ubuntu20.4上成功独立部署的经验。

需要用到pyenv工具。

一、安装pyenv,管理python虚拟环境

1、准备环境,更新软件,和安装必须的依赖

sudo apt update && sudo apt install -y \

    git curl wget make build-essential \

    libssl-dev zlib1g-dev libbz2-dev \

    libreadline-dev libsqlite3-dev libffi-dev

这里需要安装tk,因为我的一个flask应用依赖tk,要先安装。否则后续编译了python3.8.10仍然无法找到。

    sudo apt update

    sudo apt install -y tk-dev python3-tk

2、安装pyenv和virtualenv

最好使用官方的方法来安装pyenv,这样连带virtualenv也会一同安装。下面是安装pyenv。

#安装pyenv

curl https://pyenv.run | bash



# 添加到bashrc(绝对路径!)

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(pyenv init --path)"' >> ~/.bashrc

eval "$(pyenv init -)"

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

source ~/.bashrc

如果你的服务器无法访问https://pyenv.run,只能用国内的gitee来安装,但是要单独安装virtualenv工具。

git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv

# 3. 配置环境变量(同上)

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(pyenv init --path)"' >> ~/.bashrc

eval "$(pyenv init -)"

source ~/.bashrc

ps:如果你不是用官方,而是用gitee安装的pyenv,那么你需要单独安装virtualenv,并配置环境变量

======安装virtualenv

git clone https://gitee.com/mirrors/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

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

3、使用pyenv安装不通用的python版本

本来直接用命令pyenv install 3.8.10 --verbose安装,但是国外的源和国内的源都容易失败,所以直接用先下载tar.xz安装包,在本地安装的方式可以100%的成功。

# 从华为云下载 Python 3.8.10

wget https://mirrors.huaweicloud.com/python/3.8.10/Python-3.8.10.tar.xz -O ~/Python-3.8.10.tar.xz



mkdir -p ~/.pyenv/cache/

mv ~/Python-3.8.10.tar.xz ~/.pyenv/cache/



# 使用 pyenv 安装(自动检测缓存)

pyenv install 3.8.10 --verbose

安装成功之后,用pyenv versions命令可以看到已经安装的python版本。

4、 创建对应的python虚拟环境

# 为app1创建环境(Python 3.8.10)

pyenv virtualenv 3.8.10 flask5000-env



# 验证环境

pyenv virtualenvs

5、使用pyenv

5.1 进入项目目录下,然后运行pyenv local env1,这样每次cd到这个目录都会自动切换为env1环境。这种情况直接删除当前目录下的rm .python-version即可推出

5.2 pyenv activate env1就可以激活虚拟环境,pyenv deactivate就可以去激活

二、配置nginx和https证书,完成部署

之前一直都是使用宝塔平台来跑,还是自己撸一个conf来跑,更省事了。现在已经跑通了,记录一下,下次直接一把跑起来。

1、注册域名、备案,并配置www和@的A记录解析

2、安装nginx

sudo apt update

sudo apt install -y nginx

sudo systemctl enable --now nginx

3、创建nginx的conf

按照规范的nginx写法是这样,先在nano /etc/nginx/sites-available/mxshuying.site这个available目录下创建一个conf,里面的内容如下

server {

    listen 80;

    server_name mxshuying.site;



    # HTTP 强制跳转 HTTPS(可选)

    return 301 https://$host$request_uri;

}



server {

    listen 443 ssl;

    server_name mxshuying.site;



    # SSL 证书路径(稍后生成)

    ssl_certificate /etc/letsencrypt/live/mxshuying.site/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/mxshuying.site/privkey.pem;



    # SSL 强化配置

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;

    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";



    # 反向代理到 Flask

    location / {

        proxy_pass http://0.0.0.0:5000;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }



    # 静态文件处理(如果有)

    location /static/ {

        alias /path/to/your/flask/app/static/;

        expires 30d;

    }

}

4、将实际的conf文件,链接到enable文件夹,并验证配置文件的正确性

ln -s /etc/nginx/sites-available/mxshuying.site /etc/nginx/sites-enabled/

nginx -t

systemctl stop nginx

systemctl start nginx

5、需要获取证书(免费证书,每次能用90天)

apt install -y certbot python3-certbot-nginx

certbot certonly --standalone -d mxshuying.site -d www.mxshuying.site

证书获取成功了,再重启nginx

6、启动flask,一定要用0.0.0.0的地址

如果不指定0.0.0.0,flask会将app挂在127.0.0.1的地址上,所以一定要挂在0.0.0.0上面。

nohup flask run --host=0.0.0.0 --port=5000 &

这个命令可以在后台运行flask

7、配置静态文件的访问

如果作为小程序的服务端,是要配置一个校验文件的,需要在conf文件的最后增加静态文件的访问路径

    # 小程序的校验文件

    location /7rXonzV0Gr.txt {

        root /var/www/mxshuying.site;          # 文件存放目录

        try_files $uri =404;           # 防止目录遍历

        expires 1d;                    # 缓存1天

        access_log off;                # 关闭日志(可选)

    }

8、其它命令

查看80端口的占用:lsof -i :80

开启、重启、停用nginx服务:   systemctl   start/stop/reload    nginx

验证https的证书:certbot certificates

查看nginx的日志: tail -f /var/log/nginx/error.log





 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值