diff --git a/backend/backend.dockerfile b/backend/backend.dockerfile index ddf1a475..623e1f2f 100644 --- a/backend/backend.dockerfile +++ b/backend/backend.dockerfile @@ -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 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/* \ # 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/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 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" -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/ 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"] diff --git a/backend/celery.dockerfile b/backend/celery.dockerfile index d344305b..6d75ed5a 100644 --- a/backend/celery.dockerfile +++ b/backend/celery.dockerfile @@ -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 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/* \ # 某些包可能存在同步不及时导致安装失败的情况,可更改为官方源:https://pypi.org/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 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" -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/ diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 2bdc20e6..301e902f 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -62,7 +62,6 @@ lint = [ server = [ "gunicorn==21.2.0", "aio_pika==9.4.3", - "supervisor>=4.2.5", "wait-for-it>=2.2.2", ] diff --git a/backend/uv.lock b/backend/uv.lock index bf696a72..61f5535e 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -596,7 +596,6 @@ lint = [ server = [ { name = "aio-pika" }, { name = "gunicorn" }, - { name = "supervisor" }, { name = "wait-for-it" }, ] @@ -650,7 +649,6 @@ lint = [ server = [ { name = "aio-pika", specifier = "==9.4.3" }, { name = "gunicorn", specifier = "==21.2.0" }, - { name = "supervisor", specifier = ">=4.2.5" }, { 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 }, ] -[[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]] name = "shellingham" 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 }, ] -[[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]] name = "termcolor" version = "2.5.0" diff --git a/deploy/backend/celery.conf b/deploy/backend/celery.conf index 7b1039e6..4e6c95a6 100644 --- a/deploy/backend/celery.conf +++ b/deploy/backend/celery.conf @@ -20,7 +20,7 @@ stdout_logfile=/var/log/celery/fba_celery_beat.log [program:celery_flower] 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 autostart=true autorestart=true diff --git a/deploy/backend/docker-compose/docker-compose.yml b/deploy/backend/docker-compose/docker-compose.yml index fcf5bed4..cd294b7b 100644 --- a/deploy/backend/docker-compose/docker-compose.yml +++ b/deploy/backend/docker-compose/docker-compose.yml @@ -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: fba_server: build: @@ -38,8 +19,7 @@ services: - -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 + supervisord -c /etc/supervisor/supervisord.conf supervisorctl restart fba_mysql: @@ -62,20 +42,20 @@ services: --collation-server=utf8mb4_general_ci --lower_case_table_names=1 -# fba_postgres: -# image: postgres:16 -# ports: -# - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432" -# container_name: fba_postgres -# restart: always -# environment: -# POSTGRES_DB: fba -# POSTGRES_PASSWORD: 123456 -# TZ: Asia/Shanghai -# volumes: -# - fba_postgres:/var/lib/postgresql/data -# networks: -# - fba_network + # fba_postgres: + # image: postgres:16 + # ports: + # - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432" + # container_name: fba_postgres + # restart: always + # environment: + # POSTGRES_DB: fba + # POSTGRES_PASSWORD: 123456 + # TZ: Asia/Shanghai + # volumes: + # - fba_postgres:/var/lib/postgresql/data + # networks: + # - fba_network fba_redis: image: redis:6.2.7 @@ -99,33 +79,33 @@ services: depends_on: - fba_server volumes: - - ../nginx.conf:/etc/nginx/nginx.conf:ro + - ../nginx.conf:/etc/nginx/conf.d/default.conf:ro - fba_static:/www/fba_server/backend/static networks: - fba_network -# fba_ui: -# build: -# context: /root/fastapi_best_architecture_ui -# 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: -# # - 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_ui: + # build: + # context: /root/fastapi_best_architecture_ui + # 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: + # # - 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 @@ -161,6 +141,24 @@ services: - -c - | wait-for-it -s fba_rabbitmq:5672 -t 300 - mkdir -p /var/log/supervisor/ - supervisord -c /fba/deploy/backend/supervisor.conf + supervisord -c /etc/supervisor/supervisord.conf 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 diff --git a/deploy/backend/nginx.conf b/deploy/backend/nginx.conf index 6ca80e0b..46a8035f 100644 --- a/deploy/backend/nginx.conf +++ b/deploy/backend/nginx.conf @@ -1,25 +1,10 @@ -# For more information on configuration, see: -# * Official English Documentation: http://nginx.org/en/docs/ -# * Official Russian Documentation: http://nginx.org/ru/docs/ +server { + listen 80 default_server; + listen [::]:80 default_server; + server_name 127.0.0.1; -user nginx; -worker_processes auto; -error_log /var/log/nginx/error.log; -pid /run/nginx.pid; + root /fba; -# 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_body_buffer_size 5M; @@ -30,29 +15,37 @@ http { keepalive_timeout 300; - server { - listen 80 default_server; - listen [::]:80 default_server; - server_name 127.0.0.1; + location / { + proxy_pass http://fba_server:8001; - root /fba; + 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; + } - client_max_body_size 10m; # 最大上传文件 + location /flower/ { + proxy_pass http://fba_server:8555; - location / { - proxy_pass http://fba_server:8001; + 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; - 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; - } + # 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; - } + location /static { + alias /www/fba_server/backend/static; } }