Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc6bfc94b8 | ||
|
|
b0ed6ac499 | ||
|
|
3899c78a89 | ||
|
|
dc1b30a34e |
14
activator/Dockerfile
Normal file
14
activator/Dockerfile
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
FROM debian:bookworm-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN useradd -r -m -d /app appuser
|
||||
|
||||
COPY activator-force-monitor /app/activator-force-monitor
|
||||
RUN chmod +x /app/activator-force-monitor
|
||||
|
||||
USER appuser
|
||||
|
||||
EXPOSE 8090
|
||||
|
||||
CMD ["/app/activator-force-monitor"]
|
||||
Binary file not shown.
7
activator/docker-compose.yml
Normal file
7
activator/docker-compose.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
services:
|
||||
tonnage-activator:
|
||||
build: .
|
||||
container_name: tonnage-activator
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8099:8090"
|
||||
143
activator/install.sh
Executable file
143
activator/install.sh
Executable file
|
|
@ -0,0 +1,143 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ── Config ─────────────────────────────────────────────
|
||||
CONTAINER_ENGINE="${CONTAINER_ENGINE:-}"
|
||||
IMAGE_NAME="${IMAGE_NAME:-license-activator}"
|
||||
CONTAINER_NAME="${CONTAINER_NAME:-license-activator}"
|
||||
HOST_PORT="${HOST_PORT:-8090}"
|
||||
|
||||
# ── Detect Docker / Podman ─────────────────────────────
|
||||
if [ -z "$CONTAINER_ENGINE" ]; then
|
||||
if command -v docker &>/dev/null; then
|
||||
CONTAINER_ENGINE=docker
|
||||
elif command -v podman &>/dev/null; then
|
||||
CONTAINER_ENGINE=podman
|
||||
else
|
||||
echo "Error: neither docker nor podman found. Install one first." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo "Using container engine: $CONTAINER_ENGINE"
|
||||
|
||||
# ── Check daemon is running ────────────────────────────
|
||||
if ! $CONTAINER_ENGINE info >/dev/null 2>&1; then
|
||||
echo "Error: $CONTAINER_ENGINE daemon is not running or you lack permissions." >&2
|
||||
echo " Start the daemon or add your user to the docker/podman group." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Stop & remove existing container ───────────────────
|
||||
if $CONTAINER_ENGINE ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}$"; then
|
||||
echo ""
|
||||
echo "Container '$CONTAINER_NAME' already exists."
|
||||
echo " → Stopping..."
|
||||
$CONTAINER_ENGINE stop "$CONTAINER_NAME" >/dev/null 2>&1 || true
|
||||
echo " → Removing..."
|
||||
$CONTAINER_ENGINE rm "$CONTAINER_NAME" >/dev/null 2>&1 || true
|
||||
echo " → Old container cleaned up."
|
||||
echo ""
|
||||
else
|
||||
echo "No existing container '$CONTAINER_NAME' found."
|
||||
fi
|
||||
|
||||
# ── Check if host port is already in use (by something else) ──
|
||||
check_port_in_use() {
|
||||
local port="$1"
|
||||
if command -v ss &>/dev/null; then
|
||||
ss -tln | awk '{print $4}' | grep -Eq ":${port}$"
|
||||
elif command -v netstat &>/dev/null; then
|
||||
netstat -tln 2>/dev/null | awk '{print $4}' | grep -Eq ":${port}$"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
if check_port_in_use "$HOST_PORT"; then
|
||||
echo "Error: port $HOST_PORT is already listening on this host (another process)." >&2
|
||||
echo " Use a different port: HOST_PORT=8080 ./install.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Locate main.go ─────────────────────────────────────
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MAIN_GO="$SCRIPT_DIR/main.go"
|
||||
|
||||
if [ ! -f "$MAIN_GO" ]; then
|
||||
echo "Error: main.go not found in $SCRIPT_DIR" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Prepare build context ──────────────────────────────
|
||||
BUILD_DIR=$(mktemp -d)
|
||||
trap 'rm -rf "$BUILD_DIR"' EXIT
|
||||
cp "$MAIN_GO" "$BUILD_DIR/"
|
||||
|
||||
cat > "$BUILD_DIR/Dockerfile" <<'EOF'
|
||||
FROM golang:1.23-alpine AS builder
|
||||
WORKDIR /build
|
||||
COPY main.go .
|
||||
RUN go mod init license-activator && go mod tidy
|
||||
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o activator main.go
|
||||
|
||||
FROM alpine:latest
|
||||
RUN apk add --no-cache ca-certificates
|
||||
WORKDIR /app
|
||||
COPY --from=builder /build/activator .
|
||||
EXPOSE 8090
|
||||
ENTRYPOINT ["./activator"]
|
||||
EOF
|
||||
|
||||
# ── Build ──────────────────────────────────────────────
|
||||
echo "Building image $IMAGE_NAME:latest..."
|
||||
$CONTAINER_ENGINE build -t "$IMAGE_NAME:latest" "$BUILD_DIR"
|
||||
echo ""
|
||||
|
||||
# ── Run ────────────────────────────────────────────────
|
||||
echo "Starting container '$CONTAINER_NAME' on port $HOST_PORT..."
|
||||
$CONTAINER_ENGINE run -d \
|
||||
--name "$CONTAINER_NAME" \
|
||||
-p "${HOST_PORT}:8090" \
|
||||
--restart unless-stopped \
|
||||
"$IMAGE_NAME:latest"
|
||||
|
||||
# ── Wait a moment for container to start ───────────────
|
||||
sleep 1
|
||||
|
||||
# ── Show container status ──────────────────────────────
|
||||
echo ""
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
echo " CONTAINER STATUS"
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
|
||||
$CONTAINER_ENGINE ps --filter "name=^${CONTAINER_NAME}$" --format \
|
||||
" Name: {{.Names}}
|
||||
Image: {{.Image}}
|
||||
Status: {{.Status}}
|
||||
State: {{.State}}
|
||||
Ports: {{.Ports}}
|
||||
Created: {{.CreatedAt}}
|
||||
Command: {{.Command}}"
|
||||
|
||||
echo ""
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
echo " HEALTH CHECK"
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
|
||||
if curl -sf http://localhost:${HOST_PORT}/api/health >/dev/null 2>&1; then
|
||||
echo " ✅ Health endpoint responding on http://localhost:${HOST_PORT}/api/health"
|
||||
curl -s http://localhost:${HOST_PORT}/api/health | sed 's/^/ /'
|
||||
else
|
||||
echo " ⚠️ Health endpoint not responding yet (may need a few seconds)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
echo " QUICK COMMANDS"
|
||||
echo "═══════════════════════════════════════════════════════"
|
||||
echo " Open app: http://localhost:${HOST_PORT}"
|
||||
echo " View logs: $CONTAINER_ENGINE logs -f $CONTAINER_NAME"
|
||||
echo " Stop: $CONTAINER_ENGINE stop $CONTAINER_NAME"
|
||||
echo " Remove: $CONTAINER_ENGINE rm -f $CONTAINER_NAME"
|
||||
echo " Shell inside: $CONTAINER_ENGINE exec -it $CONTAINER_NAME sh"
|
||||
echo ""
|
||||
Loading…
Reference in a new issue