Krav
Før du begynner
Installer Certbot
Installer Node.js og NPM
Installer MySQL
Installer NGINX
Installer Ghost
Kjører Ghost som en systemtjeneste
Konklusjon
Ghost er en bloggplattform med åpen kildekode som har blitt populær blant utviklere og vanlige brukere siden utgivelsen i 2013. Det setter fokus på innhold og blogging. Det mest attraktive med Ghost er dens enkle, rene og responsive design. Du kan skrive blogginnleggene dine fra en mobiltelefon. Innhold for Ghost er skrevet med Markdown-språket. Ghost passer perfekt for enkeltpersoner eller små grupper av forfattere.
I denne guiden skal vi sette opp og distribuere en sikker Ghost v0.11.x LTS- blogg på en CentOS 7.3 VPS ved å bruke Let's Encrypt , Certbot , Node.js , NPM , NGINX og MySQL .
Krav
- Registrer (kjøp) et domenenavn.
- CentOS 7.3 serverforekomst med minimum 1 GB RAM .
- Sudo bruker.
Før du begynner
Sjekk CentOS-versjonen:
cat /etc/centos-release
# CentOS Linux release 7.3.1611 (Core)
Opprett en ny ikke-rootbruker :
useradd -c "John Doe" johndoe && passwd johndoe
Gjør den til superbruker ved å legge den til i wheelgruppen:
usermod -aG wheel johndoe
Bytt til ny bruker:
su - johndoe
Oppdater operativsystemets programvare:
sudo yum check-update || sudo yum update -y
Sett opp tidssonen:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Installer utviklingsverktøy:
sudo yum groupinstall -y 'Development Tools'
Installer Vim-tekstredigerer:
sudo yum install -y vim
Start systemet på nytt om nødvendig:
sudo shutdown -r now
Installer Certbot
NOTE: Before starting this step, ensure that you have set DNS records for your domain.
Vi skal bruke Let's Encrypt CA og EFF sin Certbot-klient for å få SSL/TLS- sertifikat for Ghost-bloggen vår. Ikke glem å erstatte alle forekomster av blog.domain.tldmed ditt domenenavn.
Aktiver depotet for ekstrapakker for 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
Installer Certbot (tidligere Let's Encrypt Client ) programvare for sertifikatbehandling laget med Python:
sudo yum install -y certbot
Sjekk Certbot-versjonen:
certbot --version
# certbot 0.14.1
Skaff RSA- sertifikat ved å bruke frittstående autentiseringsmetode (plugin):
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. . . .
# . . .
Etter å ha gått gjennom tidligere trinn, vil sertifikatet og den private nøkkelen din være i /etc/letsencrypt/live/blog.domain.tldkatalogen.
Installer Node.js og NPM
NOTE: Ghost currently supports Node.js versions 4.5+ and 6.9+ only.
Ghost er bygget på Node.js. Vi skal installere den anbefalte versjonen for Ghost som er v6 Boron LTSi skrivende stund.
Last ned og installer Node.js v6 LTS:
sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum install -y nodejs
Sjekk Node.js og NPM-versjonen:
node -v && npm -v
# v6.11.2
# 3.10.10
Installer MySQL
Som standard kommer Ghost konfigurert til å bruke en SQLite-database, som ikke krever noen konfigurasjon.
Alternativt kan Ghost også brukes med en MySQL-database ved å endre databasekonfigurasjonen. Du må opprette en database og bruker først, du kan deretter endre den eksisterende sqlite3-konfigurasjonen.
Last ned og installer den nyeste versjonen av MySQL (for øyeblikket 5.7 ) fra det offisielle MySQL Yum-depotet:
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
Sjekk MySQL-versjonen:
mysql --version
# mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
Start MySQL Server og sjekk statusen:
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
MySQL versjon 5.7 eller høyere genererer et midlertidig tilfeldig passord for MySQL- rootbruker etter installasjon og passord er lagret i MySQL-feilloggfilen, som ligger på /var/log/mysqld.log. For å avsløre det, bruk følgende kommando:
sudo grep 'temporary password' /var/log/mysqld.log
Kjør mysql_secure_installationskriptet for å sikre databasen din litt:
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
Logg på MySQL som root-bruker:
mysql -u root -p
# Enter password:
Opprett en ny MySQL-database og bruker:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
Avslutt MySQL:
exit
Installer NGINX
Last ned og installer den nyeste hovedlinjeversjonen av NGINX fra det offisielle NGINX-depotet:
# 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
Bekreft at den er installert ved å sjekke NGINX-versjonen:
sudo nginx -v
# nginx version: nginx/1.13.3
Sjekk status, aktiver og start NGINX-tjenesten (demon):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Opprett /etc/nginx/sslkatalog og generer nye Diffie-Hellman ( DH ) parametere:
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
Opprett loggkatalog for blog.domain.tldvirtuell vert:
sudo mkdir -p /var/log/nginx/blog.domain.tld
Konfigurer NGINX som en HTTP ( S ) omvendt proxy-server:
sudo vim /etc/nginx/conf.d/ghost.conf
Lim inn følgende i /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 "";
}
}
Lagre og test NGINX-konfigurasjonen for syntaksfeil:
sudo nginx -t
Last inn NGINX-konfigurasjonen på nytt:
sudo systemctl reload nginx.service
Installer Ghost
NOTE: If you want to host multiple Ghost blogs on same VPS, each Ghost instance must be running on a separate port.
Opprett dokumentrotkatalog:
sudo mkdir -p /var/www/
Opprett en ny spøkelsesbruker:
sudo useradd -c 'Ghost application' ghost
Last ned Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
Pakk ut Ghost i /var/www/ghostkatalogen (anbefalt installasjonssted):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
Flytt til den nye spøkelseskatalogen:
cd /var/www/ghost
Endre eierskapet til /var/www/ghostkatalogen:
sudo chown -R ghost:ghost .
Bytt til ny ghostbruker:
sudo su - ghost
Naviger til dokumentroten /var/www/ghost:
cd /var/www/ghost
Installer Ghost kun med produksjonsavhengigheter. Når dette er fullført, er Ghost installert:
npm install --production
Konfigurer Ghost ved å endre url, mailog databaseegenskapen til produksjonsobjektet inne i config.jsfilen:
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.
Start Ghost i produksjonsmiljø:
npm start --production
Ghost vil nå kjøre. Både blogggrensesnitt og administrasjonsgrensesnitt er sikret med HTTPS og HTTP/2 fungerer også. Du kan åpne nettleseren og besøke nettstedet på https://blog.domain.tld. Ikke glem å erstatte blog.domain.tldmed ditt domenenavn.
Slå av Ghost-prosessen ved å trykke CTRL+ Cog gå ut fra Ghost-bruker tilbake til ikke-rootbruker som du har opprettet i begynnelsen:
exit
Kjører Ghost som en systemtjeneste
Hvis du lukker terminaløkten med VPS-en din, vil også bloggen din gå ned. Det er ikke bra. For å unngå dette skal vi bruke systemd. Det vil holde bloggen vår oppe 24/7.
Opprett ghost.servicesystemd enhetsfil. Kjør sudo sudo vim /etc/systemd/system/ghost.serviceog kopier/lim inn innholdet nedenfor:
[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
Aktiver og start ghost.service:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
Sjekk ghost.servicestatus:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
Naviger til https://blog.domain.tld/ghost/og opprett en Ghost-administratorbruker. Gjør dette så snart som mulig!
Konklusjon
Det er det. Vi har nå en fullt funksjonell Ghost-blogg. Serveren din leverer innhold via HTTP/2 når den støttes av klienten. Hvis du vil endre standard Ghost-tema kalt Casper til et tilpasset, kan du bare laste ned og pakke ut temaet i /var/www/ghost/content/themesmappen og velge det via Ghost-administrasjonsgrensesnittet, som ligger på https://blog.domain.tld/ghost.