5.2 KiB
+++ categories = ['Мои проекты'] date = '2023-01-12T20:22:00Z' tags = ['it', 'моё'] title = 'GitRepo.ru' +++
Сегодня серьезно переделал свой хостинг репозиториев кода:
- Переехал на большой арендованный сервак
- Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
- Gitea заменил на её форк Forgejo
- Впилил CI/CD на основе Woodpecker CI
Приглашаю пользоваться заместо бездуховного западного github: https://gitrepo.ru/
Сервер физически находится в датацентре в Москве у весьма годного провайдера Selectel.
Тем более, время сейчас неспокойное и неизвестно когда github станет недоступен для РФ, а GitRepo — он вот тут, в нашей стране.
Немного про устройство
Расскажу немного как я организовал себе Ops сервиса.
У меня на руках docker-compose.yml
который полностью описывает всю конфигурацию сервака, примерно так:
version: "3"
services:
caddy:
image: caddy:2.6.2-alpine
container_name: gateway
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
networks:
- gateway
git:
image: codeberg.org/forgejo/forgejo:1.18.0-1
container_name: git
environment:
- USER_UID=1000
- USER_GID=1000
- TZ=Europe/Moscow
- USER=git
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=${PG_NAME}
- GITEA__database__USER=${PG_USER}
- GITEA__database__PASSWD=${PG_PASS}
restart: always
networks:
- gitea
- gateway
volumes:
- /home/git/.ssh/:/data/git/.ssh
- forgejo:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "127.0.0.1:2222:22"
depends_on:
db:
condition: service_healthy
db:
image: postgres:13
restart: always
environment:
- POSTGRES_USER=${PG_USER}
- POSTGRES_PASSWORD=${PG_PASS}
- POSTGRES_DB=${PG_NAME}
healthcheck:
test: /usr/bin/pg_isready
interval: 5s
timeout: 10s
retries: 120
networks:
- gitea
volumes:
- postgres:/var/lib/postgresql/data
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
volumes:
- woodpecker-server-data:/var/lib/woodpecker/
environment:
- WOODPECKER_OPEN=true
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=https://gitrepo.ru
- WOODPECKER_GITEA_CLIENT=${GITEA_CLIENT}
- WOODPECKER_GITEA_SECRET=${GITEA_SECRET}
- WOODPECKER_HOST=https://ci.gitrepo.ru
- WOODPECKER_ADMIN=neonxp
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
networks:
- gitea
- gateway
depends_on:
- git
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
command: agent
restart: always
depends_on:
- woodpecker-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
networks:
- gitea
volumes:
woodpecker-server-data:
caddy_data:
caddy_config:
forgejo:
postgres:
networks:
gateway:
gitea:
external: false
а рядом лежит .env
файлик с значениями переменных ${...}
.
Запускаю деплой я с локального компьютера, предварительно добавив удаленный сервер в контекст докера:
# Создаю новый контекст для удаленного сервера
docker context create gitrepo --docker "host=ssh://gitrepo.ru"
# Все последующие docker команды выполняются на удаленном сервере
docker use gitrepo
# Возвращаюсь в локальный контекст
docker use default
Оставшиеся проблемы
Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к. часть конфига
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе.
Как это решить — есть интересная идея, но это уже в другой раз.