diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..383c320 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,40 @@ +(reverse_proxy_headers) { + header_up Host {upstream_hostport} +} + + +http://* { + @websockets { + header Connection *Upgrade* + header Upgrade websocket + } + handle @websockets { + reverse_proxy http://server { + import reverse_proxy_headers + } + } + + handle /rpc* { + reverse_proxy http://server { + import reverse_proxy_headers + } + } + + handle { + reverse_proxy http://webui { + import reverse_proxy_headers + } + } +} + +http://server.* { + reverse_proxy http://server { + import reverse_proxy_headers + } +} + +http://webui.* { + reverse_proxy http://webui { + import reverse_proxy_headers + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 9f5c5e5..d8db475 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,34 +2,44 @@ x-service-base: &service-base user: ${UID:?UID missing}:${GID:?GID missing} tty: true -x-service-bun: &service-bun - <<: *service-base - image: oven/bun - x-volume-app: &volume-app ./:/app/ +x-env-base: &env-base + TZ: ${TZ:?TZ missing} + services: + reverse-proxy: + container_name: reverse-proxy + image: caddy:latest + ports: + - ${PORT:?PORT missing}:80 + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + environment: + <<: *env-base + server: - <<: *service-bun + <<: *service-base container_name: server + image: oven/bun:latest volumes: - *volume-app working_dir: /app/packages/server - ports: - - 80:80 env_file: .env environment: + <<: *env-base NODE_ENV: development - HTTP_PORT: 80 entrypoint: ["bun", "src/index.ts"] webui: - <<: *service-bun + <<: *service-base container_name: webui + image: oven/bun:latest volumes: - *volume-app working_dir: /app/packages/webui environment: + <<: *env-base NODE_ENV: development entrypoint: ["bun", "dev"] diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 78b0150..f2a2fb0 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -1,6 +1,6 @@ import { BunRuntime } from "@effect/platform-bun" import { Todo } from "@todo-tests/common/data" -import { Duration, Effect, Layer, Match, Option } from "effect" +import { Duration, Effect, Layer, Logger, Match, Option } from "effect" import { ServerConfig } from "./ServerConfig" import { Services } from "./Services" import { ExpressApp } from "./http/ExpressApp" @@ -105,5 +105,6 @@ const main = Effect.gen(function*() { BunRuntime.runMain(main.pipe( Effect.provide(Services.Dev), + Effect.provide(Logger.structured), Effect.scoped, )) diff --git a/packages/webui/vite.config.ts b/packages/webui/vite.config.ts index 387bee8..721c522 100644 --- a/packages/webui/vite.config.ts +++ b/packages/webui/vite.config.ts @@ -6,7 +6,13 @@ import { defineConfig } from "vite" // https://vitejs.dev/config/ export default defineConfig({ server: { + host: true, port: 80, + + hmr: { + host: "webui.localhost", + port: Number(process.env.PORT), + }, }, plugins: [