Настройка Jekyll для запуска в качестве службы systemd
Jekyll — это генератор статических сайтов, который преобразует ваш простой текст в статические веб-сайты и блоги. Запуск Jekyll в качестве службы systemd обеспечивает автоматический запуск при загрузке системы, автоматическое восстановление после сбоев и централизованное управление через системные инструменты. В этом руководстве мы настроим Jekyll для работы как службы systemd.
Настройка Jekyll для запуска в качестве службы systemd
Описание/Введение: Jekyll — это генератор статических сайтов, который преобразует ваш простой текст в статические веб-сайты и блоги. Запуск Jekyll в качестве службы systemd обеспечивает автоматический запуск при загрузке системы, автоматическое восстановление после сбоев и централизованное управление через системные инструменты. В этом руководстве мы настроим Jekyll для работы как службы systemd.
Предварительные требования
Перед началом убедитесь, что у вас установлен Jekyll и создан сайт.
- Проверьте установку Jekyll:
1
jekyll --version -
Убедитесь, что у вас есть существующий проект Jekyll
- Проверьте, что сайт работает локально:
1
jekyll serve
Создание пользователя для службы Jekyll
Создание выделенного пользователя для повышения безопасности.
- Создайте нового пользователя:
1
sudo adduser --system --group jekyll
- Перейдите в домашнюю директорию пользователя:
1
cd /home/jekyll - Убедитесь, что пользователь имеет правильные права доступа
Копирование проекта Jekyll
Перенос вашего проекта Jekyll в системную директорию.
- Скопируйте проект в домашнюю директорию пользователя jekyll:
1
sudo cp -r /path/to/your/jekyll/site /home/jekyll/mysite
- Измените владельца файлов:
1
sudo chown -R jekyll:jekyll /home/jekyll/mysite
- Установите правильные разрешения:
1
sudo chmod -R 755 /home/jekyll/mysite
Создание файла службы systemd
Создание конфигурационного файла для службы systemd.
- Создайте файл службы:
1
sudo nano /etc/systemd/system/jekyll.service - Добавьте следующую конфигурацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[Unit] Description=Jekyll Static Site Server After=network.target [Service] Type=simple User=jekyll Group=jekyll WorkingDirectory=/home/jekyll/mysite Environment=JEKYLL_ENV=production ExecStart=/usr/local/bin/bundle exec jekyll serve --host 0.0.0.0 --port 4000 Restart=always RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
Настройка переменных окружения
Дополнительная настройка окружения для Jekyll.
- Создайте файл с переменными окружения:
1
sudo nano /home/jekyll/mysite/.env - Добавьте необходимые переменные:
1 2 3
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 JEKYLL_ENV=production
Установка зависимостей Ruby
Убедитесь, что все gem зависимости установлены.
- Переключитесь на пользователя jekyll:
1
sudo su - jekyll - Перейдите в директорию проекта:
1
cd /home/jekyll/mysite - Установите зависимости:
1
bundle install - Выйдите из сессии пользователя jekyll:
1
exit
Запуск и включение службы
Активация и запуск службы Jekyll.
- Перезагрузите демон systemd:
1
sudo systemctl daemon-reload - Включите службу для автоматического запуска при загрузке:
1
sudo systemctl enable jekyll.service
- Запустите службу:
1
sudo systemctl start jekyll.service - Проверьте статус службы:
1
sudo systemctl status jekyll.service
Проверка работы службы
Убедитесь, что Jekyll работает корректно.
- Проверьте журналы службы:
1
sudo journalctl -u jekyll.service -f
- Проверьте, что процесс запущен:
1
ps aux | grep jekyll - Проверьте доступность веб-сайта:
1
curl http://localhost:4000
Настройка обратного прокси с Nginx
Настройка Nginx для проксирования запросов к Jekyll.
- Установите Nginx если не установлен:
1
sudo apt install nginx
- Создайте конфигурационный файл для сайта:
1
sudo nano /etc/nginx/sites-available/jekyll-site - Добавьте конфигурацию:
1 2 3 4 5 6 7 8 9 10 11 12
server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:4000; proxy_set_header Host $host; 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 $scheme; } }
Настройка брандмауэра
Открытие необходимых портов в брандмауэре.
- Разрешите порт 80 для HTTP:
1
sudo ufw allow 80/tcp - Разрешите порт 4000 для Jekyll (если нужен прямой доступ):
1
sudo ufw allow 4000/tcp - Включите брандмауэр:
1
sudo ufw enable
Управление службой
Команды для управления службой Jekyll.
- Остановка службы:
1
sudo systemctl stop jekyll.service - Перезапуск службы:
1
sudo systemctl restart jekyll.service - Просмотр статуса:
1
sudo systemctl status jekyll.service - Просмотр журналов:
1
sudo journalctl -u jekyll.service -n 50
Автоматическое обновление контента
Настройка автоматического перестроения сайта при изменениях.
- Создайте скрипт для обновления:
1
sudo nano /home/jekyll/update_site.sh - Добавьте содержимое:
1 2 3 4
#!/bin/bash cd /home/jekyll/mysite git pull origin main sudo systemctl restart jekyll.service
- Сделайте скрипт исполняемым:
1
sudo chmod +x /home/jekyll/update_site.sh
Мониторинг ресурсов
Настройка мониторинга использования ресурсов.
- Создайте ограничения ресурсов в службе:
1 2 3
[Service] MemoryLimit=512M CPUQuota=80%
- Мониторинг использования памяти:
1
systemd-cgtop
Устранение проблем
Решение распространенных проблем.
Проблема: Служба не запускается
1
2
3
4
5
# Проверьте синтаксис файла службы
sudo systemctl cat jekyll.service
# Проверьте журналы
sudo journalctl -u jekyll.service -n 100
Проблема: Проблемы с правами доступа
1
2
3
4
5
# Проверьте владельца файлов
ls -la /home/jekyll/mysite/
# Проверьте права доступа
namei -l /home/jekyll/mysite
Проблема: Jekyll не может найти gem
1
2
3
4
5
# Проверьте установленные gem
sudo -u jekyll bundle list
# Переустановите dependencies
sudo -u jekyll bundle install
Резервное копирование конфигурации
Сохранение конфигурации службы.
- Создайте резервную копию файла службы:
1
sudo cp /etc/systemd/system/jekyll.service /etc/systemd/system/jekyll.service.backup - Экспортируйте список gem зависимостей:
1
sudo -u jekyll bundle package
Теперь ваш сайт Jekyll работает как служба systemd, что обеспечивает автоматический запуск при загрузке системы, мониторинг состояния и автоматическое восстановление после сбоев. Это надежное решение для продакшен-окружения.