From 3aaa3c757fcd6d14cbaa81e3f3bb58726545939c Mon Sep 17 00:00:00 2001 From: h Date: Tue, 2 Jun 2026 01:22:58 +0200 Subject: [PATCH] feat: add caddy config --- .env.example | 3 +++ Makefile | 6 +++++- caddy/.env.example | 1 + caddy/.gitignore | 2 ++ caddy/Caddyfile.example | 30 +++++++++++++++++++++++++++++ caddy/docker-compose.yml | 23 ++++++++++++++++++++++ docker-compose.override.yml.example | 28 ++++++++++++++++++++------- docker-compose.yml | 1 + frontend/vite.config.ts | 4 ++++ 9 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 caddy/.env.example create mode 100644 caddy/.gitignore create mode 100644 caddy/Caddyfile.example create mode 100644 caddy/docker-compose.yml diff --git a/.env.example b/.env.example index be71789..e6d10ee 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,9 @@ COMPOSE_PROFILES=db,userbot,api RUN_ENVIRONMENT=prod +# Leave empty for *.localhost. +FRONTEND_DEV_HOST= + DB__HOST=postgres DB__PORT=5432 DB__USER=beavergram diff --git a/Makefile b/Makefile index aa508c8..f25d001 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: recreate down restart rebuild deploy migrate session-create +.PHONY: recreate down restart rebuild deploy migrate session-create frontend recreate: docker compose up -d --force-recreate @@ -13,7 +13,11 @@ rebuild: docker compose build docker compose up -d +frontend: + docker compose run --rm --no-deps frontend-dev sh -c "bun install && bun run build" + deploy: + $(MAKE) frontend $(MAKE) rebuild migrate: diff --git a/caddy/.env.example b/caddy/.env.example new file mode 100644 index 0000000..bb68773 --- /dev/null +++ b/caddy/.env.example @@ -0,0 +1 @@ +CLOUDFLARE_API_TOKEN= diff --git a/caddy/.gitignore b/caddy/.gitignore new file mode 100644 index 0000000..d0cf8ef --- /dev/null +++ b/caddy/.gitignore @@ -0,0 +1,2 @@ +Caddyfile +.env diff --git a/caddy/Caddyfile.example b/caddy/Caddyfile.example new file mode 100644 index 0000000..a947a09 --- /dev/null +++ b/caddy/Caddyfile.example @@ -0,0 +1,30 @@ +{ + admin off + # acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN} + + log { + format console + } + + servers { + trusted_proxies cloudflare + client_ip_headers Cf-Connecting-Ip + } +} + + { + @backend path /api/* /mcp/* + handle @backend { + reverse_proxy beavergram-api:8080 + } + + handle { + root * /srv + try_files {path} /index.html + file_server + } +} + +dev. { + reverse_proxy beavergram-frontend:5173 +} diff --git a/caddy/docker-compose.yml b/caddy/docker-compose.yml new file mode 100644 index 0000000..b389ca9 --- /dev/null +++ b/caddy/docker-compose.yml @@ -0,0 +1,23 @@ +services: + caddy: + image: ghcr.io/caddybuilds/caddy-cloudflare:latest + restart: unless-stopped + ports: + - "0.0.0.0:80:80" + - "0.0.0.0:443:443" + - "0.0.0.0:443:443/udp" + networks: + - caddy + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - ../frontend/build:/srv:ro + - caddy_data:/data + env_file: + - .env + +networks: + caddy: + external: true + +volumes: + caddy_data: diff --git a/docker-compose.override.yml.example b/docker-compose.override.yml.example index f734eb4..520bc10 100644 --- a/docker-compose.override.yml.example +++ b/docker-compose.override.yml.example @@ -1,12 +1,26 @@ services: - postgres: - ports: - - "127.0.0.1:5433:5432" +# postgres: +# ports: +# - "127.0.0.1:5432:5432" api: - ports: - - "127.0.0.1:8080:8080" + # ports: + # - "127.0.0.1:8080:8080" + networks: + default: {} + caddy: + aliases: + - beavergram-api frontend-dev: - ports: - - "127.0.0.1:5173:5173" +# ports: +# - "127.0.0.1:5173:5173" + networks: + default: { } + caddy: + aliases: + - beavergram-frontend + +networks: + caddy: + external: true diff --git a/docker-compose.yml b/docker-compose.yml index 3742ca1..ce116bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,6 +79,7 @@ services: command: ["sh", "-c", "bun install && bun run dev --host 0.0.0.0 --port 5173"] environment: API_PROXY_TARGET: http://api:8080 + ALLOWED_HOSTS: ${FRONTEND_DEV_HOST:-} volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index eb7b75f..984d377 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -3,6 +3,9 @@ import tailwindcss from "@tailwindcss/vite"; import { defineConfig } from "vite"; const proxyTarget = process.env.API_PROXY_TARGET ?? "http://127.0.0.1:8080"; +const allowedHosts = process.env.ALLOWED_HOSTS + ? process.env.ALLOWED_HOSTS.split(",") + : undefined; export default defineConfig({ plugins: [tailwindcss(), sveltekit()], @@ -14,6 +17,7 @@ export default defineConfig({ }, }, server: { + allowedHosts, proxy: { "/api": { target: proxyTarget, changeOrigin: true }, "/mcp": { target: proxyTarget, changeOrigin: true },