Compare commits
4 Commits
d1d49ecc49
...
v0.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
cc3996b384
|
|||
|
1b946789a4
|
|||
|
fbe10a0288
|
|||
|
bfafd63b33
|
@@ -28,6 +28,21 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 26
|
||||||
|
cache: 'npm'
|
||||||
|
cache-dependency-path: ./frontend/package-lock.json
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
working-directory: ./frontend
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Run Vite Build
|
||||||
|
working-directory: ./frontend
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v6
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
|
|||||||
+10
@@ -1,15 +1,25 @@
|
|||||||
|
# Frontend build stage
|
||||||
|
FROM node:22-alpine AS frontend-builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY frontend/package*.json ./
|
||||||
|
RUN npm ci
|
||||||
|
COPY frontend/ .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
# Build stage
|
# Build stage
|
||||||
FROM golang:latest AS builder
|
FROM golang:latest AS builder
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY go.mod go.sum ./
|
COPY go.mod go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . .
|
COPY . .
|
||||||
|
COPY --from=frontend-builder /app/dist ./frontend/dist
|
||||||
RUN CGO_ENABLED=0 GOOS=linux go build -v -o outfit-voting-abi26 ./cmd/
|
RUN CGO_ENABLED=0 GOOS=linux go build -v -o outfit-voting-abi26 ./cmd/
|
||||||
|
|
||||||
# Final stage
|
# Final stage
|
||||||
FROM debian:bookworm-slim
|
FROM debian:bookworm-slim
|
||||||
WORKDIR /root/
|
WORKDIR /root/
|
||||||
EXPOSE 4000
|
EXPOSE 4000
|
||||||
|
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||||
COPY --from=builder /app/outfit-voting-abi26 /usr/local/bin/outfit-voting-abi26
|
COPY --from=builder /app/outfit-voting-abi26 /usr/local/bin/outfit-voting-abi26
|
||||||
COPY entrypoint.sh /entrypoint.sh
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
RUN chmod +x /entrypoint.sh
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
services:
|
||||||
|
outfit-voting-abi26:
|
||||||
|
image: tueem/outfit-voting-abi26:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
DB_HOST: "HOST"
|
||||||
|
DB_PORT: "PORT"
|
||||||
|
DB_NAME: "NAME"
|
||||||
|
DB_USER: "USER"
|
||||||
|
DB_PASS: "PASS"
|
||||||
|
OIDC_ISSUER: "OIDC_ISSUER"
|
||||||
|
OIDC_CLIENTID: "OIDC_CLIENTID"
|
||||||
|
OIDC_SECRET: "OIDC_SECRET"
|
||||||
|
OIDC_REDIRECT: "OIDC_REDIRECT"
|
||||||
|
SIGNINGKEY: "SIGNINGKEY"
|
||||||
|
IMPRINTURL: "IMPRINTURL"
|
||||||
|
networks:
|
||||||
|
- web-network
|
||||||
|
- backend
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.myapp.rule=Host(`example.com`)"
|
||||||
|
- "traefik.http.routers.myapp.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.myapp.tls=true"
|
||||||
|
- "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.myapp.loadbalancer.server.port=4000"
|
||||||
|
postgres:
|
||||||
|
image: postgres:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
shm_size: 128mb
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: "PASS"
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U myuser -d mydatabase"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 10s
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
traefik:
|
||||||
|
image: traefik:v3.1
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
ports:
|
||||||
|
- "80:80" # HTTP port
|
||||||
|
- "443:443" # HTTPS port
|
||||||
|
command:
|
||||||
|
- "--providers.docker=true"
|
||||||
|
- "--providers.docker.exposedbydefault=false"
|
||||||
|
- "--entrypoints.web.address=:80"
|
||||||
|
- "--entrypoints.websecure.address=:443"
|
||||||
|
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
|
||||||
|
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
|
||||||
|
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
|
||||||
|
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
||||||
|
- "--certificatesresolvers.letsencrypt.acme.email=your-email@example.com"
|
||||||
|
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ./traefik-ssl:/etc/traefik/acme
|
||||||
|
networks:
|
||||||
|
- web-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
web-network:
|
||||||
|
backend:
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db:
|
||||||
|
|
||||||
@@ -42,4 +42,8 @@ if [ -n "$SIGNINGKEY" ]; then
|
|||||||
CMD="$CMD --signingKey $SIGNINGKEY"
|
CMD="$CMD --signingKey $SIGNINGKEY"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "$IMPRINTURL" ]; then
|
||||||
|
CMD="$CMD --imprinturl $IMPRINTURL"
|
||||||
|
fi
|
||||||
|
|
||||||
eval exec $CMD "$@"
|
eval exec $CMD "$@"
|
||||||
Reference in New Issue
Block a user