Автодеплой через Gitea Actions на cacto-homelab
.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 сек.
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
@@ -3,9 +3,17 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
build-essential cmake git ca-certificates zlib1g-dev \
|
build-essential cmake git ca-certificates zlib1g-dev \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Кэшируемый слой: конфигурация + сборка зависимостей (uSockets, json).
|
||||||
|
# Заглушки вместо src/, чтобы cmake configure не падал на несуществующих
|
||||||
|
# исходниках — они не компилируются, т.к. просим собрать только usockets.
|
||||||
COPY CMakeLists.txt ./
|
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
|
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
|
FROM debian:bookworm-slim
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends zlib1g \
|
RUN apt-get update && apt-get install -y --no-install-recommends zlib1g \
|
||||||
|
|||||||
Reference in New Issue
Block a user