Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
**/__pycache__
**/venv
**/.venv
**/.python-version
**/.git
**/.github
77 changes: 77 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Select the image to build based on SERVER_TYPE, defaulting to fastapi_server, or docker-compose build args
ARG SERVER_TYPE=fastapi_server

# === Python environment from uv ===
FROM python:3.10-slim AS builder
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

# Used for build Python packages
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends gcc python3-dev \
&& rm -rf /var/lib/apt/lists/*

# Configure uv environment
ENV UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1 \
UV_LINK_MODE=copy \
UV_PROJECT_ENVIRONMENT=/usr/local \
UV_INDEX=https://mirrors.aliyun.com/pypi/simple

# Install dependencies with cache
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=backend/uv.lock,target=uv.lock \
--mount=type=bind,source=backend/pyproject.toml,target=pyproject.toml \
uv sync --frozen --no-default-groups --group server

# === Runtime base server image ===
FROM python:3.10-slim AS base_server

SHELL ["/bin/bash", "-c"]

RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends supervisor \
&& rm -rf /var/lib/apt/lists/*

COPY . /fba

COPY --from=builder /usr/local /usr/local

# Install plugin dependencies
WORKDIR /fba
ENV PYTHONPATH=/fba
RUN python3 backend/scripts/init_plugin.py

# === FastPAI server iamge ===
FROM base_server AS fastapi_server

WORKDIR /fba

COPY deploy/backend/supervisord.conf /etc/supervisor/supervisord.conf
COPY deploy/backend/fastapi_server.conf /etc/supervisor/conf.d/

RUN mkdir -p /var/log/fastapi_server

EXPOSE 8001

CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port","8000"]

# === Celery server iamge ===
FROM base_server AS celery

WORKDIR /fba/backend/

COPY deploy/backend/supervisord.conf /etc/supervisor/supervisord.conf
COPY deploy/backend/celery.conf /etc/supervisor/conf.d/

RUN mkdir -p /var/log/celery

RUN chmod +x celery-start.sh

EXPOSE 8555

CMD ["./celery-start.sh"]

# Build image
FROM ${SERVER_TYPE}
30 changes: 0 additions & 30 deletions backend/backend.dockerfile

This file was deleted.

34 changes: 0 additions & 34 deletions backend/celery.dockerfile

This file was deleted.

2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ lint = [
]
server = [
"gunicorn==21.2.0",
"aio_pika==9.4.3",
"aio-pika==9.4.3",
"wait-for-it>=2.2.2",
]

Expand Down
1 change: 1 addition & 0 deletions backend/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

87 changes: 45 additions & 42 deletions deploy/backend/docker-compose/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ services:
fba_server:
build:
context: ../../../
dockerfile: backend/backend.dockerfile
dockerfile: backend/Dockerfile
image: fba_server:latest
container_name: fba_server
restart: always
Expand All @@ -11,6 +11,7 @@ services:
- fba_redis
- fba_celery
volumes:
- .env.server:/fba/backend/.env
- fba_static:/fba/backend/app/static
networks:
- fba_network
Expand All @@ -23,7 +24,7 @@ services:
supervisorctl restart

fba_mysql:
image: mysql:8.0.29
image: mysql:8.0.41
ports:
- "${DOCKER_MYSQL_MAP_PORT:-3306}:3306"
container_name: fba_mysql
Expand All @@ -42,31 +43,31 @@ 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
image: redis
ports:
- "${DOCKER_REDIS_MAP_PORT:-6379}:6379"
container_name: fba_redis
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- fba_redis:/var/lib/redis
- fba_redis:/usr/local/etc/redis
networks:
- fba_network

Expand All @@ -85,32 +86,32 @@ services:
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
image: rabbitmq:3.12.7
image: rabbitmq:3.13.7
ports:
- "15672:15672"
- "5672:5672"
Expand All @@ -127,7 +128,9 @@ services:
fba_celery:
build:
context: ../../../
dockerfile: backend/celery.dockerfile
dockerfile: backend/Dockerfile
args:
- SERVER_TYPE=celery
image: fba_celery:latest
ports:
- "8555:8555"
Expand Down