blog/content/posts/23-01-12-gitrepo.md

161 lines
5.2 KiB
Markdown
Raw Normal View History

2023-01-12 20:48:19 +03:00
---
title: "GitRepo"
date: 2023-01-12T20:22:00+03:00
tags: ["it", "жизнь", "убежище параноика"]
---
# GitRepo.ru
Сегодня серьезно переделал свой хостинг [репозиториев кода](https://gitrepo.ru/):
* Переехал на большой арендованный сервак
* Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
* Gitea заменил на её форк [Forgejo](https://forgejo.org/)
* Впилил CI/CD на основе [Woodpecker CI](https://woodpecker-ci.org/)
Приглашаю пользоваться заместо бездуховного западного github: [https://gitrepo.ru/](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` файлик с значениями переменных `${...}`.
Запускаю деплой я с локального компьютера, предварительно добавив удаленный сервер в [контекст докера](https://docs.docker.com/engine/context/working-with-contexts/):
```
docker context create gitrepo --docker "host=ssh://gitrepo.ru" # Создаю новый контекст для удаленного сервера
docker use gitrepo # Все последующие docker команды выполняются на удаленном сервере
docker use default # Возвращаюсь в локальный контекст
```
## Оставшиеся проблемы
Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к. часть конфига
```yml
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
```
выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе.
Как это решить - есть интересная идея, но это уже в другой раз.