Så sätter du upp en blixtsnabb WordPress-server

Uppdaterat 2013: OBS, denna guide är inte längre aktuell. Jag har skrivit en ny guide här:

FS Datas blogg, Guide till en blixtsnabb WordPress-server

Som du kanske vet så körde jag tidigare en stäng beta med världens bästa och snabbaste WordPress-hantering i molnet, under namnet Kaizr. Nu är denna tjänst lagd på is, men jag tycker det vore synd om min erfarenhet från denna tid gick helt förlorad.

Nu var Kaizr en, tekniskt sett, rätt så avancerad lösning, som bäst kommer till nytta i ett riktigt moln (dvs hos Amazon, Rackspace osv, inte i något svenskt låtsasmoln). Men det går att använda delar av Kaizr, t ex för att sätta upp en blixtsnabb WordPress-server.

Vilken bra idé! Det är dags för Sveriges första crowdsourcade serverinstallation.

Det här är en installation med fokus på en så snabb WordPress-server som möjligt, som alla får använda och bidra till. Jag är givetvis inte felfri, om jag får in förslag till förändringar/förbättringar så kommer det en uppdaterad version här framöver.

OBS: Notera att fokus för denna installation är snabbhet. Du bör själv vidta åtgärder för att säkra upp din server. Jag tar inget ansvar för eventuella fel eller problem som kan uppstå om du följer dessa instruktioner (även om jag svarar på era kommentarer så gott jag kan).

Serverinstallationen gäller för Ubuntu 10.10. Det går säkert att köra Debian eller motsvarande Linux-dist, utan större förändringar.

Världens snabbaste WordPress-server: Ubuntu, Nginx, PHP-FPM & MySQL

Alla kommandon och filer är markerade med en code-tagg här nedan. Jag förutsätter att du har grundläggande administrationskunskaper, så du kan navigera runt och hantera textfiler. Alla kommandon körs även med root-privilegier på servern. För enkelhetens skull utelämnar jag alla sudo-kommandon.

1. Börja med att uppdatera och uppgradera din server. Om du får frågor här så är det bara att välja standardalternativet.

# apt-get update && apt-get -y upgrade

2. Sen installerar vi lite saker som våra programvaror (främst PHP) är beroende utav. Denna lista går säkert att korta ner.

# apt-get -y install make bison flex gcc patch autoconf subversion locate unzip
# apt-get -y install build-essential libtool libpcrecpp0 libpcre3-dev libxml2-dev libmysqlclient16-dev libcurl4-openssl-dev libfreetype6-dev libgd2-xpm-dev libjpeg62-dev libpng12-dev libmcrypt-dev libmhash-dev libpspell-dev libming-dev libmm-dev libtidy-dev libxslt1-dev libevent-dev libc-client-dev autoconf2.13

3. Därefter installerar vi PHP med ett gäng olika tillägg. De viktigaste i sammanhanget är tilläggen för PHP-FPM och Xcache

# apt-get -y install php5 php5-cgi php5-cli php5-common php5-curl php5-fpm php5-gd php5-imap php5-mcrypt php5-mhash php5-mysql php5-pspell php5-remctl php5-sqlite php5-suhosin php5-svn php5-tidy php5-xcache php5-xmlrpc php5-xsl php-pear
# /etc/init.d/php5-fpm stop

4. Sedan installerar vi den ryska webbservern Nginx.

# echo "deb http://ppa.launchpad.net/nginx/development/ubuntu maverick main" >> /etc/apt/sources.list
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
# apt-get update
# apt-get install nginx
# /etc/init.d/nginx stop

På vissa VPS:er/servrar är Apache installerat som standard. För att undvika konflikter med Nginx, avinstallera samtliga Apache-relaterade program. Exakt kommando kan variera, beroende på vad som är installerat på din server, här är ett exempel:

# apt-get remove apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common

5. Och så installerar vi MySQL. Glöm inte bort lösenordet som du anger under installationen.

# apt-get install -y mysql-server

6. Till slut så konfigurerar vi lite småsaker på servern, främst relaterade till Nginx/PHP.

# cd /etc/nginx
# mv fastcgi_params fastcgi_params.old
# nano fastcgi_params

Lägg in följande innehåll:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $http_x_forwarded_for;
fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REDIRECT_STATUS 200;

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 32k;
fastcgi_buffers 32 32k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

I samma mapp skapar vi även en fil som hanterar omskrivningar för WordPress, både med och utan WP Super Cache.

# nano wordpress_params.supercache

Lägg in följande innehåll:

if (-f $request_filename) {
break;
}
set $supercache_file '';
set $supercache_uri $request_uri;

if ($request_method = POST) {
set $supercache_uri '';
}
if ($query_string) {
set $supercache_uri '';
}
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
set $supercache_uri '';
}
if ($supercache_uri ~ ^(.+)$) {
set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
}
if (-f $document_root$supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*.php)$ $1 last;
rewrite ^ /index.php last;
}
error_page 404 = //index.php?q=$uri;

Till sist så startar vi även tjänsterna för Nginx och PHP-FPM.

# /etc/init.d/nginx start
# /etc/init.d/php5-fpm start

Nu är serverinstallationen klar (men som sagt, glöm inte att säkra upp allt ordentligt).

Här är alla kommandon för att stoppa, starta och starta om tjänsterna på servern:

# /etc/init.d/nginx stop
# /etc/init.d/nginx start
# /etc/init.d/nginx restart
# /etc/init.d/php5-fpm stop
# /etc/init.d/php5-fpm start
# /etc/init.d/php5-fpm restart
# /etc/init.d/mysql stop
# /etc/init.d/mysql start
# /etc/init.d/mysql restart

Lägg upp en sajt på din blixtsnabba WordPress-server

Nu ska vi sätta upp en sajt på servern. Det är blir en egen ”virtual host”, som kör med en egen användare (till skillnad från t ex WordPress Multi-Site, där vi har en gemensam användare/virtual host för alla sajter). Detta underlättar vid felsökning, kvotahantering och bidrar även till ökad säkerhet.

1. Börja med att skapa en användare och en databas. Jag använder sulo_se som namn på användaren och sulo.se som domän på sajten.

# adduser sulo_se

Notera understrecket i användarnamnet. Inga punkter här inte.

mysql -u root -p
CREATE DATABASE sulo_se;
GRANT ALL PRIVILEGES ON sulo_se.* TO "sulo_se"@"%" IDENTIFIED BY "lösenord";
FLUSH PRIVILEGES;
EXIT;

2. Nu sätter vi upp en PHP-konfiguration för sajten.

# cd /etc/php5/fpm/pool.d/
# mv www.conf ../
# nano sulo.se.conf

Lägg in följande innehåll:

[sulo.se]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.owner = sulo_se
listen.group = sulo_se
listen.mode = 0666
user = sulo_se
group = sulo_se
pm = dynamic
pm.max_children = 10
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 50
request_slowlog_timeout = 60s
slowlog = /var/log/php-fpm.log.slow

Det här är en rätt så sparsmakad och resurssnål konfiguration. Du bör verkligen läsa kommentarerna i www.conf för mer info.

Om du t ex vill lägga till ytterligare sajter, efter denna, så måste du välja en annan port för listen, t ex från 9000 till 9001. Detta måste även synkas med konfigurationen av Nginx (här nedan). Om du vill öka kapaciteten på sajten (ta emot fler samtidiga besökare) så kan du skruva upp antalet servrar.

3. Konfigurera Nginx för din sajt

# cd /etc/nginx/sites-enabled
# nano sulo.se

Lägg in följande innehåll:

server {
listen 80;
server_name sulo.se *.sulo.se;
server_name_in_redirect off;
client_max_body_size 64M;
access_log /home/sulo_se/sulo.se/logs/access.log;
error_log /home/sulo_se/sulo.se/logs/error.log;

location / {
root /home/sulo_se/sulo.se;
index index.php;
rewrite ^.*/files/(.*) /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
}

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/sulo_se/sulo.se/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

Här kan du t ex se listen-direktivet från konfigurationen av PHP-FPM (som ska öka om du lägger till ytterligare sajter). Det är värt att notera att vi lägger lite loggar, för enkel åtkomst, under /logs på din domän (t ex www.sulo.se/logs/). Du kan givetvis flytta eller lösenordsskydda dem om du vill.

4. Allra sist hämtar vi ner och installerar WordPress.

Du kan givetvis välja en nyare version av WordPress om en sådan finns. Vi passar likaså på att installera det svenska språkstödet.

# mkdir /home/sulo_se/sulo.se && cd /home/sulo_se/sulo.se
# svn co http://core.svn.wordpress.org/tags/3.0.4/ .
# mkdir wp-content/languages && cd wp-content/languages/
# wget http://svn.automattic.com/wordpress-i18n/sv_SE/tags/3.0.4/messages/sv_SE.mo
# cd -
# mkdir logs
# mv wp-config-sample.php wp-config.php
# nano wp-config.php

Ange dina databasuppgifter och spara filen. För att aktivera det svenska språkstödet, uppdatera följande variabel:

define ('WPLANG', 'sv_SE');

Till sist sätter vi rätt ägare på WordPress-installationen.

# cd /home/sulo_se
# chown -Rf sulo_se:sulo_se *

Därefter är det bara att starta om Nginx och PHP-FPM (se kommandon ovan). Sen kan du surfa in på sidan (förutsatt att domänen pekar till din server) och köra igång med din blixtsnabba WordPress-server.

Övrigt/tips på länkar & leverantörer

Förutom Google så finns det bra dokumentation här: Nginx, PHP-FPM och MySQL

När det gäller kapaciteten till din server så bör du åtminstone ha 1 GB RAM-minne. Även om t ex Nginx kräver mindre resurser än Apache så älskar WordPress (och PHP) RAM-minne. Glöm inte bort att vi även kör en databasserver här.

Jag har själv testat serverinstallationen med samtliga VPS:er hos FS Data och de funkar till 100 %. Det fungerar säkert även med VPS:er/servrar hos andra leverantörer, om än att det ger bonuspoäng i min bok om du väljer FS Data. 😉

Har du några frågor eller är något galet i serverinstallationen? Lämna en kommentar! Får du ihop allt och är skitnöjd med din nya WordPress-server? Bjud mig på en öl nästa gång vi ses!

Upprop för WordCamp i Sverige

WordCamp i SverigeNu ska WordCamp arrangeras för första gången här i Sverige. Det som från början var lösa samtal några entusiaster emellan har nu övergått till en seriös plan. Målet är ett WordCamp i Stockholm under september 2009.

Vi ska arrangera en heldag med fokus på WordPress inom områden som utveckling, utbildning, marknadsföring, mobilitet och förlagsverksamhet. Ett 20-tal personer med stora kunskaper av WordPress, i kombination med ett eller flera av dessa områden, har redan anmält intresse för att vara med som talare.

Programmet ska vara en blandning som tilltalar både nybörjare och experter.

WordCamp kommer hållas i Stockholm en lördag, för att så många som möjligt från hela Sverige ska kunna vara med. Av samma anledning ska det även vara gratis att delta på WordCamp. Under förutsättning att det finns tillräckligt många och vänliga sponsorer så hoppas vi kunna ta emot 300-400 deltagare i lämpliga lokaler.

För att WordCamp i Sverige ska förverkligas så behöver ordet spridas vidare.

Använder du WordPress, tycker du det här låter intressant eller vill du vara med som besökare, talare eller sponsor? Berätta då om det här för dina vänner, kollegor och fler därtill.

Vi är ett antal personer som arbetar med WordCamp i Sverige, men vi behöver bli fler. Kontakta gärna Andreas Karman ([email protected], 070-255 75 88) eller Jonathan Sulo ([email protected], 070-564 30 40) om du vill hjälpa till och förverkliga det här.

Länkförkortare är skit (här är ett bättre alternativ)

I takt med att Twitter och andra microbloggar (som min favorit Bloggy) har blivit allt mer populära så har även länkförkortarna (URL-förkortare, URL shortener, shurls osv), fått en pånyttfödelse.

Det som för 10 år sedan användes som substitut för domännamn (då med namn som come.to/, surf.to/ osv) har idag blivit ett sätt att skicka länkar inom tjänster med teckenbegränsningar. Och det är lika dåligt nu som då.

Det största problemet med länkförkortare är det faktum att man inte kan se var en länk pekar. Om man har tur så länkas allt rätt, men det är inte omöjligt att en sådan länk 1) inte längre fungerar, 2) inte går till avsedd sida eller i värsta fall 3) används för spam, nätfiske (phishing) eller skadlig kod.

Genom att använda sig av länkförkortare så sänker man även värdet av sin egen domän. Visst, de flesta länkförkortare använder sig av metoder som innebär att länkarna bidrar till domänens värde i Google (301-redirects), men den mänskliga faktorn (hur mottagaren uppfattar länken) får man aldrig glömma bort.

Utöver detta tillkommer faktorer såsom att en tredjepart (den som tillhandahåller länkförkortaren) får kontroll över dina länkar (och kan radera/styra om dem, både medvetet och omedvetet) samt olika frågor kring sekretess och juridik (vem äger t ex rätten till länken och användarna av länken?).

Att länkförkortare har blivit populära igen har givetvis en orsak. Syftet med dem är bra, men genomförandet är dåligt. Som tur är finns det bättre alternativ.

RevCanonical (rev=canonical) är ett rätt så nytt koncept/idé. I praktiken innebär det att man skapar alternativa (och kortare) länkar (eller sidor) under sin egen domän, som länkar vidare till den ”riktiga länken” (med 301-redirect).

Så här fungerar det:

När man skapar en sida så skapas det även en länk. Länken kan utformas på olika sätt, antingen manuellt eller automagiskt. Länken till just denna sida (detta blogginlägg) har skapats av WordPress och ser ut så här:

https://sulo.se/2009/04/16/lankforkortare-ar-skit-har-ar-ett-battre-alternativ/

Denna länk är 78 tecken lång. Det innebär att jag har kan använda ytterligare 62 tecken om jag vill skicka länken på t ex Bloggy. Med dessa tecken ska jag kort förklara vad länken handlar om, vilket är långt från enkelt. Enbart detta stycke innehåller t ex 268 tecken.

Nu kan jag istället använda mig av ett RevCanonical-tillägg till WordPress, för att på så sätt skapa en länk som ser ut så här:

https://sulo.se/p873/

Och hux-flux så kan jag använda nästan dubbelt så många tecken för att beskriva vad min länk handlar om. Detta samtidigt som jag själv har full kontroll och de som ser länken även förstår vilken domän den går till. Smart va?

Eftersom jag använder WordPress.com så fungerar rev=canonical inte med sulo.se (än så länge), men för andra WordPress-sidor som jag jobbar med så är RevCanonical-tillägget obligatoriskt här framöver.

Jag hoppas att du gör detsamma och sprider ordet om rev=canonical, så att vi slipper det länkhelvete som länkförkortarna leder till.

På jobbfronten mycket nytt

Jag har inte hunnit blogga eftersom jag haft så mycket annat (viktigare) att göra.

Det är den sämsta ursäkt som finns till en dåligt uppdaterad blogg och något som jag aldrig någonsin kommer påstå. Jag har helt enkelt inte haft lust att blogga på ett tag. Därav tystnaden här.

Att lusten har saknats beror till stor del på att jag jobbat med en annan blogg, eller hemsida, till mitt nya jobb. Det är en riktig WordPress-installation, med alla de underbara möjligheter och funktioner som det erbjuder. Räkna med att min hemsida kommer flyttas från WordPress.com väldigt snart.

Det har tagit fart ordentligt med mitt nya jobb. Vi har inte bara tillräckligt med underlag för en hemsida, vi har bestämt oss för att använda två hemsidor och varumärken (riktade mot olika målgrupper, som ska dra nytta av varandra).

Den fysiska distributionen är nästan klar. Svarstiderna från dessa leverantörer skiljer sig markant från de svarstider jag är van vid. Det, i kombination med viss okunskap från min sida, är den främsta orsaken till att detta inte är helt klart.

Något som däremot är färdigt är vår logotyp. Vi har likaså spikat innehållet i den första (publika) betan och fastställt ett datum för lanseringen. Måndagen den 13:e april (uppskjutet i väntan på svar från externa leverantörer) bär det av, så håll ögonen öppna här framöver. 😉

Till sist så har jag även tagit tag i min egen affärsidé.

Den tidigare utlovade betan har inte dragit igång än, mycket tack vare avsaknaden av en teknisk plattform. Efter mycket om och men och förseningar och brutna löften så har jag kavlat upp ärmarna och börjat rodda i tekniken själv.

Trots att jag inte har sysslat så mycket med tekniken på många års tid så går det förvånansvärt bra. Om jag bara lyckas spendera tillräckligt många kvällar, fredagar och helger med detta så kommer vi dra igång till början av nästa månad. Tidigare anmälda betatestare kommer uppdateras snart också.

Äntligen måndag

Dags för den andra veckan med mitt nya arbete och projekt. Den första veckan passerade snabbt, med goda resultat. Det här är vad som hände förra veckan:

  • Projektets olika delar definierades och planerades
  • Projektets namn (domännamn) spikades (och reggades)
  • Kontaktade ett stort antal presumtiva samarbetspartners
  • Kartlade och granskade övriga aktörer på marknaden
  • Sammanställde ett stort antal intressanta bloggare/publicister
  • Hittade leverantör + prisuppskattning för fysiska produkter
  • Undersökte + tog fram leverantörer för mobila tjänster
  • Började undersöka automatisering av fysisk distribution
  • Kollade upp lagar + nuvarande rutiner som berör tjänsten
  • Installerade + började konfigurera hemsidan (med WordPress)
  • Inledde det första betatestet (som än så länge är positivt)

Denna vecka kommer fokus att ligga på följande saker:

  • Inhämta + sammanställa svar från samarbetspartners
  • Ordna lämplig (initial) lösning för samarbetspartners
  • Planering av system (design, funktionalitet, etc)
  • Färdigställa hemsidan
  • Spika den automatiserade fysiska distributionen
  • Påbörja en marknadsplan

Det är med andra ord full fart framåt som gäller. Och ju snarare vi blir klara, desto snarare får ni veta vad jag arbetar med. 😉