Docker: Utilizzare variabili d'ambiente in docker-compose.yml

Questa documentazione fa parte della guida Distribuire con GitHub Actions. Consulta la guida completa qui: Scoprite come distribuire i vostri container Docker utilizzando GitHub Actions.

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Docker cloud CaaS (Containers as a Service) pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Distribuisci facilmente i tuoi container in produzione con un semplice docker-compose up.
  • Nome di dominio personalizzabile protetto con HTTPS (ad esempio, https://api.tua-azienda.com, https://www.tua-azienda.com, https://backoffice.tua-azienda.com).
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.
  • Aggiornamenti senza sforzo con un solo clic.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione di hosting cloud Docker CaaS di Stackhero e distribuire i tuoi container in produzione!

Potete definire variabili d'ambiente nel vostro progetto GitHub che saranno accessibili all'interno del file docker-compose.yml. Questo è molto utile se volete distribuire su domini diversi (ad esempio, staging.my-company.com per lo staging e my-company.com per la produzione).

  1. In GitHub, andate su Settings > Environments e create una variabile d'ambiente chiamata WEBSITE_DOMAIN.
  2. Per l'ambiente di staging, impostate WEBSITE_DOMAIN su "staging.my-company.com".
  3. Per l'ambiente di produzione, impostate WEBSITE_DOMAIN su "my-company.com".

Successivamente, aggiornate il file .github/workflows/deploy-to-stackhero.yml per passare la variabile WEBSITE_DOMAIN all'azione GitHub Stackhero:

name: Deploy to Stackhero
description: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-docker-containers-to-stackhero@v1
      with:
        certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}
        deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
      env:
        WEBSITE_DOMAIN: ${{ vars.WEBSITE_DOMAIN }}

Ora aggiornate il file docker-compose.yml per utilizzare la variabile WEBSITE_DOMAIN invece di un nome di dominio hard-coded:

services:
  test:
    image: nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.test.rule=Host(`${WEBSITE_DOMAIN}`)" # Utilizza la variabile d'ambiente WEBSITE_DOMAIN come nome di dominio.
      - "traefik.http.routers.test.tls.certresolver=letsencrypt"