Docker 部署
约 812 字大约 3 分钟
相关信息
一个还不错的教程网站:Docker - 从入门到实践
本地部署
本地部署是为了能够快捷的提供本地 API 服务
后端
env
在
backend
目录打开终端,创建环境变量文件touch .env
将初始化环境变量配置拷贝到环境变量文件中
cp .env.example .env
按需修改配置文件
backend/core/conf.py
和.env
构建容器
在项目根目录中打开终端,执行以下命令
注意
如果容器要在本地启动,需要将
.env
中的127.0.0.1
更改为host.docker.internal
fbadocker build -f Dockerfile -t fba_backend_independent .
celerydocker build --build-arg SERVER_TYPE=celery -t fba_celery_independent .
启动容器
由于构建不包含数据库,请确保本地已安装并启动相关数据库(mysql / postgresql、redis)
fbadocker run -d -p 8000:8000 --name fba_server fba_backend_independent
celerydocker run -d -p 8555:8555 --name fba_celery fba_celery_independent
前端
服务器部署
提示
此教程以 https 为例,如果你没有相关经验,请自行 Google 进行了解
相关信息
免费 SSL 证书推荐使用 httpsok-SSL 证书自动续期,一行命令,轻松搞定 SSL 证书自动续签,支持:nginx、通配符证书、七牛云、腾讯云、阿里云、CDN、OSS、LB(负载均衡)
后端
拉取代码到服务器
将代码拉取到服务器通常采用 ssh 方式(更安全),但是你也可以选择使用 https 方式,具体方式请根据个人自行决定,如果使用 ssh 方式拉取代码,请自行 Google 拉取教程
如果使用 https 方式,你可以查看 后端步骤 2
env
在
backend
目录打开终端,创建环境变量文件touch .env
进入
deploy/backend/docker-compose
目录,按需修改.env.server
文件提示
我们在 docker-compose 脚本内通过挂载的方式使用
.env.server
文件作为 fba 环境变量文件,因此,本地修改此文件,将同步更新至 docker 容器,这意味着,修改环境变量将无需重新 build注意
如果您正在使用 PostgreSQL 数据库,需修改
.env.server
部分配置如下:# Database DATABASE_TYPE='postgresql' DATABASE_HOST='fba_postgres' DATABASE_PORT=5432 DATABASE_USER='postgres' DATABASE_PASSWORD='123456'
按需修改配置文件
backend/core/conf.py
更新脚本文件
services: fba_server: build: context: . dockerfile: Dockerfile image: fba_server:latest container_name: fba_server restart: always # 如果你是 postgres 用户,应将 fba_mysql 修改为 fba_postgres depends_on: - fba_mysql - fba_redis - fba_celery volumes: - ./deploy/backend/docker-compose/.env.server:/fba/backend/.env - fba_static:/fba/backend/app/static networks: - fba_network # 如果你是 postgres 用户,应将 fba_mysql:3306 修改为 fba_postgres:5432 command: - bash - -c - | wait-for-it -s fba_mysql:3306 -s fba_redis:6379 -t 300 mkdir -p /var/log/supervisor/ supervisord -c /fba/deploy/backend/supervisor.conf supervisorctl restart fastapi_server fba_mysql: image: mysql:8.0.41 ports: - "${DOCKER_MYSQL_MAP_PORT:-3306}:3306" container_name: fba_mysql restart: always environment: MYSQL_DATABASE: fba MYSQL_ROOT_PASSWORD: 123456 TZ: Asia/Shanghai volumes: - fba_mysql:/var/lib/mysql networks: - fba_network command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1 # 如果你是 postgres 用户,应保留 fba_postgres 容器脚本并删除 fba_mysql 容器脚本 # 否则,删除 fba_postgres 容器脚本 fba_postgres: image: postgres:16 ports: - "${DOCKER_MYSQL_MAP_PORT:-5432}:5432" container_name: fba_postgres restart: always environment: POSTGRES_DB: fba POSTGRES_PASSWORD: 123456 TZ: Asia/Shanghai volumes: - fba_mysql:/var/lib/postgresql/data networks: - fba_network fba_redis: image: redis ports: - "${DOCKER_REDIS_MAP_PORT:-6379}:6379" container_name: fba_redis restart: always environment: - TZ=Asia/Shanghai volumes: - fba_redis:/data networks: - fba_network # 后端专用,如果使用此容器,意味着你只需部署后端 API 服务,不需要前端; # 这与下面的 fba_ui 容器冲突,如果你选择使用 fba_ui 容器 # 你应该注释或删除 fba_nginx 容器脚本,并使用 fba_ui 容器 fba_nginx: image: nginx ports: - "8000:80" container_name: fba_nginx restart: always depends_on: - fba_server volumes: - ./deploy/backend/nginx.conf:/etc/nginx/conf.d/default.conf:ro - fba_static:/www/fba_server/backend/static networks: - fba_network # 如果服务器内存小于 4GB,CPU 小于四个内核 # 建议进入 fba_ui 项目单独构建这个容器(参考下方前端部署教程) # 如果你不选择单独构建,务必在执行下面步骤前根据前端部署教程更新前端配置文件 # 如果你选择单独构建,务必注释或删除此容器脚本 fba_ui: build: context: /root/fastapi_best_architecture_ui # 根据 Vben Admin Antd 项目存放目录修改此路径 dockerfile: Dockerfile image: fba_ui:latest ports: - "80:80" - "443:443" container_name: fba_ui restart: always depends_on: - fba_server command: - nginx - -g - daemon off; volumes: # nginx https conf # 通过 docker 进行部署时,需要打开此配置项并确保<挂载到容器内的证书文件路径>配置 # 与 nginx conf 中的 ssl 证书文件路径配置一致,如果你直接将 ssl 证书文件 cp # 到了 docker 容器内,则无需挂载证书文件,直接将它们注释或删除即可 # local_ssl_pem_path:你在服务器存放 ssl pem 证书文件的路径,自行修改 # local_ssl_key_path: 你在服务器存放 ssl key 证书文件的路径,自行修改 # /etc/ssl/xxx.pem:挂载到容器内 ssl pem 证书文件的路径,自行修改 # /etc/ssl/xxx.key:挂载到容器内 ssl key 证书文件的路径,自行修改 - local_ssl_pem_path:/etc/ssl/xxx.pem - local_ssl_key_path:/etc/ssl/xxx.key - fba_static:/www/fba_server/backend/static networks: - fba_network fba_rabbitmq: hostname: fba_rabbitmq image: rabbitmq:3.13.7 ports: - "15672:15672" - "5672:5672" container_name: fba_rabbitmq restart: always environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest volumes: - fba_rabbitmq:/var/lib/rabbitmq networks: - fba_network fba_celery: build: context: . dockerfile: Dockerfile args: - SERVER_TYPE=celery image: fba_celery:latest ports: - "8555:8555" container_name: fba_celery restart: always depends_on: - fba_rabbitmq volumes: - ./deploy/backend/docker-compose/.env.server:/fba/backend/.env networks: - fba_network command: - bash - -c - | wait-for-it -s fba_rabbitmq:5672 -t 300 mkdir -p /var/log/supervisor/ supervisord -c /fba/deploy/backend/supervisor.conf supervisorctl restart celery_worker supervisorctl restart celery_beat supervisorctl restart celery_flower networks: fba_network: name: fba_network driver: bridge ipam: driver: default config: - subnet: 172.10.10.0/24 volumes: # 如果你是 postgres 用户,应将 fba_mysql 修改为 fba_postgres fba_mysql: name: fba_mysql fba_redis: name: fba_redis fba_static: name: fba_static fba_static_upload: name: fba_static_upload fba_rabbitmq: name: fba_rabbitmq
执行一键启动命令
在项目根目录中打开终端,执行以下命令
注意
命令执行期间遇到镜像拉取问题请自行 Google
docker-compose up -d --build
等待命令执行完成
前端
注意事项
注意
不建议频繁使用 docker-compose up -d --build
命令,此命令每次执行都会重新构建容器,并将原容器自动本地备份保留,这会导致硬盘空间迅速锐减
清理未使用的镜像
docker image prune
清理未使用的容器
docker container prune
清理所有未使用的镜像、容器、网络和构建缓存
docker system prune