0.1 前提
阿里ecs:Ubuntu20.0
0.2 目标:
- vscode SSH 到 阿里云ecs进行远程开发
- 阿里云ecs部署python开发环境
- flask 服务器部署
- 打包镜像并上传到docker hub
1.1 vscode ssh设置
四步完成vscode远程开发配置 - 简书 (jianshu.com)
输入要ssh的远程主机的ip
进入ssh配置页面
在打开的文件中输入
Host 1XX.77.X.X
HostName 1XX.77.X.XX
User root
右键连接
输入密码,就可连接远程主机了。
1.2 python环境部署
如何在Ubuntu 20.04上创建Python虚拟环境?-51CTO.COM
1.2.1 创建venv环境
# ubuntu20 已移除python2且自带python3
apt update && apt upgrade
python3 -V
apt-cache search venv
apt -y install python3-venv
# 创建venv环境
python3 -m venv /opt/my_first_venv
cd /opt/my_first_venv
# 激活venv环境
source my_first_venv/bin/activate
# 激活后shell提示会变化为如下所示
(my_first_venv) #
# 停用venv环境
(my_first_venv) deactivate
1.3 flask 服务器部署
Flask + Docker 无脑部署新手教程 - 知乎 (zhihu.com)
# 1 在venv环境中使用gnicron部署flask应用
pip install gunicorn gevent
1.3.2 创建flask应用
在项目根目录下创建start.py 文件,这是项目的启动文件
#start.py
from project import create_app #从project文件夹中的__init__.py中导入create_app函数
app = create_app() #记住这里的变量名app
if __name__ == '__main__':
app.run(debug=True)
1.3.3 gunicron服务器配置
在项目根目录下创建 gunicorn.conf.py 文件
workers = 5 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量
bind = "0.0.0.0:80"
测试项目运行
# start:app 中的start为前一步创建的start.py文件名,app为start.py文件中创建的flask app变量名
gunicorn start:app -c gunicorn.conf.py
1.4 打包镜像并上传到docker hub
1.4.1 阿里云ecs部署docker
Install Docker Engine on Ubuntu | Docker Documentation
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker.io
systemctl enable docker
systemctl start docker
1.4.2 配置docker镜像加速
阿里云镜像加速: 容器镜像服务 (aliyun.com)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.js <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com",
"http://f1361db2.m.daocloud.io"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1.4.3 使用Docker封装flask应用
# 生成项目依赖文件,后期安装可使用 pip install -r requirements.txt安装依赖
pip freeze -> requirements.txt
1.4.3.2 创建Dockerfile文件
在项目根目录下创建名为Dockerfile的文件,用于docker镜像构建
FROM python:3.6
WORKDIR /Project/demo
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
CMD ["gunicorn", "start:app", "-c", "./gunicorn.conf.py"]
WORKDIR 为项目要部署到服务器上的路径
CMD 里面的 start 是我们上面写的 python 启动文件名,app 是启动文件里面要启动的应用名(变量名)
1.4.3.3 使用Dockerfile构建镜像
# 在Dockerfile目录下执行
sudo docker build -t "testflask" . # 最后的 点 表示使用当前目录下的Dockerfile文件
docker images # 查看镜像
1.4.4 推送镜像到docker hub
1.4.4.1 注册docker hub账号
创建private 仓库,假设仓库名称为 ali/flask_server, 其中ali表示用户名,flask_server为repositories名。
1.4.4.2 修改image tag
# 1 查看生成的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testflask latest cadd2701b704 2 hours ago 998MB
python 3.8 ce9555db0df5 2 months ago 909MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
# 2 修改tag
docker tag testflask ali/flask_server:v1
# 3 查看修改结果
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testflask latest cadd2701b704 2 hours ago 998MB
ali/flask v1 cadd2701b704 2 hours ago 998MB
python 3.8 ce9555db0df5 2 months ago 909MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
1.4.4.3 push到docker hub
# 登录docker hub
docker login -u username -p
# 推送
docker push ali/flask:v1