А что тут писать?

А что тут писать?

Собственно, развернуть свой блог оказалось значительно проще, чем написать что то стоящее. Однако, для начала, я решил рассказать о технической стороне вопроса. Данный блог - моя учебная площадка для знакомства с вебом и современными контейнерными технологиями, которые позволяют попробовать веб-сервисы с минимальными усилиями.

Сердцем блога выступает opensource движок Ghost. Это довольно удобная CMS для сайта, используя ее автору остается думать только о контенте. В качестве главной темы стоит русифицированная версия Casper.

Ghost развернут как docker-контейнер на VPS от DigitalOcean (рефералка мне на хостинг=), где крутится с моими другими проектами. Для работы достаточно самого базового Droplet (это обычная виртуальная машина с Ubuntu 20.04 (LTS) x64 на борту) за $5 в месяц.

Для того, чтобы все красиво работало через HTTPS используется nginx и бесплатный SSL-сертификат от LetsEncrypt. nginx развернут также как docker-контейнер и играет роль reverse proxy и веб-сервера для страницы заглушки на olegen.ru
Чуть ранее я приобрел сам домен olegen.ru у регистратора reg.ru за 199 руб/год.
Правда его продление будет стоит подороже.

Итак, краткая инструкция как все развернуть:

Этап 1:

  1. Необходимо развернуть VPS. Можно воспользовать ссылкой выше и развернуть базовый дроплет (виртуальная машина) с свежей версией Ubuntu LTS на борту. Запомнить его публичный IP-адрес для связи через ssh и привязки доменного имени (если купили домен).

  2. Сгенерировать ключи ssh для связи с дроплетом с вашей рабочей машины. Это можно сделать в консоли используя PowerShell (если вы на Windows)

    ssh keygen

В результате в папке <home_dir>/.ssh./ сформируются пара ключей - открытый(публичный) и закрытый. Защитить закрытый ключ парольной фразой.

Фразу нужно запомнить!

  1. Скопировать содержимое публичного ключа id_rsa.pub и вставить его в настройках вашего дроплета для безопасного соединения.

  2. Подключиться через ssh к вашему дроплету:

    ssh root@_droplet_public_IP_

Ввести парольную фразу от вашего закрытого ключа из ш.2.

  1. Выполнить команды:
    apt update
    apt install docker docker-compose certbot
    mkdir -p /app/data/nginx/certificates
    mkdir /app/data/ghost
    cd /app

Этап 2:

  1. Сгенерировать и установить ssl-сертификаты LetsEncrypt с помощью устрановленного пакета certbot
  2. Скопировать полученные сертификаты в папку /app/data/nginx/certificates/<your_domain>

Этап 3:

  1. Создать файл docker-compose.yml в /app и nginx-vhost.conf в /app/data/nginx

Этап 4:

  1. Запустить docker-compose
    cd /app
    docker-compose up

Ниже расположен мой файл docker-compose.yml:

version: '3'
services:
  nginx:
    container_name: nginx
    image : nginx:stable
    restart: always
    volumes:
      - ./data/nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
      - ./data/nginx/certificates:/mycerts
    ports:
      - 443:443
      - 80:80 
    depends_on:
      - ghost-blog

  ghost-blog:
    container_name: ghost-blog
    image: ghost:alpine
    restart: always
    volumes:
      - ./data/ghost:/var/lib/ghost/content
    environment:
      - url=http://_your_domain_name_

Файл конфигурации реверс-прокси nginx nginx-vhost.conf:

server {
    listen 80;
    location / {
        return 301
            https://$host$request_uri;
    }
}
server {
    listen 443 ssl;
    server_name _your_domain_name_;

    ssl_certificate     /mycerts/_your_domain_name_/fullchain.pem;
    ssl_certificate_key /mycerts/_your_domain_name_/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        #proxy_redirect off;
        proxy_pass http://ghost-blog:2368;
    }
}