Поднимаем свой Gitlab сервис на VPS

Категория: GIT

Запускаем свой 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;
Запуск контейнера:
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
Первичные команды для настройки 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

категория: GIT