Перейти к содержанию

Обзор развертывания Jenkins на сервере

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

Для развертывания Jenkins на сервере требуются следующие системные характеристики и права доступа:

  • Операционная система: Ubuntu (совместимая с менеджером пакетов apt).

  • Права доступа: Требуется доступ root или права sudo для установки системных пакетов, управления службами и настройки Docker.

  • Домен: Приложение настроено для работы в зоне hostkey.in.

  • Порты:

  • Внутренний порт приложения: 8080.

  • Внешний защищенный порт: 443.

FQDN конечной панели

Приложение доступно через полностью квалифицированное доменное имя (FQDN), сформированное с использованием префикса jenkins-marketplace-app и конкретного идентификатора сервера (Server ID). Формат:

jenkins-marketplace-app<Server ID>.hostkey.in:443

Замените <Server ID> на фактический идентификатор, назначенный экземпляру сервера.

Структура файлов и каталогов

Развертывание использует следующую структуру каталогов для конфигурации, данных и сертификатов:

  • /root/nginx: Каталог, содержащий конфигурацию Docker Compose для прокси-сервера.

  • /root/nginx/compose.yml: Файл Docker Compose, определяющий сервисы Nginx и Certbot.

  • /data/nginx/user_conf.d: Каталог для хранения пользовательских файлов конфигурации Nginx для приложения.

  • /data/nginx/user_conf.d/jenkins-marketplace-app<Server ID>.hostkey.in.conf: Специфичный файл конфигурации Nginx для экземпляра Jenkins.

  • /data/nginx/nginx-certbot.env: Файл окружения для контейнера Nginx-Certbot.

  • /etc/default/jenkins: Системный файл конфигурации службы Jenkins.

  • /usr/share/keyrings/jenkins-keyring.asc: GPG-ключ для репозитория Jenkins.

  • /etc/letsencrypt: Точка монтирования тома для SSL-сертификатов, управляемых контейнером прокси.

Процесс установки приложения

Приложение Jenkins устанавливается как нативная системная служба с использованием официального репозитория Jenkins. Процесс включает следующие шаги:

  1. Подготовка системы: Индекс пакетов обновляется, и устанавливаются необходимые зависимости, такие как fontconfig и openjdk-21-jre-headless.

  2. Настройка репозитория: GPG-ключ Jenkins загружается и добавляется в системное кольцо ключей. Официальный репозиторий Debian Jenkins добавляется в источники APT.

  3. Установка пакета: Пакет jenkins устанавливается через менеджер пакетов apt.

  4. Настройка Java: Переменная JAVA_HOME определяется на основе установленного OpenJDK 21 JRE и явно устанавливается в файле /etc/default/jenkins, чтобы гарантировать использование службы правильной среды выполнения Java.

  5. Активация службы: Служба Jenkins включается для запуска при загрузке системы и запускается немедленно.

Контейнеры Docker и их развертывание

Обратный прокси-сервер и слой терминации SSL развертываются с использованием Docker. Для развертывания используется файл docker compose, расположенный по пути /root/nginx/compose.yml.

Конфигурация контейнера включает:

  • Образ: jonasal/nginx-certbot:latest.

  • Политика перезапуска: unless-stopped.

  • Режим сети: host.

  • Переменные окружения:

  • CERTBOT_EMAIL: Установлено значение hkadm@hostkey.com.

  • Томы:

  • nginx_secrets: Монтирован в /etc/letsencrypt для хранения SSL-сертификатов.

  • /data/nginx/user_conf.d: Монтирован в /etc/nginx/user_conf.d для предоставления пользовательских конфигураций Nginx.

Контейнер запускается с помощью команды:

docker compose up -d
выполненной из каталога /root/nginx.

Прокси-серверы

Приложение обслуживается контейнером Nginx, работающим с Certbot для управления SSL.

  • Конфигурация прокси: Файл конфигурации Nginx для приложения находится по пути /data/nginx/user_conf.d/jenkins-marketplace-app<Server ID>.hostkey.in.conf.

  • Маршрутизация: Прокси настроен на пересылку запросов с корневого пути (/) на внутренний экземпляр Jenkins.

  • Целевой бэкенд: Прокси передает трафик на http://127.0.0.1:8080.

  • SSL/TLS: SSL-сертификаты автоматически управляются контейнером nginx-certbot с использованием тома letsencrypt.

Настройки прав доступа

К критическим каталогам и файлам применяются следующие настройки прав доступа:

  • /root/nginx: Владелец root:root, режим 0755.

  • /root/nginx/compose.yml: Владелец root:root, режим 0644.

  • /usr/share/keyrings/jenkins-keyring.asc: Режим 0644.

  • /etc/default/jenkins: Изменяется процессом установки для установки переменной JAVA_HOME.

Расположение файлов конфигурации и данных

Основные файлы конфигурации и места хранения данных приведены ниже:

Файл или каталог Путь Описание
Docker Compose /root/nginx/compose.yml Определяет контейнеры Nginx и Certbot.
Конфигурация Nginx /data/nginx/user_conf.d/jenkins-marketplace-app<Server ID>.hostkey.in.conf Пользовательские правила прокси для Jenkins.
Окружение Nginx /data/nginx/nginx-certbot.env Переменные окружения для контейнера прокси.
Конфигурация Jenkins /etc/default/jenkins Конфигурация системной службы, включая JAVA_HOME.
SSL-сертификаты /etc/letsencrypt Точка монтирования тома для SSL-сертификатов.
GPG-ключ /usr/share/keyrings/jenkins-keyring.asc Ключ подписи репозитория.

Доступные порты для подключения

Приложение открывает следующие порты:

  • Порт 443: HTTPS-трафик, обрабатываемый контейнером прокси Nginx. Это основная точка входа для внешних пользователей.

  • Порт 8080: Внутренний HTTP-трафик, используемый приложением Jenkins. Этот порт связан с 127.0.0.1 и доступен локально только прокси-серверу.

Запуск, остановка и обновление

Приложение Jenkins управляется как нативная служба systemd, в то время как прокси управляется через Docker Compose.

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

  • Запустить службу:

    systemctl start jenkins
    

  • Остановить службу:

    systemctl stop jenkins
    

  • Перезапустить службу:

    systemctl restart jenkins
    

  • Проверить статус службы:

    systemctl status jenkins
    

  • Включить службу при загрузке:

    systemctl enable jenkins
    

Управление контейнером прокси:

  • Запустить или перезапустить стек прокси:

    cd /root/nginx
    docker compose up -d
    

  • Остановить стек прокси:

    cd /root/nginx
    docker compose down
    

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×