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.

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ų pavyzdysDocker paslaugų pavyzdys

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.

  1. Stackhero valdymo skydelyje pasirinkite savo "production" Docker paslaugą ir spustelėkite mygtuką "Configure".

    Gauti paslaugos nustatymusGauti paslaugos nustatymus

  2. Nukopijuokite "Domain name" ir "Docker certificates password", kad galėtumėte naudoti kitame žingsnyje.

    Gauti paslaugos nustatymusGauti paslaugos nustatymus

  1. Eikite į GitHub ir pasirinkite savo projektą.

  2. Spustelėkite Settings > Environments ir tada New environment.

    GitHub aplinkų konfigūravimasGitHub aplinkų konfigūravimas

  3. Lauke Name įveskite "production" ir patvirtinkite.

    Aplinkos nustatymasAplinkos nustatymas

  4. Spustelėkite mygtuką No restriction ir pasirinkite Selected branches and tags.

    Aplinkos apribojimų nustatymasAplinkos apribojimų nustatymas

  5. Spustelėkite Add deployment branch or tag rule, įveskite "production" lauke Name pattern, tada spustelėkite Add rule.

    Aplinkos šakos nustatymasAplinkos šakos nustatymas Aplinkos šakos nustatymasAplinkos šakos nustatymas

  6. Po Environment secrets, spustelėkite Add secret.

    Pridėti slaptą duomenįPridėti slaptą duomenį

  7. Slaptam duomenyje įveskite STACKHERO_CERTIFICATES_PASSWORD kaip pavadinimą ir įklijuokite savo sertifikatų slaptažodį kaip Value.

    Sertifikatų slaptažodžio slaptų duomenų nustatymasSertifikatų slaptažodžio slaptų duomenų nustatymas

  8. Po Environment variables, spustelėkite Add variable.

    Kintamųjų nustatymasKintamųjų nustatymas

  9. Įveskite STACKHERO_ENDPOINT kaip pavadinimą ir įklijuokite savo Docker paslaugos galinį tašką į Value. Šį galinį tašką galite rasti savo Stackhero valdymo skydelyje.

    Galinio taško kintamojo nustatymasGalinio taško kintamojo nustatymas

Jei pritaikėte savo paslaugos domeno vardą, naudokite pritaikytą versiją vietoj xxxxxx.stackhero-network.com.

Jei docker-compose.yml failas 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

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ąGitHub Actions, kuris diegė į gamybą

Sveikiname! Dabar galite automatiškai diegti savo kodą į gamybą naudodami GitHub Actions.

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.

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).

  1. GitHub eikite į Settings > Environments ir sukurkite aplinkos kintamąjį pavadinimu WEBSITE_DOMAIN.
  2. Testavimo aplinkai nustatykite WEBSITE_DOMAIN į "staging.my-company.com".
  3. 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"

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ą).