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

Установка Gitea на CentOS 8 с Nginx и HTTPS

• 7 min read • DevOps • Обновлено 18 Nov 2025
Gitea на CentOS 8 с Nginx и HTTPS
Gitea на CentOS 8 с Nginx и HTTPS

Логотип Gitea: чашка чая и значок Git

Gitea — это веб-приложение для хостинга исходного кода, написанное на Go. Как следует из названия, оно работает с Git, аналогично GitLab и GitHub. В этом руководстве показана установка Gitea на CentOS 8 с использованием Nginx в роли обратного прокси и HTTPS через Let’s Encrypt.

Коротко о терминах

  • Gitea — лёгкий self-hosted сервис для Git.
  • Reverse proxy — сервер (здесь Nginx), принимающий внешние HTTP/HTTPS запросы и пересылающий их внутреннему приложению.
  • Unix socket — файл сокета для локальной связи между Nginx и Gitea, безопаснее и производительнее TCP в локальной среде.

Требования

  • Сервер с CentOS 8 и root-доступом.
  • Зарегистрированный домен, указывающий на ваш сервер (A запись для IPv4, опционно AAAA для IPv6).
  • Переменная окружения $EDITOR должна быть установлена в предпочитаемый текстовый редактор.
  • Доступ к SMTP-серверу для уведомлений по почте (опционально).

Важное: это руководство предполагает, что SELinux отключён или находится в режиме permissive. Если SELinux включён в режиме enforcing, нужны дополнительные шаги (см. раздел Безопасность).

Путь установки — обзор

  1. Подготовка системы и установка зависимостей.
  2. Настройка PostgreSQL.
  3. Установка бинарника Gitea и systemd-сервиса.
  4. Первичная веб-конфигурация и перевод на Unix socket.
  5. Настройка Nginx и получение HTTPS-сертификата.
  6. Дополнительные шаги: логирование, SSH, безопасность, резервное копирование.

Шаг 1: Подготовка системы

Обновите систему и перезагрузите её:

dnf update -y
reboot

Установите необходимые пакеты:

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot (для Let’s Encrypt) недоступен в базовых репозиториях CentOS 8 как пакет, поэтому используем скрипт certbot-auto. Скачайте его:

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Установите права на исполнение:

chmod 0755 /usr/local/bin/certbot-auto

Установите certbot и его зависимости (при появлении запроса в пакетном менеджере подтвердите установку y):

certbot-auto --install-only

Создайте системного пользователя для Gitea:

useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea

Создайте структуру каталогов и установите права:

mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
chown -R gitea:gitea /var/lib/gitea
chown -R gitea:gitea /var/run/gitea
chown -R root:gitea /etc/gitea
chmod -R 750 /var/lib/gitea
chmod 770 /etc/gitea

Примечание: права на /etc/gitea будут ужесточены после веб-инсталлятора, поскольку там хранится app.ini с чувствительными данными.

Откройте порты 80 и 443 постоянно, порт 3000 временно для первого запуска веб-инсталлятора:

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload
firewall-cmd --add-port 3000/tcp

Шаг 2: Настройка базы данных PostgreSQL

Инициализируйте PostgreSQL и включите сервис:

postgresql-setup --initdb --unit postgresql
systemctl enable --now postgresql.service

Создайте роль и базу данных для Gitea:

sudo -u postgres psql

Внутри psql выполните:

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

Откройте файл конфигурации клиентской аутентификации PostgreSQL для разрешения локального подключения по паролю:

$EDITOR /var/lib/pgsql/data/pg_hba.conf

Найдите секцию # IPv4 local connections: и сразу после неё добавьте:

# IPv4 local connections:
host    gitea       gitea       127.0.0.1/32        md5

Сохраните и перезапустите PostgreSQL:

systemctl restart postgresql.service

Шаг 3: Установка Gitea

Скачайте бинарник (пример для linux-amd64):

wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
chmod 755 /usr/local/bin/gitea

Создайте systemd unit-файл:

$EDITOR /etc/systemd/system/gitea.service

Вставьте следующее содержимое:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target

Перезагрузите systemd и включите автозапуск Gitea:

systemctl daemon-reload
systemctl enable gitea.service

Шаг 4: Первичная настройка Gitea через веб-инсталлятор

Запустите Gitea и откройте установщик в браузере:

systemctl start gitea.service

Перейдите по адресу: http://your_domain:3000/install и заполните параметры:

  • Database Type: PostgreSQL
  • Host: 127.0.0.1:5432
  • Username: gitea
  • Password: пароль, который вы задали в PostgreSQL
  • Database Name: gitea
  • SSL: Disable
  • Site Title: любое название
  • Repository Root Path: /var/lib/gitea/data/repositories
  • Git LFS Root Path: /var/lib/gitea/data/lfs
  • Run As Username: gitea
  • SSH Server Domain: your_domain
  • SSH Server Port: 22
  • Gitea HTTP Listen Port: 3000
  • Gitea Base URL: https://your_domain/
  • Log Path: /var/lib/gitea/log

Настройте email и остальное по необходимости и нажмите “Install Gitea”. После установки вы можете увидеть перенаправление на некорректный URL — это нормально до настройки Nginx и HTTPS.

Остановите Gitea, чтобы перейти на сокет Unix:

systemctl stop gitea.service

Ужесточьте права на /etc/gitea и конфигурационный файл:

chmod 750 /etc/gitea
chown root:gitea /etc/gitea/app.ini
chmod 640 /etc/gitea/app.ini

Откройте конфиг Gitea и переключитесь на unix socket. Отредактируйте /etc/gitea/app.ini:

$EDITOR /etc/gitea/app.ini

В секции [server] удалите строку:

HTTP_PORT = 3000

И добавьте:

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Замечание: значение права сокета 666 даёт доступ чтения/записи всем пользователям. При необходимости выберите более строгие права и убедитесь, что Nginx и Gitea имеют доступ к сокету (обычно через группу gitea).

Шаг 5: Настройка обратного прокси и HTTPS

Остановите Nginx, чтобы certbot мог слушать порт 80:

systemctl stop nginx.service

Получите сертификат Let’s Encrypt в режиме standalone (замените email и your_domain):

certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain

Сертификаты будут сохранены в /etc/letsencrypt/live/your_domain/ (fullchain.pem и privkey.pem).

Создайте конфигурацию Nginx:

$EDITOR /etc/nginx/conf.d/gitea.conf

Вставьте следующие блоки серверов (замените your_domain на ваш домен):

server {
        listen 80;
        listen [::]:80;
        server_name your_domain;
        return 301 https://$server_name$request_uri;
    access_log /var/log/nginx/gitea-proxy_access.log;
    error_log /var/log/nginx/gitea-proxy_error.log;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name your_domain;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        location / {
                proxy_pass http://unix:/var/run/gitea/gitea.sock;
    }
    access_log /var/log/nginx/gitea-proxy_access.log;
    error_log /var/log/nginx/gitea-proxy_error.log;
}

Проверьте синтаксис и запустите сервисы:

nginx -t
systemctl start nginx.service gitea.service

После этого Gitea должна быть доступна по адресу: https://your_domain

Дополнительная настройка

Конфигурация логирования

По умолчанию Gitea логирует события уровня info и выше. Чтобы уменьшить объём логов, отредактируйте секцию [log] в /etc/gitea/app.ini, например:

[log]
MODE = file
LEVEL = warn
ROOT_PATH = /var/lib/gitea/log

Примените изменения перезапуском сервиса:

systemctl restart gitea.service

Встроенный SSH-сервер Gitea

Если вы хотите, чтобы Gitea управляла SSH-соединениями самостоятельно (без system sshd), включите его в конфиге:

START_SSH_SERVER = true
SSH_PORT = 2222

Не забудьте открыть порт в firewall:

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload

Резервное копирование и восстановление — мини-методология

  • Еженедельно выполняйте бэкап базы данных и репозиториев. Для PostgreSQL используйте pg_dump:
pg_dump -U gitea -h 127.0.0.1 gitea > /var/backups/gitea-db-$(date +%F).sql
  • Репозитории и LFS-файлы копируйте rsync:
rsync -a --delete /var/lib/gitea/data/repositories /var/backups/gitea-repositories
rsync -a --delete /var/lib/gitea/data/lfs /var/backups/gitea-lfs
  • Резервируйте /etc/gitea/app.ini и список SSH-ключей пользователей (если храните отдельно).

Критерии приёмки бэкапа:

  • SQL дамп успешно восстанавливается на тестовой базе.
  • Репозитории клонируются и не теряют коммиты.

Инцидентный план и откат

Шаблон быстрого отката при неудачном обновлении:

  1. Остановить Gitea: systemctl stop gitea.service
  2. Восстановить базу из последнего валидного дампа на тестовой машине и проверить.
  3. Восстановить каталоги репозиториев из резервной копии с помощью rsync.
  4. Вернуть предыдущую версию бинарника Gitea (с хранением старых бинарников в /opt/gitea-versions).
  5. Запустить Gitea и проверить доступность и аутентификацию.

Безопасность и hardening

  • Права файлов: конфигурация в /etc/gitea должна быть доступна только root и группе gitea; app.ini — 640.
  • Systemd: убедитесь, что unit-файл Gitea запускается от пользователя gitea, и ограничьте привилегии, если нужно, добавлением опций systemd (ProtectSystem, PrivateTmp, NoNewPrivileges).
  • SELinux: если включён, добавьте соответствующие правила для сокета и /var/lib/gitea; без них Nginx не сможет подключиться к unix-сокету.
  • TLS: обновляйте сертификаты автоматически (certbot имеет systemd timer или cron). Проверьте certbot-auto renew --dry-run.
  • Ограничьте доступ к портам SSH и управляющим интерфейсам через firewall и, если возможно, через VPN.
  • Логи: храните логи отдельно и настраивайте ротацию через logrotate.

Конфиденциальность и соответствие (GDPR)

  • E-mail адреса пользователей и журналы аутентификации — персональные данные. Определите политику хранения логов и удаления данных по запросу.
  • Регулярно очищайте или архивируйте старые логи и резервные копии в соответствии с политикой конфиденциальности.

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

Админ (до развертывания):

  • Зарегистрировать домен и настроить DNS.
  • Подготовить сервер и учётную запись root.
  • Создать пользователя gitea и каталоги с правильными правами.

DevOps:

  • Настроить PostgreSQL и pg_hba.conf.
  • Настроить systemd unit и права доступа к сокету.
  • Настроить Nginx и certbot для HTTPS.
  • Настроить автоматическое обновление сертификатов.

Пользователь (владение репозиториями):

  • Создать аккаунт в Gitea.
  • Добавить SSH-ключи в профиль.
  • Проверить создание и клонирование репозитория.

Когда этот подход не подходит (контрпримеры)

  • Если вам нужна встроенная CI/CD, масштабируемый runners и сложные корпоративные политики — Gitea можно использовать, но GitLab или GitHub Enterprise могут быть предпочтительнее.
  • В окружениях с очень строгим SELinux politikami или корпоративными прокси могут потребоваться дополнительные настройки, и standalone-инсталляция через сокет может потребовать изменений.

Альтернативные подходы

  • Использовать Docker-контейнеры (официальный образ Gitea) для изоляции и простой миграции.
  • Использовать готовые RPM-пакеты или менеджеры конфигурации (Ansible, Puppet) для автоматизации.

Короткая справка — ключевые пути и порты

  • Пользователь: gitea
  • Дом репозитория: /var/lib/gitea/data/repositories
  • Логи: /var/lib/gitea/log
  • Конфиг: /etc/gitea/app.ini
  • Unix socket: /run/gitea/gitea.sock
  • Порты: 80, 443 (Nginx), 22 (SSH, если внешний), 3000 (временно для установки)

План обновлений

  1. Создать резервную копию БД и репозиториев.
  2. Остановить Gitea.
  3. Заменить бинарник или пакет Gitea на новую версию.
  4. Запустить сервис, проверить логи и функциональность.
  5. Откат при проблемах по инцидентному плану.

Тесты приёмки

  • Веб-интерфейс открывается по HTTPS и корректно перенаправляет HTTP на HTTPS.
  • Создание, клонирование и пуш в новый репозиторий работают по HTTPS и/или SSH.
  • Восстановление из резервной копии на тестовой машине проходит без ошибок.

Итог

Эта инструкция покрывает установку Gitea на CentOS 8, настройку PostgreSQL, перевод сервиса на unix socket и размещение за Nginx с HTTPS. Дополнительно приведены рекомендации по безопасности, резервному копированию и инцидентному плану. После настройки проведите проверку доступа, работу SSH/HTTPS и настройку автоматического продления сертификатов.

Важное: адаптируйте права доступа и политику хранения данных под требования вашей организации.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро