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

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) на выделенной машине.
- Артефакты — файлы, которые сохраняются после сборки (пакеты, логи, изображения).
Требования
- Сервер с Ubuntu 22.04 и минимум 2 ГБ оперативной памяти.
- Непривилегированный пользователь с правами sudo.
- UFW (Uncomplicated Firewall) включён и настроен.
- FQDN, указывающее на сервер (в примере используется gocd.example.com).
- Система обновлена:
$ 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.

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

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

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

После любых настроек перезапустите сервер:
$ 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. Проверьте соединение и сохраните.

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

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

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


Шаг 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 вы увидите подключённый агент.

Агенты можно запускать в докере, на 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).
- В облаке — автоматический скейлинг: запускать агенты по событию в очереди задач.
Тестирование и приёмка
Критерии приёмки установки:
- GoCD сервер доступен по HTTPS на gocd.example.com.
- В конфигурации указан путь к артефактам /opt/artifacts и тестовая отправка почты работает.
- Минимум один агент зарегистрирован и отображается в UI как Enabled.
- Подключение к PostgreSQL установлено и таблицы созданы.
- Резервная копия БД и конфигураций сделана и проверена на тестовом восстановлении.
Отказоустойчивость и масштабирование
- Для HA можно настроить кластерирование агентов и использовать внешний сторедж для артефактов (S3, NFS).
- Сервер GoCD сам по себе не спроектирован для active-active нативно; для критичных нагрузок используйте регулярные бэкапы и реплику базы данных.
Тонкости и возможные проблемы
Проблема: агент в UI показывает «Pending».
- Проверьте логи агента: /var/log/go-agent
- Убедитесь, что версии агента и сервера совместимы.
- Проверьте, что агент может достучаться до сервера по порту 8153.
Проблема: ошибки при подключении к PostgreSQL.
- Проверьте db.properties и права доступа.
- Убедитесь, что пользователь имеет корректные привилегии и база существует.
Проблема: ошибки загрузки больших артефактов.
- Увеличьте client_max_body_size в конфигурации Nginx (например, 10000m ≈ 10 ГБ).
- При скачивании больших файлов отключите proxy buffering или увеличьте proxy_max_temp_file_size.
Руководство на случай инцидента и отката
Если после обновления GoCD сайт перестал работать:
- Отключите Nginx как proxy, чтобы проверить доступность go-server напрямую: curl http://localhost:8153
- Откатите обновление GoCD или восстановите бэкап /var/lib/go-server и базы PostgreSQL.
- Запустите агент в режиме отладки и соберите логи для анализа.
Полезные чеклисты
Чеклист для запуска продакшн-инстанса:
- Сервер обновлён и запущен под системой мониторинга
- Настроен 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.
- Ограничивайте объём данных на агенте и используйте отдельные тома для сборок.
- Периодически чистите старые артефакты или настраивайте политику хранения.
Сопровождение и миграция
При переносе на новый сервер:
- Остановите go-server на старом хосте.
- Сделайте дамп БД и бэкап /var/lib/go-server и /etc/go.
- Восстановите дамп в новой базе и скопируйте каталоги.
- Обновите записи DNS на новый IP и проверьте доступ через Nginx.
Краткое резюме
Вы установили GoCD на Ubuntu 22.04, подключили PostgreSQL, настроили Nginx с SSL, добавили агента и включили базовую аутентификацию. В руководстве также приведены рекомендации по безопасности, резервному копированию, масштабированию агентов и базовые сценарии восстановления.
Важно: адаптируйте параметры (путь к артефактам, порты, политики хранения) под ваши бизнес-требования.
Если есть вопросы по конкретным шагам или вы хотите шаблоны systemd, Terraform или Docker-конфигурации для агентов — напишите, и я помогу подготовить их.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента