Vítejte u pokračování z původního článku: Jak nainstalovat GitLab. Dneska se podíváme na důležitější část, a to je nastavení deploye na produkční a testovací server.
Jestli GitLab ještě nemáte nainstalovaný, můžete si objednat náš server na týden zdarma a všechno si vyzkoušet. Doporučujeme min. konfiguraci VPS Basic.
Obsah
Základní nastavení
Instalace GitLab runneru
Nastavení SSH klíče
Pokud instalace proběhla úspěšně a nastavili jste si heslo, tak po přihlášení pod loginem root uvidíte uvítací stránku.
VPS Centrum
Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.
Základní nastavení
První krok je vytvoření vlastního projektů. Můžete založit úplně nový (náš případ) nebo nějaký projekt naklonovat či importovat.
V nově vytvořeném projektu vytvoříme 3 důležité soubory:
- .gitlab-ci.yml (script zodpovědný za deploy)
- .deploy_ignore (které složky se při deploy nekopírují)
- .gitignore (git dané soubory nebo složky bude ignorovat)
Pod námi je skript, který vložíte přímo do souboru .gitlab-ci.yml , samozřejmě “variables” vyměníte za svoje údaje/domény.
Pozor! Jeden ze čtenářů nás upozornil, že při vytvoření uživatele se vytvořil v jeho domovské složce soubor .bash_logout. Ten způsoboval chybu v deploy „ERROR: Job failed (system failure): prepare environment: exit status 1“
Podle dokumentace soubor smazal, a vše začalo fungovat.
Pomocí skriptu pod námi budeme uploadovat změny/soubory do dvou složek. Do vývojové, která je zobrazena jako “devel” a pak poputují přimo do produkce.
variables: PROJECT_NAME: "test-gitlab-vh" PRODUCTION_DIR: "/www/hosting/vas-hosting.cz/www" PRODUCTION_SERVER: "erm07.vas-server.cz" DEVELOP_DIR: "/www/hosting/vas-hosting.cz/devel" DEVELOP_SERVER: "erm07.vas-server.cz" DEPLOY_USER: "deploy" stages: - deploy deploy-job: stage: deploy tags: - deploy only: - production script: - rsync -ar --compress --delete --exclude-from=.deploy_ignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.gitignore . $DEPLOY_USER@$PRODUCTION_SERVER:$PRODUCTION_DIR deploy-local-master-job: stage: deploy tags: - deploy only: - master script: - rsync -ar --compress --delete --exclude-from=.gitignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.deploy_ignore . $DEPLOY_USER@$DEVELOP_SERVER:$DEVELOP_DIR/ deploy-local-job: stage: deploy tags: - deploy except: - master - production script: - rsync -ar --compress --delete --exclude-from=.gitignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.deploy_ignore . $DEPLOY_USER@$DEVELOP_SERVER:$DEVELOP_DIR/$PROJECT_NAME-$CI_BUILD_REF_NAME
Instalace GitLab runneru
Důležitou součástí GitLabu jsou tzv. gitlab-runnery, kteří se dají popsat jako nonstop běžící deamon, který čeká, co mu dáte za úkol a je zodpovědný za slavné “pushování”. 🙂
Freelo - Nástroj na řízení úkolů a projektů
Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.
Oficiální návod pro registraci runneru v ENG.
Přidáme gitlab-runner do oficiálního repozitáře:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
Pak nainstalujeme runner příkazem:
sudo apt-get install gitlab-runner
Začneme s registrací
sudo gitlab-runner register
Pak instalace bude chtít URL na které běží instance gitlabu
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com) https://gitlab.vas-hosting.cz
V dalším kroku je nutné vložit tzv. registration token runneru, který najdete v administraci Admin Area > Runners.
Ve 4. kroku můžete popsat svůj runner. Později můžete v administraci hostname změnit.
Please enter the gitlab-ci description for this runner [hostame] first-runner
5. krok je VELICE důležitý. V našem souboru .gitlab-ci.yml máme uvedeno, že deploy provádí runner, který má tag: deploy. V administraci můžete tag později změnit.
Please enter the gitlab-ci tags for this runner (comma separated): deploy
V posledním kroku zvolíme tzv. “Runner executor”. Na výběr máme:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: shell
My pro naše potřeby zvolíme shell. Můžete se podívat i na srovnávací tabulku, kde jsou jednotlivé výhody popsané.
A je to! Úspěšně jsme registrovali prvního runnera. 🙂
Dále máme v souboru .gitlab-ci.yml specifikovaného uživatele “deploy”, kterého musíme nyní vytvořit.
useradd -m -s /bin/bash deploy
Nastavení SSH klíče
Poslední část je nejvíce záludná a týká se vygenerování a správného nastavení SSH klíčů.
Pro vygenerování nového SSH klíče používáme metodu RSA, která se nám osvědčila.
Jako první se musíme přihlásit z roota pod uživatele “gitlab-runner”, který byl při instalaci Gitlabu automaticky vytvořen.
su gitlab-runner
Vygenerujeme SSH klíč.
ssh-keygen -o -t rsa -b 4096
Po vygenerování se vás zeptá, jestli chcete nechat defaultní cestu a pokud ano, stiskněte Enter. Poté se vás zeptá, jestli chcete zaheslovat SSH klíč, a to v našem případě rozhodně nechceme = stiskněte 2x enter.
Poté už se zobrazí klíč podobný tomuto:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQClpCnfh7fzJEKSu1+qXw9Rg5vx9S5tAtC2f57wF2JxjlodvaNvaeTK0yZjpOjwVZ4ZyRS5KNuh8QexPMV0tdMaxM2rnrdFU3PaDPNT2zUE2vz6NBkNwCNb7rhMQCGZGuU9T8b6/JAAMzmJudu2vgS3vFVuKbAohjECiWxK+gtVY5K6F4Z29PoOxNKAlHgvbkFYnCnSsXHruwTsjvmBWC95u/uzDwJLJsS6S9qCYnKHXUq4knIaD67LIqSrgDeel/LQBi0/FrZCrptG2hiz1bIb6VibQctTlYEIoKNfShYila/f5qXiQNkdeXF/38CBl2tsxMUBcQGLnZiSsxx4703O+kDxX+l3C2Y4MXdyWYPzFEXVVwXN5fXBBgmCjBiUYSyP1uq/nocUpSOo56I1MrIf/KZFbeCb2MCppiwA4wfceTfplpiH0U1YVHbQ7KJW+gHS2DZKefMEoA1UabGIcDKEQyM2NAdOioqatOLwjUj2jE0D6tggfoQ2tnc01Tgq1T0eGlvRPmS1gbgmPFDyKUoIvj9ODyPycyQFePoJWVdJb7wcvliVzU8grpRcBSch2KZbKMkHDFYPEc8TXL+BrBDQXs8wXjP7jNtIGRh4a8+idWlj4605cFEr6uk0pGivV6jyRK4xKwiMKB5J7I0VSWSL9+dRfXQcOdah2E+sWTJUxQ== gitlab-runner@xxx08-vh-test-gitlab2.vas-server.cz" >
Tento klíč si uložíme do poznámkového bloku, protože se nám bude za chvilku hodit.
Mezitím se STÁLE pod uživatelem gitlab-runner přihlásíme na ssh pod uživatele deploy.
ssh deploy@xxx11.vas-server.cz
Zeptá se vás to pouze napoprvé, jestli chcete tomuto serveru důvěřovat a napíšete: yes
Můžeme si otevřít další terminal či se přihlásit zpět na roota a následně se přihlásíme pod uživatele “deploy”.
su deploy
A musíme se podívat, jestli uživatel deploy má vytvořenou složku /.ssh.
cd ~ ls -a
Pokud složku .ssh neuvidíme, tak pokračujeme příkazem
mkdir .ssh cd .ssh touch authorized_keys
Poslední příkaz vytvoří soubor, kam se následně vkládají SSH klíče.
Poté pod rootem je třeba vložit SSH klíč tímto příkazem pod uživatele deploy. (Vyměňte za svůj SSH klíč)
echo "from="46.234.108.7,gitlab.vasedomena.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQClpCnfh7fzJEKSu1+qXw9Rg5vx9S5tAtC2f57wF2JxjlodvaNvaeTK0yZjpOjwVZ4ZyRS5KNuh8QexPMV0tdMaxM2rnrdFU3PaDPNT2zUE2vz6NBkNwCNb7rhMQCGZGuU9T8b6/JAAAbmJudu2vgS3vFVuKbAohjECiWxK+gtVY5K6F4Z29PoOxNKAlHgvbkFYnCnSsXHruwTsjvmBWC95u/uzDwJLJsS6S9qCYnKHXUq4knIaD67LIqSrgDeel/LQBi0/FrZCrptG2hiz1bIb6VibQctTlYEIoKNfShYila/f5qXiQNkdeXF/38CBl2tsxMUBcQGLnZiSsxx4703O+kDxX+l3C2Y4MXdyWYPzFEXVVwXN5fXBBgmC jBiUYSyP1uq/nocUpSOo56I1MrIf/KZFbeCb2MCppiwA4wfceTfplpiH0U1YVHbQ7KJW+gHS2DZKefMEoA1UabGIcDKEQyM2NAdOioqatOLwjUj2jE0D6tggfoQ2tnc01Tgq1T0eGlvRPmS1gbgmPFDyKUoIvj9ODyPycyQFePoJWVdJb7wcvliVzU8grpRcBSch2KZbKMkHDFYPEc8TXL+BrBDQXs8wXjP7jNtIGRh4a8+idWlj4605cFEr6uk0pGivV6jyRK4xKwiMKB5J7I0VSWSL9+dRfXQcOdah2E+sWTJUxQ== gitlab-runner@xxx08-vh-test-gitlab2.vas-server.cz ~deploy/.ssh/authorized_keys
Pokud vše proběhlo úspěšně, tak se můžete zpátky přihlásit pod uživatele “deploy” a podívat se jestli se klíč v pořádku vložil.
cat ~/.ssh/authorized_keys
Nadále rsync potřebuje, aby uživatel deploy mohl spouštět “sudo” bez nutnosti zadávat heslo. Na to nám stačí 2 příkazy, které musíme spustit pod rootem. Už naposledy. 🙂
1. echo "deploy ALL=(root) NOPASSWD:/usr/bin/rsync,/usr/sbin/nginx deploy ALL=(www-data) NOPASSWD:ALL" > /etc/sudoers.d/deploy
2.
chmod 0440 /etc/sudoers.d/deploy
Po těchto příkazech nám deploy začne fungovat!
Stačí jít do jakéhokoliv souboru a po kliknutí na edit udělat nějakou změnu. Klidně jenom přidat řádek navíc a po kliknutí na “Commit changes” se spustí uploadování změn.
Následně v sekci CI / CD > Pipelines uvidíte veškeré změny, které proběhly a vždy chceme vidět zelenou fajfku na znamení, že je všechno v pořádku.
Doporučujeme se poté připojit na FTP a zkontrolvoat, že se soubory nahráli do složek na produkční i develovou verzi, jak je specifikováno v konfiguračním souboru(.gitlab-ci.yml). Vyzkoušejte i jestli GitLab správně ignoroval složky nebo soubory, které jste do souboru .deploy_ignore nastavili.
Pokud se vám povedl GitLab rozchodit, tak vám velice gratulujeme! Není to žádná procházka růžovou zahradou. 🙂