Skip to content

Commit 6c258f0

Browse files
authored
Optimize Dockerfile for faster builds (#526)
1 parent 87af1f1 commit 6c258f0

File tree

7 files changed

+130
-107
lines changed

7 files changed

+130
-107
lines changed

.dockerignore

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
**/__pycache__
2+
**/venv
3+
**/.venv
4+
**/.python-version
5+
**/.git
6+
**/.github

backend/Dockerfile

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Select the image to build based on SERVER_TYPE, defaulting to fastapi_server, or docker-compose build args
2+
ARG SERVER_TYPE=fastapi_server
3+
4+
# === Python environment from uv ===
5+
FROM python:3.10-slim AS builder
6+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
7+
8+
# Used for build Python packages
9+
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
10+
&& apt-get update \
11+
&& apt-get install -y --no-install-recommends gcc python3-dev \
12+
&& rm -rf /var/lib/apt/lists/*
13+
14+
# Configure uv environment
15+
ENV UV_COMPILE_BYTECODE=1 \
16+
UV_NO_CACHE=1 \
17+
UV_LINK_MODE=copy \
18+
UV_PROJECT_ENVIRONMENT=/usr/local \
19+
UV_INDEX=https://mirrors.aliyun.com/pypi/simple
20+
21+
# Install dependencies with cache
22+
RUN --mount=type=cache,target=/root/.cache/uv \
23+
--mount=type=bind,source=backend/uv.lock,target=uv.lock \
24+
--mount=type=bind,source=backend/pyproject.toml,target=pyproject.toml \
25+
uv sync --frozen --no-default-groups --group server
26+
27+
# === Runtime base server image ===
28+
FROM python:3.10-slim AS base_server
29+
30+
SHELL ["/bin/bash", "-c"]
31+
32+
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
33+
&& apt-get update \
34+
&& apt-get install -y --no-install-recommends supervisor \
35+
&& rm -rf /var/lib/apt/lists/*
36+
37+
COPY . /fba
38+
39+
COPY --from=builder /usr/local /usr/local
40+
41+
# Install plugin dependencies
42+
WORKDIR /fba
43+
ENV PYTHONPATH=/fba
44+
RUN python3 backend/scripts/init_plugin.py
45+
46+
# === FastPAI server iamge ===
47+
FROM base_server AS fastapi_server
48+
49+
WORKDIR /fba
50+
51+
COPY deploy/backend/supervisord.conf /etc/supervisor/supervisord.conf
52+
COPY deploy/backend/fastapi_server.conf /etc/supervisor/conf.d/
53+
54+
RUN mkdir -p /var/log/fastapi_server
55+
56+
EXPOSE 8001
57+
58+
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port","8000"]
59+
60+
# === Celery server iamge ===
61+
FROM base_server AS celery
62+
63+
WORKDIR /fba/backend/
64+
65+
COPY deploy/backend/supervisord.conf /etc/supervisor/supervisord.conf
66+
COPY deploy/backend/celery.conf /etc/supervisor/conf.d/
67+
68+
RUN mkdir -p /var/log/celery
69+
70+
RUN chmod +x celery-start.sh
71+
72+
EXPOSE 8555
73+
74+
CMD ["./celery-start.sh"]
75+
76+
# Build image
77+
FROM ${SERVER_TYPE}

backend/backend.dockerfile

-30
This file was deleted.

backend/celery.dockerfile

-34
This file was deleted.

backend/pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ lint = [
6161
]
6262
server = [
6363
"gunicorn==21.2.0",
64-
"aio_pika==9.4.3",
64+
"aio-pika==9.4.3",
6565
"wait-for-it>=2.2.2",
6666
]
6767

backend/uv.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/backend/docker-compose/docker-compose.yml

+45-42
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ services:
22
fba_server:
33
build:
44
context: ../../../
5-
dockerfile: backend/backend.dockerfile
5+
dockerfile: backend/Dockerfile
66
image: fba_server:latest
77
container_name: fba_server
88
restart: always
@@ -11,6 +11,7 @@ services:
1111
- fba_redis
1212
- fba_celery
1313
volumes:
14+
- .env.server:/fba/backend/.env
1415
- fba_static:/fba/backend/app/static
1516
networks:
1617
- fba_network
@@ -23,7 +24,7 @@ services:
2324
supervisorctl restart
2425
2526
fba_mysql:
26-
image: mysql:8.0.29
27+
image: mysql:8.0.41
2728
ports:
2829
- "${DOCKER_MYSQL_MAP_PORT:-3306}:3306"
2930
container_name: fba_mysql
@@ -42,31 +43,31 @@ services:
4243
--collation-server=utf8mb4_general_ci
4344
--lower_case_table_names=1
4445

45-
# fba_postgres:
46-
# image: postgres:16
47-
# ports:
48-
# - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432"
49-
# container_name: fba_postgres
50-
# restart: always
51-
# environment:
52-
# POSTGRES_DB: fba
53-
# POSTGRES_PASSWORD: 123456
54-
# TZ: Asia/Shanghai
55-
# volumes:
56-
# - fba_postgres:/var/lib/postgresql/data
57-
# networks:
58-
# - fba_network
46+
# fba_postgres:
47+
# image: postgres:16
48+
# ports:
49+
# - "${DOCKER_POSTGRES_MAP_PORT:-5432}:5432"
50+
# container_name: fba_postgres
51+
# restart: always
52+
# environment:
53+
# POSTGRES_DB: fba
54+
# POSTGRES_PASSWORD: 123456
55+
# TZ: Asia/Shanghai
56+
# volumes:
57+
# - fba_postgres:/var/lib/postgresql/data
58+
# networks:
59+
# - fba_network
5960

6061
fba_redis:
61-
image: redis:6.2.7
62+
image: redis
6263
ports:
6364
- "${DOCKER_REDIS_MAP_PORT:-6379}:6379"
6465
container_name: fba_redis
6566
restart: always
6667
environment:
6768
- TZ=Asia/Shanghai
6869
volumes:
69-
- fba_redis:/var/lib/redis
70+
- fba_redis:/usr/local/etc/redis
7071
networks:
7172
- fba_network
7273

@@ -85,32 +86,32 @@ services:
8586
networks:
8687
- fba_network
8788

88-
# fba_ui:
89-
# build:
90-
# context: /root/fastapi_best_architecture_ui
91-
# dockerfile: Dockerfile
92-
# image: fba_ui:latest
93-
# ports:
94-
# - "80:80"
95-
# - "443:443"
96-
# container_name: fba_ui
97-
# restart: always
98-
# depends_on:
99-
# - fba_server
100-
# command:
101-
# - nginx
102-
# - -g
103-
# - daemon off;
104-
# volumes:
105-
# # - local_ssl_pem_path:/etc/ssl/xxx.pem
106-
# # - local_ssl_key_path:/etc/ssl/xxx.key
107-
# - fba_static:/www/fba_server/backend/static
108-
# networks:
109-
# - fba_network
89+
# fba_ui:
90+
# build:
91+
# context: /root/fastapi_best_architecture_ui
92+
# dockerfile: Dockerfile
93+
# image: fba_ui:latest
94+
# ports:
95+
# - "80:80"
96+
# - "443:443"
97+
# container_name: fba_ui
98+
# restart: always
99+
# depends_on:
100+
# - fba_server
101+
# command:
102+
# - nginx
103+
# - -g
104+
# - daemon off;
105+
# volumes:
106+
# # - local_ssl_pem_path:/etc/ssl/xxx.pem
107+
# # - local_ssl_key_path:/etc/ssl/xxx.key
108+
# - fba_static:/www/fba_server/backend/static
109+
# networks:
110+
# - fba_network
110111

111112
fba_rabbitmq:
112113
hostname: fba_rabbitmq
113-
image: rabbitmq:3.12.7
114+
image: rabbitmq:3.13.7
114115
ports:
115116
- "15672:15672"
116117
- "5672:5672"
@@ -127,7 +128,9 @@ services:
127128
fba_celery:
128129
build:
129130
context: ../../../
130-
dockerfile: backend/celery.dockerfile
131+
dockerfile: backend/Dockerfile
132+
args:
133+
- SERVER_TYPE=celery
131134
image: fba_celery:latest
132135
ports:
133136
- "8555:8555"

0 commit comments

Comments
 (0)