From fb4ccc351f55d125ff1cc8995b47646205582ce9 Mon Sep 17 00:00:00 2001 From: Dmitry Gammel Date: Sun, 26 Jul 2026 21:37:21 +0500 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=B4=D0=B5=D0=BF?= =?UTF-8?q?=D0=BB=D0=BE=D0=B9=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20Gitea=20A?= =?UTF-8?q?ctions=20=D0=BD=D0=B0=20cacto-homelab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .gitea/workflows/deploy.yml: пуш в main -> build+up прямо на runner'е (docker.sock смонтирован, registry и SSH не нужны). docker-compose.prod.yml: внешняя сеть caddy_net, container_name cactoz-nginx для reverse_proxy из Caddy. gameserver/Dockerfile: зависимости (uSockets/json) вынесены в отдельный кэшируемый слой — пересборка после правки src/ упала с ~6.5 мин до ~9 сек. --- .gitea/workflows/deploy.yml | 26 ++++++++++++++++++++++++++ docker-compose.prod.yml | 24 ++++++++++++++++++++++++ gameserver/Dockerfile | 10 +++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 docker-compose.prod.yml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..2c5541e --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,26 @@ +name: Deploy + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # Runner уже на cacto-homelab и имеет доступ к docker.sock хоста, + # поэтому образ собирается прямо на месте — без registry и без SSH. + - name: Sync to deploy directory + run: | + mkdir -p /data/docker/compose/cactoz + rsync -a --delete --exclude '.git' ./ /data/docker/compose/cactoz/ + + - name: Build and restart + working-directory: /data/docker/compose/cactoz + run: | + docker compose -f docker-compose.prod.yml build + docker compose -f docker-compose.prod.yml up -d + docker image prune -f diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..578a421 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,24 @@ +services: + nginx: + container_name: cactoz-nginx + build: + context: . + dockerfile: nginx/Dockerfile + networks: + - internal + - caddy_net + depends_on: + - gameserver + restart: unless-stopped + + gameserver: + build: ./gameserver + networks: + - internal + restart: unless-stopped + +networks: + internal: + # уже создана Caddy-стеком; сюда только подключаемся + caddy_net: + external: true diff --git a/gameserver/Dockerfile b/gameserver/Dockerfile index 701566d..ff3aaa9 100644 --- a/gameserver/Dockerfile +++ b/gameserver/Dockerfile @@ -3,9 +3,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake git ca-certificates zlib1g-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app + +# Кэшируемый слой: конфигурация + сборка зависимостей (uSockets, json). +# Заглушки вместо src/, чтобы cmake configure не падал на несуществующих +# исходниках — они не компилируются, т.к. просим собрать только usockets. COPY CMakeLists.txt ./ +RUN mkdir src && touch src/main.cpp src/Lobby.cpp src/Lobby.hpp +RUN cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build --target usockets -j"$(nproc)" + +# Реальный код поверх уже собранных зависимостей — пересобирается за секунды. COPY src ./src -RUN cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build -j"$(nproc)" +RUN cmake --build build --target gameserver -j"$(nproc)" FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends zlib1g \