summaryrefslogtreecommitdiff
path: root/content/posts/2023-01-12-gitrepo
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--content/posts/2023-01-12-gitrepo.md167
-rw-r--r--content/posts/2023-01-12-gitrepo/index.md166
2 files changed, 166 insertions, 167 deletions
diff --git a/content/posts/2023-01-12-gitrepo.md b/content/posts/2023-01-12-gitrepo.md
deleted file mode 100644
index 7e521c3..0000000
--- a/content/posts/2023-01-12-gitrepo.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-categories:
-- Мои проекты
-date: '2023-01-12T20:22:00Z'
-tags:
-- it
-- моё
-title: GitRepo.ru
----
-
-Сегодня серьезно переделал свой хостинг [репозиториев
-кода](https://gitrepo.ru/):
-
-- Переехал на большой арендованный сервак
-- Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
-- Gitea заменил на её форк [Forgejo](https://forgejo.org/)
-- Впилил CI/CD на основе [Woodpecker CI](https://woodpecker-ci.org/)
-
-Приглашаю пользоваться заместо бездуховного западного 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` файлик с значениями переменных `${...}`.
-
-Запускаю деплой я с локального компьютера, предварительно добавив удаленный
-сервер в [контекст
-докера](https://docs.docker.com/engine/context/working-with-contexts/):
-
-```
-# Создаю новый контекст для удаленного сервера
-docker context create gitrepo --docker "host=ssh://gitrepo.ru"
-# Все последующие docker команды выполняются на удаленном сервере
-docker use gitrepo
-# Возвращаюсь в локальный контекст
-docker use default
-```
-
-# Оставшиеся проблемы
-
-Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к.
-часть конфига
-
-```yml
- volumes:
- - ./Caddyfile:/etc/caddy/Caddyfile
-```
-
-выполняется в контексте именно удаленного сервера, а значит при его апдейте на
-локальном серваке приходится делать SCP этого файла на сервак. Такое себе.
-
-Как это решить — есть интересная идея, но это уже в другой раз. \ No newline at end of file
diff --git a/content/posts/2023-01-12-gitrepo/index.md b/content/posts/2023-01-12-gitrepo/index.md
new file mode 100644
index 0000000..c10dd9d
--- /dev/null
+++ b/content/posts/2023-01-12-gitrepo/index.md
@@ -0,0 +1,166 @@
+---
+categories:
+ - Мои проекты
+date: "2023-01-12T20:22:00Z"
+tags:
+ - it
+ - моё
+title: GitRepo.ru
+---
+
+Сегодня серьезно переделал свой хостинг [репозиториев
+кода](https://gitrepo.ru/):
+
+- Переехал на большой арендованный сервак
+- Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose
+- Gitea заменил на её форк [Forgejo](https://forgejo.org/)
+- Впилил CI/CD на основе [Woodpecker CI](https://woodpecker-ci.org/)
+
+Приглашаю пользоваться заместо бездуховного западного 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` файлик с значениями переменных `${...}`.
+
+Запускаю деплой я с локального компьютера, предварительно добавив удаленный
+сервер в [контекст
+докера](https://docs.docker.com/engine/context/working-with-contexts/):
+
+```
+# Создаю новый контекст для удаленного сервера
+docker context create gitrepo --docker "host=ssh:/gitrepo.ru"
+# Все последующие docker команды выполняются на удаленном сервере
+docker use gitrepo
+# Возвращаюсь в локальный контекст
+docker use default
+```
+
+# Оставшиеся проблемы
+
+Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к.
+часть конфига
+
+```yml
+volumes:
+ - ./Caddyfile:/etc/caddy/Caddyfile
+```
+
+выполняется в контексте именно удаленного сервера, а значит при его апдейте на
+локальном серваке приходится делать SCP этого файла на сервак. Такое себе.
+
+Как это решить — есть интересная идея, но это уже в другой раз.