46 lines
1.2 KiB
Bash
Executable File
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 "部署完成" |