#!/bin/bash set -euo pipefail PROJECT_ROOT=$(cd -- "$(dirname "${BASH_SOURCE[0]}")/.." &> /dev/null && pwd) REMOTE_SERVER="01" REMOTE_DIR="/srv/docker/go-server" IMAGE_NAME="go-server" CONTAINER_NAME="go-server" IMAGE_TAG="latest" IMAGE_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" DOCKER_NETWORK="docker_app-bridge" cd "$PROJECT_ROOT" docker build -f ./scripts/Dockerfile --platform linux/amd64 -t "${IMAGE_NAME}":"${IMAGE_TAG}" . docker save -o "${IMAGE_FILE}" "${IMAGE_NAME}":"${IMAGE_TAG}" scp ${IMAGE_FILE} ${REMOTE_SERVER}:${REMOTE_DIR} ssh "${REMOTE_SERVER}" << EOF set -euo pipefail cd "${REMOTE_DIR}" docker stop "${CONTAINER_NAME}" || true docker rm "${CONTAINER_NAME}" || true docker rmi "${IMAGE_NAME}":"${IMAGE_TAG}" || true docker load -i "${IMAGE_FILE}" docker run -dit \ --name "${CONTAINER_NAME}" \ --restart unless-stopped \ -v "${REMOTE_DIR}"/production.yaml:/app/production.yaml:ro \ -v "${REMOTE_DIR}"/static:/app/uploads \ -v "${REMOTE_DIR}"/logs:/app/logs \ --network "${DOCKER_NETWORK}" \ ${IMAGE_NAME}:${IMAGE_TAG} rm -f "${IMAGE_FILE}" EOF rm -f "${IMAGE_FILE}" docker rmi "${IMAGE_NAME}":"${IMAGE_TAG}" || true echo "部署完成"