This commit is contained in:
2025-05-20 23:49:50 +02:00
parent 38a54f9005
commit 87c790aa05
8 changed files with 16 additions and 32 deletions
+10
View File
@@ -0,0 +1,10 @@
POSTGRES_USER=Admin
POSTGRES_PASSWORD=QwEr12345.
POSTGRES_DB_1=Default
POSTGRES_DB_2=USERS
POSTGRES_DB_3=QUESTIONS
POSTGRES_DB_4=STATISTICS
BACKEND_PORT=3000
FRONTEND_PORT=5173
DATABASE_PORT=80
+27
View File
@@ -0,0 +1,27 @@
FROM node:18 AS base
WORKDIR /usr/local/app
################ FRONTEND BUILD #################
FROM base AS client-build
WORKDIR /usr/local/app/frontend
COPY SerpentRace_Frontend/package.json SerpentRace_Frontend/package-lock.json ./
RUN npm ci
COPY SerpentRace_Frontend/ ./
RUN npm run build
################ BACKEND BUILD #################
FROM base AS backend-build
WORKDIR /usr/local/app/backend
COPY SerpentRace_Backend/package.json SerpentRace_Backend/package-lock.json ./
RUN npm ci
COPY SerpentRace_Backend/ ./
# Copy frontend build output to backend static directory
COPY --from=client-build /usr/local/app/frontend/dist ./src/static
################ PRODUCTION IMAGE #################
FROM backend-build AS prod
WORKDIR /usr/local/app/backend
ENV NODE_ENV=production
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "src/index.mjs"]
+76
View File
@@ -0,0 +1,76 @@
services:
proxy:
image: traefik:v2.11
command: --providers.docker
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
backend:
build:
context: ..
dockerfile: SerpentRace_Docker/Dockerfile
target: prod
environment:
POSTGRES_HOST: db
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB_1}
DB_1: ${POSTGRES_DB_2}
DB_2: ${POSTGRES_DB_3}
DB_3: ${POSTGRES_DB_4}
command: ["npx", "nodemon", "src/index.mjs"]
develop:
watch:
- path: ../SerpentRace_Backend/src
action: sync
target: /usr/local/app/backend/src
- path: ../SerpentRace_Backend/package.json
action: rebuild
labels:
traefik.http.routers.backend.rule: Host(`localhost`) && PathPrefix(`/api`)
traefik.http.services.backend.loadbalancer.server.port: 3000
depends_on:
- db
frontend:
build:
context: ..
dockerfile: SerpentRace_Docker/Dockerfile
target: client-build
command: ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"]
working_dir: /usr/local/app/frontend
develop:
watch:
- path: ../SerpentRace_Frontend/src
action: sync
target: /usr/local/app/frontend/src
- path: ../SerpentRace_Frontend/package.json
action: rebuild
labels:
traefik.http.routers.frontend.rule: Host(`localhost`)
traefik.http.services.frontend.loadbalancer.server.port: 5173
db:
image: postgres
restart: always
shm_size: 128mb
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB_1}
DB_1: ${POSTGRES_DB_2}
DB_2: ${POSTGRES_DB_3}
DB_3: ${POSTGRES_DB_4}
volumes:
- ./init-multi-db.sh:/docker-entrypoint-initdb.d/init-multi-db.sh:ro
adminer:
image: adminer
restart: always
ports:
- "8080:8080"
labels:
traefik.http.routers.adminer.rule: Host(`db.localhost`)
traefik.http.services.adminer.loadbalancer.server.port: 8080
+6
View File
@@ -0,0 +1,6 @@
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE DATABASE "${DB_1}";
CREATE DATABASE "${DB_2}";
CREATE DATABASE "${DB_3}";
EOSQL
+2
View File
@@ -0,0 +1,2 @@
docker compose down -v
pause