Files
blog-server/scripts/deploy.sh

46 lines
1.2 KiB
Bash
Executable File

#!/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 "部署完成"