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 implementarem un bloc LTS de Ghost v0.11.x segur en un VPS CentOS 7.3 mitjançant Let's Encrypt , Certbot , Node.js , NPM , NGINX i MySQL .
Requisits
- Registre (compra) un nom de domini.
- Instància del servidor CentOS 7.3 amb un mínim d' 1 GB de RAM .
- Usuari de Sudo.
Abans que comencis
Comproveu la versió de CentOS:
cat /etc/centos-release
# CentOS Linux release 7.3.1611 (Core)
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 yum check-update || sudo yum update -y
Configura la zona horària:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Instal·leu eines de desenvolupament:
sudo yum groupinstall -y 'Development Tools'
Instal·leu l'editor de text Vim:
sudo yum install -y vim
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.
Activeu el dipòsit de paquets addicionals per a Enterprise Linux (EPEL):
# Certbot is packaged in Extra Packages for Enterprise Linux (EPEL) repository. To use Certbot, you must first enable the EPEL repository.
sudo yum install -y epel-release
Instal·leu el programari de gestió de certificats Certbot (anteriorment client Let's Encrypt ) fet amb Python:
sudo yum 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:
sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum 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 Yum:
cd /tmp
# Adding the MySQL Yum Repository
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum localinstall -y mysql57-community-release-el7-11.noarch.rpm
# Installing MySQL
sudo yum 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 la darrera versió principal de NGINX des del dipòsit oficial de NGINX:
# Add the NGINX Yum Repository
sudo vim /etc/yum.repos.d/nginx_mainline.repo
# Copy/paste the following into /etc/yum.repos.d/nginx_mainline.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=1
wget https://nginx.org/keys/nginx_signing.key
sudo rpm --import nginx_signing.key
rm nginx_signing.key
sudo yum install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
Comproveu que estigui instal·lat comprovant la versió de NGINX:
sudo nginx -v
# nginx version: nginx/1.13.3
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 default_server;
listen 80 default_server;
listen [::]:443 ssl http2 default_server;
listen 443 ssl http2 default_server;
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 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 "";
}
}
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=/bin/npm start --production
ExecStop=/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.