#cloud-config package_update: true packages: - docker.io - docker-compose-v2 write_files: - path: /opt/services/docker-compose.yml permissions: "0644" content: | services: forgejo-ct: image: codeberg.org/forgejo/forgejo:10 restart: always environment: USER_UID: "1000" USER_GID: "1000" FORGEJO__server__HTTP_PORT: "3000" FORGEJO__server__SSH_PORT: "2222" FORGEJO__security__INSTALL_LOCK: "true" FORGEJO__service__DISABLE_REGISTRATION: "true" volumes: - /opt/services/ct:/data ports: - "3000:3000" - "2222:22" forgejo-mc: image: codeberg.org/forgejo/forgejo:10 restart: always environment: USER_UID: "1000" USER_GID: "1000" FORGEJO__server__HTTP_PORT: "3000" FORGEJO__server__SSH_PORT: "2223" FORGEJO__security__INSTALL_LOCK: "true" FORGEJO__service__DISABLE_REGISTRATION: "true" volumes: - /opt/services/mc:/data ports: - "3001:3000" - "2223:22" forgejo-quinn: image: codeberg.org/forgejo/forgejo:10 restart: always environment: USER_UID: "1000" USER_GID: "1000" FORGEJO__server__HTTP_PORT: "3000" FORGEJO__server__SSH_PORT: "2224" FORGEJO__security__INSTALL_LOCK: "true" FORGEJO__service__DISABLE_REGISTRATION: "true" volumes: - /opt/services/quinn:/data ports: - "3002:3000" - "2224:22" verdaccio: image: verdaccio/verdaccio:6 restart: always ports: - "4873:4873" volumes: - /opt/services/verdaccio:/verdaccio/storage runcmd: # 2GB swap (safety on the 4GB box) - [ bash, -c, "fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo '/swapfile none swap sw 0 0' >> /etc/fstab" ] - [ bash, -c, "mkdir -p /opt/services/ct /opt/services/mc /opt/services/quinn /opt/services/verdaccio && chown -R 1000:1000 /opt/services" ] - [ systemctl, enable, --now, docker ] - [ bash, -c, "cd /opt/services && docker compose up -d" ] final_message: "services droplet up: 3 Forgejo (ct:3000 mc:3001 quinn:3002) + Verdaccio:4873"