LAMP (Linux, Apache, MySQL & PHP) på dit Ubuntu desktop

Monday, January 12, 2009

Hvorfor en LAMP-server på sin Ubuntu desktopmaskine?

Det kan måske virke underligt at man skulle have lyst til at installere servermoduler på sin arbejdsmaskine. “Servermoduler hører da til på serveren”, og det er da også til dels rigtigt. Men der kan være mange gode grunde til også at have servermoduler på sin arbejdsmaskine.
Min egen grund til at gøre det er at jeg programmerer hjemmesider og webapplikationer i det sprog der hedder PHP. Det er et server-side programmeringssprog, hvilket vil sige at koden bliver afviklet på serveren, i stedet for på klienten, altså i brugerens internetbrowser, på samme måde som JavaScript f.eks. gør det.
Dette betyder at når jeg skal teste de ting jeg har programmeret bliver jeg nødt til at ligge dem på en webserver, for at kunne se hvordan serveren reagerer på koden, og for at se hvordan outputtet (hjemmesiden) kommer til at se ud. Dette vil normalt betyde at jeg skal have fat i mit FTP-program, for at ligge alle de sider jeg har ændret på, op hos min webhost, tilgå hjemmesiden og se resultatet.
Hvis jeg derimod har en webserver kørende på min produktionsmaskine har jeg ikke behov for andet end at have en browser åben der peger på min egen maskine. Når jeg så har ændret i koden skal jeg bare gemme dokumentet og refreshe siden i browseren for at se resultatet af ændringen. Dette giver mig mulighed for at teste meget hurtigere, og meget oftere da jeg ikke skal spilde så meget tid på det, og jeg kan så nøjes med at ligge siden ud til min host når jeg mener jeg har lavet en tilpas stor ændring, samt sikret mig at siden virker som den skal.

Artiklen kan måske virke lidt overvældende, men installationen og opsætningen i sig selv kan klares ved bare at kopiere de kommandoer jeg har angivet igennem artiklen, og vil normalt ikke tage mere end et par minutter. Jeg har dog anstrengt mig for at forklare alt hvad jeg gør igennem processen, for at give alle en mulighed for at være med, uden at behøve frygte for om deres maskine pludselig bliver ukampdygtig.

Installation

Men hvordan foregår installationen af denne lampe så? Jo, som overskriften fortæller står LAMP for Linux, Apache, MySQL og PHP.
Selve Linuxinstallationen vil jeg ikke komme ind på, da dette egentlig er en guide henvendt til Linuxbrugere, og jeg vil derfor antage at Linux allerede er installeret og virker. Desuden benyttes APT der er systemet til Programhåndtering i Ubuntu. Guiden er altså henvendt til brugere at Ubuntu og de afarter der findes, og jeg vil gætte på at den også virker med storebroderen Debian, der også bruger APT, men ikke nødvendigvis på de mange andre Linuxversioner der findes.

Installation af Apache

Apache er selve webserveren. Det er den del der reagerer på forespørgsler udefra, og bestemmer hvordan de skal håndteres. Hver gang du går ind på en hjemmeside står der altså en webserver og bedømmer om du er kommet for at se en hjemmeside, eller for at sende en e-mail, eller noget helt tredje.
Apacheserveren findes i Ubuntus standard repositories og kan derfor installeres fra terminalen med kommandoen:

sudo aptitude install apache2

Let og enkelt. Efter installationen er fuldført kan du åbne en browser og gå til localhost som er standardadressen på din egen maskine, for at checke at det virker efter hensigten.
som standard viser apache det website der findes i /var/www på din computer, så indtil videre kan du ændre i de filer der ligger her, eller ligge dit eget website her for at få det vist. Jeg vil senere komme en lille smule ind på hvordan man opsætter og styrer sin apacheserver.

Installation af PHP5

PHP er det “program” der oversætter PHP-kode til kode som computeren kan køre, og til sidst til kode som webserveren kan præsentere for den besøgende på siden. Dette findes selvfølgelig også i Ubuntus repositories, ydermere installerer vi “libapache2-mod-php5″ som er et modul der sørger for at få din apacheserver til at virke sammen med PHP. Det er jo en fordel at tingene kan snakke sammen :-)

sudo aptitude install php5 libapache2-mod-php5

Herefter burde du kunne smide din PHP-kode i apache’s standardbibliotek /var/www og se resultatet ved igen at tilgå localhost.

Installation af MySQL

Det sidste vi skal have installeret er MySQL.
Dette er en gratis Open Source database der pga. sin pris er et meget populært valg blandt PHP-programmører. Oftest vil de fleste webhosts der tilbyder PHP-hosting, tilbyde det sammen med adgang til en MySQL database, så jeg mener dette er et godt valg til projektet.
Der er jo heller ingen grund til at gøre tingene sværere end højst nødvendigt, så MySQL findes selvfølgelig også i Ubuntus repositories. Databasen installeres altså vha.:

sudo aptitude install mysql-server php5-mysql

Under installationen vil du blive bedt om at udfylde kode til root-brugeren, dette kan klart anbefales da du ellers vil sidde med et gabende sikkerhedshul i din database.
Herefter kan det anbefales at tilknytte nogle brugere og give dem adgang til databaserne enkeltvis, i stedet for hele tiden at bruge root-brugeren, men dette vil jeg komme ind på i næste afsnit af artiklen.
Da PHP5 ikke er indstillet til nogen bestemt version af MySQL, på samme måde som PHP4 var, skal vi lige sørge for at PHP og MySQL kan arbejde sammen. Vi skal altså have PHP til rent faktisk at lede efter vores database. Dette gør vi ved at ændre i PHP.ini filen. Det er en almindelig tekstfil, så det kan klares med ethvert tekstediteringsprogram, jeg bruger nano:

sudo nano /etc/php5/apache2/php.ini

Find den del af filen der hedder “Dynamic Extension”, og tilføj linjen:

extension = mysql.so

Så skulle PHP5 og MySQL kunne arbejde sammen. Hvis det ikke virker allerede nu, vil det nok hjælpe at genstarte Apacheserveren.

Opsætning og sikkerhed

Efter vi har fået installeret vores LAMP-server er det på tide med noget grundlæggende opsætning, og nogle få kommandoer til at styre serveren.

Opsætning af Apache

Apache’s konfigurationsfil findes i /etc/apache2/apache2.conf
Vi kan f.eks. åbne denne med terminalens skriveprogram “nano”. Da det kun er root-brugeren der har skriveadgang til /etc skal vi huske sudo hvis vi skal ændre i filen.

sudo nano /etc/apache2/apache2.conf

I denne fil kan det meste af serverens opsætning ændres. Det skal man dog være lidt påpasselig med, da selv små fejl kan få hele serveren til at gå i gruset. Det kan derfor anbefales at man tager en back-up af filen inden man begynder at ændre i den. Det kan bl.a. gøres med

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.backup

Dette gemmer en backup i filen /etc/apache2/apache2.conf.backup . Hvis man så får lavet en fejl og ønsker at restore denne backup gøres det bare med:

sudo cp /etc/apache2/apache2.conf.backup /etc/apache2/apache2.conf

I denne fil kan man lave mange ændringer til serveren, man kan bl.a. sætte generiske fejlsider til 404-fejl (siden ikke fundet) osv.
Hver gang man har lavet ændringer i konfigurationen skal serveren genstartes, man behøver heldigvis ikke genstarte hele maskinen, men kan nøjes med at genstarte apache med kommandoen:

sudo /etc/init.d/apache2 restart

På samme måde kan apache startes og stoppes efter behov med hhv.

sudo /etc/init.d/apache2 start

og

sudo /etc/init.d/apache2 stop

Opsætning af MySQL

Det er også værd at kigge lidt på hvordan ens database er sat op, jeg tænker her især på hvilke brugere der har adgang, og hvad de har adgang til osv.
For at starte mysql programmet bruges bare

mysql

Fra starten af er der dog ikke mange muligheder, da det kun er root der har administratorrettigheder som standard. Flaget -u kan bruges til at starte mysql med en anden bruger end den man er logget på maskinen med, og hvis man satte et password under installationen (hvilket man forhåbentlig gjorde) bruges flaget -p til at vise at man ønsker at benytte password til logon. Så hvis du skal logge ind med root, og vha. et password skal du altså bruge

mysql -u root -p

Hvorefter du vil blive bedt om koden.
Bemærk at terminalens normale “user@host:~$” udskiftes med “mysql>” når mysql kører.
Her kan du så vha. normal SQL oprette databaser og tildele rettigheder osv. for god ordens skyld gennemgår jeg lige det vigtigste.
Da min plan er at lave en form for projekt management værktøj, laver jeg en database med et passende navn.

create database projectmanager;

Jeg vil så give brugeren “user” adgang. For god ordens skyld vælger jeg at der skal logges på med et kodeord, det sættes dog for eksemplets skyld til “password”. Det skrives i mysql som:

grant usage on *.* to user@localhost identified by ‘password’;

“user” har nu adgang til mysql med koden password. Nu skal han bare have adgang til projectmanager-databasen. Det gøres med:

grant all privileges on projectmanager.* to user@localhost;

Nu har “user” altså ALLE rettigheder til den ene database.
Hvis jeg så logger ud af mysql med:

quit

Kan jeg nu logge ind som user med kommandoen:

mysql -u user -p

og lege med databasen “projectmanager”.

Valgfri:Installation af PHPMyAdmin

Det er ikke alle der er lige glade for at håndkode deres SQL, og hvis man kun har MySQL-programmet som værktøj forstår jeg det udemærket godt. Der findes derfor et webbaseret userinterface til at administrere databaserne på databaseserveren, ved navn PHPMyAdmin. Jeg tror de fleste der har rodet med PHP og MySQL er bekendte med dette værktøj.
Vi er så heldige at dette værktøj, ligesom alt andet man nogensinde får brug for ;-), findes i Ubuntu’s repositories. Det installeres altså med:

sudo aptitude install phpmyadmin

Når det er installeret skal vi lige sørge for at apache kan finde det. Dette kræver at vi ændrer i apache’s konfiguration, så igen åbner vi konfigurationsfilen i vores yndligs teksteditor, i dette tilfælde er nano dejligt belejligt. Husk super-user adgang (sudo).

sudo nano /etc/apache2/apache2.conf

Nederst i filen findes nogle linjer med henvisninger til forskellige biblioteker på maskinen som apache skal benytte sig af, altså inkludere. Hertil tilføjer vi phpmyadmin ved at tilføje linjen:

Include /etc/phpmyadmin/apache.conf

Herefter gemmer vi konfigurationen og restarter apache, og så skulle alt gerne spille.

Jeg håber det har været en brugbar artikel, og jeg håber på tid og mulighed for at skrive mere af samme skuffe i fremtiden. Forhåbentlig bliver der ikke så lang tid imellem mine indlæg som der hidtil har været.

Og husk, hvis du er kommet til at lave en fejl i den sidste del så apache nu ikke længere har lyst til at restarte, er det jo godt at du har taget backup af konfigurationen ;-)

17 Comments

  1. Dennis says:

    Tak for guiden. Det er en noget nemmere måde end min gamle :D (btw, holder mig til gedit ;p)

    Jeg holder på at Linux, apache, mysql og php er meegeeet bedre og nemmere end iis, ms-sql og asp… sikkert bare en smagssag.

    1. Jarlen says:

      Ja, personligt kan jeg også meget bedre lide at arbejde med Apache på min linuxmaskine, end med IIS på en windowsmaskine. Jeg har godt nok aldrig arbejdet med ASP, men hvis det minder bare en smule om VB er jeg kun glad for det :-)

  2. Sune Vuorela says:

    NEJ! NEJ! NEJ!

    Man skal *IKKE* kopierer filer rundt som beskrevet. Det eneste man får ud af det er at mysql.so ikke bliver opdateret når pakkemanageren opdaterer den rigtige mysql.so.

    Med mindre Ubuntu har lavet ged i det, så skulle php kunne finde extensionen allerede.

    Og en mysql.ini fil i /etc/php5/conf.d er også en meget lettere tilgang til det end at rette direkte i php.ini.

  3. Jarlen says:

    Hej Sune.

    Du har en vigtig pointe, især i forbindelse med at mysql ikke bliver opdateret via pakkemanageren når man flytter filen. Jeg var ikke klar over at php selv var i stand til at finde filen fra standardplaceringen, men så giver det overhovedet ingen mening at flytte rundt på den, med mindre man vil være helt sikker på ikke at komme til at opdatere den ved en fejl. Dette mener jeg dog vil være et problem for de færreste, og da det besværliggører installationen.
    Jeg har derfor fjernet denne del fra guiden. Tak fordi du påpegede det :-)

    Jarlskov

  4. Mikael says:

    Hej og tak for en fantastisk gennemgang..

    Jeg har fuldt det hele igennem, men kan ikke se php visning på min localhost. Har bare lavet en echo, men den bliver ikke vist. Så der er sket en fejl mellem apache og php? Ved du hvad der kan være sket galt?

    Mvh. Mikael

  5. Jarlen says:

    Hej Mikael

    Er du sikker på at du har fået installeret begge PHP5-pakker?
    I eksemplet installeres både pakken “PHP5″, samt “libapache2-mod-php5″, herefter skal du sørge for at restarte apache med “sudo /etc/init.d/apache2 restart”.
    Det burde være rigeligt for at få det hele til at virke. Herefter skal du så selvfølgelig sørge for at din kode er korrekt, og at den ligger et sted hvor apache kan finde den (/var/www som standard).
    Jeg håber det kan hjælpe, ellers er jeg ikke helt sikker på at jeg har nok info :-)

    Jarlskov

  6. Thomas says:

    Hvilket program bruger du som html/php editor?
    Er selv Dreamweaver bruger og overvejer at skifte fuldt over til Ubuntu, men det eneste der holder mig tilbage er en god editor.

  7. Jarlen says:

    Når jeg laver den slags, bliver det normalt gjort i hånden. Det sidste stykke tid har jeg gphpedit der også kan bruges til php samtidig. WYSIWYG-programmer som DreamWeaver bryder jeg mig ikke så meget om, så jeg kender ikke rigtigt markedet, med Kompozer får pæne anbefalinger synes jeg, det findes i Ubuntu.

  8. Morten says:

    Rigtigt god tutorial artikel.

    Det eneste jeg sidder og savner nu er en kort introduktion til at komme i gang med phpadmin, men da da din artikel forklare hvorledes en LAMP installeres er det nok fornuftigt at undlade dette.

  9. Jarlen says:

    Jeg har kort gennemgået installation af PHPMyAdmin (jeg går ud fra det er det du mener), men brugen af PHPMyAdmin falder uden for artiklens emne.
    Når jeg installerer MySQL serveren på min Ubuntu får jeg automatisk et MySQL administration program (Applications -> Programming), det kan være det kan hjælpe dig i gang med at bruge dine databaser? :-)

  10. Frants Sørensen says:

    Hej! Tak for vejledningen, som jeg har fulgt. Jeg har bare det problem at jeg ikke kan sende en variabel mellem to sider så min hjemmeside fungere ikke som på remote server. eks. link. Jeg formoder det har noget at gøre med opsætningen af php.ini men jeg kan ikke regne ud hvor der skal ændres.
    Hilsen
    Frants

  11. Frants Sørensen says:

    Jeg ser nu at mit eks. ikke bliver vist i ovenstående forespørgsel, så her er det igen a hef=”test.php?var=5″. forventer jeg at variablen var er tilgængelig for siden test.php men den vises ikke ??

  12. Jarlen says:

    Hvis du sætter dine variabler i URL’en får du ikke en $var-variabel, det bliver en del af dit $_GET-array.
    test.php?var=5 svarer altså ikke til
    $var = 5
    Det svarer derimod til
    $_GET['var'] = 5
    og husk som altid inputvalidering, da det selvsagt er utroligt nemt at ændre værdien i URL’en.

  13. Nicholas says:

    Hej!

    Jeg har fulgt din vejledning og kan tilgå “It works!” siden fra serveren selv. Men andre maskiner får beskeden: “Du har valgt at åbne – som er en phtml fil. Hvad skal Firefox gøre med denne fil?…

    Hvad er der los? Hvorfor virker det ikke?

    VH
    Nicholas

    1. Jarlen says:

      Hej Nicholas

      Sandsynligvis fordi Apache&PHP kun er sat op til at tage .php-filer, som standard, og ikke .phtml. Prøv enten at ændre apacheopsætningen til også at tage .phtml, eller (måske lidt lettere), skift dine file extensions fra .phtml til .php

      Jesper Jarlskov

  14. Claus Bo says:

    Utroligt glad for dine guides – super simpelt og enkelt forklaret – gør at selv jeg kan være med.
    Keep it up!

    Hilsen Claus

Leave a Reply

Pingbacks & Trackbacks

  1. www.anyhed.dk - Trackback on 2009/01/12