NexNode
Все гайды
Свои сервисыСредний

Свой Git-сервер на VPS: Gitea вместо GitHub за 30 минут

Поднимаем лёгкий Git-хостинг на своём сервере: установка Gitea через Docker, домен и HTTPS, перенос репозиториев и доступ по SSH.

10 мин чтенияобновлено 29 июля 2026 г.

GitHub удобен, пока всё хорошо. Но приватные репозитории компании лежат у чужой платформы, доступ зависит от её политики, а с оплатой платных тарифов из России возникают сложности.

Gitea — лёгкий Git-хостинг, который ставится на свой сервер за полчаса. Интерфейс похож на GitHub, есть задачи, pull-request'ы, вики и встроенный CI. Потребляет при этом порядка 200 МБ памяти.

Кому это нужно

  • фрилансерам и студиям, которым не хочется платить за приватные репозитории
  • командам, у которых код нельзя выносить наружу по договору
  • тем, кто хочет держать личные проекты у себя, а не на чужой платформе
  • как зеркало для важных репозиториев на случай проблем с GitHub

Ресурсы

Скромные: 1–2 ГБ памяти, 1–2 ядра. Диск берите с расчётом на объём репозиториев плюс запас — Git хранит всю историю изменений.

Шаг 1. Домен и Docker

Направьте поддомен на IP сервера, например git.мойдомен.ру.

Поставьте Docker:

терминал
root@vps:~#apt update && apt install -y ca-certificates curlroot@vps:~#install -m 0755 -d /etc/apt/keyringsroot@vps:~#curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascroot@vps:~#chmod a+r /etc/apt/keyrings/docker.ascroot@vps:~#echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.listroot@vps:~#apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Шаг 2. Разворачиваем Gitea

терминал
root@vps:~#mkdir -p /opt/gitea && cd /opt/gitea && nano docker-compose.yml
services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: gitea
      POSTGRES_USER: gitea
      POSTGRES_PASSWORD: ПРИДУМАЙТЕ_ПАРОЛЬ

  gitea:
    image: gitea/gitea:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
      - "2222:22"
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      USER_UID: 1000
      USER_GID: 1000
      GITEA__database__DB_TYPE: postgres
      GITEA__database__HOST: db:5432
      GITEA__database__NAME: gitea
      GITEA__database__USER: gitea
      GITEA__database__PASSWD: ПРИДУМАЙТЕ_ПАРОЛЬ
      GITEA__server__DOMAIN: git.мойдомен.ру
      GITEA__server__ROOT_URL: https://git.мойдомен.ру/
      GITEA__server__SSH_PORT: "2222"
    depends_on:
      - db

Обратите внимание на два порта: 3000 — веб-интерфейс, закрыт наружу и пойдёт через nginx. 2222 — Git по SSH, он должен быть доступен снаружи, иначе не получится делать git push.

Порт 2222 не должен конфликтовать

Если вы переносили SSH сервера на порт 2222 по гайду про защиту VPS, выберите для Gitea другой — например 2223. Иначе службы подерутся за порт.

Запускаем:

терминал
root@vps:~#docker compose up -droot@vps:~#docker compose logs -f gitea

Шаг 3. Nginx и сертификат

терминал
root@vps:~#apt install -y nginx certbot python3-certbot-nginxroot@vps:~#nano /etc/nginx/sites-available/gitea
server {
    listen 80;
    server_name git.мойдомен.ру;

    # репозитории бывают тяжёлыми
    client_max_body_size 2G;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}
терминал
root@vps:~#ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/root@vps:~#nginx -t && systemctl reload nginxroot@vps:~#certbot --nginx -d git.мойдомен.ру

Откройте порт для Git по SSH:

терминал
root@vps:~#ufw allow 2222/tcp && ufw reload

Шаг 4. Первичная настройка

Откройте https://git.мойдомен.ру — увидите экран установки. Большинство полей уже заполнены из переменных окружения, проверьте только адрес сайта.

Разверните блок Настройки администратора и создайте себе учётную запись прямо здесь. Если пропустить, первым администратором станет первый зарегистрировавшийся — не самая приятная неожиданность.

Нажмите «Установить Gitea».

Шаг 5. Закрываем регистрацию

По умолчанию зарегистрироваться может любой желающий. Для личного или командного сервера это лишнее:

терминал
root@vps:~#nano /opt/gitea/data/gitea/conf/app.ini

В разделе [service] приведите к виду:

[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = true

Вторая строка скрывает репозитории от неавторизованных — включайте, если код не должен быть публичным.

терминал
root@vps:~#docker compose restart gitea

Приглашать коллег после этого можно через админку: Управление сайтом → Аккаунты → Создать аккаунт.

Шаг 6. Добавляем SSH-ключ

Чтобы работать с репозиториями без ввода пароля, добавьте свой публичный ключ. На своём компьютере:

ваш компьютер
user@local:~#cat ~/.ssh/id_ed25519.pub

Ключа нет — создайте: ssh-keygen -t ed25519.

Скопируйте вывод и вставьте в Gitea: Настройки профиля → SSH-ключи → Добавить ключ.

Шаг 7. Переносим репозиторий с GitHub

Gitea умеет забирать репозитории сама. Нажмите + → Новая миграция, выберите GitHub, укажите адрес репозитория. Для приватных понадобится токен доступа GitHub.

Перенесётся не только код, но и задачи, метки и релизы.

Вручную это выглядит так:

ваш компьютер
user@local:~#git clone --mirror https://github.com/логин/проект.gituser@local:~#cd проект.gituser@local:~#git remote set-url --push origin ssh://git@git.мойдомен.ру:2222/логин/проект.gituser@local:~#git push --mirror

Шаг 8. Повседневная работа

Клонировать:

ваш компьютер
user@local:~#git clone ssh://git@git.мойдомен.ру:2222/логин/проект.git

Дальше всё как обычно: git add, git commit, git push. Отличие от GitHub только в адресе.

Что не забыть

Бэкапы — обязательно. У GitHub данные лежат в надёжном облаке, у вас — на одном диске. Добавьте в резервное копирование папку /opt/gitea/data и дамп базы. Потерять историю проекта из-за отказа диска — очень обидно.

Защита сервера. Панель с исходным кодом торчит в интернет — пройдитесь по базовым мерам.

Обновления.

терминал
root@vps:~#cd /opt/gitea && docker compose pull && docker compose up -d

Сколько это стоит

Сервер на 2 ГБ — 500–800 ₽ в месяц, репозиториев и пользователей сколько угодно. GitHub Team стоит 4 доллара за пользователя в месяц: на команде из пяти человек свой сервер выходит дешевле, а на десяти — заметно дешевле.

Плюс на этом же сервере спокойно живут другие лёгкие сервисы.

Взять сервер под Git

Хватит 2 ГБ памяти. Смотрите на объём диска — репозитории с историей растут со временем.

Смотреть тарифы

Что дальше

Если понравилась идея держать инструменты у себя, посмотрите своё облако Nextcloud, менеджер паролей и аналитику вместо Google.