build: package local and mini pc services
This commit is contained in:
parent
3355f8b7ef
commit
10c8e2c884
7 changed files with 190 additions and 0 deletions
18
build/api.Dockerfile
Normal file
18
build/api.Dockerfile
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
FROM golang:1.26-alpine AS build
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY apps/api/go.mod apps/api/go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY apps/api/ ./
|
||||||
|
ARG APP_VERSION=dev
|
||||||
|
RUN CGO_ENABLED=0 go build \
|
||||||
|
-trimpath \
|
||||||
|
-ldflags "-s -w -X main.appVersion=${APP_VERSION}" \
|
||||||
|
-o /out/nereus-api .
|
||||||
|
|
||||||
|
FROM gcr.io/distroless/static:nonroot
|
||||||
|
|
||||||
|
COPY --from=build /out/nereus-api /nereus-api
|
||||||
|
EXPOSE 8080
|
||||||
|
ENTRYPOINT ["/nereus-api"]
|
||||||
33
build/compose.mini.yaml
Normal file
33
build/compose.mini.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
name: nereus-web
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: build/web.Dockerfile
|
||||||
|
args:
|
||||||
|
WEB_ASSET_PATH: ${WEB_ASSET_PATH:-apps/web}
|
||||||
|
environment:
|
||||||
|
CLUSTER_API_UPSTREAM: ${CLUSTER_API_UPSTREAM:?set CLUSTER_API_UPSTREAM to the cluster host and port}
|
||||||
|
read_only: true
|
||||||
|
tmpfs:
|
||||||
|
- /etc/nginx/conf.d:size=1m,uid=101,gid=101,mode=0755
|
||||||
|
- /tmp:size=16m,mode=1777
|
||||||
|
- /var/cache/nginx:size=16m,mode=0755
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.nereus-web.rule=Host(`${WEB_HOST:-nereus.fiwlabs.dev}`)
|
||||||
|
- traefik.http.routers.nereus-web.entrypoints=websecure
|
||||||
|
- traefik.http.routers.nereus-web.tls=true
|
||||||
|
- traefik.http.routers.nereus-web.tls.certresolver=porkbun
|
||||||
|
- traefik.http.services.nereus-web.loadbalancer.server.port=8080
|
||||||
|
- traefik.docker.network=proxy
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
16
build/loadgen.Dockerfile
Normal file
16
build/loadgen.Dockerfile
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
FROM golang:1.26-alpine AS build
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY apps/loadgen/go.mod ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY apps/loadgen/ ./
|
||||||
|
RUN CGO_ENABLED=0 go build \
|
||||||
|
-trimpath \
|
||||||
|
-ldflags "-s -w" \
|
||||||
|
-o /out/nereus-loadgen .
|
||||||
|
|
||||||
|
FROM gcr.io/distroless/static:nonroot
|
||||||
|
|
||||||
|
COPY --from=build /out/nereus-loadgen /nereus-loadgen
|
||||||
|
ENTRYPOINT ["/nereus-loadgen"]
|
||||||
15
build/otel-collector.local.yaml
Normal file
15
build/otel-collector.local.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
receivers:
|
||||||
|
otlp:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:4317
|
||||||
|
|
||||||
|
exporters:
|
||||||
|
debug:
|
||||||
|
verbosity: basic
|
||||||
|
|
||||||
|
service:
|
||||||
|
pipelines:
|
||||||
|
traces:
|
||||||
|
receivers: [otlp]
|
||||||
|
exporters: [debug]
|
||||||
9
build/web.Dockerfile
Normal file
9
build/web.Dockerfile
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
FROM nginxinc/nginx-unprivileged:1.31.4-alpine
|
||||||
|
|
||||||
|
COPY build/web.conf.template /etc/nginx/templates/default.conf.template
|
||||||
|
ARG WEB_ASSET_PATH=apps/web
|
||||||
|
COPY ${WEB_ASSET_PATH}/index.html ${WEB_ASSET_PATH}/styles.css ${WEB_ASSET_PATH}/app.js /usr/share/nginx/html/
|
||||||
|
COPY ${WEB_ASSET_PATH}/assets/ /usr/share/nginx/html/assets/
|
||||||
|
COPY ${WEB_ASSET_PATH}/vendor/ /usr/share/nginx/html/vendor/
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
33
build/web.conf.template
Normal file
33
build/web.conf.template
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
server {
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /api/v1/ {
|
||||||
|
proxy_pass http://${CLUSTER_API_UPSTREAM};
|
||||||
|
proxy_connect_timeout 1s;
|
||||||
|
proxy_read_timeout 5s;
|
||||||
|
proxy_send_timeout 5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /healthz {
|
||||||
|
proxy_pass http://${CLUSTER_API_UPSTREAM};
|
||||||
|
proxy_connect_timeout 1s;
|
||||||
|
proxy_read_timeout 5s;
|
||||||
|
proxy_send_timeout 5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /readyz {
|
||||||
|
proxy_pass http://${CLUSTER_API_UPSTREAM};
|
||||||
|
proxy_connect_timeout 1s;
|
||||||
|
proxy_read_timeout 5s;
|
||||||
|
proxy_send_timeout 5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
66
compose.yaml
Normal file
66
compose.yaml
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
name: nereus
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:17-alpine
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: nereus
|
||||||
|
POSTGRES_USER: nereus
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U nereus -d nereus"]
|
||||||
|
interval: 2s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 15
|
||||||
|
volumes:
|
||||||
|
- postgres-data:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
otel-collector:
|
||||||
|
image: otel/opentelemetry-collector-contrib:0.159.0
|
||||||
|
command: ["--config=/etc/otelcol-contrib/config.yaml"]
|
||||||
|
read_only: true
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
volumes:
|
||||||
|
- ./build/otel-collector.local.yaml:/etc/otelcol-contrib/config.yaml:ro
|
||||||
|
|
||||||
|
api:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: build/api.Dockerfile
|
||||||
|
args:
|
||||||
|
APP_VERSION: local
|
||||||
|
environment:
|
||||||
|
DATABASE_URL: postgres://nereus@postgres:5432/nereus?sslmode=disable
|
||||||
|
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
|
||||||
|
LOG_LEVEL: info
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
otel-collector:
|
||||||
|
condition: service_started
|
||||||
|
ports:
|
||||||
|
- "${API_PORT:-18080}:8080"
|
||||||
|
read_only: true
|
||||||
|
tmpfs:
|
||||||
|
- /tmp:size=16m,mode=1777
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
|
||||||
|
loadgen:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: build/loadgen.Dockerfile
|
||||||
|
environment:
|
||||||
|
TARGET_URL: http://api:8080
|
||||||
|
RPS: "5"
|
||||||
|
depends_on:
|
||||||
|
- api
|
||||||
|
read_only: true
|
||||||
|
tmpfs:
|
||||||
|
- /tmp:size=16m,mode=1777
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres-data:
|
||||||
Loading…
Add table
Reference in a new issue