~/NeonXP.log

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 этого файла на сервак. Такое себе.

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

Категории:

Теги:

Комментарии

Комментариев пока нет.
Для отправки комментария достаточно отправить e-mail со своим комментарием на адрес blog@neonxp.ru, в теме нужно указать ссылку на пост.
Или просто нажать кнопку ниже. Всё очень просто :)
Написать комментарий