232 lines
4.8 KiB
Markdown
232 lines
4.8 KiB
Markdown
|
|
# SQLite Setup Guide
|
||
|
|
|
||
|
|
This guide explains how to configure the application to use SQLite instead of PostgreSQL for development.
|
||
|
|
|
||
|
|
## Important Notes
|
||
|
|
|
||
|
|
⚠️ **The current authentication system requires PostgreSQL**. If you need to use SQLite, you'll need to disable auth features or use PostgreSQL for production.
|
||
|
|
|
||
|
|
## Option 1: SQLite with Disabled Auth Features
|
||
|
|
|
||
|
|
### Step 1: Modify Cargo.toml Features
|
||
|
|
|
||
|
|
Edit `server/Cargo.toml` to disable auth features:
|
||
|
|
|
||
|
|
```toml
|
||
|
|
[features]
|
||
|
|
default = ["content-db", "crypto", "email", "metrics", "examples"]
|
||
|
|
# Remove "auth" from the default features
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 2: Update Database Configuration
|
||
|
|
|
||
|
|
Create or modify `config.dev.toml`:
|
||
|
|
|
||
|
|
```toml
|
||
|
|
[database]
|
||
|
|
url = "sqlite:data/development.db"
|
||
|
|
max_connections = 1
|
||
|
|
min_connections = 1
|
||
|
|
connect_timeout = 30
|
||
|
|
idle_timeout = 600
|
||
|
|
max_lifetime = 1800
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 3: Create Database Directory
|
||
|
|
|
||
|
|
```bash
|
||
|
|
mkdir -p data
|
||
|
|
```
|
||
|
|
|
||
|
|
### Step 4: Run Without Auth Features
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo run --bin server --no-default-features --features "content-db,crypto,email,metrics"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Option 2: PostgreSQL for Development (Recommended)
|
||
|
|
|
||
|
|
### Using Docker
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Start PostgreSQL in Docker
|
||
|
|
docker run -d \
|
||
|
|
--name rustelo-postgres \
|
||
|
|
-e POSTGRES_DB=rustelo_dev \
|
||
|
|
-e POSTGRES_USER=postgres \
|
||
|
|
-e POSTGRES_PASSWORD=password \
|
||
|
|
-p 5432:5432 \
|
||
|
|
postgres:15
|
||
|
|
|
||
|
|
# Wait for PostgreSQL to start
|
||
|
|
sleep 5
|
||
|
|
|
||
|
|
# Test connection
|
||
|
|
psql -h localhost -U postgres -d rustelo_dev -c "SELECT 1;"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Using Homebrew (macOS)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install PostgreSQL
|
||
|
|
brew install postgresql@15
|
||
|
|
|
||
|
|
# Start PostgreSQL service
|
||
|
|
brew services start postgresql@15
|
||
|
|
|
||
|
|
# Create database
|
||
|
|
createdb rustelo_dev
|
||
|
|
|
||
|
|
# Test connection
|
||
|
|
psql rustelo_dev -c "SELECT 1;"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Using Package Manager (Linux)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt update
|
||
|
|
sudo apt install postgresql postgresql-contrib
|
||
|
|
|
||
|
|
# CentOS/RHEL
|
||
|
|
sudo yum install postgresql-server postgresql-contrib
|
||
|
|
|
||
|
|
# Start service
|
||
|
|
sudo systemctl start postgresql
|
||
|
|
sudo systemctl enable postgresql
|
||
|
|
|
||
|
|
# Create database
|
||
|
|
sudo -u postgres createdb rustelo_dev
|
||
|
|
|
||
|
|
# Test connection
|
||
|
|
sudo -u postgres psql rustelo_dev -c "SELECT 1;"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Option 3: Cloud PostgreSQL
|
||
|
|
|
||
|
|
### Supabase (Free Tier)
|
||
|
|
|
||
|
|
1. Go to [supabase.com](https://supabase.com)
|
||
|
|
2. Create a new project
|
||
|
|
3. Copy the connection string
|
||
|
|
4. Update `config.dev.toml`:
|
||
|
|
|
||
|
|
```toml
|
||
|
|
[database]
|
||
|
|
url = "postgresql://postgres.xxx:[PASSWORD]@xxx.supabase.co:5432/postgres"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Railway (Free Tier)
|
||
|
|
|
||
|
|
1. Go to [railway.app](https://railway.app)
|
||
|
|
2. Create a new PostgreSQL database
|
||
|
|
3. Copy the connection string
|
||
|
|
4. Update your configuration
|
||
|
|
|
||
|
|
## Testing SQLite Configuration
|
||
|
|
|
||
|
|
If you want to test SQLite-only features:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create a test configuration
|
||
|
|
cat > config.sqlite.toml << 'EOF'
|
||
|
|
root_path = "."
|
||
|
|
|
||
|
|
[server]
|
||
|
|
protocol = "http"
|
||
|
|
host = "127.0.0.1"
|
||
|
|
port = 3030
|
||
|
|
environment = "development"
|
||
|
|
log_level = "debug"
|
||
|
|
|
||
|
|
[database]
|
||
|
|
url = "sqlite:data/test.db"
|
||
|
|
max_connections = 1
|
||
|
|
min_connections = 1
|
||
|
|
connect_timeout = 30
|
||
|
|
idle_timeout = 600
|
||
|
|
max_lifetime = 1800
|
||
|
|
|
||
|
|
[app]
|
||
|
|
name = "My Rust App"
|
||
|
|
version = "0.1.0"
|
||
|
|
debug = true
|
||
|
|
enable_metrics = false
|
||
|
|
enable_health_check = true
|
||
|
|
enable_compression = true
|
||
|
|
max_request_size = 10485760
|
||
|
|
|
||
|
|
[logging]
|
||
|
|
format = "pretty"
|
||
|
|
level = "debug"
|
||
|
|
file_path = "logs/app.log"
|
||
|
|
max_file_size = 10485760
|
||
|
|
max_files = 5
|
||
|
|
enable_console = true
|
||
|
|
enable_file = false
|
||
|
|
EOF
|
||
|
|
|
||
|
|
# Test with SQLite config
|
||
|
|
CONFIG_FILE=config.sqlite.toml cargo run --bin server --no-default-features --features "content-db"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Migration Notes
|
||
|
|
|
||
|
|
### From PostgreSQL to SQLite
|
||
|
|
|
||
|
|
1. Export your PostgreSQL data
|
||
|
|
2. Convert schema to SQLite-compatible format
|
||
|
|
3. Update connection strings
|
||
|
|
4. Test thoroughly
|
||
|
|
|
||
|
|
### From SQLite to PostgreSQL
|
||
|
|
|
||
|
|
1. Use tools like `sqlite3` to dump data
|
||
|
|
2. Convert to PostgreSQL format
|
||
|
|
3. Update connection strings
|
||
|
|
4. Run migrations
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Common Issues
|
||
|
|
|
||
|
|
1. **"Failed to connect to database"**
|
||
|
|
- Check if PostgreSQL is running
|
||
|
|
- Verify connection string
|
||
|
|
- Check firewall settings
|
||
|
|
|
||
|
|
2. **"Auth features require PostgreSQL"**
|
||
|
|
- Use PostgreSQL or disable auth features
|
||
|
|
- See Option 1 above
|
||
|
|
|
||
|
|
3. **"Directory not found"** (SQLite)
|
||
|
|
- Create the data directory: `mkdir -p data`
|
||
|
|
- Check file permissions
|
||
|
|
|
||
|
|
### Debug Commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check PostgreSQL status
|
||
|
|
pg_isready -h localhost -p 5432
|
||
|
|
|
||
|
|
# Test SQLite file creation
|
||
|
|
sqlite3 data/test.db "CREATE TABLE test (id INTEGER); DROP TABLE test;"
|
||
|
|
|
||
|
|
# Check configuration loading
|
||
|
|
RUST_LOG=debug cargo run --bin test_config
|
||
|
|
```
|
||
|
|
|
||
|
|
## Performance Considerations
|
||
|
|
|
||
|
|
- **SQLite**: Best for development, single-user apps
|
||
|
|
- **PostgreSQL**: Better for production, multi-user apps
|
||
|
|
- **Connection pooling**: PostgreSQL handles concurrent connections better
|
||
|
|
|
||
|
|
## Security Notes
|
||
|
|
|
||
|
|
- Change default passwords in production
|
||
|
|
- Use environment variables for sensitive data
|
||
|
|
- Enable SSL/TLS for production databases
|
||
|
|
- Regular backups are essential
|
||
|
|
|
||
|
|
For more help, see the main README.md or create an issue in the repository.
|