====== Docker ======
Instalace dockeru pro Raspberry Pi: https://www.simplilearn.com/tutorials/docker-tutorial/raspberry-pi-docker nebo tento návod: https://dev.to/elalemanyo/how-to-install-docker-and-docker-compose-on-raspberry-pi-1mo
Instalační skript:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker raspberrypi_user_name
Kontejnery, obrazy atp jsou pak instalovány zde:
/var/lib/docker
Nastavení dockeru, aby spustil služby po startu systému:
systemctl enable docker
{{youtube>pg19Z8LL06w?}}
===== instalace na Debian =====
Vycházel jsem z článku: [[https://linuxhint.com/install-docker-debian/|How to install Docker on Debian 11]].
apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io
docker -v
===== užitečné příkazy =====
docker images
#spuštění bashe v konkrétním kontejneru
docker exec -it nextcloudpi bash
#vypsání všech kontenerů - včetně nespuštěných
docker ps -a
zdroj:
* [[https://docs.docker.com/engine/reference/commandline/docker/|Příkazy pro použití dockeru]]
===== uvolnění místa =====
Tyto příkazy slouží k vyčištění nevyužitých kontejnerů a zejména tedy k odstranění starých verzí. Bez používání těchto příkazů se mi za půl roku zaplnil disk a hledal jsem příčinu problému.
docker system prune -a
# to samé co výše jen nevyskočí potvrzovací hlášení
docker system prune -a -f
Informace o bezpečném odstraňování jsem čerpal z tohoto zdroje: https://linuxize.com/post/how-to-remove-docker-images-containers-volumes-and-networks/
===== docker compose =====
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose
Nástroj na převedení příkazu dockeru pro docker-compose: https://www.composerize.com/
==== Tvorba docker composer souboru ====
Nejprve vytvořit **docker-conpose.yml**.
touch docker-compose.yml
Nahraji například takový obsah:
version: '3.6'
services:
#https://github.com/jlesage/docker-firefox#environment-variables
firefox:
container_name: firefox
ports:
- '5800:5800'
environment:
- LANG=cs_CZ.UTF-8
- SECURE_CONNECTION=1
- SECURE_CONNECTION_VNC_METHOD=SSL
#ATTENTION: Password is limited to 8 characters.
- VNC_PASSWORD=secret
volumes:
- '/mnt/firefox:/config:rw'
shm_size: '2gb'
image: jlesage/firefox
Když chci otestovat, zda je konfigurační soubor ok, spustím:
docker-compose config
Pokud je všechno ok, tak tento příkaz nainstaluje kontejner:
docker-compose up -d
Tento příkaz kontejner vypne a smaže (kromě obsahu ve **volumes**):
docker-compose down
=== docker-compose - služba pouze na localhostu ===
Pokud chci, aby běžela služba pouze na localhostu, tak se v konfiguračním souboru v sekci ports napíše toto:
ports:
- "127.0.0.1:9000:9000"
Konfigurace zajistí, že port 9000 bude přístupný pouze na localhostu. Čerpal jsem z diskuse: [[https://stackoverflow.com/questions/45109398/how-can-i-make-docker-compose-bind-the-containers-only-on-defined-network-instea|How can I make docker-compose bind the containers only on defined network instead of 0.0.0.0?]]
====== Další kontejnery ======
===== nextcloudpi =====
Zdroj pro instalaci: https://hub.docker.com/r/ownyourbits/nextcloudpi
docker run --privileged -d -p 4443:4443 -p 443:443 -v /mnt/data/externaldisk:/data --name nextcloudpi ownyourbits/nextcloudpi 192.168.1.1
IP adresa na konci příkazu je adresa serveru, na kterém nextcloudpi poběží.
Musel jsem přidat i parametr privileged, protože jinak jsem měl problémy s databází. Při startu kontejnteru jsem viděl toto hlášení:
sleep: cannot read realtime clock: Operation not permitted
K řešení mě dovedly tyto diskuse:
* https://unix.stackexchange.com/questions/598471/docker-container-shows-sleep-cannot-read-realtime-clock-operation-not-permit
* https://forum.inductiveautomation.com/t/docker-container-does-not-start/43915/8
Tady je ještě varianta konfiguračního souboru pro instalaci skrze docker compose:
version: '3.6'
services:
nextcloudpi:
container_name: nextcloudpi
ports:
- '80:80'
- '4443:4443'
- '443:443'
privileged: true
volumes:
- '/mnt/nextcloud:/data'
image: ownyourbits/nextcloudpi
==== updatování ====
docker stop nextcloupdpi
docker pull ownyourbits/nextcloudpi
docker start nextcloudpi
docker system prune -a
Nejprve stopnout kontejner, stáhnout novou verzi, nastartovat novou verzi a na závěr vymazat pomocné soubory a staré verze.
Dle [[https://help.nextcloud.com/t/staying-up-to-date/126259|tohoto příspěvku]] není vhodné upgradovat nextcloudpi uvnitř kontejneru. Měl by se využívat postup aktualizace celého kontejneru výše. Nicméně samotný nextcloud by se zase měl aktualizovat uvnitř kontejneru. Mělo by to být tak, že samotný kontejner nedovolí nainstalovat vyšší verzi nextcloudu, než je vyzkoušeno.
Zdroje k tomuto postupu jsou opravdu zmatené. Nicméně zatím jsem došel k popsanému závěru. Proto jsem zapnul automatickou aktualizaci **nc-autoupdate-nc**. Dříve bylo možné aktualizovat i pomocí **nc-autoupdate-ncp**, ale v latest verzi kontejneru už tuto možnost nevidím. Ruční spuštění naopak varuje, že bych měl vědět co dělám.
K závěru, že to tak funguje jsem došel i kvůli tomu, že mám 3 měsíce starou verzi latest kontejneru latest. Ovšem když jsem nainstalovat nový kontejner, tak nextcloud je hned po instalaci ve vyšší verzi. Takže bych měl mít nextcloud i v dříve nainstalovaném kontejneru ve vyšší verzi. Proto jsem tuto možnost povolil.
===== firefox =====
Defaultně využívá port: **5800**.
Jsou situace, kdy chci přes noc stáhnout něco většího ze serveru, nicméně potřebuji k tomu celý web browser - kvůli autentizaci je někdy nemožné použít příkazovou řádku pro stažení. Je lepší použít webový prohlížeč a neukončovat ho, dokud se soubor nestáhne. Dříve jsem to řešil tak, že jsem měl na mikropočítači nainstalovaný celý desktop a připojoval jsem se vzdáleně přes VNC. Nicméně pokud se jedná o server, tak je docela nešikovné, kvůli této jednorázovce instalovat celý desktop. Problém perfektně vyřeší instalace [[https://hub.docker.com/r/jlesage/firefox|firefoxu v dockeru]].
Další možnosti konfigurace kontejneru lze [[https://github.com/jlesage/docker-firefox|vyčíst z dokumentace na githubu]]
==== instalace ====
docker run -d --name=firefox -p 5800:5800 -v /docker/appdata/firefox:/config:rw --shm-size 2g jlesage/firefox
==== aktualizace kontejneru ====
docker pull jlesage/firefox
==== docker compose file ====
version: '3.6'
services:
#https://github.com/jlesage/docker-firefox#environment-variables
firefox:
container_name: firefox
ports:
- '5800:5800'
environment:
- LANG=cs_CZ.UTF-8
- SECURE_CONNECTION=1
- SECURE_CONNECTION_VNC_METHOD=SSL
#ATTENTION: Password is limited to 8 characters.
- VNC_PASSWORD=secret
volumes:
- '/mnt/firefox:/config:rw'
shm_size: '2gb'
image: jlesage/firefox
===== Mysql a phpmyadmin =====
Tady je obsah souboru //docker-dompose.yml//
version: '3.7'
services:
mariadb:
container_name: mysql
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: supersecretpassword # Změňte heslo podle vašich potřeb
volumes:
- mysql-data:/var/lib/mysql
restart: unless-stopped
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mariadb
MYSQL_ROOT_PASSWORD: supersecretpassword # Musí být stejné jako v mariadb
depends_on:
- mariadb
ports:
- "8080:80" # PHPMyAdmin bude dostupný na portu 8080
restart: unless-stopped
volumes:
mysql-data:
Pro připojení k mysql serveru používat IP adresu: 127.0.0.1. Při použití localhost a mi nepodařilo připojit k databázi.
===== Linux desktop =====
Kontejnery umožňují mít celý Linuxový desktop v prohlížeči jako službu. V něčem to může být užitečné kvůli bezpečnosti - když se něco pokazí, tak smažu kontejner a začnu znovu. Nebo pro návštěvu. [[https://fleet.linuxserver.io/|linuxserver.io]] obsahuje zajímavé kontejnery a mezi ně patří i desktop i pro arm64, který se jmenuje [[https://fleet.linuxserver.io/image?name=linuxserver/webtop|linuxserver/webtop]]. Na videu je podrobný popis instalace zvoleného desktopu **ubuntu-mate**. Ve videu je důležitá zmínka, že je doporučeno aktualizovat a instalovat systém uvnitř kontejneru. Aktualizací celého kontejneru člověk přijde o nastavení systému uvnitř kontejneru a také o nainstalované programy.
{{youtube>Gd9bvdkIXOQ?}}
===== IOTstack =====
IOTstack je utilita, která pomáhá chystat konfigurační soubor pro docker-compose. IOTstack obsahuje často používaný software pro IOT (Internet Of Things) pro Raspberry Pi. Použití utility je vidět na videu zde:
{{youtube>a6mjt8tWUws?}}
Abych mohl IOTstack spustit, musel jsem nainstalovat následující:
apt-get install build-essential python3-dev python3-dev python3-pip python3-wheel
Přesto se ukázala ještě chybová hláška:
ModuleNotFoundError: No module named 'setuptools'
[[https://programmerah.com/error-command-arm-linux-gnueabihf-gcc-failed-with-exit-status-1-raspberry-pi-installation-paramiko-6041/|Z dalších diskusí]] jsem našel řešení v doinstalaci těchto nástrojů:
apt-get install python3-setuptools
apt-get install python-setuptools
A teď jsem konečně mohl stáhnout IOTstack a spustit menu.sh bez chyb:
git clone https://github.com/SensorsIot/IOTstack.git ~/IOTstack
cd IOTstack
./menu.sh
Update 1.1.2024: Aktuálně je doporučený postup instalace na existující systém:
sudo apt install -y curl
curl -fsSL https://raw.githubusercontent.com/SensorsIot/IOTstack/master/install.sh | bash
Pozor, systém se restartuje.
Pomocí IOTstack lze nainstalovat i samotný docker a docker-composer. Nebo aktualizovat celý stack. Kromě videa lze využít také [[https://sensorsiot.github.io/IOTstack/Basic_setup/|dokumentaci k IOStack]], ve které jsou další užitečné příkazy.
Když pak vyberu služby, které chci nainstalovat, vytvoří se konfigurační soubor **docker-dcompose.yml**. Pak už jenom stačí spustit
docker-compose up -d
#-d => detached mode - na pozadí
==== updatování stacku pomocí docker-compose ====
Nejprve vypnout stack pomocí:
docker-compose down
Poté tento příkaz:
docker-compose pull
==== Portainer ====
Defaultně využívá **port: 9000**.
Portainer je nástroj na webovou správu kontejnerů. Návody pro zapnutí SSL pro Portainer.
* https://stackoverflow.com/questions/52819468/portainer-how-to-specify-ssl-in-docker-compose-yml
* https://docs.portainer.io/advanced/ssl
* https://kifarunix.com/setup-portainer-with-ssl-certificates/
==== Nodered ====
Defaultně využívá **port: 1880**.
Návod na zabezpečení Node-Redu přes SSL a autentizace: http://stevesnoderedguide.com/securing-node-red-ssl