- Dockerfile 69.3%
- Shell 30.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| .dockerignore | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| nginx.conf | ||
| README.md | ||
Baïkal Docker
Baïkal is a lightweight CalDAV + CardDAV server.
This repository builds a Docker image with nginx + PHP 8.3 + SQLite and
optionally pushes it to Docker Hub as srstone/dkr-baikal via Forgejo Actions.
Quick Start
docker compose up -d
Then visit http://<host>/ and follow the web installer.
Using SQLite (default)
The built-in SQLite backend requires zero setup — just complete the web installer and select SQLite as the database type.
Using MySQL / PostgreSQL
The image includes pdo_mysql and pdo_pgsql extensions. Create a separate
database container and point Baikal at it in the web installer.
Persistent Volumes
| Volume | Path | Contents |
|---|---|---|
baikal-config |
/var/www/baikal/config |
config.yaml + environment-specific config |
baikal-data |
/var/www/baikal/Specific |
SQLite database, calendars, address books |
Both volumes must be backed up regularly.
Traefik Reverse Proxy
Uncomment the labels and networks sections in docker-compose.yml, then:
docker compose up -d
Update the Host() rule to your domain.
Forgejo Actions CI
1. Register a runner
On the machine that will run builds (e.g. ChinPi5):
docker run -d \
--name act_runner \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v act_unner_data:/data \
-e CONFIG_FILE=/data/config.yaml \
code.forgejo.org/forgejo/act_runner:latest \
forgejo-runner register \
--instance https://git.chin.cloud \
--token <REGISTRATION_TOKEN> \
--name chinpi5-runner \
--labels "ubuntu-latest:docker://node:20-bookworm,ubuntu-22.04:docker://node:20-bookworm"
Get the registration token from: Forgejo Admin → Site Administration → Actions → Runners → Create Registration Token
After registration, restart the container so it starts polling:
docker restart act_runner
2. Add Docker Hub secrets
In your Forgejo repository: Settings → Actions → Secrets
| Secret | Value |
|---|---|
DOCKER_USERNAME |
Your Docker Hub username |
DOCKER_PASSWORD |
A Docker Hub Access Token (Account Settings → Security → Access Tokens) |
3. Create the Docker Hub repository
Create a public repository on Docker Hub named baikal so the CI push
doesn't fail on first run.
4. Push to trigger
git push origin main
The runner will pick up the job, build linux/amd64 and linux/arm64 images,
and push them to Docker Hub.
File Layout
.
├── Dockerfile # Multi-stage build
├── docker-compose.yml # Compose with optional Traefik labels
├── docker-entrypoint.sh # Boots php-fpm, exec's nginx
├── nginx.conf # nginx site config
├── .dockerignore
├── .forgejo/workflows/
│ └── docker-build.yml # CI pipeline
└── README.md