I detta inlägg tänker jag testa att skapa en stand-alone server baserat på en gammal Raspberry Pi 2 som jag har liggande. Den skall installeras som enkel webbserver med Node.JS samt en extern USB disk med webbsidan på. USB disken vill jag kunna ansluta till valfri dator och jobba med och testköra med en Python webbserver, men om jag ansluter den till ”pajen” och startar så skall en webbserver starta automatiskt och presentera den sida som finns på USB-disken.
Först hämtar jag Raspberry Pi Imager och här väljer jag Raspberry Pi OS Lite där jag även har aktiverat SSH i inställningarna.
Det valda systemet skrivs sedan med verktyget till ett microSD kort som sedan sätts i ”pajen”, som i sin tur ansluts till nätverket och startas.
För att ansluta utan att behöva koppla in skärm och tangentbord så behöver jag ta reda på IP adressen.
Du kan prova att direkt från en terminal ”pinga” raspberrypi.local och se om du får träff. Det kan även funger med ett nmap kommando och skanna det lokala nätverket. Annars brukar routrar ha funktioner för att lista använda IP-adresser för anslutna klienter.
I gränssnittet för min router så återfinner jag denna när jag listar anslutna klienter. Genom en terminal så kan jag nu ansluta med SSH med användarnamnet ”pi” och lösenordet ”raspberry” (om detta inte ändrats i Imager). Med en Windows klient så bör detta kommando också fungera i kommandotolken, men annars så går det att ansluta med Putty eller liknande program. Det går också att göra det via Windows Subsystem for Linux.
Innan jag går vidare så uppdateras systemet så att det är så ”fräscht” det går.
Om du har ett ”stort” SD kort så kan du kanske vilja expandera lagringsutrymmet och då kan du göra det med kommandot:
sudo raspi-config
Sedan väljer du Advanced Optiones och Expand Filesystem. I konfigurationen så kan du även göra fler inställningar med ip-adresser, användarnamn, lösenord med mera.
Sedan är det dags för en webbserver.
sudo apt install apache2 -y
När detta är klart går det att kontrollera att det fungerade genom att peka en webbläsare på ip-adressen.
Dessutom är det lämpligt att även installera senaste versionen av Node med några kommandon.
curl -sL https://deb.nodesource.com/setup_17.x | sudo -E bash - sudo apt-get install -y nodejs node -v
I kommandot ovan är ”setup_17.x” den version som man önskar använda och vilken som är den senaste eller LTS går att hitta på Nodejs.org.
Nästa steg blir att skapa en monteringspunkt för USB disken. Detta gör jag i roten på /USB med ett kommando.
sudo mkdir /USB
Om du inte tänkt ansluta en USB utan skapa sidan direkt på SD kortet så kan du hoppa över monteringen och lägga in dina filer här direkt, men för montering så måste mappen vara tom. Lista anslutna diskar med:
sudo fdisk -l
Sedan går det att montera den sökväg man får som svar som pekar på USB disken till den skapade sökvägen /USB med:
sudo mount /dev/sda1 /USB
…under förutsättning att sökvägen till USB-disken är just /dev/sda1.
Detta blir dock inte permanent, så det måste göras varje gång datorn startar om. För att det skall bli permanent så kan man redigera fstab och lägga till en koppling där. Enklast tycker jag det är att använda diskens unika UUID, som man kan hitta med kommandot.
sudo blkid
Leta reda på rätt disk och något som kan likna UUID=”f3ef24b6-d93c-49e3-9518-33086a62f7ab”. Öppna sedan fstab med kommandot:
I denna fil lägger du till en rad som använder UUID och sökvägen till monteringspunkten /USB:
UUID=f3ef24b6-d93c-49e3-9518-33 /USB ext4 defaults 0 0
Observera att i mitt fall så är filsystemet ext4 men om du har ett annat filsystem så bör du anpassa texten. Vilket filsystem din disk har framgår av blkid kommandot tidigare.
När du nu startar om datorn så kommer (förhoppningsvis) disken att monteras på samma ställe varje gång.
För att göra det möjligt för webbservern att komma åt innehållet på disken så behöver några behörigheter för användaren www-data fixas.
sudo chown -R www-data:www-data /USB sudo chmod -R og-r /USB
Nu kommer webbservern åt allt i katalogen, men i övrigt krävs det root behörigheter. Eftersom jag vill kunna komma åt disken när jag kopplar in den på andra platser, så behöver jag göra något annat här. Ett ”osäkert” alternativ är att öppna sökvägen och disken helt för alla grupper och användare med:
sudo chmod -R a+rwx /USB
Då detta är ett experimentsystem som jag inte avser använda annat än i DEMO sammanhang så blir detta en risk jag är beredd att ta för att det skall bli smidigt att hantera.
Konfigurationen i Apache görs i ett par olika filer. Redigera DocumentRoot i en av filerna med:
En motsvarande ändring görs i en annan fil där sökvägen till /var/www skall ändras till /USB med kommandot:
Sedan bör du skapa en index.htm fil på USB disken så att servern har något att landa på.
sudo su sudo echo "<h1>Det fungerar</h1>" > /USB/index.htm exit
Starta sedan om webbservern med:
sudo service apache2 restart
När du nu öppnar webbläsaren på serverns IP-adress så bör du hamna på den nya sidan.
Potree
Hur en Potree sida skapas har jag beskrivit i tidigare inlägg, så det går jag inte in på i detalj här och nu. Du kan läsa mer om det i det tidigare inlägget.
I stort krävs det bara build och lib katalogerna från den installationen. Sedan kan jag själv använda lämplig exempel-fil och spara mina egna punktmoln i ept-format som jag vill. Resten är bara en fråga om filkopiering och redigering av html/javascript.
Genom att modifiera koden och katalogstrukturen och i stället för att separera punktmoln från html-kod, placera en index.html fil tillsammans med ept.json filen i en ”projektmapp”, så kan jag återanvända en mallfil för html koden för alla konverterade punktmoln.
Innehållet i den konverterade ept-katalogen (ept.json, ept-data/, ept-hierarchy/) sparas i en projektkatalog (exempelvis bro1) tillsammans med ”mall-filen” och sedan behöver jag bara peka webbläsaren på underkatalogen som har rätt projektnamn (http://192.168.0.97/bro1).
Med Node.JS så går det att på servern läsa katalogstrukturen och generera en dynamisk länklista för alla projektkataloger. Eller med ett PHP skript. Men det får bli en senare fråga…
Just nu är jag hur nöjd som helst, och jag har ett bra startläge att fortsätta arbeta med punktmoln med Potree, oavsett om jag vill demonstrera i nätverk, ha en server igång lokalt, eller ta med mig hela strukturen på disken och jobba med den lokalt, eller varför inte kopiera över innehållet till en mer permanent webbserver på ett annat nätverk.
Vänta lite… blir det inte svårare?
- Gör om punktmoln till Entwine med QGIS eller untwine
- Skapa en projektmapp på USB disken
- Kopiera dit punktmolnsfilerna
- Kopiera dit index.html filen
Jag kan ganska enkelt skapa ett processverktyg direkt i QGIS för att automatisera allt detta, men det är ju inte speciellt många steg att komma ihåg…
Sedan går det alltid att ha fler mallar för html med andra funktioner och utseenden om det nu skulle vara önskvärt.
Bra tips. Några kommentarer:
Linux-standard är att servrars data brukar lagras under /srv-katalogen.
Ex: /srv/apache2/servernamn/html för html-filer. Då skulle du kunna montera USB-disken på /srv/apache2/ eller /srv/apache2/servernamn
Kommandot blkid är nog bättre än att använda fdisk.
MS Windows 10 och nyare har även ssh-kommandot direkt från ett kommandofönster. Det är dock like krånglande när det kommer till lagra certifikat, och då är det enklare att köra från en Linux installerad i MS Windows, eller med putty.
Det finns några kommandon som alla börjar på a2 för att hantera en appache-server. Konfigurationsfilerna skapar man normalt i katalogen /etc/apache2/sites-available/, och enklast genom att kopiera någon befintlig. Sedan så kan man använda kommandot a2ensite och namnet på .conf-filen för att aktivera den servern. a2disite och namnet för att avaktivera servern.
För att se överslag på vilka inställningar som finns att hantera i apache2, så kan man använda a2query med några växlar.
Det finns även a2-commandon för att lägga till och ta bort extensioner till de körande webbservern.
Prova gärna manualsidan för a2ensite, a2dissite, a2enmod, a2dismod samt a2query så ser du hur det fungerar.