Меню

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

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

Задача: Развернуть 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 на собственном сервере

Полная версия на моем 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 с новыми сертификатами.

Михаил Базаров 23.02.2025
Дополнительно можно настроить systemd-сервис для автоматического запуска Gitea при перезагрузке сервера, что бы не запускать бинарник вручную
Создаем файл:
Код
nano /etc/systemd/system/gitea.service

С содержимым:
Код
[Unit]
Description=Gitea
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
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

Включаем:
Код
systemctl daemon-reload  # Перезагружаем systemd, чтобы он увидел новый сервис
systemctl enable gitea    # Включаем автозапуск при старте системы
systemctl start gitea     # Запускаем сервис

И редактируем файл:
Код
nano /etc/letsencrypt/renew-hook.sh

Вместо перезапуска бинарника перезапускаем сервис gitea:
Код
#!/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/

systemctl restart gitea

Стоимость и сроки разработки сайтов и приложений

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

Интернет магазин: разработка с нуля от 450 000 руб.
от 5-ти недель

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

Интернет-магазин на готовом решении от 60 000 руб.
от 7-ми дней

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

Мобильное приложение от 300 000 руб.
от 1-го месяца

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

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