Установка Gitea на Debian 12 с Docker
Кратко: за 10–20 минут вы установите лёгкий self‑hosted Git‑сервер Gitea на Debian 12 с Docker, настроите PostgreSQL, Nginx как обратный прокси с SSL (Let’s Encrypt), добавите SSH‑доступ, создадите первый репозиторий и настроите регулярное резервное копирование. В статье — пошаговые команды, файлы конфигурации, чек‑листы для роли администратора и рекомендации по безопасности.
Важно: перед началом убедитесь, что у вас есть FQDN (например, gitea.example.com), доступ по sudo и открытые порты 80/443/SSH (или альтернативный SSH‑порт для Gitea).
Что будет в статье
- Подготовка сервера и проверка зависимостей
- Установка Docker и Docker Compose
- Развёртывание Gitea + PostgreSQL через docker compose
- Настройка Nginx и SSL (Certbot)
- Создание первого репозитория и настройка SSH‑ключей
- Резервное копирование, восстановление и обновление
- Чек‑листы, план отката, тесты приёмки и советы по безопасности
Основные термины
- Gitea — лёгкая система размещения Git‑репозиториев с веб‑интерфейсом.
- Docker Compose — инструмент для описания и запуска многоконтейнерных Docker‑приложений.
- FQDN — полное доменное имя, например gitea.example.com.

Gitea — это open‑source решение для хостинга репозиториев на основе Git. Проект написан на Go и работает на множестве ОС и архитектур (amd64, i386, ARM и др.). Gitea включает веб‑редактор репозиториев, трекер задач, pull‑request, управление пользователями, уведомления, встроенную wiki, поддержку LFS, Git‑хуки и многое другое.
Gitea достаточно лёгкий, поэтому подходит для серверов с ограниченными ресурсами — даже VPS с 1‑2 ГБ ОЗУ может работать, если правильно настроить swap и сервисы.
Цель: установить и настроить Gitea на Debian 12 с помощью Docker, защитить доступ через Nginx + HTTPS и выполнить первый рабочий цикл (создать репозиторий, подключиться по SSH, сделать коммит).
Предварительные требования
- Сервер с Debian 12 и доступом по sudo.
- Нерoot‑пользователь с правами sudo.
- FQDN (например gitea.example.com), указывающий на IP сервера.
- Рекомендуется 1–2 ГБ RAM; при 1 ГБ включите swap.
- Обновлённый пакетный индекс и установленные базовые утилиты.
Примеры команд обновления и установки базовых пакетов:
$ sudo apt update && sudo apt upgrade$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -yПримечание: команды приведены с sudo — выполняйте их от вашего администратора.
Шаг 1 — Настройка брандмауэра (ufw)
Debian поставляется с ufw (Uncomplicated Firewall). Проверьте статус:
$ sudo ufw statusЕсли статус inactive — включите правила для SSH и веб‑портов:
$ sudo ufw allow OpenSSH
$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw enableПроверьте статус снова:
$ sudo ufw statusВажно: если вы меняете SSH‑порт системы, сначала добавьте правило для нового порта, чтобы не потерять доступ.
Шаг 2 — Установка Docker и Docker Compose
Debian 12 может содержать старые пакеты Docker в репозитории. Лучше установить официальные пакеты Docker:
Импорт GPG‑ключа Docker:
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpgДобавьте репозиторий Docker (команда подставляет архитектуру и кодовое имя Debian автоматически):
$ echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullОбновите список пакетов и установите Docker + плагин compose:
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПроверьте статус сервиса Docker:
$ sudo systemctl status dockerЧтобы запускать docker без sudo, добавьте пользователя в группу docker и перелогиньтесь:
$ sudo usermod -aG docker $(whoami)
$ su - ${USER}
$ groupsШаг 3 — Создание пользователя git на хосте
Создаём системного пользователя git, который будет использоваться контейнером Gitea и для доступа по SSH:
$ sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git gitКлючевые опции:
- –system — системный пользователь (не предназначен для интерактивных логинов).
- –disabled-password — запрет входа по паролю, рекомендуется для безопасности.
- –home /home/git — домашняя директория.
Запомните UID и GID, которые будут выведены в ответе: они понадобятся при монтировании в контейнер.
Шаг 4 — Конфигурация и развёртывание Gitea через Docker Compose
Настройка системного времени
Проверим таймзону:
$ timedatectlПри необходимости измените на вашу зону, например Europe/Moscow или Asia/Kolkata:
$ sudo timedatectl set-timezone Europe/MoscowЭто гарантирует корректные временные метки в логах и коммитах при работе сервисов.
Директории для Gitea
Создаём рабочую папку и подпапки для данных Gitea и PostgreSQL:
$ mkdir ~/gitea-docker
$ cd ~/gitea-docker
$ mkdir {gitea,postgres}docker-compose.yml
Создайте файл docker-compose.yml и вставьте конфигурацию. Вставьте свои UID и GID (см. Шаг 3):
services:
server:
image: gitea/gitea:1.21.0
container_name: gitea
environment:
- USER_UID=105
- USER_GID=111
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /home/git/.ssh/:/data/git/.ssh
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2221:22"
depends_on:
- db
db:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
gitea:
external: falseПояснения:
- Контейнеры: gitea (веб + SSH) и postgres.
- Переменные окружения указывают Gitea, как подключаться к базе.
- Порты: 3000 — веб, 2221 — SSH контейнера (чтобы не конфликтовать с системным SSH).
- Том ./gitea смонтирован как /data в контейнере — здесь хранятся конфиг и данные; ./postgres хранит данные PostgreSQL.
Сохраните файл и запустите контейнеры:
$ docker compose up -dПроверьте статус контейнеров:
$ docker ps
$ docker compose psЕсли всё запущено — Gitea доступна на http://<ваш‑сервер>:3000 (или через Nginx и домен после настройки SSL).
Дополнительная настройка app.ini
Если нужно изменить параметры Gitea, добавьте или отредактируйте файл конфигурации в ~/gitea-docker/gitea/gitea/conf/app.ini. Его можно править как на хосте, так и внутри контейнера: /data/gitea/conf/app.ini.
Шаг 5 — Установка Nginx
Для надежного публичного доступа используем Nginx как обратный прокси (SSL termination).
Добавим официальный репозиторий nginx, импортировав ключ:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/nullДобавьте репозиторий и установите nginx:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
$ sudo apt update
$ sudo apt install nginxЗапустите nginx и проверьте версию:
$ sudo nginx -v
$ sudo systemctl start nginx
$ sudo systemctl status nginxПроверьте страницу по IP сервера в браузере — вы должны увидеть страницу приветствия Nginx.

Шаг 6 — SSL с Certbot (Let’s Encrypt)
Мы используем snapd‑версию certbot для актуальной версии Certbot.
$ sudo apt install snapd
$ sudo snap install core && sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --versionВыдача сертификата (пример):
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d gitea.example.comФайлы сертификатов будут в /etc/letsencrypt/live/gitea.example.com.
Сгенерируйте Diffie‑Hellman params (рекомендуется для усиления безопасности TLS):
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096Проверьте планировщик автопродления certbot:
$ sudo systemctl list-timers
$ sudo certbot renew --dry-runЕсли dry‑run прошёл успешно, сертификаты будут автоматически продлеваться.
Шаг 7 — Конфигурация Nginx для Gitea
Создайте файл конфигурации сайта:
$ sudo nano /etc/nginx/conf.d/gitea.confВставьте следующий блок (не забудьте заменить gitea.example.com на ваш FQDN):
# Connection header for WebSocket reverse proxy
map $http_upgrade $connection_upgrade {
default upgrade;
"" close;
}
map $remote_addr $proxy_forwarded_elem {
# IPv4 addresses can be sent as-is
~^[0-9.]+$ "for=$remote_addr";
# IPv6 addresses need to be bracketed and quoted
~^[0-9A-Fa-f:.]+$ "for=\"[$remote_addr]\"";
# Unix domain socket names cannot be represented in RFC 7239 syntax
default "for=unknown";
}
map $http_forwarded $proxy_add_forwarded {
# If the incoming Forwarded header is syntactically valid, append to it
"~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";
# Otherwise, replace it
default "$proxy_forwarded_elem";
}
# Redirect all non-encrypted to encrypted
server {
listen 80;
listen [::]:80;
server_name gitea.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name gitea.example.com;
ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/gitea.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
access_log /var/log/nginx/gitea.access.log main;
error_log /var/log/nginx/gitea.error.log;
tcp_nopush on;
# security headers
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
add_header Permissions-Policy "interest-cohort=()" always;
# . files
location ~ /\.(?!well-known) {
deny all;
}
location / {
client_max_body_size 100M;
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}Добавьте параметр хэш‑бакета имён серверов в nginx.conf, если требуется:
$ sudo nano /etc/nginx/nginx.conf
# добавьте server_names_hash_bucket_size 64; перед include /etc/nginx/conf.d/*.conf;
$ sudo nginx -t
$ sudo systemctl reload nginxШаг 8 — Доступ к Gitea и первоначальная настройка
Откройте https://gitea.example.com. Вы увидите экран установки. Многие поля будут заполнены автоматически на основе docker compose.

Убедитесь, что: Server Domain = gitea.example.com, Gitea Base URL = https://gitea.example.com, SSH Server Port = 2221 (если вы использовали порт 2221 в compose).
При желании настройте SMTP для отправки почты (Email Settings). Пример конфигурации показан на скриншоте (можно использовать Amazon SES, Mailgun, SMTP вашего провайдера).

В разделе Server and Third‑Party Service Settings можно отключить саморегистрацию, скрыть email‑адреса по умолчанию, включить требование входа для просмотра страниц и др.
Создайте администратора (Administrator Account Settings) и нажмите Install Gitea. После успешной установки вы попадёте на панель управления.

Если появляется 502/Bad Gateway — обновите страницу и проверьте логи контейнера gitea и nginx:
$ docker logs gitea
$ sudo tail -n 200 /var/log/nginx/gitea.error.logШаг 9 — Создание первого репозитория
На панели нажмите значок + и выберите New Repository.

Заполните параметры репозитория: имя, описание, лицензию, метки Issues и т.д. Выберите default branch (main/master).

После создания вы попадёте на страницу репозитория.

Шаг 10 — Настройка SSH для доступа к репозиторию
На локальной машине (например, Ubuntu) создайте SSH‑ключ для доступа к Gitea:
$ ssh-keygen -f ~/.ssh/gitea-demo -t rsa -b 4096 -C "HowtoForge Gitea Demo" -q -N "yourpassphrase"Выведите публичный ключ и скопируйте его в профиль Gitea (Settings → SSH/GPG Keys → Add Key):
$ cat ~/.ssh/gitea-demo.pub
Добавьте ключ, затем на локальной машине запустите ssh‑agent и добавьте ключ:
$ eval $(ssh-agent -t 3600)
$ ssh-add ~/.ssh/gitea-demoШаг 11 — Клонирование репозитория по SSH и первый коммит
Скопируйте SSH URL репозитория в Gitea (выберите SSH) и выполните:
$ git clone ssh://[email protected]:2221/navjot/howtoforge.gitПри первом подключении вам может быть предложено подтвердить отпечаток хоста — согласитесь, введя yes.
Проверьте статус, отредактируйте README.md, выполните git add/commit/push:
$ cd howtoforge
$ nano README.md
$ git add README.md
$ git commit -m "Update the Readme file for Gitea tutorial."
$ git push origin mainВ Gitea вы увидите обновлённый README и сообщение коммита.

Шаг 12 — Резервное копирование и восстановление Gitea
Gitea предоставляет утилиту dump для создания полного дампа данных и баз данных. Пример выполнения внутри docker‑контейнера:
$ docker exec -u git -it -w /app/gitea gitea bash -c '/usr/local/bin/gitea dump -c /data/gitea/conf/app.ini'Пояснения к команде:
- -u git — выполнение от имени пользователя git внутри контейнера.
- -w /app/gitea — рабочая директория, куда будет записан архив дампа.
- ‘/usr/local/bin/gitea dump -c /data/gitea/conf/app.ini’ — запускает команду дампа с указанием конфигурационного файла.
Пример вывода и файлов: gitea-dump-
Восстановление из бэкапа (предполагается чистая установка Gitea):
$ docker exec --user git -it gitea bash
$ cd app/gitea
$ unzip gitea-dump-1700441501.zip
$ cd gitea-dump-1700441501
$ mv data/* /data/gitea
$ mv repos/* /data/git/gitea-repositories/
$ chown -R git:git /data
$ /usr/local/bin/gitea -c '/data/gitea/conf/app.ini' admin regenerate hooks
$ exitВажно: убедитесь, что папки назначения имеют корректные права и что контейнеры остановлены/запущены в нужном порядке.
Шаг 13 — Обновление Gitea
Алгоритм обновления контейнерной версии Gitea:
- Остановите и удалите контейнеры (данные на хосте сохраняются в томах/папках):
$ cd ~/gitea-docker
$ docker compose down --remove-orphansОбновите тег образа в docker-compose.yml (например, на новую версию gitea/gitea:1.22.0) или используйте latest c осторожностью.
Загрузите новый образ:
$ docker pull gitea/gitea:1.22.0- Запустите контейнеры снова:
$ docker compose up -d
$ docker psПосле обновления проверьте логи и выполните миграции, если Gitea их запросит.
Дополнительно: альтернативные варианты установки
- Установка из бинарных релизов Gitea — даёт максимальную гибкость, но требует ручной настройки сервисов и systemd.
- Установка из исходников — полезно для разработчиков Gitea или при необходимости в кастомных патчах.
- Пакетные репозитории (DEB) — удобны для простых сценариев, но могут отставать по версиям.
Каждый подход имеет trade‑offs: Docker упрощает развёртывание и изоляцию, бинарные пакеты дают больше контроля, а исходники — гибкость.
Практические рекомендации по безопасности
- Отключите регистрацию аккаунтов, если сервер предназначен только для команды.
- Включите двухфакторную аутентификацию (2FA) для администраторов.
- Настройте ограничение размеров файлов и включите LFS для больших бинарников.
- Регулярно обновляйте Gitea и PostgreSQL; применяйте патчи безопасности.
- Храните бэкапы в отдельном хранилище (S3‑совместимое, offsite) и регулярно проверяйте их восстановимость.
- Используйте fail2ban или аналог для защиты SSH, особенно если SSH‑порт открыт.
Чеклист администратора (быстрая проверка)
- FQDN зарегистрирован и указывает на IP сервера.
- Порты 80/443 открыты в ufw.
- Docker и docker compose установлены, пользователь добавлен в группу docker.
- Системный пользователь git создан, UID/GID записаны.
- Директории ./gitea и ./postgres созданы с нужными правами.
- Gitea и Postgres контейнеры работают.
- Nginx сконфигурирован и отвечает через HTTPS.
- Certbot получил сертификат и автопродление прошло dry‑run.
- SSH‑ключи пользователей добавлены в профили Gitea.
- Рабочий репозиторий можно клонировать, коммитить и пушить.
- Автоматические бэкапы настроены и тест восстановления отработал.
Чеклист разработчика (быстрая проверка)
- У меня есть SSH‑ключ и он добавлен в профиль Gitea.
- Я могу клонировать проект по SSH.
- Настроены CI/CD (при необходимости) и вебхуки.
- README содержит инструкции по сборке и разработке.
План отката и runbook при инциденте
- Симптомы: Gitea недоступна по HTTPS.
- Проверьте статусы nginx и docker: sudo systemctl status nginx; docker ps.
- Посмотрите логи nginx (/var/log/nginx/gitea.error.log) и контейнера Gitea (docker logs gitea).
- Если контейнер упал после обновления:
- Выполните docker compose down, верните предыдущий тег образа, docker pull, docker compose up -d.
- При необходимости восстановите бэкап: выгрузите архив и mv data/* /data/gitea.
- Если база данных повреждена:
- Остановите контейнеры, восстановите /var/lib/postgresql/data из резервной копии или восстановите дамп БД.
- Проверка после восстановления:
- Веб‑интерфейс доступен, SSH‑доступ работает, репозитории в порядке.
Диагностика типовых ошибок
- 502 Bad Gateway при доступе через Nginx: проверьте, слушает ли Gitea порт 3000 (docker ps) и корректно ли настроен proxy_pass.
- SSH‑подключение не проходит: проверьте, открыт ли порт 2221 на ufw, правильно ли проброшен порт в docker compose и настроены ли ключи в /home/git/.ssh/authorized_keys.
- Certbot не может получить сертификат: проверьте, что порт 80 доступен извне и домен указывает на сервер.
Модель зрелости (Maturity levels) для инсталляции Gitea
- Level 0 — Proof of Concept: Gitea запущен локально без SSL, данные внутри контейнера.
- Level 1 — Production lite: данные на хосте, PostgreSQL в контейнере, Nginx + Let’s Encrypt, бэкапы раз в сутки.
- Level 2 — Production hardened: внешнее хранилище для бэкапов, мониторинг/оповещения, 2FA, регулярные проверки восстановления.
- Level 3 — Enterprise: HA БД, репликация, кластеры контейнеров, RBAC, интеграция с LDAP/SSO.
Тесты приёмки (Критерии приёмки)
- Веб‑интерфейс доступен по HTTPS с валидным сертификатом.
- Вход администратора работает и можно создать репозиторий.
- Можно клонировать репозиторий по SSH и выполнить push/pull.
- Созданы и успешны ежедневные бэкапы; тестовое восстановление прошло.
Небольшая галерея ошибок и их решений
Проблема: Gitea пишет в логи ошибку о правах доступа к /data. Решение: проверьте владельца и права на каталоги, chown -R git:git ./gitea.
Проблема: Почта не отправляется. Решение: проверьте настройки SMTP в app.ini и соединение к SMTP (telnet host port), проверьте логи Gitea.
Decision flowchart (развёртывание)
flowchart TD
A[Подготовка сервера] --> B{Есть Docker?}
B -- Да --> C[Создать папки и docker-compose.yml]
B -- Нет --> D[Установить Docker]
D --> C
C --> E[Запустить docker compose]
E --> F{Контейнеры запустились?}
F -- Да --> G[Установить Nginx и Certbot]
F -- Нет --> H[Проверить логи контейнеров]
H --> E
G --> I[Настроить Nginx и SSL]
I --> J[Завершить установку в веб‑интерфейсе Gitea]Короткая инструкция для объявления проекта (соцсетка/Slack)
Gitea запущен на https://gitea.example.com — самодостаточный Git‑хостинг с поддержкой SSH, HTTPS, PR, Issues и wiki. Обратитесь к администратору для доступа и добавления SSH‑ключа.



1‑строчный глоссарий
- FQDN — полное доменное имя.
- LFS — Git Large File Storage.
- TLS — протокол шифрования, используемый HTTPS.
- UID/GID — идентификаторы пользователя/группы в Linux.
Заключение
В этой статье описан проверенный путь установки Gitea на Debian 12 с помощью Docker, Nginx и Certbot. Вы научились разворачивать сервис, настраивать SSL и SSH, создавать репозиторий и выполнять первые коммиты. Также приведены чек‑листы для администратора и разработчика, инструкции по бэкапу/восстановлению и рекомендации по безопасности.
Важно: храните резервные копии вне основного сервера и регулярно тестируйте процесс восстановления.
Если вам нужна помощь в адаптации compose‑файла под корпоративные требования (LDAP/SSO, S3 для бэкапов, масштабирование), напишите подробности окружения — предложу шаблон и план миграции.
- Установить Docker + добавить пользователя в docker.
- Создать системного пользователя git и запомнить UID/GID.
- Подготовить docker‑compose.yml и запустить контейнеры.
- Настроить Nginx и получить сертификат через Certbot.
- Создать администратора, добавить SSH‑ключи и создать репозиторий.
- Настроить ежедневные бэкапы и тест восстановления.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента