Skapa en webserver med databaser i Debian

När jag skrev det här dokumentet för ett par år sedan, sommaren 2003, körde jag en egen webserver på en dator vid namn Panther. Den har nu gått ett annat öde till mötes. I denna text nedan antar jag dock fortfarande att sidan ligger på den gamla webservern, vilket den numera inte längre gör.

Jag har under en tid försökt göra en webserver vilken har åtkomst till en databas. Detta har inte varit helt lätt, bland annat för att det inte funnits några riktigt bra instruktioner för Hur Man Gör. Så jag har bestämt mig för att skriva en sådan fil själv.

Först försökte jag göra detta med Apache, Php och MySQL, men jag fick inte MySQL att fungera, så jag gick över till PostgreSQL i stället. Nedan förljer instruktioner för hur du gör, steg för steg.

Jag kommer här att använda mig av html, php och sql. Dock ligger det inte innom denna manuals räckvidd att gå igenom dessa språks syntax eller användning. Jag hänvisar där till andra resurser. Jag utgår också ifrån att du har en dator med Debian/Linux och en ethernet internettkopling. Det är vad jag har, och om du har något annat så kommer den här texten att bli mindre relevant.

Ok, låt oss börja.

Webservern

Jag använder webservern Apache, dels för att den är bra, dels för att den är fri. Duger den för 63% av världens webservrar duger den för mig.

apt-get install apache

Detta installerar apache. Om du öppnar upp din favoritbrowser och skriver in "localhost" eller datorns ip-nummer bör du se en sida som talar om att din webserver fungerar. Det är nu dags för dig att börja konfigurera lite. Detta görs i en fil som heter

/etc/apache/httpd.conf

Det mesta fungerar från början och bara några få rader behövs ändras på. Läs igenom filen och se om det är något du inte trivs med.

Det första du vill ändra på är var apache börjar leta efter html-sidor. Exempelvis så har jag här en katalog som heter /home/fille/www/, i vilken det ligger en fil vid namn index.html. Det är den filen du först ser när du surfat in på den här webservern. För att sätta ditt startdirectory, leta upp raden

DocumentRoot

och sätt den till var du vill börja. Gå sedan ner till den katalogen och skapa en fil "index.html" och fyll den med något lämpligt välkomstmeddelande. Kan du inte html får du lära dig det först. Jag skrev en manual för länge sedan som finns på den här sidan. När du är klar, skall du starta om webservern.

groupadd www-data
useradd www-data
useradd www-data www-data

Detta betyder "skapa gruppen www-data", "skapa användaren www-data" och "lägg till användaren www-data till gruppen www-data".
Troligtvis behöver du inte göra detta steg, det är antagligen redan gjort. Men om det inte är gjort står här hur du skall göra.

Nu kan vi starta om apache.

cd /etc/init.d/
./apache restart

Färdigt!

Scriptspråk

För att din webserver skall kunna bete sig mer som en robot och mindre som en staty behöver du ett scriptspråk. Det finns många att använda, men jag föredrar php. Eftersom vi använder Debian är detta väldigt lätt att installera.

apt-get install php4

Det bör i princip räcka. För att testa att allt fungerar, skapa en fil som heter browser.php och fyll den med vanliga html-taggar plus den här raden:

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

Om du surfar in på den sidan bör du få reda på vilken browser du har. Om det gör det har du gjort rätt.

Databaser

Det här är den delen jag hade problem med i början. Om allt vore så enkelt som hittils skulle jag inte bry mig om att göra en manual, detta är inget svårt. Det är inte svårt i sig, men jag hade problem att hitta dokumentation om det.

Jag väljer att använda postgresql. Det var enklare än mysql, bla för att det fungerade. Jag fick inte mysql att fungera på en månad, postgresql fick jag upp på 1.5 timmar.

Först ska vi få php att förstå postgersql-funktioner.

apt-get install php4-pgsql

Du kommer att ombes skriva till "extension=pgsql.so" i filen /etc/php4/apache/php.ini. Tryck bara enter så görs det automatiskt. Nu kan din webserver tala postgresql-språk. Glöm inte att starta om webservern först bara. Det står längre upp hur du gör.

Dags att lägga in själva databasen i datorn.

apt-get install libpgsql2 postgresql postgresql-client

Detta lägger in alla nödvändiga paket.

Nu är det dags att starta postgresql. Det är viktigt att du använder -i när du startar upp, för annars kan du inte knyta ihop postgresql med html.

/usr/lib/postgresql/bin/postmaster -i -D /var/lib/postgres/data

/var/lib/postgres/data är path till databasen. Du kan skriva dit "nisse" istället för "data" om du vill. Då kommer directoryt /var/lib/postgres/nisse att skapas och du får en ny databas.

Redan nu kan du börja skapa databser med tabeller och allt annat som hör till.

createdb databas
psql databas

Createdb skapar en databas vid namn "databas" och psql tar dig in i psql-mode. Däri kan du skriva sql-syntax plus en del andra kommandon. Jag tänker inte gå igenom hur du jobbar i detta läget, men jag kan bjuda på en länk med dokumentation.

Här

Knyta samman Apache och PostGreSQL

Låt oss säga att vi vill ha en databas vid namn "testing" med en tabell "foo" med en kolumn "namn". (Vi gör det här så enkelt som möjligt). Su:a till användaren "postgres". Postgres är root på postgresql-systemet och är den enda som får skapa användare och databaser i början. Du kan sen skapa användare som får skapa databaser om du vill.

createdb testing

Skapar databasen.

psql testing
create table foo ("name" text);
create user 'www-data' nocreatedb nocreateuser;
GRANT all ON foo TO www-data;

Databasen är skapad, och användaren "www-data" har skapats och givits alla rättigheter i tabellen foo, men inte givits rättighet att skapa nya databaser eller användare.
Lägg märke till att www-data skrivs innom ''. Detta beror på att psql inte kan hantera vissa tecken om man inte tvingar dem med '-fnuttar. - är ett av de tecknen. I din PHP-kod är detta inget problem, bara i konsollage.

/etc/init.d/apache stop
/etc/init.d/apache start

Så. Nu ska vi se att du kan kopla till databasen fråm html via php. Skapa en php-fil och lägg in dessa två rader:

<??
$dbconn = pg_connect ("host=localhost dbname=testing");
pg_close($dbconn); //not nessesary
??>

Detta kopplar upp dig mot databasen du skapade ovan, och stänger ner uppkoplingen. Om du gjort rätt får du se en websida som är helt blank. Om du har gjort fel får du felmeddelanden på sidan.

För referens till php-manualen, se php.net

Fotnot: Du kommer att upptäcka att vissa funktioner i PHP inte fungerar ("Call to undefined function in line X in " eller liknande). Det beror på att de funktionerna har bytt namn, och i Debian som kör 4.2.0 tror jag har de kvar sina gamla namn. När du uppgraderar, var berädd på att andra om i koden.


epost: fille aparsle fukt prick bsnet prick se
Epostadressen är krypterad pga spambekämpning, du får avkryptera den själv.
Skicka gärna in förslag på förbättringar till detta dokument.
Upp en nivå