Some checks are pending
CI / tongo-core (push) Waiting to run
CI / web-terminal (push) Waiting to run
Deploy / build-and-push (push) Waiting to run
Deploy / deploy (push) Blocked by required conditions
Infrastructure / plan (push) Waiting to run
Infrastructure / apply (push) Blocked by required conditions
129 lines
4.6 KiB
YAML
129 lines
4.6 KiB
YAML
#cloud-config
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Quark's Holo-Grid Ledger — Forgejo server cloud-init
|
|
# Provisions: Docker, deploy user, Forgejo + Actions runner
|
|
# ──────────────────────────────────────────────────────────────
|
|
|
|
package_update: true
|
|
package_upgrade: true
|
|
|
|
packages:
|
|
- ca-certificates
|
|
- curl
|
|
- gnupg
|
|
- lsb-release
|
|
|
|
# ── Install Docker from official apt repository ─────────────
|
|
runcmd:
|
|
# Add Docker GPG key
|
|
- install -m 0755 -d /etc/apt/keyrings
|
|
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
|
- chmod a+r /etc/apt/keyrings/docker.asc
|
|
|
|
# Add Docker apt repository
|
|
- |
|
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
|
|
> /etc/apt/sources.list.d/docker.list
|
|
|
|
- apt-get update -y
|
|
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
|
|
# Enable and start Docker
|
|
- systemctl enable docker
|
|
- systemctl start docker
|
|
|
|
# Create deploy user with docker group access
|
|
- useradd -m -s /bin/bash -G docker deploy
|
|
- mkdir -p /home/deploy/.ssh
|
|
- echo "${ssh_public_key}" > /home/deploy/.ssh/authorized_keys
|
|
- chmod 700 /home/deploy/.ssh
|
|
- chmod 600 /home/deploy/.ssh/authorized_keys
|
|
- chown -R deploy:deploy /home/deploy/.ssh
|
|
|
|
# Harden SSH — disable root login
|
|
- sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
|
|
- systemctl restart sshd
|
|
|
|
# Create Forgejo directory
|
|
- mkdir -p /opt/forgejo
|
|
|
|
# Start Forgejo stack (automatic HTTPS via Caddy; runner remains stopped until registered)
|
|
- cd /opt/forgejo && docker compose up -d caddy forgejo
|
|
|
|
# ── Configuration Files ─────────────────────────────────────
|
|
write_files:
|
|
# ── Caddy Proxy Rule Configuration ────────────────────────
|
|
- path: /opt/forgejo/Caddyfile
|
|
permissions: "0644"
|
|
content: |
|
|
${forgejo_domain} {
|
|
reverse_proxy forgejo:3000
|
|
}
|
|
|
|
# ── Write docker-compose.yml for Forgejo + Actions runner ───
|
|
- path: /opt/forgejo/docker-compose.yml
|
|
permissions: "0644"
|
|
content: |
|
|
# Quark's Holo-Grid Ledger — Forgejo stack
|
|
services:
|
|
caddy:
|
|
image: caddy:2-alpine
|
|
container_name: caddy
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
|
- caddy-data:/data
|
|
- caddy-config:/config
|
|
depends_on:
|
|
- forgejo
|
|
|
|
forgejo:
|
|
image: codeberg.org/forgejo/forgejo:9
|
|
container_name: forgejo
|
|
restart: unless-stopped
|
|
expose:
|
|
- "3000"
|
|
ports:
|
|
- "2222:22"
|
|
volumes:
|
|
- forgejo-data:/data
|
|
environment:
|
|
- FORGEJO__server__ROOT_URL=https://${forgejo_domain}
|
|
- FORGEJO__actions__ENABLED=true
|
|
|
|
# Docker-in-Docker sidecar for the Actions runner
|
|
runner-dind:
|
|
image: docker:dind
|
|
container_name: runner-dind
|
|
restart: unless-stopped
|
|
privileged: true
|
|
command: dockerd -H tcp://0.0.0.0:2375 --tls=false
|
|
volumes:
|
|
- runner-dind-data:/var/lib/docker
|
|
|
|
# Forgejo Actions runner
|
|
# NOTE: After first boot, register the runner manually:
|
|
# 1. Get a registration token from Forgejo admin → Actions → Runners
|
|
# 2. docker exec -it runner forgejo-runner register --instance https://${forgejo_domain} --token <TOKEN> --name hologrid-runner
|
|
# 3. docker compose up -d runner
|
|
runner:
|
|
image: data.forgejo.org/forgejo/runner:6.2.0
|
|
container_name: runner
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- runner-dind
|
|
environment:
|
|
- DOCKER_HOST=tcp://runner-dind:2375
|
|
volumes:
|
|
- runner-data:/data
|
|
command: forgejo-runner daemon --config /data/config.yml
|
|
|
|
volumes:
|
|
caddy-data:
|
|
caddy-config:
|
|
forgejo-data:
|
|
runner-dind-data:
|
|
runner-data:
|