GIT-репозиторий на собственном сервере с веб-интерфейсом: Gitea - аналог GitHub

Просмотров: 2389

Задача: Развернуть git-репозиторий на собственном сервере с помощью Gitea — для ведения проектов, с веб-интерфейсом и поддержкой многопользовательской работы.

свой Github

Базовая настройка сервера для репозитория

У нас есть виртуальная машина на базе Ubuntu 24.04 с направленным на неё доменом git.camouf.ru (далее буду использовать его в примерах, не забывайте подставлять свой домен).

Для начала устанавливаем необходимые пакеты:

apt update && apt install git wget nano mariadb-server mariadb-common certbot -y

Настраиваем MySQL (используем установленную выше MariaDB), выполняем команду:

mysql_secure_installation

Попросит ввести пароль root базы данных, нажимаете Enter - пароля у root пока нет. При настройке отвечаем следующим образом:

  • Switch to unix_socket authentication: выбираем "n"
  • Change the root password: выбираем "y" и дважды вводим пароль для root (его не забываем)
  • Remove anonymous users?: выбираем "y"
  • Disallow root login remotely?: выбираем "y"
  • Remove test database: выбираем "y"
  • Reloading privilege: выбираем "y"

Теперь создадим базу данных и пользователя для Gitea. Заходим в консоль MySQL:

mysql

Выполняем команды по очереди:

CREATE USER 'gitea'@'%' IDENTIFIED BY 'ТУТ_ПАРОЛЬ_ДЛЯ_ПОЛЬЗОВАТЕЛЯ';
CREATE DATABASE db_gitea CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
GRANT ALL PRIVILEGES ON db_gitea.* TO 'gitea';
FLUSH PRIVILEGES;
exit;

Создадим системного пользователя git, под которым будет работать Gitea:

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

Получаем SSL-сертификат для домена через Let's Encrypt с помощью certbot:

certbot certonly --standalone -d git.camouf.ru

Сertbot попросит ввести электронную почту и принять лицензию, в конце покажет пути к сертификатам. Нужно дать права на их чтение пользователю git и группе git:

chmod -R 755 /etc/letsencrypt/live/
chmod -R 755 /etc/letsencrypt/archive/
chown -R git:git /etc/letsencrypt/live/git.camouf.ru/
chown -R git:git /etc/letsencrypt/archive/git.camouf.ru/

На этом базовая настройка завершена. Теперь установим Gitea.

Установка Gitea на Ubuntu

Скачиваем бинарный файл Gitea:

wget -O gitea https://dl.gitea.com/gitea/1.23.4/gitea-1.23.4-linux-amd64

Делаем его исполняемым:

chmod +x gitea

Создаём необходимые директории и выставляем на них права:

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
export GITEA_WORK_DIR=/var/lib/gitea/
cp gitea /usr/local/bin/gitea

Создаем основной конфигурационный файл Gitea:

nano /etc/gitea/app.ini

В который вставляем:

[database]
DB_TYPE = mysql
PATH = /var/lib/gitea/data/gitea.db
HOST = 127.0.0.1:3306
NAME = db_gitea
USER = gitea
PASSWD = ТУТ_ПАРОЛЬ_ДЛЯ_ПОЛЬЗОВАТЕЛЯ
SCHEMA =
SSL_MODE = disable
LOG_SQL = false

[repository]
ROOT = /var/lib/gitea/data/repositories

[server]
PROTOCOL = https
CERT_FILE = /etc/letsencrypt/live/git.camouf.ru/fullchain.pem
KEY_FILE = /etc/letsencrypt/live/git.camouf.ru/privkey.pem
APP_DATA_PATH = /var/lib/gitea/data
DOMAIN = your-domain.com
SSH_DOMAIN = your-domain.com
HTTP_PORT = 3000
ROOT_URL = https://your-domain.com/
DISABLE_SSH = false
SSH_PORT = 22
SSH_LISTEN_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET = wLTj8DL2IBH41FubU-jG15zLdpgy7-PRB1TXz7-wdrk
OFFLINE_MODE = true

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = false
ENABLE_CAPTCHA = true
REQUIRE_SIGNIN_VIEW = false

[picture]
DISABLE_GRAVATAR = false

[session]
PROVIDER = file

[log]
MODE = file
LEVEL = info
ROOT_PATH = /var/lib/gitea/log

Разрешаем пользователю git чтение и запись этого файла и запускаем Gitea от имени пользователя git:

chown -R git:git /etc/gitea/app.ini
su git

Запускаем бинарный файл gitea с использованием параметров из app.ini:

GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
Теперь можно открыть браузер и перейти по адресу: https://git.camouf.ru:3000
Откроется страница с первоначальными настройками.
Здесь можно указать/изменить использование базы данных или внести новые данные для подключения.
Остальные настройки подгоняйте под себя

После первоначальной настройки отбираем права пользователя git на запись в файл /etc/gitea/app.ini

chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini

Автозапуск Gitea при перезагрузке

Чтобы GITEA запускалась автоматически от пользователя git после перезагрузки, удобнее всего создать systemd-сервис.

Создаем файл:

sudo nano /etc/systemd/system/gitea.service

C содержимым:

[Unit]
Description=Gitea Service
After=network.target

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
Environment=GITEA_WORK_DIR=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always

[Install]
WantedBy=multi-user.target

Перезагружаем systemd и включаем автозапуск:

sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea

Видео инструкция по запуску Gitea на собственном сервере

Полная версия на моем boosty

Автоматическое обновление сертификата

Чтобы не обновлять сертификаты Let's Encrypt вручную (они действительны 3 месяца), создадим автоматический скрипт обновления.

Создаем файл:

nano /etc/letsencrypt/renew-hook.sh

Вставляем содержимое:

#!/bin/bash
chown -R git:git /etc/letsencrypt/live/git.camouf.ru/
chown -R git:git /etc/letsencrypt/archive/git.camouf.ru/
chmod -R 755 /etc/letsencrypt/live/
chmod -R 755 /etc/letsencrypt/archive/

# Остановить текущий процесс Gitea (если он запущен в фоне)
pkill -f "/usr/local/bin/gitea web"

# Перезапустить Gitea с нужными параметрами
nohup GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini > /var/lib/gitea/gitea.log 2>&1 &

Делаем его исполняемым:

chmod +x /etc/letsencrypt/renew-hook.sh

Добавляем в crontab root-пользователя автоматический запуск обновления сертификата:

0 3 * * * certbot renew --quiet --post-hook "/etc/letsencrypt/renew-hook.sh"

Теперь в 3 часа ночи, если сертификат требует обновления, certbot его продлит и автоматически перезапустит Gitea с новыми сертификатами.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

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

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

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