Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
171
docs/deployment/postgresql.md
Normal file
171
docs/deployment/postgresql.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# PostgreSQL Setup
|
||||
|
||||
This guide covers optional PostgreSQL database configuration.
|
||||
|
||||
## When to Use PostgreSQL
|
||||
|
||||
PostgreSQL is recommended for:
|
||||
|
||||
- Large datasets (millions of trades)
|
||||
- Multiple users
|
||||
- Advanced queries
|
||||
- Production deployments
|
||||
- High-performance requirements
|
||||
|
||||
## Installation
|
||||
|
||||
### Install PostgreSQL
|
||||
|
||||
**Fedora/Bluefin**:
|
||||
```bash
|
||||
sudo dnf install postgresql postgresql-server
|
||||
sudo postgresql-setup --initdb
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
**Ubuntu/Debian**:
|
||||
```bash
|
||||
sudo apt-get install postgresql postgresql-contrib
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
## Database Setup
|
||||
|
||||
### Create Database
|
||||
|
||||
```bash
|
||||
sudo -u postgres psql
|
||||
```
|
||||
|
||||
```sql
|
||||
CREATE DATABASE crypto_trader;
|
||||
CREATE USER crypto_trader_user WITH PASSWORD 'your_password';
|
||||
GRANT ALL PRIVILEGES ON DATABASE crypto_trader TO crypto_trader_user;
|
||||
\q
|
||||
```
|
||||
|
||||
### Configure Connection
|
||||
|
||||
Update `config.yaml`:
|
||||
|
||||
```yaml
|
||||
database:
|
||||
type: postgresql
|
||||
host: localhost
|
||||
port: 5432
|
||||
database: crypto_trader
|
||||
user: crypto_trader_user
|
||||
password: ${DB_PASSWORD} # Use environment variable
|
||||
```
|
||||
|
||||
### Set Environment Variable
|
||||
|
||||
```bash
|
||||
export DB_PASSWORD='your_password'
|
||||
```
|
||||
|
||||
Or add to `~/.bashrc`:
|
||||
```bash
|
||||
echo 'export DB_PASSWORD="your_password"' >> ~/.bashrc
|
||||
```
|
||||
|
||||
## Migration from SQLite
|
||||
|
||||
### Export from SQLite
|
||||
|
||||
```bash
|
||||
sqlite3 trading.db .dump > dump.sql
|
||||
```
|
||||
|
||||
### Import to PostgreSQL
|
||||
|
||||
```bash
|
||||
psql -U crypto_trader_user -d crypto_trader -f dump.sql
|
||||
```
|
||||
|
||||
## Performance Tuning
|
||||
|
||||
### PostgreSQL Configuration
|
||||
|
||||
Edit `/etc/postgresql/*/main/postgresql.conf`:
|
||||
|
||||
```ini
|
||||
shared_buffers = 256MB
|
||||
effective_cache_size = 1GB
|
||||
maintenance_work_mem = 64MB
|
||||
checkpoint_completion_target = 0.9
|
||||
wal_buffers = 16MB
|
||||
default_statistics_target = 100
|
||||
random_page_cost = 1.1
|
||||
effective_io_concurrency = 200
|
||||
work_mem = 4MB
|
||||
min_wal_size = 1GB
|
||||
max_wal_size = 4GB
|
||||
```
|
||||
|
||||
### Indexes
|
||||
|
||||
Key indexes are created automatically. For custom queries, add indexes:
|
||||
|
||||
```sql
|
||||
CREATE INDEX idx_trades_symbol_date ON trades(symbol, executed_at);
|
||||
CREATE INDEX idx_market_data_symbol_timeframe ON market_data(symbol, timeframe, timestamp);
|
||||
```
|
||||
|
||||
## Backup and Recovery
|
||||
|
||||
### Backup
|
||||
|
||||
```bash
|
||||
pg_dump -U crypto_trader_user crypto_trader > backup.sql
|
||||
```
|
||||
|
||||
### Restore
|
||||
|
||||
```bash
|
||||
psql -U crypto_trader_user crypto_trader < backup.sql
|
||||
```
|
||||
|
||||
### Automated Backups
|
||||
|
||||
Set up cron job:
|
||||
|
||||
```bash
|
||||
0 2 * * * pg_dump -U crypto_trader_user crypto_trader > /backup/crypto_trader_$(date +\%Y\%m\%d).sql
|
||||
```
|
||||
|
||||
## Security
|
||||
|
||||
### Connection Security
|
||||
|
||||
- Use strong passwords
|
||||
- Restrict network access
|
||||
- Use SSL connections for remote access
|
||||
- Regular security updates
|
||||
|
||||
### User Permissions
|
||||
|
||||
- Use dedicated database user
|
||||
- Grant only necessary permissions
|
||||
- Don't use superuser for application
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Connection refused?**
|
||||
- Check PostgreSQL is running: `sudo systemctl status postgresql`
|
||||
- Verify connection settings
|
||||
- Check firewall rules
|
||||
|
||||
**Authentication failed?**
|
||||
- Verify username and password
|
||||
- Check `pg_hba.conf` configuration
|
||||
- Review PostgreSQL logs
|
||||
|
||||
**Performance issues?**
|
||||
- Check PostgreSQL configuration
|
||||
- Review query performance
|
||||
- Add appropriate indexes
|
||||
- Monitor resource usage
|
||||
|
||||
Reference in New Issue
Block a user