Пост

Настройка Jekyll для запуска в качестве службы systemd

Jekyll — это генератор статических сайтов, который преобразует ваш простой текст в статические веб-сайты и блоги. Запуск Jekyll в качестве службы systemd обеспечивает автоматический запуск при загрузке системы, автоматическое восстановление после сбоев и централизованное управление через системные инструменты. В этом руководстве мы настроим Jekyll для работы как службы systemd.

Настройка Jekyll для запуска в качестве службы systemd

Описание/Введение: Jekyll — это генератор статических сайтов, который преобразует ваш простой текст в статические веб-сайты и блоги. Запуск Jekyll в качестве службы systemd обеспечивает автоматический запуск при загрузке системы, автоматическое восстановление после сбоев и централизованное управление через системные инструменты. В этом руководстве мы настроим Jekyll для работы как службы systemd.

Предварительные требования

Перед началом убедитесь, что у вас установлен Jekyll и создан сайт.

  1. Проверьте установку Jekyll:
    1
    
    jekyll --version
    
  2. Убедитесь, что у вас есть существующий проект Jekyll

  3. Проверьте, что сайт работает локально:
    1
    
    jekyll serve
    

Создание пользователя для службы Jekyll

Создание выделенного пользователя для повышения безопасности.

  1. Создайте нового пользователя:
    1
    
    sudo adduser --system --group jekyll
    
  2. Перейдите в домашнюю директорию пользователя:
    1
    
    cd /home/jekyll
    
  3. Убедитесь, что пользователь имеет правильные права доступа

Копирование проекта Jekyll

Перенос вашего проекта Jekyll в системную директорию.

  1. Скопируйте проект в домашнюю директорию пользователя jekyll:
    1
    
    sudo cp -r /path/to/your/jekyll/site /home/jekyll/mysite
    
  2. Измените владельца файлов:
    1
    
    sudo chown -R jekyll:jekyll /home/jekyll/mysite
    
  3. Установите правильные разрешения:
    1
    
    sudo chmod -R 755 /home/jekyll/mysite
    

Создание файла службы systemd

Создание конфигурационного файла для службы systemd.

  1. Создайте файл службы:
    1
    
    sudo nano /etc/systemd/system/jekyll.service
    
  2. Добавьте следующую конфигурацию:
    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. Создайте файл с переменными окружения:
    1
    
    sudo nano /home/jekyll/mysite/.env
    
  2. Добавьте необходимые переменные:
    1
    2
    3
    
    LANG=en_US.UTF-8
    LC_ALL=en_US.UTF-8
    JEKYLL_ENV=production
    

Установка зависимостей Ruby

Убедитесь, что все gem зависимости установлены.

  1. Переключитесь на пользователя jekyll:
    1
    
    sudo su - jekyll
    
  2. Перейдите в директорию проекта:
    1
    
    cd /home/jekyll/mysite
    
  3. Установите зависимости:
    1
    
    bundle install
    
  4. Выйдите из сессии пользователя jekyll:
    1
    
    exit
    

Запуск и включение службы

Активация и запуск службы Jekyll.

  1. Перезагрузите демон systemd:
    1
    
    sudo systemctl daemon-reload
    
  2. Включите службу для автоматического запуска при загрузке:
    1
    
    sudo systemctl enable jekyll.service
    
  3. Запустите службу:
    1
    
    sudo systemctl start jekyll.service
    
  4. Проверьте статус службы:
    1
    
    sudo systemctl status jekyll.service
    

Проверка работы службы

Убедитесь, что Jekyll работает корректно.

  1. Проверьте журналы службы:
    1
    
    sudo journalctl -u jekyll.service -f
    
  2. Проверьте, что процесс запущен:
    1
    
    ps aux | grep jekyll
    
  3. Проверьте доступность веб-сайта:
    1
    
    curl http://localhost:4000
    

Настройка обратного прокси с Nginx

Настройка Nginx для проксирования запросов к Jekyll.

  1. Установите Nginx если не установлен:
    1
    
    sudo apt install nginx
    
  2. Создайте конфигурационный файл для сайта:
    1
    
    sudo nano /etc/nginx/sites-available/jekyll-site
    
  3. Добавьте конфигурацию:
    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;
        }
    }
    

Настройка брандмауэра

Открытие необходимых портов в брандмауэре.

  1. Разрешите порт 80 для HTTP:
    1
    
    sudo ufw allow 80/tcp
    
  2. Разрешите порт 4000 для Jekyll (если нужен прямой доступ):
    1
    
    sudo ufw allow 4000/tcp
    
  3. Включите брандмауэр:
    1
    
    sudo ufw enable
    

Управление службой

Команды для управления службой Jekyll.

  1. Остановка службы:
    1
    
    sudo systemctl stop jekyll.service
    
  2. Перезапуск службы:
    1
    
    sudo systemctl restart jekyll.service
    
  3. Просмотр статуса:
    1
    
    sudo systemctl status jekyll.service
    
  4. Просмотр журналов:
    1
    
    sudo journalctl -u jekyll.service -n 50
    

Автоматическое обновление контента

Настройка автоматического перестроения сайта при изменениях.

  1. Создайте скрипт для обновления:
    1
    
    sudo nano /home/jekyll/update_site.sh
    
  2. Добавьте содержимое:
    1
    2
    3
    4
    
    #!/bin/bash
    cd /home/jekyll/mysite
    git pull origin main
    sudo systemctl restart jekyll.service
    
  3. Сделайте скрипт исполняемым:
    1
    
    sudo chmod +x /home/jekyll/update_site.sh
    

Мониторинг ресурсов

Настройка мониторинга использования ресурсов.

  1. Создайте ограничения ресурсов в службе:
    1
    2
    3
    
    [Service]
    MemoryLimit=512M
    CPUQuota=80%
    
  2. Мониторинг использования памяти:
    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. Создайте резервную копию файла службы:
    1
    
    sudo cp /etc/systemd/system/jekyll.service /etc/systemd/system/jekyll.service.backup
    
  2. Экспортируйте список gem зависимостей:
    1
    
    sudo -u jekyll bundle package
    

Теперь ваш сайт Jekyll работает как служба systemd, что обеспечивает автоматический запуск при загрузке системы, мониторинг состояния и автоматическое восстановление после сбоев. Это надежное решение для продакшен-окружения.

Авторский пост защищен лицензией CC BY 4.0 .

© evdokimoff. Некоторые права защищены.

Использует тему Chirpy для Jekyll