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 automatizuoti užduotis, tokias kaip Docker konteinerių diegimas į gamybos serverius. Šiame vadove sužinosite, kaip saugiai ir patikimai nustatyti GitHub Actions, kad galėtumėte diegti savo Docker konteinerius tiek į testavimo, tiek į gamybos aplinkas.
Šiam nustatymui palaikysite dvi šakas: staging ir production. Kodas, įkeltas į kiekvieną šaką, bus automatiškai diegiamas atitinkamoje Stackhero instancijoje.
Turėti testavimo instanciją nėra privaloma. Galite sekti šį vadovą naudodami tik gamybos instanciją. Tačiau, siekiant sumažinti riziką ir padidinti pasitikėjimą diegiant į gamybą, labai rekomenduojama turėti tiek testavimo, tiek gamybos instanciją. Tai yra pramonės standartas ir geriausia praktika, kuri gali padėti išvengti daugelio galimų problemų.
Prieš pradėdami, įsitikinkite, kad turite GitHub paskyrą su saugykla, kurioje talpinamas jūsų kodas.
Docker paslaugų kūrimas
Pradėkite prisijungdami prie savo Stackhero valdymo skydelio ir sukurkite dvi Stackhero paslaugas: vieną testavimui ir vieną gamybai. Siekiant sumažinti klaidų tikimybę, galite pervadinti šias paslaugas į "Staging" ir "Production".
Dar neturite Stackhero paskyros? Galite ją sukurti nemokamai vos per dvi minutes, o tada sukurti savo Docker debesų paslaugas vos keliais paspaudimais.
Docker paslaugų pavyzdys
Aplinkos kintamųjų ir slaptų duomenų konfigūravimas
Gaukite domeno vardą ir sertifikatų slaptažodį
Kad GitHub Actions galėtų prisijungti prie jūsų Stackhero Docker paslaugos, jums reikia dviejų informacijos dalių: jūsų paslaugos domeno vardo ir sertifikatų slaptažodžio.
-
Stackhero valdymo skydelyje pasirinkite savo "production" Docker paslaugą ir spustelėkite mygtuką "Configure".
Gauti paslaugos nustatymus -
Nukopijuokite "Domain name" ir "Docker certificates password", kad galėtumėte naudoti kitame žingsnyje.
Gauti paslaugos nustatymus
Nustatykite domeno vardą ir sertifikatų slaptažodį GitHub
-
Eikite į GitHub ir pasirinkite savo projektą.
-
Spustelėkite Settings > Environments ir tada New environment.
GitHub aplinkų konfigūravimas -
Lauke Name įveskite "production" ir patvirtinkite.
Aplinkos nustatymas -
Spustelėkite mygtuką No restriction ir pasirinkite Selected branches and tags.
Aplinkos apribojimų nustatymas -
Spustelėkite Add deployment branch or tag rule, įveskite "production" lauke Name pattern, tada spustelėkite Add rule.
Aplinkos šakos nustatymas
Aplinkos šakos nustatymas -
Po Environment secrets, spustelėkite Add secret.
Pridėti slaptą duomenį -
Slaptam duomenyje įveskite
STACKHERO_CERTIFICATES_PASSWORDkaip pavadinimą ir įklijuokite savo sertifikatų slaptažodį kaip Value.
Sertifikatų slaptažodžio slaptų duomenų nustatymas -
Po Environment variables, spustelėkite Add variable.
Kintamųjų nustatymas -
Įveskite
STACKHERO_ENDPOINTkaip pavadinimą ir įklijuokite savo Docker paslaugos galinį tašką į Value. Šį galinį tašką galite rasti savo Stackhero valdymo skydelyje.
Galinio taško kintamojo nustatymas
Jei pritaikėte savo paslaugos domeno vardą, naudokite pritaikytą versiją vietoj xxxxxx.stackhero-network.com.
Docker Compose konfigūracijos failo pritaikymas
Jei
docker-compose.ymlfailas yra jūsų projekto šaknyje ir nereikia jokių pritaikymų, galite praleisti šią dalį.
Pagal numatytuosius nustatymus, GitHub Actions tikisi, kad Docker Compose failas docker-compose.yml bus jūsų projekto šaknyje. Jei reikia naudoti kitą failą, galite pritaikyti diegimo komandą. Pavyzdžiui, jei naudojate mūsų Node.js ir Docker pradinį šabloną, galite sukurti naują aplinkos kintamąjį pavadinimu 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 vietinėje mašinoje eikite į savo Git saugyklą ir sukurkite katalogą pavadinimu .github/workflows. Šiame kataloge sukurkite failą pavadinimu deploy-to-stackhero.yml su šiuo turiniu:
# File: .github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
description: Diegti šaką "${{ github.ref_name }}" į Stackhero
on:
push:
# Šios šakos sukelia diegimo veiksmą, kai įkeliama.
# Įsitikinkite, kad sukūrėte aplinką, atitinkančią šakos pavadinimą GitHub (po Settings > Environments).
# Tada pridėkite slaptą duomenį STACKHERO_CERTIFICATES_PASSWORD ir kintamąjį STACKHERO_ENDPOINT toje aplinkoje.
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:
# Slaptas duomenis STACKHERO_CERTIFICATES_PASSWORD ir kintamasis STACKHERO_ENDPOINT turi būti apibrėžti atitinkamoje šakos aplinkoje GitHub.
certificates_password: ${{ secrets.STACKHERO_CERTIFICATES_PASSWORD }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
# deployment_command yra neprivalomas. Naudokite jį, jei reikia pritaikyti Docker Compose komandą.
deployment_command: ${{ vars.STACKHERO_DEPLOY_COMMAND }}
Įsipareigokite savo pakeitimus vykdydami:
git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"
Tada sukurkite gamybos šaką vykdydami:
git checkout -b production
Galiausiai, įkelkite savo gamybos šaką į GitHub:
git push --set-upstream origin production
Kai įkelta, GitHub Actions automatiškai diegs jūsų kodą į jūsų gamybos Stackhero instanciją. Galite stebėti diegimą apsilankę Actions skirtuke savo GitHub projekte.
GitHub Actions, kuris diegė į gamybą
Sveikiname! Dabar galite automatiškai diegti savo kodą į gamybą naudodami GitHub Actions.
Testavimo aplinkos kūrimas
Testavimo aplinkos nustatymas yra panašus į gamybos nustatymą. Tiesiog pakartokite aukščiau nurodytus veiksmus, pakeisdami production į staging.
Tada sukurkite testavimo šaką vykdydami:
git checkout -b staging
Įkelkite savo testavimo šaką į GitHub su:
git push --set-upstream origin staging
GitHub Actions automatiškai diegs jūsų testavimo šaką į paskirtą Docker instanciją testavimui.
Aplinkos kintamųjų naudojimas docker-compose.yml
Galite apibrėžti aplinkos kintamuosius savo GitHub projekte, kurie bus pasiekiami jūsų docker-compose.yml faile. Tai naudinga, jei norite diegti į skirtingus domenus (pavyzdžiui, staging.my-company.com testavimui ir my-company.com gamybai).
- GitHub eikite į Settings > Environments ir sukurkite aplinkos kintamąjį pavadinimu
WEBSITE_DOMAIN. - Testavimo aplinkai nustatykite
WEBSITE_DOMAINį "staging.my-company.com". - Gamybos aplinkai nustatykite
WEBSITE_DOMAINį "my-company.com".
Tada atnaujinkite .github/workflows/deploy-to-stackhero.yml failą, kad perduotumėte WEBSITE_DOMAIN kintamąjį į Stackhero GitHub veiksmą:
name: Deploy to Stackhero
description: Diegti šaką "${{ github.ref_name }}" į 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 }}
Galiausiai, atnaujinkite savo docker-compose.yml failą, kad naudotumėte WEBSITE_DOMAIN kintamąjį vietoj kietai užkoduoto 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"
Tolimesni žingsniai
Rekomenduojama apsaugoti production ir staging šakas, kad būtų išvengta tiesioginių įkėlimų. Suaktyvinus šakų apsaugą, turi būti sukurtas pull request staging šakai, o tada sujungtas asmens, turinčio reikiamus leidimus. Patvirtinus testavimo platformoje, tas pats procesas gali būti taikomas production šakai.
Šis požiūris padeda užtikrinti tiek saugumą (tik įgalioti komandos nariai gali diegti į testavimą ir gamybą), tiek patikimumą (funkcijos yra išbandytos testavimo platformoje prieš diegiant į gamybą).