Ghost blogi ja Node.js Zone virtuaalserveris

Hiljuti lisandus Zone virtuaalserveri pakettides võimalus kasutada lisaks PHP-veebirakendustele ka Node.js-rakendusi

Käesolevas näites paigaldame Zone virtuaalserverisse populaarse Ghost blogimootori, mis on eelkõige tuntud oma lihtsuse ja viisaka välimuse poolest. Kui niiöelda suured blogimootorid, näiteks WordPress, võimaldavad teha kõikvõimalikke veebilehti visiitkaartidest kuni suurte e-poodideni, siis Ghost võimaldab teha vaid üht ehk siis kõige tavalisemat blogi.

Vaikimisi kasutab Ghost andmebaasina SQLite manus-andmebaasi, kuid toetatud on ka MySQL, mida proovimegi kasutada SQLite asemel. SQLite on väga mugav katsetusteks, selle tarbeks ei ole vaja paigaldada väliseid teenuseid, kuid tunduvalt ebamugavam on see haldamise mõttes, kuna sellele ei pääse “väljastpoolt” kuidagi ligi. Samuti võib tekkida probleeme Node.js versiooni uuendamisel, kuna SQLite draiver tuleb iga Node.js versiooni jaoks eraldi kompileerida. Zone virtuaalserveri pakketides on mugav MySQL tugi samas juba olemas ja seega on seda isegi lihtsam kasutusele võtta.

Alamdomeeni loomine

Esimese sammuna loome Zone haldusliideses uue alamdomeeni, millel hakkab meie Ghost blogi tööle.

ghost02

Alamdomeeni jaoks valime kõigepealt sobiva domeeninime, siin näites on selleks ghost.tahvel.info, ja seejärel määrame mod_proxy sihtpordi. Vajalik on sihtpordi määramine seetõttu, et Node.js rakendusi ei käivitata erinevalt PHP rakendustest läbi Apache, vaid siinkohal töötab Apache veebiserver hoopis veebiproksina – päringud tulevad sisse ja kui need on suunatud kindlale alamdomeenile, siis Apache suunab need lihtsalt edasi järgmisele serverile, mis juhtub kuulama mod_proxy seadetes määratud pordil. Ghost kasutab vaikimisi pordina 2368 ja selle numbri valimegi.

ghos03

Kausta väärtus ei ole siinkohal üldse oluline, kuna Apache nende failide poole ei pöördu. Seame selleks siin näites ghost, kuid reaalselt pole sellel väärtusel erilist vahet.

Koodifailide laadimine

Kui alamdomeen on olemas, tuleks saada Ghost koodifailid kuidagi meie virtuaalserverisse. Üheks võimaluseks on külastada Ghost allalaadimiste lehte ja vajalikud failid sealt zip-failina alla laadida. Seejärel tuleks need failid kas FTP või SSH abil virtuaalserverisse toimetada.

ghost01

Teine võimalus on laadida koodifailid wget käsu abil otse serverist. Seega tuleks meil logida SSH abil serverisse. Kuidas seda täpselt teha, saab lugeda siit.

Kui ühel hetkel juba serveris sees oleme, saab vajalikud failid alla laetud ja paigaldatud järgmiste käskude abil:

$ cd ~
$ wget https://ghost.org/zip/ghost-0.11.0.zip
$ unzip ghost-0.11.0.zip -d ghost
$ cd ghost

Sellega tekitasime oma kodukataloogi uue kausta ./ghost, milles asuvadki kõik Ghost koodifailid.

Paigaldame kohe ka kõik vajalikud alammoodulid, mida Ghost oma töö jaoks vajab. Vaikimisi ei taha Ghost Node.js versiooniga 6 ja uuemad töötada, eelkõige probleemide tõttu SQLite andmebaasiga, aga kuna meie seda ei kasuta, siis ei pea me ka muretsema. Ütleme lisaparameetriga, et Ghost ei kontrolliks Node.js versiooni.

$ GHOST_NODE_VERSION_CHECK=false npm install --production
Andmebaasi loomine

Edasi tuleks meil hakata rakenduse konfiguratsioonifaili looma, kuid see eeldab MySQL andmebaasi ja -kasutaja olemasolu. Pöördumegi selle jaoks tagasi Zone haldusliidesesse ja avame sektsiooni Andmebaasid ja sealt MySQL.

ghost04

Esiteks tuleks meil luua uus andmebaas. Valime baasile sobiva nime ja lisame selle.

ghost05

Kui baas on loodud, saame lisada ka andmebaasi kasutaja.

ghost06

Ja kui ka kasutaja on loodud, saame samal lehel määrata uuele kasutajale vajalikud õigused Ghost andmebaasiga toimetamiseks. Kõige lihtsam on lihtsalt klikata nupul “vali kõik,” kuid reaalselt ei lähe nimekirja lõpus olevad linnukesi siiski vaja.

ghost07

Ghost blogi seadistamine

Nüüd saame jälle minna SSH juurde tagasi ja lisame ./ghost kausta uue konfiguratsioonifaili. Üks võimalus on nimetada fail config.example.js ümber failiks config.js ja muuta selle sisu. Kuid võib selle faili ka täiesti ise teha. Konfiguratsioonifaili sisu peaks välja nägema järgmine (asenda url ning MySQL seadistuse väärtused).

var path = require('path'), config;
config = {
  production: {
    url: 'http://ghost.tahvel.info',
    mail: {
      transport: 'SMTP'
    },
    database: {
      client: 'mysql',
      connection: {
        host : 'd12345.mysql.zone.ee',
        user : 'd12345_ghost',
        password : 'Ghostpass123',
        database : 'd12345_ghost',
        charset : 'utf8'
      }
    },
    server: {
      host: '127.0.0.1',
      port: '2368'
    }
  }
};
module.exports = config;

Väärtus config.production.url hakkab olema meie blogi veebiaadress, mida kasutatakse linkide juures.

Meiliseadistuseks config.production.mail piisab vaid vajaliku transpordimehhanismi valikust, kuna Zone virtuaalserveritest saab kirju saata standardpordi kaudu ilma autentimata.

Serveri seadistus config.production.server ütleb, et meie rakendus hakkab kuulama pordil 2368 ehk sellelsamal, kuhu hakkab edaspidi Apache päringuid suunama.

Rakenduse töö seadistamine

Nüüdseks peaks meil olemas olema nii rakenduse failid, toimiv andmebaas ja rakendus olema ka korrektselt seadistatud, kuid erinevalt PHP rakendustest tuleb Node.js rakendused eraldi käima tõmmata, kuna tegu on nn. deemon tüüpi rakendustega. Zone virtuaalserverites saab selleks kasutada PM2 nimelist haldustööriista ja tekitamegi selle jaoks vastava konfiguratsioonifaili.

Konfiguratsioonifail ghost.json, mis ütleb PM2 rakenduste haldurile kuidas meie Ghost blogi jooksutada, võiks asuda meie kodukataloogis ehk seal kuhu satume, kui ssh’ga sisse logime. Faili sisu peaks välja nägema järgmine:

{
  "apps": [{
    "name": "ghost",
    "script": "./ghost/index.js",
    "cwd": "./ghost",
    "watch": true,
    "env": {
      "NODE_ENV": "production",
      "GHOST_NODE_VERSION_CHECK": "false"
    }
  }]
}
Rakenduse paigaldamine Zone haldusliideses

Nüüd peaks meil olema kõik eeldused olemas, et rakendus lõpuks ometi käivitada. Selle tarbeks avame Zone haldusliideses sektsiooni Veebiserver ja sealt alt Node.js ja PM2. Avanenud leheküljel saame lisada uue Node.js rakenduse ja rakenduse aknas tuleks meil esiteks määrata rakenduse nimi, milleks võib olla suvaline endale sobiv nimi. Seejärel tuleks öelda, et kust leiab PM2 rakenduse tööks vajaliku konfiguratsioonifaili ghost.json, mille tekitasime eelmises punktis oma kodukataloogi ja viimasena valida, et kui palju mälu me rakendusele eraldame.

ghost08

Peale lisa nupul klikkimist tuleb veidi oodata, lehekülge värskendades peaksime nägema, et teade “käivitamisel” muutub ühel hetkel “käivitatud”. Nüüd polegi enam muud, kui avada Ghost blogi aadress.

Blogi seadistamine

Kui näed blogi aadressil järgmist pilti, siis oled kõik õigesti teinud. Blogi töötab ja on kasutusvalmis.

ghost09

Muidugi on meil vaja ka kasutajakontot ja esimese, niiöelda admin konto saab luua, kui minna aadressile domeeninimi/ghost.

ghost10

ghost11

Ja kui konto juba loodud, siis polegi muud, kui postitusi kirjutama!

ghost12

Autor: Andris Reinman

Andris on üks Zone.ee infosüsteemi arhitekte. Lisaks arendab ta Zone MTA nimelist SMTP serverit (https://github.com/zone-eu/zone-mta), Node.js e-posti moodulit Nodemailer (https://nodemailer.com) ja postiloendite haldamise tarkvara Mailtrain (http://mailtrain.org/)