Как да разположите Ghost v0.11 LTS на Ubuntu 16.04

Ghost е платформа за блогове с отворен код, която набира популярност сред разработчиците и обикновените потребители след пускането си през 2013 г. Той поставя фокус върху съдържанието и блоговете. Най-привлекателното нещо при Ghost е неговият прост, изчистен и отзивчив дизайн. Можете да пишете публикациите си в блога от мобилен телефон. Съдържанието за Ghost е написано с помощта на езика Markdown. Ghost е идеално подходящ за отделни лица или малки групи писатели.

В това ръководство ще настроим и внедрим защитен блог Ghost v0.11.x LTS на Ubuntu 16.04 LTS VPS, използвайки Let's Encrypt , Certbot , Node.js , NPM , NGINX и MySQL .

Изисквания

  • Регистрирайте (закупете) име на домейн.
  • Ubuntu сървър 16.04 сървърен екземпляр с минимум 1GB RAM .
  • Потребител на Sudo.

Преди да започнеш

  1. Създайте нов потребителски акаунт, който не е root :

    adduser johndoe --gecos "John Doe"
    
  2. Направете го суперпотребител, като го добавите към sudoгрупата:

    usermod -aG sudo johndoe
    
  3. Превключете към нов потребител:

    su - johndoe
    
  4. Актуализирайте софтуера на вашата операционна система:

    sudo apt update && sudo apt upgrade -y
    
  5. Настройте часовата зона:

    sudo dpkg-reconfigure tzdata
    
  6. Инсталирайте необходимите инструменти:

    sudo apt install -y build-essential zip unzip vim nano openssl wget curl git apt-transport-https
    
  7. Рестартирайте системата, ако е необходимо:

    sudo shutdown -r now
    

Инсталирайте Certbot

NOTE: Before starting this step, ensure that you have set DNS records for your domain.

Ние ще използваме Encrypt Нека Калифорния и EFF е Certbot клиент да получи SSL / TLS сертификат за нашия Ghost блог. Не забравяйте да замените всички екземпляри на blog.domain.tldс името на вашия домейн.

  1. Инсталирайте Certbot (по-рано Let's Encrypt client ) софтуер за управление на сертификати, направен с Python:

    sudo apt update
    sudo apt install -y software-properties-common
    sudo add-apt-repository -y ppa:certbot/certbot
    sudo apt update
    sudo apt install -y certbot
    
  2. Проверете версията на Certbot:

    certbot --version
    # certbot 0.14.2
    
  3. Получете RSA сертификат, като използвате самостоятелен метод за удостоверяване (плъгин):

    sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email [email protected] --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към момента на писане.

  1. Изтеглете и инсталирайте Node.js v6 LTS:

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt install -y nodejs
    
  2. Проверете версията на Node.js и NPM:

    node -v && npm -v
    # v6.11.1
    # 3.10.10
    

Инсталирайте MySQL

По подразбиране Ghost е конфигуриран да използва SQLite база данни, която не изисква конфигурация.

Алтернативно Ghost може да се използва и с MySQL база данни чрез промяна на конфигурацията на базата данни. Първо трябва да създадете база данни и потребител, след което можете да промените съществуващата конфигурация на sqlite3.

  1. Изтеглете и инсталирайте MySQL:

    sudo apt install -y mysql-server
    

    NOTE: During the installation, you will be prompted for MySQL "root" user password. You should set a secure password for the MySQL "root" user.

  2. Проверете версията на MySQL:

    mysql --version
    # mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper
    
  3. Проверете дали MySQL демонът е стартиран и работи:

    sudo systemctl status mysql.service
    sudo systemctl is-enabled mysql.service
    
  4. Изпълнете mysql_secure_installationскрипта, за да защитите малко вашата база данни:

    sudo mysql_secure_installation
    
  5. Влезте в MySQL като root потребител:

    mysql -u root -p
    # Enter password:
    
  6. Създайте нова MySQL база данни и потребител:

    create database dbname;
    grant all on dbname.* to 'user' identified by 'password';
    
  7. Излезте от MySQL:

    exit
    

Инсталирайте NGINX

  1. Изтеглете и инсталирайте най-новата основна версия на NGINX от официалното хранилище на NGINX:

    wget https://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    rm nginx_signing.key
    sudo -s
    printf "deb https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
    exit
    sudo apt update
    sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
    
  2. Проверете дали е инсталиран, като проверите версията на NGINX:

    sudo nginx -v
    # nginx version: nginx/1.13.3
    
  3. Проверете състоянието, активирайте и стартирайте услугата NGINX (демон):

    sudo systemctl status nginx.service # inactive (dead)
    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service
    
  4. Създайте /etc/nginx/sslдиректория и генерирайте нова група на Diffie-Hellman ( DH ):

    sudo mkdir -p /etc/nginx/ssl
    sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
    
  5. Създаване на директория на журнал за blog.domain.tldвиртуален хост:

    sudo mkdir -p /var/log/nginx/blog.domain.tld
    
  6. Конфигурирайте NGINX като HTTP ( S ) обратен прокси сървър:

    sudo vim /etc/nginx/conf.d/ghost.conf
    
  7. Поставете следното в /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 "";
    
        }
    }
    
  8. Запазете и тествайте конфигурацията на NGINX за синтактични грешки:

    sudo nginx -t
    
  9. Презаредете конфигурацията на 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.

  1. Създайте основна директория на документа:

    sudo mkdir -p /var/www/
    
  2. Създайте нов ghostпотребител:

    sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
    
  3. Изтеглете Ghost:

    curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.10/Ghost-0.11.10.zip -o ghost.zip
    
  4. Разархивирайте Ghost в /var/www/ghostдиректорията (препоръчително място за инсталиране):

    sudo unzip -uo ghost.zip -d /var/www/ghost
    rm ghost.zip
    
  5. Преминете към новата ghostдиректория:

    cd /var/www/ghost
    
  6. Променете собствеността на /var/www/ghostдиректорията:

    sudo chown -R ghost:ghost .
    
  7. Превключете към нов ghostпотребител:

    sudo su - ghost
    
  8. Придвижете се до корена на документа /var/www/ghost:

    cd /var/www/ghost
    
  9. Инсталирайте Ghost само с производствени зависимости. Когато това приключи, Ghost се инсталира:

    npm install --production
    
  10. Конфигурирайте Ghost, като промените url, mailи databaseсвойството на productionобект вътре във 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.

  11. Стартирайте Ghost в производствена среда:

    npm start --production
    

    Ghost сега ще бяга. И предния край на блога, и интерфейсът на администратора са защитени с HTTPS и HTTP/2 също работи. Можете да отворите браузъра си и да посетите сайта на адрес https://blog.domain.tld. Не забравяйте да замените blog.domain.tldс името на вашия домейн.

  12. Изключете Ghost процеса, като натиснете CTRL+ Cи излезте от ghost потребител обратно към root потребител:

    exit
    

Изпълнение на Ghost като системна услуга

Ако затворите терминалната си сесия с вашия VPS, вашият блог също ще падне. Това не е добре. За да избегнем това, ще използваме systemd. Това ще поддържа блога ни 24/7.

  1. Създайте ghost.serviceфайл systemd unit. Стартирайте sudo vim /etc/systemd/system/ghost.serviceи копирайте/поставете съдържанието по-долу:

    [Unit]
    Description=Ghost - the professional publishing platform
    Documentation=https://docs.ghost.org/v0.11.9
    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
    
  2. Активирайте и стартирайте ghost.service:

    sudo systemctl enable ghost.service && sudo systemctl start ghost.service
    
  3. Проверете ghost.serviceсъстоянието:

    sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
    
  4. Отидете до https://blog.domain.tld/ghost/и създайте потребител на Ghost администратор. Направете това възможно най-скоро!

Заключение

Това е. Вече имаме напълно функционален Ghost блог. Вашият сървър доставя съдържание чрез HTTP/2, когато се поддържа от клиента. Ако искате да промените темата на Ghost по подразбиране, наречена Casper, на персонализирана, можете просто да изтеглите и разархивирате темата в /var/www/ghost/content/themesпапката и да я изберете чрез администраторски интерфейс на Ghost, намиращ се на https://blog.domain.tld/ghost.


Създаване на блог на Jekyll в Ubuntu 16.04

Създаване на блог на Jekyll в Ubuntu 16.04

Използване на различна система? Jekyll е чудесна алтернатива на WordPress за блогове или споделяне на съдържание. Не изисква никакви бази данни и е много лесно i

Как да инсталирате MODX Revolution на Ubuntu 16.04 LAMP VPS

Как да инсталирате MODX Revolution на Ubuntu 16.04 LAMP VPS

Използване на различна система? MODX Revolution е бърза, гъвкава, мащабируема, безплатна и отворена система за управление на съдържанието (CMS) от корпоративен клас, написана i

Как да инсталирате MODX Revolution на FreeBSD 11 FAMP VPS

Как да инсталирате MODX Revolution на FreeBSD 11 FAMP VPS

Използване на различна система? MODX Revolution е бърза, гъвкава, мащабируема система за управление на съдържанието (CMS) от корпоративен клас, написана на PHP. То и

Инсталирайте WordPress на OpenBSD 6.2

Инсталирайте WordPress на OpenBSD 6.2

Въведение WordPress е доминиращата система за управление на съдържанието в интернет. Той захранва всичко от блогове до сложни уебсайтове с динамично съдържание

Създаване на блог на Jekyll на CentOS 7

Създаване на блог на Jekyll на CentOS 7

Използване на различна система? Jekyll е добра алтернатива на WordPress. Не изисква никакви бази данни и работи с език, който мнозина познават

Как да инсталирате MODX Revolution на CentOS 7 LAMP VPS

Как да инсталирате MODX Revolution на CentOS 7 LAMP VPS

Използване на различна система? MODX Revolution е бърза, гъвкава, мащабируема, безплатна и отворена система за управление на съдържанието (CMS) от корпоративен клас, написана i

Инсталиране на Fork CMS на CentOS 7

Инсталиране на Fork CMS на CentOS 7

Използване на различна система? Fork е CMS с отворен код, написан на PHP. Изходният код на Forks се хоства на GitHub. Това ръководство ще ви покаже как да инсталирате Fork CM

Как да инсталирате Neos CMS на CentOS 7

Как да инсталирате Neos CMS на CentOS 7

Neos е иновативна система за управление на съдържанието с отворен код, която е чудесна за създаване и редактиране на онлайн съдържание. Имайки предвид авторите и редакторите, Neo

Как да разположите Ghost v0.11 LTS на CentOS 7.3

Как да разположите Ghost v0.11 LTS на CentOS 7.3

Използване на различна система? Ghost е платформа за блогове с отворен код, която набира популярност сред разработчиците и обикновените потребители от 201 г.

Как да инсталирате SilverStripe CMS на FreeBSD 11 FAMP VPS

Как да инсталирате SilverStripe CMS на FreeBSD 11 FAMP VPS

Използване на различна система? SilverStripe е гъвкава и разширяема система за управление на съдържанието (CMS) с отворен код, написана на PHP. Това е лесно

Как да разположите Ghost v0.11 LTS на Fedora 25

Как да разположите Ghost v0.11 LTS на Fedora 25

Използване на различна система? Ghost е платформа за блогове с отворен код, която набира популярност сред разработчиците и обикновените потребители от 201 г.

Как да разположите множество сайтове на Wordpress с помощта на Virtualmin и Ansible в Ubuntu 16.04

Как да разположите множество сайтове на Wordpress с помощта на Virtualmin и Ansible в Ubuntu 16.04

Често срещано използване на виртуален сървър Vultr е за хостване на уебсайтове на Wordpress. Това ръководство ви показва как да автоматизирате конфигурацията на виртуален сървър от нулата

Настройване на Ghost Professional Publishing Platform на OpenBSD 6

Настройване на Ghost Professional Publishing Platform на OpenBSD 6

Ghost е най-новата и най-добрата нова, която да съперничи на WordPress. Разработването на теми е бързо и лесно за научаване, защото разработчиците на Ghost решиха да използват и двете

Инсталирайте и конфигурирайте блог Ghost v1.0.0 в Ubuntu 16.04

Инсталирайте и конфигурирайте блог Ghost v1.0.0 в Ubuntu 16.04

Ghost е модерна платформа за публикуване с отворен код, изградена на Node.js с администраторски клиент Ember.js, JSON API и API за тема, задвижван от Handlebars.js. Ghos

Как да инсталирате MODX Revolution на Fedora 26 LAMP VPS

Как да инсталирате MODX Revolution на Fedora 26 LAMP VPS

Използване на различна система? MODX Revolution е бърза, гъвкава, мащабируема, безплатна и отворена система за управление на съдържанието (CMS) от корпоративен клас, написана i

Как да инсталирате Dotclear на Debian 9 (разтягане)

Как да инсталирате Dotclear на Debian 9 (разтягане)

Използване на различна система? Dotclear е много прост двигател за блогове. Той е с отворен код и лесен за използване. Този урок ще премине през инсталацията

Инсталиране на Fork CMS на Ubuntu 16.04 LTS

Инсталиране на Fork CMS на Ubuntu 16.04 LTS

Използване на различна система? Fork е CMS с отворен код, написан на PHP. Изходният код на Forks се хоства на GitHub. Това ръководство ще ви покаже как да инсталирате Fork CM

Как да разположите Ghost на Debian 8.7

Как да разположите Ghost на Debian 8.7

Използване на различна система? Ghost е платформа за блогове с отворен код, която набира популярност сред разработчиците и обикновените потребители след пускането си през 2013 г. аз

Инсталиране на Fork CMS на Debian 9

Инсталиране на Fork CMS на Debian 9

Използване на различна система? Fork е CMS с отворен код, написан на PHP. Изходният код на Forks се хоства на GitHub. Това ръководство ще ви покаже как да инсталирате Fork CM

Как да инсталирате Typesetter CMS на CentOS 7

Как да инсталирате Typesetter CMS на CentOS 7

Typesetter е CMS с отворен код, написан на PHP, фокусиран върху лекотата на използване с True WYSIWYG редактиране и съхранение на плосък файл. В тази статия ще инсталираме

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече