Kërkesat
Perpara se te fillosh
Instaloni Certbot
Instaloni Node.js dhe NPM
Instaloni MySQL
Instaloni NGINX
Instaloni Ghost
Running Ghost si një shërbim sistemi
konkluzioni
Ghost është një platformë blogimi me burim të hapur që ka fituar popullaritet midis zhvilluesve dhe përdoruesve të zakonshëm që nga publikimi i saj në 2013. Ai e vë fokusin në përmbajtje dhe në blog. Gjëja më tërheqëse për Ghost është dizajni i tij i thjeshtë, i pastër dhe i përgjegjshëm. Ju mund të shkruani postimet tuaja në blog nga një telefon celular. Përmbajtja për Ghost është shkruar duke përdorur gjuhën Markdown. Ghost është i përshtatshëm për individë ose grupe të vogla shkrimtarësh.
Në këtë udhëzues ne do të konfigurojmë dhe vendosim një blog të sigurt Ghost v0.11.x LTS në një CentOS 7.3 VPS duke përdorur Let's Encrypt , Certbot , Node.js , NPM , NGINX dhe MySQL .
Kërkesat
- Regjistroni (bleni) një emër domaini.
- Shembull i serverit CentOS 7.3 me minimum 1 GB RAM .
- Përdorues Sudo.
Perpara se te fillosh
Kontrolloni versionin CentOS:
cat /etc/centos-release
# CentOS Linux release 7.3.1611 (Core)
Krijo një përdorues të ri jo-root :
useradd -c "John Doe" johndoe && passwd johndoe
Bëjeni atë superpërdorues duke e shtuar në wheelgrup:
usermod -aG wheel johndoe
Kalo te përdoruesi i ri:
su - johndoe
Përditësoni softuerin e sistemit tuaj operativ:
sudo yum check-update || sudo yum update -y
Vendosni zonën kohore:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Instaloni mjetet e zhvillimit:
sudo yum groupinstall -y 'Development Tools'
Instaloni redaktuesin e tekstit Vim:
sudo yum install -y vim
Rinisni sistemin nëse kërkohet:
sudo shutdown -r now
Instaloni Certbot
NOTE: Before starting this step, ensure that you have set DNS records for your domain.
Ne do të përdorim Let's Encrypt CA dhe klientin Certbot të EFF për të marrë certifikatën SSL/TLS për blogun tonë Ghost. Mos harroni të zëvendësoni të gjitha rastet e blog.domain.tldme emrin e domenit tuaj.
Aktivizo depon e Paketave Shtesë për 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
Instaloni softuerin e menaxhimit të certifikatave Certbot (më parë Let's Encrypt Client ) të krijuar me Python:
sudo yum install -y certbot
Kontrolloni versionin Certbot:
certbot --version
# certbot 0.14.1
Merrni certifikatën RSA duke përdorur metodën e pavarur të vërtetimit (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. . . .
# . . .
Pasi të keni kaluar hapat e mëparshëm, certifikata juaj dhe çelësi privat do të jenë në /etc/letsencrypt/live/blog.domain.tlddrejtori.
Instaloni Node.js dhe NPM
NOTE: Ghost currently supports Node.js versions 4.5+ and 6.9+ only.
Ghost është ndërtuar në Node.js. Ne do të instalojmë versionin e rekomanduar për Ghost i cili është v6 Boron LTSnë kohën e këtij shkrimi.
Shkarkoni dhe instaloni Node.js v6 LTS:
sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum install -y nodejs
Kontrolloni versionin Node.js dhe NPM:
node -v && npm -v
# v6.11.2
# 3.10.10
Instaloni MySQL
Si parazgjedhje, Ghost vjen i konfiguruar për të përdorur një bazë të dhënash SQLite, e cila nuk kërkon konfigurim.
Përndryshe, Ghost mund të përdoret gjithashtu me një bazë të dhënash MySQL duke ndryshuar konfigurimin e bazës së të dhënave. Së pari duhet të krijoni një bazë të dhënash dhe përdorues, pastaj mund të ndryshoni konfigurimin ekzistues sqlite3.
Shkarkoni dhe instaloni versionin më të fundit të MySQL (aktualisht 5.7 ) nga depoja zyrtare e 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
Kontrolloni versionin e MySQL:
mysql --version
# mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
Nisni MySQL Server dhe kontrolloni statusin e tij:
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
Versioni 5.7 i MySQL ose më i lartë gjeneron një fjalëkalim të përkohshëm të rastësishëm për rootpërdoruesin e MySQL pas instalimit dhe fjalëkalimi ruhet në skedarin e regjistrit të gabimeve MySQL, i vendosur në /var/log/mysqld.log. Për ta zbuluar atë, përdorni komandën e mëposhtme:
sudo grep 'temporary password' /var/log/mysqld.log
Drejtoni mysql_secure_installationskriptin për të siguruar pak bazën e të dhënave tuaja:
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
Hyni në MySQL si përdoruesi kryesor:
mysql -u root -p
# Enter password:
Krijoni një bazë të dhënash dhe përdorues të ri MySQL:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
Dilni nga MySQL:
exit
Instaloni NGINX
Download and install the latest mainline version of NGINX from the official NGINX repository:
# 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
Verify that it is installed by checking the NGINX version:
sudo nginx -v
# nginx version: nginx/1.13.3
Check status, enable and start NGINX service (daemon):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Create /etc/nginx/ssl directory and generate a new Diffie-Hellman (DH) parameters:
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
Create log directory for blog.domain.tld virtual host:
sudo mkdir -p /var/log/nginx/blog.domain.tld
Configure NGINX as a HTTP(S) reverse proxy server:
sudo vim /etc/nginx/conf.d/ghost.conf
Paste the following 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;
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 "";
}
}
Save and test NGINX configuration for syntax errors:
sudo nginx -t
Reload NGINX configuration:
sudo systemctl reload nginx.service
Install Ghost
NOTE: If you want to host multiple Ghost blogs on same VPS, each Ghost instance must be running on a separate port.
Create document root directory:
sudo mkdir -p /var/www/
Create a new ghost user:
sudo useradd -c 'Ghost application' ghost
Download Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
Unzip Ghost into the /var/www/ghost directory (recommended install location):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
Move to the new ghost directory:
cd /var/www/ghost
Ndryshoni pronësinë e /var/www/ghostdrejtorisë:
sudo chown -R ghost:ghost .
Kalo te ghostpërdoruesi i ri :
sudo su - ghost
Navigoni në rrënjë të dokumentit /var/www/ghost:
cd /var/www/ghost
Instaloni Ghost vetëm me varësitë e prodhimit. Kur kjo të përfundojë, Ghost është instaluar:
npm install --production
Konfiguro Ghost duke ndryshuar url, maildhe databasevetinë e objektit të prodhimit brenda config.jsskedarit:
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 në mjedisin e prodhimit:
npm start --production
Ghost tani do të funksionojë. Si ndërfaqja e përparme e blogut ashtu edhe ndërfaqja e administratorit janë të siguruara me HTTPS dhe HTTP/2 po funksionon gjithashtu. Mund të hapni shfletuesin tuaj dhe të vizitoni sajtin në https://blog.domain.tld. Mos harroni të zëvendësoni blog.domain.tldme emrin e domain.
Mbyllni procesin Ghost duke shtypur CTRL+ Cdhe dilni nga përdoruesi fantazmë përsëri te përdoruesi jo-root që keni krijuar në fillim:
exit
Running Ghost si një shërbim sistemi
Nëse mbyllni seancën tuaj të terminalit me VPS-në tuaj, blogu juaj gjithashtu do të shkojë poshtë. Kjo nuk është mirë. Për të shmangur këtë, ne do të përdorim systemd. Ai do ta mbajë blogun tonë aktiv 24/7.
Krijoni ghost.serviceskedarin e njësisë së sistemit. Ekzekutoni sudo sudo vim /etc/systemd/system/ghost.servicedhe kopjoni/ngjitni përmbajtjen e mëposhtme:
[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
Aktivizo dhe fillo ghost.service:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
Kontrolloni ghost.servicestatusin:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
Navigoni https://blog.domain.tld/ghost/dhe krijoni një përdorues administratori Ghost. Bëjeni këtë sa më shpejt të jetë e mundur!
konkluzioni
Kjo eshte. Tani kemi një blog Ghost plotësisht funksional. Serveri juaj po shpërndan përmbajtje nëpërmjet HTTP/2 kur mbështetet nga klienti. Nëse dëshironi të ndryshoni temën e paracaktuar të Ghost të quajtur Casper në një të personalizuar, thjesht mund ta shkarkoni dhe ta çzipni temën në /var/www/ghost/content/themesdosje dhe ta zgjidhni atë nëpërmjet ndërfaqes së administratorit Ghost, që ndodhet në https://blog.domain.tld/ghost.