Docker: Diegimas naudojant GitHub Actions
Sužinokite, kaip diegti savo Docker konteinerius naudojant GitHub Actions
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Docker cloud CaaS (Containers as a Service) sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Lengvai diekite savo konteinerius į gamybą su paprastu
docker-compose up.- Pritaikomas domeno vardas su HTTPS apsauga (pavyzdžiui, https://api.jusu-imone.com, https://www.jusu-imone.com, https://backoffice.jusu-imone.com).
- Optimali veikla ir tvirta apsauga naudojant privačią ir dedikuotą VM.
- Paprasti atnaujinimai vienu paspaudimu.
Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių išbandyti Stackhero Docker CaaS cloud hosting sprendimą ir diegti savo konteinerius į gamybą!
GitHub Actions leidžia lengvai automatizuoti užduotis, tokias kaip Docker konteinerių diegimas į gamybinius serverius. Šiame vadove sužinosite, kaip saugiai ir patikimai sukonfigūruoti GitHub Actions, kad galėtumėte diegti Docker konteinerius tiek į „staging“, tiek į „production“ aplinkas.
Šiai konfigūracijai palaikysite dvi šakas: staging ir production. Kiekvieną kartą, kai įkelsite kodą į vieną iš šių šakų, jis bus automatiškai įdiegtas į atitinkamą Stackhero instanciją.
Turėti „staging“ instanciją nėra privaloma. Šį vadovą galite naudoti ir tik su „production“ instancija. Tačiau, norint sumažinti riziką ir užtikrintai diegti į gamybą, labai rekomenduojama turėti tiek „staging“, tiek „production“ instancijas. Tai yra pramonės standartas ir geriausia praktika, padedanti išvengti daugelio galimų problemų.
Prieš pradėdami, įsitikinkite, kad turite GitHub paskyrą ir repozitoriją, kurioje laikomas jūsų kodas.
Docker paslaugų kūrimas
Prisijunkite prie savo Stackhero valdymo skydelio ir sukurkite dvi Stackhero paslaugas: vieną „staging“, kitą – „production“. Kad būtų lengviau tvarkytis ir sumažintumėte klaidų tikimybę, rekomenduojame šias paslaugas pervadinti į „Staging“ ir „Production“.
Dar neturite Stackhero paskyros? Ją galite susikurti nemokamai vos per dvi minutes ir tada vos keliais paspaudimais paleisti savo Docker cloud paslaugas.
Docker paslaugų pavyzdys
Aplinkos kintamųjų ir slaptų duomenų konfigūravimas
Domeno vardo ir sertifikatų slaptažodžio gavimas
Kad GitHub Actions galėtų prisijungti prie jūsų Stackhero Docker paslaugos, jums reikės dviejų duomenų: paslaugos domeno vardo ir sertifikatų slaptažodžio.
-
Stackhero valdymo skydelyje pasirinkite savo „production“ Docker paslaugą ir spustelėkite mygtuką „Configure“.
Paslaugos nustatymų gavimas -
Nukopijuokite tiek „Domain name“, tiek „Docker certificates password“ – jų prireiks kituose žingsniuose.
Paslaugos nustatymų gavimas
Domeno vardo ir sertifikatų slaptažodžio nustatymas GitHub
-
GitHub atidarykite savo projektą.
-
Eikite į Settings > Environments ir spustelėkite New environment.
GitHub aplinkų konfigūravimas -
Laukelyje Name įrašykite „production“ ir patvirtinkite.
Aplinkos nustatymas -
Spustelėkite No restriction ir pasirinkite Selected branches and tags.
Aplinkos apribojimų nustatymas -
Spustelėkite Add deployment branch or tag rule, laukelyje Name pattern įrašykite „production“ ir spustelėkite Add rule.
Aplinkos šakos nustatymas
Aplinkos šakos nustatymas -
Skiltyje Environment secrets spustelėkite Add secret.
Slapto duomens pridėjimas -
Slaptam duomeniui naudokite
STACKHERO_CERTIFICATES_PASSWORDkaip pavadinimą ir įklijuokite savo sertifikatų slaptažodį į lauką Value.
Sertifikatų slaptažodžio slaptos reikšmės nustatymas -
Skiltyje Environment variables spustelėkite Add variable.
Kintamųjų nustatymas -
Naudokite
STACKHERO_ENDPOINTkaip pavadinimą ir įklijuokite savo Docker paslaugos endpoint'ą į lauką Value. Endpoint'ą rasite Stackhero valdymo skydelyje.
Endpoint kintamojo nustatymas
Jei esate pritaikę savo paslaugos domeno vardą, būtinai naudokite savo pasirinktą domeną vietoje <XXXXXX>.stackhero-network.com.
Docker Compose konfigūracijos failo pritaikymas
Jei
docker-compose.ymlfailas jau yra jūsų projekto šaknyje ir nereikia jokių pakeitimų, šį skyrių galite praleisti.
Pagal nutylėjimą GitHub Actions ieško docker-compose.yml failo projekto šaknyje. Jei reikia naudoti kitą failą ar konfigūraciją, galite pakeisti diegimo komandą. Pavyzdžiui, jei naudojate mūsų Node.js ir Docker startinį boilerplate, galite sukurti naują aplinkos kintamąjį STACKHERO_DEPLOY_COMMAND ir nustatyti jį taip:
docker compose --env-file env.list --file docker/docker-compose.yml --file docker/docker-compose.production.yml up --build --remove-orphans -d
GitHub Actions darbo eigos konfigūravimas
Savo kompiuteryje eikite į Git repozitoriją ir sukurkite katalogą .github/workflows. Jame sukurkite failą deploy-to-stackhero.yml su šiuo turiniu:
# File: .github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
description: Deploy branch "${{ github.ref_name }}" to Stackhero
on:
push:
# These branches trigger the deploy action on push.
# Be sure to create an environment matching the branch name in GitHub (under Settings > Environments).
# Then add the secret STACKHERO_CERTIFICATES_PASSWORD and variable STACKHERO_ENDPOINT in that environment.
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:
# The secret STACKHERO_CERTIFICATES_PASSWORD and the variable STACKHERO_ENDPOINT should be defined in the corresponding branch environment on GitHub.
certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
# deployment_command is optional. You can use it if you need to customize the Docker Compose command.
deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
Savo pakeitimus galite įkelti su:
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Norėdami sukurti „production“ šaką, vykdykite:
git checkout -b production
Tada įkelkite savo „production“ šaką į GitHub:
git push --set-upstream origin production
Kai tik jūsų kodas bus įkeltas, GitHub Actions automatiškai jį įdiegs į jūsų Stackhero „production“ instanciją. Diegimo eigą galite stebėti savo GitHub projekto Actions skiltyje.
GitHub Actions, įdiegęs į production
Viskas. Dabar jūsų sistema paruošta automatiniam kodo diegimui į gamybą naudojant GitHub Actions.
Staging aplinkos kūrimas
Staging aplinkos paruošimas vyksta taip pat, kaip ir production – tiesiog pakartokite procesą, naudodami staging vietoje production.
Tada sukurkite „staging“ šaką vykdydami:
git checkout -b staging
Ir įkelkite savo „staging“ šaką į GitHub:
git push --set-upstream origin staging
Po šio žingsnio GitHub Actions automatiškai įdiegs jūsų „staging“ šaką į tam skirtą Docker instanciją.
Aplinkos kintamųjų naudojimas docker-compose.yml faile
GitHub projekte galite apibrėžti aplinkos kintamuosius, kurie bus pasiekiami jūsų docker-compose.yml faile. Tai labai naudinga, jei norite diegti į skirtingus domenus (pvz., staging.my-company.com „staging“ aplinkai ir my-company.com „production“ aplinkai).
- GitHub eikite į Settings > Environments ir sukurkite aplinkos kintamąjį pavadinimu
WEBSITE_DOMAIN. - „Staging“ aplinkai nustatykite
WEBSITE_DOMAINreikšmę į „staging.my-company.com“. - „Production“ aplinkai nustatykite
WEBSITE_DOMAINreikšmę į „my-company.com“.
Tada atnaujinkite savo .github/workflows/deploy-to-stackhero.yml failą, kad perduotumėte WEBSITE_DOMAIN kintamąjį Stackhero GitHub Action:
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 }}
Dabar atnaujinkite savo docker-compose.yml failą, kad naudotumėte WEBSITE_DOMAIN kintamąjį vietoje fiksuoto domeno vardo:
services:
test:
image: nginx
labels:
- "traefik.enable=true"
- "traefik.http.routers.test.rule=Host(`${WEBSITE_DOMAIN}`)" # Naudoja aplinkos kintamąjį WEBSITE_DOMAIN kaip domeno vardą.
- "traefik.http.routers.test.tls.certresolver=letsencrypt"
Papildomos rekomendacijos
Rekomenduojama apsaugoti production ir staging šakas, kad būtų išvengta tiesioginių pakeitimų (push). Įjungus šakų apsaugą, pakeitimai atliekami tik per pull request'us, kuriuos turi peržiūrėti ir patvirtinti asmuo su tinkamomis teisėmis. Tai leidžia funkcionalumą pirmiausia patikrinti „staging“ platformoje, o tik po patvirtinimo perkelti į gamybą.
Laikydamiesi šio darbo eigos, užtikrinate tiek saugumą (tik įgalioti komandos nariai gali diegti į „staging“ ir „production“ aplinkas), tiek patikimumą (naujos funkcijos išbandomos „staging“ platformoje prieš diegiant į gamybą).