Docker: Implementeren met GitHub Actions
Leer hoe u uw Docker-containers implementeert met behulp van GitHub Actions
👋 Welkom bij de documentatie van Stackhero!
Stackhero biedt een kant-en-klare Docker cloud CaaS (Containers as a Service) oplossing die tal van voordelen biedt, waaronder:
- Zet eenvoudig uw containers in productie met slechts een
docker-compose up.- Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://api.uw-bedrijf.com, https://www.uw-bedrijf.com, https://backoffice.uw-bedrijf.com).
- Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.
- Moeiteloze updates met slechts één klik.
Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Docker CaaS cloud hosting oplossing van Stackhero te proberen en uw containers in productie te zetten!
GitHub Actions stelt u in staat om taken te automatiseren, zoals het implementeren van uw Docker-containers naar productie-servers. In deze gids leert u hoe u GitHub Actions veilig en betrouwbaar kunt instellen om uw Docker-containers naar zowel staging- als productieomgevingen te implementeren.
Voor deze configuratie onderhoudt u twee branches: staging en production. Code die naar elke branch wordt gepusht, wordt automatisch geïmplementeerd naar de overeenkomstige Stackhero-instantie.
Het hebben van een staging-instantie is niet verplicht. U kunt deze gids volgen met alleen een productie-instantie. Het wordt echter sterk aanbevolen om zowel een staging- als productie-instantie te hebben om risico's te verminderen en vertrouwen op te bouwen bij het implementeren naar productie. Dit is een industriestandaard en best practice die u kan helpen veel potentiële problemen te vermijden.
Voordat u begint, zorg ervoor dat u een GitHub-account heeft met een repository die uw code host.
Het maken van de Docker-services
Begin met inloggen op uw Stackhero-dashboard en maak twee Stackhero-services aan: één voor staging en één voor productie. Om fouten te minimaliseren, kunt u deze services hernoemen naar "Staging" en "Production".
Heeft u nog geen Stackhero-account? U kunt er gratis een aanmaken in slechts twee minuten en vervolgens uw Docker-cloudservices met slechts een paar klikken maken.
Voorbeeld van Docker-services
Configureer de omgevingsvariabelen en geheimen
Verkrijg de domeinnaam en certificaatwachtwoord
Om GitHub Actions verbinding te laten maken met uw Stackhero Docker-service, heeft u twee stukken informatie nodig: de domeinnaam van uw service en het certificaatwachtwoord.
-
Selecteer in het Stackhero-dashboard uw "production" Docker-service en klik op de knop "Configure".
Service-instellingen ophalen -
Kopieer de "Domeinnaam" en het "Docker-certificaatwachtwoord" voor gebruik in de volgende stappen.
Service-instellingen ophalen
Stel de domeinnaam en certificaatwachtwoord in op GitHub
-
Ga naar GitHub en selecteer uw project.
-
Klik op Settings > Environments en vervolgens op New environment.
GitHub-omgevingen configureren -
Voer in het veld Name "production" in en bevestig.
De omgeving instellen -
Klik op de knop No restriction en selecteer Selected branches and tags.
Omgevingsbeperkingen instellen -
Klik op Add deployment branch or tag rule, voer "production" in het veld Name pattern in en klik vervolgens op Add rule.
Omgevingsbranch instellen
Omgevingsbranch instellen -
Onder Environment secrets, klik op Add secret.
Geheim toevoegen -
Voor het geheim, voer
STACKHERO_CERTIFICATES_PASSWORDin als naam en plak uw certificaatwachtwoord als Value.
Het certificaatwachtwoordgeheim instellen -
Onder Environment variables, klik op Add variable.
Variabelen instellen -
Voer
STACKHERO_ENDPOINTin als naam en plak uw Docker-service endpoint in de Value. U kunt dit endpoint vinden in uw Stackhero-dashboard.
Het endpointvariabele instellen
Als u de domeinnaam van uw service hebt aangepast, gebruik dan de aangepaste versie in plaats van xxxxxx.stackhero-network.com.
Pas het Docker Compose-configuratiebestand aan
Als het
docker-compose.ymlbestand aanwezig is in de root van uw project en er geen aanpassingen nodig zijn, kunt u deze sectie overslaan.
Standaard verwacht GitHub Actions dat het Docker Compose-bestand docker-compose.yml zich in de root van uw project bevindt. Als u een ander bestand moet gebruiken, kunt u de implementatieopdracht aanpassen. Bijvoorbeeld, als u onze Getting started with Node.js and Docker boilerplate gebruikt, kunt u een nieuwe omgevingsvariabele genaamd STACKHERO_DEPLOY_COMMAND maken en deze instellen op:
docker compose --env-file env.list --file docker/docker-compose.yml --file docker/docker-compose.production.yml up --build --remove-orphans -d
Configureer de GitHub Actions workflow
Navigeer op uw lokale machine naar uw Git-repository en maak een directory genaamd .github/workflows. Maak in deze directory een bestand genaamd deploy-to-stackhero.yml met de volgende inhoud:
# File: .github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
description: Implementeer branch "${{ github.ref_name }}" naar Stackhero
on:
push:
# Deze branches activeren de implementatieactie bij een push.
# Zorg ervoor dat u een omgeving maakt die overeenkomt met de branchnaam in GitHub (onder Settings > Environments).
# Voeg vervolgens het geheim STACKHERO_CERTIFICATES_PASSWORD en de variabele STACKHERO_ENDPOINT toe in die omgeving.
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:
# Het geheim STACKHERO_CERTIFICATES_PASSWORD en de variabele STACKHERO_ENDPOINT moeten worden gedefinieerd in de overeenkomstige branchomgeving op GitHub.
certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
# deployment_command is optioneel. Gebruik het als u de Docker Compose-opdracht moet aanpassen.
deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
Commit uw wijzigingen door het volgende uit te voeren:
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Maak vervolgens een productiebranch door het volgende uit te voeren:
git checkout -b production
Duw ten slotte uw productiebranch naar GitHub:
git push --set-upstream origin production
Zodra deze is gepusht, zal GitHub Actions automatisch uw code implementeren naar uw productie Stackhero-instantie. U kunt de implementatie volgen door het Actions tabblad in uw GitHub-project te bezoeken.
GitHub Actions die naar productie heeft geïmplementeerd
Gefeliciteerd! U kunt nu uw code automatisch naar productie implementeren met behulp van GitHub Actions.
Het maken van de staging-omgeving
Het instellen van de staging-omgeving is vergelijkbaar met de productie-instelling. Herhaal eenvoudig de bovenstaande stappen, waarbij u production vervangt door staging.
Maak vervolgens een staging-branch door het volgende uit te voeren:
git checkout -b staging
Duw uw staging-branch naar GitHub met:
git push --set-upstream origin staging
GitHub Actions zal automatisch uw staging-branch implementeren naar de aangewezen Docker-instantie voor staging.
Het gebruik van omgevingsvariabelen in docker-compose.yml
U kunt omgevingsvariabelen definiëren in uw GitHub-project die toegankelijk zullen zijn binnen uw docker-compose.yml bestand. Dit is handig als u naar verschillende domeinen wilt implementeren (bijvoorbeeld staging.my-company.com voor staging en my-company.com voor productie).
- Ga op GitHub naar Settings > Environments en maak een omgevingsvariabele genaamd
WEBSITE_DOMAIN. - Voor de staging-omgeving, stel
WEBSITE_DOMAINin op "staging.my-company.com". - Voor de productieomgeving, stel
WEBSITE_DOMAINin op "my-company.com".
Werk vervolgens het .github/workflows/deploy-to-stackhero.yml bestand bij om de WEBSITE_DOMAIN variabele door te geven aan de Stackhero GitHub Action:
name: Deploy to Stackhero
description: Implementeer branch "${{ github.ref_name }}" naar 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 }}
Werk ten slotte uw docker-compose.yml bestand bij om de WEBSITE_DOMAIN variabele te gebruiken in plaats van een hard-coded domeinnaam:
services:
test:
image: nginx
labels:
- "traefik.enable=true"
- "traefik.http.routers.test.rule=Host(`${WEBSITE_DOMAIN}`)" # Gebruikt de WEBSITE_DOMAIN omgevingsvariabele als de domeinnaam.
- "traefik.http.routers.test.tls.certresolver=letsencrypt"
Verder gaan
Het is een goede gewoonte om de production en staging branches te beschermen om directe pushes te voorkomen. Met branchbescherming ingeschakeld, moet er een pull request worden gemaakt voor de staging branch en vervolgens worden samengevoegd door iemand met de nodige rechten. Zodra gevalideerd op het staging-platform, kan hetzelfde proces worden gevolgd voor de production branch.
Deze aanpak helpt zowel de veiligheid (alleen geautoriseerde teamleden kunnen naar staging en productie implementeren) als de betrouwbaarheid (functies worden getest op een staging-platform voordat ze naar productie worden geïmplementeerd) te waarborgen.