Поиск по сайту:

Как установить Gitlab Server с Docker на Ubuntu 18.04 LTS


Это руководство существует для этих версий ОС

  • Ubuntu 20.04 (Focal Fossa)
  • Ubuntu 18.04 (Bionic Beaver)

На этой странице

  1. Предпосылки
  2. Шаг 1. Установка зависимостей
  3. Шаг 2. Измените SSH-порт вашей системы
  4. Шаг 3. Настройка брандмауэра
  5. Шаг 4. Установите Docker
  6. Шаг 5. Установите Docker Compose
  7. Шаг 6. Установите Gitlab
  8. Шаг 7. Запустите Gitlab
  9. Шаг 8. Настройка Gitlab
    1. Настройка SMTP
    2. Настройка профиля Gitlab
    3. Изменить имя пользователя
    4. Ограничение публичной регистрации
    5. Добавить ключ SSH

    Gitlab CE или Community Edition — это приложение с открытым исходным кодом, используемое для размещения ваших репозиториев Git. Самостоятельное размещение ваших репозиториев Git дает вам полный контроль над вашими данными, обеспечивая при этом простой в использовании интерфейс для вас и членов вашей команды.

    В этом руководстве мы расскажем, как установить репозиторий Git с помощью бесплатного предложения Gitlabs Community Edition. Если вам нужны расширенные функции, такие как утверждения слияния, дорожные карты, управление портфелем, аварийное восстановление, сканирование контейнеров и т. д., вы можете перейти на Enterprise Edition.

    Предпосылки

    • Сервер на базе Ubuntu 18.04 с пользователем sudo без полномочий root.
    • Вам потребуется VPS с минимум 2 ядрами ЦП и 8 ГБ ОЗУ в соответствии с указанными аппаратными требованиями для Gitlab CE, который будет поддерживать 100 пользователей. Несмотря на то, что вы можете заменить пространство подкачки оперативной памятью, делать это не рекомендуется, так как приложение будет работать медленнее.

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

    Прежде чем мы установим Gitlab, нам нужно убедиться, что на нашем сервере установлено определенное программное обеспечение, которое потребуется Gitlab для правильной работы. Выполните следующие команды, чтобы установить зависимости.

    $ sudo apt update
    $ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -y
    

    Некоторое из вышеперечисленного программного обеспечения может быть предварительно установлено для вас.

    Шаг 2. Измените SSH-порт вашей системы

    Gitlab будет использовать порт 22 для отправки репозиториев через SSH. На ваших серверах также работает SSH, что приведет к конфликту. Есть два способа сделать это. Либо вы можете изменить порт SSH, который вы используете для подключения к вашей системе, либо вы можете изменить порт, который Gitlab будет использовать для SSH. В этом уроке мы собираемся изменить порт SSH для самого сервера.

    Для этого нам нужно отредактировать файл /etc/ssh/sshd_config. Откройте файл в текстовом редакторе nano.

    $ sudo nano /etc/ssh/sshd_config
    

    Найдите следующую строку и замените 22 на 6622 и удалите перед ней #. Вы можете выбрать любой порт.

    # Port 22
    

    Нажмите Ctrl + X, чтобы закрыть файл, и нажмите Y, чтобы сохранить изменения.

    Перезапустите службу SSH.

    $ sudo systemctl restart sshd
    

    Закройте текущий сеанс SSH, создайте новый с портом 6622 и снова подключитесь к серверу.

    $ ssh  -p 6622
    

    Шаг 3 — Настройка брандмауэра

    На предыдущем шаге мы установили ufw (несложный брандмауэр). Прежде чем мы сможем приступить к установке Gitlab, нам нужно его настроить.

    Включите SSH и порт, который мы только что создали, чтобы нас не заблокировали.

    $ sudo ufw allow OpenSSH
    $ sudo ufw allow 6622
    

    Включите брандмауэр ufw.

    $ sudo ufw enable
    

    Нам также необходимо включить http и https для работы Gitlab.

    $ sudo ufw allow http
    $ sudo ufw allow https
    

    Проверьте состояние брандмауэра.

    $ sudo ufw status
    

    Вы должны увидеть результат, подобный следующему.

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                  
    6622                       ALLOW       Anywhere                  
    80/tcp                     ALLOW       Anywhere                  
    443/tcp                    ALLOW       Anywhere                  
    OpenSSH (v6)               ALLOW       Anywhere (v6)             
    6622 (v6)                  ALLOW       Anywhere (v6)      
    80/tcp (v6)                ALLOW       Anywhere (v6)             
    443/tcp (v6)               ALLOW       Anywhere (v6)             
    

    Шаг 4 — Установите Докер

    Добавьте ключ Dockers GPG в свою систему.

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    Проверьте отпечаток загруженного ключа.

    $ sudo apt-key fingerprint 0EBFCD88
    

    Вы должны увидеть результат, подобный следующему.

    pub   rsa4096 2017-02-22 [SCEA]
          9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid           [ unknown] Docker Release (CE deb) <>
    sub   rsa4096 2017-02-22 [S]
    

    Добавьте репозиторий Docker.

    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    

    Обновите базу данных пакетов.

    $ sudo apt update
    

    Установите Docker-CE. CE — это Community Edition Docker.

    $ sudo apt install docker-ce -y
    

    Докер должен быть установлен сейчас. Проверьте, что он работает.

    $ sudo systemctl status docker
    

    Вывод должен быть похож на следующий.

    ? docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: active (running) since Thu 2019-10-11 21:10:31 UTC; 32s ago
         Docs: https://docs.docker.com
     Main PID: 19128 (dockerd)
        Tasks: 12
       CGroup: /system.slice/docker.service
               ??19128 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    

    Нажмите q, чтобы выйти.

    Добавьте свою ограниченную учетную запись пользователя Linux в группу docker, чтобы вы могли запускать docker без sudo.

    sudo usermod -aG docker $USER
    

    Переменная $USER выберет и добавит текущего вошедшего пользователя в группу докеров. Замените $USER фактическим именем пользователя, если вы еще не вошли в систему под этим пользователем.

    Переключитесь на пользователя, которого мы только что добавили. Даже если вы уже вошли в систему, вам все равно нужно будет снова переключиться на нее, чтобы перезагрузить разрешения.

    $ su - ${USER}
    

    Убедитесь, что все работает нормально, запустив встроенную программу «Hello World».

    $ docker run hello-world
    

    Вы должны увидеть следующий вывод, который сообщит, что Docker установлен и работает правильно.

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete 
    Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    

    Шаг 5 — Установите Docker Compose

    Можно пропустить этот шаг и продолжить, но установка Docker Compose значительно упростит запуск Gitlab, особенно если вы хотите сделать это на нескольких серверах.

    $ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    На момент написания этого руководства 1.24.1 является текущим стабильным выпуском Docker Compose. Вы можете проверить последнюю версию выпуска на их странице Github.

    Примените разрешения на выполнение к бинарному файлу docker compose.

    $ sudo chmod +x /usr/local/bin/docker-compose
    

    Добавьте автозавершение команд в Docker Compose.

    $ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
    

    Убедитесь, что ваша установка прошла успешно.

    $ docker-compose --version
    

    Он распечатает следующий вывод.

    docker-compose version 1.24.1, build 4667896b
    

    Шаг 6 — Установите Gitlab

    Загрузите образ Gitlabs Docker с Dockerhub. Этот образ содержит все необходимое для запуска Docker — nginx, PostgreSQL, Redis и т. д. Выполните следующую команду, чтобы загрузить образ.

    $ docker pull gitlab/gitlab-ee:latest
    

    Несмотря на то, что это руководство посвящено установке Community Edition, мы возьмем образ Enterprise Edition Gitlab. Это связано с тем, что редакция Enterprise ведет себя точно так же, как Community Edition, если вы не обновитесь до нее, введя свою лицензию. Обновление установки Community Edition до Enterprise Edition сопряжено с дополнительными сложностями.

    Загрузка полного образа займет некоторое время. Когда задание будет завершено, вы можете запустить следующую команду, чтобы проверить все изображения, которые в настоящее время находятся в вашей системе.

    $ docker images
    

    Вывод должен выглядеть примерно так, как показано ниже.

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    gitlab/gitlab-ee    latest              4bacb2356d28        4 days ago          1.87GB
    hello-world         latest              fce289e99eb9        9 months ago        1.84kB
    

    Шаг 7 — Запустите Gitlab

    На этом этапе мы можем запустить контейнер Gitlab сразу, указав все параметры в одной команде, но это будет означать, что каждый раз, когда вам нужно запустить контейнер, вам нужно указывать эти переменные. Docker Compose упрощает этот процесс, поскольку позволяет сохранить конфигурацию в файле .yml, который затем будет использоваться для запуска и запуска контейнера.

    Создайте файл docker-compose.yml.

    $ nano docker-compose.yml
    

    Вставьте следующий код.

    web:
      image: 'gitlab/gitlab-ee:latest'
      container_name: 'gitlab-howtoforge-tutorial'
      restart: always
      hostname: 'gitlab.example.com'
      environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'https://gitlab.example.com'
          gitlab_rails['smtp_enable'] = true
    	  gitlab_rails['smtp_address'] = "smtp.gmail.com"
          gitlab_rails['smtp_port'] = 587
          gitlab_rails['smtp_user_name'] = ""
          gitlab_rails['smtp_password'] = "app-password"
          gitlab_rails['smtp_domain'] = "smtp.gmail.com"
          gitlab_rails['smtp_authentication'] = "login"
          gitlab_rails['smtp_enable_starttls_auto'] = true
          gitlab_rails['smtp_tls'] = false
          gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
          # Add any other gitlab.rb configuration here, each on its own line
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
        - '587:587'
      volumes:
        - '/srv/gitlab/config:/etc/gitlab'
        - '/srv/gitlab/logs:/var/log/gitlab'
        - '/srv/gitlab/data:/var/opt/gitlab'
    

    Давайте посмотрим, что означает каждый из приведенных выше вариантов.

    • image — это расположение образа Docker Gitlab на Dockerhub.
    • container_name позволяет применить метку к контейнеру Docker для использования при ссылке на контейнер в сети Docker.
    • hostname определяет внутреннее имя хоста контейнера или, в нашем случае, URL-адрес, по которому будет установлен ваш Gitlab.
    • restart указывает политику перезапуска контейнера. Мы установили значение «всегда», что означает, что при выходе из контейнера он автоматически перезапускается.
    • среда предоставляет переменную GITLAB_OMNIBUS_CONFIG, которая позволяет вам ввести любой параметр конфигурации Gitlab. В этом случае мы предоставили внешний URL-адрес, который должен использовать Gitlab.
    • volume определяет каталоги, смонтированные на сервере для хранения постоянных данных. В трех томах/каталогах хранятся данные приложений, файлы журналов и файлы конфигурации. Значение слева от точки с запятой — это локальный каталог на сервере, а значение справа — это каталог внутри контейнера.
    • publish указывает контейнеру опубликовать порты или диапазон портов на хосте. Поскольку Gitlab нужны порты 22 (SSH), 80 (HTTP), 443 (HTTPS) и 587 (SMPT — MSA), мы указали их здесь. Если вы хотите, чтобы Gitlab использовал нестандартный порт на вашем сервере (вероятно, потому что он недоступен), вы должны сначала указать порт хоста, а затем порт контейнера. Например, поскольку ваш сервер уже использует порт SSH (22), вы можете указать Gitlab использовать SSH через другой порт, скажем, 3333. Затем вы должны изменить 22:22 в приведенном выше файле на 3333:22. Вам также нужно будет добавить строку gitlab_rails[gitlab_shell_ssh_port]=3333 в GITLAB_OMNIBUS_CONFIG выше.
    • external_url относится к домену, в котором будет установлен ваш Gitlab. Мы выбрали https, который автоматически установит для нас SSL-сертификат Lets Encrypt.
    • Мы также добавили дополнительные настройки, чтобы Gitlab мог использовать Gmail для отправки писем. Вы можете использовать любую стороннюю почтовую службу SMTP. В документации Gitlab есть подробное руководство по настройке различных SMTP-сервисов.

    Убедитесь, что вы находитесь в том же каталоге, что и docker-compose.yml. Выполните следующую команду, чтобы запустить Gitlab.

    $ docker-compose up -d
    

    Вы увидите что-то вроде следующего.

    Creating gitlab-howtoforge-tutorial ... done
    

    Прежде чем вы сможете получить доступ к Gitlab через браузер, пройдет еще несколько минут. Вы можете узнать больше о процессе запуска с помощью следующей команды.

    $ docker logs -f gitlab-howtoforge-tutorial
    

    Чтобы выйти из процесса мониторинга журнала, нажмите Ctrl + C.

    Загрузите сайт Gitlab в свой браузер. Если вы попытаетесь загрузить его слишком скоро после запуска контейнера, вы получите ошибку 502. Если это произойдет, подождите еще несколько минут и повторите попытку.

    Если все в порядке, то вы увидите следующую страницу в своем браузере.

    Шаг 8 — Настройте Gitlab

    Укажите пароль для пароля администратора Gitlabs. Далее вы попадете на экран входа в систему. Используйте root в качестве имени пользователя и пароля, которые вы только что выбрали для входа в систему.

    Настроить SMTP

    Нам нужно будет включить настройки SMTP, прежде чем мы

    Настроить профиль Gitlab

    Щелкните значок пользователя в правом верхнем углу, чтобы открыть раскрывающееся меню и выбрать настройки.

    Вы попадете на страницу настроек своего профиля. Добавьте свое имя и адрес электронной почты здесь. Вам нужно будет подтвердить свой адрес электронной почты, чтобы он был обновлен. Вы также можете добавить сюда дополнительную информацию о себе, если хотите.

    Нажмите «Обновить настройки профиля», когда закончите.

    Изменение имени пользователя

    Затем нам нужно изменить наше имя пользователя с root на что-то другое, поскольку root — довольно распространенное угадываемое имя пользователя. Нажмите «Учетная запись» на левой боковой панели.

    Измените пользователя на любое имя пользователя, которое вы хотите сохранить. Нажмите Обновить имя пользователя, чтобы закончить. Вы также должны включить двухфакторную аутентификацию здесь для большей безопасности.

    Ограничить публичную регистрацию

    По умолчанию установки Gitlab позволяют зарегистрироваться любому. Если вы этого не хотите, вы должны отключить его. Нажмите на значок гаечного ключа в верхней панели, чтобы получить доступ к области администрирования.

    Чтобы настроить параметры, нажмите «Настройки» на левой боковой панели.

    Здесь прокрутите вниз до ограничений регистрации и нажмите кнопку «Развернуть». Снимите флажок «Регистрация включена» и нажмите «Сохранить изменения», когда закончите.

    Вы по-прежнему сможете добавлять новых пользователей через интерфейс администратора.

    Добавить SSH-ключ

    Последний шаг — добавление нашего SSH-ключа. Если у вас есть ключ SSH, вы можете пропустить следующую команду. Если у вас его нет, вы можете создать его с помощью следующей команды.

    $ ssh-keygen
    

    Эта команда является общей для Mac OS, Linux и Git Bash/WSL в Windows. Примите значения по умолчанию и оставьте поле парольной фразы пустым.

    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/gitlab
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in gitlab.
    Your public key has been saved in gitlab.pub.
    The key fingerprint is:
    SHA256:6dNGAPyd8JAkHAikYOW2PsFjGlzBBpwy4XQ9RQgVwK8 
    The key's randomart image is:
    +---[RSA 2048]----+
    |+*OB=*O=..       |
    |B+o+o+oo+        |
    |oo.+. ...= .     |
    |. + ..  .o+      |
    | o *.   S .      |
    |  =Eo  . o       |
    | . o    o o      |
    |    .    o       |
    |                 |
    +----[SHA256]-----+
    

    Вы можете отобразить свой открытый ключ с помощью следующей команды

    $ cat ~/.ssh/gitlab.pub
    
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUf64YH7uJimFWVJSy/mgYiLRqBxVB6JJMTxZZ96DwExoINhWVRhQAgMgExBWGpUCpWXhLcNuIM+EfFRtCq+YYyLC+GlHsNdnLgecGgop72p8BEi8UckgCiCSuMrWCMAOFh5NKs2YHpF7bOUjXQRVvGujLuV1UBof7SXQ/za7e3aybNiH3KpA6oWSSmpqnOt8rZT54IjLnVFUSLx7ZxWDVW1bO29mI8NjWwzZGLAtNIkJQEOqVo8nhVkroFHvBTrZnUsmr5oFOWG++LPqED9EUSPTpO8PNnogYT3xsVncBMMAEt0pPE7ATmstQc161SEtqAUa98Qb0RRKqCKcKStOp 
    

    Вернитесь в область настроек профиля и получите доступ к ключам SSH на боковой панели.

    Вставьте ключ SSH в соответствующее поле и нажмите «Добавить ключ», чтобы продолжить.

    Теперь вы можете создавать и фиксировать свои репозитории, не предоставляя свои учетные данные Gitlab.

    Шаг 9 — Создайте свой первый проект

    Каждый репозиторий в Gitlab принадлежит проекту. Проект включает в себя репозиторий, средство отслеживания проблем, запросы на слияние, вики, конвейеры непрерывной интеграции и непрерывной доставки (CI/CD) и множество других функций.

    Чтобы создать свой первый репозиторий, щелкните Создать проект.

    Вы попадете на страницу нового проекта. Введите название проекта. Вы можете изменить ярлык проекта на что-то другое. Введите описание проекта, если хотите, и измените видимость проекта по своему желанию. Вы можете инициализировать свой репозиторий с помощью файла README. Когда вы закончите, нажмите «Создать проект».

    Вы попадете на страницу репозитория с одним пустым файлом README.md.

    Теперь, когда наш репозиторий запущен, давайте попробуем добавить журнал изменений из командной строки.

    Введите следующие команды на своем компьютере, чтобы создать файл CHANGELOG и отправить его обратно в репозиторий. Убедитесь, что на вашем компьютере установлен Git.

    Клонируйте репозиторий. Вы можете клонировать с помощью SSH или HTTPS.

    Клонировать с помощью SSH.

    $ git clone :user/howtoforge-test.git
    

    или клонировать с помощью HTTPS.

    $ git clone https://gitlab.example.com/user/howtoforge-test.git
    

    Введите остальные команды для создания и отправки CHANGELOG.

    $ cd howtoforge-test
    $ touch CHANGELOG  # Or create the file in your editor and enter a project description
    $ git add CHANGELOG
    $ git commit -m "add Changelog"
    $ git push -u origin master
    

    Шаг 10. Управление контейнером Gitlab

    Чтобы просмотреть все запущенные контейнеры, выполните следующую команду.

    $ docker-ps
    

    Чтобы остановить контейнер Gitlab, выполните следующую команду.

    $ docker stop gitlab-howtoforge-tutorial
    

    Чтобы снова запустить контейнер, используйте следующую команду.

    $ docker start gitlab-howtoforge-tutorial
    

    Если вы хотите удалить свой контейнер, вы можете сделать это с помощью следующей команды.

    $ docker container rm gitlab-howtoforge-tutorial
    

    Шаг 11 — Обновите Gitlab

    Если вы хотите обновить Gitlab до новейшей версии, вам нужно остановить и удалить существующий контейнер, получить последний образ, а затем заново создать контейнер.

    $ docker stop gitlab-howtoforge-tutorial
    $ docker rm gitlab-howtoforge-tutorial
    $ docker pull gitlab/gitlab-ee:latest
    $ docker-compose up -d
    

    И прежде чем вы спросите, ваши данные будут в безопасности, даже если вы удалите контейнер.

    На этом мы завершаем наше руководство по настройке Gitlab на сервере Ubuntu 18.04 с помощью Docker. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.