Гид по технологиям

Установка и настройка GoCD на Ubuntu 22.04

• 8 min read • DevOps • Обновлено 26 Nov 2025
GoCD на Ubuntu 22.04 — установка и настройка
GoCD на Ubuntu 22.04 — установка и настройка

Логотип GoCD и обзор архитектуры

GoCD — это система непрерывной доставки и автоматизации с открытым исходным кодом. Она хорошо подходит для моделирования сложных CD-процессов благодаря выраженной модели конвейеров, выполнению задач в параллели и управлению зависимостями. GoCD помогает быстро находить причину сбоя пайплайна, отслеживая изменения «от коммита до деплоя» в реальном времени, сравнивать сборки и разворачивать любую версию приложения.

В этой инструкции показано, как установить и настроить GoCD на Ubuntu 22.04, включая конфигурацию брандмауэра, PostgreSQL, SSL через Certbot, обратного прокси через Nginx, а также базовую аутентификацию и агентов.

Чем вы будете управлять

  • Сервер GoCD (go-server)
  • Агент GoCD (go-agent)
  • База данных PostgreSQL (рекомендуется для продакшна)
  • Обратный прокси Nginx с SSL
  • Управление артефактами и пользователями

Кому это подходит

  • Инженерам DevOps и инженерам по платформе
  • Администраторам Linux, настраивающим CI/CD
  • Командам, которые хотят централизовать деплойменты и артефакты

Основные термины

  • Сервер GoCD — центральный компонент, управляющий пайплайнами.
  • Агент GoCD — процесс, выполняющий задания (job) на выделенной машине.
  • Артефакты — файлы, которые сохраняются после сборки (пакеты, логи, изображения).

Требования

  1. Сервер с Ubuntu 22.04 и минимум 2 ГБ оперативной памяти.
  2. Непривилегированный пользователь с правами sudo.
  3. UFW (Uncomplicated Firewall) включён и настроен.
  4. FQDN, указывающее на сервер (в примере используется gocd.example.com).
  5. Система обновлена:
$ sudo apt update && sudo apt upgrade

Важно: в продакшне выделите отдельный диск или раздел для хранения артефактов, если ожидается большой объём данных.

Шаг 1 — Настройка брандмауэра

Откройте порты для HTTP, HTTPS и порта GoCD.

Проверка состояния UFW:

$ sudo ufw status

Откройте порты:

$ sudo ufw allow 8153
$ sudo ufw allow http
$ sudo ufw allow https

Проверьте статус ещё раз:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8153                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8153 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Совет: если у вас нестандартные правила доступа, ограничьте доступ к портам только доверенным IP-адресам.

Шаг 2 — Установка GoCD

Импортируйте GPG-ключ GoCD:

$ curl https://download.gocd.org/GOCD-GPG-KEY.asc | gpg --dearmor | sudo tee /usr/share/keyrings/gocd.gpg > /dev/null 2>&1

Добавьте репозиторий GoCD:

$ echo "deb [signed-by=/usr/share/keyrings/gocd.gpg] https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list

Обновите список пакетов и установите сервер GoCD:

$ sudo apt update
$ sudo apt install -y go-server

Создайте директорию для артефактов и назначьте владельца:

$ sudo mkdir /opt/artifacts
$ sudo chown -R go:go /opt/artifacts

Примечание: в примере артефакты хранятся на том же диске. Для высокого уровня надёжности используйте отдельный диск или сетьевой том.

Шаг 3 — Установка и настройка PostgreSQL

GoCD по умолчанию использует H2, но для продакшн рекомендуется PostgreSQL.

Добавьте официальный репозиторий PostgreSQL (устанавливаем PostgreSQL 15):

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
$ sudo apt update
$ sudo apt install -y postgresql postgresql-contrib

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

$ sudo systemctl status postgresql

Создайте базу данных и пользователя для GoCD:

$ sudo -i -u postgres psql
postgres=# CREATE DATABASE "gocd" ENCODING="UTF8" TEMPLATE="template0";
postgres=# CREATE ROLE "gocd_database_user" PASSWORD 'gocd_database_password' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
postgres=# GRANT ALL PRIVILEGES ON DATABASE "gocd" TO "gocd_database_user";
postgres-=# ALTER ROLE "gocd_database_user" SUPERUSER;
postgres=# \q

Важно: роли требуют привилегий суперпользователя только при первом старте сервера, чтобы создать расширения pgcrypto и citext. После первого запуска рекомендуется отозвать привилегии SUPERUSER.

Сохраните параметры подключения в /etc/go/db.properties:

$ sudo nano /etc/go/db.properties

Вставьте:

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/gocd
db.user=gocd_database_user
db.password=gocd_database_password

Сохраните файл.

Безопасность: хранение пароля в открытом виде безопаснее разместить с правами доступа 640 или жёстче и принадлежащим пользователю go. Например:

$ sudo chown root:go /etc/go/db.properties
$ sudo chmod 640 /etc/go/db.properties

Шаг 4 — Запуск и базовая настройка GoCD

Запустите сервер GoCD и проверьте статус:

$ sudo systemctl start go-server
$ sudo systemctl status go-server

Откройте дашборд:

  • HTTP: http://:8153/
  • HTTPS (админ-порт): https://:8154

Игнорируйте предупреждение о самоподписанном сертификате, если вы ещё не настроили SSL через Nginx/Certbot.

Домашняя страница GoCD

Перейдите в Admin → Server Configuration и добавьте Site URL, затем сохраните.

Меню конфигурации сервера GoCD

Перейдите в Artifacts Management и укажите /opt/artifacts. Включите либо отключите автозачистку в зависимости от политики хранения.

Управление артефактами GoCD

Настройте параметры почты в Admin → Configuration → Email Server и сделайте тестовую отправку.

Опции почтового сервера GoCD

После любых настроек перезапустите сервер:

$ sudo systemctl restart go-server

Шаг 5 — Аутентификация пользователей

По умолчанию GoCD открыт. Для ограничения доступа можно настроить аутентификацию по паролю или LDAP. В этом руководстве — файл паролей bcrypt.

Установите утилиты Apache для htpasswd:

$ sudo apt install apache2-utils

Создайте файл паролей с bcrypt:

$ sudo htpasswd -B -c /etc/go/passwd_auth navjot

Добавлять других пользователей можно без флага -c:

$ sudo htpasswd -B /etc/go/passwd_auth gouser1

В UI GoCD: Admin → Security → Authorization Configuration → Add. Выберите Password File Authentication Plugin for GoCD и укажите путь /etc/go/passwd_auth. Проверьте соединение и сохраните.

Конфигурация авторизации GoCD

Импортируйте новых пользователей в Admin → Security → Users Management → Import User.

Страница входа GoCD

Отметьте SYSTEM ADMIN для администратора в Users Management.

Управление пользователями GoCD

После включения опции “Allow only known users to login” вход разрешён только для импортированных пользователей.

Импорт пользователя GoCD

Список пользователей GoCD

Шаг 6 — Установка Nginx

Чтобы получить более свежую версию Nginx, подключите официальный репозиторий.

Импорт ключа и добавление репозитория:

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
$ sudo apt update
$ sudo apt install nginx

Проверка версии:

$ nginx -v
nginx version: nginx/1.22.1

Запустите Nginx:

$ sudo systemctl start nginx

Шаг 7 — Установка SSL через Certbot

Установим Certbot через snap и создадим сертификат для gocd.example.com.

Обновите snap core и установите certbot:

$ sudo snap install core
$ sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Получение сертификата (пример):

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d gocd.example.com

Сертификат появится в /etc/letsencrypt/live/gocd.example.com.

Создайте параметр Диффи-Хеллмана:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проверьте dry-run автоматического обновления:

$ sudo certbot renew --dry-run

Если ошибок нет, автоматическое обновление настроено.

Шаг 8 — Конфигурация Nginx для GoCD

Откройте /etc/nginx/nginx.conf и добавьте перед include строку:

server_names_hash_bucket_size  64;

Создайте /etc/nginx/conf.d/gocd.conf и вставьте конфигурацию обратного прокси. (Файл в оригинале оставлен без изменений и должен быть вставлен как есть.)

Конфигурация содержит важные параметры:

  • Проксирование к http://localhost:8153/
  • client_max_body_size установлен на 10000m (≈ 10 000 МБ, ~10 ГБ)
  • Настройки SSL, OCSP stapling и dhparam

Проверьте синтаксис Nginx и перезапустите:

$ sudo nginx -t
$ sudo systemctl restart nginx

После этого GoCD будет доступен по https://gocd.example.com

Шаг 9 — Установка GoCD Agent

Установите агент на сервере (или на отдельной машине для масштабирования):

$ sudo apt install go-agent
$ sudo systemctl start go-agent

В UI Agents вы увидите подключённый агент.

Список агентов GoCD

Агенты можно запускать в докере, на VM или в облачных инстансах. В продакшне рекомендуется выделять агенты под требовательные задачи (например, сборки с большими контейнерами).

Резервное копирование и восстановление

Ключевые директории для бэкапа:

  • /var/lib/go-server — состояние сервера и конфиги
  • /etc/go — конфигурационные файлы, включая db.properties
  • /opt/artifacts — артефакты
  • PostgreSQL: дамп базы данных (pg_dump)

Пример простой процедуры бэкапа:

# дамп БД
$ sudo -i -u postgres pg_dump -Fc gocd > /var/backups/gocd-db-$(date +%F).dump
# архив конфигов и артефактов
$ sudo tar -czf /var/backups/gocd-configs-$(date +%F).tar.gz /etc/go /opt/artifacts

Критерии восстановления:

  • Восстановлен сервис go-server и отвечает на порт 8153
  • Все агенты зарегистрированы и находятся в enabled state
  • Артефакты доступны и пути не изменились

Важно: тестируйте процедуру восстановления регулярно.

Безопасность и жёсткие настройки

Рекомендации по безопасности:

  • Используйте HTTPS через Nginx и Certbot.
  • Запретите прямой доступ к порту 8153 извне (доступ только с localhost или из доверенной сети).
  • Ограничьте права к /etc/go/db.properties (chmod 640).
  • Регулярно обновляйте Java и пакеты системы.
  • Ограничьте доступ к UI через брандмауэр и VPN при необходимости.

Пример правила UFW для закрытия 8153 извне, разрешив только localhost и Nginx на сервере:

$ sudo ufw deny in 8153/tcp
# если Nginx проксирует локально, доступ через 8153 не нужен извне

Настройка масштабируемых агентов и балансировка

  • Для увеличения параллелизма добавляйте агентов. Каждый агент может выполнять одну задачу одновременно (по умолчанию).
  • Используйте метки (elastic agents или elastic profiles в GoCD) для разделения типов агентов (docker, windows, mac).
  • В облаке — автоматический скейлинг: запускать агенты по событию в очереди задач.

Тестирование и приёмка

Критерии приёмки установки:

  1. GoCD сервер доступен по HTTPS на gocd.example.com.
  2. В конфигурации указан путь к артефактам /opt/artifacts и тестовая отправка почты работает.
  3. Минимум один агент зарегистрирован и отображается в UI как Enabled.
  4. Подключение к PostgreSQL установлено и таблицы созданы.
  5. Резервная копия БД и конфигураций сделана и проверена на тестовом восстановлении.

Отказоустойчивость и масштабирование

  • Для HA можно настроить кластерирование агентов и использовать внешний сторедж для артефактов (S3, NFS).
  • Сервер GoCD сам по себе не спроектирован для active-active нативно; для критичных нагрузок используйте регулярные бэкапы и реплику базы данных.

Тонкости и возможные проблемы

  1. Проблема: агент в UI показывает «Pending».

    • Проверьте логи агента: /var/log/go-agent
    • Убедитесь, что версии агента и сервера совместимы.
    • Проверьте, что агент может достучаться до сервера по порту 8153.
  2. Проблема: ошибки при подключении к PostgreSQL.

    • Проверьте db.properties и права доступа.
    • Убедитесь, что пользователь имеет корректные привилегии и база существует.
  3. Проблема: ошибки загрузки больших артефактов.

    • Увеличьте client_max_body_size в конфигурации Nginx (например, 10000m ≈ 10 ГБ).
    • При скачивании больших файлов отключите proxy buffering или увеличьте proxy_max_temp_file_size.

Руководство на случай инцидента и отката

Если после обновления GoCD сайт перестал работать:

  1. Отключите Nginx как proxy, чтобы проверить доступность go-server напрямую: curl http://localhost:8153
  2. Откатите обновление GoCD или восстановите бэкап /var/lib/go-server и базы PostgreSQL.
  3. Запустите агент в режиме отладки и соберите логи для анализа.

Полезные чеклисты

Чеклист для запуска продакшн-инстанса:

  • Сервер обновлён и запущен под системой мониторинга
  • Настроен PostgreSQL и db.properties
  • Nginx с SSL и OCSP настроены
  • Директория артефактов выделена и права установлены
  • Как минимум один агент зарегистрирован и проверен
  • Резервная копия БД и конфигов проверена
  • Политика ротации артефактов и логов задокументирована

Роль-ориентированные задачи:

  • Администратор сервера: установка пакетов, настройка брандмауэра, резервирование томов.
  • Инженер DevOps: настройка пайплайнов, агентов, интеграции SCM и артефактов.
  • Безопасность: ревью конфигураций SSL, проверка прав доступа к конфигам и ключам.

Альтернативы и когда GoCD не подходит

  • Если вам нужен исключительно простая CI-система без сложной модели пайплайнов, рассмотрите GitHub Actions или GitLab CI.
  • Для полностью управляемого облачного решения с интеграциями и встроенным скейлингом можно выбрать облачные CI/CD сервисы.
  • GoCD хорош при сложных конвейерах и желании полного контроля над инфраструктурой.

Модель принятия решения

  • Нужна сложная модель зависимостей между этапами → GoCD
  • Нужен SaaS с минимальным администрированием → облачный CI/CD
  • Необходим гибкий контроль артефактов и ручной триггер релизов → GoCD

Подсказки по производительности

  • Поддерживайте актуальную Java Runtime, т.к. GoCD использует JRE.
  • Ограничивайте объём данных на агенте и используйте отдельные тома для сборок.
  • Периодически чистите старые артефакты или настраивайте политику хранения.

Сопровождение и миграция

При переносе на новый сервер:

  1. Остановите go-server на старом хосте.
  2. Сделайте дамп БД и бэкап /var/lib/go-server и /etc/go.
  3. Восстановите дамп в новой базе и скопируйте каталоги.
  4. Обновите записи DNS на новый IP и проверьте доступ через Nginx.

Краткое резюме

Вы установили GoCD на Ubuntu 22.04, подключили PostgreSQL, настроили Nginx с SSL, добавили агента и включили базовую аутентификацию. В руководстве также приведены рекомендации по безопасности, резервному копированию, масштабированию агентов и базовые сценарии восстановления.

Важно: адаптируйте параметры (путь к артефактам, порты, политики хранения) под ваши бизнес-требования.

Если есть вопросы по конкретным шагам или вы хотите шаблоны systemd, Terraform или Docker-конфигурации для агентов — напишите, и я помогу подготовить их.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро