From 8e79098193fd0a8b65305dd8054cf7c424c60bc5 Mon Sep 17 00:00:00 2001 From: Alexander Neonxp Kiryukhin Date: Sun, 10 Nov 2024 00:04:43 +0300 Subject: новая жизнь блога 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/post/2023-01-12-gitrepo.md | 122 ++++++++++++++++++++++++++++++++++--- 1 file changed, 114 insertions(+), 8 deletions(-) (limited to 'content/post/2023-01-12-gitrepo.md') diff --git a/content/post/2023-01-12-gitrepo.md b/content/post/2023-01-12-gitrepo.md index 8635d1d..18a06a2 100644 --- a/content/post/2023-01-12-gitrepo.md +++ b/content/post/2023-01-12-gitrepo.md @@ -3,12 +3,12 @@ author: NeonXP categories: - Мои проекты date: "2023-01-12T20:22:00Z" -guid: http://10 id: 55 tags: - it - моё title: GitRepo.ru +draft: false --- # Сегодня серьезно переделал свой хостинг [репозиториев кода](https://gitrepo.ru/): @@ -30,26 +30,132 @@ title: GitRepo.ru У меня на руках `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 +```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` файлик с значениями переменных `${...}`. +а рядом лежит `.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 # Возвращаюсь в локальный контекст +# Создаю новый контекст для удаленного сервера +docker context create gitrepo --docker "host=ssh://gitrepo.ru" +# Все последующие docker команды выполняются на удаленном сервере +docker use gitrepo +# Возвращаюсь в локальный контекст +docker use default ``` ## Оставшиеся проблемы Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к. часть конфига -
```yml -volumes: - ./Caddyfile:/etc/caddy/Caddyfile +```yml + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile ``` -
выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе. +выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе. Как это решить — есть интересная идея, но это уже в другой раз. \ No newline at end of file -- cgit v1.2.3