mirror of
https://github.com/elisiariocouto/leggen.git
synced 2025-12-13 13:42:19 +00:00
feat(docker): Add Docker containerization for React frontend
- Add production compose.yml using published ghcr.io images - Rename compose.yml to compose.dev.yml for development - Create config.example.toml configuration template - Update README.md with Docker setup instructions - Use ./data directory for configuration and database storage - Separate development and production Docker workflows
This commit is contained in:
52
README.md
52
README.md
@@ -64,8 +64,8 @@ git clone https://github.com/elisiariocouto/leggen.git
|
|||||||
cd leggen
|
cd leggen
|
||||||
|
|
||||||
# Create your configuration
|
# Create your configuration
|
||||||
mkdir -p leggen && cp config.example.toml leggen/config.toml
|
mkdir -p data && cp config.example.toml data/config.toml
|
||||||
# Edit leggen/config.toml with your GoCardless credentials
|
# Edit data/config.toml with your GoCardless credentials
|
||||||
|
|
||||||
# Start all services (frontend + backend)
|
# Start all services (frontend + backend)
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
@@ -74,6 +74,31 @@ docker compose up -d
|
|||||||
# API is available at http://localhost:8000
|
# API is available at http://localhost:8000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Production Deployment
|
||||||
|
|
||||||
|
For production deployment using published Docker images:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository
|
||||||
|
git clone https://github.com/elisiariocouto/leggen.git
|
||||||
|
cd leggen
|
||||||
|
|
||||||
|
# Create your configuration
|
||||||
|
mkdir -p data && cp config.example.toml data/config.toml
|
||||||
|
# Edit data/config.toml with your GoCardless credentials
|
||||||
|
|
||||||
|
# Start production services
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Access the web interface at http://localhost:3000
|
||||||
|
# API is available at http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
### Development vs Production
|
||||||
|
|
||||||
|
- **Development**: Use `docker compose -f compose.dev.yml up -d` (builds from source)
|
||||||
|
- **Production**: Use `docker compose up -d` (uses published images)
|
||||||
|
|
||||||
#### Option 2: Local Development
|
#### Option 2: Local Development
|
||||||
For development or local installation:
|
For development or local installation:
|
||||||
|
|
||||||
@@ -90,7 +115,7 @@ uv run leggen --help
|
|||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
Create a configuration file at `~/.config/leggen/config.toml`:
|
Create a configuration file at `./data/config.toml` (for Docker) or `~/.config/leggen/config.toml` (for local development):
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[gocardless]
|
[gocardless]
|
||||||
@@ -188,8 +213,25 @@ leggen status
|
|||||||
|
|
||||||
### Docker Usage
|
### Docker Usage
|
||||||
|
|
||||||
|
#### Development (build from source)
|
||||||
```bash
|
```bash
|
||||||
# Start all services (frontend + backend)
|
# Start development services
|
||||||
|
docker compose -f compose.dev.yml up -d
|
||||||
|
|
||||||
|
# View service status
|
||||||
|
docker compose -f compose.dev.yml ps
|
||||||
|
|
||||||
|
# Check logs
|
||||||
|
docker compose -f compose.dev.yml logs frontend
|
||||||
|
docker compose -f compose.dev.yml logs leggend
|
||||||
|
|
||||||
|
# Stop development services
|
||||||
|
docker compose -f compose.dev.yml down
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Production (use published images)
|
||||||
|
```bash
|
||||||
|
# Start production services
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# View service status
|
# View service status
|
||||||
@@ -202,7 +244,7 @@ docker compose logs leggend
|
|||||||
# Access the web interface at http://localhost:3000
|
# Access the web interface at http://localhost:3000
|
||||||
# API documentation at http://localhost:8000/docs
|
# API documentation at http://localhost:8000/docs
|
||||||
|
|
||||||
# Stop all services
|
# Stop production services
|
||||||
docker compose down
|
docker compose down
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
25
compose.dev.yml
Normal file
25
compose.dev.yml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
services:
|
||||||
|
# React frontend service
|
||||||
|
frontend:
|
||||||
|
build:
|
||||||
|
context: ./frontend
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
restart: "unless-stopped"
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:3000:80"
|
||||||
|
environment:
|
||||||
|
- API_BACKEND_URL=${API_BACKEND_URL:-http://leggend:8000}
|
||||||
|
depends_on:
|
||||||
|
leggend:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
# FastAPI backend service
|
||||||
|
leggend:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
restart: "unless-stopped"
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8000:8000"
|
||||||
|
volumes:
|
||||||
|
- "./data:/root/.config/leggen"
|
||||||
12
compose.yml
12
compose.yml
@@ -1,25 +1,19 @@
|
|||||||
services:
|
services:
|
||||||
# React frontend service
|
# React frontend service
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
image: ghcr.io/elisiariocouto/leggen:latest-frontend
|
||||||
context: ./frontend
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3000:80"
|
- "127.0.0.1:3000:80"
|
||||||
environment:
|
|
||||||
- API_BACKEND_URL=${API_BACKEND_URL:-http://leggend:8000}
|
|
||||||
depends_on:
|
depends_on:
|
||||||
leggend:
|
leggend:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
# FastAPI backend service
|
# FastAPI backend service
|
||||||
leggend:
|
leggend:
|
||||||
build:
|
image: ghcr.io/elisiariocouto/leggen:latest
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8000:8000"
|
- "127.0.0.1:8000:8000"
|
||||||
volumes:
|
volumes:
|
||||||
- "./data:/root/.config/leggen"
|
- "./data:/root/.config/leggen" # Configuration and database directory
|
||||||
|
|||||||
30
config.example.toml
Normal file
30
config.example.toml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
[gocardless]
|
||||||
|
key = "your-api-key"
|
||||||
|
secret = "your-secret-key"
|
||||||
|
url = "https://bankaccountdata.gocardless.com/api/v2"
|
||||||
|
|
||||||
|
[database]
|
||||||
|
sqlite = true
|
||||||
|
|
||||||
|
# Optional: Background sync scheduling
|
||||||
|
[scheduler.sync]
|
||||||
|
enabled = true
|
||||||
|
hour = 3 # 3 AM
|
||||||
|
minute = 0
|
||||||
|
# cron = "0 3 * * *" # Alternative: use cron expression
|
||||||
|
|
||||||
|
# Optional: Discord notifications
|
||||||
|
[notifications.discord]
|
||||||
|
webhook = "https://discord.com/api/webhooks/..."
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
# Optional: Telegram notifications
|
||||||
|
[notifications.telegram]
|
||||||
|
token = "your-bot-token"
|
||||||
|
chat_id = 12345
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
# Optional: Transaction filters for notifications
|
||||||
|
[filters]
|
||||||
|
case-insensitive = ["salary", "utility"]
|
||||||
|
case-sensitive = ["SpecificStore"]
|
||||||
Reference in New Issue
Block a user