Raspberry Pi je miniaturní počítač za pár korun, který pravidelným čtenářům tohoto blogu jistě nemusím představovat. A bez problémů na něm můžete spouštět aplikace napsané v .NETu, včetně webových aplikací v ASP.NET. Když jsem o .NETu na Raspberry psal před šesti lety naposledy, byla to ještě betaverze pod jménem ASPNET 5.

Od té doby se toho hodně změnilo (a zjednodušilo), takže jsem pro vás na kanálu Z-TECH připravil nový seriál, který vám ukáže, jak ASP.NET aplikaci na Raspberry rozchodit.

Co budete potřebovat

Prodám (i jednotlivě) 2 ks Raspberry Pi 2 Model B V 1.1. Starší generace, ale na řadu věcí stále v pohodě stačí. Cena za kus 600 Kč. Zdarma přidám krabičku (jednu tištěnou na 3D tiskárně, jednu průmyslově vyráběnou). K odběru ihned na Praze 7 nebo kamkoliv přes Zásilkovnu za 65 Kč. V případě zájmu mě kontaktujte.

Raspberry budeme instalovat jako server a ukážeme si variantu provisioningu, kdy nebudete potřebovat klávesnici, myš a monitor.

Obsah seriálu

Celý proces jsem rozdělil do čtyř dílů, které postupně najdete každý čtvrtek na kanálu Z-TECH v playlistu Raspberry Pi. Budeme nasazovat mou ukázkovou aplikaci AskMe, ale postup je stejný pro všechny aplikace.

  1. Základní instalace a headless provisioning. Ukážu vám jak vytvořit bootovací kartu se serverovou variantou Raspberry Pi OS a jak ji nakonfigurovat tak, aby se připojila do sítě. Připojíte se na dálku přes SSH a nebudete potřebovat klávesnici a monitor.
  2. Zapnutí SSH autentizace pomocí klíče. Ve druhém dílu vám ukážu, jak SSH zkonfigurovat tak, aby používalo pro autentizaci asymetrický klíč a nikoliv heslo. Je to výrazně bezpečnější a pohodlnější.
  3. Nasazení ASP.NET aplikace. Ukážu vám, jak aplikaci zkompilovat a nasadit jako Self-Contained Deployment (SCD). Tj. na RPi nebudeme muset instalovat žádný runtime ani nic podobného, vytvoříme nativní binárku, kterou stačí pouze spustit. Také vám ukážu, jak aplikaci spustit jako daemona: aby běžela na pozadí a automaticky se spustila při startu systému. A v neposlední řadě, jak to celé udělat bezpečně.
  4. Publikace pomocí Nginxu a zabezpečení firewallem. V (zatím?) posledním dílu vám ukážu, jak Kestrel (vestavěný webový server v .NET 5) publikovat do sítě pomocí software Nginx a jak RPi základně zabezpečit pomocí firewallu UFW.

Základní instalace

Nejjednodušší způsob jak vyrobit bootovací kartu s Raspberry OS představuje Raspberry Pi Imager. Ten si umí sám stáhnout odpovídající image a "vypálit" ho na MicroSD kartu. Pro server nám stačí Raspberry Pi Lite, tedy verze bez grafického uživatelského rozhraní.

Headless provisioning - SSH

Výchozí image počítá s tím, že se k Raspberry připojí HDMI monitor, klávesnice a myš a pracuje se s ním z konzole. To se nám u serveru úplně nehodí, tam chceme takzvaný headless provisioning - bez konzole, připojíme se rovnou přes SSH.

Jako první musíte povolit automatické spouštění SSH, tedy vzdáleného shellu. To je něco jako Remote Desktop (RDP) na Windows, ale bez grafického rozhraní, pouze příkazová řádka.

Vytvořená MicroSD karta má dva logické oddíly (uvidíte ji jako dva disky) a jeden z nich se jmenuje boot. V něm vytvořte soubor jménem ssh (bez přípony, ne třeba ssh.txt). Může být prázdný nebo mít jakýkoliv obsah, při první spuštění bude stejně smazán, jenom se počítač zkonfiguruje tak, že spustí SSH daemona pro vzdálený přístup.

Headless provisioning - Wi-Fi

Pokud budete Raspberry připojovat do počítače drátovou sítí, nemusíte dělat nic dalšího. Pokud ho budete připojovat přes Wi-Fi, musíte ještě nastavit název sítě a heslo.

Vytvořte v partition boot soubor jménem wpa_supplicant.conf a zadejte do něj následující obsah:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CZ

network={
    scan_ssid=1
    ssid="název_sítě"
    psk="heslo"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    auth_alg=OPEN
}

Hodnoty ssid a psk upravte tak, aby obsahovaly název vaší bezdrátové sítě a heslo.

První spuštění a vzdálené připojení

Pak stačí MicroSD kartu vložit do RPi a zapojit napájení (případně síťový kabel). Buďte trpěliví, protože první start může trvat i několik minut, v závislosti na velikosti a rychlosti SD karty. Bohužel, na počítači nijak vizuálně nepoznáte, že proces úspěšně doběhl. Běžte si uvařit kafe nebo se podívejte na nějaké moje video.

Dále pak musíte zjistit, jakou IP adresu ve vaší síti Raspberry Pi dostalo. Přesný postup záleží na tom, jak máte síť udělanou, ale obecně je nejjednodušší se podívat na router a v seznamu zařízení najít to nejnovější. Já jsem dostal IP adresu 10.7.2.126.

Pro vzdálené připojení potřebujete SSH klienta. Ten je součástí Windows 10, takže nemusíte nic instalovat (ale pokud jste zvyklí používat třeba PuTTY, klidně tak čiňte nadále). Z příkazové řádky spusťte následující příkaz (samozřejmě s IP adresou platnou pro váš případ):

ssh [email protected]

Budete vyzváni k zadání hesla, které je raspberry. Výchozí heslo uživatele pi můžete změnit příkazem passwd. V následujícím dílu seriálu vám ukážu, jak přihlašování heslem zakázat úplně a použít místo toho asymetrický klíč.

Poté zadejte následující příkaz:

sudo apt-get update && sudo apt-get upgrade -y

Tím spustíte aktualizaci software, něco jako Microsoft Update na Windows. Tento proces může nějakou dobu trvat, v závislosti na množství aktualizací a rychlosti vaší linky. Běžte si uvařit další kafe a podívejte se na další video, nějaké delší, třeba záznam live streamu o volebním systému u nás.

Jakmile aktualizace doběhnou, máte připravený čistě nainstalovaný server s Raspberry OS. Co s ním dál se dozvíte příští týden ve čtvrtek na kanálu Z-TECH.