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

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

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

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

volumes:  - ./Caddyfile:/etc/caddy/Caddyfile

выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *