Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
Open-source, self-hosted retrospectives, planning poker, whiteboards, surveys and games for agile teams. Realtime, multi-tenant, built with Laravel and React.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Retrospectives, planning poker, whiteboards, surveys and games for agile teams.
Realtime, open source, and yours to host.
Skrum is an open-source, self-hostable place for a team's rituals. It is multi-tenant (workspaces contain teams, teams run sessions), lets guests join a session through a link, and is available in English, French, Spanish and German. It is released under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later, see LICENSE).Read the full README ↗Skrum is an open-source, self-hostable place for a team's rituals. It is multi-tenant (workspaces contain teams, teams run sessions), lets guests join a session through a link, and is available in English, French, Spanish and German. It is released under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later, see LICENSE).
Run with Docker · Configuration · Connect an AI assistant · Local development · Contributing
Documentation: https://arnaud-ritti.github.io/skrum/docs/
The image is published to GitHub Container Registry.
curl -O https://raw.githubusercontent.com/arnaud-ritti/skrum/main/compose.production.yaml
curl -o .env https://raw.githubusercontent.com/arnaud-ritti/skrum/main/.env.production.example
docker run --rm --entrypoint php ghcr.io/arnaud-ritti/skrum:latest artisan key:generate --show
The last command prints the value for APP_KEY. Fill the three values at the top of .env:
APP_URL: the public address of the instance, as typed in the browser;APP_KEY: the value just printed;DB_PASSWORD: a strong password for the database.Everything else has a working default. The same file lists, commented, what an install most often changes: the address Caddy serves, the host ports, the image version (SKRUM_IMAGE), the instance name and time zone, and outgoing mail, which goes to the log until the MAIL_* variables are set.
Compose reads .env from the project directory twice: to fill the ${...} values in compose.production.yaml (image, ports, database name, user and password) and as the app container's environment. To use a file with another name, pass --env-file <file> to every docker compose command; it feeds the ${...} values, so also point the env_file: entry of the app service at that file.
Start it:
docker compose -f compose.production.yaml up -d
Skrum answers on http://<host>: plain HTTP on port 80, meant for a TLS-terminating reverse proxy in front, whose forwarded headers are trusted by default (TRUSTED_PROXIES). To let the built-in Caddy obtain certificates itself, set SERVER_NAME to your domain: see SERVER_NAME.
[!WARNING] The first account to sign up becomes the instance admin. Create it right after starting, and consider
SKRUM_SIGNUP_MODEto control who can sign up afterwards.
If a container keeps restarting, docker compose -f compose.production.yaml logs app shows why (for example a missing variable, or APP_DEBUG left enabled).
Back up the database first (the pgsql-data volume with the default Compose file) and the app-storage volume, then pull the new image and recreate the containers:
docker compose -f compose.production.yaml pull && docker compose -f compose.production.yaml up -d
Migrations run automatically when the container starts. Prefer pinning SKRUM_IMAGE to a version tag over latest, so upgrades happen when you choose.
To show a maintenance page while you work, run php artisan down --retry=<seconds> in the application container (docker compose -f compose.production.yaml exec app php artisan down --retry=1800) and php artisan up when done. The page shows the time of return taken from --retry; it reloads by itself every 30 seconds and links to the status page.
The admin footer shows the running version (SKRUM_VERSION, set by the published images). The check for a newer release is on by default (SKRUM_UPDATE_CHECK_ENABLED=true). Set it to false to disable the environment default; a saved Administration › General choice takes precedence. When enabled, the instance asks SKRUM_UPDATE_FEED once a day and sends nothing about itself.
Upgrading to the release that adds the app-storage volume: until then, profile photos and brand assets lived in the container itself, and the new volume starts empty. Once, copy them out of the running container before up -d, then back into the volume and give them to uid 82 (www-data). With compose.production.mariadb.yaml or compose.production.sqlite.yaml, use that file in each command:
docker compose -f compose.production.yaml cp app:/app/storage/app ./storage-app-backup
docker compose -f compose.production.yaml pull && docker compose -f compose.production.yaml up -d
docker compose -f compose.production.yaml cp ./storage-app-backup/. app:/app/storage/app
docker compose -f compose.production.yaml exec -u root app chown -R 82:82 /app/storage/app
This is the beginning of the README. Read the rest at the original. Read the full README ↗