Zahtjevi
Prije nego što počneš
Instalirajte Certbot
Instalirajte Node.js i NPM
Instalirajte MySQL
Instalirajte NGINX
Instalirajte Ghost
Pokretanje Ghost-a kao usluge sustava
Zaključak
Ghost je platforma za blogove otvorenog koda koja postaje sve popularnija među programerima i običnim korisnicima od svog izdanja 2013. godine. Usredotočuje se na sadržaj i bloganje. Najprivlačnija stvar kod Ghost-a je njegov jednostavan, čist i prilagodljiv dizajn. Svoje postove na blogu možete pisati s mobilnog telefona. Sadržaj za Ghost je napisan korištenjem Markdown jezika. Ghost je savršeno prikladan za pojedince ili male grupe pisaca.
U ovom vodiču ćemo postaviti i implementirati sigurni Ghost v0.11.x LTS blog na Debian 8 VPS koristeći Let's Encrypt , Certbot , Node.js , NPM , NGINX i MySQL .
Zahtjevi
- Registrirajte (kupite) naziv domene.
- Instanca poslužitelja Debian 8 s najmanje 1 GB RAM-a .
- Sudo korisnik.
Prije nego što počneš
Provjerite verziju Debiana:
lsb_release -ds
# Debian GNU/Linux 8.9 (jessie)
Napravite novi nekorijenski korisnički račun:
adduser johndoe --gecos "John Doe"
Učinite ga superkorisnikom dodavanjem u sudogrupu:
usermod -aG sudo johndoe
Prebacite se na novog korisnika:
su - johndoe
Ažurirajte softver svog operativnog sustava:
sudo apt-get update && sudo apt-get upgrade -y
Postavite vremensku zonu:
sudo dpkg-reconfigure tzdata
Instalirajte potrebne alate:
sudo apt-get install -y build-essential zip unzip git apt-transport-https
Ponovno pokrenite sustav ako je potrebno:
sudo shutdown -r now
Instalirajte Certbot
NOTE: Before starting this step, ensure that you have set DNS records for your domain.
Koristit ćemo Let's Encrypt CA i EFF- ov Certbot klijent za dobivanje SSL/TLS certifikata za naš blog Ghost. Ne zaboravite zamijeniti sve instance blog.domain.tlds imenom svoje domene.
Instalirajte Certbot (bivši Let's Encrypt client ) softver za upravljanje certifikatima napravljen s Pythonom:
sudo -s
printf "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list.d/jessie-backports.list
exit
sudo apt-get update
sudo apt-get install -y certbot -t jessie-backports
Provjerite verziju Certbota:
certbot --version
# certbot 0.10.2
Dobivanje RSA certifikata korištenjem samostalne metode provjere autentičnosti (dodatak):
sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email admin@domain.tld --agree-tos
# IMPORTANT NOTES:
# - Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/blog.domain.tld/fullchain.pem.
# Your cert will expire on YYYY-MM-DD. . . .
# . . .
Nakon prolaska kroz prethodne korake, vaš certifikat i privatni ključ bit će u /etc/letsencrypt/live/blog.domain.tldimeniku.
Instalirajte Node.js i NPM
NOTE: Ghost currently supports Node.js versions 4.5+ and 6.9+ only.
Ghost je izgrađen na Node.js. Instalirat ćemo preporučenu verziju za Ghost koja je v6 Boron LTSu trenutku pisanja ovog teksta.
Preuzmite i instalirajte Node.js v6 LTS:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
Provjerite verziju Node.js i NPM:
node -v && npm -v
# v6.11.2
# 3.10.10
Instalirajte MySQL
Prema zadanim postavkama, Ghost dolazi konfiguriran za korištenje SQLite baze podataka, koja ne zahtijeva nikakvu konfiguraciju.
Alternativno, Ghost se također može koristiti s MySQL bazom podataka promjenom konfiguracije baze podataka. Prvo morate stvoriti bazu podataka i korisnika, a zatim možete promijeniti postojeću sqlite3 konfiguraciju.
Preuzmite i instalirajte MySQL:
sudo apt-get install -y mysql-server
NOTE: During the installation, you will be prompted for MySQL "root" user password. You should set a secure password for the MySQL "root" user.
Provjerite verziju MySQL:
mysql --version
# mysql Ver 14.14 Distrib 5.5.57, for debian-linux-gnu (x86_64) using readline 6.3
Provjerite je li MySQL demon pokrenut i radi li:
sudo systemctl status mysql.service
sudo systemctl is-enabled mysql.service
Pokrenite mysql_secure_installationskriptu da malo zaštitite svoju bazu podataka:
sudo mysql_secure_installation
Prijavite se na MySQL kao root korisnik:
mysql -u root -p
# Enter password:
Napravite novu MySQL bazu podataka i korisnika:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
Izađi iz MySQL-a:
exit
Instalirajte NGINX
Preuzmite i instalirajte najnoviju glavnu verziju NGINX-a iz službenog NGINX spremišta:
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt-get update
sudo apt-get install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
Provjerite je li instaliran provjerom verzije NGINX-a:
sudo nginx -v
# nginx version: nginx/1.13.4
Provjerite status, omogućite i pokrenite NGINX uslugu (daemon):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Kreirajte /etc/nginx/ssldirektorij i generirajte novu Diffie-Hellman ( DH ) grupu:
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
Napravite direktorij dnevnika za blog.domain.tldvirtualni host:
sudo mkdir -p /var/log/nginx/blog.domain.tld
Konfigurirajte NGINX kao HTTP ( S ) obrnuti proxy poslužitelj:
sudo vim /etc/nginx/conf.d/ghost.conf
Zalijepite sljedeće u /etc/nginx/conf.d/ghost.conf:
# domain: blog.domain.tld
# public: /var/www/ghost
upstream ghost_app {
server 127.0.0.1:2368;
keepalive 32;
}
server {
listen [::]:80 default_server;
listen 80 default_server;
listen [::]:443 ssl http2 default_server;
listen 443 ssl http2 default_server;
server_name blog.domain.tld; # Change to your domain/hostname
root /var/www/ghost; # Change to the path where Ghost is
error_log /var/log/nginx/blog.domain.tld/error.log;
access_log /var/log/nginx/blog.domain.tld/access.log;
client_max_body_size 100M;
ssl_certificate /etc/letsencrypt/live/blog.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.domain.tld/privkey.pem;
ssl_dhparam ssl/dhparams-2048.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_buffer_size 4K;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50M;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/blog.domain.tld/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
location / {
proxy_pass http://ghost_app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header X-Powered-By;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Spremite i testirajte NGINX konfiguraciju za sintaktičke pogreške:
sudo nginx -t
Ponovno učitaj NGINX konfiguraciju:
sudo systemctl reload nginx.service
Instalirajte Ghost
NOTE: If you want to host multiple Ghost blogs on same VPS, each Ghost instance must be running on a separate port.
Napravite korijenski direktorij dokumenta:
sudo mkdir -p /var/www/
Napravite novog ghostkorisnika:
sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
Preuzmite Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
Raspakirajte Ghost u /var/www/ghostdirektorij (preporučeno mjesto za instalaciju):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
Idite na novi ghostdirektorij:
cd /var/www/ghost
Promjena vlasništva /var/www/ghostimenika:
sudo chown -R ghost:ghost .
Prijeđi na novog ghostkorisnika:
sudo su - ghost
Idite na korijen dokumenta /var/www/ghost:
cd /var/www/ghost
Instalirajte Ghost samo s proizvodnim ovisnostima. Kada se ovo završi, instalira se Ghost:
npm install --production
Konfigurirajte Ghost promjenom url, maili databasesvojstva proizvodnog objekta unutar config.jsdatoteke:
cp config.example.js config.js
vim /var/www/ghost/config.js
var path = require('path'),
config;
config = {
// ### Production
// When running Ghost in the wild, use the production environment.
// Configure your URL and mail settings here
production: {
url: 'https://blog.domain.tld',
mail: {
transport: 'SMTP',
options: {
service: 'Mailgun',
auth: {
user: '',
pass: ''
}
}
},
database: {
client: 'mysql',
connection: {
host: '127.0.0.1',
user: 'your_database_user',
password: 'your_database_password',
database: 'your_database_name',
charset: 'utf8'
},
debug: false
},
// . . .
// . . .
NOTE: You should configure mail settings also. Consult the official Ghost documentation on how to do that.
Pokrenite Ghost u proizvodnom okruženju:
npm start --production
Duh će sada trčati. I front-end bloga i admin sučelje su osigurani HTTPS-om, a HTTP/2 također radi. Možete otvoriti svoj preglednik i posjetiti stranicu na adresi https://blog.domain.tld. Ne zaboravite zamijeniti blog.domain.tldsvojim imenom domene.
Isključite Ghost proces pritiskom na CTRL+ Ci izađite iz ghostkorisnika natrag na root korisnika:
exit
Pokretanje Ghost-a kao usluge sustava
Ako zatvorite svoju terminalsku sesiju sa svojim VPS-om, vaš blog će se također pokvariti. To nije dobro. Kako bismo to izbjegli, koristit ćemo Systemd. Održat će naš blog aktivan 24 sata dnevno.
Napravite ghost.serviceSystemd jediničnu datoteku. Pokrenite sudo vim /etc/systemd/system/ghost.servicei kopirajte/zalijepite sljedeći sadržaj:
[Unit]
Description=Ghost - the professional publishing platform
Documentation=https://docs.ghost.org/v0.11.11/docs
After=network.target
[Service]
Type=simple
# Edit WorkingDirectory, User and Group as needed
WorkingDirectory=/var/www/ghost
User=ghost
Group=ghost
ExecStart=/usr/bin/npm start --production
ExecStop=/usr/bin/npm stop --production
Restart=always
SyslogIdentifier=Ghost
[Install]
WantedBy=multi-user.target
Omogućite i pokrenite ghost.service:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
Provjerite ghost.servicestatus:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
Idite do https://blog.domain.tld/ghost/i stvorite Ghost administratorskog korisnika. Učinite to što je prije moguće!
Zaključak
To je to. Sada imamo potpuno funkcionalan Ghost blog. Vaš poslužitelj isporučuje sadržaj putem HTTP/2 kada ga klijent podržava. Ako želite promijeniti zadanu Ghost temu pod nazivom Casper u prilagođenu, možete jednostavno preuzeti i raspakirati temu u /var/www/ghost/content/themesmapu i odabrati je putem Ghost administratorskog sučelja, koji se nalazi na https://blog.domain.tld/ghost.