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

Установка GitLab CE с PostgreSQL и Nginx на Ubuntu 15.04

• 8 min read • DevOps • Обновлено 22 Nov 2025
Установка GitLab CE на Ubuntu 15.04 — PostgreSQL и Nginx
Установка GitLab CE на Ubuntu 15.04 — PostgreSQL и Nginx

Коротко о решении

GitLab — веб‑приложение для управления Git‑репозиториями, написанное на Ruby. Часто сравним с GitHub, но ориентировано на развёртывание на собственном сервере. Вариант Community Edition (CE) покрывает большинство потребностей для внутреннего самоуправляемого Git‑сервера.

Важно: исходная инструкция ориентирована на Ubuntu 15.04 и GitLab 8.x; эти версии устарели. В разделе «Совместимость и миграция» ниже есть советы, как адаптировать шаги под современные релизы или использовать Omnibus‑пакет.

Основные понятия

  • GitLab CE — бесплатная версия с большинством функций.
  • GitLab Workhorse — небольшой прокси на Go для HTTP‑запросов к Git.
  • Unicorn — приложение Rails‑сервер для GitLab (в старых релизах).
  • Omnibus — альтернативный упаковочный установщик, содержащий все зависимости.

Содержание статьи

  • Требования и подготовка
  • Установка зависимостей, Ruby и Go
  • Создание системного пользователя и настройка PostgreSQL
  • Настройка Redis
  • Установка и конфигурация GitLab CE
  • Инициализация базы и запуск
  • Настройка Init‑скрипта и Nginx
  • Технические дополнения: безопасность, резервные копии, отладка и тесты
  • Чек-листы роли (админ / devops / разработчик)
  • План отката и runbook при ошибках
  • Совместимость и варианты установки

Требования и подготовка

  • Ubuntu 15.04 x86_64 (64‑бит). Если у вас другая версия — см. раздел миграции.
  • CPU: минимум 2 ядра (рекомендация GitLab).
  • ОЗУ: минимум 2 ГБ (рекомендация GitLab).
  • Права root или sudo.

Важное: Ubuntu 15.04 больше не поддерживается официально. Для продакшен‑среды рекомендуются LTS‑релизы (например, Ubuntu 18.04/20.04/22.04) или использовать Omnibus‑пакет для упрощения зависимостей.

Шаг 1 — Обновление системы

Перед установкой зависимостей обновите индекс пакетов. Подключитесь по SSH, станьте root и обновите репозитории:

sudo su  
apt-get update

Шаг 2 — Установка зависимостей GitLab

GitLab требует множество библиотек: redis, git, nodejs, postfix и пр. Установим их одной командой:

sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake nodejs git-core postfix

Примечание: при установке postfix выберите режим “internet site” и подтвердите hostname.

Проверьте версию git — должна быть >= 1.7.x:

git --version  
# например: git version 2.1.4

Шаг 3 — Установка Ruby и Go

GitLab требует Ruby 2.x. В этой инструкции сборка Ruby происходит из исходников (пример: 2.1.7 в оригинальной статье). Если на сервере уже есть Ruby и он конфликтует, удалите старую версию:

apt-get remove ruby -y

Создаём директорию для исходников Ruby и собираем из tarball:

mkdir -p /tmp/ruby && cd /tmp/ruby
curl -O --progress https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.7.tar.gz
echo 'e2e195a4a58133e3ad33b955c829bb536fa3c075  ruby-2.1.7.tar.gz' | shasum -c - && 
tar xzf ruby-2.1.7.tar.gz && 
cd ruby-2.1.7
./configure --disable-install-rdoc --prefix=/usr/local
make
make install

Далее установим Go — он нужен для сборки gitlab‑workhorse (в исходной инструкции использовалась версия go1.5.1):

mkdir -p /tmp/go && cd /tmp/go
curl -O --progress https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
echo '46eecd290d8803887dec718c691cc243f2175fe0  go1.5.1.linux-amd64.tar.gz' | shasum -c - && 
sudo tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/

После этого Ruby и Go будут доступны в системе.

Шаг 4 — Создание системного пользователя и настройка PostgreSQL

Создадим системного пользователя git, под которым будет работать GitLab:

sudo adduser --disabled-login --gecos 'GitLab' git

Установим PostgreSQL и клиентские библиотеки:

sudo apt-get install -y postgresql postgresql-client libpq-dev

Создаём роль/пользователя postgres и базу для GitLab:

sudo -u postgres psql -d template1
CREATE USER git CREATEDB;
CREATE DATABASE gitlabhq_production OWNER git;
\q
sudo -u git -H psql -d gitlabhq_production

Создание базы данных в PostgreSQL.

После этих шагов у вас должен существовать системный пользователь “git” и роль PostgreSQL “git” с базой gitlabhq_production.

Шаг 5 — Настройка Redis

Резервная копия конфигурации Redis и правки, чтобы Redis слушал unix‑сокет (рекомендуется для производительности и безопасности):

cd /etc/redis/
cp redis.conf redis.conf.original
vim redis.conf

Найдите параметр прослушивания и укажите значение 0, чтобы не слушать TCP‑порт (в оригинале строка около 45):

Listen 0

В конец файла добавьте параметры unix‑socket и права:

unixsocket /var/run/redis/redis.sock
unixsocketperm 777

Создайте каталог для сокета и установите владельца и права:

mkdir -p /var/run/redis
chown redis:redis /var/run/redis
chmod 755 /var/run/redis

Добавьте правило в tmpfiles.d (если директория существует):

cd /var/run/redis
if [ -d /etc/tmpfiles.d ]; then
  echo 'd  /var/run/redis  0755  redis  redis  10d  -' | sudo tee -a /etc/tmpfiles.d/redis.conf
fi

Перезапустите Redis и добавьте пользователя git в группу redis:

sudo service redis-server restart
sudo usermod -aG redis git

Шаг 6 — Установка GitLab CE из исходников

Клонируем нужную ветку GitLab CE (в примере 8-2-stable):

cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-2-stable gitlab

Конфигурация GitLab

cd /home/git/gitlab
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo chown -R git {log,tmp}
mkdir -p public/uploads/
sudo chmod -R u+rwX,go-w log/
sudo chmod -R u+rwX {tmp,tmp/pids,tmp/sockets,builds,shared/artifacts}
sudo chmod -R 0750 public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
sudo -u git -H git config --global core.autocrlf input
sudo -u git -H cp config/resque.yml.example config/resque.yml
# затем отредактируйте config/resque.yml, чтобы указать REDIS_URL unix:/var/run/redis/redis.sock

Конфигурация базы данных

sudo -u git -H cp config/database.yml.postgresql config/database.yml
sudo -u git -H chmod o-rwx config/database.yml

Установка гемов

sudo gem install bundler
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos

Установка gitlab-shell (SSH доступ)

sudo -u git -H bundle exec rake gitlab:shell:install[v2.6.8] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production

Установка gitlab-workhorse (на Go)

cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H git checkout 0.4.2
sudo -u git -H make

Инициализация базы данных и активация фич

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

При выполнении будет предложено ввести “yes” для создания таблиц. В результате создаётся учётная запись root с паролем по умолчанию (в оригинале пароль: 5iveL!fe).

Учётная запись root создана с паролем по умолчанию

Запомните: смените пароль root сразу после входа в систему.

Шаг 7 — Init‑скрипт и управление сервисами

Скопируйте init‑скрипт и сделайте автозапуск при старте системы, а также настройте logrotate:

sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
sudo update-rc.d gitlab defaults 21
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
/etc/init.d/gitlab start

Запуск GitLab: вывод статуса сервиса

Шаг 8 — Установка и настройка Nginx

Установим Nginx и подключим виртуальный хост из примера GitLab:

apt-get install nginx -y
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo rm /etc/nginx/sites-enabled/default
sudo vim /etc/nginx/sites-available/gitlab

Отредактируйте блок HTTP: укажите порт и ServerName (например my.gitlab.me):

Listen *:80; #Port Default
#Listen 0.0.0.0:80; #comment one of this
ServerName my.gitlab.me; #Gitlab FQDN/Domain

Активируйте сайт и перезапустите сервисы:

sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
service nginx start
/etc/init.d/gitlab restart

Теперь GitLab доступен по указанному домену; войдите под root и измените пароль.

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

Интерфейс GitLab: обзор проекта

GitLab успешно установлен: панель проекта

Важное: если возникает ошибка 502 Bad Gateway, возможные причины — таймаут Unicorn/nginx, переполнение очереди, недостаток ресурсов или неправильная конфигурация gitlab‑workhorse.

Ошибка 502 Bad Gateway в GitLab

Если встречаете 502, попробуйте увеличить таймаут Unicorn или увеличить ресурсы сервера (ОЗУ/CPU).

Раздел: Дополнительные рекомендации и практики

Факт‑бокс: ключевые числа и настройки (ориентир)

  • Минимальные ресурсы: 2 vCPU, 2 ГБ RAM (для небольшой инсталляции).
  • Рекомендации для команды среднего размера: 4 vCPU, 8–16 ГБ RAM.
  • Redis — unix‑сокет /var/run/redis/redis.sock.
  • PostgreSQL — база gitlabhq_production, владелец git.
  • Пользователь GitLab в системе: git.

(Это ориентиры, не жёсткие требования — нагрузка зависит от числа пользователей, CI‑задач и репозиториев.)

Когда этот способ не подходит (контрпримеры)

  • Если вы хотите быстро развернуть GitLab с минимальной настройкой — используйте Omnibus‑пакет.
  • Для облачных, управляемых сервисов лучше рассмотреть GitLab.com или специальных провайдеров.
  • Если у вас устаревшая Ubuntu (как 15.04) — лучше сначала обновиться до поддерживаемого LTS.

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

  • Omnibus‑пакет (официальный): поставляет все зависимости в одном пакете и проще в поддержке.
  • Docker/Compose: контейнеризация для изоляции сервисов (Postgres, Redis, GitLab).
  • Helm chart для Kubernetes: для крупномасштабных инсталляций.

Модель принятия решения (ментальные эвристики)

  • Нужен полный контроль и локальная инфраструктура → устанавливайте CE вручную или через Omnibus.
  • Хотите быстро и с меньшим обслуживанием → Omnibus или Docker.
  • Планируется масштабирование и высокие нагрузки → контейнеры/Orchestration + отдельные БД/кэш.

Чек‑лист по ролям

Администратор сервера:

  • Установил обновления и пакеты системы.
  • Создал пользователя git и настроил разрешения.
  • Настроил резервное копирование PostgreSQL и дампов.

DevOps / SRE:

  • Настроил мониторинг: CPU, RAM, диск, latency Unicorn/nginx.
  • Настроил logrotate и ротацию бэкапов.
  • Настроил TLS/SSL для Nginx и HSTS.

Разработчик:

  • Получил доступ SSH ключом и проверил push/pull в тестовый репозиторий.
  • Проверил CI‑задачи (если настроены).

Runbook: типичные ошибки и шаги восстановления

Симптом: 502 Bad Gateway

  1. Проверьте статус Unicorn/gitlab‑workhorse/nginx:
ps aux | egrep 'unicorn|gitlab-workhorse|nginx'
/etc/init.d/gitlab status
service nginx status
  1. Проверьте логи GitLab:
tail -n 200 /home/git/gitlab/log/unicorn.stderr.log
tail -n 200 /var/log/nginx/gitlab_error.log
  1. Если проблема в таймаутах — откройте config/unicorn.rb и увеличьте worker_timeout (или аналогичный параметр). Перезапустите GitLab:
sudo -u git -H vim config/unicorn.rb
/etc/init.d/gitlab restart
  1. Если проблема в Redis/Postgres — убедитесь, что сокеты доступны и права корректны. Проверьте /var/run/redis/redis.sock и доступ пользователя git.

Rollback / откат до предыдущей версии кода:

  1. Откат через git в каталоге /home/git/gitlab: переключиться на commit/тег.
  2. Выполнить bundle install и rake db:migrate при необходимости.
  3. Перезапустить сервисы.

Безопасность и hardening (минимальные шаги)

  • Настройте брандмауэр: откройте 80/443 и SSH (22 или нестандартный порт).
  • Включите HTTPS: используйте Let’s Encrypt или корпоративный сертификат в конфигурации Nginx.
  • Ограничьте доступ к PostgreSQL и Redis локальными сокетами или firewall.
  • Снимайте и храните бэкапы базы и репозиториев вне узла.
  • Регулярно обновляйте пакеты и GitLab до поддерживаемых версий.

Критерии приёмки

  • Вход в веб‑интерфейс GitLab под root работает и пароль сменён.
  • Создание нового проекта и push через SSH/HTTP проходит.
  • Сервис выдерживает базовую нагрузку команды (push + clone нескольких репозиториев).
  • Backup/restore тест пройден хотя бы на тестовой среде.

Тесты и критерии приёмки (минимальные)

  • Автотест: клонирование пустого репозитория → успешный clone.
  • Отправка (push) файла 1 МБ → успешный push.
  • Авторизация по SSH ключу → доступ.
  • Веб‑страницы рендерятся за < 3 сек при нормальной нагрузке.

Шаблоны: полезные сниппеты конфигурации

Пример секции server для Nginx (адаптируйте под свой домен, сохраняйте сертификаты отдельно):

# /etc/nginx/sites-available/gitlab
upstream gitlab_unicorn {
  server unix:/home/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0;
}
server {
  listen 80;
  server_name my.gitlab.me;
  root /home/git/gitlab/public;
  location / {
    try_files $uri $uri/index.html $uri.html @gitlab;
  }
  location @gitlab {
    proxy_pass http://gitlab_unicorn;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

Пример правок в config/unicorn.rb (увеличение таймаута):

worker_processes 2
timeout 60
listen '/home/git/gitlab/tmp/sockets/gitlab.socket', :backlog => 64

Совместимость и миграция (советы)

  • Ubuntu 15.04 устарел. Для долгосрочного продакшена используйте LTS‑релизы Ubuntu (18.04, 20.04, 22.04).
  • При миграции данных: делайте pg_dump и реплики каталога repos/; тестируйте восстановление в изолированной среде.
  • Рассмотрите Omnibus GitLab (пакеты для Debian/Ubuntu) — упрощает установку и обновления.

Decision tree: выбрать способ установки

flowchart TD
  A[Нужен GitLab] --> B{Требуется быстрый разворот?}
  B -- Да --> C[Omnibus / Docker]
  B -- Нет --> D{Нужен полный контроль?}
  D -- Да --> E[Сборка из исходников]
  D -- Нет --> C
  E --> F{Использовать современные версии OS?}
  F -- Да --> G[Сборка + PostgreSQL + Redis]
  F -- Нет --> H[Рассмотреть обновление ОС или контейнер]

Короткая методология резервного копирования (mini SOP)

  1. Остановить write‑операции (по возможности).
  2. Сделать pg_dump с уровня filesystem backup репозиториев (/home/git/gitlab/repositories).
  3. Архивировать git‑репозитории и копировать дистрибутивы в защищённое хранилище.
  4. Проверить restore в тестовой среде.

Локальные особенности для России / примечания

  • При использовании внешних сервисов для загрузки (golang, ruby tarballs) проверьте доступность и зеркала; при ограничениях сети подготовьте локальные mirror‑хранилища.
  • Убедитесь в соответствии хранения персональных данных локальным требованиям (если GitLab хранит персональные данные) — настройте доступы и журналы.

Короткое объявление (100–200 слов)

Краткое сообщение для внутреннего канала: мы развернули GitLab CE на Ubuntu 15.04 с использованием PostgreSQL и Nginx. Инсталляция включает настройку Redis через unix‑сокет, сборку Ruby и Go, установку gitlab‑shell и gitlab‑workhorse. Root‑учётная запись создана по умолчанию — смените пароль сразу. Для продакшена рекомендуем рассмотреть использование Omnibus‑пакета или перенос на поддерживаемую LTS‑версию Ubuntu. В инструкции приведён runbook для устранения ошибок 502 и рекомендации по бэкапам и безопасности.

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

  • GitLab CE можно собрать вручную, но это требует управления множеством зависимостей.
  • Omnibus или контейнеры облегчают установку и дальнейшие обновления.
  • Наличие резервных копий и мониторинга критично для надёжной работы.

Авторский вывод: если цель — быстрый запуск и простота поддержки — используйте Omnibus или контейнеры; если нужен полный контроль и тонкая настройка — шаги данной инструкции помогут развернуть GitLab CE вручную. Всегда тестируйте бэкапы и обновления на тестовой среде перед продакшеном.

Поделиться: 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 быстро