[JavaScript, Node.JS] Создаем свой сайт или блог на Ghost в образе Docker
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Фишкой Ghost является то, что он использует на стороне бекенда сервер Node.js и язык JavaScript и дает альтернативный вариант для разработки.В этом посте объясняется, как задеплоить свой личный блог на Ghost — движке с базой данных MariaDB с помощью docker.В данном проекте мы будем использовать сервисы:
- Ghost — платформу для блогинка на Node.js
- Nginx — прокси сервер внешних для внешних запросов на внутренний порт сервиса
- MariaDB — реляционная БД с открытым исходным кодом
- Docker — контейнеризация сервисов
При развертке используется Docker и для этого нам нужен будет виртуальный сервер или личный ПК, на которых установлены Docker и Compose. Но подробно рассказывать я про это не буду, чтобы не утомлять и отходить от основной темы. Статья для тех, кто в курсе, что такое Docker и знает, как настроить Nginx, хотя, он не обязателен, если вам просто требуется запустить сайт локально.Настройка хостаПеред тем, как переходить к рассмотрению кода, нам будет необходимо подготовить нашу систему, сервер или виртуальную машину на то, чтобы поднять образы и принимать внешние запросы. Я ж буду отталкиваться от того, что у меня Linux сервер на дистрибутиве Ubuntu. Для этого нам будет необходимо установить сервисы Docker, Compose, Nginx:
$ sudo apt install docker docker-compose nginx
Также, в дополнении, нам будет необходимо убедиться, что пользователь системы без полномочий root и что он находится в группе docker, чтобы иметь возможность запускать команды докера без проблем, хотя, все что нужно, работает и без этого, но на всякий случай:
$ sudo usermod username -aG docker
Подготовка окруженияДля начала опишем все сервисы в файле docker-compose.yml
version: '3.3'
services:
mariadb:
container_name: project_mariadb
image: mariadb:${MARIADB_IMAGE_TAG}
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ghost
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ghost_production
restart: always
volumes:
- type: bind
source: ${MYSQL_HOST_PATH}
target: /var/lib/mysql
ghost:
container_name: project_ghost
image: ghost:${GHOST_IMAGE_TAG}
ports:
- 8022:2368
environment:
url: ${BLOG_URL:-http://127.0.0.1}
database__client: mysql
database__connection__host: mariadb
database__connection__database: ghost_production
database__connection__user: ghost
database__connection__password: ${MYSQL_PASSWORD}
depends_on:
- mariadb
restart: always
volumes:
- type: bind
source: ${GHOST_HOST_PATH}
target: /var/lib/ghost/content
Исходя из выше описанного кода, видно, что мы используем 2 образа
- ghost
- mariadb
Ghost выведен наружу по порту 8022 и через вольюм пути исходного кода source, откуда он будет с хоста грузить себе в образ и выполнять.Как видно, в файле используются переменные и они у нас выведены в файл окружения .env, чтобы иметь к ним отдельный доступ, в случае, если требуется использовать иные сервисы, да и легко это держать все настройки в отдельном файле. Выглядит он у нас так
# Тег для ghost образа
export GHOST_IMAGE_TAG=latest
# Тег для MariaDB образа
export MARIADB_IMAGE_TAG=latest
# Публичный url для блога ghost
export BLOG_URL=http://127.0.0.1:8022
# Root - пароль для MariaDB
export MYSQL_ROOT_PASSWORD=password
# User - пароль для ghost для соединения в БД
export MYSQL_PASSWORD=password
# Host - директории для образов, где будут храниться данные
export MYSQL_HOST_PATH=./mariadb
export GHOST_HOST_PATH=./www
Теперь, чтобы поднять контейнеры из образов, достаточно в корне, где файл docker-compose.yml запустит команду
$ docker-compose up -d
После чего наш сайт должен быть доступен по порту localhost:8022
Наш рабочий блогНастройка NginxЛокально наш сайт будет доступен по адресу localhost:8022, но чтобы он был доступен глобально, в случае, если у вас виртуальный сервер, к которому прикреплен домен, то придется все запросы перенаправлять с внешнего порта 80 или 443 на порт 8022, для этого нам нужно описать данные моменты в конфигурационном файле сайта и добавить его в папку /etc/nginx/sites-available/site.com.conf и далее дать символьную ссылку данного файла в папку /etc/nginx/sites-enabled
$ ln -s /etc/nginx/sites-available/site.com.conf /etc/nginx/sites-enabled/site.com.conf
Данный файл, примерно, должен выглядеть следующим образом
server {
server_name site.com www.site.com;
error_log /var/www/site/logs/error.log;
access_log /var/www/site/logs/access.log;
location /{
proxy_pass http://localhost:8022;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Как видно, у нас, с внешнего порта 80 все запросы проксируются на порт нашего образа Ghost, тем самым, для внешних юзеров он выглядит как обычный сайт на привычном порту 80После чего перезагружаем nginx
$ systemctl restart nginx
И после чего у нас должен быть доступен по домену site.com и на этом все. Исходный код лежит на gist. Оригинальная статья также доступна у меня на сайте.
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Алгоритмы] Быстрая математика для графиков, на примере вычисления среднего
- [Высокая производительность, Программирование, Анализ и проектирование систем, Облачные сервисы, Микросервисы] Доводим эмуляцию до стандартов 21 века (перевод)
- Выпуск nginx 1.21.1
- [JavaScript] Тест библиотек построения диаграмм классов, исследуя исходный код популярных js библиотек
- [DevOps] Игнорирование .dockerignore
- [JavaScript, Клиентская оптимизация, Canvas] Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить
- [JavaScript, Программирование, Развитие стартапа] Как я сделал свой трекер мечты и понял цену времени
- [JavaScript, Профессиональная литература, TensorFlow] Книга «JavaScript для глубокого обучения: TensorFlow.js»
- [DevOps, Kubernetes] Различия между Docker, containerd, CRI-O и runc (перевод)
- [Разработка веб-сайтов, JavaScript, VueJS] Nuxt.js и поисковики. Решение проблем с СЕО для Google и Yandex
Теги для поиска: #_javascript, #_node.js, #_ghost, #_docker, #_dockercompose, #_javascript, #_nginx, #_javascript, #_node.js
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:15
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Фишкой Ghost является то, что он использует на стороне бекенда сервер Node.js и язык JavaScript и дает альтернативный вариант для разработки.В этом посте объясняется, как задеплоить свой личный блог на Ghost — движке с базой данных MariaDB с помощью docker.В данном проекте мы будем использовать сервисы:
$ sudo apt install docker docker-compose nginx
$ sudo usermod username -aG docker
version: '3.3'
services: mariadb: container_name: project_mariadb image: mariadb:${MARIADB_IMAGE_TAG} environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ghost MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ghost_production restart: always volumes: - type: bind source: ${MYSQL_HOST_PATH} target: /var/lib/mysql ghost: container_name: project_ghost image: ghost:${GHOST_IMAGE_TAG} ports: - 8022:2368 environment: url: ${BLOG_URL:-http://127.0.0.1} database__client: mysql database__connection__host: mariadb database__connection__database: ghost_production database__connection__user: ghost database__connection__password: ${MYSQL_PASSWORD} depends_on: - mariadb restart: always volumes: - type: bind source: ${GHOST_HOST_PATH} target: /var/lib/ghost/content
# Тег для ghost образа
export GHOST_IMAGE_TAG=latest # Тег для MariaDB образа export MARIADB_IMAGE_TAG=latest # Публичный url для блога ghost export BLOG_URL=http://127.0.0.1:8022 # Root - пароль для MariaDB export MYSQL_ROOT_PASSWORD=password # User - пароль для ghost для соединения в БД export MYSQL_PASSWORD=password # Host - директории для образов, где будут храниться данные export MYSQL_HOST_PATH=./mariadb export GHOST_HOST_PATH=./www $ docker-compose up -d
Наш рабочий блогНастройка NginxЛокально наш сайт будет доступен по адресу localhost:8022, но чтобы он был доступен глобально, в случае, если у вас виртуальный сервер, к которому прикреплен домен, то придется все запросы перенаправлять с внешнего порта 80 или 443 на порт 8022, для этого нам нужно описать данные моменты в конфигурационном файле сайта и добавить его в папку /etc/nginx/sites-available/site.com.conf и далее дать символьную ссылку данного файла в папку /etc/nginx/sites-enabled $ ln -s /etc/nginx/sites-available/site.com.conf /etc/nginx/sites-enabled/site.com.conf
server {
server_name site.com www.site.com; error_log /var/www/site/logs/error.log; access_log /var/www/site/logs/access.log; location /{ proxy_pass http://localhost:8022; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } $ systemctl restart nginx
=========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:15
Часовой пояс: UTC + 5