You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OnlineMsgServer/deploy/deploy_test_ws.sh

74 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# One-click deployment for test environments (WS mode, no forced WSS).
#
# Usage:
# bash deploy/deploy_test_ws.sh
#
# Optional overrides:
# CONTAINER_NAME=onlinemsgserver IMAGE_NAME=onlinemsgserver:latest HOST_PORT=13173 bash deploy/deploy_test_ws.sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
CONTAINER_NAME="${CONTAINER_NAME:-onlinemsgserver}"
IMAGE_NAME="${IMAGE_NAME:-onlinemsgserver:latest}"
HOST_PORT="${HOST_PORT:-13173}"
for cmd in openssl docker ipconfig route awk base64 tr; do
if ! command -v "${cmd}" >/dev/null 2>&1; then
echo "Missing required command: ${cmd}"
exit 1
fi
done
DEFAULT_IFACE="$(route get default 2>/dev/null | awk '/interface:/{print $2; exit}')"
LAN_IP=""
if [ -n "${DEFAULT_IFACE}" ]; then
LAN_IP="$(ipconfig getifaddr "${DEFAULT_IFACE}" 2>/dev/null || true)"
fi
if [ -z "${LAN_IP}" ]; then
LAN_IP="$(ipconfig getifaddr en0 2>/dev/null || true)"
fi
if [ -z "${LAN_IP}" ]; then
LAN_IP="$(ipconfig getifaddr en1 2>/dev/null || true)"
fi
if [ -z "${LAN_IP}" ]; then
LAN_IP="127.0.0.1"
fi
mkdir -p "${ROOT_DIR}/deploy/keys"
# Generate service RSA key only if missing.
if [ ! -f "${ROOT_DIR}/deploy/keys/server_rsa_pkcs8.b64" ]; then
echo "Generating service RSA key..."
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out "${ROOT_DIR}/deploy/keys/server_rsa.pem"
openssl pkcs8 -topk8 -inform PEM \
-in "${ROOT_DIR}/deploy/keys/server_rsa.pem" \
-outform DER -nocrypt \
-out "${ROOT_DIR}/deploy/keys/server_rsa_pkcs8.der"
base64 < "${ROOT_DIR}/deploy/keys/server_rsa_pkcs8.der" | tr -d '\n' > "${ROOT_DIR}/deploy/keys/server_rsa_pkcs8.b64"
fi
echo "Building image: ${IMAGE_NAME}"
docker build -t "${IMAGE_NAME}" "${ROOT_DIR}"
echo "Restarting container: ${CONTAINER_NAME}"
docker rm -f "${CONTAINER_NAME}" >/dev/null 2>&1 || true
docker run -d --name "${CONTAINER_NAME}" --restart unless-stopped \
-p "${HOST_PORT}:13173" \
-v "${ROOT_DIR}/deploy/keys:/app/keys:ro" \
-e REQUIRE_WSS=false \
-e SERVER_PRIVATE_KEY_PATH=/app/keys/server_rsa_pkcs8.b64 \
"${IMAGE_NAME}"
echo "Container logs (tail 30):"
docker logs --tail 30 "${CONTAINER_NAME}"
echo
echo "Done."
echo "Frontend URL (LAN): ws://${LAN_IP}:${HOST_PORT}/"
echo "Frontend URL (local): ws://localhost:${HOST_PORT}/"