Существует много онлайн-сервисов, таких как GitHub и Bitbucket, которые позволяют пользователям размещать репозитории Git в сети. Однако, когда вы работаете над проектами с закрытыми исходными кодами, вы можете захотеть использовать автономное решение. Gogs – это легкое самодостаточное веб-решение, которое позволяет вам размещать свои репозитории Git в сети. На самом деле, если вы знакомы с GitHub, вы будете чувствовать себя как дома, используя Gogs – у них очень похожий интерфейс.
В этой статье мы узнаем, как установить и настроить Gogs на сервере Linux. Приведенные здесь инструкции должны работать для последних версий Ubuntu (16.04 и выше), Debian (версия 8 и выше) и CentOS / RHEL (версия 7 и выше).
Настройка системы
Прежде чем вы сможете начать работу с Gogs, вам необходимо настроить систему. Чтобы установить Gogs, вы должны установить Git, а при желании вы должны установить SSH и базу данных, такую как MySQL или PostgreSQL. Gogs также имеет свою собственную копию SSH и может использовать SQLite, когда база данных недоступна.
В этой статье мы будем использовать MySQL в качестве базы данных и не будем использовать git over SSH. Таким образом, нам нужно только установить Git и MySQL. В системе Debian/Ubuntu вы должны запустить:
sudo apt update
sudo apt install git mysql-server
Во время установки вам будет предложено установить пароль для пользователя root
MySQL. Запишите этот пароль, так как он понадобится вам позже.
Если вы используете CentOS/RHEL, вы можете установить эти зависимости, используя команды ниже. (В настоящее время CentOS поставляется с MariaDB, открытым исходным кодом, заменой MySQL.)
sudo yum install git mariadb-server
Далее мы настроим ограниченную учетную запись пользователя для запуска Gogs. В нашем примере мы создадим пользователя с именем gogs
следующей командой. Мы также будем использовать /bin/true
в качестве оболочки, чтобы никто не мог войти в систему под этим пользователем.
sudo useradd -rm gogs -s /bin/true -k ''
Теперь, когда у нас есть основные настройки, мы перейдем к базе данных.
Конфигурирование базы данных
Если вы используете Debian/Ubuntu, сервер базы данных будет уже запущен, когда вы установили MySQL. Однако с CentOS/RHEL вам нужно будет запустить его вручную. Вам также нужно будет “включить” его, чтобы MySQL запускался всякий раз, когда загружается ваша система. Для этого выполните следующие команды:
sudo systemctl start mariadb
sudo systemctl enable mariadb
После этого шага вы должны повысить безопасность MySQL, выполнив:
mysql_secure_installation
Эта команда запросит пароль пользователя root. Если вы являетесь пользователем Debian/Ubuntu, вы уже создали пароль ранее, поэтому введите его, чтобы продолжить. Когда команда спросит, хотите ли вы установить другой пароль, ответьте “Нет”, введя “n”.
Однако, если вы являетесь пользователем CentOS/RHEL, вы еще не создавали пароль. Просто оставьте это поле пустым и нажмите Enter, чтобы продолжить. Далее вас спросят, хотите ли вы установить новый пароль. Ответьте “да” на вопрос, введя “y”, и укажите пароль.
Затем команда задаст еще несколько вопросов, например, следует ли ей удалить тестовую базу данных и запретить анонимным пользователям вход. Ответьте “yes” каждому из них, введя “y”.
Теперь вы должны настроить учетную запись пользователя и базу данных для Gogs. Для этого войдите в консоль MySQL от имени пользователя root с помощью:
mysql -u root -p
Введите пароль пользователя root MySQL, чтобы продолжить.
Во-первых, вы должны создать пользователя в MySQL. Мы создадим пользователя gogs
с паролем super-strong-password
:
CREATE USER gogs@localhost IDENTIFIED BY 'super-strong-password';
Затем вы должны создать базу данных и позволить вновь созданному пользователю работать с этой базой данных. Мы создадим базу данных gogs
.
CREATE DATABASE gogs;
GRANT ALL PRIVILEGES ON gogs . * TO gogs@localhost;
Опять же, вы должны записать имя базы данных, имя пользователя и пароль, которые вы использовали – они понадобятся вам позже.
Установка Gogs
Во-первых, вы должны получить последнюю версию Gogs со страницы релизов GitHub . В этом примере мы будем использовать последнюю версию x64 (0.11.86 на момент написания этой статьи).
wget https://github.com/gogits/gogs/releases/download/v0.11.86/linux_amd64.tar.gz
sudo tar -xf linux_amd64.tar.gz -C /home/
Выполнив этот шаг, вы должны исправить разрешения /home/gogs
каталога /home/gogs
следующим образом:
sudo chown -R gogs: /home/gogs
Теперь, когда мы загрузили файлы и поместили их на свои места, нам нужно сказать systemd запускать Gogs при загрузке системы. Для этого создайте файл в /etc/systemd/system/gogs.service
со следующим содержимым:
[Unit]
Description=Gogs git remote daemon
[Service]
User=gogs
Group=gogs
ExecStart=/home/gogs/gogs web
WorkingDirectory=/home/gogs
[Install]
WantedBy=multi-user.target
Таким образом, мы сказали systemd запустить демон gogs
под пользователем gogs
. Когда демон запускается, он будет обслуживать веб-интерфейс через порт 3000. Вы можете изменить этот порт с помощью параметра -p
следующим образом:
ExecStart=/home/gogs/gogs web -p 4000
Если вы хотите использовать низкое значение порта (например, 80), вы должны предоставить привилегию CAP_NET_BIND_SERVICE
, выполнив:
sudo setcap 'cap_net_bind_service=+ep' /home/gogs/gogs
Затем вы должны указать systemd запускать этот сервис при загрузке, а также выполнить его с помощью:
sudo systemctl enable gogs
sudo systemctl start gogs
Теперь вы можете посетить http://<your_server_IP>:3000/
и вы увидите страницу установки Gogs (на фото ниже).
На этой странице введите имя базы данных MySQL, имя пользователя и пароль, которые вы создали для Gogs. Вы также должны установить “Run user” в gogs
и изменить “Application URL” и “Domain” в соответствии с вашим доменным именем/IP. Наконец, вам следует просмотреть раздел “Дополнительные параметры” и настроить учетную запись администратора. Если вы хотите включить электронную почту, заполните настройки SMTP.
Если все работает правильно и вы заполнили данные учетной записи администратора, вы попадете на панель инструментов:
Поздравляем! Вы успешно установили Gogs. Теперь вы можете создавать репозитории, продвигать свои проекты и просить других зарегистрироваться в сервисе.
Настройка HTTPS
Если вы развертываете Gogs за пределами доверенной внутренней сети, вы можете использовать HTTPS для защиты входящего и исходящего трафика вашего экземпляра Gogs. К счастью, встроенный веб-сервер достаточно полнофункциональный и по умолчанию поддерживает HTTPS.
Во-первых, вы должны получить сертификат в центре сертификации или создать самоподписанный сертификат самостоятельно. После выполнения этого шага откройте /home/gogs/custom/conf/app.ini
в nano. В разделе [server]
измените протокол ROOT_URL
с http
на https
:
ROOT_URL = https://<your_server_hostname>:3000/
Кроме того, вам также необходимо добавить эти значения в раздел [server]
:
CERT_FILE = /path/to/cert.pem
KEY_FILE = /path/to/key.pem
PROTOCOL = https
Затем перезапустите Gogs с помощью:
sudo systemctl restart gogs
Теперь откройте https://<your_server_hostname>:3000/
в браузере. Вы обнаружите, что HTTPS был правильно установлен.
Если вы хотите использовать Gogs через HTTPS без номера порта, вам нужно использовать порт 443. Это “низкий порт”; и мы описали, как запустить Gogs на низком порте в предыдущем разделе. После того, как вы внесете изменения в служебный файл, вы должны перезапустить Gogs:
sudo systemctl daemon-reload
sudo systemctl restart gogs
Запуск Gogs в сочетании с другим сервером
Если на вашем сервере запущено несколько веб-приложений, вы можете предпочесть доступ к Gogs через основной HTTP-сервер (обычно это Apache или nginx). Вам просто нужно проксировать все запросы с вашего основного HTTP-сервера на сервер Gogs.
В этой статье мы предполагаем, что у вас есть сервер с именем www.example.com
, и вы хотите развернуть Gogs по адресу www.example.com/git
. Если вы хотите, чтобы он был непосредственно доступен на www.example.com
, просто замените все экземпляры /git
в приведенных ниже фрагментах на /
.
Если вы используете nginx, вам просто нужно использовать proxy_pass
следующим образом:
server {
# other server configuration
location /git {
proxy_pass http://127.0.0.1:3000/;
}
}
Если вы используете Apache, вы должны включить модули proxy
и proxy_http
. Затем вы можете настроить Apache аналогичным образом:
<VirtualHost *:80>
# Other configuration
ProxyPreserveHost On
ProxyRequests off
ProxyPass /git http://127.0.0.1:3000/
ProxyPassReverse /git http://127.0.0.1:3000/
</VirtualHost>
Затем вам нужно сообщить Gogs об URL, с которого он будет доступен. Для этого откройте /home/gogs/custom/conf/app.ini
и измените значение ROOT_URL
следующим образом:
ROOT_URL = http://www.example.com/git
Наконец, вы должны добавить правило брандмауэра, чтобы никто не мог получить прямой доступ к установке Gogs через порт 3000. Если вы используете iptables , это довольно легко сделать:
sudo iptables -A INPUT ! -i lo -p tcp --dport 3000 -j DROP
Теперь вы можете получить доступ к Gogs через http://www.example.com/git
Обновление Gogs
Когда выйдет новая версия Gogs, вам нужно ее обновить. К счастью, обновить Gogs довольно легко. Во-первых, вам нужно остановить демон с помощью:
sudo systemctl stop gogs
Затем переименуйте существующую папку, чтобы мы могли установить новую версию:
sudo mv /home/gogs /home/backup
Теперь загрузите последний архив и распакуйте его, как мы это делали ранее.
sudo tar -xf linux_amd64.tar.gz -C /home/
Затем скопируйте данные и журналы из старого каталога в новый каталог:
sudo mv /home/backup/{custom,data,log} /home/gogs
Далее вам нужно исправить разрешения для нового каталога:
sudo chown -R gogs: /home/gogs/
Затем вы можете снова запустить службу с помощью:
sudo systemctl enable gogs
Если что-то пойдет не так, вы всегда можете восстановить предыдущую версию из резервной копии.
Заключение
В этой статье мы узнали, как установить и настроить Gogs. У него очень минимальные системные требования и знакомый интерфейс, что делает его отличной альтернативой другим автономным серверам git.
Шпаргалка конфигурации содержит некоторую полезную информацию, если вы хотите более тонко настроить свой Gogs.
Если вам понравился этот пост, пожалуйста, поделитесь им.