61 lines
No EOL
1.9 KiB
Bash
Executable file
61 lines
No EOL
1.9 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
ENV_NAME=$1 # "staging" or "test"
|
|
APP_PORT=$2 # 3001 or 3002
|
|
REPO_DIR="/opt/church-website/repo"
|
|
ENV_DIR="/opt/church-website/envs/${ENV_NAME}"
|
|
CONTAINER_NAME="app-${ENV_NAME}"
|
|
IMAGE_NAME="church-website:${ENV_NAME}"
|
|
MIGRATE_IMAGE="church-website-migrate:${ENV_NAME}"
|
|
NETWORK_NAME="church-website-net"
|
|
|
|
if [ ! -f "${ENV_DIR}/.env" ]; then
|
|
echo "Error: ${ENV_DIR}/.env not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> Building app image ${IMAGE_NAME}..."
|
|
docker build \
|
|
--build-arg NEXT_PUBLIC_SERVER_URL="$(grep NEXT_PUBLIC_SERVER_URL "${ENV_DIR}/.env" | cut -d= -f2-)" \
|
|
--build-arg NEXT_PUBLIC_SITE_ID="$(grep NEXT_PUBLIC_SITE_ID "${ENV_DIR}/.env" | cut -d= -f2-)" \
|
|
-t "${IMAGE_NAME}" \
|
|
"${REPO_DIR}"
|
|
|
|
echo "==> Building migration image..."
|
|
docker build \
|
|
--target builder \
|
|
--build-arg NEXT_PUBLIC_SERVER_URL="$(grep NEXT_PUBLIC_SERVER_URL "${ENV_DIR}/.env" | cut -d= -f2-)" \
|
|
--build-arg NEXT_PUBLIC_SITE_ID="$(grep NEXT_PUBLIC_SITE_ID "${ENV_DIR}/.env" | cut -d= -f2-)" \
|
|
-t "${MIGRATE_IMAGE}" \
|
|
"${REPO_DIR}"
|
|
|
|
echo "==> Running database migrations..."
|
|
docker run --rm \
|
|
--network "${NETWORK_NAME}" \
|
|
--env-file "${ENV_DIR}/.env" \
|
|
"${MIGRATE_IMAGE}" \
|
|
npx payload migrate
|
|
|
|
echo "==> Stopping old container..."
|
|
docker stop "${CONTAINER_NAME}" 2>/dev/null || true
|
|
docker rm "${CONTAINER_NAME}" 2>/dev/null || true
|
|
|
|
echo "==> Starting new container on port ${APP_PORT}..."
|
|
docker run -d \
|
|
--name "${CONTAINER_NAME}" \
|
|
--restart unless-stopped \
|
|
--network "${NETWORK_NAME}" \
|
|
--env-file "${ENV_DIR}/.env" \
|
|
-v "uploads-${ENV_NAME}-media:/app/media" \
|
|
-v "uploads-${ENV_NAME}-documents:/app/documents" \
|
|
-p "127.0.0.1:${APP_PORT}:3000" \
|
|
"${IMAGE_NAME}"
|
|
|
|
echo "==> Fixing volume permissions..."
|
|
docker exec -u 0 "${CONTAINER_NAME}" chown -R 1001:1001 /app/media /app/documents
|
|
|
|
echo "==> Cleaning up old images..."
|
|
docker image prune -f
|
|
|
|
echo "==> Done! ${ENV_NAME} deployed on port ${APP_PORT}" |