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