aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-07-27 19:02:32 +0900
committernsfisis <nsfisis@gmail.com>2024-07-27 19:02:32 +0900
commit7cbf34204233df7c7e9e4b24998e25dbd8d2a423 (patch)
tree848da44374c48edec603fb014c59ad0fbb9307e6
parent18308a22879dc9143a03bcbe53cf0c5e8e49ee1f (diff)
downloadiosdc-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--Dockerfile22
-rw-r--r--Makefile6
-rw-r--r--backend/Dockerfile13
-rw-r--r--backend/Dockerfile.tools (renamed from Dockerfile.tools)0
-rw-r--r--backend/main.go6
-rw-r--r--compose.yaml38
-rw-r--r--frontend/.dockerignore3
-rw-r--r--frontend/Dockerfile28
-rw-r--r--nginx.conf42
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"]
diff --git a/Makefile b/Makefile
index 4e013e1..a1fabae 100644
--- a/Makefile
+++ b/Makefile
@@ -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;
+ }
+ }
+}