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

Установка Gitea на Debian 12 с Docker

11 min read DevOps Обновлено 26 Nov 2025
Gitea на Debian 12 с Docker — пошагово
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

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.

Страница по умолчанию 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.

Установка Gitea — часть 1

Убедитесь, что: 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 вашего провайдера).

Настройки почты Gitea

В разделе Server and Third‑Party Service Settings можно отключить саморегистрацию, скрыть email‑адреса по умолчанию, включить требование входа для просмотра страниц и др.

Создайте администратора (Administrator Account Settings) и нажмите Install Gitea. После успешной установки вы попадёте на панель управления.

Панель 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‑ключи в профиле Gitea

Добавьте ключ, затем на локальной машине запустите 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 и сообщение коммита.

Успешный коммит в Gitea

Шаг 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-.zip.

Восстановление из бэкапа (предполагается чистая установка 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:

  1. Остановите и удалите контейнеры (данные на хосте сохраняются в томах/папках):
$ cd ~/gitea-docker
$ docker compose down --remove-orphans
  1. Обновите тег образа в docker-compose.yml (например, на новую версию gitea/gitea:1.22.0) или используйте latest c осторожностью.

  2. Загрузите новый образ:

$ docker pull gitea/gitea:1.22.0
  1. Запустите контейнеры снова:
$ 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 при инциденте

  1. Симптомы: Gitea недоступна по HTTPS.
    • Проверьте статусы nginx и docker: sudo systemctl status nginx; docker ps.
    • Посмотрите логи nginx (/var/log/nginx/gitea.error.log) и контейнера Gitea (docker logs gitea).
  2. Если контейнер упал после обновления:
    • Выполните docker compose down, верните предыдущий тег образа, docker pull, docker compose up -d.
    • При необходимости восстановите бэкап: выгрузите архив и mv data/* /data/gitea.
  3. Если база данных повреждена:
    • Остановите контейнеры, восстановите /var/lib/postgresql/data из резервной копии или восстановите дамп БД.
  4. Проверка после восстановления:
    • Веб‑интерфейс доступен, 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‑ключа.


Gitea установка часть 2

Настройки сервера и Third‑Party

Настройки администратора Gitea

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‑ключи и создать репозиторий.
  • Настроить ежедневные бэкапы и тест восстановления.
Поделиться: 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 быстро