А что тут писать?
Собственно, развернуть свой блог оказалось значительно проще, чем написать что то стоящее. Однако, для начала, я решил рассказать о технической стороне вопроса. Данный блог - моя учебная площадка для знакомства с вебом и современными контейнерными технологиями, которые позволяют попробовать веб-сервисы с минимальными усилиями.
Сердцем блога выступает 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:
-
Необходимо развернуть VPS. Можно воспользовать ссылкой выше и развернуть базовый дроплет (виртуальная машина) с свежей версией Ubuntu LTS на борту. Запомнить его публичный IP-адрес для связи через ssh и привязки доменного имени (если купили домен).
-
Сгенерировать ключи ssh для связи с дроплетом с вашей рабочей машины. Это можно сделать в консоли используя PowerShell (если вы на Windows)
ssh keygen
В результате в папке <home_dir>/.ssh./
сформируются пара ключей - открытый(публичный) и закрытый. Защитить закрытый ключ парольной фразой.
Фразу нужно запомнить!
-
Скопировать содержимое публичного ключа
id_rsa.pub
и вставить его в настройках вашего дроплета для безопасного соединения. -
Подключиться через ssh к вашему дроплету:
ssh root@_droplet_public_IP_
Ввести парольную фразу от вашего закрытого ключа из ш.2.
- Выполнить команды:
apt update
apt install docker docker-compose certbot
mkdir -p /app/data/nginx/certificates
mkdir /app/data/ghost
cd /app
Этап 2:
- Сгенерировать и установить ssl-сертификаты LetsEncrypt с помощью устрановленного пакета
certbot
- Скопировать полученные сертификаты в папку
/app/data/nginx/certificates/<your_domain>
Этап 3:
- Создать файл
docker-compose.yml
в/app
иnginx-vhost.conf
в/app/data/nginx
Этап 4:
- Запустить 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;
}
}