Как установить Gogs, свой собственный GitHub

Существует много онлайн-сервисов, таких как 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 (на фото ниже).

gogsweb

На этой странице введите имя базы данных MySQL, имя пользователя и пароль, которые вы создали для Gogs. Вы также должны установить “Run user” в gogs и изменить “Application URL” и “Domain” в соответствии с вашим доменным именем/IP. Наконец, вам следует просмотреть раздел “Дополнительные параметры” и настроить учетную запись администратора. Если вы хотите включить электронную почту, заполните настройки SMTP.

Если все работает правильно и вы заполнили данные учетной записи администратора, вы попадете на панель инструментов:

gogsdash

Поздравляем! Вы успешно установили 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.

Если вам понравился этот пост, пожалуйста, поделитесь им.

Оставьте комментарий