Skip to content

Commit df1fc72

Browse files
committed
[DOP-22054] Move migrations to separated script
1 parent 27ea965 commit df1fc72

File tree

10 files changed

+67
-20
lines changed

10 files changed

+67
-20
lines changed

Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,13 @@ dev-worker: db-start broker-start ##@Application Run development broker (without
130130

131131

132132
prod-build-server: ##@Application Build docker image for server
133-
docker build --progress=plain -t mtsrus/syncmaster-backend:develop -f ./docker/Dockerfile.backend $(ARGS) .
133+
docker build --progress=plain -t mtsrus/syncmaster-backend:develop -f ./docker/Dockerfile.backend --target=prod $(ARGS) .
134+
135+
prod-build-scheduler: ##@Application Build docker image for scheduler
136+
docker build --progress=plain -t mtsrus/syncmaster-scheduler:develop -f ./docker/Dockerfile.scheduler --target=prod $(ARGS) .
134137

135138
prod-build-worker: ##@Application Build docker image for worker
136-
docker build --progress=plain -t mtsrus/syncmaster-worker:develop -f ./docker/Dockerfile.worker $(ARGS) .
139+
docker build --progress=plain -t mtsrus/syncmaster-worker:develop -f ./docker/Dockerfile.worker --target=prod $(ARGS) .
137140

138141
prod-build: prod-build-server prod-build-worker ##@Application Build docker images
139142

docker-compose.test.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@ services:
2828
timeout: 5s
2929
retries: 3
3030

31+
migrations:
32+
image: mtsrus/syncmaster-backend:${BACKEND_IMAGE_TAG:-test}
33+
restart: unless-stopped
34+
build:
35+
dockerfile: docker/Dockerfile.backend
36+
context: .
37+
target: test
38+
volumes:
39+
- ./syncmaster:/app/syncmaster
40+
entrypoint: [python, -m, syncmaster.db.migrations, upgrade, head]
41+
env_file: .env.docker
42+
depends_on:
43+
db:
44+
condition: service_healthy
45+
3146
backend:
3247
image: mtsrus/syncmaster-backend:${BACKEND_IMAGE_TAG:-test}
3348
restart: unless-stopped
@@ -41,15 +56,22 @@ services:
4156
volumes:
4257
- ./syncmaster:/app/syncmaster
4358
- ./docs/_static:/app/docs/_static
44-
- ./cached_jars:/root/.ivy2
4559
- ./reports:/app/reports
4660
- ./tests:/app/tests
4761
- ./pyproject.toml:/app/pyproject.toml
4862
depends_on:
4963
db:
5064
condition: service_healthy
65+
migrations:
66+
condition: service_completed_successfully
5167
rabbitmq:
5268
condition: service_healthy
69+
healthcheck:
70+
test: [CMD-SHELL, curl -f http://localhost:8000/monitoring/ping]
71+
interval: 30s
72+
timeout: 5s
73+
retries: 3
74+
start_period: 5s
5375
profiles: [backend, all]
5476

5577
scheduler:
@@ -68,6 +90,8 @@ services:
6890
depends_on:
6991
db:
7092
condition: service_healthy
93+
migrations:
94+
condition: service_completed_successfully
7195
rabbitmq:
7296
condition: service_healthy
7397
profiles: [scheduler, all]
@@ -94,6 +118,8 @@ services:
94118
depends_on:
95119
db:
96120
condition: service_healthy
121+
migrations:
122+
condition: service_completed_successfully
97123
rabbitmq:
98124
condition: service_healthy
99125
profiles: [worker, scheduler, s3, oracle, hdfs, hive, clickhouse, mysql, mssql, all]

docker-compose.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,26 @@ services:
2828
timeout: 5s
2929
retries: 3
3030

31+
migrations:
32+
image: mtsrus/syncmaster-backend:${TAG:-develop}
33+
restart: unless-stopped
34+
build:
35+
dockerfile: docker/Dockerfile.backend
36+
context: .
37+
target: prod
38+
entrypoint: [python, -m, syncmaster.db.migrations, upgrade, head]
39+
env_file: .env.docker
40+
depends_on:
41+
db:
42+
condition: service_healthy
43+
3144
backend:
3245
image: mtsrus/syncmaster-backend:${TAG:-develop}
3346
restart: unless-stopped
3447
build:
3548
dockerfile: docker/Dockerfile.backend
3649
context: .
50+
target: prod
3751
ports:
3852
- 8000:8000
3953
environment:
@@ -49,6 +63,8 @@ services:
4963
depends_on:
5064
db:
5165
condition: service_healthy
66+
migrations:
67+
condition: service_completed_successfully
5268
rabbitmq:
5369
condition: service_healthy
5470
healthcheck:
@@ -64,10 +80,13 @@ services:
6480
build:
6581
dockerfile: docker/Dockerfile.worker
6682
context: .
83+
target: prod
6784
env_file: .env.docker
6885
depends_on:
6986
db:
7087
condition: service_healthy
88+
migrations:
89+
condition: service_completed_successfully
7190
rabbitmq:
7291
condition: service_healthy
7392

@@ -77,10 +96,13 @@ services:
7796
build:
7897
dockerfile: docker/Dockerfile.scheduler
7998
context: .
99+
target: prod
80100
env_file: .env.docker
81101
depends_on:
82102
db:
83103
condition: service_healthy
104+
migrations:
105+
condition: service_completed_successfully
84106
rabbitmq:
85107
condition: service_healthy
86108

docker/Dockerfile.backend

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ENV SYNCMASTER__SERVER__OPENAPI__SWAGGER__JS_URL=/static/swagger/swagger-ui-bund
3939
SYNCMASTER__SERVER__STATIC_FILES__DIRECTORY=/app/syncmaster/backend/static
4040

4141

42-
FROM base as test
42+
FROM base AS test
4343

4444
RUN poetry install --no-root --extras "backend" --with test --without docs,dev
4545
RUN sed -i 's/python -m/coverage run -m/g' /app/entrypoint.sh

docker/Dockerfile.scheduler

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ FROM base AS prod
2222

2323
COPY ./syncmaster/ /app/syncmaster/
2424

25-
FROM base as test
25+
26+
FROM base AS test
2627

2728
RUN poetry install --no-root --all-extras --with test --without docs,dev
28-
RUN sed -i 's/python -m/coverage run -m/g' /app/entrypoint.sh
29+
RUN sed -i 's/python -m/coverage run -m/g' /app/entrypoint.sh

docker/Dockerfile.worker

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ FROM base as prod
4242
COPY ./syncmaster/ /app/syncmaster/
4343

4444

45-
FROM base as test
45+
FROM base AS test
4646

4747
ENV SYNCMASTER__WORKER__CREATE_SPARK_SESSION_FUNCTION=tests.spark.get_worker_spark_session
4848

docker/entrypoint_backend.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env bash
22
set -e
33

4-
python -m syncmaster.db.migrations upgrade head
5-
64
if [[ "x${SYNCMASTER__ENTRYPOINT__SUPERUSERS}" != "x" ]]; then
75
superusers=$(echo "${SYNCMASTER__ENTRYPOINT__SUPERUSERS}" | tr "," " ")
86
python -m syncmaster.backend.scripts.manage_superusers add ${superusers}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Now migrations are executed in a dedicated one-off container, instead of being run as a part of ``backend`` container.

docs/scheduler/start_scheduler.rst

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
Starting the Scheduler
22
======================
33

4-
54
With docker
65
-----------
76

@@ -14,12 +13,12 @@ Options can be set via ``.env`` file or ``environment`` section in ``docker-comp
1413
.. dropdown:: ``docker-compose.yml``
1514

1615
.. literalinclude:: ../../docker-compose.yml
17-
:emphasize-lines: 68-83
16+
:emphasize-lines: 90-103
1817

1918
.. dropdown:: ``.env.docker``
2019

2120
.. literalinclude:: ../../.env.docker
22-
:emphasize-lines: 11-25
21+
:emphasize-lines: 11-25
2322

2423
To start the worker container you need to run the command:
2524

@@ -28,7 +27,6 @@ To start the worker container you need to run the command:
2827
docker compose up scheduler -d --wait --wait-timeout 200
2928
3029
31-
3230
Without docker
3331
--------------
3432

docs/worker/start_worker.rst

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,24 @@ Starting the Celery Worker
66
Before starting the worker you need to create a queue.
77
The queue is created by sending a post request to ``/queues`` endpoint (See Swagger doc for details).
88

9-
109
With docker
1110
-----------
1211

1312
Installation process
1413
~~~~~~~~~~~~~~~~~~~~
1514

16-
Docker will download worker image of syncmaster worker & broker, and run them.
15+
Docker will download worker image, and then start worker container with dependencies.
1716
Options can be set via ``.env`` file or ``environment`` section in ``docker-compose.yml``
1817

1918
.. dropdown:: ``docker-compose.yml``
2019

2120
.. literalinclude:: ../../docker-compose.yml
22-
:emphasize-lines: 55-66
21+
:emphasize-lines: 75-88
2322

2423
.. dropdown:: ``.env.docker``
2524

2625
.. literalinclude:: ../../.env.docker
27-
:emphasize-lines: 11-22
26+
:emphasize-lines: 11-22
2827

2928
To start the worker container you need to run the command:
3029

@@ -33,21 +32,20 @@ To start the worker container you need to run the command:
3332
docker compose up worker -d --wait --wait-timeout 200
3433
3534
36-
3735
Without docker
3836
--------------
3937

4038
To start the worker you need to run the command
4139

4240
.. code-block:: bash
4341
44-
python -m celery -A syncmaster.worker.celery worker
42+
python -m celery -A syncmaster.worker.celery worker --max-tasks-per-child=1
4543
4644
You can specify options like concurrency and queues by adding additional flags:
4745

4846
.. code-block:: bash
4947
50-
celery -A -A syncmaster.worker.celery worker --concurrency=4 --max-tasks-per-child=1 --loglevel=info
48+
python -m celery -A syncmaster.worker.celery worker --concurrency=4 --max-tasks-per-child=1 --loglevel=info
5149
5250
5351
Refer to the `Celery <https://docs.celeryq.dev/en/stable/>`_ documentation for more advanced start options.

0 commit comments

Comments
 (0)