Гид по технологиям

Установка и настройка Gitea на Fedora 34

10 min read Self-hosting Обновлено 22 Nov 2025
Установка Gitea на Fedora 34
Установка 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. Откройте порт в брандмауэре (см. выше). В браузере перейдите по адресу:

https://YOURIPADDRESS:3000

Вас встретит веб-установщик Gitea. Введите параметры базы данных и общие настройки.

Параметры базы данных

Настройки установки Gitea — база данных

  • Database Type: PostgreSQL
  • Host: 127.0.0.1:5432
  • Username: gitea
  • Password: ваш_пароль
  • Database Name: gitea

Общие настройки

Настройки установки 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: по умолчанию

При необходимости укажите настройки почты и серверные параметры. Создайте администратора — его данные понадобятся для входа.

Необязательные настройки установщика Gitea

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

Панель аккаунта Gitea

Сделайте файл конфигурации /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. Если обновление нарушило работу, верните старую версию бинарника и перезапустите сервис.

План отката (шаблон)

  1. Остановить gitea: sudo systemctl stop gitea
  2. Заменить /usr/local/bin/gitea на сохранённую рабочую версию
  3. Перезапустить сервис: sudo systemctl start gitea
  4. Проверить логи и доступность

Шаг 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.

Добавление SSH-ключа в Gitea

Если в /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)

Восстановление (основной сценарий):

  1. Остановите gitea: sudo systemctl stop gitea
  2. Восстановите файловую часть: rsync или tar из бэкапа в /var/lib/gitea
  3. Восстановите базу данных: sudo -u postgres pg_restore -d giteadb /path/to/dump
  4. Установите права: sudo chown -R git:git /var/lib/gitea
  5. Запустите gitea: sudo systemctl start gitea

Проверьте целостность репозиториев и доступ в веб-интерфейс.

Аварийный план: runbook при падении Gitea

Шаги при недоступности сервиса:

  1. Проверить состояние systemd: sudo systemctl status gitea
  2. Посмотреть логи: sudo journalctl -u gitea -n 200
  3. Проверить диск и права: df -h, sudo ls -la /var/lib/gitea
  4. Проверить базу данных: sudo -u postgres psql -c “SELECT 1;”
  5. Перезапустить сервис: sudo systemctl restart gitea
  6. Если не помогает — откатить бинарник к предыдущей рабочей версии и перезапустить
  7. Если проблема в базе — восстановить из последнего успешного дампа (см. раздел резервного копирования)

Критические контакты: администратор базы данных, системный администратор сети.

Типичные проблемы и их решения

Проблема: 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.

Альтернативные способы установки (когда лучше выбрать другой способ)

  1. Docker / Docker Compose — если вы предпочитаете контейнеризацию и лёгкий перенос между серверами. Подходит для быстрых тестовых развёртываний и CI-пайплайнов.
  2. Пакеты RPM (если доступны) — удобнее в корпоративных репозиториях, позволяют автоматизировать обновления через dnf.
  3. Сборка из исходников — для кастомных сборок или патчей, когда нужен контроль над сборкой.

Короткая таблица сравнения:

  • Бинарник: просто, быстро, минимальные зависимости.
  • Docker: изолированно, удобно масштабировать, но требует знаний Docker и управления томами.
  • RPM: хорошая интеграция с системой управления пакетами.
  • Из исходников: гибкость, но сложнее в поддержке.

Руководство по выбору: когда что использовать (эвристики)

  • Нужна максимальная простота — бинарник.
  • Нужно быстро разворачивать и масштабировать — Docker/compose.
  • Централизованное управление пакетами в организации — RPM.
  • Необходима модификация исходников — сборка из исходников.

Совместимость и миграционные заметки

  • Gitea обычно поддерживает несколько последних релизов СУБД; перед обновлением проверьте совместимость версии Gitea с PostgreSQL в официальном CHANGELOG.
  • При миграции с SQLite на PostgreSQL — экспортируйте репозитории и импортируйте их в новую базу, тестируйте в тестовой среде.
  • SELinux: если включён, подготовьте политики или используйте permissive mode при первоначальной настройке. После настройки создайте постоянные правила.

Критерии приёмки (проверяем работоспособность)

  1. Веб-интерфейс доступен по HTTPS и отвечает кодом 200.
  2. Создание нового репозитория проходит без ошибок.
  3. Клонирование по HTTPS и SSH проходит успешно.
  4. Вебhook и почтовые уведомления доставляются (тестовое письмо отправлено).
  5. Пользовательские репозитории и права работают корректно.

Чеклисты по ролям

Администратор сервера:

  • Обновил систему и установил зависимости
  • Создал системного пользователя git
  • Настроил firewall и SELinux
  • Настроил бэкапы и план обновлений

Администратор Gitea (приложение):

  • Выполнил настройку через веб-инсталлер
  • Создал администратора и базовые репозитории
  • Настроил почту и SSH-ключи
  • Настроил политики доступа

Разработчик:

  • Сгенерировал SSH-ключ и добавил в Gitea
  • Клонировал тестовый репозиторий
  • Создал Pull Request и проверил CI (если есть)

Мини-методология безопасного обновления (рекомендуемый процесс)

  1. В тестовой среде применить обновление и прогнать smoke-тесты.
  2. Сделать файловую и БД-резервную копию продакшена.
  3. Перевести систему в режим обслуживания (если требуется).
  4. Выполнить обновление на продакшене.
  5. Проверить работоспособность ключевых функций.
  6. При проблемах выполнить откат согласно плану.

Краткий глоссарий (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 и тестируйте план обновления в стенде перед продакшеном.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство