Установка GitLab CE с PostgreSQL и Nginx на Ubuntu 15.04
Коротко о решении
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
После этих шагов у вас должен существовать системный пользователь “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 сразу после входа в систему.
Шаг 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
Шаг 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 и измените пароль.



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

Если встречаете 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
- Проверьте статус Unicorn/gitlab‑workhorse/nginx:
ps aux | egrep 'unicorn|gitlab-workhorse|nginx'
/etc/init.d/gitlab status
service nginx status- Проверьте логи GitLab:
tail -n 200 /home/git/gitlab/log/unicorn.stderr.log
tail -n 200 /var/log/nginx/gitlab_error.log- Если проблема в таймаутах — откройте config/unicorn.rb и увеличьте worker_timeout (или аналогичный параметр). Перезапустите GitLab:
sudo -u git -H vim config/unicorn.rb
/etc/init.d/gitlab restart- Если проблема в Redis/Postgres — убедитесь, что сокеты доступны и права корректны. Проверьте /var/run/redis/redis.sock и доступ пользователя git.
Rollback / откат до предыдущей версии кода:
- Откат через git в каталоге /home/git/gitlab: переключиться на commit/тег.
- Выполнить bundle install и rake db:migrate при необходимости.
- Перезапустить сервисы.
Безопасность и 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)
- Остановить write‑операции (по возможности).
- Сделать pg_dump с уровня filesystem backup репозиториев (/home/git/gitlab/repositories).
- Архивировать git‑репозитории и копировать дистрибутивы в защищённое хранилище.
- Проверить 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 вручную. Всегда тестируйте бэкапы и обновления на тестовой среде перед продакшеном.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента