42 lines
1.6 KiB
Bash
42 lines
1.6 KiB
Bash
#!/bin/bash
|
|
# First-boot setup for the Gitea host on Amazon Linux 2023 (x86_64). Runs once as root.
|
|
# No secrets in this file. Output goes to /var/log/user-data.log and the EC2 console.
|
|
# Installs: 2 GB swap (t3.micro has 1 GB RAM), Docker, git, and a pinned, checksummed
|
|
# Docker Compose plugin. Does NOT deploy Gitea: that is done by hand and documented.
|
|
set -euxo pipefail
|
|
exec > >(tee /var/log/user-data.log | logger -t user-data -s 2>/dev/console) 2>&1
|
|
|
|
COMPOSE_VERSION="v5.6.0"
|
|
# SHA-256 of docker-compose-linux-x86_64 for v5.6.0 (GitHub release asset digest and .sha256 file agree).
|
|
COMPOSE_SHA256="40343e21ca777173e69cff5dbafeb37c6f81f3b0d57d9e597f036e95eb63e76a"
|
|
|
|
# --- 2 GB swap file (idempotent) ---
|
|
if ! swapon --show | grep -q /swapfile; then
|
|
dd if=/dev/zero of=/swapfile bs=1M count=2048
|
|
chmod 600 /swapfile
|
|
mkswap /swapfile
|
|
swapon /swapfile
|
|
grep -q '^/swapfile' /etc/fstab || echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
|
|
fi
|
|
|
|
# --- Docker + git from the Amazon Linux repositories ---
|
|
dnf install -y docker git
|
|
systemctl enable --now docker
|
|
usermod -aG docker ec2-user
|
|
|
|
# --- Docker Compose plugin, pinned and verified ---
|
|
PLUGIN_DIR=/usr/local/lib/docker/cli-plugins
|
|
mkdir -p "$PLUGIN_DIR"
|
|
curl -fsSL -o "$PLUGIN_DIR/docker-compose" \
|
|
"https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-x86_64"
|
|
echo "${COMPOSE_SHA256} ${PLUGIN_DIR}/docker-compose" | sha256sum -c -
|
|
chmod +x "$PLUGIN_DIR/docker-compose"
|
|
|
|
# --- Record versions for the manual ---
|
|
docker --version
|
|
docker compose version
|
|
git --version
|
|
free -m
|
|
swapon --show
|
|
echo "user-data finished OK"
|