a71c5a6d76
- Create Dockerfile with multi-stage build for optimized image size - Add GitHub Actions workflow for automatic image publishing to ghcr.io - Add PORT and HOST fallback defaults in config (8080 and 0.0.0.0) - Update README with Docker Compose installation instructions
2.3 KiB
2.3 KiB
Apocapoc
Self-hosted habit tracking service with a clean, hexagonal architecture.
Features
- Multiple habit types: Boolean (check), Counter, Value
- Flexible scheduling: Daily, Weekly, Monthly with specific days
- Carry-over support: Choose if incomplete habits persist or expire
- Full history tracking: Complete audit trail of all interactions
- Charts & Analytics: Heatmaps, line charts, and statistics
- Self-hosted first: Easy deployment with SQLite or PostgreSQL
Quick Start
Using Docker Compose (Recommended)
- Create a
docker-compose.ymlfile:
services:
api:
image: ghcr.io/davidfolch/apocapoc-api:latest
ports:
- "8080:8080"
environment:
- DB_TYPE=sqlite
- DB_PATH=/data/apocapoc.db
- JWT_SECRET=YOUR_SECRET_HERE
- JWT_EXPIRY=24h
- REFRESH_TOKEN_EXPIRY=168h
- CORS_ORIGINS=http://localhost:3000
- DEFAULT_TIMEZONE=UTC
volumes:
- habit-data:/data
restart: unless-stopped
volumes:
habit-data:
-
Important: Replace
YOUR_SECRET_HEREwith a secure random string forJWT_SECRET -
Start the service:
docker-compose up -d
The API will be available at http://localhost:8080
Configuration options:
JWT_SECRET: Required. Use a long random stringJWT_EXPIRY: Token expiration (e.g.,24h,48h)REFRESH_TOKEN_EXPIRY: Refresh token expiration (e.g.,168h= 7 days)CORS_ORIGINS: Comma-separated list of allowed originsDEFAULT_TIMEZONE: Timezone for date calculations (e.g.,UTC,Europe/Madrid)
Using the binary
- Download the latest release
- Copy
.env.exampleto.envand configure - Run:
./apocapoc-api
The API will be available at http://localhost:8080
Development
Prerequisites
- Go 1.23+
- SQLite (or PostgreSQL)
Running locally
cp .env.example .env
go run cmd/api/main.go
API Documentation
Once running, visit http://localhost:8080/api/v1/docs for interactive API documentation.
Architecture
This project follows hexagonal (ports & adapters) architecture:
domain/: Core business logic and entitiesapplication/: Use cases (commands & queries)infrastructure/: External adapters (database, HTTP, etc.)shared/: Common utilities and errors
License
MIT