Menu
Public repository / d3aae99d0b8a3a4cef553c87c799fbe0458a4715
AkurAI-IDP / deploy.sh
Latest change b43ca79dc05b700ec25aa016dd754e0d6304fdf8 - docs: add deploy conduct rules by Ólafur Búi Ólafsson
#!/usr/bin/env bash
# Deploy rules of conduct:
# - Read AGENTS.md and canonical Notes/docs before changing or deploying.
# - Never print, commit, or copy secrets; use passvault/env files only.
# - Preserve env files, service users, user data, and databases; snapshot state before risky swaps.
# - Verify ports, DNS, TLS, and systemd unit names before changing routes or services.
# - Use managed services only (systemd/pm2); no nohup, background shells, or ad hoc daemons.
# - Run gates and health checks; if deploy fails, stop and roll back rather than improvising.
# - Keep deploy behavior unchanged unless the task explicitly asks for deploy logic changes.
set -euo pipefail
SSH_HOST="${AKURAI_MAIL_SSH:-akurai-mail}"
DEPLOY_DIR="/opt/akurai-idp"
SERVICE="akurai-idp"
TARGET="x86_64-unknown-linux-musl"
log() { echo "[deploy] $*"; }
step() { echo; echo "── $* ──"; }
step "1/4 Build"
CC_x86_64_unknown_linux_musl=musl-gcc cargo build --release --target "$TARGET" 2>&1
BINARY="target/$TARGET/release/akurai-idp"
log "Binary: $(du -sh "$BINARY" | cut -f1)"
step "2/4 Upload"
ssh "$SSH_HOST" "sudo mkdir -p $DEPLOY_DIR"
scp -q "$BINARY" "$SSH_HOST:/tmp/akurai-idp-bin"
ssh "$SSH_HOST" "sudo install -m 755 /tmp/akurai-idp-bin $DEPLOY_DIR/akurai-idp && rm /tmp/akurai-idp-bin"
step "3/4 Install service"
ssh "$SSH_HOST" "sudo bash -s" <<'INSTALL'
set -euo pipefail
cat > /etc/systemd/system/akurai-idp.service <<EOF
[Unit]
Description=AkurAI IDP (Rust OIDC Provider)
After=network.target
[Service]
Type=simple
ExecStart=/opt/akurai-idp/akurai-idp
WorkingDirectory=/opt/akurai-idp
EnvironmentFile=/etc/akurai-idp/idp.env
Restart=always
RestartSec=3
User=idp
Group=idp
[Install]
WantedBy=multi-user.target
EOF
mkdir -p /data/akurai-idp
chown idp:idp /data/akurai-idp
systemctl daemon-reload
systemctl restart akurai-idp
echo " [done] service restarted"
INSTALL
step "4/4 Healthcheck"
sleep 2
if ssh "$SSH_HOST" "curl -fsS http://127.0.0.1:3500/health" | grep -q '"ok":true'; then
log "Healthcheck passed"
else
echo "ERROR: healthcheck failed"
echo "Check: ssh $SSH_HOST 'sudo journalctl -u $SERVICE -n 50'"
exit 1
fi
RSS=$(ssh "$SSH_HOST" "ps -C akurai-idp -o rss= 2>/dev/null | head -1 | tr -d ' '" 2>/dev/null || echo "?")
echo
echo "════════════════════════════════════════════════════"
echo " AkurAI IDP deployed (Rust)"
echo "════════════════════════════════════════════════════"
echo " Binary : $(du -sh "$BINARY" | cut -f1)"
echo " RSS : ${RSS} KB"
echo " Host : $SSH_HOST"
echo " Public : https://auth.olibuijr.com"
echo "════════════════════════════════════════════════════"