Skip to content

Commit 6c7c93e

Browse files
authored
Add the backend Dockerfile (#17)
* Add example.env * Add Dockerfile * Add compose.yaml
1 parent 9263c52 commit 6c7c93e

File tree

3 files changed

+106
-5
lines changed

3 files changed

+106
-5
lines changed

backend/Dockerfile

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,48 @@
1-
# TODO: Install https://github.com/golang-migrate/migrate
1+
FROM python:3.11-slim AS base
2+
3+
ENV UID=1000 GID=1000 HOME=/user
4+
ENV APP="$HOME/app"
5+
RUN groupadd --gid "$GID" user \
6+
&& useradd --uid "$UID" --gid "$GID" --home-dir "$HOME" --shell /bin/bash user \
7+
&& mkdir "$HOME" \
8+
&& chown "$UID:$GID" "$HOME" \
9+
&& mkdir "$APP" \
10+
&& chown "$UID:$GID" "$APP"
11+
12+
WORKDIR "$APP"
13+
14+
15+
FROM base AS builder
16+
17+
ENV MIGRATE_RELEASE_TAG=v4.17.1
18+
RUN apt-get update \
19+
&& apt-get install --no-install-recommends -y curl \
20+
&& rm -rf /var/lib/apt/lists/* \
21+
&& curl -sSL "https://github.com/golang-migrate/migrate/releases/download/${MIGRATE_RELEASE_TAG}/migrate.linux-amd64.tar.gz" | tar -xz -C /usr/local/bin migrate \
22+
&& chown root:root /usr/local/bin/migrate
23+
24+
USER "$UID:$GID"
25+
26+
COPY requirements.txt ./
27+
RUN python -m venv .venv \
28+
&& . .venv/bin/activate \
29+
&& pip install --no-deps --require-hashes --constraint requirements.txt --requirement requirements.txt
30+
31+
32+
FROM base AS runner
33+
34+
RUN mkdir /var/lib/yama \
35+
&& chown "$UID:$GID" /var/lib/yama \
36+
&& mkdir /var/lib/yama/file-system \
37+
&& chown "$UID:$GID" /var/lib/yama/file-system
38+
VOLUME /var/lib/yama/file-system
39+
40+
USER "$UID:$GID"
41+
42+
COPY --from=builder /usr/local/bin/migrate /usr/local/bin/migrate
43+
COPY . ./
44+
COPY --from=builder "$APP/.venv" .venv
45+
46+
ENV PATH="$APP/.venv/bin:$PATH" PYTHONPATH="$APP:$PYTHONPATH"
47+
48+
ENTRYPOINT ["python", "-m", "yama"]

backend/compose.yaml

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,43 @@
11
services:
22
database:
33
image: postgres:16-alpine
4-
environment:
5-
POSTGRES_DB: postgres
6-
POSTGRES_USER: postgres
7-
POSTGRES_PASSWORD: postgres
4+
env_file: example.env
85
ports:
96
- "5432:5432"
107
volumes:
118
- database-data:/var/lib/postgresql/data
9+
healthcheck:
10+
test: ["CMD-SHELL", "pg_isready", "-U", "$POSTGRES_USER", "-d", "$POSTGRES_DB"]
11+
interval: 10s
12+
timeout: 3s
13+
retries: 3
14+
database-up:
15+
build: .
16+
command: database up
17+
env_file: example.env
18+
environment:
19+
YAMA__DATABASE__HOST: database
20+
depends_on:
21+
database:
22+
condition: service_healthy
23+
api:
24+
build: .
25+
command: api
26+
env_file: example.env
27+
environment:
28+
YAMA__DATABASE__HOST: database
29+
YAMA__API__HOST: 0.0.0.0
30+
YAMA__API__PORT: 8000
31+
YAMA__API__RELOAD: false
32+
YAMA__FILE__FILES_BASE_URL: "http://api:8000/files"
33+
YAMA__FILE__DRIVER__FILE_SYSTEM_DIR: /var/lib/yama/file-system
34+
ports:
35+
- "8000:8000"
36+
volumes:
37+
- yama-file-data:/var/lib/yama/file-system
38+
depends_on:
39+
database-up:
40+
condition: service_completed_successfully
1241
volumes:
1342
database-data:
43+
yama-file-data:

backend/example.env

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
POSTGRES_DB=postgres
2+
POSTGRES_USER=postgres
3+
POSTGRES_PASSWORD=postgres
4+
YAMA__DATABASE__HOST=localhost
5+
YAMA__DATABASE__PORT=5432
6+
YAMA__DATABASE__USERNAME=postgres
7+
YAMA__DATABASE__PASSWORD=postgres
8+
YAMA__DATABASE__DATABASE=yama
9+
YAMA__DATABASE__PROVISION__USERNAME=postgres
10+
YAMA__DATABASE__PROVISION__PASSWORD=postgres
11+
YAMA__DATABASE__PROVISION__DATABASE=postgres
12+
YAMA__DATABASE__PROVISION__MIGRATE_EXECUTABLE=migrate
13+
YAMA__API__HOST=localhost
14+
YAMA__API__PORT=8000
15+
YAMA__API__RELOAD=true
16+
YAMA__USER__PUBLIC_USER_ID=00000000-0000-0000-0000-000000000000
17+
YAMA__USER__AUTH__ACCESS_TOKEN__KEY=abc
18+
YAMA__USER__AUTH__ACCESS_TOKEN__EXPIRE_SECONDS=1800
19+
YAMA__USER__AUTH__REFRESH_TOKEN__KEY=xyz
20+
YAMA__USER__AUTH__REFRESH_TOKEN__EXPIRE_SECONDS=604800
21+
YAMA__FILE__FILES_BASE_URL=http://localhost:8000/files
22+
YAMA__FILE__ROOT_FILE_ID=00000000-0000-0000-0000-111111111111
23+
YAMA__FILE__DRIVER__TYPE=file-system
24+
YAMA__FILE__DRIVER__FILE_SYSTEM_DIR=/var/lib/yama/data/file-system

0 commit comments

Comments
 (0)