Merge feat/infrastructure: Dockerfile, compose, .env, Makefile
This commit is contained in:
commit
196f08804c
4
.env.example
Normal file
4
.env.example
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
COMPOSE_PROJECT=openocd-python-docs
|
||||||
|
MODE=prod
|
||||||
|
DOMAIN=openocd-python.warehack.ing
|
||||||
|
VITE_HMR_HOST=
|
||||||
32
Dockerfile
Normal file
32
Dockerfile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# --- Stage: deps ---
|
||||||
|
FROM node:22-alpine AS deps
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
# --- Stage: build ---
|
||||||
|
FROM deps AS build
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# --- Stage: dev ---
|
||||||
|
FROM node:22-alpine AS dev
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
COPY . .
|
||||||
|
EXPOSE 4321
|
||||||
|
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
|
||||||
|
|
||||||
|
# --- Stage: prod ---
|
||||||
|
FROM caddy:2-alpine AS prod
|
||||||
|
COPY --from=build /app/dist /srv
|
||||||
|
COPY <<'CADDYFILE' /etc/caddy/Caddyfile
|
||||||
|
:80 {
|
||||||
|
root * /srv
|
||||||
|
file_server
|
||||||
|
encode gzip
|
||||||
|
try_files {path} {path}/index.html =404
|
||||||
|
header Cache-Control "public, max-age=3600"
|
||||||
|
}
|
||||||
|
CADDYFILE
|
||||||
|
EXPOSE 80
|
||||||
24
Makefile
Normal file
24
Makefile
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
.PHONY: dev prod build logs down clean restart shell
|
||||||
|
|
||||||
|
dev:
|
||||||
|
docker compose --profile dev up -d --build && docker compose --profile dev logs -f
|
||||||
|
|
||||||
|
prod:
|
||||||
|
docker compose --profile prod up -d --build && sleep 3 && docker compose --profile prod logs --tail 50
|
||||||
|
|
||||||
|
build:
|
||||||
|
docker compose --profile prod build --no-cache
|
||||||
|
|
||||||
|
logs:
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
down:
|
||||||
|
docker compose --profile dev --profile prod down
|
||||||
|
|
||||||
|
clean:
|
||||||
|
docker compose --profile dev --profile prod down -v --rmi local
|
||||||
|
|
||||||
|
restart: down prod
|
||||||
|
|
||||||
|
shell:
|
||||||
|
docker compose exec docs-prod sh
|
||||||
42
docker-compose.yml
Normal file
42
docker-compose.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
services:
|
||||||
|
docs-dev:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
target: dev
|
||||||
|
profiles:
|
||||||
|
- dev
|
||||||
|
volumes:
|
||||||
|
- ./src:/app/src
|
||||||
|
- ./public:/app/public
|
||||||
|
- ./astro.config.mjs:/app/astro.config.mjs
|
||||||
|
env_file: .env
|
||||||
|
labels:
|
||||||
|
caddy: ${DOMAIN}
|
||||||
|
caddy.reverse_proxy: "{{upstreams 4321}}"
|
||||||
|
caddy.reverse_proxy.flush_interval: "-1"
|
||||||
|
caddy.reverse_proxy.transport: "http"
|
||||||
|
caddy.reverse_proxy.transport.read_timeout: "0"
|
||||||
|
caddy.reverse_proxy.transport.write_timeout: "0"
|
||||||
|
caddy.reverse_proxy.transport.keepalive: "5m"
|
||||||
|
caddy.reverse_proxy.transport.keepalive_idle_conns: "10"
|
||||||
|
caddy.reverse_proxy.stream_timeout: "24h"
|
||||||
|
caddy.reverse_proxy.stream_close_delay: "5s"
|
||||||
|
networks:
|
||||||
|
- caddy
|
||||||
|
|
||||||
|
docs-prod:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
target: prod
|
||||||
|
profiles:
|
||||||
|
- prod
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
caddy: ${DOMAIN}
|
||||||
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||||
|
networks:
|
||||||
|
- caddy
|
||||||
|
|
||||||
|
networks:
|
||||||
|
caddy:
|
||||||
|
external: true
|
||||||
Loading…
x
Reference in New Issue
Block a user