Poszczególne moduły (stepy) w tym repozytorium mają za zadanie przybliżyć ci koncepcje związane z:
- konteneryzacją - docker
- automatyzacją konfiguracji wielu serwerów na raz - ansible
- automatyzacją stawiania całej infrastruktury w chmurze - terraform
- CI/CD, czyli automatyzacją wszystkich powyższych elementów tak aby na koniec dostać skonfigurowane środowisko bez kiwnięcia palcem - GitHub Actions
To wszystko ma za zadanie pokazać Ci możliwości. Jeśli po przejściu stepów będziesz czuł niedosyt to spojrzyj do pliku README.md w folderze polecane-szkolenia.
Koncepcje wykorzystywane w tym szkoleniu wymagają od Ciebie znajomości:
- Linuxa - na poziomie średnim, nie musisz być mistrzem, ale wypadałoby wiedzieć jak poruszać się w CLI oraz jak np.: edytować w nim pliki, czy też poruszać się swobodnie po folderach. Zobacz plik
README.mdw folderzepolecane-szkolenia. - Gita - wystarczy ci podstawowa wiedza czym jest
gitoraz znajomość prostych komend typu:git add,git commitorazgit push.
-
Załóż darmowe konto (INNE NIŻ ZHP) na Azure (https://portal.azure) - jeśli zakładasz je pierwszy raz to dostaniesz 200$ do wykorzystania na 30 dni + pełno serwisów jest za darmo przez pierwszych 12 miesięcy. Jeśli już masz konto, to nie przejmuj się, wykorzystamy maksymalnie złotówkę.
-
Zainstaluj WSL2 (tylko dla użytkowników Windows). Uwaga musisz w BIOS/UEFI załączyć wirtualizację (Enable Virtualization on Windows) - https://learn.microsoft.com/en-us/windows/wsl/install:
-
Na WSL2 zainstaluj ansible komendą
sudo apt update && sudo apt install pipx -y && pipx install --include-deps ansible && pipx runpip ansible install docker && pipx ensurepath && . .bashrc. Sprawdź działanie wpisującansible --version. -
Zainstaluj git komendą
sudo apt update && sudo apt install git -y. Sprawdź działanie wpisującgit --version. -
Zainstaluj terraform zgodnie z instrukcjami dla Linux Ubuntu/Debian - https://developer.hashicorp.com/terraform/install. Sprawdź działanie wpisując
terraform --version. -
Zainstaluj Azure CLI - https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?view=azure-cli-latest&pivots=apt (Przejdź do Option 1). Sprawdź działanie komendą
az login, powinno wyskoczyć okienko w twojej przeglądarce do zalogowania się do platformy Azure, spróbuj się zalogować. Jeśli przeglądarka się nie odpali to powinien pokazać się w konsoli URL do zalogowania. A jeśli nawet ta metoda zawiedzie, to można wywołać logowanie kodem urządzenia:az login --use-device-code. Po zalogowaniu sprawdź jako kto jesteś zalogowany komendąaz account show. -
Utwórz nowy klucz SSH komendą
ssh-keygen -t ed25519 -f ~/.ssh/id_itlab -N "". Dwa klucze powinny być widoczne po wpisaniu komendyls -la ~/.ssh/id_itlab* -
Dodajmy też sobie bardzo przydatny alias do komendy dockera, tak żebyśmy nie musieli za każdym razem wpisywać
sudo dockertylko samodocker. Wpisz w konsoli:echo "alias docker='sudo docker'" >> ~/.bashrc
-
-
Zainstaluj docker desktop - https://docs.docker.com/desktop/setup/install/windows-install/
-
Jeśli nigdy nie korzystałeś i nie masz swojego ulubionego IDE to zainstaluj vscode. Będzie nam potrzebne do pisania kodu bezpośrednio na WSL2 (nie wiem czy inne IDE mają coś takiego dostępne) - https://code.visualstudio.com/
- Wtyczki są opcjonalne, ale pomogą nam w pisaniu i formatowaniu kodu (zwłaszcza jeśli nigdy tego nie robiłeś :) ):
- Docker
- HashiCorp Terraform
- indent-rainbow
- Python
- WSL
- Wtyczki są opcjonalne, ale pomogą nam w pisaniu i formatowaniu kodu (zwłaszcza jeśli nigdy tego nie robiłeś :) ):
Musimy także przygotować nasze środowisko w Azure.
- W szukajce u góry wyszukaj Storage Accounts
- Kliknij Create i wypełnij formularz:
- Basics:
- Pod Resource group wybierz Create new i wpisz nazwę tfstate-rg
- Storage account name: tfstate+6 losowych znaków (nazwa musi być unikalna w całym Azure) np.: tfstate1j3k4l
- Region: North Europe
- Performance: Standard
- Redundancy: LRS
- Kliknij Review + Create i zaakceptuj zmiany
- Basics:
- Po wykreowaniu (proces możesz podejrzeć klikając dzwoneczek w prawym górnym rogu), przejdź do nowo stworzonego zasobu klikając w Go to resource
- Przejdź do Data storage > Containers > Add container i nazwij go tfstate i kliknij Create
Musimy utworzyć konto, którym będziemy zdalnie zarządzać naszymi zasobami w Azure.
-
W szukajce wpisz Subscriptions i pobierz Subscription ID, zapisz numer gdzieś z boku w pliku, będzie nam potrzebny później.
-
Zaloguj się używając
az logini wpisz komendęaz ad sp create-for-rbac --name "terraform-sp" --role Contributor --scopes /subscriptions/<SUBSCRIPTION_ID>podmieniając<SUBSCRIPTION_ID>na twój numer. -
W informacji zwrotnej dostaniesz dane w formacie JSON. NIKOMU NIE PODAWAJ TYCH DANYCH, dzięki nim można utworzyć dowolny zasób na Azure. Zapisz je w tym samym miejscu co Subscription ID.
-
Nasze konto musi mieć także jeszcze rolę Storage Blob Data Contributor przypisaną do stworzonego Storage Account:
-
Znajdźmy najpierw ID komendą:
az ad sp list --display-name terraform-sp --query "[].{Name:displayName, AppId:appId}" -o table -
A następnie przypiszmy ją komendą:
az role assignment create --assignee <APP_ID> --scope /subscriptions/<SUBSCRIPTION_ID>/ResourceGroups/tfstate-rg/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME> --role "Storage Blob Data Contributor", gdzie:- APP_ID - to ID konta, które pobraliśmy we wcześniejszej komendzie
- SUBSCRIPTION_ID - to ID subskrypcji
- STORAGE_ACCOUNT_NAME - to nazwa waszego konta storage
-
Sklonuj to repozytorium lokalnie przy użyciu VSCode.
Po otwarciu nowego okna VSCode kliknij w lewym dolnym rogu >< i z listy, która się pojawi wybierz Connect to WSL.
Nastepnie wybierz Clone Git Repository i wklej https://github.com/itwzhp/itlab-iac.git.
Utwórz nowe prywatne repozytorium na twoim koncie GitHub: https://github.com/new o nazwie my-itlab-iac.
Otwórz nowe okno VSCode kliknij w lewym dolnym rogu >< i z listy, która się pojawi wybierz Connect to WSL.
Następnie wybierz Clone Git Repository i wklej adres WWW, który widzisz pod Quick setup — if you’ve done this kind of thing before.
Przejdź do Settings > Secrets and variables > Actions i dodaj:
Repository secrets:
-
ANSIBLE_VAULT_PASSWORD- itlab -
AZURE_CREDENTIALS- JSON w formacie:{ "clientSecret": "******", "subscriptionId": "******", "tenantId": "******", "clientId": "******" }Gdzie:
clientSecret=passwordz naszego pliku JSONsubscriptionId= subscription IDtenantId=tenantz naszego pliku JSONclientId=appIdz naszego pliku JSON -
AZURE_SUBSCRIPTION_ID- twoje Subscription ID -
SSH_KEY- wynik komendycat ~/.ssh/id_itlab. NIKOMU NIE PODAWAJ TEGO KLUCZA!