mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 23:54:33 +01:00
410 lines
8.0 KiB
Markdown
410 lines
8.0 KiB
Markdown
# 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
|