Obsah

User data

Při vytvoření nebo reinstalaci VPS může vpsAdmin do VPS nahrát skript nebo konfiguraci pro cloud-init. Tento skript nebo konfigurace se aplikuje při prvním spuštění VPS. Podporujeme tyto formáty prvotní konfigurace:

Skripty a konfigurace je možné si do vpsAdminu uložit a při vytvoření/reinstalaci VPS vyberete způsob konfigurace. Správu uložených konfigurací najdeme ve vpsAdminu menu VPSUser data, popř. Edit profileUser data. Při vytvoření/reinstalaci VPS lze konfiguraci vložit i přímo bez ukládání do vpsAdminu. Konfiguraci do vpsAdminu není nutné ukládat, jen vám to ulehčí opakované použítí konfigurací, které se nemění.

Pro vývoj a testování je možné uloženou konfiguraci nahrát do VPS kdykoliv, vpsAdminVPSUser data → Upravit položku ze seznamu a poté formulář Deploy to VPS. Tato akce pouze zapíše skript/konfiguraci na disk VPS, k jejímu spuštění dojde až při restartu VPS.

Formáty konfigurace

Script

vpsAdmin do VPS nahraje zadaný skript a integruje jej do init systému VPS, tj. způsob záleží na použité distribuci. V distribucích se systemd je to služba vpsadmin-script.service. Výstup ze spuštěného skriptu je uložen v journalu, tj. journalctl -u vpsadmin-script.service, popř. v souboru /var/log/vpsadmin-script-output.log.

Příklad skriptu:

#!/bin/sh
 
apt install -y nginx
echo "Hello from VPS $VPSADMIN_VPS_ID" > /var/www/html/index.html

Služba i skript se po spuštění automaticky smaže.

Pokud skript přes vpsAdmin nahrajeme do existující VPS, spustíme ho následovně:

# systemd
systemctl daemon-reload
systemctl start vpsadmin-script.service
 
# OpenRC
service vpsadmin-script start

Proměnné prostředí

Spuštěný skript má k dispozici tyto proměnné prostředí:

cloud-init config

Konfigurace pro cloud-init jako YAML, viz https://cloudinit.readthedocs.io/en/latest/explanation/format.html#cloud-config-data

Příklad konfigurace:

#cloud-config
users:
  - name: myuser
    ssh_authorized_keys:
      - "ssh-rsa AAAA..."
packages:
  - htop
  - curl
runcmd:
  - echo "Hello, world!" > /root/welcome.txt

Výstup cloud-init je vidět v kernel logu a je uložen v souboru /var/log/cloud-init-output.log.

cloud-init script

Skript spuštěný přes cloud-init, viz https://cloudinit.readthedocs.io/en/latest/explanation/format.html#user-data-script

Výstup cloud-init je vidět v kernel logu a je uložen v souboru /var/log/cloud-init-output.log.

NixOS configuration

Vložená konfigurace se uloží do /etc/vpsadmin-nixos/configuration.nix a po startu VPS se provede nixos-rebuild switch. Mějte na paměti, že vložená konfigurace musí importovat vpsadminos.nix, nebo jej rovnou zahrnovat.

Příklad konfigurace:

{ config, pkgs, lib, ... }:
{
  imports = [
    /etc/nixos/vpsadminos.nix
  ];
 
  environment.systemPackages = with pkgs; [
    vim
  ];
 
  services.openssh.enable = true;
  services.openssh.settings.PermitRootLogin = "yes";
  #users.extraUsers.root.openssh.authorizedKeys.keys =
  #  [ "..." ];
 
  systemd.extraConfig = ''
    DefaultTimeoutStartSec=900s
  '';
 
  time.timeZone = "Europe/Amsterdam";
 
  system.stateVersion = "24.11";
}

Výstup příkazu nixos-rebuild je uložen do /var/log/vpsadmin-nixos-output.log.

NixOS flake configuration

Konfigurace se uloží do souboru /etc/vpsadmin-nixos/flake.nix a spustí se příkaz nixos-rebuild switch –flake /etc/vpsadmin-nixos#vps. Konfigurace pro systém vps musí být součástí vloženého flake.nix.

Příklad konfigurace:

{
  inputs = {
    nixpkgs.url = github:NixOS/nixpkgs/nixos-24.11;
    vpsadminos.url = github:vpsfreecz/vpsadminos/staging;
  };
 
  outputs = { self, nixpkgs, vpsadminos }: {
    # Zde musí být konfigurace s názvem "vps"
    nixosConfigurations.vps = nixpkgs.lib.nixosSystem {
      modules = [
        ({ config, pkgs, lib, ... }:
        {
          imports = [
            vpsadminos.nixosConfigurations.container
          ];
 
          environment.systemPackages = with pkgs; [
            vim
          ];
 
          services.openssh.enable = true;
          services.openssh.settings.PermitRootLogin = "yes";
          #users.extraUsers.root.openssh.authorizedKeys.keys =
          #  [ "..." ];
 
          systemd.extraConfig = ''
            DefaultTimeoutStartSec=900s
          '';
 
          time.timeZone = "Europe/Amsterdam";
 
          nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
 
          system.stateVersion = "24.11";
        })
      ];
    };
  };
}

Výstup příkazu nixos-rebuild je uložen do /var/log/vpsadmin-nixos-output.log.

NixOS flake URI

Po startu VPS se spustí příkaz nixos-rebuild switch –flake $flake_uri. Tímto způsobem můžete jednoduše nasadit konfiguraci, kterou máte veřejně k dispozici třeba na GitHubu.

Ukázka použití:

github:vpsfreecz/example-vps-flake#vps

Tuto konfiguraci najdete na https://github.com/vpsfreecz/example-vps-flake.

Výstup příkazu nixos-rebuild je uložen do /var/log/vpsadmin-nixos-output.log.

Použítí s vpsfreectl

Prvotní konfiguraci je možné do VPS nahrát také pomocí vpsfreectl. Nejdříve si připravíme soubor se skriptem:

cat <<EOF > my-script.sh
#!/bin/sh
 
apt install -y nginx
echo "Hello from VPS $VPSADMIN_VPS_ID" > /var/www/html/index.html
EOF

Nyní vytvoříme novou VPS:

vpsfreectl vps create -- \
                      --hostname vps \
                      --os-template 168 \
                      --location 7 \
                      --user-data-format script \
                      --user-data-content @my-script.sh

Hodnota parametru –user-data-content začíná s @ a vpsfreectl tak pošle obsah souboru my-script.sh. OS template 168 je Ubuntu 24.04 (vpsfreectl os_template list), location 7 je Staging (vpsfreectl location list). Stejně tak můžeme skript nahrát při reinstalaci VPS:

vpsfreectl vps reinstall 123 -- --user-data-format script --user-data-content @my-script.sh

Podporované distribuce

Všechny kromě následujících výjimek: