Поднимаем свой Gitlab сервис на VPS
Запускаем свой Gitlab из Docker контейнера.
Минимальные требования к VPS: 2 vCPU + 4 GB RAM. Можно подкрутить конфиг чтобы уменьшить потребление ресурсов. Использовать Swap.
Примечание
Сразу предлагаю освободить порты 80, 443, 22 на VPS сервере под Gitlab - вам так будет проще, чем ковыряться с nginx reverse proxy. И автоматом активируется Docker Container Registry.
А предоставлять нестандартные порты пользователям Gitlab репозиториев - дичь какая-то. Вы будете видеть Url вида:
ssh://git@164.92.135.30:4022/user/demo-project.git .
http://164.92.135.30:4080/user/demo-project.git .
Если запустить Docker-контейнер с Gitlab на стандартных портах, то вы избавитесь от головняка и сразу получите SSL-сертификаты:
- create new file /etc/gitlab/ssl/lab.qip.cx.crt
- update content in file /etc/gitlab/ssl/lab.qip.cx.crt from none to 94d3a9
* Если получаете Expired SSL сертификат - удалите/переименуйте каталог config/ssl/
Также я добавил настройки при генерации SSL:
external_url 'https://lab.qip.cx'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['stan@qip.cx']
Запуск в Docker контейнере с вашим доменом и SSL (v14.9):
docker pull gitlab/gitlab-ce
docker stop gitlab
docker rm gitlab
sudo docker run --detach \
--hostname lab.qip.cx \
--publish 80:80 --publish 443:443 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ee:latest
## Транслировать логи после запуска контейнера:
docker logs -f gitlab
## Запускается около 2-3 минут
Chef Infra Client finished, 338/1525 resources updated in 02 minutes 05 seconds
Получаем пароль root (будет удален через 24 часа):
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
⚠ The password file will be automatically deleted in the first reconfigure run after 24 hours.
⚠ Любой может зарегистрировать учетную запись! Отключите регистрацию (Sign-up enabled: Off): /admin/application_settings/general#js-signup-settings
* Email confirmation не будут отправляться пока не настроите SMTP или Sendmail.
⚠ To receive e-mails from GitLab you have to configure the SMTP settings: https://docs.gitlab.com/omnibus/settings/smtp.html
Because the GitLab Docker image doesn’t have an SMTP server installed.
⚠ Измените email/пароль для пользователя root здесь: /admin/users. В профиле root вы не сможете это сделать, потому что не отправиться confirm email без настроек SMTP.
* После запуска `gitlab-ctl reconfigure` web-сервер несколько секунд может загружаться.
Запуск без SSL на внешнем IP:
* Укажите порт на котором запустится Nginx явно или порт будет извлечен автоматически из настроек проброса портов:
nginx['listen_port'] = 4080;
nginx['listen_port'] = 4080;
Запуск контейнера:
export GITLAB_HOME=$HOME/gitlab
gitlab_host="XXX.XXX.XXX.XXX"
sudo docker run --detach \
--hostname $gitlab_host \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://$gitlab_host:4080'; gitlab_rails['gitlab_shell_ssh_port'] = 4022; nginx['listen_port'] = 80;" \
--publish $gitlab_host:40443:40443 --publish $gitlab_host:4080:80 --publish $gitlab_host:4022:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ee:latest
Параметры запуска
external_url
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://XX.XX.XX.XX:XXXX/';"
-p XXXX:XXXX
Эта опция запустит Nginx внутри контейнера на порту XXXX вместо стандартного 80 или 443!
Чтобы отображать правильные ссылки на клоны репозитория для ваших пользователей, вы должны предоставить GitLab URL-адрес, который ваши пользователи используют для доступа к репозиторию.
Вы можете использовать IP-адрес своего сервера, но предпочтительнее использовать доменное имя (FQDN).
### GitLab Shell settings for GitLab
# gitlab_rails['gitlab_shell_ssh_port'] = 22
#nginx['redirect_http_to_https'] = true
#registry_nginx['redirect_http_to_https'] = true
#mattermost_nginx['redirect_http_to_https'] = true
##! **Override only if you use a reverse proxy**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
# nginx['listen_port'] = nil
##! **Override only if your reverse proxy internally communicates over HTTP**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl
# nginx['listen_https'] = nil
##! Docs: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/gitlab.yml.md
# gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com'
# gitlab_rails['gitlab_ssh_user'] = ''
# gitlab_rails['time_zone'] = 'UTC'
***
Команды управления gitlab
docker exec -it gitlab gitlab-ctl tail # Смотрим логи
docker restart gitlab
docker stop gitlab
docker rm gitlab ## @todo Check is exists
docker exec gitlab update-permissions
docker exec gitlab gitlab-ctl reconfigure ## ~ 10-60 sec
docker exec gitlab gitlab-ctl restart
docker exec gitlab /opt/gitlab/embedded/bin/sv restart /opt/gitlab/service/nginx
docker exec -it gitlab /bin/bash
docker exec -it gitlab gitlab-rails console ## Rails консоль. Запустится через некоторое время.
Примеры команд в Rails консоли:
puts Readline::HISTORY.to_a ## активируем историю
User.first
user = User.first
***
* Смотрите обновления Docker-образа: https://hub.docker.com/r/gitlab/gitlab-ce/tags
Примечание
Чтобы настроить колонки Issues Board, нужно создать Labels (Project info » Labels), а после этого на странице борда добавить список по метке "Create list".
#gitlab #repository #registry