41 lines
1020 B
Bash
41 lines
1020 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
APP_NAME=""
|
|
TAG=""
|
|
PORT=""
|
|
INTERNAL_PORT="3000"
|
|
ENV=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--name) APP_NAME="$2"; shift 2 ;;
|
|
--tag) TAG="$2"; shift 2 ;;
|
|
--port) PORT="$2"; shift 2 ;;
|
|
--internal-port) INTERNAL_PORT="$2"; shift 2 ;;
|
|
--env) ENV="$2"; shift 2 ;;
|
|
*) echo "Unknown arg: $1"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
CONTAINER="${APP_NAME}-${TAG}"
|
|
|
|
echo "→ Deploying container: ${CONTAINER} on port ${PORT}"
|
|
|
|
docker stop "${CONTAINER}" 2>/dev/null && docker rm "${CONTAINER}" 2>/dev/null || true
|
|
|
|
ENV_FILE_ARG=""
|
|
if [[ -f "/opt/apps/${APP_NAME}/.env.${ENV}" ]]; then
|
|
ENV_FILE_ARG="--env-file /opt/apps/${APP_NAME}/.env.${ENV}"
|
|
fi
|
|
|
|
docker run -d \
|
|
--name "${CONTAINER}" \
|
|
--restart unless-stopped \
|
|
-p "0.0.0.0:${PORT}:${INTERNAL_PORT}" \
|
|
-e NODE_ENV=production \
|
|
-e PORT="${INTERNAL_PORT}" \
|
|
${ENV_FILE_ARG} \
|
|
"${APP_NAME}:${TAG}"
|
|
|
|
echo "✓ Container ${CONTAINER} running on 0.0.0.0:${PORT}" |