docs: adds documentation files for the major configurable options.

This commit is contained in:
Houmgaor
2025-11-18 00:44:17 +01:00
parent 9a47a876eb
commit aa638b791d
12 changed files with 3439 additions and 0 deletions

409
docs/database.md Normal file
View File

@@ -0,0 +1,409 @@
# Database Configuration
PostgreSQL database configuration and setup for Erupe.
## Configuration
```json
{
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "postgres",
"Password": "",
"Database": "erupe"
}
}
```
## Settings Reference
| Setting | Type | Default | Description |
|---------|------|---------|-------------|
| `Host` | string | `"localhost"` | Database host address |
| `Port` | number | `5432` | PostgreSQL port |
| `User` | string | `"postgres"` | Database user |
| `Password` | string | *required* | Database password (must not be empty) |
| `Database` | string | `"erupe"` | Database name |
**Important:** The `Password` field must not be empty. The server will refuse to start if the password is blank.
## Initial Setup
### 1. Install PostgreSQL
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
```
**macOS (Homebrew):**
```bash
brew install postgresql
brew services start postgresql
```
**Windows:**
Download and install from [postgresql.org](https://www.postgresql.org/download/windows/)
### 2. Create Database User
```bash
# Switch to postgres user
sudo -u postgres psql
# Create user with password
CREATE USER erupe WITH PASSWORD 'your_secure_password';
# Grant privileges
ALTER USER erupe CREATEDB;
# Exit psql
\q
```
### 3. Create Database
```bash
# Create database
createdb -U erupe erupe
# Or via psql
psql -U postgres
CREATE DATABASE erupe OWNER erupe;
\q
```
### 4. Apply Schema
From the Erupe root directory:
```bash
# Apply initial schema (bootstraps to version 9.1.0)
psql -U erupe -d erupe -f schemas/schema.sql
```
### 5. Apply Patches (Development Branch)
If using the development branch, apply patch schemas in order:
```bash
# Apply patches sequentially
psql -U erupe -d erupe -f patch-schema/01_patch.sql
psql -U erupe -d erupe -f patch-schema/02_patch.sql
# ... continue in order
```
**Note:** Patch schemas are development updates and may change. They get consolidated into update schemas on release.
### 6. (Optional) Load Bundled Data
Load demo data for shops, events, and gacha:
```bash
psql -U erupe -d erupe -f schemas/bundled-schema/shops.sql
psql -U erupe -d erupe -f schemas/bundled-schema/events.sql
psql -U erupe -d erupe -f schemas/bundled-schema/gacha.sql
```
## Schema Management
Erupe uses a multi-tiered schema system:
### Schema Types
1. **Initialization Schema** (`schemas/schema.sql`)
- Bootstraps database to version 9.1.0
- Creates all tables, indexes, and base data
- Use for fresh installations
2. **Patch Schemas** (`patch-schema/*.sql`)
- Development-time updates
- Numbered sequentially (01, 02, 03...)
- Applied in order during active development
- **May change during development cycle**
3. **Update Schemas** (for releases)
- Production-ready consolidated updates
- Stable and tested
- Created when patches are finalized for release
4. **Bundled Schemas** (`schemas/bundled-schema/*.sql`)
- Optional demo/template data
- Shops, events, gacha pools
- Not required but helpful for testing
### Applying Schemas
**Fresh Installation:**
```bash
psql -U erupe -d erupe -f schemas/schema.sql
```
**Development (with patches):**
```bash
# First apply base schema
psql -U erupe -d erupe -f schemas/schema.sql
# Then apply patches in order
for patch in patch-schema/*.sql; do
psql -U erupe -d erupe -f "$patch"
done
```
**With Password:**
```bash
PGPASSWORD='your_password' psql -U erupe -d erupe -f schema.sql
```
## Configuration Examples
### Local Development
```json
{
"Database": {
"Host": "localhost",
"Port": 5432,
"User": "postgres",
"Password": "dev_password",
"Database": "erupe_dev"
}
}
```
### Production (Dedicated Database Server)
```json
{
"Database": {
"Host": "db.example.com",
"Port": 5432,
"User": "erupe",
"Password": "very_secure_password_here",
"Database": "erupe_production"
}
}
```
### Docker Container
```json
{
"Database": {
"Host": "db",
"Port": 5432,
"User": "postgres",
"Password": "docker_password",
"Database": "erupe"
}
}
```
The `Host: "db"` refers to the Docker Compose service name.
## Docker Setup
Using Docker Compose (see `docker-compose.yml`):
```yaml
services:
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: test
POSTGRES_DB: erupe
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
```
Start database:
```bash
docker compose up db
```
Apply schema to Docker database:
```bash
docker compose exec db psql -U postgres -d erupe -f /path/to/schema.sql
```
## Database Maintenance
### Backup Database
```bash
# Full backup
pg_dump -U erupe erupe > erupe_backup.sql
# Compressed backup
pg_dump -U erupe erupe | gzip > erupe_backup.sql.gz
# With password
PGPASSWORD='password' pg_dump -U erupe erupe > backup.sql
```
### Restore Database
```bash
# Drop and recreate database
dropdb -U erupe erupe
createdb -U erupe erupe
# Restore from backup
psql -U erupe -d erupe -f erupe_backup.sql
# From compressed backup
gunzip -c erupe_backup.sql.gz | psql -U erupe -d erupe
```
### Clean Database (Development)
```bash
# Connect to database
psql -U erupe -d erupe
-- Delete all user data
DELETE FROM guild_characters;
DELETE FROM guilds;
DELETE FROM characters;
DELETE FROM sign_sessions;
DELETE FROM users;
-- Exit
\q
```
Or use `CleanDB: true` in [Development Mode](development-mode.md) (⚠️ destructive!).
### Check Database Size
```bash
psql -U erupe -d erupe -c "SELECT pg_size_pretty(pg_database_size('erupe'));"
```
### Vacuum Database
Reclaim space and optimize:
```bash
psql -U erupe -d erupe -c "VACUUM ANALYZE;"
```
## Troubleshooting
### Connection Refused
**Error:** `could not connect to server: Connection refused`
**Solutions:**
- Verify PostgreSQL is running: `sudo systemctl status postgresql`
- Check port is correct: `5432` (default)
- Verify host is accessible
- Check firewall rules
### Authentication Failed
**Error:** `password authentication failed for user "erupe"`
**Solutions:**
- Verify password is correct in config
- Check `pg_hba.conf` authentication method
- Ensure user exists: `psql -U postgres -c "\du"`
### Database Does Not Exist
**Error:** `database "erupe" does not exist`
**Solutions:**
- Create database: `createdb -U erupe erupe`
- Verify database name matches config
### Permission Denied
**Error:** `permission denied for table users`
**Solutions:**
```sql
-- Grant all privileges on database
GRANT ALL PRIVILEGES ON DATABASE erupe TO erupe;
-- Grant all privileges on all tables
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO erupe;
```
### Schema Version Mismatch
**Error:** Server starts but data doesn't load properly
**Solutions:**
- Check if all patches were applied in order
- Verify schema version in database
- Re-apply missing patches
## Security Best Practices
1. **Use Strong Passwords**: Never use default or weak passwords
2. **Limit Network Access**: Use firewall rules to restrict database access
3. **Don't Expose PostgreSQL Publicly**: Only allow connections from Erupe server
4. **Use SSL/TLS**: Enable SSL for production databases
5. **Regular Backups**: Automate daily backups
6. **Separate Users**: Don't use `postgres` superuser for Erupe
## Performance Tuning
For larger servers, optimize PostgreSQL:
### Connection Pooling
Consider using PgBouncer for connection pooling:
```bash
sudo apt install pgbouncer
```
### PostgreSQL Configuration
Edit `/etc/postgresql/13/main/postgresql.conf`:
```conf
# Increase shared buffers (25% of RAM)
shared_buffers = 2GB
# Increase work memory
work_mem = 16MB
# Increase maintenance work memory
maintenance_work_mem = 512MB
# Enable query logging (development)
log_statement = 'all'
log_duration = on
```
Restart PostgreSQL:
```bash
sudo systemctl restart postgresql
```
## Related Documentation
- [Basic Settings](basic-settings.md) - Basic server configuration
- [Development Mode](development-mode.md) - CleanDB option
- [Server Configuration](server-configuration.md) - Server setup
- [CLAUDE.md](../CLAUDE.md#database-operations) - Database operations guide