Як розгорнути Ghost v0.11 LTS на Ubuntu 16.04

Ghost — це платформа для ведення блогів з відкритим кодом, яка набирає популярності серед розробників і звичайних користувачів з моменту її випуску в 2013 році. Він акцентує увагу на контенті та веденні блогів. Найпривабливішим у Ghost є його простий, чистий та чуйний дизайн. Ви можете писати свої дописи в блозі з мобільного телефону. Вміст для Ghost написаний мовою Markdown. Ghost ідеально підходить для окремих осіб або невеликих груп письменників.

У цьому посібнику ми збираємося налаштувати та розгорнути безпечний блог Ghost v0.11.x LTS на VPS Ubuntu 16.04 LTS за допомогою Let's Encrypt , Certbot , Node.js , NPM , NGINX і MySQL .

Вимоги

  • Зареєструвати (придбати) доменне ім'я.
  • Примірник сервера Ubuntu 16.04 з мінімум 1 Гб оперативної пам'яті .
  • Користувач 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.

Ми збираємося використовувати Let's Encrypt CA і клієнт Certbot EFF , щоб отримати сертифікат 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каталог і згенеруйте нову групу Діффі-Хеллмана ( 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
    

    Тепер привид буде бігати. І інтерфейс блогу, і інтерфейс адміністратора захищені HTTPS, а також працює HTTP/2. Ви можете відкрити свій браузер і відвідати сайт за адресою https://blog.domain.tld. Не забудьте замінити blog.domain.tldна своє доменне ім’я.

  12. Вимкніть процес Ghost, натиснувши CTRL+, Cі вийдіть із користувача ghost назад до користувача root:

    exit
    

Запуск Ghost як системної служби

Якщо ви закриєте термінальний сеанс за допомогою VPS, ваш блог також зникне. Це не добре. Щоб уникнути цього, ми збираємося використовувати systemd. Завдяки цьому наш блог буде працювати цілодобово.

  1. Створіть ghost.serviceфайл модуля systemd. Запустіть 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) корпоративного рівня з відкритим кодом.

Створення блогу Jekyll на CentOS 7

Створення блогу Jekyll на CentOS 7

Використання іншої системи? Jekyll — хороша альтернатива WordPress. Він не вимагає жодних баз даних і працює з мовою, знайомою багатьом

Як встановити MODX Revolution на VPS CentOS 7 LAMP

Як встановити MODX Revolution на VPS CentOS 7 LAMP

Використання іншої системи? MODX Revolution — це швидка, гнучка, масштабована, безкоштовна система керування вмістом (CMS) корпоративного рівня з відкритим кодом.

Встановлення 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 року.

Як розгорнути 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 на OpenBSD 6

Налаштування платформи професійної публікації Ghost на OpenBSD 6

Ghost — найновіша і найкраща вискочка, яка конкурує з WordPress. Розробка теми швидка та проста в освоєнні, тому що розробники Ghost вирішили використовувати обидва

Встановіть та налаштуйте блог Ghost v1.0.0 в Ubuntu 16.04

Встановіть та налаштуйте блог Ghost v1.0.0 в Ubuntu 16.04

Ghost — це сучасна видавнича платформа з відкритим вихідним кодом, побудована на Node.js з клієнтом адміністратора Ember.js, API JSON та API тем, що працює на основі Handlebars.js. Ghos

Як встановити MODX Revolution на Fedora 26 LAMP VPS

Як встановити MODX Revolution на Fedora 26 LAMP VPS

Використання іншої системи? MODX Revolution — це швидка, гнучка, масштабована, безкоштовна система керування вмістом (CMS) корпоративного рівня з відкритим кодом.

Встановлення 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 і зберіганням плоских файлів. У цій статті ми будемо встановлювати

Налаштування WordPress за допомогою WooCommerce на CentOS 6

Налаштування WordPress за допомогою WooCommerce на CentOS 6

Примірники Vultr – це чудовий спосіб вести свій блог WordPress, але більш помітним розширенням WordPress є WooCommerce, плагін електронної комерції, який розширює

Встановлення Fork CMS на Fedora 28

Встановлення Fork CMS на Fedora 28

Використання іншої системи? Fork — це CMS з відкритим кодом, написана на PHP. Вихідний код Forks розміщено на GitHub. Цей посібник покаже вам, як встановити Fork CM

Як встановити MODX Revolution на Debian 9 LAMP VPS

Як встановити MODX Revolution на Debian 9 LAMP VPS

Використання іншої системи? MODX Revolution — це швидка, гнучка, масштабована, безкоштовна система керування вмістом (CMS) корпоративного рівня з відкритим кодом.

Як встановити SilverStripe CMS на Ubuntu 16.04 LAMP VPS

Як встановити SilverStripe CMS на Ubuntu 16.04 LAMP VPS

Використання іншої системи? SilverStripe — це гнучка та розширювана безкоштовна система керування вмістом (CMS) корпоративного рівня з відкритим кодом, написана на PHP. я

Повстання машин: застосування ШІ в реальному світі

Повстання машин: застосування ШІ в реальному світі

Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.

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. Прочитайте цю статтю, щоб дізнатися більше