Если требуется установка Git сервиса для индивидуального разработчика или небольшой компании, то легковесный аналог GitLib, который называется Gogs, — это лучшее решение.

Git сервис Gogs

Gogs (GO Git Service) — это сервис Git для установки на собственном сервере, очень похож на GitLib. Gogs написан на языке Go, имеет низкие требования к системным ресурсам (в отличие от GitLib). Прост в установке и настройке. Gogs — лучшее решение, если вам нужен собственный Git репозиторий, и вы не хотите оплачивать тарифы других Git сервисов.

Установка Git сервиса Gogs

Установка Git

Устанавливаем систему контроля версий git:

apt install git

Создание пользователя

Создаем пользователя git:

adduser --disabled-login --gecos 'Gogs' git
Создаем пользователя git

Мы создали нового пользователя с именем git и все дальнейшие действия будем выполнять под пользователем git. Чтобы зайти под пользователем git, нужно будет выполнить команду:

su - git

Чтобы завершить работу под пользователем git, нужно будет выполнить команду:

exit

Установка Go

Для компиляции Gogs требуется Go версии 1.18 и новее.

Под пользователем git, которого мы только что создали, создаем новую директорию /home/git/local/:

su - git
mkdir $HOME/local && cd $_

Скачиваем самую новую версию Go. На момент написания статьи это была версия 1.20.2:

wget https://golang.google.cn/dl/go1.20.2.linux-amd64.tar.gz

Распаковываем скаченный архив:

tar -C /home/git/local -xvzf go1.20.2.linux-amd64.tar.gz

Зададим переменную окружения GOROOT, чтобы указать наше локальное место установки Go. Переменные окружения задаем в файле .bashrc. Так переменные окружения будут доступны, когда пользователь входит в систему:

echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
source $HOME/.bashrc

Проверяем установку Go:

go version
Установка Go успешно завершена

Установка Go успешно завершена.

Установка Gogs

Клонируем репозиторий в подкаталог gogs:

git clone --depth 1 https://github.com/gogs/gogs.git gogs
cd gogs

Компилируем Gogs, все необходимые зависимости будут скачены:

go build -o gogs

Проверка работоспособности Gogs

Чтобы проверить работоспособность Gogs, запускаем команду:

./gogs web
Проверка работоспособности Git сервиса Gogs

Стартовал веб-сервер и случает HTTP соединения на порту 3000. Чтобы остановить веб-сервер, нажмите комбинацию клавиш CRTL+C.

Завершаем работу под пользователем git:

exit

Добавление Gogs в автозагрузку

Настроим автоматическую загрузку Git сервиса Gogs при запуске системы.

Создаем файл /etc/systemd/system/gogs.service:

touch /etc/systemd/system/gogs.service

Добавляем в созданный файл следующее содержимое (проверив пути WorkingDirectory и ExecStart):

[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=postgresql.service
After=nginx.service

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/local/gogs
ExecStart=/home/git/local/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git

[Install]
WantedBy=multi-user.target

Активируем созданный нами systemd файл:

systemctl enable gogs

Запускаем сервис:

systemctl start gogs

Проверяем статус сервиса:

systemctl status gogs
Статус Git сервиса Gogs

Все отлично запустилось и работает! Можно перезагрузить сервер и проверить, что Git сервис Gogs автоматически запускается.

Установка PostgreSQL

Gogs не требует обязательное использование сервера баз данных. Поэтому, можете пропустить данный подраздел, если не планируете использовать Gogs вместе с сервером баз данных.

Устанавливаем необходимые пакеты:

apt install postgresql postgresql-client libpq-dev
Установка PostgreSQL

Открываем PostgreSQL-терминал, чтобы создать базу данных и пользователя для Gogs:

sudo -u postgres psql -d template1
PostgreSQL терминал

Создаем нового пользователя с именем gogs:

CREATE USER gogs CREATEDB;

Задаем пароль для пользователя gogs:

\password gogs

Будет предложено ввести новый пароль для пользователя gogs, а затем повторить его ввод.

Создаем базу данных gogs, владельцем которой будет пользователь gogs:

CREATE DATABASE gogs OWNER gogs;

Выходим из PostgreSQL-терминала:

\q

Установка и настройка Nginx

Установим и настроим Nginx в качестве обратного прокси-сервера для Gogs. Благодаря этому, сможем получать доступ к Gogs не по IP адресу сервера, где располагается Gogs, а используя доменное имя (git.adminkin.pro). Nginx также будет обрабатывать HTTPS соединения к Gogs.

Устанавливаем Nginx:

apt install nginx

Создаем конфигурационный файл /etc/nginx/sites-available/git.adminkin.pro.conf:

touch /etc/nginx/sites-available/git.adminkin.pro.conf

Добавляем в файл следующие строки:

server {
        listen 80;

        server_name git.adminkin.pro;

        root /var/www/html;
        index index.nginx-debian.html;

        location / {
                try_files $uri $uri/ =404;
        }
}

Создаем символьную ссылку:

ln -s /etc/nginx/sites-available/git.adminkin.pro.conf /etc/nginx/sites-enabled/git.adminkin.pro.conf

Стартуем Nginx:

nginx

Ура! Домен git.adminkin.pro доступен по HTTP на 80 порту:

Настройка Nginx. Домен доступен по HTTP на 80 порту

Пора получать бесплатный SSL сертификат от Let’s Encrypt на домен git.adminkin.pro. Устанавливаем Certbot (клиент Let’s Encrypt, который создает и устанавливает SSL сертификаты от Let’s Encrypt):

apt install certbot python3-certbot-nginx

Запускаем Certbot для генерации SSL сертификата и его установки на сайт:

certbot --nginx -d git.adminkin.pro -d www.git.adminkin.pro --register-unsafely-without-email

Если просмотреть конфигурационный файл /etc/nginx/sites-available/git.adminkin.pro.conf, то обнаружите, что Certbot внес изменения в этот файл. Перезагружаем Nginx, чтобы изменения в конфигурационном файле были применены:

nginx -s reload

SSL сертификат работает. Переадресация (редирект) с HTTP на HTTPS, прописанная Certbot-ом в конфигурационном файле, работает.

Настройка Nginx. Домен доступен по HTTPS на 443 порту

Для автоматического обновления SSL сертификата добавим задачу в cron. Для этого под пользователем root откроем для редактирования файл crontab:

crontab -e

И добавим следующую строчку:

30 2 * * 1 /usr/bin/certbot renew >> /var/log/certbot.log

Так, каждый понедельник в 2:30 ночи будет запускаться проверка валидности SSL сертификата. Если срок действия SSL сертификата истекает, то сертификат будет обновлен.

Настроим Nginx в качестве обратного прокси-сервера для Gogs. Открываем конфигурационный файл /etc/nginx/sites-available/git.adminkin.pro.conf и приводим его к виду:

server {
        listen 443 ssl;
        server_name git.adminkin.pro;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://localhost:3000;
        }

        ssl_certificate /etc/letsencrypt/live/git.adminkin.pro/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/git.adminkin.pro/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
        listen 80;
        server_name git.adminkin.pro www.git.adminkin.pro;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443;
        server_name www.git.adminkin.pro;

        ssl_certificate /etc/letsencrypt/live/git.adminkin.pro/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/git.adminkin.pro/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        return 301 https://git.adminkin.pro$request_uri;
}
Настройка Nginx. Обратный прокси-сервер

Перезагружаем Nginx, чтобы изменения в конфигурационном файле были применены:

nginx -s reload

Набираем в адресной строке браузера http://git.adminkin.pro/, и происходит редирект на https://git.adminkin.pro/install. Установка Git сервиса Gogs продолжится в браузере.

Web Installer Gogs

Настройка Git сервиса Gogs

Настройки базы данных (см. рисунок выше) оставляем по умолчанию. Вводим только Пароль пользователя gogs базы данных PostgreSQL, который задали в разделе Установка PostgreSQL.

Общие параметры Gogs тоже оставляем по умолчанию, кроме:

  • Домен меняем с localhost на git.adminkin.pro
  • SSH порт делаем пустым полем, т.к. SSH сервер использоваться не будет;
  • URL приложения меняем с http://localhost:3000/ на https://git.adminkin.pro
Общие параметры Gogs

Расширенные настройки тоже оставляем по умолчанию. Только создадим учетную запись администратора. Для этого заполняем поля: Имя пользователя, Пароль, Подтвердить пароль и нажимаем кнопку Установить Gogs:

В дальнейшем, если потребуется изменение параметров Gogs, это можно сделать вручную, открыв конфигурационный файл /home/git/local/gogs/custom/conf/app.ini.

Все! Мы оказались в панели управления администратора Gogs, можем создавать свой первый собственный Git-репозиторий (здесь мы этого касаться не будем).

Панель управления Gogs

Осталось запретить доступ к сайту Gogs по незащищенному протоколу HTTP. Если в адресной строке браузера набрать http://git.adminkin.pro:3000/, то будет предоставлен доступ по HTTP-протоколу:

Доступ к Gogs по HTTP протоколу

Это потому, что веб-сервер Gogs прослушивает все сетевые интерфейсы на порту 3000. Для того, чтобы сайт Gogs был доступен только по безопасному HTTPS протоколу, необходимо настроить, чтобы веб-сервер Gogs прослушивал только loopback интерфейс на порту 3000.

Открываем файл /home/git/local/gogs/custom/conf/app.ini с настройками Gogs и в секции [server] добавляем строку:

HTTP_ADDR    = 127.0.0.1
Файл app.ini с настройками Gogs

Перезапускаем сервис Gogs:

systemctl restart gogs

Проверяем. Доступ по незащищенному HTTP протоколу запрещен:

Доступ к Gogs по HTTP протоколу запрещен

Выводы

Установка Git сервиса Gogs прошла без проблем. Сам сервис Gogs нетребовательный к ресурсам сервера. Как заявляют его разработчики, может работать на недорогом Raspberry Pi. Gogs — достойная альтернатива GitHub и GitLab.

Как это может помочь бизнесу?

Git сервис Gogs сэкономит деньги бизнеса: не нужно арендовать cервер c супер-конфигурацией (как в случае с GitLab) и не нужно оплачивать все новые и новые тарифы (как в случае с GitHub). Gogs бесплатный, легковесный и кроссплатформенный!

Пожалуйста, вопросы задавайте в комментариях под статьей!

Комментарии

  • Ирина К.
    Ответить

    Если «пушите» в новенький Git-репозиторий с помощью команды:
    git push -u origin master
    И прилетает ошибка «error: 413 Request Entity Too Large«. Это значит, что веб-сервер блокирует большие загружаемые файлы.
    Разрешаем загрузку больших файлов строчкой:
    client_max_body_size 50m;
    в конфигурационном файле Nginx веб-сервера. В моем случае этот конфигурационный файл называется /etc/nginx/sites-available/git.adminkin.pro.conf. И не забываем перезагрузить Nginx.

  • Ирина К.
    Ответить

    Против СПАМ ботов помогает либо включение подтверждения email пользователя, либо отключение регистрации совсем. Обе настроки делаются в одном конфигурационном файле /home/git/local/gogs/custom/conf/app.ini. Для включения подтверждения email пользователя выставляем параметр:
    REQUIRE_EMAIL_CONFIRMATION=true
    Для отключения регистрации выставляем параметр:
    DISABLE_REGISTRATION=true
    И не забываем перезапустить сервис Gogs:
    systemctl restart gogs

Добавить комментарий

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Войти

Зарегистрироваться

Сбросить пароль

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