Всем привет! Сегодня хочу рассказать про установку такого замечательного программного обеспечения как Gitea. Данный продукт предназначен для удобного доступа к git хранилищу, напоминает по своим возможностям gitlab, github, bitbucket.
Сейчас особенно полезно задуматься о создании своих независимых git хранилищ потому что пидарская протекционистская политика государств нарастает и очень вероятно, что в будущем пользователей из России могут лишить доступа к github или bitbucket, а код где-то хранить необходимо и так как мудаки гениальные стратеги отвечающие за импортузамещение до сих пор не создали ничего более менее альтернативного в России, то лучше создавать свои хранилища на своих выделенных серверах. Gitea прекрасно подходит в качестве альтернативы, а так же он гораздо проще в установке и настройке чем тот же самый GitLab.
Для установки я выбрал способ развертывания через docker compose, так что требуется установить docker если это еще не сделано, затем создать директорию в котором будет находится файловая система gitea и создать файл docker-compose.yaml
$ sudo apt update $ sudo apt install -y docker.io $ sudo systemctl start docker $ sudo systemctl enable docker $ sudo apt install -y docker-compose $ mkdir ~/gitea && cd ~/gitea $ vim docker-compose.yml
Соответственно, на хостинге у меня Ubuntu ( если у вас что-то другое, используйте свои команды для установки Docker ). В качестве редактора само собой я использую православный vim
version: '3.7' services: db: image: postgres:15 container_name: gitea-db environment: POSTGRES_USER: gitea POSTGRES_PASSWORD: gitea_password POSTGRES_DB: gitea volumes: - ./db:/var/lib/postgresql/data restart: always gitea: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 volumes: - ./gitea:/data ports: - "127.0.0.1:3000:3000" # Веб-интерфейс Gitea - "2222:22" # SSH для клонирования репозиториев depends_on: - db restart: always
В качестве базы данных я решил использовать postgres. Поменяйте доступы к базе данных. В принципе gitea поддерживает разные СУБД, можете использовать свой любимый. Описание портов есть в комментариях.
Так как мне нужен был отдельный домен для git я указал проброс порта 3000 только для 127.0.0.1 поэтому из вне к нему нельзя обратится ( далее я покажу как разрулить порт через настройку nginx )
Теперь создаем любымый Makefile для удобства
.PHONY: up down restart logs ps clean help # Переменные COMPOSE_FILE = docker-compose.yml PROJECT_NAME = gitea_project # Команды up: ## Запускает все контейнеры в фоне docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) up -d down: ## Останавливает контейнеры и освобождает ресурсы docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) down restart: ## Перезапускает все контейнеры $(MAKE) down $(MAKE) up logs: ## Показывает логи контейнеров в реальном времени docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) logs -f ps: ## Отображает состояние запущенных контейнеров docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) ps clean: ## Удаляет все контейнеры, тома и связанные ресурсы docker-compose -p $(PROJECT_NAME) -f $(COMPOSE_FILE) down --volumes --remove-orphans help: ## Показывает это сообщение @echo "Доступные команды:" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-15s %s\n", $$1, $$2}' .DEFAULT_GOAL := help
В Makefile можно вынести необходимые команды для работы с докером
В процессе запуска у меня возникли некоторые сложности при запуске докера на хостинге поэтому пришлось установить питон
$ sudo apt update $ sudo apt install python3 -y $ sudo apt install python3-pip -y
Запускать docker-compose up от рута плохая идея поэтому необходимо добавить пользователя в группу docker и запускать docker-compose от обычного пользователя, для этого добавляем пользователя <your-user> в группу docker
$ sudo usermod -a -G docker <your-user>
Ну или так:
$ sudo usermod -aG docker $USER
После добавления пользователя в группу требуется перезапустить shell ( без этого make up ругался на то что у пользователя не хватает прав )
Теперь требуется привязать домен к нашему локальному порту 3000 на котором запущен gitea, для этого нужно перейти к настройкам nginx и создать конфиг для сервиса gittea
$ cd /etc/nginx/sites-available $ vim gitea
Добавляем подобное содержимое
server { server_name domain.ru www.domain.ru; location / { proxy_pass http://localhost:3000; } }
Тут все понятно — все внешние запросы проксируются на локальный порт 3000 на котором запущен наш gitea
Далее создаем линк на /etc/nginx/sites-available/gitea в
/etc/nginx/sites-enabled и перезапускаем nginx
$ sudo ln -s /etc/nginx/sites-enabled/gitea /etc/nginx/sites-available/gitea $ sudo nginx reload
После этого я рекомендую так же настроить SSL сертификаты для нашего хранилища, я использую для этой цели certbot
$ cerbot --nginx -d domain.ru -d www.domain.ru
Чуть не забыл важный момент, необходимо создать службу в Ubuntu, которая позволит автоматически поднимать docker-compose с gitea при перезагрузки сервера, для этого создаем новую пользовательскую службу systemd
$ cd /etc/systemd/system/ $ sudo vim gitea.service
Добавляем код нового сервиса в gitea.service
[Unit] Discription=Gitea After=docker.service Requires=docker.service [Service] WorkerDirectory=/var/www/gitea/ ExecStart=docker-compose -p gitea_project -f /var/www/gitea/docker-compose.yml up ExecStartPost=service nginx reload ExecStop=docker-compose -p gitea_project -f /var/www/gitea/docker-compose.yml down Restart=on-failure [Install] WantedBy=multi-user.target
Тут особо пояснять нечего. Указываем, что служба запускается только после запуска docker.service и для нее обязательно должен быть запущен docker.service
Запускаем
$ sudo systemctl daemon-reload $ sudo systemctl enable gitea
Все! На этом настройки сервера закончены и можно приступать к установке gitea.
Открываем браузер и переходим на страницу domain.ru ( тот домен который мы указали в настройках nginx )
Откроется окно со множеством настроек, я не буду приводить все настройки, остановлюсь только на настройках базы данных и админского доступа.
Тут необходимо заполнить настройки данными, которые были указаны в docker-compose.yml
POSTGRES_USER: gitea
POSTGRES_PASSWORD: gitea_password
POSTGRES_DB: gitea
Собственно имя пользователя базы данных, имя базы данных и ваш пароль. В качестве СУБД выбираем postgreSQL
Так же можно сразу же настроить тут порт для ssh соединения, в нашем случае это будет порт 2222
И настроить доступы для администратора Gitea:
После этого нажимаем на кнопку Устанивать Gitea. Ждем пока система установится и можно приступать к работе с Gitea. Интерфейс системы интуитивно понятен, а по функционалу не сильно отличается от привычного Gitlab. Работает достаточно шустро.
На что стоит обратить внимание, конечно настройки базы данных лучше вынести в .env файл из docker-compose.yml а так же может еще имеет смысл настроить работу своего git хранилища внутри вашего собственного VPN, но это уже немного выходит за рамки темы статьи.
На этом все, если будут вопросы пишите в мне в телеграм и обязательно подписывайтесь на канал в телеграме в которой публикуются новинки на сайте.