Как на хостовой Ubuntu установить автономный GitLab (self-hosted) с помощью Vagrant
Primary tabs
Forums:
1. Создание Vagrant-проекта
Если с нуля
Предварительная установка окружения https://fkn.ktu10.com/?q=node/17436
и после этого собственно создание Vagrant-проекта такими командами:
mkdir ~/my-vagrant cd ~/my-vagrant vagrant init touch provision.sh chmod +x provision.sh
Если Vagrant-проект уже существует
Перейдём в папку проекта и создадим там файл provision.sh:
touch provision.sh chmod +x provision.sh
2. Создание локальных копий удалённых репозиторий в хостовой системе
Перед запуском виртуальной машины все микросервисы, указанные в Vagrantfile, должен уже находиться в папке проекта my-vagrant. Поэтому, из данной папки выполним такую команду для каждого репозитория:
git clone <АдресРепозитория>
Вместо <АдресРепозитория> подставьте URL вашего репозитория!
3. Редактирование Vagrantfile — замените содержимое файла на следующее:
# -*- mode: ruby -*-
Vagrant.configure("2") do |config|
# Используем официальную Ubuntu 22.04 LTS (Jammy)
config.vm.box = "ubuntu/jammy64"
# Настройка провайдера VirtualBox
config.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu2204-vbox" # имя виртуальной машины в VirtualBox
vb.memory = 6144 # 6 ГБ оперативки — безопасный минимум для GitLab
vb.cpus = 4 # 4 CPU
vb.gui = false # без GUI, если нужна — true
vb.customize [
"storageattach", :id,
"--storagectl", "IDE", # ← вот контроллер, имя узнать можно так: "VBoxManage showvminfo ubuntu2204-vbox | grep -i controller"
"--port", "1",
"--device", "0",
"--type", "dvddrive",
"--medium", "/home/<your-name>/my-vagrant/VBoxGuestAdditions_7.1.10.iso" # вместо <your-name> подставьте ваше имя пользователя!
]
end
# Настройка приватной сети с IP
config.vm.network "private_network", ip: "192.168.56.10"
# Синхронизация папок (тип "virtualbox" по умолчанию для Linux-хостов)
config.vm.synced_folder "ktu-articles", "/var/www/ktu-articles", type: "virtualbox"
config.vm.synced_folder "ktu-backend-pack", "/var/www/ktu-backend-pack", type: "virtualbox"
config.vm.synced_folder "ktu-backend-test", "/var/www/ktu-backend-test", type: "virtualbox"
# Установка необходимых пакетов и окружения
config.vm.provision "shell",
path: "provision.sh",
env: {
# "REG_TOKEN" => "PASTE_YOUR_REGISTRATION_TOKEN_HERE_from_gitlab", # <-- свой токен сюда
"FALLBACK_TOKEN" => "",
"GITLAB_URL" => "http://192.168.56.10"
}
end
4. Редактирование provision.sh — вставьте в файл следующее содержимое:
#!/bin/bash
# Не взаимодействовать с пользователем при установке (для предотвращения зависаний)
export DEBIAN_FRONTEND=noninteractive
# Прерывать выполнение скрипта при любой ошибке команды
set -e
echo "Проверка и восстановление dpkg, если был прерван..."
dpkg --configure -a || true
echo "Обновление списка пакетов..."
apt-get update -y
apt-get upgrade -y
echo "Установка Make и необходимых утилит..."
apt-get install -y make ca-certificates curl gnupg lsb-release dkms build-essential linux-headers-$(uname -r)
echo "Установка GPG ключа Docker (если ещё нет)..."
if [ ! -f /etc/apt/keyrings/docker.gpg ]; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
fi
echo "Добавление репозитория Docker (если не добавлен)..."
if [ ! -f /etc/apt/sources.list.d/docker.list ]; then
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
echo "Повторное обновление пакетов..."
apt-get update -y
echo "Установка Docker и Compose Plugin..."
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "Добавление пользователя vagrant в группу docker..."
if getent group docker > /dev/null; then
usermod -aG docker vagrant
fi
echo "Проверка, входит ли пользователь vagrant в группу docker..."
if id vagrant | grep -q '\\bdocker\\b'; then
echo 'Пользователь vagrant уже в группе docker.'
else
echo 'ВНИМАНИЕ: Пользователь vagrant ещё не в группе docker.'
echo 'Для применения групп выполните команду: "vagrant reload" или "vagrant destroy && vagrant up" чтобы применить изменения.'
fi
echo "✅ Установка Docker завершена."
if command -v gitlab-ctl >/dev/null 2>&1; then
echo "✅ GitLab уже установлен. Пропускаем установку."
else
echo "Установка зависимостей GitLab..."
apt-get install -y openssh-server tzdata perl postfix
echo "Добавление официального репозитория GitLab..."
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
echo "[INFO] Установка GitLab CE..."
EXTERNAL_URL="http://192.168.56.10" apt-get install -y gitlab-ce
fi
echo "Оптимизация / настройка gitlab.rb с отключёнными службами..."
cat <<EOF > /etc/gitlab/gitlab.rb
external_url 'http://192.168.56.10'
puma['worker_processes'] = 1
puma['worker_timeout'] = 60
sidekiq['max_concurrency'] = 5
# sidekiq['enable'] = false
prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
EOF
echo "Применение конфигурации GitLab..."
RUBYOPT='-W0' gitlab-ctl reconfigure
echo "Ожидание доступности веб-интерфейса GitLab..."
until curl -s http://localhost/users/sign_in | grep -q 'GitLab'; do
echo "Ждём, пока интерфейс GitLab загрузится..."
sleep 5
done
echo "Установка пароля root-пользователя..."
# root-пароль 'mytest12' задан только для локальной разработки. Не используйте в продакшене!
gitlab-rails runner "
u = User.find_by_username('root');
u.password = 'mytest12';
u.password_confirmation = 'mytest12';
u.save!
" || echo 'Ошибка при установке пароля root'
echo "✅ Установка или настройка GitLab завершена. Доступен по адресу: http://192.168.56.10 (Логин: root, Пароль: mytest78)" | tee /tmp/gitlab_ready.log
# Установка GitLab Runner
echo "Установка GitLab Runner..."
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
apt-get install -y gitlab-runner
# Параметры
RUNNER_NAME="vagrant-runner"
RUNNER_TAGS="vagrant,ci"
# Попытка получить токен автоматически из GitLab через rails
if [ -z "$REG_TOKEN" ]; then
echo "Пытаемся получить registration_token из GitLab через rails..."
REG_TOKEN=$(gitlab-rails runner -e production "puts Gitlab::CurrentSettings.current_application_settings.runners_registration_token" 2>/dev/null)
fi
if [ -z "$REG_TOKEN" ]; then
echo "Не удалось получить токен автоматически. Используем fallback..."
REG_TOKEN="$FALLBACK_TOKEN"
fi
if [ -z "$REG_TOKEN" ]; then
echo "Токен не найден. Завершаем установку."
exit 1
else
echo "✅ Токен успешно получен: $REG_TOKEN"
fi
# Этот способ работает только внутри самой GitLab VM, потому что использует gitlab-rails
# Проверка, зарегистрирован ли Runner
EXISTING_RUNNER=$(gitlab-runner list 2>/dev/null | grep "$RUNNER_NAME" || true)
if [ -z "$EXISTING_RUNNER" ]; then
echo "Регистрируем GitLab Runner..."
sudo gitlab-runner register --non-interactive \
--url "$GITLAB_URL/" \
--registration-token "$REG_TOKEN" \
--executor "shell" \
--description "$RUNNER_NAME" \
--tag-list "$RUNNER_TAGS" \
--run-untagged="true" \
--locked="false"
else
echo "GitLab Runner уже зарегистрирован."
fi
sudo gitlab-runner start
echo "✅ Установка GitLab Runner завершена."
5. Запуск виртуальной машины
Из папки проекта выполним команду:
если Vagrant-проект был создан сейчас и ранее никогда не запускался:
vagrant up
после выполнения команды свободное место на диске уменьшится на ~10ГБ
если Vagrant-проект существовал ранее и сейчас только внесли изменения в Vagrantfile и provision.sh:
vagrant up --provision
после выполнения команды свободное место на диске уменьшится на ~7ГБ
Время выполнения каждой из команд может занять до одного часа.
6. Настройка и работа с GitLab
Если всё прошло успешно, из браузера из хостовой системы GitLab будет доступен по адресу:
http://192.168.56.10
Логин "root" пароль "mytest12". Не используйте этот пароль в продакшене!
После включения компьютера если нужно стартовать GitLab — из папки проекта команда:
vagrant up
на выполнение команды может уйти несколько минут.
Добавим второй remote, чтобы оставить обе платформы — и Bitbucket и GitLab
например:
cd ./ktu-articles git remote add gitlab http://192.168.56.10/root/ktu-articles.git git push -u gitlab master
После этого проект должен быть доступен по адресу:
http://192.168.56.10/root/ktu-articles
Во время работы над проектом пушить изменения в GitLab командой:
git push gitlab master
логин "root" пароль "mytest12"
7. Опционально, если мы хотим сделать GitLab remote по умолчанию
Чтобы просто писать "git push", и он шёл в GitLab, а не в Bitbucket, нужно переопределить remote origin:
git remote set-url origin http://192.168.56.10/root/ktu-articles.git
После этого проверим текущее подключение:
git remote show origin
Ожидаемый результат:
Username for 'http://192.168.56.10':
8. Настройка SSH-доступа с основной машины к GitLab
1) Проверим, есть ли уже SSH-ключ
ls ~/.ssh/id_rsa.pub
Если файл существует — переходим к шагу 3.
Если не существует — нужно создать ключ.
2) Создадим SSH-ключ (если его нет)
ssh-keygen -t rsa -b 4096 -C "<your-name>@bitbucket.org"
Вместо <your-name> подставьте ваше имя на почте bitbucket!
Просто жмём Enter в ответ на все вопросы — по умолчанию он создаст ключ в ~/.ssh/id_rsa.
3) Скопируем публичный ключ
cat ~/.ssh/id_rsa.pub
Копируем весь вывод (он должен начинаться с ssh-rsa и заканчиваться почтой).
4) Добавим ключ в GitLab
В правом верхнем углу жмём на иконку пользователя (обычно круг с инициалами или аватар)
В выпадающем меню выбираем "Preferences" или "Edit profile" (в зависимости от версии GitLab)
Нажимаем кнопку "Add new key"
(попадаем в итоге на страницу вроде http://192.168.56.10/-/user_settings/ssh...)
Вставляем туда скопированный из предыдущего шага публичный ключ
Можно назвать ключ, например, "vagrant-pc"
Жмём "Add key"
5) Проверим соединение с GitLab по SSH
Из хостовой системы из папки проекта (например, ~/my-vagrant/ktu-articles):
ssh -T git@192.168.56.10
Если всё работает, увидим примерно это:
Welcome to GitLab, @root!
Если видим сообщение "The authenticity of host can't be established" — введи yes и продолжи.
6) Изменим URL репозитория на SSH
Посмотрим список текущих удалённых репозиториев (remote):
git remote -v
Заменим GitLab remote на SSH:
git remote set-url gitlab git@192.168.56.10:root/ktu-articles.git
7) Теперь можем пушить без пароля
git push gitlab master
или если мы сделали GitLab remote по умолчанию, то:
git push
8) Материалы по теме SSH-доступа
Настройка SSH без пароля: https://fkn.ktu10.com/?q=node/5789
Ubuntu Настройка SSH с авторизацией по ключу: https://fkn.ktu10.com/?q=node/8498
- Log in to post comments
- 324 reads