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

Установка и настройка 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
Автор
Редакция

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

Сброс Samsung при заблокированном телефоне
Мобильные устройства

Сброс Samsung при заблокированном телефоне

Как разогнать монитор через NVIDIA Control Panel
Гайды

Как разогнать монитор через NVIDIA Control Panel

APC_INDEX_MISMATCH: как исправить BSOD в Windows
Инструкции

APC_INDEX_MISMATCH: как исправить BSOD в Windows

Как исправить ошибку Blink 1011
Техническая поддержка

Как исправить ошибку Blink 1011

Восстановление удалённых SMS на Samsung
Мобильные

Восстановление удалённых SMS на Samsung

Как сбросить Samsung планшет до заводских настроек
Руководство

Как сбросить Samsung планшет до заводских настроек