Společně si zkusíme verzovat zdrojový kód a spolupracovat na něm. Následně ho ručně otestujeme a zařídíme, aby se testy spouštěly při každé změně. A pokud testy uspějí, zveřejníme automaticky novou verzi a nasadíme ji na náš server. V neposlední řadě si ukážeme, že Docker je elegantní způsob distribuce některých typů programů.
- Čas: 1h 30m
- Přístupové údaje: Pro zrychlení některé předem vygenerované (odkaz je na tabuli). Zkoušíte si to doma? Klidně si založte vlastní účty.
- Klíčová slova: git, pytest, CI/CD, Github Actions, Virtual Machine in Cloud, SSH, Docker
- Usazení (po dvojících)
- Představení plánu a finálního stavu repositáře, ukázka historie
- Otevření informační stránky
- Přehled zkušeností účastníků
Výchozí stav: logika, webserver
Nainstalování GitHub Desktop(připraveno předem)Založení GitHub účtu(připraveno předem)- Přihlášení do GitHub Desktop
- Představení ukázkového projektu (hlavně souboru
logic.py
) a jeho repositáře (i.e. tohoto) na webu - GitHub Desktop (klonování repositáře)
- Každý pár účastníků si vytvoří vlastní větev na základě větve
initial
a přejde na svou individuální větev
-
otevření VS Code a složky v něm
-
každý pár účastníků vytvoří soubor
test_number1_number2.py
(nějaké čísla si vymyslete, jiná než ostatní) -
v GitHub Desktop: add changes, commit, push
-
Pytest
- instalace Pytest
python -m pip install pytest
- přidat řádek
pytest
dorequirements.txt
requirements.txt
lze nainstalovat pomocípython -m pip install -r requirements.txt
- každý pár účastníků napíše nějaké testy používající
assert
- testy lze spustit pomocí:
python -m pytest .
- v GitHub Desktop: add changes, commit, push
- instalace Pytest
-
vysvětlení Pull Requestů, založení jednoho
-
organizátor PR ověří a mergne do větve
demo
- přejít na větev
demo
, git pull, vytvořit si novou větev - společně trochu vylepšíme
logic.py
- Chcete nápady? Zkuste EduLint. Na tak malém kódu toho moc není, ale jako ukázka dobrý. :)
- Můžete si na začátek souboru přidat řádek
# edulint: enhancement
a zapnou se ještě další kontroly.
- Změny můžeme dělat v klidu, protože když něco rozbijeme, testy nám to řeknou a historie nám umožňuje to vrátit!
- Založení workflow souboru
.github/workflows/test-publish-deploy.yaml
- Spuštění pytest ve workflow souboru
- Push do Gitu
- Zkontrolovat výsledek v Github Actions
- Virtual Machine v cloudu (na Cloudovém providerovi nezáleží)
- připojení na vzdálený server - SSH a základ Bashe
ssh root@SOME_IP
nebossh root@poznejfi.iamroot.eu
- při zadávání hesla to bude vypadat, jako by se nepsalo, ale jen je skryté
- každý si vytvoří vlastní složku a přejde do ní
mkdir SOME_NAME
cd SOME_NAME
- git clone repositář
git clone https://github.com/PoznejFIWorkshop/code-to-deployed-app.git
cd code-to-deployed-app
git checkout YOUR_BRANCH_NAME
- ukázka git sychronizace
- lokálně (i.e. na PC ve škole)
- drobná změna v kódu (klidně třeba jen přidání prázdného řádku)
- v GitHub Desktop: add changes, commit, push
- na vzdáleném serveru (i.e. skrz SSH):
git pull
- lokálně (i.e. na PC ve škole)
Základná myšlenka Dockeru: Zabalím svůj kód/program a vše co potřebuje tak, aby to šlo snadno spustit kdekoliv.
Příklad: Představme si, že můj kód potřebuje Python 3.10, několik balíčků nainstalovaných pomocí pipu a běží pouze na Linuxu. Všechny tři věci tedy zabalíme do tzv. image, který pak lze virtualizovaně spustit kdekoliv.
Nainstalovat Docker a Docker-compose(připraveno předem)- _I na systémech kde je Docker nainstalovaný často docker-compose není by default nainstalovaný. Na Linuxu ho lze doinstalovat např. pomocí
apt install -y docker-compose
.
- _I na systémech kde je Docker nainstalovaný často docker-compose není by default nainstalovaný. Na Linuxu ho lze doinstalovat např. pomocí
Pro programy s CLI nebo webovým rozhraním už to možná udělal někdo za nás. Pojďme si to na pár ukázat:
- příklad: Librespeed - Vlastní test rychlosti sítě
docker run -d --name=librespeed -p 8081:80 -v ${PWD}/librespeed/config:/config --restart unless-stopped lscr.io/linuxserver/librespeed:latest
- příklad: Python libovolné verze izolovaný od hlavního systému
docker run -it python:3.10
docker run -it python:3.10 bash
docker run -it --volume ${PWD}:/app --workdir /app python:3.10 bash
- dalších pár oblíbených aplikací: https://github.com/awesome-selfhosted/awesome-selfhosted
- Napíšeme soubor
Dockerfile
a.dockerignore
- Následně:
docker build --tag poznejfi1 .
docker run -it poznejfi1 pytest .
docker run -it -p 80:80 poznejfi1
docker run --detach -p 80:80 poznejfi1
Konfigurační parametry si můžeme uložit do souboru a verzovat je! Docker-compose navíc usnadňuje propojení více Docker kontejnerů dohromady (např. aplikace + databáze).
Konfiguraci si uložíme do souboru: docker-compose.yaml
. Pak stačí udělat:
docker-compose up --build --detach
docker-compose down
Pojďme taky zveřejnit naše dílo! Budeme upravovat soubor .github/workflows/test-publish-deploy.yaml
-
Registrace na Docker Hub (nebo podobné, např. Github Registry)(připraveno předem) -
Vytvoření API tokenu pro Docker Hub(připraveno předem) -
Nastavení Github Secrets (Docker API token, SSH přihlašovací údaje)
-
CD: Deploy using git
- CD: Build image, push to registry
- CD: Deploy skript (docker-compose pull, docker-compose up)
Nyní víte dostatek na to, abyste byli nebezpeční pro sebe i okolí! Vše co jsme si ale dnes ukázali se můžete doučit samostudiem, teď když víte, co je možné. Nezapomeňte při samostudiu na dostatečně silná hesla, šifrování, firewally, zálohování a to, že Docker kontejnery jsou pouze dočasné, pouze věci namountované skrz volumes jsou věčné!
Pokud by zbyl čas, můžeme se podívat na další témata:
NextCloud image od LinuxServer.io:
---
version: "2.1"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- ./nextcloud/appdata:/config
- ./nextcloud/data:/data
ports:
- 443:443
restart: unless-stopped
Start chvilku trvá, pak dostupný na https://SOME_IP
- větve, merge, merge konflikty
- Github a privátní repositáře
- ssh klíče
- Docker obchází firewall (jak UFW, tak některé pravidla z iptables)
- Jak dělat zálohy volumes
- Docker na Windows
- VPN vs Veřejně dostupné z internetu
Poznámky pro přednášejícího - co zařídit předem:
- Udělat kopii tohoto repositáře do lokace
~/example_project
- Přihlašovací údaje na lokální PC
- Linux VM
- vytvořit větev
demo
na základě větveinitial
- Přihlašovací údaje pro účastníky
- GitHub účet
- API klíč pro Docker Hub
- napsat je do dokumentu, který se nasdílí s účastníky
- připravit je do repository secrets
- Na serveru připravit:
apt update
apt install -y docker-compose
docker pull python:3.10
docker pull python:3.10-slim-buster
docker pull lscr.io/linuxserver/librespeed:latest
cd ~
git clone https://github.com/PoznejFIWorkshop/code-to-deployed-app.git example_project
- na místě workshopu:
- Na všechny PC nainstalovat GitHub Desktop (pozor - na FI se po každém odhlášení smaže)
- Na tabuli napsat link na repositář a na přihlašovací údaje