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.ymlservices:
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/giteaserver {
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.