03d2f6d57a
- scripts/run-bootstrap.sh: copies and runs the deploy user bootstrap on a fresh server, verifies SSH login, checks vault as a preflight step - scripts/bootstrap-deploy-user.sh: runs on the server as root, accepts the SSH public key as an argument (read from keys/ by run-bootstrap.sh) - scripts/check-vault.sh: decrypts vault.yml and verifies all 11 required secrets are present and non-empty - docs/runbook.md: restructured into correct order (collections → DNS → vault → bootstrap → playbook), added scripts reference table, moved first-run notes for Gitea/Keycloak/registry into their own section - README.md: added scripts/ to repo layout
77 lines
2.2 KiB
Bash
Executable File
77 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copies bootstrap-deploy-user.sh to the server and runs it as root.
|
|
# Run from the repo root: bash scripts/run-bootstrap.sh
|
|
#
|
|
# Requires: ssh access to the server as root via keys/root_cloud_ladkau_de
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
SERVER="217.154.207.148"
|
|
ROOT_KEY="${REPO_ROOT}/keys/root_cloud_ladkau_de"
|
|
DEPLOY_KEY="${REPO_ROOT}/keys/notroot_cloud_ladkau_de"
|
|
DEPLOY_PUBKEY="${REPO_ROOT}/keys/notroot_cloud_ladkau_de.pub"
|
|
BOOTSTRAP_SCRIPT="${SCRIPT_DIR}/bootstrap-deploy-user.sh"
|
|
|
|
# --- Preflight checks ---
|
|
|
|
if [ ! -f "${ROOT_KEY}" ]; then
|
|
echo "ERROR: root SSH key not found at ${ROOT_KEY}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${DEPLOY_KEY}" ]; then
|
|
echo "ERROR: deploy SSH key not found at ${DEPLOY_KEY}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${DEPLOY_PUBKEY}" ]; then
|
|
echo "ERROR: deploy public key not found at ${DEPLOY_PUBKEY}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${BOOTSTRAP_SCRIPT}" ]; then
|
|
echo "ERROR: bootstrap script not found at ${BOOTSTRAP_SCRIPT}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- Vault check ---
|
|
|
|
bash "${SCRIPT_DIR}/check-vault.sh"
|
|
|
|
SSH_OPTS="-o StrictHostKeyChecking=accept-new -o ConnectTimeout=10"
|
|
|
|
# --- Verify root access ---
|
|
|
|
echo "==> Verifying root SSH access to ${SERVER}"
|
|
if ! ssh ${SSH_OPTS} -i "${ROOT_KEY}" "root@${SERVER}" "echo ok" &>/dev/null; then
|
|
echo "ERROR: cannot connect as root to ${SERVER}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- Copy and run the bootstrap script ---
|
|
|
|
echo "==> Copying bootstrap script to server"
|
|
scp ${SSH_OPTS} -i "${ROOT_KEY}" "${BOOTSTRAP_SCRIPT}" "root@${SERVER}:/root/bootstrap-deploy-user.sh"
|
|
|
|
echo "==> Running bootstrap script on server"
|
|
SSH_PUBKEY="$(cat "${DEPLOY_PUBKEY}")"
|
|
ssh ${SSH_OPTS} -i "${ROOT_KEY}" "root@${SERVER}" "bash /root/bootstrap-deploy-user.sh '${SSH_PUBKEY}'"
|
|
|
|
# --- Verify deploy user access ---
|
|
|
|
echo ""
|
|
echo "==> Verifying deploy user SSH access"
|
|
if ssh ${SSH_OPTS} -i "${DEPLOY_KEY}" "deploy@${SERVER}" "echo ok" &>/dev/null; then
|
|
echo " OK — deploy user can log in"
|
|
else
|
|
echo "ERROR: deploy user login failed — check the bootstrap output above" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Bootstrap complete. Next step:"
|
|
echo " ansible-playbook -i ansible/inventory.ini ansible/site.yml --ask-vault-pass"
|