From 5f87e5aff47fb5111a591592adb960a3c6b091f5 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 14:54:44 -0400 Subject: [PATCH 1/8] Deprecation of old API, all new API --- .github/workflows/build.yaml | 9 ----- docker-compose.build.yml | 27 ++++++++------- docker-compose.deploy.yml | 66 ++++++++++++++++++------------------ tdei_uw.env | 2 +- 4 files changed, 48 insertions(+), 56 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 419114c..0048ae8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -139,15 +139,6 @@ jobs: WS_DOCKER_REGISTRY: ${{ vars.WS_DOCKER_REGISTRY }} WS_POSM_DB_HOST: ${{ vars.WS_POSM_DB_HOST }} - # passwords - #WS_API_DB_PASS: ${{ secrets.WS_API_DB_PASS }} - #WS_MAPBOX_ACCESS_TOKEN: ${{ secrets.WS_MAPBOX_ACCESS_TOKEN }} - #WS_OSM_DB_PASS: ${{ secrets.WS_OSM_DB_PASS }} - #WS_OSM_SECRET_KEY_BASE: ${{ secrets.WS_OSM_SECRET_KEY_BASE }} - #WS_SMTP_PASS: ${{ secrets.WS_SMTP_PASS }} - #WS_TASKS_DB_PASS: ${{ secrets.WS_TASKS_DB_PASS }} - #WS_TASKS_SECRET_KEY: ${{ secrets.WS_TASKS_SECRET_KEY }} - - name: Deploy env: ENV: ${{ vars.ENV }} diff --git a/docker-compose.build.yml b/docker-compose.build.yml index 6255af4..a1b46be 100644 --- a/docker-compose.build.yml +++ b/docker-compose.build.yml @@ -162,19 +162,20 @@ services: extends: osm-cgimap image: ${WS_DOCKER_REGISTRY}/workspaces-osm-cgimap:${CODE_VERSION} - # tasking manager - tasks-backend: - image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${ENV} - build: - cache_from: - - type=registry,ref=${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:buildcache - cache_to: - - type=registry,ref=${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:buildcache,mode=max - context: tasking-manager - - tasks-backend_tag: - extends: tasks-backend - image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${CODE_VERSION} +# DEPRECATED IN PLACE OF NEW API +# # tasking manager +# tasks-backend: +# image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${ENV} +# build: +# cache_from: +# - type=registry,ref=${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:buildcache +# cache_to: +# - type=registry,ref=${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:buildcache,mode=max +# context: tasking-manager + +# tasks-backend_tag: +# extends: tasks-backend +# image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${CODE_VERSION} # leaderboard FE/backend leaderboard-frontend: diff --git a/docker-compose.deploy.yml b/docker-compose.deploy.yml index e1c8ef0..0563777 100644 --- a/docker-compose.deploy.yml +++ b/docker-compose.deploy.yml @@ -100,27 +100,27 @@ services: - traefik.http.routers.api.entrypoints=websecure - traefik.http.routers.api.tls.certresolver=myresolver - # Legacy tasking manager as workspaces API - backend: - # Workspaces backend currently lives in the TM. Emulate a separate server for now: - image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${WS_DOCKER_TAG} - restart: always - env_file: tasking-manager/tasking-manager.env - environment: - GUNICORN_CMD_ARGS: "--workers 5 --threads 5 --timeout 179" - WS_LONGFORM_SCHEMA_URL: ${WS_LONG_FORM_QUEST_SCHEMA_URL} - WS_IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} - labels: - - traefik.enable=true - - traefik.http.routers.workspaces-backend.rule=Host(`${WS_API_HOST}`) - - traefik.http.services.workspaces-backend.loadbalancer.server.port=5000 - - - traefik.http.middlewares.redirect-to-https.replacepathregex.regex=^/api/v1/(.*) - - traefik.http.middlewares.redirect-to-https.replacepathregex.replacement=/api/v1/$$1/ - - - traefik.http.routers.workspaces-backend.middlewares=cors,redirect-to-https - - traefik.http.routers.workspaces-backend.entrypoints=websecure - - traefik.http.routers.workspaces-backend.tls.certresolver=myresolver +# # Legacy tasking manager as workspaces API +# backend: +# # Workspaces backend currently lives in the TM. Emulate a separate server for now: +# image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${WS_DOCKER_TAG} +# restart: always +# env_file: tasking-manager/tasking-manager.env +# environment: +# GUNICORN_CMD_ARGS: "--workers 5 --threads 5 --timeout 179" +# WS_LONGFORM_SCHEMA_URL: ${WS_LONG_FORM_QUEST_SCHEMA_URL} +# WS_IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} +# labels: +# - traefik.enable=true +# - traefik.http.routers.workspaces-backend.rule=Host(`${WS_API_HOST}`) +# - traefik.http.services.workspaces-backend.loadbalancer.server.port=5000 + +# - traefik.http.middlewares.redirect-to-https.replacepathregex.regex=^/api/v1/(.*) +# - traefik.http.middlewares.redirect-to-https.replacepathregex.replacement=/api/v1/$$1/ + +# - traefik.http.routers.workspaces-backend.middlewares=cors,redirect-to-https +# - traefik.http.routers.workspaces-backend.entrypoints=websecure +# - traefik.http.routers.workspaces-backend.tls.certresolver=myresolver # workspaces editors rapid: @@ -186,18 +186,18 @@ services: CGIMAP_MAP_NODES: ${WS_OSM_MAX_EXPORT_NODES} CGIMAP_MAP_AREA: ${WS_OSM_MAX_EXPORT_AREA} - tasks-backend: - image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${WS_DOCKER_TAG} - restart: always - env_file: tasking-manager/tasking-manager.env - environment: - GUNICORN_CMD_ARGS: "--workers 5 --threads 5 --timeout 179" - labels: - - traefik.enable=true - - traefik.http.routers.tasks-backend.rule=Host(`${WS_TASKS_HOST}`) && PathPrefix(`/api/`) - - traefik.http.services.tasks-backend.loadbalancer.server.port=5000 - - traefik.http.routers.tasks-backend.entrypoints=websecure - - traefik.http.routers.tasks-backend.tls.certresolver=myresolver +# tasks-backend: +# image: ${WS_DOCKER_REGISTRY}/workspaces-tasks-backend:${WS_DOCKER_TAG} +# restart: always +# env_file: tasking-manager/tasking-manager.env +# environment: +# GUNICORN_CMD_ARGS: "--workers 5 --threads 5 --timeout 179" +# labels: +# - traefik.enable=true +# - traefik.http.routers.tasks-backend.rule=Host(`${WS_TASKS_HOST}`) && PathPrefix(`/api/`) +# - traefik.http.services.tasks-backend.loadbalancer.server.port=5000 +# - traefik.http.routers.tasks-backend.entrypoints=websecure +# - traefik.http.routers.tasks-backend.tls.certresolver=myresolver # leaderboard FE/backend leaderboard-frontend: diff --git a/tdei_uw.env b/tdei_uw.env index f25b64d..f7eeee1 100644 --- a/tdei_uw.env +++ b/tdei_uw.env @@ -42,7 +42,7 @@ LB_BACKEND_HOST=api.leaderboard${ENV_NAME_PARAM}.sidewalks.washington.edu WS_FRONTEND_HOST=workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu -WS_NEW_API_HOST=new-api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu +WS_NEW_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_RAPID_HOST=rapid.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_PATHWAYS_EDITOR_HOST=pathways.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_OSM_HOST=osm.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu From d3ad077af84f87b09742ebecec9e0437fefdf678 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 15:09:06 -0400 Subject: [PATCH 2/8] Answer at both api and new-api --- docker-compose.deploy.yml | 2 +- tdei_uw.env | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.deploy.yml b/docker-compose.deploy.yml index 0563777..85f4e42 100644 --- a/docker-compose.deploy.yml +++ b/docker-compose.deploy.yml @@ -95,7 +95,7 @@ services: IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} labels: - traefik.enable=true - - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) + - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`, `${WS_API_HOST}`) - traefik.http.services.api.loadbalancer.server.port=8000 - traefik.http.routers.api.entrypoints=websecure - traefik.http.routers.api.tls.certresolver=myresolver diff --git a/tdei_uw.env b/tdei_uw.env index f7eeee1..f25b64d 100644 --- a/tdei_uw.env +++ b/tdei_uw.env @@ -42,7 +42,7 @@ LB_BACKEND_HOST=api.leaderboard${ENV_NAME_PARAM}.sidewalks.washington.edu WS_FRONTEND_HOST=workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu -WS_NEW_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu +WS_NEW_API_HOST=new-api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_RAPID_HOST=rapid.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_PATHWAYS_EDITOR_HOST=pathways.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_OSM_HOST=osm.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu From c3ffe0bbaf2ea16fae128a11bd223eff45852770 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 16:22:58 -0400 Subject: [PATCH 3/8] Update tdei_uw.env --- tdei_uw.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdei_uw.env b/tdei_uw.env index f25b64d..f7eeee1 100644 --- a/tdei_uw.env +++ b/tdei_uw.env @@ -42,7 +42,7 @@ LB_BACKEND_HOST=api.leaderboard${ENV_NAME_PARAM}.sidewalks.washington.edu WS_FRONTEND_HOST=workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu -WS_NEW_API_HOST=new-api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu +WS_NEW_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_RAPID_HOST=rapid.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_PATHWAYS_EDITOR_HOST=pathways.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_OSM_HOST=osm.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu From cdab01b5daecee2f2976629b7173a6a42d9d8e27 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 16:42:07 -0400 Subject: [PATCH 4/8] Update tdei_uw.env --- tdei_uw.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdei_uw.env b/tdei_uw.env index f7eeee1..f25b64d 100644 --- a/tdei_uw.env +++ b/tdei_uw.env @@ -42,7 +42,7 @@ LB_BACKEND_HOST=api.leaderboard${ENV_NAME_PARAM}.sidewalks.washington.edu WS_FRONTEND_HOST=workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu -WS_NEW_API_HOST=api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu +WS_NEW_API_HOST=new-api.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_RAPID_HOST=rapid.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_PATHWAYS_EDITOR_HOST=pathways.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu WS_OSM_HOST=osm.workspaces${ENV_NAME_PARAM}.sidewalks.washington.edu From 690d8b16f4af7d224e5cb8e65bfc4c06a5f6a1d9 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 17:06:21 -0400 Subject: [PATCH 5/8] Update docker-compose.deploy.yml --- docker-compose.deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.deploy.yml b/docker-compose.deploy.yml index 85f4e42..b8fc13b 100644 --- a/docker-compose.deploy.yml +++ b/docker-compose.deploy.yml @@ -95,7 +95,7 @@ services: IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} labels: - traefik.enable=true - - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`, `${WS_API_HOST}`) + - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) || Host(`${WS_API_HOST}`) - traefik.http.services.api.loadbalancer.server.port=8000 - traefik.http.routers.api.entrypoints=websecure - traefik.http.routers.api.tls.certresolver=myresolver From 9ddd2dee1b1001a236d3db5415f5ea7224dd7876 Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 21:55:11 -0400 Subject: [PATCH 6/8] Update docker-compose.deploy.yml --- docker-compose.deploy.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docker-compose.deploy.yml b/docker-compose.deploy.yml index b8fc13b..f9015e7 100644 --- a/docker-compose.deploy.yml +++ b/docker-compose.deploy.yml @@ -95,7 +95,7 @@ services: IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} labels: - traefik.enable=true - - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) || Host(`${WS_API_HOST}`) + - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) || Host(`${WS_API_HOST}`) || Host(`${WS_OSM_HOST}`) - traefik.http.services.api.loadbalancer.server.port=8000 - traefik.http.routers.api.entrypoints=websecure - traefik.http.routers.api.tls.certresolver=myresolver @@ -155,11 +155,12 @@ services: sysctls: net.core.somaxconn: 4096 labels: - - traefik.enable=true - - traefik.http.routers.osm-web.rule=Host(`${WS_OSM_HOST}`) - - traefik.http.services.osm-web.loadbalancer.server.port=80 - - traefik.http.routers.osm-web.entrypoints=websecure - - traefik.http.routers.osm-web.tls.certresolver=myresolver +# PROXIED VIA API CONTAINER +# - traefik.enable=true +# - traefik.http.routers.osm-web.rule=Host(`${WS_OSM_HOST}`) +# - traefik.http.services.osm-web.loadbalancer.server.port=80 +# - traefik.http.routers.osm-web.entrypoints=websecure +# - traefik.http.routers.osm-web.tls.certresolver=myresolver osm-rails: <<: *osm-rails-base From 0fe8341392f6c90bf41b3c15ef30cdda8d24b98e Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Wed, 8 Jul 2026 22:01:30 -0400 Subject: [PATCH 7/8] Update docker-compose.deploy.yml --- docker-compose.deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.deploy.yml b/docker-compose.deploy.yml index f9015e7..54f110f 100644 --- a/docker-compose.deploy.yml +++ b/docker-compose.deploy.yml @@ -154,8 +154,8 @@ services: - osm-cgimap sysctls: net.core.somaxconn: 4096 - labels: # PROXIED VIA API CONTAINER +# labels: # - traefik.enable=true # - traefik.http.routers.osm-web.rule=Host(`${WS_OSM_HOST}`) # - traefik.http.services.osm-web.loadbalancer.server.port=80 From 6e663687bfce9ddb2f7653e877065ccd215a2bbb Mon Sep 17 00:00:00 2001 From: Jeff Maki Date: Thu, 9 Jul 2026 11:30:49 -0400 Subject: [PATCH 8/8] Sync dev dc.yml with prod setup --- docker-compose.yml | 61 +++++++++------------------------------------- 1 file changed, 12 insertions(+), 49 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index cde6b7d..1976070 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -97,7 +97,8 @@ services: - ./api:/app labels: - traefik.enable=true - - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) + # api container also serves the legacy workspaces backend host (was tasks-backend) and the OSM host + - traefik.http.routers.api.rule=Host(`${WS_NEW_API_HOST}`) || Host(`${WS_API_HOST}`) || Host(`${WS_OSM_HOST}`) - traefik.http.services.api.loadbalancer.server.port=8000 rapid: @@ -128,10 +129,11 @@ services: - ./nginx.debug.conf:/etc/nginx/nginx.conf:ro depends_on: - osm-web - labels: - - traefik.enable=true - - traefik.http.routers.osm-log-proxy.rule=Host(`${WS_OSM_HOST}`) - - traefik.http.services.osm-log-proxy.loadbalancer.server.port=80 +# WS_OSM_HOST is served by the api container (proxied to osm-web); leave this un-routed +# labels: +# - traefik.enable=true +# - traefik.http.routers.osm-log-proxy.rule=Host(`${WS_OSM_HOST}`) +# - traefik.http.services.osm-log-proxy.loadbalancer.server.port=80 osm-web: image: nginx:stable-alpine @@ -143,10 +145,11 @@ services: volumes: - ./osm-web/nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./osm-rails/public:/usr/share/nginx/html:ro - labels: - - traefik.enable=true - - traefik.http.routers.osm-web.rule=Host(`${WS_OSM_HOST}`) - - traefik.http.services.osm-web.loadbalancer.server.port=80 +# FRONTED BY osm-log-proxy IN DEV (osm-log-proxy serves WS_OSM_HOST and proxies here) +# labels: +# - traefik.enable=true +# - traefik.http.routers.osm-web.rule=Host(`${WS_OSM_HOST}`) +# - traefik.http.services.osm-web.loadbalancer.server.port=80 osm-rails: <<: *osm-rails-base @@ -177,46 +180,6 @@ services: CGIMAP_MAP_NODES: ${WS_OSM_MAX_EXPORT_NODES} CGIMAP_MAP_AREA: ${WS_OSM_MAX_EXPORT_AREA} - # tasks-frontend: - # build: - # context: tasking-manager - # dockerfile: ./scripts/docker/Dockerfile.frontend - # volumes: - # - ./tasking-manager:/usr/src/app - # labels: - # - traefik.enable=true - # - traefik.http.routers.tasks-frontend.rule=Host(`${WS_TASKS_HOST}`) - # - traefik.http.services.tasks-frontend.loadbalancer.server.port=80 - - tasks-backend: - build: - context: tasking-manager - dockerfile: ./scripts/docker/Dockerfile.backend - target: debug - args: - APP_UID: 1000 - env_file: tasking-manager/tasking-manager.env - environment: - GEVENT_SUPPORT: true - WS_LONGFORM_SCHEMA_URL: ${WS_LONG_FORM_QUEST_SCHEMA_URL} - WS_IMAGERY_SCHEMA_URL: ${WS_IMAGERY_SCHEMA_URL} - ports: - - "5678:5678" # debugpy debugger port - volumes: - - ./tasking-manager:/usr/src/app - labels: - - traefik.enable=true - - traefik.http.routers.tasks-backend.rule=Host(`${WS_TASKS_HOST}`) && PathPrefix(`/api/`) - - traefik.http.routers.tasks-backend.service=tasks-backend - - traefik.http.services.tasks-backend.loadbalancer.server.port=5000 - # Workspaces backend currently lives in the TM. Emulate a separate server for now: - - traefik.http.middlewares.workspaces-backend-emulation.replacepathregex.regex=^/api/v1/(.*) - - traefik.http.middlewares.workspaces-backend-emulation.replacepathregex.replacement=/api/v2/$$1/ - - traefik.http.routers.workspaces-backend.rule=Host(`${WS_API_HOST}`) - - traefik.http.routers.workspaces-backend.service=workspaces-backend - - traefik.http.services.workspaces-backend.loadbalancer.server.port=5000 - - traefik.http.routers.workspaces-backend.middlewares=workspaces-backend-emulation - volumes: osm-rails-tmp: osm-rails-storage: