diff options
| author | nsfisis <nsfisis@gmail.com> | 2024-07-27 19:02:32 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2024-07-27 19:02:32 +0900 |
| commit | 7cbf34204233df7c7e9e4b24998e25dbd8d2a423 (patch) | |
| tree | 848da44374c48edec603fb014c59ad0fbb9307e6 | |
| parent | 18308a22879dc9143a03bcbe53cf0c5e8e49ee1f (diff) | |
| download | iosdc-japan-2025-albatross-7cbf34204233df7c7e9e4b24998e25dbd8d2a423.tar.gz iosdc-japan-2025-albatross-7cbf34204233df7c7e9e4b24998e25dbd8d2a423.tar.zst iosdc-japan-2025-albatross-7cbf34204233df7c7e9e4b24998e25dbd8d2a423.zip | |
organize dockerfiles and compose.yaml
| -rw-r--r-- | Dockerfile | 22 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | backend/Dockerfile | 13 | ||||
| -rw-r--r-- | backend/Dockerfile.tools (renamed from Dockerfile.tools) | 0 | ||||
| -rw-r--r-- | backend/main.go | 6 | ||||
| -rw-r--r-- | compose.yaml | 38 | ||||
| -rw-r--r-- | frontend/.dockerignore | 3 | ||||
| -rw-r--r-- | frontend/Dockerfile | 28 | ||||
| -rw-r--r-- | nginx.conf | 42 |
9 files changed, 118 insertions, 40 deletions
diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ac3da2f..0000000 --- a/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM golang:1.22.3 AS backend-builder - -WORKDIR /build -COPY ./backend /build -RUN go build -o /build/server . - -################################################################################ -FROM node:18.20.2 AS frontend-builder - -WORKDIR /build -COPY ./frontend /build -RUN npm install -RUN npm run build - -################################################################################ -FROM golang:1.22.3 - -WORKDIR /app -COPY --from=backend-builder /build/server /app/server -COPY --from=frontend-builder /build/dist /app/public - -CMD ["/app/server"] @@ -15,11 +15,13 @@ psql: up docker compose exec db psql --user=postgres albatross .PHONY: sqldef-dryrun -sqldef-dryrun: +sqldef-dryrun: down build + docker compose up -d db docker compose run --no-TTY tools psqldef --dry-run < ./backend/schema.sql .PHONY: sqldef -sqldef: +sqldef: down build + docker compose up -d db docker compose run --no-TTY tools psqldef < ./backend/schema.sql .PHONY: sqlc diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..1d1523d --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.22.3 AS builder + +WORKDIR /build +COPY . /build +RUN go build -o /build/server . + +################################################################################ +FROM golang:1.22.3 + +WORKDIR /app +COPY --from=builder /build/server /app/server + +CMD ["/app/server"] diff --git a/Dockerfile.tools b/backend/Dockerfile.tools index de025b8..de025b8 100644 --- a/Dockerfile.tools +++ b/backend/Dockerfile.tools diff --git a/backend/main.go b/backend/main.go index 257647c..26859e5 100644 --- a/backend/main.go +++ b/backend/main.go @@ -165,12 +165,6 @@ func main() { e := echo.New() - e.Static("/assets", "public/assets") - - e.GET("/*", func(c echo.Context) error { - return c.File("public/index.html") - }) - e.GET("/sock/golf/:gameId/watch", func(c echo.Context) error { gameId := c.Param("gameId") gameIdInt, err := strconv.Atoi(gameId) diff --git a/compose.yaml b/compose.yaml index e5b3994..4714568 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,10 +1,20 @@ services: - server: - build: - context: . - dockerfile: Dockerfile + reverse-proxy: + image: nginx:1.27 ports: - - '8002:80' + - '127.0.0.1:8002:80' + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + depends_on: + - api-server + - app-server + restart: always + + api-server: + build: + context: ./backend + expose: + - 80 depends_on: db: condition: service_healthy @@ -14,6 +24,16 @@ services: ALBATROSS_DB_USER: postgres ALBATROSS_DB_PASSWORD: eepei5reesoo0ov2ceelahd4Emi0au8ahJa6oochohheiquahweihoovahsee1oo ALBATROSS_DB_NAME: albatross + restart: always + + app-server: + build: + context: ./frontend + args: + ALBATROSS_HOST: localhost + expose: + - 80 + restart: always db: image: postgres:16.3 @@ -30,14 +50,12 @@ services: retries: 5 volumes: - db-data:/var/lib/postgresql/data + restart: always tools: build: - context: . - dockerfile: Dockerfile.tools - depends_on: - db: - condition: service_healthy + context: ./backend + dockerfile: ./Dockerfile.tools environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: eepei5reesoo0ov2ceelahd4Emi0au8ahJa6oochohheiquahweihoovahsee1oo diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..9cabb19 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,3 @@ +/node_modules +/.cache +/build diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..974725e --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,28 @@ +ARG ALBATROSS_HOST + +FROM node:20.14.0 AS builder + +WORKDIR /app +ENV NODE_ENV=production + +COPY package.json package-lock.json . +RUN npm install --include=dev + +COPY . . +RUN npm run build + +################################################################################ +FROM node:20.14.0 + +WORKDIR /app +ENV NODE_ENV=production + +COPY package.json package-lock.json . +RUN npm install --omit=dev + +COPY --from=builder /app/build ./build + +ENV HOST="$ALBATROSS_HOST" +ENV PORT=80 +EXPOSE 80 +CMD ["npm", "run", "start"] diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..cee5b5f --- /dev/null +++ b/nginx.conf @@ -0,0 +1,42 @@ +events { + worker_connections 1024; +} + +http { + # https://nginx.org/en/docs/http/websocket.html + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 80; + + location /api/ { + proxy_pass http://api-server; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /sock/ { + proxy_pass http://api-server; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location / { + proxy_pass http://app-server; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + } +} |
