This document describes the system architecture, service configuration, and the automated software deployment process.
The system provides a complete hosting and CI/CD environment for software projects. It uses Docker Compose to orchestrate infrastructure for version control, continuous integration, and web hosting.
| Service | Image | Role |
|---|---|---|
| Traefik | traefik:latest |
Edge router / reverse proxy. Handles routing based on Host headers and exposes services on port 80/8080. |
| Gitea | gitea/gitea:latest |
Self-hosted Git service for source code management. |
| Woodpecker Server | woodpeckerci/woodpecker-server |
CI/CD server that integrates with Gitea to automate builds and deployments. |
| Woodpecker Agent | woodpeckerci/woodpecker-agent |
Runs the actual CI pipeline steps; mounts the Docker socket and the shared softwares volume. |
| MySQL | mysql:8 |
Primary database (softwares) for the API, storing software metadata and release information. |
| phpMyAdmin | phpmyadmin:latest |
Web UI for inspecting and managing the MySQL database. |
| API | (Local Build) | The backend Ruby on Rails 8 application that serves the catalog REST API, file downloads, the ActiveAdmin panel, and the /update endpoint. Routed for the /api, /file, /update, and /admin path prefixes and for the games.teletype.hu host. |
| Frontend | (Local Build) | The user-facing Vue 3 / Vite single-page application serving the game portal. |
| Droparea | linuxserver/openssh-server |
A secure SSH gateway for CI/CD runners to upload compiled artifacts. |
A critical part of the system is how files move from the CI runner to the web application:
./data/softwares to /home/drop../data/softwares to /softwares.Because they share the same physical directory on the host, any file uploaded via SSH to droparea is immediately visible to the api.
The deployment process consists of two main steps defined in .woodpecker.yaml:
artifact step)The CI runner compiles the software and uploads the resulting files to the Droparea service using SSH/SCP.
openssh-client, sshpass.DROPAREA_HOST (port 2222 in compose, 2223 in example).update step)After the files are uploaded, the CI runner notifies the API to register the new version.
/update endpoint.platform, name, version, and a shared UPDATE_SECRET.curl "${UPDATE_SERVER}/update?platform=...&name=...&version=...&secret=${UPDATE_SECRET}"Once the update is processed, the new softwares and their corresponding releases automatically appear on the games.teletype.hu portal.