mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2025-08-26 13:26:04 +08:00
Optimize docker deploy settings and scripts (#486)
This commit is contained in:
@ -10,19 +10,23 @@ RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debi
|
|||||||
&& sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
|
&& sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends gcc python3-dev \
|
&& apt-get install -y --no-install-recommends gcc python3-dev supervisor \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
# 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/simple
|
# 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/simple
|
||||||
&& pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple \
|
&& pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple \
|
||||||
&& pip install -r backend/requirements.txt -i https://mirrors.aliyun.com/pypi/simple \
|
&& pip install -r backend/requirements.txt -i https://mirrors.aliyun.com/pypi/simple \
|
||||||
&& pip install gunicorn aio_pika supervisor wait-for-it -i https://mirrors.aliyun.com/pypi/simple
|
&& pip install gunicorn aio_pika wait-for-it -i https://mirrors.aliyun.com/pypi/simple
|
||||||
|
|
||||||
ENV TZ="Asia/Shanghai"
|
ENV TZ="Asia/Shanghai"
|
||||||
|
|
||||||
RUN mkdir -p /var/log/fastapi_server
|
RUN mkdir -p /var/log/fastapi_server \
|
||||||
|
&& mkdir -p /var/log/supervisor \
|
||||||
|
&& mkdir -p /etc/supervisor/conf.d
|
||||||
|
|
||||||
|
COPY deploy/backend/supervisor.conf /etc/supervisor/supervisord.conf
|
||||||
|
|
||||||
COPY deploy/backend/fastapi_server.conf /etc/supervisor/conf.d/
|
COPY deploy/backend/fastapi_server.conf /etc/supervisor/conf.d/
|
||||||
|
|
||||||
EXPOSE 8001
|
EXPOSE 8001
|
||||||
|
|
||||||
CMD ["uvicorn", "backend.main:app", "--host", "127.0.0.1", "--port", "8000"]
|
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
|
@ -10,16 +10,20 @@ RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debi
|
|||||||
&& sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
|
&& sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends gcc python3-dev \
|
&& apt-get install -y --no-install-recommends gcc python3-dev supervisor \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
# 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/simple
|
# 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/simple
|
||||||
&& pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple \
|
&& pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple \
|
||||||
&& pip install -r backend/requirements.txt -i https://mirrors.aliyun.com/pypi/simple \
|
&& pip install -r backend/requirements.txt -i https://mirrors.aliyun.com/pypi/simple \
|
||||||
&& pip install gunicorn aio_pika supervisor wait-for-it -i https://mirrors.aliyun.com/pypi/simple
|
&& pip install aio_pika wait-for-it -i https://mirrors.aliyun.com/pypi/simple
|
||||||
|
|
||||||
ENV TZ="Asia/Shanghai"
|
ENV TZ="Asia/Shanghai"
|
||||||
|
|
||||||
RUN mkdir -p /var/log/celery
|
RUN mkdir -p /var/log/celery \
|
||||||
|
&& mkdir -p /var/log/supervisor \
|
||||||
|
&& mkdir -p /etc/supervisor/conf.d
|
||||||
|
|
||||||
|
COPY deploy/backend/supervisor.conf /etc/supervisor/supervisord.conf
|
||||||
|
|
||||||
COPY deploy/backend/celery.conf /etc/supervisor/conf.d/
|
COPY deploy/backend/celery.conf /etc/supervisor/conf.d/
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ lint = [
|
|||||||
server = [
|
server = [
|
||||||
"gunicorn==21.2.0",
|
"gunicorn==21.2.0",
|
||||||
"aio_pika==9.4.3",
|
"aio_pika==9.4.3",
|
||||||
"supervisor>=4.2.5",
|
|
||||||
"wait-for-it>=2.2.2",
|
"wait-for-it>=2.2.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
23
backend/uv.lock
generated
23
backend/uv.lock
generated
@ -596,7 +596,6 @@ lint = [
|
|||||||
server = [
|
server = [
|
||||||
{ name = "aio-pika" },
|
{ name = "aio-pika" },
|
||||||
{ name = "gunicorn" },
|
{ name = "gunicorn" },
|
||||||
{ name = "supervisor" },
|
|
||||||
{ name = "wait-for-it" },
|
{ name = "wait-for-it" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -650,7 +649,6 @@ lint = [
|
|||||||
server = [
|
server = [
|
||||||
{ name = "aio-pika", specifier = "==9.4.3" },
|
{ name = "aio-pika", specifier = "==9.4.3" },
|
||||||
{ name = "gunicorn", specifier = "==21.2.0" },
|
{ name = "gunicorn", specifier = "==21.2.0" },
|
||||||
{ name = "supervisor", specifier = ">=4.2.5" },
|
|
||||||
{ name = "wait-for-it", specifier = ">=2.2.2" },
|
{ name = "wait-for-it", specifier = ">=2.2.2" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1746,15 +1744,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/7f/7b/c920673ac01c19814dd15fc617c02301c522f3d6812ca2024f4588ed4549/ruff-0.7.2-py3-none-win_arm64.whl", hash = "sha256:bb8368cd45bba3f57bb29cbb8d64b4a33f8415d0149d2655c5c8539452ce7760", size = 8735845 },
|
{ url = "https://files.pythonhosted.org/packages/7f/7b/c920673ac01c19814dd15fc617c02301c522f3d6812ca2024f4588ed4549/ruff-0.7.2-py3-none-win_arm64.whl", hash = "sha256:bb8368cd45bba3f57bb29cbb8d64b4a33f8415d0149d2655c5c8539452ce7760", size = 8735845 },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "setuptools"
|
|
||||||
version = "75.3.0"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/ed/22/a438e0caa4576f8c383fa4d35f1cc01655a46c75be358960d815bfbb12bd/setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686", size = 1351577 }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shellingham"
|
name = "shellingham"
|
||||||
version = "1.5.4"
|
version = "1.5.4"
|
||||||
@ -1870,18 +1859,6 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/fd/18/31fa32ed6c68ba66220204ef0be798c349d0a20c1901f9d4a794e08c76d8/starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee", size = 71908 },
|
{ url = "https://files.pythonhosted.org/packages/fd/18/31fa32ed6c68ba66220204ef0be798c349d0a20c1901f9d4a794e08c76d8/starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee", size = 71908 },
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "supervisor"
|
|
||||||
version = "4.2.5"
|
|
||||||
source = { registry = "https://pypi.org/simple" }
|
|
||||||
dependencies = [
|
|
||||||
{ name = "setuptools" },
|
|
||||||
]
|
|
||||||
sdist = { url = "https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz", hash = "sha256:34761bae1a23c58192281a5115fb07fbf22c9b0133c08166beffc70fed3ebc12", size = 466073 }
|
|
||||||
wheels = [
|
|
||||||
{ url = "https://files.pythonhosted.org/packages/2c/7a/0ad3973941590c040475046fef37a2b08a76691e61aa59540828ee235a6e/supervisor-4.2.5-py2.py3-none-any.whl", hash = "sha256:2ecaede32fc25af814696374b79e42644ecaba5c09494c51016ffda9602d0f08", size = 319561 },
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
|
@ -20,7 +20,7 @@ stdout_logfile=/var/log/celery/fba_celery_beat.log
|
|||||||
|
|
||||||
[program:celery_flower]
|
[program:celery_flower]
|
||||||
directory=/fba/backend
|
directory=/fba/backend
|
||||||
command=/usr/local/bin/celery -A app.task.celery flower --port=8555 --basic-auth=admin:123456
|
command=/usr/local/bin/celery -A app.task.celery flower --port=8555 --url-prefix=flower --basic-auth=admin:123456
|
||||||
user=root
|
user=root
|
||||||
autostart=true
|
autostart=true
|
||||||
autorestart=true
|
autorestart=true
|
||||||
|
@ -1,22 +1,3 @@
|
|||||||
networks:
|
|
||||||
fba_network:
|
|
||||||
name: fba_network
|
|
||||||
driver: bridge
|
|
||||||
ipam:
|
|
||||||
driver: default
|
|
||||||
config:
|
|
||||||
- subnet: 172.10.10.0/24
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
fba_mysql:
|
|
||||||
name: fba_mysql
|
|
||||||
fba_redis:
|
|
||||||
name: fba_redis
|
|
||||||
fba_static:
|
|
||||||
name: fba_static
|
|
||||||
fba_rabbitmq:
|
|
||||||
name: fba_rabbitmq
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
fba_server:
|
fba_server:
|
||||||
build:
|
build:
|
||||||
@ -38,8 +19,7 @@ services:
|
|||||||
- -c
|
- -c
|
||||||
- |
|
- |
|
||||||
wait-for-it -s fba_mysql:3306 -s fba_redis:6379 -t 300
|
wait-for-it -s fba_mysql:3306 -s fba_redis:6379 -t 300
|
||||||
mkdir -p /var/log/supervisor/
|
supervisord -c /etc/supervisor/supervisord.conf
|
||||||
supervisord -c /fba/deploy/backend/supervisor.conf
|
|
||||||
supervisorctl restart
|
supervisorctl restart
|
||||||
|
|
||||||
fba_mysql:
|
fba_mysql:
|
||||||
@ -62,20 +42,20 @@ services:
|
|||||||
--collation-server=utf8mb4_general_ci
|
--collation-server=utf8mb4_general_ci
|
||||||
--lower_case_table_names=1
|
--lower_case_table_names=1
|
||||||
|
|
||||||
# fba_postgres:
|
# fba_postgres:
|
||||||
# image: postgres:16
|
# image: postgres:16
|
||||||
# ports:
|
# ports:
|
||||||
# - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432"
|
# - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432"
|
||||||
# container_name: fba_postgres
|
# container_name: fba_postgres
|
||||||
# restart: always
|
# restart: always
|
||||||
# environment:
|
# environment:
|
||||||
# POSTGRES_DB: fba
|
# POSTGRES_DB: fba
|
||||||
# POSTGRES_PASSWORD: 123456
|
# POSTGRES_PASSWORD: 123456
|
||||||
# TZ: Asia/Shanghai
|
# TZ: Asia/Shanghai
|
||||||
# volumes:
|
# volumes:
|
||||||
# - fba_postgres:/var/lib/postgresql/data
|
# - fba_postgres:/var/lib/postgresql/data
|
||||||
# networks:
|
# networks:
|
||||||
# - fba_network
|
# - fba_network
|
||||||
|
|
||||||
fba_redis:
|
fba_redis:
|
||||||
image: redis:6.2.7
|
image: redis:6.2.7
|
||||||
@ -99,33 +79,33 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- fba_server
|
- fba_server
|
||||||
volumes:
|
volumes:
|
||||||
- ../nginx.conf:/etc/nginx/nginx.conf:ro
|
- ../nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
- fba_static:/www/fba_server/backend/static
|
- fba_static:/www/fba_server/backend/static
|
||||||
networks:
|
networks:
|
||||||
- fba_network
|
- fba_network
|
||||||
|
|
||||||
# fba_ui:
|
# fba_ui:
|
||||||
# build:
|
# build:
|
||||||
# context: /root/fastapi_best_architecture_ui
|
# context: /root/fastapi_best_architecture_ui
|
||||||
# dockerfile: Dockerfile
|
# dockerfile: Dockerfile
|
||||||
# image: fba_ui:latest
|
# image: fba_ui:latest
|
||||||
# ports:
|
# ports:
|
||||||
# - "80:80"
|
# - "80:80"
|
||||||
# - "443:443"
|
# - "443:443"
|
||||||
# container_name: fba_ui
|
# container_name: fba_ui
|
||||||
# restart: always
|
# restart: always
|
||||||
# depends_on:
|
# depends_on:
|
||||||
# - fba_server
|
# - fba_server
|
||||||
# command:
|
# command:
|
||||||
# - nginx
|
# - nginx
|
||||||
# - -g
|
# - -g
|
||||||
# - daemon off;
|
# - daemon off;
|
||||||
# volumes:
|
# volumes:
|
||||||
# # - local_ssl_pem_path:/etc/ssl/xxx.pem
|
# # - local_ssl_pem_path:/etc/ssl/xxx.pem
|
||||||
# # - local_ssl_key_path:/etc/ssl/xxx.key
|
# # - local_ssl_key_path:/etc/ssl/xxx.key
|
||||||
# - fba_static:/www/fba_server/backend/static
|
# - fba_static:/www/fba_server/backend/static
|
||||||
# networks:
|
# networks:
|
||||||
# - fba_network
|
# - fba_network
|
||||||
|
|
||||||
fba_rabbitmq:
|
fba_rabbitmq:
|
||||||
hostname: fba_rabbitmq
|
hostname: fba_rabbitmq
|
||||||
@ -161,6 +141,24 @@ services:
|
|||||||
- -c
|
- -c
|
||||||
- |
|
- |
|
||||||
wait-for-it -s fba_rabbitmq:5672 -t 300
|
wait-for-it -s fba_rabbitmq:5672 -t 300
|
||||||
mkdir -p /var/log/supervisor/
|
supervisord -c /etc/supervisor/supervisord.conf
|
||||||
supervisord -c /fba/deploy/backend/supervisor.conf
|
|
||||||
supervisorctl restart
|
supervisorctl restart
|
||||||
|
|
||||||
|
networks:
|
||||||
|
fba_network:
|
||||||
|
name: fba_network
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
driver: default
|
||||||
|
config:
|
||||||
|
- subnet: 172.10.10.0/24
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
fba_mysql:
|
||||||
|
name: fba_mysql
|
||||||
|
fba_redis:
|
||||||
|
name: fba_redis
|
||||||
|
fba_static:
|
||||||
|
name: fba_static
|
||||||
|
fba_rabbitmq:
|
||||||
|
name: fba_rabbitmq
|
||||||
|
@ -1,25 +1,10 @@
|
|||||||
# For more information on configuration, see:
|
server {
|
||||||
# * Official English Documentation: http://nginx.org/en/docs/
|
listen 80 default_server;
|
||||||
# * Official Russian Documentation: http://nginx.org/ru/docs/
|
listen [::]:80 default_server;
|
||||||
|
server_name 127.0.0.1;
|
||||||
|
|
||||||
user nginx;
|
root /fba;
|
||||||
worker_processes auto;
|
|
||||||
error_log /var/log/nginx/error.log;
|
|
||||||
pid /run/nginx.pid;
|
|
||||||
|
|
||||||
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
|
|
||||||
include /usr/share/nginx/modules/*.conf;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
client_max_body_size 5M;
|
client_max_body_size 5M;
|
||||||
client_body_buffer_size 5M;
|
client_body_buffer_size 5M;
|
||||||
|
|
||||||
@ -30,15 +15,6 @@ http {
|
|||||||
|
|
||||||
keepalive_timeout 300;
|
keepalive_timeout 300;
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80 default_server;
|
|
||||||
listen [::]:80 default_server;
|
|
||||||
server_name 127.0.0.1;
|
|
||||||
|
|
||||||
root /fba;
|
|
||||||
|
|
||||||
client_max_body_size 10m; # 最大上传文件
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://fba_server:8001;
|
proxy_pass http://fba_server:8001;
|
||||||
|
|
||||||
@ -51,8 +27,25 @@ http {
|
|||||||
proxy_read_timeout 300s;
|
proxy_read_timeout 300s;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /static/ {
|
location /flower/ {
|
||||||
|
proxy_pass http://fba_server:8555;
|
||||||
|
|
||||||
|
proxy_set_header Host $http_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;
|
||||||
|
proxy_connect_timeout 300s;
|
||||||
|
proxy_send_timeout 300s;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
proxy_redirect off;
|
||||||
|
|
||||||
|
# WebSocket 支持
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
}
|
||||||
|
|
||||||
|
location /static {
|
||||||
alias /www/fba_server/backend/static;
|
alias /www/fba_server/backend/static;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user