Απαιτήσεις
Πριν ξεκινήσεις
Εγκαταστήστε το Certbot
Εγκαταστήστε το Node.js και το NPM
Εγκαταστήστε MySQL
Εγκαταστήστε το NGINX
Εγκαταστήστε το Ghost
Το Running Ghost ως υπηρεσία συστήματος
συμπέρασμα
Το Ghost είναι μια πλατφόρμα blogging ανοιχτού κώδικα που κερδίζει δημοτικότητα μεταξύ των προγραμματιστών και των απλών χρηστών από την κυκλοφορία της το 2013. Δίνει έμφαση στο περιεχόμενο και το blogging. Το πιο ελκυστικό πράγμα για το Ghost είναι ο απλός, καθαρός και ανταποκρινόμενος σχεδιασμός του. Μπορείτε να γράψετε τις αναρτήσεις του ιστολογίου σας από ένα κινητό τηλέφωνο. Το περιεχόμενο για το Ghost γράφεται χρησιμοποιώντας τη γλώσσα Markdown. Το Ghost είναι ιδανικό για άτομα ή μικρές ομάδες συγγραφέων.
Σε αυτόν τον οδηγό πρόκειται να ρυθμίσουμε και να αναπτύξουμε ένα ασφαλές ιστολόγιο Ghost v0.11.x LTS σε ένα CentOS 7.3 VPS χρησιμοποιώντας Let's Encrypt , Certbot , Node.js , NPM , NGINX και MySQL .
Απαιτήσεις
- Καταχώρηση (αγορά) ονόματος τομέα.
- Περίπτωση διακομιστή CentOS 7.3 με ελάχιστο 1 GB RAM .
- χρήστης Sudo.
Πριν ξεκινήσεις
Ελέγξτε την έκδοση CentOS:
cat /etc/centos-release
# CentOS Linux release 7.3.1611 (Core)
Δημιουργήστε έναν νέο χρήστη χωρίς root :
useradd -c "John Doe" johndoe && passwd johndoe
Κάντε το υπερχρήστη προσθέτοντάς το στην wheelομάδα:
usermod -aG wheel johndoe
Εναλλαγή σε νέο χρήστη:
su - johndoe
Ενημερώστε το λογισμικό του λειτουργικού σας συστήματος:
sudo yum check-update || sudo yum update -y
Ρυθμίστε τη ζώνη ώρας:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Εγκαταστήστε εργαλεία ανάπτυξης:
sudo yum groupinstall -y 'Development Tools'
Εγκαταστήστε το πρόγραμμα επεξεργασίας κειμένου Vim:
sudo yum install -y vim
Επανεκκινήστε το σύστημα εάν απαιτείται:
sudo shutdown -r now
Εγκαταστήστε το Certbot
NOTE: Before starting this step, ensure that you have set DNS records for your domain.
Θα χρησιμοποιήσετε Κρυπτογράφηση Ας CA και ΕΤΑ «s πελάτη Certbot για την απόκτηση SSL / TLS πιστοποιητικό για Ghost blog μας. Μην ξεχάσετε να αντικαταστήσετε όλες τις εμφανίσεις του blog.domain.tldμε το όνομα τομέα σας.
Ενεργοποιήστε το χώρο αποθήκευσης Extra Packages 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
Εγκαταστήστε το λογισμικό διαχείρισης πιστοποιητικών Certbot (πρώην Let's Encrypt client ) κατασκευασμένο με Python:
sudo yum install -y certbot
Ελέγξτε την έκδοση Certbot:
certbot --version
# certbot 0.14.1
Λάβετε πιστοποιητικό RSA χρησιμοποιώντας αυτόνομη μέθοδο ελέγχου ταυτότητας (πρόσθετο):
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. . . .
# . . .
Αφού ολοκληρώσετε τα προηγούμενα βήματα, το πιστοποιητικό και το ιδιωτικό κλειδί σας θα βρίσκονται στον /etc/letsencrypt/live/blog.domain.tldκατάλογο.
Εγκαταστήστε το Node.js και το NPM
NOTE: Ghost currently supports Node.js versions 4.5+ and 6.9+ only.
Το Ghost είναι χτισμένο στο Node.js. Θα εγκαταστήσουμε τη συνιστώμενη έκδοση για το Ghost που βρίσκεται v6 Boron LTSτη στιγμή που γράφεται αυτό το άρθρο.
Λήψη και εγκατάσταση του Node.js v6 LTS:
sudo curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
sudo yum install -y nodejs
Ελέγξτε την έκδοση Node.js και NPM:
node -v && npm -v
# v6.11.2
# 3.10.10
Εγκαταστήστε MySQL
Από προεπιλογή, το Ghost έχει ρυθμιστεί ώστε να χρησιμοποιεί μια βάση δεδομένων SQLite, η οποία δεν απαιτεί διαμόρφωση.
Εναλλακτικά, το Ghost μπορεί επίσης να χρησιμοποιηθεί με μια βάση δεδομένων MySQL αλλάζοντας τη διαμόρφωση της βάσης δεδομένων. Πρέπει πρώτα να δημιουργήσετε μια βάση δεδομένων και έναν χρήστη και στη συνέχεια μπορείτε να αλλάξετε την υπάρχουσα διαμόρφωση sqlite3.
Κατεβάστε και εγκαταστήστε την πιο πρόσφατη έκδοση της MySQL (επί του παρόντος 5.7 ) από το επίσημο αποθετήριο 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
Ελέγξτε την έκδοση MySQL:
mysql --version
# mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
Εκκινήστε τον MySQL Server και ελέγξτε την κατάστασή του:
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
Η MySQL έκδοση 5.7 ή νεότερη δημιουργεί έναν προσωρινό τυχαίο κωδικό πρόσβασης για τον rootχρήστη MySQL μετά την εγκατάσταση και ο κωδικός πρόσβασης αποθηκεύεται στο αρχείο καταγραφής σφαλμάτων MySQL, που βρίσκεται στη διεύθυνση /var/log/mysqld.log. Για να το αποκαλύψετε, χρησιμοποιήστε την ακόλουθη εντολή:
sudo grep 'temporary password' /var/log/mysqld.log
Εκτελέστε το mysql_secure_installationσενάριο για να ασφαλίσετε λίγο τη βάση δεδομένων σας:
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
Συνδεθείτε στη MySQL ως χρήστης root:
mysql -u root -p
# Enter password:
Δημιουργήστε μια νέα βάση δεδομένων MySQL και χρήστη:
create database dbname;
grant all on dbname.* to 'user' identified by 'password';
Έξοδος από τη MySQL:
exit
Εγκαταστήστε το NGINX
Κατεβάστε και εγκαταστήστε την πιο πρόσφατη κύρια έκδοση του NGINX από το επίσημο αποθετήριο 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
Επαληθεύστε ότι έχει εγκατασταθεί ελέγχοντας την έκδοση NGINX:
sudo nginx -v
# nginx version: nginx/1.13.3
Ελέγξτε την κατάσταση, ενεργοποιήστε και ξεκινήστε την υπηρεσία NGINX (daemon):
sudo systemctl status nginx.service # inactive (dead)
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Δημιουργήστε /etc/nginx/sslκατάλογο και δημιουργήστε νέες παραμέτρους Diffie-Hellman ( DH ):
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
Δημιουργία καταλόγου καταγραφής για blog.domain.tldεικονικό κεντρικό υπολογιστή:
sudo mkdir -p /var/log/nginx/blog.domain.tld
Διαμόρφωση του NGINX ως διακομιστή μεσολάβησης ανάστροφου HTTP ( S ):
sudo vim /etc/nginx/conf.d/ghost.conf
Επικολλήστε τα ακόλουθα στο /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 "";
}
}
Αποθηκεύστε και δοκιμάστε τη διαμόρφωση NGINX για συντακτικά σφάλματα:
sudo nginx -t
Επαναφόρτωση διαμόρφωσης NGINX:
sudo systemctl reload nginx.service
Εγκαταστήστε το Ghost
NOTE: If you want to host multiple Ghost blogs on same VPS, each Ghost instance must be running on a separate port.
Δημιουργία ριζικού καταλόγου εγγράφου:
sudo mkdir -p /var/www/
Δημιουργήστε έναν νέο χρήστη φάντασμα:
sudo useradd -c 'Ghost application' ghost
Λήψη Ghost:
curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.11/Ghost-0.11.11.zip -o ghost.zip
Αποσυμπιέστε το Ghost στον /var/www/ghostκατάλογο (συνιστώμενη τοποθεσία εγκατάστασης):
sudo unzip -uo ghost.zip -d /var/www/ghost
rm ghost.zip
Μετακίνηση στον νέο κατάλογο φαντασμάτων:
cd /var/www/ghost
Αλλάξτε την ιδιοκτησία του /var/www/ghostκαταλόγου:
sudo chown -R ghost:ghost .
Εναλλαγή σε νέο ghostχρήστη:
sudo su - ghost
Πλοηγηθείτε στο αρχείο root /var/www/ghost:
cd /var/www/ghost
Εγκαταστήστε το Ghost μόνο με εξαρτήσεις παραγωγής. Όταν ολοκληρωθεί αυτό, εγκαθίσταται το Ghost:
npm install --production
Διαμόρφωση Ghost με την αλλαγή url, mailκαι η databaseιδιοκτησία της παραγωγής αντικειμένων στο εσωτερικό του config.jsφακέλου:
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 στο περιβάλλον παραγωγής:
npm start --production
Το Ghost θα τρέχει τώρα. Τόσο το front-end ιστολογίου όσο και η διεπαφή διαχειριστή είναι ασφαλισμένα με HTTPS και το HTTP/2 λειτουργεί επίσης. Μπορείτε να ανοίξετε το πρόγραμμα περιήγησής σας και να επισκεφτείτε τον ιστότοπο στη διεύθυνση https://blog.domain.tld. Μην ξεχάσετε να αντικαταστήσετε blog.domain.tldμε το όνομα τομέα σας.
Τερματίστε τη διαδικασία Ghost πατώντας CTRL+ Cκαι πραγματοποιήστε έξοδο από τον χρήστη ghost πίσω στον χρήστη που δεν είναι root που δημιουργήσατε στην αρχή:
exit
Το Running Ghost ως υπηρεσία συστήματος
Εάν κλείσετε την περίοδο λειτουργίας του τερματικού σας με το VPS σας, το ιστολόγιό σας θα σβήσει επίσης. Αυτό δεν είναι καλό. Για να αποφευχθεί αυτό, θα χρησιμοποιήσουμε το systemd. Θα κρατήσει το blog μας ανοιχτό 24/7.
Δημιουργία ghost.serviceαρχείου μονάδας συστήματος. Εκτελέστε το sudo sudo vim /etc/systemd/system/ghost.serviceκαι αντιγράψτε/επικολλήστε το παρακάτω περιεχόμενο:
[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
Ενεργοποιήστε και ξεκινήστε ghost.service:
sudo systemctl enable ghost.service && sudo systemctl start ghost.service
Έλεγχος ghost.serviceκατάστασης:
sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
Πλοηγηθείτε https://blog.domain.tld/ghost/και δημιουργήστε έναν χρήστη διαχειριστή Ghost. Κάντε αυτό το συντομότερο δυνατό!
συμπέρασμα
Αυτό είναι. Τώρα έχουμε ένα πλήρως λειτουργικό ιστολόγιο Ghost. Ο διακομιστής σας παραδίδει περιεχόμενο μέσω HTTP/2 όταν υποστηρίζεται από τον πελάτη. Εάν θέλετε να αλλάξετε το προεπιλεγμένο θέμα Ghost που ονομάζεται Casper σε προσαρμοσμένο, μπορείτε απλώς να κάνετε λήψη και να αποσυμπιέσετε το θέμα στο /var/www/ghost/content/themesφάκελο και να το επιλέξετε μέσω της διεπαφής διαχειριστή Ghost, που βρίσκεται στη διεύθυνση https://blog.domain.tld/ghost.