Requisits
Abans que comencis
Instal·leu Certbot
Instal·leu Node.js i NPM
Instal·leu MySQL
Instal·leu NGINX
Instal·leu Ghost
Execució de Ghost com a servei del sistema
Conclusió
Ghost és una plataforma de blocs de codi obert que ha anat guanyant popularitat entre desenvolupadors i usuaris normals des del seu llançament el 2013. Es centra en el contingut i els blocs. El més atractiu de Ghost és el seu disseny senzill, net i sensible. Podeu escriure les publicacions del vostre bloc des d'un telèfon mòbil. El contingut de Ghost s'escriu amb el llenguatge Markdown. Ghost s'adapta perfectament a persones o grups reduïts d'escriptors.
En aquesta guia, configurarem i desplegarem un bloc segur de Ghost v0.11.x LTS en un Fedora 25 VPS mitjançant Let's Encrypt , Certbot , Node.js , NPM , NGINX i MySQL .
Requisits
- Registre (compra) un nom de domini.
- Instància del servidor Fedora 25 amb un mínim d' 1 GB de RAM .
- Usuari de Sudo.
- Probablement haureu d'obrir el port 2368 amb
semanage port -a -t http_port_t -p tcp 2368.
Abans que comencis
Comproveu la versió de Fedora:
cat /etc/fedora-release
# Fedora release 25 (Twenty Five)
Creeu un nou usuari no root :
useradd -c "John Doe" johndoe && passwd johndoe
Fes-lo superusuari afegint-lo al wheelgrup:
usermod -aG wheel johndoe
Canvia a un usuari nou:
su - johndoe
Actualitzeu el programari del vostre sistema operatiu:
sudo dnf check-update || sudo dnf upgrade -y
Configura la zona horària:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Instal·leu eines de desenvolupament:
sudo dnf install @development-tools -y
Instal·leu l'editor de text Vim i Wget:
sudo dnf install -y vim wget
Reinicieu el sistema si cal:
sudo shutdown -r now
Instal·leu Certbot
NOTE: Before starting this step, ensure that you have set DNS records for your domain.
Utilitzarem Xifra Anem CA i FEP 's client Certbot obtenir SSL / TLS certificat per al nostre bloc Sant. No oblideu substituir totes les instàncies de blog.domain.tldpel vostre nom de domini.
Instal·leu el programari de gestió de certificats Certbot (anteriorment client Let's Encrypt ) fet amb Python:
sudo dnf install -y certbot
Comproveu la versió de Certbot:
certbot --version
# certbot 0.14.1
Obteniu el certificat RSA mitjançant el mètode d'autenticació autònom (connector):
sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email admin@domain.tld --no-eff-email --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. . . .
# . . .
Després de seguir els passos anteriors, el vostre certificat i clau privada estaran al /etc/letsencrypt/live/blog.domain.tlddirectori.
Instal·leu Node.js i NPM
NOTE: Ghost currently supports Node.js versions 4.5+ and 6.9+ only.
Ghost està construït a Node.js. Instal·larem la versió recomanada de Ghost que es troba v6 Boron LTSen el moment d'escriure aquest article.
Baixeu i instal·leu Node.js v6 LTS:
curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo dnf install -y nodejs
Comproveu la versió de Node.js i NPM:
node -v && npm -v
# v6.11.2
# 3.10.10
Instal·leu MySQL
Per defecte, Ghost ve configurat per utilitzar una base de dades SQLite, que no requereix cap configuració.
Alternativament, Ghost també es pot utilitzar amb una base de dades MySQL canviant la configuració de la base de dades. Primer heu de crear una base de dades i un usuari, després podeu canviar la configuració de sqlite3 existent.
Baixeu i instal·leu la darrera versió de MySQL (actualment 5.7 ) des del dipòsit oficial de MySQL Dnf:
cd /tmp
# Adding the MySQL dnf Repository
wget https://dev.mysql.com/get/mysql57-community-release-fc25-10.noarch.rpm
sudo dnf install -y mysql57-community-release-fc25-10.noarch.rpm
# Installing MySQL
sudo dnf install -y mysql-community-server
Comproveu la versió de MySQL:
mysql --version
# mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
Inicieu MySQL Server i comproveu el seu estat:
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
MySQL versió 5.7 o superior genera una contrasenya aleatòria temporal per a l' rootusuari de MySQL després de la instal·lació i la contrasenya s'emmagatzema al fitxer de registre d'errors de MySQL, situat a /var/log/mysqld.log. Per revelar-lo, utilitzeu l'ordre següent:
sudo grep 'temporary password' /var/log/mysqld.log
Executeu l' mysql_secure_installationscript per protegir una mica la vostra base de dades:
NOTE: Password Validation Plugin is installed and enabled, so your new password for root user needs to be strong (one upper case letter, one lower case letter, one digit, and one special character, and that the total password length is at least 8 characters). If you want to relax that or disable plugin completely (not recommended) consult the official MySQL documentation for how to do that.
sudo mysql_secure_installation
Inicieu sessió a MySQL com a usuari root:
mysql -u root -p
# Enter password:
Creeu una nova base de dades MySQL i un usuari:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
Sortir de MySQL:
exit
Instal·leu NGINX
Baixeu i instal·leu NGINX:
sudo dnf install -y nginx
Comproveu que estigui instal·lat comprovant la versió de NGINX:
sudo nginx -v
# nginx version: nginx/1.10.2
Comproveu l'estat, activeu i inicieu el servei NGINX (dimoni):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Creeu un /etc/nginx/ssldirectori i genereu un nou paràmetre Diffie-Hellman ( DH ):
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
Creeu un directori de registre per a blog.domain.tldl'amfitrió virtual:
sudo mkdir -p /var/log/nginx/blog.domain.tld
Configureu NGINX com a servidor intermediari invers HTTP ( S ):
sudo vim /etc/nginx/conf.d/ghost.conf
Enganxeu el següent a /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;
listen 80;
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name blog.domain.tld;
root /var/www/ghost;
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;
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 "";
}
}
Deseu i proveu la configuració de NGINX per detectar errors de sintaxi:
sudo nginx -t
Torneu a carregar la configuració de NGINX:
sudo systemctl reload nginx.service
Instal·leu Ghost
NOTE: If you want to host multiple Ghost blogs on same VPS, each Ghost instance must be running on a separate port.
Crea el directori arrel del document:
sudo mkdir -p /var/www/
Crea un nou usuari fantasma:
sudo useradd -c 'Ghost application' ghost
Descarrega Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
Descomprimiu Ghost al /var/www/ghostdirectori (ubicació d'instal·lació recomanada):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
Mou al nou directori fantasma:
cd /var/www/ghost
Canvia la propietat del /var/www/ghostdirectori:
sudo chown -R ghost:ghost .
Canvia a un ghostusuari nou :
sudo su - ghost
Navegueu a l'arrel del document /var/www/ghost:
cd /var/www/ghost
Instal·leu Ghost només amb dependències de producció. Quan això s'ha completat, s'instal·la Ghost:
npm install --production
Sant Configura canviant url, maili databasela propietat de la producció d'objectes a l'interior de l' config.jsarxiu:
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.
Inicieu Ghost a l'entorn de producció:
npm start --production
Ghost ara s'executarà. Tant el front-end del bloc com la interfície d'administració estan protegits amb HTTPS i HTTP/2 també funciona. Podeu obrir el vostre navegador i visitar el lloc a https://blog.domain.tld. No oblidis substituir-lo blog.domain.tldpel teu nom de domini.
Tanqueu el procés Ghost prement CTRL+ Ci sortiu de l'usuari fantasma de nou a l'usuari no root que heu creat al principi:
exit
Execució de Ghost com a servei del sistema
Si tanqueu la sessió del terminal amb el vostre VPS, el vostre bloc també baixarà. Això no és bo. Per evitar-ho, farem servir systemd. Mantindrà el nostre bloc obert les 24 hores del dia.
Creeu un ghost.servicefitxer d'unitat systemd. Executeu sudo sudo vim /etc/systemd/system/ghost.servicei copieu/enganxeu el contingut següent:
[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
Activa i comença ghost.service:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
Comprova l' ghost.serviceestat:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
Navegueu https://blog.domain.tld/ghost/i creeu un usuari administrador de Ghost. Fes-ho el més aviat possible!
Conclusió
Això és. Ara tenim un bloc Ghost totalment funcional. El vostre servidor està lliurant contingut mitjançant HTTP/2 quan el client és compatible. Si voleu canviar el tema de Ghost predeterminat anomenat Casper per un de personalitzat, només podeu descarregar i descomprimir el tema a la /var/www/ghost/content/themescarpeta i seleccionar-lo mitjançant la interfície d'administració de Ghost, ubicada a https://blog.domain.tld/ghost.