From 43a1838464053c56e883fbe0d27c0af5381669f8 Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Thu, 17 Oct 2024 04:54:21 +0000 Subject: [PATCH 1/6] Add DevContainer configuration This commit introduces DevContainers based on quickstart, improving the handling of the development environment. Ports 80 (quickstart project) and 8025 (mailhog) are forwarded within the DevContainer setup. This enhances connectivity and ease of access for local development and debugging with frontend services running inside the container. --- .devcontainer/devcontainer.json | 9 ++ .../docker-compose/config-devcontainer.yaml | 28 +++++ deploy/docker-compose/devcontainer-nginx.conf | 40 ++++++ .../devcontainers-full-setup.yaml | 119 ++++++++++++++++++ frontend/package.json | 2 +- 5 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 deploy/docker-compose/config-devcontainer.yaml create mode 100644 deploy/docker-compose/devcontainer-nginx.conf create mode 100644 deploy/docker-compose/devcontainers-full-setup.yaml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..bcc8e1017 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,9 @@ +{ + "dockerComposeFile": "../deploy/docker-compose/devcontainers-full-setup.yaml", + "service": "devcontainer", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "forwardPorts": [ + 80, + 8025 + ] +} diff --git a/deploy/docker-compose/config-devcontainer.yaml b/deploy/docker-compose/config-devcontainer.yaml new file mode 100644 index 000000000..52e0b9a2f --- /dev/null +++ b/deploy/docker-compose/config-devcontainer.yaml @@ -0,0 +1,28 @@ +database: + user: hanko + password: hanko + host: postgresd + port: 5432 + dialect: postgres +email_delivery: + smtp: + host: "mail" + port: "1025" + from_address: noreply@hanko.io +secrets: + keys: + - abcedfghijklmnopqrstuvwxyz +service: + name: Hanko Authentication Service +webauthn: + relying_party: + origins: + - "http://localhost:8888" +session: + cookie: + secure: false # is needed for safari, because safari does not store secure cookies on localhost +server: + public: + cors: + allow_origins: + - "http://localhost:8888" diff --git a/deploy/docker-compose/devcontainer-nginx.conf b/deploy/docker-compose/devcontainer-nginx.conf new file mode 100644 index 000000000..891138ace --- /dev/null +++ b/deploy/docker-compose/devcontainer-nginx.conf @@ -0,0 +1,40 @@ +server { + listen 80; + server_name hanko-quickstart; + + location /elements.js { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_pass http://elements-nginx/elements/elements.js; + } + + location /sdk.modern.js { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_pass http://elements-nginx/frontend-sdk/sdk.modern.js; + } + + location /backend/ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_pass http://hanko:8000/; + } + + location /mail/ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_pass http://mail:8025/; + } + + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_pass http://quickstart:8080/; + } +} diff --git a/deploy/docker-compose/devcontainers-full-setup.yaml b/deploy/docker-compose/devcontainers-full-setup.yaml new file mode 100644 index 000000000..94af432cc --- /dev/null +++ b/deploy/docker-compose/devcontainers-full-setup.yaml @@ -0,0 +1,119 @@ +version: '3.9' +services: + hanko-migrate: + build: ../../backend + volumes: + - type: bind + source: ./config-devcontainer.yaml + target: /etc/config/config.yaml + command: --config /etc/config/config.yaml migrate up + restart: on-failure + depends_on: + postgresd: + condition: service_healthy + networks: + - intranet + hanko: + depends_on: + hanko-migrate: + condition: service_completed_successfully + build: ../../backend + ports: + - '8000:8000' # public + - '8001:8001' # admin + restart: unless-stopped + command: serve --config /etc/config/config.yaml all + volumes: + - type: bind + source: ./config-devcontainer.yaml + target: /etc/config/config.yaml + networks: + - intranet + environment: + - PASSWORD_ENABLED + postgresd: + image: postgres:12-alpine + ports: + - "5442:5432" + environment: + - POSTGRES_USER=hanko + - POSTGRES_PASSWORD=hanko + - POSTGRES_DB=hanko + - DB_PORT=5442 + healthcheck: + test: pg_isready -U hanko -d hanko + interval: 10s + timeout: 10s + retries: 3 + start_period: 30s + networks: + - intranet + elements: + image: node:18.14-alpine + working_dir: /workspace + entrypoint: /bin/sh -c + command: + - npm install && npm run build:elements:dev + volumes: + - type: bind + source: ../../frontend/ + target: /workspace + networks: + - intranet + elements-nginx: + image: nginx:1-alpine + depends_on: + elements: + condition: service_started + ports: + - 8089:80 + networks: + - intranet + volumes: + - ../../frontend/elements/dist/:/usr/share/nginx/html/elements/ + - ../../frontend/frontend-sdk/dist/:/usr/share/nginx/html/frontend-sdk/ + quickstart: + build: ../../quickstart + ports: + - "8888:8080" + environment: + - HANKO_URL=/backend + - HANKO_URL_INTERNAL=http://hanko:8000 + - HANKO_FRONTEND_SDK_URL=/sdk.modern.js + - HANKO_ELEMENT_URL=/elements.js + networks: + - intranet + mail: + image: mailhog/mailhog:latest + restart: always + ports: + - 2500:1025 + - 8025:8025 + networks: + - intranet + entry: + image: nginx + volumes: + - ./devcontainer-nginx.conf:/etc/nginx/conf.d/default.conf + depends_on: + hanko: + condition: service_started + elements-nginx: + condition: service_started + mail: + condition: service_started + quickstart: + condition: service_started + ports: + - '80:80' + networks: + - intranet + devcontainer: + image: mcr.microsoft.com/devcontainers/base:ubuntu + volumes: + - ../..:/workspaces:cached + command: sleep infinity + networks: + - intranet +networks: + intranet: diff --git a/frontend/package.json b/frontend/package.json index 3865a026f..20a47185b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,7 @@ "test": "turbo run test", "start": "turbo run start", "build:elements": "turbo build --filter=./frontend-sdk --filter=./elements", - "build:elements:dev": "turbo build:dev --filter=./elements" + "build:elements:dev": "turbo build:dev --filter=@teamhanko/hanko-elements" }, "devDependencies": { "turbo": "^1.10.7" From 5c6e69a67a71b5e5a63a3b9e63597dee5e478b15 Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Mon, 28 Oct 2024 22:03:38 +0100 Subject: [PATCH 2/6] Add parallel build:dev script and update dev commands Introduce a new "build:dev" script in the frontend package.json to allow parallel builds. Modify related development commands in frontend-sdk and elements to use the correct "build:dev" command. Adjust docker-compose setup to run the new "build:dev" script. --- deploy/docker-compose/devcontainers-full-setup.yaml | 2 +- frontend/elements/package.json | 2 +- frontend/frontend-sdk/package.json | 2 +- frontend/package.json | 1 + frontend/turbo.json | 1 - 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/docker-compose/devcontainers-full-setup.yaml b/deploy/docker-compose/devcontainers-full-setup.yaml index 94af432cc..70c6da7cb 100644 --- a/deploy/docker-compose/devcontainers-full-setup.yaml +++ b/deploy/docker-compose/devcontainers-full-setup.yaml @@ -53,7 +53,7 @@ services: working_dir: /workspace entrypoint: /bin/sh -c command: - - npm install && npm run build:elements:dev + - npm install && npm run build:dev volumes: - type: bind source: ../../frontend/ diff --git a/frontend/elements/package.json b/frontend/elements/package.json index 80baef394..769fb8587 100644 --- a/frontend/elements/package.json +++ b/frontend/elements/package.json @@ -95,7 +95,7 @@ "lint": "eslint 'src/**/*.ts?(x)'", "format": "pretty-quick --staged", "build": "npx webpack --mode=production", - "build:dev": "npx webpack --mode=development --config webpack.config.dev.cjs" + "build:dev": "npx webpack watch --mode=development --config webpack.config.dev.cjs" }, "description": "The element offers a complete user interface that will bring a modern login and registration experience to your users.", "repository": "github:teamhanko/hanko", diff --git a/frontend/frontend-sdk/package.json b/frontend/frontend-sdk/package.json index fe7512f02..1feb875f4 100644 --- a/frontend/frontend-sdk/package.json +++ b/frontend/frontend-sdk/package.json @@ -25,7 +25,7 @@ "lint": "eslint 'src/**/*.ts'", "format": "pretty-quick --staged", "build": "microbundle --globals @github/webauthn-json=webauthnJson --tsconfig tsconfig.prod.json", - "dev": "microbundle watch", + "build:dev": "microbundle watch", "docs": "jsdoc -r -c jsdoc.json -d ./.generated/docs -R README.md --pedantic", "test": "jest --coverage" }, diff --git a/frontend/package.json b/frontend/package.json index 20a47185b..b7088aa3a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,6 +13,7 @@ "test": "turbo run test", "start": "turbo run start", "build:elements": "turbo build --filter=./frontend-sdk --filter=./elements", + "build:dev": "turbo build:dev --parallel", "build:elements:dev": "turbo build:dev --filter=@teamhanko/hanko-elements" }, "devDependencies": { diff --git a/frontend/turbo.json b/frontend/turbo.json index 5291a2e24..91cbc47fd 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -6,7 +6,6 @@ "outputs": ["dist/**"] }, "build:dev": { - "dependsOn": ["^build"], "outputs": ["dist/**"] }, "start": { From a3741ab29d7e3bf06366d759172fc95f3d77e75a Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Mon, 28 Oct 2024 22:27:43 +0100 Subject: [PATCH 3/6] [devcontainers] Refactor Nginx configuration for serving static files Simplify the Nginx setup by removing the elements-nginx service and directly serving static files from the main Nginx container. Updated volume mounts and configuration to reflect these changes. --- deploy/docker-compose/devcontainer-nginx.conf | 10 ++-------- .../docker-compose/devcontainers-full-setup.yaml | 16 ++-------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/deploy/docker-compose/devcontainer-nginx.conf b/deploy/docker-compose/devcontainer-nginx.conf index 891138ace..48e3ddf7c 100644 --- a/deploy/docker-compose/devcontainer-nginx.conf +++ b/deploy/docker-compose/devcontainer-nginx.conf @@ -3,17 +3,11 @@ server { server_name hanko-quickstart; location /elements.js { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-NginX-Proxy true; - proxy_pass http://elements-nginx/elements/elements.js; + root /usr/share/nginx/html/elements/; } location /sdk.modern.js { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-NginX-Proxy true; - proxy_pass http://elements-nginx/frontend-sdk/sdk.modern.js; + root /usr/share/nginx/html/frontend-sdk/; } location /backend/ { diff --git a/deploy/docker-compose/devcontainers-full-setup.yaml b/deploy/docker-compose/devcontainers-full-setup.yaml index 70c6da7cb..82f9c7733 100644 --- a/deploy/docker-compose/devcontainers-full-setup.yaml +++ b/deploy/docker-compose/devcontainers-full-setup.yaml @@ -60,18 +60,6 @@ services: target: /workspace networks: - intranet - elements-nginx: - image: nginx:1-alpine - depends_on: - elements: - condition: service_started - ports: - - 8089:80 - networks: - - intranet - volumes: - - ../../frontend/elements/dist/:/usr/share/nginx/html/elements/ - - ../../frontend/frontend-sdk/dist/:/usr/share/nginx/html/frontend-sdk/ quickstart: build: ../../quickstart ports: @@ -95,11 +83,11 @@ services: image: nginx volumes: - ./devcontainer-nginx.conf:/etc/nginx/conf.d/default.conf + - ../../frontend/elements/dist/:/usr/share/nginx/html/elements/ + - ../../frontend/frontend-sdk/dist/:/usr/share/nginx/html/frontend-sdk/ depends_on: hanko: condition: service_started - elements-nginx: - condition: service_started mail: condition: service_started quickstart: From e80ba9897112d40ff0d54d4ae323acb42fddc2e0 Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Mon, 28 Oct 2024 22:32:03 +0100 Subject: [PATCH 4/6] [devcontainers] Simplify dev container setup paths and directory structure Moved dev containers related files to .devcontainer for better organization and simplified path references in devcontainers-full-setup.yaml. --- .../config-devcontainer.yaml | 0 .../devcontainer-nginx.conf | 0 .../devcontainers-full-setup.yaml | 12 ++++++------ 3 files changed, 6 insertions(+), 6 deletions(-) rename {deploy/docker-compose => .devcontainer}/config-devcontainer.yaml (100%) rename {deploy/docker-compose => .devcontainer}/devcontainer-nginx.conf (100%) rename {deploy/docker-compose => .devcontainer}/devcontainers-full-setup.yaml (89%) diff --git a/deploy/docker-compose/config-devcontainer.yaml b/.devcontainer/config-devcontainer.yaml similarity index 100% rename from deploy/docker-compose/config-devcontainer.yaml rename to .devcontainer/config-devcontainer.yaml diff --git a/deploy/docker-compose/devcontainer-nginx.conf b/.devcontainer/devcontainer-nginx.conf similarity index 100% rename from deploy/docker-compose/devcontainer-nginx.conf rename to .devcontainer/devcontainer-nginx.conf diff --git a/deploy/docker-compose/devcontainers-full-setup.yaml b/.devcontainer/devcontainers-full-setup.yaml similarity index 89% rename from deploy/docker-compose/devcontainers-full-setup.yaml rename to .devcontainer/devcontainers-full-setup.yaml index 82f9c7733..06e9891ca 100644 --- a/deploy/docker-compose/devcontainers-full-setup.yaml +++ b/.devcontainer/devcontainers-full-setup.yaml @@ -1,7 +1,7 @@ version: '3.9' services: hanko-migrate: - build: ../../backend + build: ../backend volumes: - type: bind source: ./config-devcontainer.yaml @@ -17,7 +17,7 @@ services: depends_on: hanko-migrate: condition: service_completed_successfully - build: ../../backend + build: ../backend ports: - '8000:8000' # public - '8001:8001' # admin @@ -56,12 +56,12 @@ services: - npm install && npm run build:dev volumes: - type: bind - source: ../../frontend/ + source: ../frontend/ target: /workspace networks: - intranet quickstart: - build: ../../quickstart + build: ../quickstart ports: - "8888:8080" environment: @@ -83,8 +83,8 @@ services: image: nginx volumes: - ./devcontainer-nginx.conf:/etc/nginx/conf.d/default.conf - - ../../frontend/elements/dist/:/usr/share/nginx/html/elements/ - - ../../frontend/frontend-sdk/dist/:/usr/share/nginx/html/frontend-sdk/ + - ../frontend/elements/dist/:/usr/share/nginx/html/elements/ + - ../frontend/frontend-sdk/dist/:/usr/share/nginx/html/frontend-sdk/ depends_on: hanko: condition: service_started From 0fbb54ec74e08f697ca60379cc007dcecc229cd3 Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Mon, 28 Oct 2024 21:45:50 +0000 Subject: [PATCH 5/6] [devcontainers] update dev container config --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bcc8e1017..2bcb5a748 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "dockerComposeFile": "../deploy/docker-compose/devcontainers-full-setup.yaml", + "dockerComposeFile": "./devcontainers-full-setup.yaml", "service": "devcontainer", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "forwardPorts": [ From 3f36389eefe71537439ce383f022397d3556e4ea Mon Sep 17 00:00:00 2001 From: Marian Palkus Date: Mon, 28 Oct 2024 22:58:21 +0100 Subject: [PATCH 6/6] [devcontainers] Remove /mail/ proxy location The /mail/ proxy location block has been deleted from the devcontainer-nginx.conf file. --- .devcontainer/devcontainer-nginx.conf | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.devcontainer/devcontainer-nginx.conf b/.devcontainer/devcontainer-nginx.conf index 48e3ddf7c..8c436bf55 100644 --- a/.devcontainer/devcontainer-nginx.conf +++ b/.devcontainer/devcontainer-nginx.conf @@ -17,14 +17,6 @@ server { proxy_pass http://hanko:8000/; } - location /mail/ { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-NginX-Proxy true; - proxy_pass http://mail:8025/; - } - - location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;