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

Установка Gitea с Nginx и Let's Encrypt на Ubuntu 20.04

• 6 min read • Инфраструктура • Обновлено 28 Nov 2025
Gitea на Ubuntu 20.04: Nginx и Let's Encrypt
Gitea на Ubuntu 20.04: Nginx и Let's Encrypt

Что такое Gitea

Gitea — лёгкая, открытая и самохостимая система управления исходным кодом, написанная на Go. Подойдёт как для домашних серверов, так и для корпоративного использования: поддерживает репозитории, трекер задач, встроенную вики и управление пользователями. В одном предложении: Gitea — компактная альтернатива GitHub/GitLab для собственного хостинга.

Важно: в этом руководстве в примерах используется бинарь Gitea 1.12.1 (как в оригинале). Перед развёртыванием рекомендуется проверить актуальную версию на https://dl.gitea.io.

Основные шаги (кратко)

  • Подготовить сервер Ubuntu 20.04 и доменное имя.
  • Установить Git и MariaDB, настроить базу для Gitea.
  • Скачать бинарь Gitea, создать пользователя и директории.
  • Настроить systemd-сервис для автозапуска.
  • Установить Nginx как обратный прокси и получить SSL через Certbot.
  • Пройти веб-инсталлятор Gitea и выполнить базовые проверки.

Пререквизиты

  • Сервер с Ubuntu 20.04.
  • Доменное имя, указывающее на IP сервера (A/AAAA запись).
  • Доступ root или пользователь с sudo.
  • Базовые знания командной строки и редактирования файлов.

Установка Git

Установите Git для работы с репозиториями:

apt-get install git -y

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

Установка и настройка MariaDB

MariaDB часто используется с Gitea для производительности и масштабируемости. В примерах ниже показано, как защитить и подготовить MariaDB.

  1. Запустите скрипт безопасности MariaDB:
mysql_secure_installation

Следуйте подсказкам: задайте root-пароль, удалите анонимных пользователей, запретите удалённый вход для root и удалите тестовую базу.

  1. Войдите в консоль MariaDB:
mysql -u root -p
  1. Установите глобальную опцию innodb_file_per_table:
MariaDB [(none)]>SET GLOBAL innodb_file_per_table = ON;
  1. Создайте базу и пользователя для Gitea (замените пароль на надёжный):
MariaDB [(none)]>CREATE DATABASE giteadb;
MariaDB [(none)]>CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]>GRANT ALL ON giteadb.* TO 'gitea'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
MariaDB [(none)]>ALTER DATABASE giteadb CHARACTER SET = utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>EXIT;

Совет: используйте длинный уникальный пароль и храните его в менеджере паролей.

  1. Добавьте настройки InnoDB в конфиг MariaDB:
nano /etc/mysql/mariadb.conf.d/50-server.cnf

Добавьте в секцию [mysqld]:

innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_default_row_format = dynamic

Перезапустите сервис:

systemctl restart mariadb

Заметки и распространённые проблемы:

  • Если MariaDB не запускается, проверьте /var/log/mysql/error.log.
  • При ошибках соединения убедитесь, что bind-address не блокирует localhost.
  • Для удалённого доступа настраивайте пользователю хост (например ‘gitea’@’10.0.0.5’) и открывайте порт 3306 в брандмауэре лишь при необходимости.

Загрузка и установка Gitea

В примере используется конкретный бинарь. Скачайте его и установите в /usr/bin:

wget https://dl.gitea.io/gitea/1.12.1/gitea-1.12.1-linux-amd64
cp gitea-1.12.1-linux-amd64 /usr/bin/gitea
chmod 755 /usr/bin/gitea

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

adduser --system --shell /bin/bash --group --disabled-password --home /home/git git
mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chown git:git /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
chmod 770 /etc/gitea

Рекомендация: храните конфигурацию (app.ini) в /etc/gitea и резервируйте /var/lib/gitea/data и /etc/gitea регулярно.

Создание systemd-сервиса для Gitea

Создайте файл:

nano /etc/systemd/system/gitea.service

Вставьте содержимое:

[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=mysql.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/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 и запустите сервис:

systemctl daemon-reload
systemctl start gitea
systemctl enable gitea
systemctl status gitea

Проверьте логи через journalctl -u gitea -f.

Примечание: если вы используете AppArmor/SELinux, возможно потребуется создать профиль или ослабить правила для /var/lib/gitea.

Конфигурация Nginx как обратного прокси

Установите Nginx:

apt-get install nginx -y

Создайте виртуальный хост:

nano /etc/nginx/sites-available/gitea

Пример конфигурации (замените server_name на ваш домен):

upstream gitea {
    server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name gitea.linuxbuz.com;
    root /var/lib/gitea/public;
    access_log off;
    error_log off;

    location / {
      try_files maintain.html $uri $uri/index.html @node;
    }

    location @node {
      client_max_body_size 0;
      proxy_pass http://localhost:3000;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_max_temp_file_size 0;
      proxy_redirect off;
      proxy_read_timeout 120;
    }
}

Активируйте сайт и перезапустите Nginx:

ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
systemctl restart nginx
systemctl status nginx

Советы:

  • Убедитесь, что firewall (ufw) разрешает порты 80 и 443.
  • Для многодоменных инстансов добавляйте отдельный server блок или используйте map/letsencrypt.

Получение SSL через Let’s Encrypt (Certbot)

Установите certbot и плагин для Nginx:

apt-get install certbot python3-certbot-nginx -y

Запустите получение сертификата, указав ваш домен:

certbot --nginx -d gitea.linuxbuz.com

Следуйте интерактивным подсказкам: введите email, согласитесь с условиями и выберите редирект на HTTPS.

Проверка и автоматическое продление:

  • Certbot создаёт systemd-timer для автоматического обновления. Проверьте работоспособность:
systemctl list-timers | grep certbot
certbot renew --dry-run

Если dry-run проходит — автоматическое обновление настроено.

Доступ к веб-интерфейсу Gitea

Откройте в браузере:

https://gitea.linuxbuz.com/install

Во время установки через веб-форму вам потребуется указать:

  • Database settings: имя базы, пользователь, пароль (giteadb / gitea / password в примере).
  • General settings: путь репозиториев, пользователь запуска, порт (по умолчанию 3000), Base URL (https://gitea.linuxbuz.com).
  • Admin account: логин администратора, e-mail и пароль.

Визуальные подсказки (скриншоты):

Скриншот страницы настроек базы данных Gitea

Скриншот общих настроек Gitea в веб-инсталляторе

Скриншот ввода базового URL и порта для Gitea

Скриншот дополнительных (опциональных) настроек Gitea

После успешной установки вы увидите дашборд Gitea:

Скриншот панели управления Gitea после установки

Критерии приёмки

  • Сервис Gitea запущен и активен: systemctl status gitea => active (running).
  • Gitea доступна по HTTPS на вашем домене и сертификат валиден.
  • Администратор может войти в веб-интерфейс и создать репозиторий.
  • Репозитории клонируются и пушатся по HTTP(S) и/или SSH (если настроен SSH).
  • Резервное копирование данных и конфигов реализовано (см. разделы ниже).

Резервное копирование и восстановление (SOP)

Минимальный набор для бэкапа:

  • Конфигурация: /etc/gitea/app.ini и /etc/gitea/*
  • Данные: /var/lib/gitea/data и /var/lib/gitea/indexers и /var/lib/gitea/public
  • База данных: дамп MariaDB (mysqldump)

Пример простого скрипта для ежедневного бэкапа (пример, адаптируйте пути и права):

#!/bin/bash
BACKUP_DIR=/var/backups/gitea
mkdir -p $BACKUP_DIR
DATE=$(date +"%F_%H%M")
mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" giteadb > $BACKUP_DIR/giteadb_$DATE.sql
tar -czpf $BACKUP_DIR/gitea_files_$DATE.tar.gz /etc/gitea /var/lib/gitea
find $BACKUP_DIR -type f -mtime +14 -delete

Критерии восстановления: развернуть архивы и дамп базы, перезапустить сервис и убедиться, что репозитории доступны.

Безопасность и рекомендации

  • Используйте надёжные пароли и, при возможности, двухфакторную аутентификацию для админов.
  • Отключите регистрацию, если вы хотите частный инстанс (в настройках Gitea).
  • Регулярно обновляйте Gitea и зависимости (MariaDB, Nginx, Certbot).
  • Настройте бэкапы и проверяйте их восстановление хотя бы раз в квартал.
  • Для публичных инстансов ограничьте доступ к базе данных только с доверенных адресов.

Особая заметка о GDPR и приватности: если вы храните персональные данные пользователей (e-mail, IP), убедитесь, что ваша политика соответствия локальным требованиям. В логах Nginx/ Gitea могут храниться IP и e-mail — документируйте политику хранения и удаления данных.

Отладка: распространённые ошибки и решения

  • Gitea не запускается: проверьте права на /var/lib/gitea, Owner должен быть git:git.
  • Ошибка подключения к базе: проверьте credentials в /etc/gitea/app.ini и доступность MariaDB.
  • Certbot не может получить сертификат: проверьте, что домен указывает на сервер и порт 80 открыт.
  • Nginx возвращает 502 Bad Gateway: убедитесь, что Gitea слушает на порту 3000 (ss -lntp | grep 3000).

Быстрая шпаргалка команд

  • Проверить статус Gitea: systemctl status gitea
  • Смотреть логи Gitea: journalctl -u gitea -f
  • Перезапустить Nginx: systemctl restart nginx
  • Тест продления сертификата: certbot renew –dry-run
  • Дамп бд: mysqldump -u root -p giteadb > giteadb.sql

Решение: SQLite vs MariaDB (диаграмма выбора)

flowchart TD
  A[Нужен быстрый тест/малый инстанс?] -->|Да| B[SQLite]
  A -->|Нет, продакшн с нагрузкой| C[MariaDB/MySQL]
  B --> D[Простая установка, один файл, меньше требований]
  C --> E[Лучше масштабирование, бэкапы, репликация]

Роль‑ориентированные чеклисты

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

  • Настроил домен и DNS
  • Установил Certbot и получил сертификат
  • Настроил бэкапы и проверил восстановление

DevOps:

  • Настроил мониторинг и логирование (Prometheus/ELK при необходимости)
  • Обеспечил автоматическое обновление сертификатов
  • Контролирует права доступа к файловой системе

Разработчик/Пользователь:

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

Тестовые случаи / Критерии проверки

  • Успешный вход администратора и создание репозитория.
  • Клонирование репозитория по HTTPS и (если настроено) по SSH.
  • Создание issue и wiki-страницы.
  • Воспроизведение бэкапа: восстановление из архива и дампа.

Краткое резюме

  • Gitea — лёгкое решение для собственного хостинга git-репозиториев.
  • MariaDB обеспечивает более надёжную работу в продакшне по сравнению с SQLite.
  • Nginx + Certbot дают простую и безопасную схему доступа по HTTPS.
  • Внедрите регулярные бэкапы и мониторинг для устойчивости инстанса.

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

Заключение

Поздравляем — вы развернули Gitea с обратным прокси Nginx и SSL от Let’s Encrypt на Ubuntu 20.04. После установки рекомендуется пройти базовую настройку безопасности в веб-интерфейсе, настроить регулярные бэкапы и интеграцию с системой мониторинга. Для подробной документации и более продвинутых сценариев посетите официальную документацию Gitea: https://docs.gitea.io.

Поделиться: 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 быстро