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

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, нужны дополнительные шаги (см. раздел Безопасность).
Путь установки — обзор
- Подготовка системы и установка зависимостей.
- Настройка PostgreSQL.
- Установка бинарника Gitea и systemd-сервиса.
- Первичная веб-конфигурация и перевод на Unix socket.
- Настройка Nginx и получение HTTPS-сертификата.
- Дополнительные шаги: логирование, SSH, безопасность, резервное копирование.
Шаг 1: Подготовка системы
Обновите систему и перезагрузите её:
dnf update -y
rebootУстановите необходимые пакеты:
dnf install -y git postgresql postgresql-server nginx sudo wgetCertbot (для 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 дамп успешно восстанавливается на тестовой базе.
- Репозитории клонируются и не теряют коммиты.
Инцидентный план и откат
Шаблон быстрого отката при неудачном обновлении:
- Остановить Gitea:
systemctl stop gitea.service - Восстановить базу из последнего валидного дампа на тестовой машине и проверить.
- Восстановить каталоги репозиториев из резервной копии с помощью rsync.
- Вернуть предыдущую версию бинарника Gitea (с хранением старых бинарников в /opt/gitea-versions).
- Запустить 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 (временно для установки)
План обновлений
- Создать резервную копию БД и репозиториев.
- Остановить Gitea.
- Заменить бинарник или пакет Gitea на новую версию.
- Запустить сервис, проверить логи и функциональность.
- Откат при проблемах по инцидентному плану.
Тесты приёмки
- Веб-интерфейс открывается по HTTPS и корректно перенаправляет HTTP на HTTPS.
- Создание, клонирование и пуш в новый репозиторий работают по HTTPS и/или SSH.
- Восстановление из резервной копии на тестовой машине проходит без ошибок.
Итог
Эта инструкция покрывает установку Gitea на CentOS 8, настройку PostgreSQL, перевод сервиса на unix socket и размещение за Nginx с HTTPS. Дополнительно приведены рекомендации по безопасности, резервному копированию и инцидентному плану. После настройки проведите проверку доступа, работу SSH/HTTPS и настройку автоматического продления сертификатов.
Важное: адаптируйте права доступа и политику хранения данных под требования вашей организации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента