Установка Gitea с Nginx и Let's Encrypt на Ubuntu 20.04
Что такое 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.
- Запустите скрипт безопасности MariaDB:
mysql_secure_installationСледуйте подсказкам: задайте root-пароль, удалите анонимных пользователей, запретите удалённый вход для root и удалите тестовую базу.
- Войдите в консоль MariaDB:
mysql -u root -p- Установите глобальную опцию innodb_file_per_table:
MariaDB [(none)]>SET GLOBAL innodb_file_per_table = ON;- Создайте базу и пользователя для 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;Совет: используйте длинный уникальный пароль и храните его в менеджере паролей.
- Добавьте настройки 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 запущен и активен: 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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента