Add routed build and deploy flow for gateway image
Some checks failed
Build and Deploy Gateway / build-and-deploy (push) Failing after 13s
Some checks failed
Build and Deploy Gateway / build-and-deploy (push) Failing after 13s
This commit is contained in:
@@ -280,6 +280,14 @@ docker compose -f docker-compose.gateway.yml build
|
||||
docker compose -f docker-compose.gateway.yml up -d
|
||||
```
|
||||
|
||||
Если сборку нужно выполнять на контейнере/хосте, который уже ходит через рабочий gateway, а запускать image на другом:
|
||||
|
||||
```bash
|
||||
BUILD_HOST=107 DEPLOY_HOST=111 ./scripts/build-on-107-deploy-111.sh
|
||||
```
|
||||
|
||||
Скрипт собирает image на `BUILD_HOST`, переносит его на `DEPLOY_HOST` через `docker save | docker load` и запускает без `docker pull`. Если `107`/`111` не являются SSH-алиасами, укажите реальные адреса, например `BUILD_HOST=root@192.168.1.107 DEPLOY_HOST=root@192.168.1.111`.
|
||||
|
||||
UI доступен на `http://<gateway-ip>:3456`.
|
||||
|
||||
На роутере указать шлюз по умолчанию (или нужные подсети) на IP контейнера.
|
||||
|
||||
41
scripts/build-on-107-deploy-111.sh
Executable file
41
scripts/build-on-107-deploy-111.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BUILD_HOST="${BUILD_HOST:-107}"
|
||||
DEPLOY_HOST="${DEPLOY_HOST:-111}"
|
||||
BUILD_PATH="${BUILD_PATH:-/opt/vpn-proxy-build}"
|
||||
DEPLOY_PATH="${DEPLOY_PATH:-/opt/vpn-proxy}"
|
||||
IMAGE_NAME="${IMAGE_NAME:-vpn-proxy-gateway}"
|
||||
GIT_REF="$(git rev-parse --short HEAD 2>/dev/null || echo manual)"
|
||||
IMAGE_TAG="${IMAGE_TAG:-${GIT_REF}-$(date +%Y%m%d%H%M%S)}"
|
||||
GATEWAY_IMAGE="${GATEWAY_IMAGE:-${IMAGE_NAME}:${IMAGE_TAG}}"
|
||||
BASE_IMAGE="${BASE_IMAGE:-debian:bookworm-slim}"
|
||||
SINGBOX_VERSION="${SINGBOX_VERSION:-1.12.13}"
|
||||
|
||||
echo "Build host: ${BUILD_HOST}"
|
||||
echo "Deploy host: ${DEPLOY_HOST}"
|
||||
echo "Image: ${GATEWAY_IMAGE}"
|
||||
|
||||
echo "Syncing source to ${BUILD_HOST}:${BUILD_PATH}"
|
||||
ssh "${BUILD_HOST}" "mkdir -p '${BUILD_PATH}'"
|
||||
rsync -az --delete \
|
||||
--exclude '.git' \
|
||||
--exclude '.vpn-proxy' \
|
||||
--exclude 'node_modules' \
|
||||
--exclude 'dist' \
|
||||
./ "${BUILD_HOST}:${BUILD_PATH}/"
|
||||
|
||||
echo "Building image on ${BUILD_HOST}"
|
||||
ssh "${BUILD_HOST}" \
|
||||
"cd '${BUILD_PATH}' && npm ci && npm run build && docker build --pull --build-arg BASE_IMAGE='${BASE_IMAGE}' --build-arg SINGBOX_VERSION='${SINGBOX_VERSION}' -t '${GATEWAY_IMAGE}' ."
|
||||
|
||||
echo "Loading image into ${DEPLOY_HOST}"
|
||||
ssh "${BUILD_HOST}" "docker save '${GATEWAY_IMAGE}'" | ssh "${DEPLOY_HOST}" "docker load"
|
||||
|
||||
echo "Copying deploy script to ${DEPLOY_HOST}:${DEPLOY_PATH}"
|
||||
ssh "${DEPLOY_HOST}" "mkdir -p '${DEPLOY_PATH}'"
|
||||
rsync -az scripts/deploy-gateway.sh "${DEPLOY_HOST}:${DEPLOY_PATH}/deploy-gateway.sh"
|
||||
|
||||
echo "Starting gateway on ${DEPLOY_HOST}"
|
||||
ssh "${DEPLOY_HOST}" \
|
||||
"cd '${DEPLOY_PATH}' && chmod +x ./deploy-gateway.sh && DEPLOY_PATH='${DEPLOY_PATH}' GATEWAY_IMAGE='${GATEWAY_IMAGE}' PULL_IMAGE=false ./deploy-gateway.sh"
|
||||
@@ -3,6 +3,7 @@ set -euo pipefail
|
||||
|
||||
DEPLOY_PATH="${DEPLOY_PATH:-/opt/vpn-proxy}"
|
||||
GATEWAY_IMAGE="${GATEWAY_IMAGE:?GATEWAY_IMAGE is required}"
|
||||
PULL_IMAGE="${PULL_IMAGE:-true}"
|
||||
|
||||
echo "Preparing deploy directory: ${DEPLOY_PATH}"
|
||||
mkdir -p "${DEPLOY_PATH}"
|
||||
@@ -57,7 +58,11 @@ fi
|
||||
cd "${DEPLOY_PATH}"
|
||||
|
||||
echo "Pulling image: ${GATEWAY_IMAGE}"
|
||||
docker compose -f docker-compose.server.yml pull
|
||||
if [ "${PULL_IMAGE}" = "true" ]; then
|
||||
docker compose -f docker-compose.server.yml pull
|
||||
else
|
||||
echo "Skipping image pull; using local image ${GATEWAY_IMAGE}"
|
||||
fi
|
||||
|
||||
echo "Starting gateway..."
|
||||
docker compose -f docker-compose.server.yml up -d
|
||||
|
||||
Reference in New Issue
Block a user