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

Базовая настройка сервера для репозитория
У нас есть виртуальная машина на базе 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 с новыми сертификатами.