Ghost è una piattaforma di blog open source che sta guadagnando popolarità tra gli sviluppatori e gli utenti ordinari dalla sua versione del 2013. Si concentra su contenuti e blog. La cosa più interessante di Ghost è il suo design semplice, pulito e reattivo. Puoi scrivere i post del tuo blog da un telefono cellulare. Il contenuto per Ghost è scritto usando il linguaggio Markdown. Ghost è perfetto per singoli o piccoli gruppi di scrittori.
In questa guida, configureremo e distribuiremo un blog LTS Ghost v0.11.x sicuro su un VPS Debian 8 usando Let's Encrypt , Certbot , Node.js , NPM , NGINX e MySQL .
Requisiti
- Registrare (acquistare) un nome di dominio.
- Istanza del server Debian 8 con almeno 1 GB di RAM .
- Utente Sudo.
Prima di iniziare
-
Controlla la versione di Debian:
lsb_release -ds
# Debian GNU/Linux 8.9 (jessie)
-
Crea un nuovo account utente non root :
adduser johndoe --gecos "John Doe"
-
Rendilo superutente aggiungendolo al sudo
gruppo:
usermod -aG sudo johndoe
-
Passa al nuovo utente:
su - johndoe
-
Aggiorna il software del tuo sistema operativo:
sudo apt-get update && sudo apt-get upgrade -y
-
Imposta il fuso orario:
sudo dpkg-reconfigure tzdata
-
Installa gli strumenti richiesti:
sudo apt-get install -y build-essential zip unzip git apt-transport-https
-
Riavviare il sistema se necessario:
sudo shutdown -r now
Installa Certbot
NOTA : prima di iniziare questo passaggio, assicurarsi di aver impostato i record DNS per il proprio dominio.
Utilizzeremo Let's Encrypt CA e il client Certbot di EFF per ottenere il certificato SSL / TLS per il nostro blog Ghost. Non dimenticare di sostituire tutte le istanze di blog.domain.tld
con il tuo nome di dominio.
-
Installa il software di gestione certificati Certbot (precedentemente Let's Encrypt client ) realizzato con Python:
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
-
Controlla la versione di Certbot:
certbot --version
# certbot 0.10.2
-
Ottieni il certificato RSA usando il metodo di autenticazione autonomo (plugin):
sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email [email protected] --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. . . .
# . . .
Dopo aver eseguito i passaggi precedenti, il certificato e la chiave privata saranno nella /etc/letsencrypt/live/blog.domain.tld
directory.
Installa Node.js e NPM
NOTA : Ghost supporta attualmente solo le versioni 4.5+ e 6.9+ di Node.js.
Ghost è basato su Node.js. Installeremo la versione consigliata per Ghost che è v6 Boron LTS
al momento in cui scrivo.
-
Scarica e installa Node.js v6 LTS:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
-
Controlla la versione di Node.js e NPM:
node -v && npm -v
# v6.11.2
# 3.10.10
Installa MySQL
Per impostazione predefinita, Ghost viene configurato per utilizzare un database SQLite, che non richiede alcuna configurazione.
In alternativa, Ghost può essere utilizzato anche con un database MySQL modificando la configurazione del database. È necessario creare prima un database e un utente, quindi è possibile modificare la configurazione sqlite3 esistente.
-
Scarica e installa MySQL:
sudo apt-get install -y mysql-server
NOTA : Durante l'installazione, verrà richiesta la password utente "root" di MySQL. È necessario impostare una password sicura per l'utente "root" di MySQL.
-
Controlla la versione di MySQL:
mysql --version
# mysql Ver 14.14 Distrib 5.5.57, for debian-linux-gnu (x86_64) using readline 6.3
-
Controlla se il demone MySQL è stato avviato ed è in esecuzione:
sudo systemctl status mysql.service
sudo systemctl is-enabled mysql.service
-
Esegui lo mysql_secure_installation
script per proteggere un po 'il tuo database:
sudo mysql_secure_installation
-
Accedi a MySQL come utente root:
mysql -u root -p
# Enter password:
-
Crea un nuovo database e utente MySQL:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
-
Esci da MySQL:
exit
Installa NGINX
-
Scarica e installa l'ultima versione mainline di NGINX dal repository ufficiale NGINX:
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
-
Verifica che sia installato controllando la versione NGINX:
sudo nginx -v
# nginx version: nginx/1.13.4
-
Controlla lo stato, abilita e avvia il servizio NGINX (demone):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
-
Crea /etc/nginx/ssl
directory e genera un nuovo gruppo Diffie-Hellman ( DH ):
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
-
Creare una directory di registro per blog.domain.tld
l'host virtuale:
sudo mkdir -p /var/log/nginx/blog.domain.tld
-
Configurare NGINX come server proxy inverso HTTP ( S ):
sudo vim /etc/nginx/conf.d/ghost.conf
-
Incolla quanto segue in /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 "";
}
}
-
Salvare e testare la configurazione NGINX per errori di sintassi:
sudo nginx -t
-
Ricarica la configurazione NGINX:
sudo systemctl reload nginx.service
Installa Ghost
NOTA : se si desidera ospitare più blog Ghost sullo stesso VPS, ciascuna istanza Ghost deve essere in esecuzione su una porta separata.
-
Creare la directory principale del documento:
sudo mkdir -p /var/www/
-
Crea un nuovo ghost
utente:
sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
-
Scarica Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
-
Decomprimi Ghost nella /var/www/ghost
directory (posizione di installazione consigliata):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
-
Passa alla nuova ghost
directory:
cd /var/www/ghost
-
Modifica la proprietà della /var/www/ghost
directory:
sudo chown -R ghost:ghost .
-
Passa al nuovo ghost
utente:
sudo su - ghost
-
Passa alla radice del documento /var/www/ghost
:
cd /var/www/ghost
-
Installa Ghost con dipendenze di produzione. Al termine, Ghost è installato:
npm install --production
-
Configurare fantasma cambiando url
, mail
e database
di proprietà della produzione oggetto all'interno di config.js
file di:
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
},
// . . .
// . . .
NOTA : è necessario configurare anche le impostazioni di posta. Consulta la documentazione ufficiale di Ghost su come farlo.
-
Avvia Ghost nell'ambiente di produzione:
npm start --production
Ghost ora funzionerà. Sia il front-end del blog che l'interfaccia di amministrazione sono protetti con HTTPS e anche HTTP / 2 funziona. È possibile aprire il browser e visitare il sito all'indirizzo https://blog.domain.tld
. Non dimenticare di sostituire blog.domain.tld
con il tuo nome di dominio.
-
Chiudi il processo Ghost premendo CTRL
+ C
ed esci di ghost
nuovo dall'utente root:
exit
Esecuzione di Ghost come servizio di sistema
Se chiudi la sessione terminale con il tuo VPS, anche il tuo blog diminuirà. Questo non è buono. Per evitare ciò, useremo Systemd. Manterrà il nostro blog attivo 24/7.
-
Crea ghost.service
file unità Systemd. Esegui sudo vim /etc/systemd/system/ghost.service
e copia / incolla il seguente contenuto:
[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
-
Abilita e avvia ghost.service
:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
-
Verifica lo ghost.service
stato:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
-
Passare a https://blog.domain.tld/ghost/
e creare un utente amministratore Ghost. Fallo il prima possibile!
Conclusione
Questo è tutto. Ora abbiamo un blog Ghost completamente funzionale. Il tuo server fornisce contenuti tramite HTTP / 2 quando supportato dal client. Se vuoi cambiare il tema Ghost predefinito chiamato Casper in uno personalizzato, puoi semplicemente scaricare e decomprimere il tema nella /var/www/ghost/content/themes
cartella e selezionarlo tramite l'interfaccia di amministrazione Ghost, situata in https://blog.domain.tld/ghost
.