diff --git a/.github/workflows/backend-testing.yaml b/.github/workflows/backend-testing.yaml index 4facf31..1dce4cb 100644 --- a/.github/workflows/backend-testing.yaml +++ b/.github/workflows/backend-testing.yaml @@ -1,4 +1,4 @@ -name: Backend testing.plone.org CI and Deploy +name: Backend testing-stable.plone.org CI and Deploy on: push: @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -39,7 +39,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -52,7 +52,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -76,7 +76,7 @@ jobs: working-directory: ./backend steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Plone ${{ matrix.plone }} with Python ${{ matrix.python }} uses: plone/setup-plone@v2.0.0 @@ -102,11 +102,11 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/plone/ploneorg-backend @@ -121,14 +121,14 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to DockerHub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: platforms: linux/amd64 context: backend @@ -145,12 +145,12 @@ jobs: runs-on: ubuntu-latest environment: name: testing.plone.org - url: https://testing.plone.org + url: https://testing-stable.plone.org steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - - name: Deploy to testing.plone.org + - name: Deploy to testing-stabls.plone.org uses: kitconcept/docker-stack-deploy@v1.4.0 with: registry: "ghcr.io" @@ -160,10 +160,10 @@ jobs: remote_port: ${{ vars.DEPLOY_PORT }} remote_user: ${{ vars.DEPLOY_USER }} remote_private_key: ${{ secrets.DEPLOY_SSH }} - stack_file: "devops/stacks/testing.plone.org.yml" - stack_name: "testing-plone-org" + stack_file: "devops/stacks/testing-stable.plone.org.yml" + stack_name: "testing-stable-plone-org" env_file: | - STACK_NAME=testing-plone-org + STACK_NAME=testing-stable-plone-org DB_HOST=${{ vars.DB_HOST }} DB_NAME=${{ vars.DB_NAME }} DB_USER=${{ vars.DB_USER }} diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index 085141d..804c890 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -15,10 +15,10 @@ jobs: working-directory: ./frontend steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Use Node.js ${{ env.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -37,7 +37,7 @@ jobs: working-directory: ./frontend steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run Prettier run: npx prettier@2.0.5 --single-quote --check 'src/**/*.{js,jsx,ts,tsx,css,scss}' --config=package.json @@ -52,10 +52,10 @@ jobs: steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Use Node.js ${{ env.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -71,7 +71,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -83,7 +83,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -95,7 +95,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 @@ -107,7 +107,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run check uses: plone/code-analysis-action@v2 diff --git a/.github/workflows/deploy-tag-release-live.yml b/.github/workflows/deploy-tag-release-live.yml index ade9004..6260dd5 100644 --- a/.github/workflows/deploy-tag-release-live.yml +++ b/.github/workflows/deploy-tag-release-live.yml @@ -19,7 +19,7 @@ jobs: TAG: ${{ steps.vars.outputs.TAG }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set Env Vars id: vars @@ -32,10 +32,10 @@ jobs: - meta steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Docker meta id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ${{ env.IMAGE_NAME_PREFIX }}-${{ env.FRONTEND_IMAGE_NAME_SUFFIX }} @@ -48,13 +48,13 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: platforms: linux/amd64 context: frontend @@ -69,10 +69,10 @@ jobs: - meta steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Docker meta id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v6 with: images: | ${{ env.IMAGE_NAME_PREFIX }}-${{ env.BACKEND_IMAGE_NAME_SUFFIX }} @@ -87,14 +87,14 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: platforms: linux/amd64 context: backend @@ -114,7 +114,7 @@ jobs: url: https://plone.org steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Deploy to cluster uses: kitconcept/docker-stack-deploy@v1.4.0 diff --git a/.github/workflows/frontend-testing.yml b/.github/workflows/frontend-testing.yml index 7d23244..bee182c 100644 --- a/.github/workflows/frontend-testing.yml +++ b/.github/workflows/frontend-testing.yml @@ -1,4 +1,4 @@ -name: Frontend testing.plone.org CI and deploy +name: Frontend testing-stable.plone.org CI and deploy on: workflow_dispatch: @@ -20,10 +20,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Use Node.js ${{ env.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Run Prettier run: npx prettier@2.0.5 --single-quote --check 'src/**/*.{js,jsx,ts,tsx,css,scss}' --config=package.json @@ -52,10 +52,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Use Node.js ${{ env.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -72,10 +72,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout codebase - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Use Node.js ${{ env.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -95,11 +95,11 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Docker meta id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v6 with: images: | ghcr.io/plone/ploneorg-frontend @@ -114,14 +114,14 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to DockerHub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: platforms: linux/amd64 context: frontend/ @@ -138,13 +138,14 @@ jobs: - release runs-on: ubuntu-latest environment: + # Only exception: keep this to testing.plone.org, otherwise I need to recreate the environment on githubs plone.org repo. name: testing.plone.org - url: https://testing.plone.org + url: https://testing-stable.plone.org steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - - name: Deploy to testing.plone.org + - name: Deploy to testing-stable.plone.org uses: kitconcept/docker-stack-deploy@v1.4.0 with: registry: "ghcr.io" @@ -154,10 +155,10 @@ jobs: remote_port: ${{ vars.DEPLOY_PORT }} remote_user: ${{ vars.DEPLOY_USER }} remote_private_key: ${{ secrets.DEPLOY_SSH }} - stack_file: "devops/stacks/testing.plone.org.yml" - stack_name: testing-plone-org + stack_file: "devops/stacks/testing-stable.plone.org.yml" + stack_name: testing-stable-plone-org env_file: | - STACK_NAME=testing-plone-org + STACK_NAME=testing-stable-plone-org DB_HOST=${{ vars.DB_HOST }} DB_NAME=${{ vars.DB_NAME }} DB_USER=${{ vars.DB_USER }} diff --git a/.github/workflows/redeploy-live.yaml b/.github/workflows/redeploy-live.yaml index a04a7df..f33a02c 100644 --- a/.github/workflows/redeploy-live.yaml +++ b/.github/workflows/redeploy-live.yaml @@ -11,7 +11,7 @@ jobs: TAG: ${{ steps.vars.outputs.TAG }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set Env Vars id: vars @@ -29,7 +29,7 @@ jobs: url: https://plone.org steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Deploy to cluster uses: kitconcept/docker-stack-deploy@v1.4.0 diff --git a/.github/workflows/redeploy-testing.yaml b/.github/workflows/redeploy-testing.yaml index 9b3a8a7..8da49ac 100644 --- a/.github/workflows/redeploy-testing.yaml +++ b/.github/workflows/redeploy-testing.yaml @@ -1,4 +1,4 @@ -name: Deploy latest image tags to testing.plone.org +name: Deploy latest image tags to testing-stable.plone.org on: workflow_dispatch: @@ -10,13 +10,13 @@ jobs: concurrency: deploy_testing runs-on: ubuntu-latest environment: - name: testing.plone.org - url: https://testing.plone.org + name: testing-stable.plone.org + url: https://testing-stable.plone.org steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - - name: Deploy 'latest' image tags to testing.plone.org + - name: Deploy 'latest' image tags to testing-stable.plone.org uses: kitconcept/docker-stack-deploy@v1.4.0 with: registry: "ghcr.io" @@ -26,10 +26,10 @@ jobs: remote_port: ${{ vars.DEPLOY_PORT }} remote_user: ${{ vars.DEPLOY_USER }} remote_private_key: ${{ secrets.DEPLOY_SSH }} - stack_file: "devops/stacks/testing.plone.org.yml" - stack_name: "testing-plone-org" + stack_file: "devops/stacks/testing-stable.plone.org.yml" + stack_name: "testing-stable-plone-org" env_file: | - STACK_NAME=testing-plone-org + STACK_NAME=testing-stable-plone-org DB_HOST=${{ vars.DB_HOST }} DB_NAME=${{ vars.DB_NAME }} DB_USER=${{ vars.DB_USER }} diff --git a/README.md b/README.md index 4235cf9..d534438 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Built with Cookiecutter Plone Starter](https://img.shields.io/badge/built%20with-Cookiecutter%20Plone%20Starter-0083be.svg?logo=cookiecutter)](https://github.com/collective/cookiecutter-plone-starter/) [![Code analysis](https://github.com/plone/plone.org/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/plone/plone.org/actions/workflows/code-analysis.yml) -[![Backend testing.plone.org CI and Deploy](https://github.com/plone/plone.org/actions/workflows/backend-testing.yaml/badge.svg)](https://github.com/plone/plone.org/actions/workflows/backend-testing.yaml) -[![Frontend testing.plone.org CI and deploy](https://github.com/plone/plone.org/actions/workflows/frontend-testing.yml/badge.svg)](https://github.com/plone/plone.org/actions/workflows/frontend-testing.yml) +[![Backend testing-stable.plone.org CI and Deploy](https://github.com/plone/plone.org/actions/workflows/backend-testing.yaml/badge.svg)](https://github.com/plone/plone.org/actions/workflows/backend-testing.yaml) +[![Frontend testing-stable.plone.org CI and deploy](https://github.com/plone/plone.org/actions/workflows/frontend-testing.yml/badge.svg)](https://github.com/plone/plone.org/actions/workflows/frontend-testing.yml) The main destination for Plone diff --git a/devops/stacks/testing-stable.plone.org.yml b/devops/stacks/testing-stable.plone.org.yml new file mode 100644 index 0000000..31959ee --- /dev/null +++ b/devops/stacks/testing-stable.plone.org.yml @@ -0,0 +1,123 @@ +version: '3.9' + +services: + + frontend: + image: ghcr.io/plone/ploneorg-frontend:latest + environment: + RAZZLE_INTERNAL_API_PATH: http://testing-stable-plone-org_backend:8080/Plone + depends_on: + - backend + networks: + - public + - testing_ploneorg + deploy: + replicas: 1 + placement: + constraints: + - node.labels.type == app + labels: + - traefik.enable=true + - traefik.docker.network=public + - traefik.constraint-label=public + # Middlewares + - traefik.http.middlewares.testingstable_ploneorg-frontend-auth.basicauth.users=ploneorg:$$2y$$05$$QuAxsLqKl7ltm6Qv4wOOw./2pK5VeVSBSllAJbdb4dKnFxWhFFLze + + # Services + - traefik.http.services.testingstable_ploneorg-frontend.loadbalancer.server.port=3000 + # Routers + - traefik.http.routers.testingstable_ploneorg-frontend.rule=Host(`testing-stable.plone.org`) + - traefik.http.routers.testingstable_ploneorg-frontend.entrypoints=https + - traefik.http.routers.testingstable_ploneorg-frontend.tls=true + - traefik.http.routers.testingstable_ploneorg-frontend.tls.certresolver=le + - traefik.http.routers.testingstable_ploneorg-frontend.service=testing_ploneorg-frontend + - traefik.http.routers.testingstable_ploneorg-frontend.middlewares=gzip,testingstable_ploneorg-frontend-auth + + backend: + image: ghcr.io/plone/ploneorg-backend:latest + environment: + RELSTORAGE_DSN: "dbname='${DB_NAME:-plone}' user='${DB_USER:-plone}' host='${DB_HOST:-db}' port='${DB_PORT:-5432}' password='${DB_PASSWORD:-plone}'" + networks: + - public + - testingstable_ploneorg + deploy: + replicas: 3 + placement: + constraints: + - node.labels.type == app + max_replicas_per_node: 1 + update_config: + order: stop-first + labels: + - traefik.enable=true + - traefik.docker.network=public + - traefik.constraint-label=public + # Services + - traefik.http.services.testingstable_ploneorg-backend.loadbalancer.server.port=8080 + # Middlewares + ### Authentication + - traefik.http.middlewares.testingstable_ploneorg-backend-auth.basicauth.users=ploneorg:$$2y$$05$$QuAxsLqKl7ltm6Qv4wOOw./2pK5VeVSBSllAJbdb4dKnFxWhFFLze + ### backend ++api++ VHM + - "traefik.http.middlewares.testingstable_ploneorg-vhm-cleanup.replacepathregex.regex=^/((\\+\\+api\\+\\+/){1,})($$|.*)" + - "traefik.http.middlewares.testingstable_ploneorg-vhm-cleanup.replacepathregex.replacement=/VirtualHostBase/https/testing-stable.plone.org/Plone/++api++/VirtualHostRoot/$$3" + - "traefik.http.middlewares.testingstable_ploneorg-vhm.replacepathregex.regex=^/\\+\\+api\\+\\+($$|/.*)" + - "traefik.http.middlewares.testingstable_ploneorg-vhm.replacepathregex.replacement=/VirtualHostBase/https/testing-stable.plone.org/Plone/++api++/VirtualHostRoot/$$1" + ### backend /ClassicUI VHM + - "traefik.http.middlewares.testingstable_ploneorg-vhm-classic.replacepathregex.regex=^/ClassicUI($$|/.*)" + - "traefik.http.middlewares.testingstable_ploneorg-vhm-classic.replacepathregex.replacement=/VirtualHostBase/https/testing-stable.plone.org/Plone/VirtualHostRoot/_vh_ClassicUI/$$1" + # Routers + ## testing-stable.plone.org ++api++ + - traefik.http.routers.testingstable_ploneorg-backend.rule=Host(`testing-stable.plone.org`) && (PathPrefix(`/++api++`)) + - traefik.http.routers.testingstable_ploneorg-backend.entrypoints=https + - traefik.http.routers.testingstable_ploneorg-backend.tls=true + - traefik.http.routers.testingstable_ploneorg-backend.service=testing_ploneorg-backend + - traefik.http.routers.testingstable_ploneorg-backend.middlewares=gzip,testingstable_ploneorg-vhm-cleanup,testingstable_ploneorg-vhm + ### testing-stable.plone.org /ClassicUI - protected with basic auth (prevent SEOs from crawl it) + - traefik.http.routers.testingstable_ploneorg-classicui.rule=Host(`testing-stable.plone.org`) && (PathPrefix(`/ClassicUI`)) + - traefik.http.routers.testingstable_ploneorg-classicui.entrypoints=https + - traefik.http.routers.testingstable_ploneorg-classicui.tls=true + - traefik.http.routers.testingstable_ploneorg-classicui.service=testing_ploneorg-backend + - traefik.http.routers.testingstable_ploneorg-classicui.middlewares=gzip,testingstable_ploneorg-backend-auth,testingstable_ploneorg-vhm-classic + volumes: + - relstorage-cache:/data/relstorage-cache + - blob-cache:/data/blob-cache + + pack: + image: ghcr.io/plone/ploneorg-backend:${STACK_PARAM:-latest} + environment: + RELSTORAGE_DSN: "dbname='${DB_NAME:-plone}' user='${DB_USER:-plone}' host='${DB_HOST:-db}' port='${DB_PORT:-5432}' password='${DB_PASSWORD:-plone}'" + command: bin/zodbpack -d 3 /zodbpack_conf + healthcheck: + disable: true + deploy: + replicas: 0 + placement: + constraints: + - node.labels.type == app + labels: + - "swarm.cronjob.enable=true" + - "swarm.cronjob.schedule=20 4 * * *" + restart_policy: + condition: none + configs: + - source: zodbpack_conf + target: /zodbpack_conf + + networks: + - testing_ploneorg + + +networks: + public: + external: true + driver: overlay + testing_ploneorg: + driver: overlay + +configs: + zodbpack_conf: + file: ../configs/zodbpack.conf + +volumes: + relstorage-cache: {} + blob-cache: {} \ No newline at end of file diff --git a/devops/stacks/testing.plone.org.yml b/devops/stacks/testing.plone.org.yml deleted file mode 100644 index 621a43c..0000000 --- a/devops/stacks/testing.plone.org.yml +++ /dev/null @@ -1,121 +0,0 @@ -version: '3.9' - -services: - - frontend: - image: ghcr.io/plone/ploneorg-frontend:latest - environment: - RAZZLE_INTERNAL_API_PATH: http://testing-plone-org_backend:8080/Plone - depends_on: - - backend - networks: - - public - - testing_ploneorg - deploy: - replicas: 1 - placement: - constraints: - - node.labels.type == app - labels: - - traefik.enable=true - - traefik.docker.network=public - - traefik.constraint-label=public - # Middlewares - - traefik.http.middlewares.testing_ploneorg-frontend-auth.basicauth.users=ploneorg:$$2y$$05$$QuAxsLqKl7ltm6Qv4wOOw./2pK5VeVSBSllAJbdb4dKnFxWhFFLze - - # Services - - traefik.http.services.testing_ploneorg-frontend.loadbalancer.server.port=3000 - # Routers - - traefik.http.routers.testing_ploneorg-frontend.rule=Host(`testing.plone.org`) - - traefik.http.routers.testing_ploneorg-frontend.entrypoints=https - - traefik.http.routers.testing_ploneorg-frontend.tls=true - - traefik.http.routers.testing_ploneorg-frontend.tls.certresolver=le - - traefik.http.routers.testing_ploneorg-frontend.service=testing_ploneorg-frontend - - traefik.http.routers.testing_ploneorg-frontend.middlewares=gzip,testing_ploneorg-frontend-auth - - backend: - image: ghcr.io/plone/ploneorg-backend:latest - environment: - RELSTORAGE_DSN: "dbname='${DB_NAME:-plone}' user='${DB_USER:-plone}' host='${DB_HOST:-db}' port='${DB_PORT:-5432}' password='${DB_PASSWORD:-plone}'" - networks: - - public - - testing_ploneorg - deploy: - replicas: 3 - placement: - constraints: - - node.labels.type == app - max_replicas_per_node: 1 - update_config: - order: stop-first - labels: - - traefik.enable=true - - traefik.docker.network=public - - traefik.constraint-label=public - # Services - - traefik.http.services.testing_ploneorg-backend.loadbalancer.server.port=8080 - # Middlewares - ### Authentication - - traefik.http.middlewares.testing_ploneorg-backend-auth.basicauth.users=ploneorg:$$2y$$05$$QuAxsLqKl7ltm6Qv4wOOw./2pK5VeVSBSllAJbdb4dKnFxWhFFLze - ### backend ++api++ VHM - - "traefik.http.middlewares.testing_ploneorg-vhm-cleanup.replacepathregex.regex=^/((\\+\\+api\\+\\+/){1,})($$|.*)" - - "traefik.http.middlewares.testing_ploneorg-vhm-cleanup.replacepathregex.replacement=/VirtualHostBase/https/testing.plone.org/Plone/++api++/VirtualHostRoot/$$3" - - "traefik.http.middlewares.testing_ploneorg-vhm.replacepathregex.regex=^/\\+\\+api\\+\\+($$|/.*)" - - "traefik.http.middlewares.testing_ploneorg-vhm.replacepathregex.replacement=/VirtualHostBase/https/testing.plone.org/Plone/++api++/VirtualHostRoot/$$1" - ### backend /ClassicUI VHM - - "traefik.http.middlewares.testing_ploneorg-vhm-classic.replacepathregex.regex=^/ClassicUI($$|/.*)" - - "traefik.http.middlewares.testing_ploneorg-vhm-classic.replacepathregex.replacement=/VirtualHostBase/https/testing.plone.org/Plone/VirtualHostRoot/_vh_ClassicUI/$$1" - # Routers - ## testing.plone.org ++api++ - - traefik.http.routers.testing_ploneorg-backend.rule=Host(`testing.plone.org`) && (PathPrefix(`/++api++`)) - - traefik.http.routers.testing_ploneorg-backend.entrypoints=https - - traefik.http.routers.testing_ploneorg-backend.tls=true - - traefik.http.routers.testing_ploneorg-backend.service=testing_ploneorg-backend - - traefik.http.routers.testing_ploneorg-backend.middlewares=gzip,testing_ploneorg-vhm-cleanup,testing_ploneorg-vhm - ### testing.plone.org /ClassicUI - protected with basic auth (prevent SEOs from crawl it) - - traefik.http.routers.testing_ploneorg-classicui.rule=Host(`testing.plone.org`) && (PathPrefix(`/ClassicUI`)) - - traefik.http.routers.testing_ploneorg-classicui.entrypoints=https - - traefik.http.routers.testing_ploneorg-classicui.tls=true - - traefik.http.routers.testing_ploneorg-classicui.service=testing_ploneorg-backend - - traefik.http.routers.testing_ploneorg-classicui.middlewares=gzip,testing_ploneorg-backend-auth,testing_ploneorg-vhm-classic - volumes: - - relstorage-cache:/data/relstorage-cache - - blob-cache:/data/blob-cache - - pack: - image: ghcr.io/plone/ploneorg-backend:${STACK_PARAM:-latest} - environment: - RELSTORAGE_DSN: "dbname='${DB_NAME:-plone}' user='${DB_USER:-plone}' host='${DB_HOST:-db}' port='${DB_PORT:-5432}' password='${DB_PASSWORD:-plone}'" - command: bin/zodbpack -d 3 /zodbpack_conf - healthcheck: - disable: true - deploy: - replicas: 0 - placement: - constraints: - - node.labels.type == app - labels: - - "swarm.cronjob.enable=true" - - "swarm.cronjob.schedule=20 4 * * *" - restart_policy: - condition: none - configs: - - zodbpack_conf - networks: - - testing_ploneorg - - -networks: - public: - external: true - driver: overlay - testing_ploneorg: - driver: overlay - -configs: - zodbpack_conf: - file: ../configs/zodbpack.conf - -volumes: - relstorage-cache: {} - blob-cache: {} \ No newline at end of file