mirror of
https://codeberg.org/likwid/likwid.git
synced 2026-02-09 13:03:10 +00:00
- Backend: Rust/Axum with PostgreSQL, plugin architecture - Frontend: Astro with polished UI - Voting methods: Approval, Ranked Choice, Schulze, STAR, Quadratic - Features: Liquid delegation, transparent moderation, structured deliberation - Documentation: User and admin guides in /docs - Deployment: Docker/Podman compose files for production and demo - Demo: Seeded data with 3 communities, 13 users, 7 proposals License: AGPLv3
6.5 KiB
6.5 KiB
Likwid Deployment Guide
Likwid supports two distinct deployment modes: Production and Demo. These are separate instances with their own databases.
Architecture Overview
┌─────────────────────────────────────────────────────────────────┐
│ PRODUCTION │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ Frontend │───▶│ Backend │───▶│ PostgreSQL (prod_db) │ │
│ │ :4321 │ │ :3000 │ │ :5432 │ │
│ └──────────┘ └──────────┘ └──────────────────────┘ │
│ DEMO_MODE=false │ No demo data │ Clean database │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ DEMO │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ Frontend │───▶│ Backend │───▶│ PostgreSQL (demo_db) │ │
│ │ :4322 │ │ :3001 │ │ :5433 │ │
│ └──────────┘ └──────────┘ └──────────────────────┘ │
│ DEMO_MODE=true │ Seed data │ Resettable database │
└─────────────────────────────────────────────────────────────────┘
Quick Start
Production Deployment
# 1. Copy and configure environment
cp compose/.env.production.example compose/.env.production
# 2. Edit .env.production with secure values
# - Set strong POSTGRES_PASSWORD
# - Set random JWT_SECRET (64+ chars)
# - Set your domain in API_BASE
# 3. Remove demo seed migration (important!)
rm backend/migrations/20260127150000_demo_seed_data.sql
# 4. Deploy
cd compose
podman-compose --env-file .env.production -f production.yml up -d
# 5. Access at http://localhost:4321
Demo Deployment
# 1. Copy environment (defaults are fine for demo)
cp compose/.env.demo.example compose/.env.demo
# 2. Deploy
cd compose
podman-compose --env-file .env.demo -f demo.yml up -d
# 3. Access at http://localhost:4322
Demo Instance Details
Demo Accounts
| Username | Password | Role |
|---|---|---|
| contributor | demo123 | Standard member |
| moderator | demo123 | Can moderate content |
| observer | demo123 | Read-only access |
Pre-seeded Data
-
3 Communities
- Aurora Framework (tech/OSS governance)
- Civic Commons Network (civic engagement)
- Regional Makers Collective (federated makerspaces)
-
13 Users with realistic profiles
-
7 Proposals in various states (draft, discussion, voting, closed)
-
Delegation relationships demonstrating liquid democracy
-
Moderation history showing governance in action
Resetting Demo
To reset the demo to a clean state:
# Windows
.\scripts\demo-reset.ps1
# Linux/macOS
./scripts/demo-reset.sh
# Or manually:
podman-compose -f compose/demo.yml down -v
podman-compose --env-file .env.demo -f compose/demo.yml up -d
Configuration Reference
Environment Variables
| Variable | Production Default | Demo Default | Description |
|---|---|---|---|
| POSTGRES_USER | likwid | likwid_demo | Database username |
| POSTGRES_PASSWORD | (required) | demo_secret_change_me | Database password |
| POSTGRES_DB | likwid_prod | likwid_demo | Database name |
| DB_PORT | 5432 | 5433 | Database port |
| JWT_SECRET | (required) | demo_jwt_secret_... | JWT signing secret |
| BACKEND_PORT | 3000 | 3001 | Backend API port |
| FRONTEND_PORT | 4321 | 4322 | Frontend port |
| API_BASE | (your domain) | http://localhost:3001 | Public API URL |
| DEMO_MODE | false | true | Enable demo features |
Demo Mode Features
When DEMO_MODE=true:
- Demo accounts are recognized and can log in
- Destructive actions on demo data are restricted
- Reset endpoint available at
/api/demo/reset(admin only) - Demo status shown at
/api/demo/status
Development Setup
For local development without containers:
# 1. Start only the database
podman-compose -f compose/dev.yml up -d
# 2. Run backend natively
cd backend
cp ../.env.example .env # Configure DATABASE_URL
cargo run
# 3. Run frontend natively
cd frontend
npm run dev
Monitoring & Logs
# View all logs
podman-compose -f compose/demo.yml logs -f
# View specific service
podman-compose -f compose/demo.yml logs -f backend
# Check health
curl http://localhost:3001/health
Troubleshooting
Database connection issues
# Check if postgres is running
podman-compose -f compose/demo.yml ps
# View postgres logs
podman-compose -f compose/demo.yml logs postgres
Migration failures
# Connect to database and check
podman exec -it likwid-demo-db psql -U likwid_demo -d likwid_demo
# List tables
\dt
# Check migration status
SELECT * FROM _sqlx_migrations;
Reset everything
# Nuclear option - removes all data and volumes
podman-compose -f compose/demo.yml down -v
podman volume prune -f
podman-compose -f compose/demo.yml up -d