Následující verze | Předchozí verzeNásledující verzeObě strany příští revize |
navody:vps:vpsadminos:nixops [2018/09/03 17:32] – vytvořeno rmarko | navody:vps:vpsadminos:nixops [2020/11/30 20:04] – [Uživatelské konfigurace] removed 404 link Aither |
---|
| |
* nixops manual https://nixos.org/nixops/manual/ | * nixops manual https://nixos.org/nixops/manual/ |
* příklad deploymentu https://gitub.com/vpsfreecz/example-nixops-deployment/ | * příklad deploymentu https://github.com/vpsfreecz/example-nixops-deployment/ |
| |
Pro konfiguraci kontejnerů běžících na vpsFree je také možné použít nástroj nixops. nixops rozšiřuje možnosti deklarativní konfigurace NixOS pro deploy clusteru NixOS mašin. | Pro konfiguraci kontejnerů běžících na vpsFree je také možné použít nástroj nixops. nixops rozšiřuje možnosti deklarativní konfigurace NixOS pro deploy clusteru NixOS mašin. |
| |
''nixops'' je možné nainstalovat mezi systemový balíky pomocí: | ''nixops'' je možné nainstalovat mezi systemové balíky pomocí: |
| |
<code> | <code> |
Je také možné nainstalovat unstable verzi použitím ''nixopsUnstable''. | Je také možné nainstalovat unstable verzi použitím ''nixopsUnstable''. |
| |
''nixops'' umožňuje použití různých backendů a taky ich mixovaní. Tenhle návod dále obsahujě popis | ''nixops'' umožňuje použití různých backendů a jejich mixovaní. Tento návod dále obsahuje popis |
použití ''libvirt'' backendu pro rychlý deploy do ''qemu'' pomocí ''libvirtd'' a ''none'' backendu pro deploy vopřed připravených instancí přes ''SSH''. | použití ''libvirt'' backendu pro rychlý deploy do ''qemu'' pomocí ''libvirtd'' a ''none'' backendu pro deploy předem připravených VPS přes ''SSH''. |
| |
===== Příklad ===== | ===== Příklad ===== |
| |
Začneme vyklonováním repozitáře se vzorovým deploymentem: | Začneme naklonováním repozitáře se vzorovým deploymentem: |
| |
<code> | <code> |
git clone https://gitub.com/vpsfreecz/example-nixops-deployment/ | git clone https://github.com/vpsfreecz/example-nixops-deployment/ |
</code> | </code> |
| |
==== libvirt backend ==== | ==== libvirt backend ==== |
| |
Vzorový deployment je možný otestovat pomocí ''libvirt'' backendu. Pomocí ''nixops create'' vyvoříme nový deployment s názvem ''virt'', který su bude skládat z ''network.nix'' (logická konfigurace) a ''network-libvirt.nix'' (fyzická konfigurace, specifická pro ''libvirt''). | Vzorový deployment je možné otestovat pomocí ''libvirt'' backendu. Pomocí ''nixops create'' vyvoříme nový deployment s názvem ''virt'', který se bude skládat z ''network.nix'' (logická konfigurace) a ''network-libvirt.nix'' (fyzická konfigurace, specifická pro ''libvirt''). |
| |
Takto vytvořenej deployment můžeme nasadit pomocí přikazu ''deploy''. Deploy v případě ''libvirt'' backendu vyrobí definované virtualní stroje a nahrá na ně novou konfiguraci. | Takto vytvořený deployment můžeme nasadit pomocí příkazu ''deploy''. Deploy v případě ''libvirt'' backendu vyrobí definované virtuální stroje a nahraje na ně novou konfiguraci. |
| |
V připadě, že nespecifikujeme proměnnou prostředí ''NIXOPS_DEPLOYMENT'' je potřeba použít parametr ''-d'' a určit název deploymentu. | V připadě, že nespecifikujeme proměnnou prostředí ''NIXOPS_DEPLOYMENT'', je potřeba použít parametr ''-d'' a určit název deploymentu. |
| |
<code bash> | <code bash> |
a otestovat nově nahozený webserver pomocí ''curl IP''. | a otestovat nově nahozený webserver pomocí ''curl IP''. |
| |
Deployment je možný měnit a znovu re-deploynout pomocí ''nixops deploy''. | Deployment je možné měnit a znovu re-deploynout pomocí ''nixops deploy''. |
| |
==== none backend ==== | ==== none backend ==== |
| |
Pro deploy fyzických strojů nebo kontejnerů je možné použít ''none'' backend, který žádne stroje nevytváří ale používa SSH k nahrání nové konfigurace. Obdobně ako pro virtualizovaný deployment, vytvoříme nový deployment s názvem ''none'', který bude jako fyzickou část konfigurace používat ''network-none.nix''. | Pro deploy fyzických strojů nebo kontejnerů je možné použít ''none'' backend, který žádné stroje nevytváří, ale používá SSH k nahrání nové konfigurace. Obdobně ako pro virtualizovaný deployment, vytvoříme nový deployment s názvem ''none'', který bude jako fyzickou část konfigurace používat ''network-none.nix''. |
| |
Před samotným ''deploy'' je potrebné vytvořit cílove stroje (VPSky) a změnit IP adresy v ''network-none.nix''. | Před samotným ''deploy'' je potřebné vytvořit cílove stroje (VPSky) a změnit IP adresy v ''network-none.nix''. |
| |
<note> | <note> |
None backend při prvním spustení ''deploy'' vygeneruje nový pár SSH klíčů a zeptá se na heslo ke stroji/VPS - přikaz ''deploy'' byl proto doplněn o ''--include hello'' aby nejdřív došlo k instalaci prvního stroje. Pokud deploy pustíme bez parametru, SSH sa zeptá na heslo ke všem strojím najednou a dojde z zahlcení konzole - pro tento případ je lepší použít "dumb" backend pospaný v nasledujíci sekci. | None backend při prvním spuštění ''deploy'' vygeneruje nový pár SSH klíčů a zeptá se na heslo ke stroji/VPS - přikaz ''deploy'' byl proto doplněn o ''--include hello'' aby nejdřív došlo k instalaci prvního stroje. Pokud deploy pustíme bez parametru, SSH sa zeptá na heslo ke všem strojím najednou a dojde k zahlcení konzole - pro tento případ je lepší použít "dumb" backend pospaný v nasledujíci sekci. |
</note> | </note> |
| |
==== dumb backend ==== | ==== dumb backend ==== |
| |
''dumb'' podobně ako ''none'' backend funguje po SSH ale nevytváří páry klíčů pro stroje. Místo toho používá standardnou konfiguraci SSH přes ''~/.ssh/config'' kde je možné vybrat správný SSH klíč pro použití pro deploy. V případě nastavěných SSH klíčů ve ''vpsAdminu'' tak není potřebný sahat před samotným deploy na cílovy stroj. | ''dumb'' podobně jako ''none'' backend funguje po SSH, ale nevytváří páry klíčů pro stroje. Místo toho používá standardní konfiguraci SSH přes ''~/.ssh/config'' kde je možné vybrat správný SSH klíč pro použití pro deploy. V případě nastavených SSH klíčů ve ''vpsAdminu'' tak není nutné sahat před samotným deploy na cílovy stroj. |
| |
<note> | <note> |
</code> | </code> |
| |
===== vpsFree fork ===== | ===== Uživatelské konfigurace ===== |
| |
Pro instalaci stačí uložit následující konfig do ''/etc/nixos'' například pod názvem ''vpsfreeNixops.nix'' | * https://github.com/otevrenamesta/otevrenamesta-cz-configuration |
a použít ''import ./vpsfreeNixops.nix''. | |
| |
<code> | |
{ config, lib, pkgs, ... }: | |
let | |
nixopsRepo = pkgs.fetchFromGitHub { | |
owner = "vpsfreecz"; | |
repo = "nixops"; | |
rev = "510485dee43cc959eb758ce61b38fc94c3e9a29e"; | |
sha256 = "1sn4j3wyz5y1s0nnk5ahwym3qppqm03ygd78cixwdbic0kij6p1i"; | |
}; | |
in | |
{ | |
nixpkgs.overlays = [ | |
(self: super: | |
{ | |
nixops = (import "${nixopsRepo}/release.nix" {}).build.x86_64-linux; | |
} | |
) | |
]; | |
| |
environment.systemPackages = with pkgs; [ | |
screen | |
nixops | |
git | |
]; | |
} | |
</code> | |
| |
| |
===== vpsFree fork (libvirt verze) ===== | |
| |
Tato verze je určena pro běh nixops v kontejneru, v kterém zaroveň běží ''libvirt''. ''libvirt'' je nutno nakonfigurovat se statickou síti a vlastným bridge + DHCP, se kterým nefunguje oficialní verze ''nixops''. Tato verze přidáva podporu pro ''qemu-agent'' a zjištuje IP z bežícího virtualního stroje. | |
| |
Příklad konfigurace ''libvirt'': | |
* modul (libvirt + DHCP + NAT) https://github.com/sorki/48-io-configuration/blob/master/modules/libvirt.nix | |
* konfigurace (nixops overlay) https://github.com/sorki/48-io-configuration/blob/master/machines/lvirt.nix | |
| |
Pro instalaci stačí uložit následující konfig do ''/etc/nixos'' například pod názvem ''vpsfreeNixops.nix'' | |
a použít ''import ./vpsfreeNixops.nix''. | |
| |
<code> | |
{ config, lib, pkgs, ... }: | |
let | |
nixopsRepo = pkgs.fetchFromGitHub { | |
owner = "vpsfreecz"; | |
repo = "nixops"; | |
rev = "668a0f9de10c04dbb7df8c1e4f2be7b064834432"; | |
sha256 = "05ahx1snrddb715r1pdbjk1ywfqa829c6wys9icawxygh2ngspki"; | |
}; | |
in | |
{ | |
nixpkgs.overlays = [ | |
(self: super: | |
{ | |
nixops = (import "${nixopsRepo}/release.nix" {}).build.x86_64-linux; | |
} | |
) | |
]; | |
| |
environment.systemPackages = with pkgs; [ | |
screen | |
nixops | |
git | |
]; | |
} | |
</code> | |
| |