blog/content/post/2023-01-12-gitrepo.md

14 KiB
Raw Blame History

author categories date guid id tags title
NeonXP
Мои проекты
2023-01-12T20:22:00Z http://10 55
it
моё
GitRepo.ru

Сегодня серьезно переделал свой хостинг репозиториев кода:

  • Переехал на большой арендованный сервак
  • Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
  • Gitea заменил на её форк Forgejo
  • Впилил CI/CD на основе Woodpecker CI

Приглашаю пользоваться заместо бездуховного западного github: https://gitrepo.ru/

Сервер физически находится в датацентре в Москве у весьма годного провайдера Selectel.

Тем более, время сейчас неспокойное и неизвестно когда github станет недоступен для РФ, а GitRepo — он вот тут, в нашей стране.

Немного про устройство

Расскажу немного как я организовал себе Ops сервиса.

У меня на руках docker-compose.yml который полностью описывает всю конфигурацию сервака, примерно так:

```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 use gitrepo # Все последующие docker команды выполняются на удаленном сервереdocker use default # Возвращаюсь в локальный контекст

Оставшиеся проблемы

Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к. часть конфига

```yml volumes: - ./Caddyfile:/etc/caddy/Caddyfile ```
выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе.

Как это решить — есть интересная идея, но это уже в другой раз.