backend后端部署文档

一、部署架构图

物理视图

二、部署流程

1.1 服务器系统环境

  • 腾讯云 Ubuntu 16.04 LTS Server

1.2 Docker 安装

ubuntu 安装参考如下链接:

windows安装参考如下链接:(win10仅支持win10 pro)

1.3 构建自定义的 Python Flask 应用镜像

为了Docker化一个 Python Flask 应用镜像,我们将要构建我们自己的Docker镜像,这意味要创建一个Dockerfile。

在绝大多数的虚拟机环境中,假如你想要创建一个机器的镜像,你需要首先创建一个虚拟机,然后安装好操作系统,然后安装好应用程序,最后将其转化成一个模板或者镜像。然而,对于Docker来说,这些步骤都可以通过 Dockerfile 进行自动化。一个 Dockerfile 是一个可以向 Docker 提供构建指令的方式。我们将要创建一个可以用来部署一个最简单的 Flask 应用镜像的 Dockerfile 。

项目内容和结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.
├── api # 项目App API源码目录
│ ├── account # 用户相关api
│ │ ├── account_function.py
│ │ ├── utils.py # 辅助函数
│ ├── questionnaire # 问卷相关api
│ │ ├── ans_function.py
│ │ ├── que_function.py
│ │ ├── utils.py # 辅助函数
│ ├── task # 其他任务相关api
│ │ ├── task_function.py
│ │ ├── utils.py # 辅助函数
│ ├── utils # 全局辅助函数
│ │ ├── assist.py
│ │ ├── match.py
│ │ ├── utils.py
├── dbTools # db
├── Dockerfile # Docker文件
├── README.md
├── app.py # app入口
├── requirements.txt # 相关依赖
├── setup.md
app.py里面主函数设置:
1
2
3
4
5
6
7
8
9
# 测试docker后端部署
@app.route('/')
def test_docker():
return 'Hi!Welcome to our earn_money app!'


if __name__ == '__main__':
CORS(app, supports_credentials=True)
app.run(host='0.0.0.0', port=8082, debug=True)
requirements.txt:
1
2
3
4
5
6
7
flask>=0.10
Werkzeug>=0.9
DBUtils
PyMySQL==0.8.1
redis
flask-cors
flask_login
编写Dockerfile
  • From 来继承一个 Docker 镜像

Dockerfile 的第一条指令是FROM指令。这用来将一个已经存在的 Docker 镜像指定为基础镜像。这基本上为我们提供了继承另一个Docker镜像的方法。除了FROM指令之外,还包含了一个MAINTAINER指令,其是用来显示 Dockerfile 的作者的。然后,使用 ENV LANG C 来解决后面安装 python3 时出现的 locale 问题。

1
2
3
FROM python:3.7-alpine
LABEL maintainer="earn_money"
ENV LANG C.UTF-8d
  • 将当前目录里面的代码文件拷贝到镜像里面,并且安装 Python 依赖
1
2
3
4
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
RUN pip3 install flask-cors --upgrade
  • 设置 EntryPoint 去告诉 Docker 在这个 docker container 中运行 python3 的命令,执行 app.py
1
2
ENTRYPOINT ["python3"]
CMD ["app.py"]

总的Dockerfile如下:

1
2
3
4
5
6
7
8
9
10
FROM python:3.7-alpine
LABEL maintainer="earn_money"
ENV LANG C.UTF-8d

COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
RUN pip3 install flask-cors --upgrade
ENTRYPOINT ["python3"]
CMD ["app.py"]

构建自己的Docker Image

这一步获取官方镜像会很慢,可以用镜像加速器。(很好用,不然你会等到疯掉)

参考链接:镜像加速器

1
$ docker build -t earn_money:latest .

使用你构建的镜像运行一个 Docker Container

1
docker run -d -p 8080:8082 earn_money

-d(detach,脱离)标志是用来告诉 Docker 在后台运行容器;另一个标志是 -p,这个标志能让用户来将一个端口从主机机器映射到容器中的一个端口。

不加-d 参数结果如下:(测试时试着用了多个端口)

我们使用的 Flask 应用默认暴露了 5000 端口来提供HTTP服务。默认情况下,与Docker容器内部绑定的端口并没有与主机系统绑定。为了让外部的系统访问容器内部暴露的端口,这些端口必须通过使用 -p 标志从主机端口映射到容器端口。假如我们想要端口从主机的 8080 端口,映射到容器中的 8082 端口,我们可以通过使用这种语法 -p 8080:8082

从上面的命令中,看起来我们的容器已经启动成功了。我们可以通过运行执行docker ps 或者docker container list来验证。

在浏览器中访问 http://localhost:8080 , 你现在应该能够拿到 Python Flask 服务器返回的信息。

三、常见问题解决方法

1. Docker 安装失败

可能是因为天朝被墙的原因,强烈建议使用国内源而不是官方源,详情可以见前面 docker 安装的中文参考链接

2. Docker 镜像拉取缓慢

使用国内镜像源加速。

参考链接

其他不确定错误

请检查系统环境配置是否和本仓库部署环境一致

  • python3.7
  • Docker version 18.09.6, build 481bc77
  • Ubuntu Xenial 16.04 (LTS)