Установка и настройка Gitea на Fedora 34
Краткое содержание
- Требования и подготовка системы
- Настройка брандмауэра и Git
- Установка и настройка PostgreSQL для Gitea
- Создание системного пользователя и установка бинарника Gitea
- Системная служба systemd и первоначальная конфигурация через веб-интерфейс
- Настройка SSL и Nginx как обратного прокси
- Почтовые уведомления, обновления, SSH-доступ
- Рекомендации по безопасности, резервному копированию и аварийному восстановлению
- Альтернативные подходы, чеклисты и критерии приёмки
Важно: перед началом сделайте резервную копию важной информации и убедитесь, что у вас есть доступ к консоли сервера.
Требования
- Сервер под управлением Fedora 34.
- Пользователь с правами sudo (не root).
- SELinux отключён или настроен заранее согласно разделу по безопасности (рекомендации далее).
- Подключение к сети и доступ в интернет для загрузки бинарников и сертификатов.
- Рекомендуется статический публичный IP или DNS-имя для домена.
Пример обновления системы:
$ sudo dnf updateШаг 1 — Настройка брандмауэра
Fedora Server по умолчанию использует firewalld. Проверьте состояние:
$ sudo firewall-cmd --stateОжидаемый вывод:
runningПроверьте список разрешённых сервисов:
$ sudo firewall-cmd --permanent --list-servicesПример вывода:
dhcpv6-client mdns sshРазрешите HTTP и HTTPS (и позже порт Gitea 3000):
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reloadЕсли планируете удалённый доступ к PostgreSQL, добавьте сервис postgresql и откройте порт в соответствии с политикой безопасности (см. раздел по PostgreSQL).
Шаг 2 — Установка Git
$ sudo dnf install -y gitПроверьте версию:
$ git --version
# git version 2.31.1 (пример вывода)Настройте глобальные параметры пользователя Git (имя и email):
$ git config --global user.name "Ваше Имя"
$ git config --global user.email "[email protected]"Проверка конфигурации:
$ git config --list
# user.name=Ваше Имя
# user.email=[email protected]Шаг 3 — Установка и настройка PostgreSQL
Gitea поддерживает SQLite, MySQL/MariaDB, MSSQL и PostgreSQL. Для продакшена PostgreSQL — предпочтительный выбор.
Установка PostgreSQL 13 и инициализация БД:
$ sudo dnf module enable postgresql:13
$ sudo dnf install -y postgresql-server postgresql-contrib
$ sudo postgresql-setup --initdb --unit postgresql
$ sudo systemctl enable --now postgresqlПо умолчанию PostgreSQL может использовать схему аутентификации md5. Рекомендуется SCRAM-SHA-256.
Откройте файл конфигурации:
$ sudo nano /var/lib/pgsql/data/postgresql.confИзмените или добавьте строки:
listen_addresses = 'localhost, 201.0.110.0'
password_encryption = scram-sha-256Примечание: замените 201.0.110.0 на ваш внешний IP или диапазон.
Перезапустите PostgreSQL:
$ sudo systemctl restart postgresqlЗайдите в psql под пользователем postgres:
$ sudo -u postgres psqlСоздайте роль и базу данных для Gitea (замените пароль на надёжный):
postgres-# CREATE ROLE gitea WITH LOGIN PASSWORD 'yourpassword';
postgres-# CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';Выйдите из psql:
postgres-# \qДобавьте правило в pg_hba.conf для локального подключения к базе giteadb:
local giteadb gitea scram-sha-256Для удалённой БД используйте правило с CIDR:
host giteadb gitea 192.0.2.10/32 scram-sha-256Также замените все “ident” на “scram-sha-256” в строках, отвечающих за локальные подключения:
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256Перезапустите PostgreSQL:
$ sudo systemctl restart postgresqlЕсли хотите разрешить доступ к PostgreSQL извне, откройте порт или добавьте сервис в firewalld:
$ sudo firewall-cmd --permanent --add-service=postgresql
$ sudo firewall-cmd --reloadВажно: открывать доступ к PostgreSQL в интернет — рискованно. По возможности используйте VPN или SSH-туннель.
Шаг 4 — Создание системного пользователя
Создайте системного пользователя git, под которым будет запускаться Gitea:
$ sudo useradd \
--system \
--shell /bin/bash \
--comment 'Git Version Control' \
--create-home \
--home /home/git \
gitЭта команда создаёт пользователя и домашнюю директорию /home/git.
Шаг 5 — Установка Gitea (бинарник)
Скачайте текущий стабильный бинарник с официального сайта Gitea. В момент написания руководства пример версии 1.14.3; замените переменную GITEAVERSION на актуальную.
$ GITEAVERSION=1.14.3
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64
$ sudo mv gitea /usr/local/bin
$ sudo chmod +x /usr/local/bin/giteaСоздайте необходимые директории и задайте права:
$ sudo mkdir -p /var/lib/gitea/{custom,data,log}
$ sudo chown -R git:git /var/lib/gitea/
$ sudo chmod -R 750 /var/lib/gitea/
$ sudo mkdir /etc/gitea
$ sudo chown root:git /etc/gitea
$ sudo chmod 770 /etc/giteaПрава 770 для /etc/gitea временно нужны установщику, чтобы записать app.ini. После установки рекомендуется ужесточить права.
Создание systemd-сервиса
Создайте файл /etc/systemd/system/gitea.service и вставьте сервис:
$ sudo nano /etc/systemd/system/gitea.serviceСодержимое файла:
[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=postgresql.service
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.targetПерезагрузите демона systemd и запустите сервис:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now gitea
$ sudo systemctl status giteaПример ожидаемого вывода:
gitea.service - Gitea
Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-07-04 20:33:38 EDT; 1 day 8h ago
Main PID: 46404 (gitea)
Tasks: 7 (limit: 2328)
Memory: 115.5M
CGroup: /system.slice/gitea.service
---46404 /usr/local/bin/gitea web -c /etc/gitea/app.iniЕсли сервис не запускается — проверьте журналы:
$ sudo journalctl -u gitea --no-pager --no-hostname -n 200Шаг 6 — Первичная настройка Gitea через веб-интерфейс
Gitea по умолчанию слушает порт 3000. Откройте порт в брандмауэре (см. выше). В браузере перейдите по адресу:
Вас встретит веб-установщик Gitea. Введите параметры базы данных и общие настройки.
Параметры базы данных

- Database Type: PostgreSQL
- Host: 127.0.0.1:5432
- Username: gitea
- Password: ваш_пароль
- Database Name: gitea
Общие настройки

- Site Title: имя вашей организации
- Repository Root Path: по умолчанию
- Git LFS Root Path: по умолчанию
- Run as Username: git
- SSH Server Domain: ваш домен или IP
- HTTP Listen Port: 3000 (или другой порт)
- Gitea Base URL: http://YOURIPADDRESS:3000
- Log Path: по умолчанию
При необходимости укажите настройки почты и серверные параметры. Создайте администратора — его данные понадобятся для входа.

После установки вы будете автоматически зашли в панель.

Сделайте файл конфигурации /etc/gitea/app.ini доступным только для чтения (после установки):
$ sudo chmod 750 /etc/gitea
$ sudo chmod 640 /etc/gitea/app.iniШаг 7 — Установка SSL (Let’s Encrypt)
Для получения сертификатов Let’s Encrypt используйте certbot. На Fedora certbot доступен через dnf.
$ sudo dnf install -y certbotПробная генерация сертификата (standalone):
$ sudo certbot certonly --standalone --preferred-challenges http -d example.comСертификаты будут расположены в /etc/letsencrypt/live/example.com.
Создайте веб-корень для ACME-челленджей:
$ sudo mkdir -p /var/lib/letsencryptАвтопродление можно настроить через systemd timer или cron. Пример cron-скрипта в /etc/cron.daily:
$ sudo nano /etc/cron.daily/certbot-renewСодержимое:
#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"Сделайте его исполняемым:
$ sudo chmod +x /etc/cron.daily/certbot-renewСовет: systemd timer предпочтительнее cron в современных системах, но cron подойдет для простоты.
Шаг 8 — Установка и настройка Nginx как обратного прокси
Установите Nginx:
$ sudo dnf install -y nginxСоздайте конфигурацию /etc/nginx/conf.d/gitea.conf:
$ sudo nano /etc/nginx/conf.d/gitea.confПример конфигурации (отредактируйте server_name и пути к сертификатам):
server {
listen 80;
location ~ /\.well-known/acme-challenge {
root /var/lib/letsencrypt/;
}
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your_domain;
client_max_body_size 50m;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20- POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers off;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
}
access_log /var/log/nginx/gitea.access.log;
error_log /var/log/nginx/gitea.error.log;
}Проверьте конфигурацию и перезапустите Nginx:
$ sudo nginx -t
$ sudo systemctl restart nginxИзмените в /etc/gitea/app.ini параметры домена и ROOT_URL:
[server]
SSH_DOMAIN = git.example.com
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/После правки перезапустите Gitea:
$ sudo systemctl restart giteaШаг 9 — Настройка почты
Для уведомлений можно использовать SMTP-сервер или транзакционные почтовые сервисы (Amazon SES, Mailgun и т. п.).
Откройте /etc/gitea/app.ini и добавьте:
[mailer]
ENABLED = true
FROM = [email protected]
MAILER_TYPE = smtp
HOST = mail.mydomain.com:587
IS_TLS_ENABLED = true
USER = [email protected]
PASSWD = `password`Перезапустите сервис:
$ sudo systemctl restart giteaПроверьте работу почты по отправке тестового письма в интерфейсе администратора.
Шаг 10 — Обновление Gitea и откат
Процесс обновления: остановка сервиса, замена бинарника, запуск. Обязательно сделайте резервную копию конфигурации и базы данных перед обновлением.
Остановите сервис:
$ sudo systemctl stop giteaЗагрузите новый бинарник и замените старый:
$ GITEAVERSION=LATESTVERSION
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64
$ sudo mv gitea /usr/local/bin
$ sudo chmod +x /usr/local/bin/gitea
$ sudo systemctl start giteaОткат: сохраните старую копию бинарника перед заменой или используйте снапшот VM/Filesystem. Если обновление нарушило работу, верните старую версию бинарника и перезапустите сервис.
План отката (шаблон)
- Остановить gitea: sudo systemctl stop gitea
- Заменить /usr/local/bin/gitea на сохранённую рабочую версию
- Перезапустить сервис: sudo systemctl start gitea
- Проверить логи и доступность
Шаг 11 — Использование SSH с Gitea
Создайте SSH-ключ на локальной машине (или используйте существующий):
$ ssh-keygen -N "yourpassphrase" -t ed25519 -C "gitea_key"Ключ появится в ~/.ssh/id_ed25519 и ~/.ssh/id_ed25519.pub. Скопируйте публичный ключ и добавьте его в Gitea: Настройки → SSH/GPG Keys → Add Key.

Если в /etc/ssh/sshd_config указан AllowUsers, убедитесь, что туда добавлен git:
AllowUsers myuser myotheruser gitПерезапустите sshd:
$ sudo systemctl restart sshdДобавьте приватный ключ в ssh-agent, чтобы не вводить фразу каждый раз:
$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_ed25519Клонирование по SSH для проверки:
$ git clone ssh://[email protected]/username/repo.gitПример вывода при первом подключении:
The authenticity of host 'example.com (201.110.80.160)' can't be established.
ECDSA key fingerprint is SHA256:Kx9l19zpGhHfbb2wHtmWeC7/WWv8e5/T3Tcws2qwVEw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'example.com,201.110.80.160' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 5, done.
Receiving objects: 100% (5/5), 4.77 KiB | 977.00 KiB/s, done.Рекомендации по безопасности
Важно следовать базовым принципам безопасности при развёртывании:
- Запускайте Gitea под отдельным не-привилегированным пользователем (git).
- Отключите прямой доступ к PostgreSQL из интернета — используйте VPN или приватную сеть.
- Установите и автоматически обновляйте сертификаты TLS (Let’s Encrypt).
- Ограничьте права на /etc/gitea/app.ini: 640 и владелец root:git.
- Используйте сильные пароли и, где возможно, двухфакторную аутентификацию для администраторов.
- Обновляйте систему и Gitea согласно политике безопасности.
- Контролируйте логи и настраивайте оповещения о падениях службы.
Дополнительно — минимизируйте привилегии SSH-ключей и используйте ключи ed25519 для лучшей безопасности.
Резервное копирование и восстановление (SOP)
Резервные компоненты Gitea:
- База данных (PostgreSQL)
- Директория репозиториев: /var/lib/gitea/data/gitea-repositories или путь, указанный в app.ini
- Конфигурация: /etc/gitea/app.ini
- Логи и файлы LFS
Пример ежедневного бэкапа PostgreSQL:
$ sudo -u postgres pg_dump -Fc -f /var/backups/gitea/giteadb-$(date +%F).dump giteadbРезервирование файлов Gitea:
$ sudo rsync -a --delete /var/lib/gitea/ /var/backups/gitea/files/
$ sudo cp /etc/gitea/app.ini /var/backups/gitea/config/app.ini-$(date +%F)Восстановление (основной сценарий):
- Остановите gitea: sudo systemctl stop gitea
- Восстановите файловую часть: rsync или tar из бэкапа в /var/lib/gitea
- Восстановите базу данных: sudo -u postgres pg_restore -d giteadb /path/to/dump
- Установите права: sudo chown -R git:git /var/lib/gitea
- Запустите gitea: sudo systemctl start gitea
Проверьте целостность репозиториев и доступ в веб-интерфейс.
Аварийный план: runbook при падении Gitea
Шаги при недоступности сервиса:
- Проверить состояние systemd: sudo systemctl status gitea
- Посмотреть логи: sudo journalctl -u gitea -n 200
- Проверить диск и права: df -h, sudo ls -la /var/lib/gitea
- Проверить базу данных: sudo -u postgres psql -c “SELECT 1;”
- Перезапустить сервис: sudo systemctl restart gitea
- Если не помогает — откатить бинарник к предыдущей рабочей версии и перезапустить
- Если проблема в базе — восстановить из последнего успешного дампа (см. раздел резервного копирования)
Критические контакты: администратор базы данных, системный администратор сети.
Типичные проблемы и их решения
Проблема: Gitea не стартует — ошибка в app.ini Решение: Проверить /etc/gitea/app.ini, права доступа и журналы systemd.
Проблема: Невозможно подключиться к базе данных Решение: Проверить listen_addresses в postgresql.conf и правила в pg_hba.conf; проверить, запущен ли postgresql и корректно ли созданы роль/база.
Проблема: SSL не работает Решение: Проверить пути к сертификатам в конфигурации Nginx, права на файлы сертификатов и вывод certbot.
Проблема: Невозможно клонировать по SSH Решение: Убедиться, что SSH-ключ добавлен в профиль Gitea, sshd настроен и AllowUsers не блокирует git.
Альтернативные способы установки (когда лучше выбрать другой способ)
- Docker / Docker Compose — если вы предпочитаете контейнеризацию и лёгкий перенос между серверами. Подходит для быстрых тестовых развёртываний и CI-пайплайнов.
- Пакеты RPM (если доступны) — удобнее в корпоративных репозиториях, позволяют автоматизировать обновления через dnf.
- Сборка из исходников — для кастомных сборок или патчей, когда нужен контроль над сборкой.
Короткая таблица сравнения:
- Бинарник: просто, быстро, минимальные зависимости.
- Docker: изолированно, удобно масштабировать, но требует знаний Docker и управления томами.
- RPM: хорошая интеграция с системой управления пакетами.
- Из исходников: гибкость, но сложнее в поддержке.
Руководство по выбору: когда что использовать (эвристики)
- Нужна максимальная простота — бинарник.
- Нужно быстро разворачивать и масштабировать — Docker/compose.
- Централизованное управление пакетами в организации — RPM.
- Необходима модификация исходников — сборка из исходников.
Совместимость и миграционные заметки
- Gitea обычно поддерживает несколько последних релизов СУБД; перед обновлением проверьте совместимость версии Gitea с PostgreSQL в официальном CHANGELOG.
- При миграции с SQLite на PostgreSQL — экспортируйте репозитории и импортируйте их в новую базу, тестируйте в тестовой среде.
- SELinux: если включён, подготовьте политики или используйте permissive mode при первоначальной настройке. После настройки создайте постоянные правила.
Критерии приёмки (проверяем работоспособность)
- Веб-интерфейс доступен по HTTPS и отвечает кодом 200.
- Создание нового репозитория проходит без ошибок.
- Клонирование по HTTPS и SSH проходит успешно.
- Вебhook и почтовые уведомления доставляются (тестовое письмо отправлено).
- Пользовательские репозитории и права работают корректно.
Чеклисты по ролям
Администратор сервера:
- Обновил систему и установил зависимости
- Создал системного пользователя git
- Настроил firewall и SELinux
- Настроил бэкапы и план обновлений
Администратор Gitea (приложение):
- Выполнил настройку через веб-инсталлер
- Создал администратора и базовые репозитории
- Настроил почту и SSH-ключи
- Настроил политики доступа
Разработчик:
- Сгенерировал SSH-ключ и добавил в Gitea
- Клонировал тестовый репозиторий
- Создал Pull Request и проверил CI (если есть)
Мини-методология безопасного обновления (рекомендуемый процесс)
- В тестовой среде применить обновление и прогнать smoke-тесты.
- Сделать файловую и БД-резервную копию продакшена.
- Перевести систему в режим обслуживания (если требуется).
- Выполнить обновление на продакшене.
- Проверить работоспособность ключевых функций.
- При проблемах выполнить откат согласно плану.
Краткий глоссарий (1‑строчные определения)
- Gitea: лёгкая платформа для хостинга Git-репозиториев с веб-интерфейсом.
- PostgreSQL: объектно-реляционная СУБД, используемая для хранения данных Gitea.
- systemd: менеджер системных служб Linux.
- Let’s Encrypt: бесплатный центр сертификации TLS.
- Certbot: клиент для автоматического получения сертификатов Let’s Encrypt.
Тесты приёмки (короткие проверки)
- Переход на https://git.example.com — страница логина доступна.
- Создание репозитория через GUI — репозиторий виден и клонируется.
- Push изменений по SSH — изменения видны в web UI.
- Отправка уведомления по почте — получение тестового письма.
Заключение
Вы установили и настроили Gitea на Fedora 34: подготовили систему, настроили PostgreSQL, создали пользователя git, установили бинарник и systemd-сервис, настроили Nginx + TLS и почтовые уведомления. Включены рекомендации по безопасности, резервному копированию и обновлению. Используйте чеклисты и runbook для повышения надёжности эксплуатации.
Если у вас возникли вопросы по конкретным ошибкам, приложите выводы логов (journalctl) и фрагменты конфигураций — это поможет быстрее найти причину.
Важно: следите за обновлениями Gitea и PostgreSQL и тестируйте план обновления в стенде перед продакшеном.
Похожие материалы
Сброс Samsung при заблокированном телефоне
Как разогнать монитор через NVIDIA Control Panel
APC_INDEX_MISMATCH: как исправить BSOD в Windows
Как исправить ошибку Blink 1011