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 \