Tag Archive | Server

Administrera Linux Server – Enkelt!

Jag använder Linux för såväl server som klient, men jag vet att det finns många som har i huvudsak Windows klienter och då tycker det blir enklare att använda Windows server.

Jag kan hålla med att om man vill konfigurera användare, tjänster, fil- eller webbservrar med mera så blir det lite krångligt, om man skall göra allt i ett textgränssnitt.

För GIS så har exempelvis GeoNode och GeoServer egna webbgränssnitt för administration och det går att installera klienter för exempelvis PostGIS i form av PgAdminIII, men det finns flera sätt att även administrera de vanliga serverfunktionerna i ett webbgränssnitt.

I detta inlägg får du lära dig ett av dessa. Läs mer…

QGIS Server och WebClient

Det är snart ett år sedan jag testade QGIS Server och WebClient och skrev om det här på bloggen. I detta inlägg så går jag till baka till mina instruktioner och ser om de behöver uppdateras och testar att installera version 2.8 på en Ubuntu Server.

Som vanligt gör jag allt på en virtuell dator med Virtual Box. Med 32 Gb RAM och SSD så går det att installera en Linux Server från grunden på några minuter…

Sedan de uppdaterade kommandona för att installera allt som behövs:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update
sudp apt-get install qgis python-qgis qgis-plugin-grass
sudo apt-get install apache2
sudo apt-get install libapache2-mod-fcgid
sudo apt-get install qgis-server
sudo apt-get install libapache2-mod-wsgi python-psycopg2 python-webob
sudo a2enmod cgid
sudo service apache2 restart

Testa med: http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities och ersätt ”localhost” med serverns IP-adress om du installerat på en annan dator, eller virtuellt som jag.

För att installera QGIS server så behöver en resurs på GitHub klonas och delar läggas över i webbservern:

sudo mkdir /qgis
sudo chmod 775 /qgis
cd /qgis
sudo sudapt-get install git
sudo git clone https://github.com/qgis/qgis-web-client.git
sudo mkdir /var/www/html/qgis/
sudo cp -R /qgis/qgis-web-client/site/* /var/www/html/qgis/

sedan behöver några sökvägar ändras i två filer. Det är ”/home/web/qgis-web-client” som skall ändras till ”/qgis/qgis-web-client”:

sudo nano /var/www/html/qgis/index.html
sudo nano /var/www/html/qgis/js/GlobalOptions.js

Sedan kan du surfa till http://localhost/qgis/ (eller motsvarande med IP-adress) och då skall du ha Bingo!

Skärmbild från 2015-04-04 11:43:37Har du nu lyckats så här långt så kan du använda dig av exemplen för att skapa dina egna kartor med dina egna data och stilar.

Jag har inte gått igenom hur du kopplar dina egna QGIS projektfiler till QGIS Server, men det enklaste är att skapa symboliska länkar till projektfilerna i /usr/lib/cgi-bin/ med kommandot sudo ln /sökväg/projektfil.qgs.

Det går att göra på många andra sätt också och jag skulle väl rekommendera att skapa en utdelad katalog, eller flera, med olika rättigheter för användare beroende på om de är GIS användare eller Webbadministratörera och sedan ändra konfigurationen för såväl Apache som QGIS Server så att det blir mer rationellt att jobba i nätverket.

Lycka till!

Är det förresten någon mer än jag som tycker att ”W” i Hello World exemplet (bilden överst) ser lite annorlunda ut?

Webbkartserver för 300 kr

Ja du behöver lite mer för att det skall fungera fullt ut, men mycket av detta kanske du redan har liggande.

raspberrypi

Till att börja med så behöver du en Raspberry Pi (Modell B), vilket är en liten men komplett dator. Det enda som egentligen behövs till är ett operativsystem och lite lagringsutrymme, vilket man löser genom ett vanligt SD-kort på några GB (jag använder ett på 4 GB). På bilden så syns min Raspberry Pi med en låda och en extra kabel som inte ingår när man köper datorn. Kabeln är bra om man vill bygga lite andra elektronikexperiment med olika kretskort, men för det här projektet så behövs den inte. En låda däremot kan vara bra men inte nödvändig.

Som alla datorer så måste man även ansluta till en skärm (HDMI) och mus/tangentbord (USB), samt en nätverksanslutning (vanlig nätverkskabel). ”Pajen” strömförsörjs med en mikro-USB kabel och den måste leverera minst 700 mA (helst 1 A). Det var det sista som var lite struligt för mig, så det slutade med att jag fick beställa en mikro-USB laddare för ändamålet.

Raspberry Pi säljs i princip överallt och om man använder någon av prisjämförelsesidorna så hittar man dem för under 300, men vanligt pris i butik är strax över 300 kronor.

Börja med att ladda hem operativsystemet från http://www.raspberrypi.org. Det finns flera att välja på och jag använder ”Raspbian” i den här instruktionen.

Filen man hämtar är packad och packas upp på vanligt sätt. Sedan behöver man skriva den *.img fil som blir resultatet av uppackningen till SD-kortet och här skiljer det sig beroende på operativsystem (sök efter ”Win32 Disk Imager” på Windows och ”PiWriter” på OS X). Här redogör jag för terminalkommandona i Linux, eftersom den beskrivna grafiska metoden inte fungerade för mig.

df -h
umount /dev/sdkort-namn_från_förra_kommandot
sudo dd bs=4M if=/sökväg/raspbian-avbildning.img of=/dev/sdkort-namn_från_första_kommandot
sync

Det första kommandot ovan listar alla enheter och partitioner där det gäller att hitta igen det anslutna SD-kortet. På min dator heter kortet ”/dev/mmcblk0”.

Kortet avmonteras med det andra kommandot och det tredje skriver diskavbildningen till kortet. Processen rensar kortet helt och det är mycket viktigt att man anger rätt sökväg, då man kan skriva över fel disk av misstag. Ingen vill väl bli av med sin primära linuxpartition.

Om det inte fungerar så kan man prova att ändra ”bs” till ”1M”, vilket kan fungera men tar betydligt längre tid.

Medan programmet kör så händer ingenting, men det är bara att vänta (för mig tog det ca 5 minuter). Om allt gick bra så kör man sista kommandot för att rensa cachen och göra det säkert att ta ut kortet.

Sätt in kortet i ”Pajen” och anslut skärm, tangentbord, nätverk och slutligen ström via mikro-USB.

pi3

Det kan ta några sekunder men sedan så bör det börja blinka lampor och text rulla på skärmen. Efter ett tag så kommer det upp en meny:

pi1

Här konfigurerar man grunderna i systemet och jag kör ettan för att använda hela SD-kortet, tvåan för att byta lösenord, trean för att bota till kommandoraden då jag inte behöver en skrivbordsmiljö och sedan går jag in i de avancerade inställningarna under åtta:

pi2

Här använder jag A2 för att bestämma vad servern skall heta (jag väljer ”piserver”) och sedan så kör jag A4 för att aktivera SSH så det går att komma åt servern från en annan dator och fjärrstyra den. Slutligen väljer jag ”Finish” och loggar in med användarnamnet ”Pi” och det valda lösenordet. Kör kommandot ”ifconfig” för att kontrollera IP-adressen och därefter ”sudo halt” för att stänga av servern så alla onödiga sladdar kan tas bort. När jag sedan återansluter strömmen så skall det bara vara nätverkskabeln kvar som är ansluten.

Från en annan dator kan jag nu ansluta med SSH exempelvis med följande kommando från en linuxdator:

ssh pi@piserver

I mitt fall fungerade det inte att ange namnet utan jag fick använda IP-adressen till servern i stället.

Det kan som vanligt vara bra att uppdatera servern med kommandona:

sudo apt-get update
sudo apt-get upgrade

Nu kan man i princip installera vad man vill på datorn, men tänk på att det inte är ett prestandamonster till dator.

Jag installerar en enkel webbserver med kommandot:

sudo apt-get install lighttpd

Jag passar även på att installera samba (apt-get install samba) och gör de konfigurationer som behövs för att komma åt webb-roten med en filhanterare.

Screenshot from 2014-05-23 21:27:05

Naturligtvis behöver rättigheten sättas på katalogen /var/www också, och tills vidare så gör jag det med kommandot:

sudo chmod 775 /var/www

Det var egentligen det hela. Resten består i att ladda upp html och javaskriptfiler till den utdelade katalogen, och sedan är det bara att ansluta med webbläsaren till servern.

Screenshot from 2014-05-23 21:46:34

Här i bilden har jag bara skapat en enkel ”index.html” fil i den utdelade katalogen och kör ett mycket enkelt Leaflet exempel med Open Street Map som enda lager.

Att tänka på är att lagringsutrymmet är begränsat men det fungerar ganska bra att hänvisa till data på andra servrar (exempelvis WMS tjänster). Eftersom javaskript körs på klienten så blir det inte heller så betungande för den lilla servern.

Ha inte för stora förväntningar på ”pajen”, men det blir svårt att hitta en server som tar mindre plats och drar mindre ström, för att inte tala om den obefintliga ljudnivån…

[EDIT]

För att aktivera PHP på webservern kör följande kommandon:

sudo apt-get install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php
sudo service lighttpd force-reload

Testa PHP med koden:

<?php
 phpinfo( );
?>

Det var det hela…

Varför skall jag ”Virtualisera”?

Det kan finnas flera anledningar men en är säkerhet, vilket jag återkommer till.

Först och främst, vad är virtualisering? Själv är jag nybörjare och är nog lite svag när det gäller detaljer men det gör mig perfekt för att ta reda på och sammanfatta begreppet generellt.

Kortfattat innebär virtualisering att man låter datorhårdvara köra flera operativsystem samtidigt, vilket får det att se ut som det finns flera datorer på nätverket. För att det skall fungera så behövs det en dator i grunden som kör någon form av vitrualiseringsprogramvara som i sin tur simulerar olika datorer. När man konfigurerat dessa virtuella datorer så kan man installera operativsystem och program precis som med en fysisk dator.

De virtuella datorerna delar då på de resurser som finns i den fysiska datorn och man kan ganska enkelt fördela om resurser mellan dessa om det skulle visa sig att trycket är högre på någon av dem.

Det börjar bli vanligt med specialiserad serverhårdvara för att virtualisera klienter (exempel från Vimmerby) men här fokuserar jag på servervirtualisering.

Det behöver inte ens vara en fysisk dator som man kör sina virtuella datorer på. Det kan vara ett ”kluster” av datorer i stället. Ett kluster är hårdvarumotsvarigheten till virtualisering där man låter flera fysiska datorer agera som en enda rent logiskt. Varje dator kör ett speciellt operativsystem och en eller flera av datorerna samlar all kapacitet och presenterar denna som en gigantisk server med superprestanda.

För att återkomma till säkerhet så finns det en enkel förklaring till varför virtualisering är en bra idé. Tänk dig att någon lyckas utnyttja en svaghet i Apache webbserver och tar sig in i servern. Då kan de teoretiskt även komma åt din GeoServer, PostGIS-databas, mail och dina filer…

Om du i stället kört databasen, mail- och filserver på egna virtuella servrar utan Apache så är de bättre skyddade. Webbservern kanske skadas och information kan läcka, men information som inte publiceras via webben ligger relativt säkert på de andra servrarna.

När man beräknar hur många servrar man behöver så kan man börja med att titta på vilka program som är installerade och börja med att avinstallera det som inte behövs. Detta kan vara lite vanskligt då det är svårt att reda ut alla beroenden, men det skadar inte att lista det som är installerat.

dpkg -l

Vill du sedan lista alla tjänster som körs så finns det ett kommando för det också.

service --status-all

I listan så står det +, – och ? framför tillgängliga tjänster och det betyder att de körs (+), är stoppade (-) eller att statusen är okänd (?).

Vill man lista de portar som servern lyssnar på så kan man använda:

netstat -ntlp

Med det sista kommandot så kan man ganska grovt räkna ut hur många virtuella servrar man behöver. En del portar kanske skall köras på varje server för att exempelvis kunna komma åt och administrera dessa. Detta brukar göras via SSH och port 22. Andra vanliga portar finns i listan nedan.

21 FTP filöverföring
23 Telnet (gammal okrypterad teknik, undvik!)
25 SMTP mail
80 HTTP eller Webbserver
139 NetBIOS namnuppslagning
443 HTTPS krypterad webbsida
445 SMB Windows fildelning

Det finns många fler och även ytterligare portar som inte är standardiserade på riktigt samma sätt men dock registrerade. Ett sådant exempel är PostgreSQL som lyssnar på port 5432. En komplett lista med portnummer kan man hitta på nätet.

Vill du söka igenom ”alla” portar och kontrollera vilka som är öppna/aktiva så kan du köra följande kommando.

sudo nmap -sT -O localhost

Du kan byta ut localhost mot ett servernamn eller en ip-adress för att testa portar på en annan dator i nätverket. Testa exempelvis att köra det mot din egen klient eller din brandvägg…

Säkerhet är ett komplicerat område och man kan sätta säkerhet på så många nivåer. Fysisk säkerhet för att skydda mot direkt tillträde till hårdvaran, inloggning med olika behörigheter, rättigheter i tjänster och filsystem, policy för olika säkerheter, etc. Det blir snabbt svåröverskådligt och är därför säkerhet viktigt så skall man alltid se till att anlita expertis. En ganska bra checklista att börja med kan du hitta på http://www.cyberciti.biz/tips/linux-security.html. Många av kommandona ovan har jag hämtat från denna sida.

Egen server för geodatatjänster – Del 1

Då är det nytt år och kanske dags att fundera på om man skall dra igång något nytt projekt för att förbättra karthanteringen, eller bara vill testa något nytt och ha lite kul.

Det finns inte minst många kommuner som inte har en supergenomtänkt plan för hur man skall hantera geografisk information och krav från EU med INSPIRE och Svensk geodatasamverkan med portaler hit och dit, samtidigt som kostnaderna för den tekniska lösningen måste hållas nere.

Oavsett skälen så startar jag nu en längre serie inlägg om hur man kan bygga en komplett tjänst för att hantera geodata på alla nivåer, för såväl GIS-användare som för den nyfikna allmänheten, och allt däremellan. Exakt hur många delar det blir vet jag inte just nu, men resultatet kommer att sammanfattas i en ”bok” på slutet, som kommer att publiceras här på bloggen. Mycket har tagits upp tidigare, men en del är nytt och framför allt så hänger allt ihop.

Första delen

Här handlar det om förutsättningarna för att testa. Det kan man göra på fysiska datorer, men jag gillar virtuella för prov och försök.

Först och främst så behöver man ladda hem VirtualBox från Oracle (https://www.virtualbox.org/).

Det är en gratis programvara som finns för Windows, OS X och Linux. Det går att flytta virtuella maskiner mellan dessa plattformar och det spelar ingen roll vilken plattform man väljer att installera på.

bok1

För att skapa en ny virtuell dator så klickar man på ”New”, så startas en guide där man gör grundläggande inställningar för att beskriva vilken hårdvara som skall simuleras.

bok2

I det första steget så väljer man namn på den virtuella maskinen och vilket operativsystem man kommer att använda. Det är inte själva datornamnet man sätter, utan vad VirtualBox ”projektet” skall heta, men det lönar sig att döpa dessa till något passande om man har flera för att skilja dessa åt.

bok3

Nästa steg är att avdela RAM minne till den virtuella datorn. Att tänka på är att det bara finns en begränsad mängd fysiskt minne, och det går bara att dela ut en del av detta till virtuella maskiner, så vill man köra flera samtidigt så får man fördela det mellan dessa. Hur mycket som går att fördela beror på mängden RAM i värddatorn och dess operativsystem.

I de kommande stegen så skapar man uppstartsdisk, filtyp på diskavbildningen, hur utrymmet skall allokeras, plats för diskavbildningen och hur stor den maximalt får bli. I de flesta fall så fungerar de förval som är gjorda för dessa steg, men om man exempelvis vill ha rejält med diskutrymme i den virtuella datorn så går det att ändra.

bok4

Beroende på vad man skall använda den virtuella datorn till, och vilka resurser som är tillgängliga, så kan det vara lämpligt att tilldela den virtuella datorn extra kraft.

I ”Settings” (ctrl – s) så gör man inställningar för exempelvis hur många processorkärnor som maskinen får använda, grafikminne (för en server spelar detta mindre roll) och nätverk. Jag brukar ändra från NAT till ”Bryggat nätkort”, så blir den virtuella maskinen tydligare en del av det vanliga nätverket.

bok5

När den virtuella datorn startar första gången så görs detta med en guide där man väljer hur datorn skall startas. Bland annat så väljer man vilket installationsmedia som skall användas. Det går att använda värddatorns CD/DVD-läsare eller en ISO-fil med en skivavbildning. För den här guiden så används en skivavbildning nedladdad från http://ubuntu.com.

bok6

När man sedan slutför guiden så körs installationen precis som om det vore en fysisk dator. När man har fönstret aktivt för den virtuella datorn så kan man använda tangentbordet som om det var anslutet till den. Även musen fungerar på detta sätt, men för ett serveroperativ så används normalt ingen mus.

När jag installerar Ubuntu Server så brukar jag välja Svenska som språk och ett lämpligt datornamn och användare. I övrigt så är det förvalen rakt igenom, förutom på de platser där installationen frågar efter om man vill skriva ändringarna till disk (två platser).

bok7

När installationen är klar så brukar det vara en god idé att installera de senaste uppdateringarna med dessa kommandon.

sudo apt-get update
sudo apt-get upgrade

Nu är servern färdiginstallerad och vi kan gå vidare med nästa steg.