mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-24 17:11:09 -05:00
Add secret management guide, client-side performance monitoring, and search accessibility enhancements
- Introduced a comprehensive Secret Management Guide detailing best practices, secret classification, development setup, production management, rotation procedures, and emergency protocols. - Implemented a client-side performance monitoring script to track various metrics including page load performance, paint metrics, layout shifts, and memory usage. - Enhanced search accessibility with keyboard navigation support for search results, ensuring compliance with WCAG standards and improving user experience.
This commit is contained in:
368
docs/SETUP_GUIDE.md
Normal file
368
docs/SETUP_GUIDE.md
Normal file
@@ -0,0 +1,368 @@
|
||||
# ThrillWiki Setup Guide
|
||||
|
||||
This guide provides comprehensive instructions for setting up the ThrillWiki development environment.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### Required Software
|
||||
|
||||
| Software | Minimum Version | Notes |
|
||||
|----------|----------------|-------|
|
||||
| Python | 3.13+ | Required for Django 5.2 |
|
||||
| PostgreSQL | 14+ | With PostGIS extension |
|
||||
| Redis | 6+ | For caching and sessions |
|
||||
| UV | Latest | Python package manager |
|
||||
|
||||
### Platform-Specific Prerequisites
|
||||
|
||||
#### macOS (with Homebrew)
|
||||
|
||||
```bash
|
||||
# Install Homebrew if not present
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
|
||||
# Install dependencies
|
||||
brew install python@3.13 postgresql@15 postgis redis gdal geos proj
|
||||
|
||||
# Start services
|
||||
brew services start postgresql@15
|
||||
brew services start redis
|
||||
|
||||
# Install UV
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
|
||||
#### Linux (Ubuntu/Debian)
|
||||
|
||||
```bash
|
||||
# Update package list
|
||||
sudo apt update
|
||||
|
||||
# Install Python 3.13
|
||||
sudo add-apt-repository ppa:deadsnakes/ppa
|
||||
sudo apt install python3.13 python3.13-venv python3.13-dev
|
||||
|
||||
# Install PostgreSQL with PostGIS
|
||||
sudo apt install postgresql-15 postgresql-15-postgis-3 postgresql-contrib
|
||||
|
||||
# Install Redis
|
||||
sudo apt install redis-server
|
||||
|
||||
# Install GDAL and GEOS for GeoDjango
|
||||
sudo apt install libgdal-dev libgeos-dev binutils libproj-dev
|
||||
|
||||
# Start services
|
||||
sudo systemctl start postgresql
|
||||
sudo systemctl start redis
|
||||
|
||||
# Install UV
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
|
||||
#### Windows (with WSL2)
|
||||
|
||||
```bash
|
||||
# Use WSL2 with Ubuntu
|
||||
wsl --install -d Ubuntu
|
||||
|
||||
# Inside WSL2, follow Linux instructions above
|
||||
```
|
||||
|
||||
## Step-by-Step Setup
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd thrillwiki
|
||||
```
|
||||
|
||||
### 2. Database Setup
|
||||
|
||||
#### Create PostgreSQL Database
|
||||
|
||||
```bash
|
||||
# Access PostgreSQL
|
||||
sudo -u postgres psql
|
||||
|
||||
# Create database and user
|
||||
CREATE USER thrillwiki WITH PASSWORD 'your-password';
|
||||
CREATE DATABASE thrillwiki OWNER thrillwiki;
|
||||
|
||||
# Enable PostGIS extension
|
||||
\c thrillwiki
|
||||
CREATE EXTENSION postgis;
|
||||
CREATE EXTENSION postgis_topology;
|
||||
|
||||
# Grant privileges
|
||||
GRANT ALL PRIVILEGES ON DATABASE thrillwiki TO thrillwiki;
|
||||
\q
|
||||
```
|
||||
|
||||
#### Verify PostGIS Installation
|
||||
|
||||
```bash
|
||||
sudo -u postgres psql -d thrillwiki -c "SELECT PostGIS_version();"
|
||||
```
|
||||
|
||||
### 3. Install Python Dependencies
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# Install dependencies with UV
|
||||
uv sync --frozen
|
||||
|
||||
# Or allow updates within version constraints
|
||||
uv sync
|
||||
```
|
||||
|
||||
### 4. Configure Environment Variables
|
||||
|
||||
```bash
|
||||
# Copy example environment file
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Edit `.env` with your settings:
|
||||
|
||||
```bash
|
||||
# Required settings
|
||||
SECRET_KEY=generate-a-secure-key-here
|
||||
DEBUG=True
|
||||
DJANGO_SETTINGS_MODULE=config.django.local
|
||||
ALLOWED_HOSTS=localhost,127.0.0.1
|
||||
|
||||
# Database
|
||||
DATABASE_URL=postgis://thrillwiki:your-password@localhost:5432/thrillwiki
|
||||
|
||||
# Redis
|
||||
REDIS_URL=redis://localhost:6379/1
|
||||
|
||||
# GeoDjango (macOS with Homebrew)
|
||||
GDAL_LIBRARY_PATH=/opt/homebrew/lib/libgdal.dylib
|
||||
GEOS_LIBRARY_PATH=/opt/homebrew/lib/libgeos_c.dylib
|
||||
```
|
||||
|
||||
Generate a secure secret key:
|
||||
|
||||
```bash
|
||||
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
|
||||
```
|
||||
|
||||
### 5. Run Database Migrations
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
uv run manage.py migrate
|
||||
```
|
||||
|
||||
### 6. Create Superuser
|
||||
|
||||
```bash
|
||||
uv run manage.py createsuperuser
|
||||
```
|
||||
|
||||
### 7. Collect Static Files (Optional for Development)
|
||||
|
||||
```bash
|
||||
uv run manage.py collectstatic --noinput
|
||||
```
|
||||
|
||||
### 8. Start Development Server
|
||||
|
||||
```bash
|
||||
uv run manage.py runserver
|
||||
```
|
||||
|
||||
The application will be available at `http://localhost:8000`.
|
||||
|
||||
## Verification
|
||||
|
||||
### Check Django Configuration
|
||||
|
||||
```bash
|
||||
uv run manage.py check
|
||||
```
|
||||
|
||||
### Validate Settings
|
||||
|
||||
```bash
|
||||
uv run manage.py validate_settings
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
uv run manage.py test
|
||||
```
|
||||
|
||||
### Access Admin Panel
|
||||
|
||||
1. Navigate to `http://localhost:8000/admin/`
|
||||
2. Login with superuser credentials
|
||||
|
||||
## Common Setup Issues
|
||||
|
||||
### Issue: PostGIS Not Found
|
||||
|
||||
**Error**: `Could not find the GDAL library`
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
# macOS
|
||||
export GDAL_LIBRARY_PATH=/opt/homebrew/lib/libgdal.dylib
|
||||
export GEOS_LIBRARY_PATH=/opt/homebrew/lib/libgeos_c.dylib
|
||||
|
||||
# Add to .env file for persistence
|
||||
```
|
||||
|
||||
### Issue: Database Connection Error
|
||||
|
||||
**Error**: `could not connect to server`
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
# Check PostgreSQL is running
|
||||
sudo systemctl status postgresql # Linux
|
||||
brew services list # macOS
|
||||
|
||||
# Check connection string
|
||||
psql $DATABASE_URL
|
||||
```
|
||||
|
||||
### Issue: Redis Connection Error
|
||||
|
||||
**Error**: `Error connecting to Redis`
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
# Check Redis is running
|
||||
redis-cli ping
|
||||
# Should return: PONG
|
||||
|
||||
# Start Redis if not running
|
||||
sudo systemctl start redis # Linux
|
||||
brew services start redis # macOS
|
||||
```
|
||||
|
||||
### Issue: Python Version Mismatch
|
||||
|
||||
**Error**: `Python 3.13+ required`
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
# Check Python version
|
||||
python --version
|
||||
|
||||
# Use specific Python version with UV
|
||||
UV_PYTHON=python3.13 uv sync
|
||||
```
|
||||
|
||||
### Issue: Migration Errors
|
||||
|
||||
**Error**: `django.db.utils.ProgrammingError`
|
||||
|
||||
**Solution**:
|
||||
```bash
|
||||
# Reset migrations (development only!)
|
||||
uv run manage.py migrate --fake-initial
|
||||
|
||||
# Or recreate database
|
||||
sudo -u postgres dropdb thrillwiki
|
||||
sudo -u postgres createdb thrillwiki -O thrillwiki
|
||||
sudo -u postgres psql -d thrillwiki -c "CREATE EXTENSION postgis;"
|
||||
uv run manage.py migrate
|
||||
```
|
||||
|
||||
## Optional Configuration
|
||||
|
||||
### Enable Debug Toolbar
|
||||
|
||||
```bash
|
||||
# Install with profiling group
|
||||
uv sync --group profiling
|
||||
|
||||
# Debug toolbar is enabled by default in local.py
|
||||
```
|
||||
|
||||
### Configure Email for Development
|
||||
|
||||
```python
|
||||
# Uses console backend by default
|
||||
# Emails are printed to console in development
|
||||
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
|
||||
```
|
||||
|
||||
### Load Sample Data
|
||||
|
||||
```bash
|
||||
# If sample data fixtures exist
|
||||
uv run manage.py loaddata sample_parks.json
|
||||
uv run manage.py loaddata sample_rides.json
|
||||
```
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Running the Server
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
uv run manage.py runserver
|
||||
```
|
||||
|
||||
### Running with Celery (for background tasks)
|
||||
|
||||
```bash
|
||||
# Terminal 1: Django server
|
||||
uv run manage.py runserver
|
||||
|
||||
# Terminal 2: Celery worker
|
||||
uv run celery -A config.celery worker -l info
|
||||
|
||||
# Terminal 3: Celery beat (for scheduled tasks)
|
||||
uv run celery -A config.celery beat -l info
|
||||
```
|
||||
|
||||
### Code Quality Commands
|
||||
|
||||
```bash
|
||||
# Format code
|
||||
uv run black .
|
||||
uv run isort .
|
||||
|
||||
# Lint code
|
||||
uv run ruff check .
|
||||
uv run flake8 .
|
||||
|
||||
# Type checking
|
||||
uv run pyright
|
||||
```
|
||||
|
||||
### Making Changes
|
||||
|
||||
```bash
|
||||
# Create migrations after model changes
|
||||
uv run manage.py makemigrations
|
||||
|
||||
# Apply migrations
|
||||
uv run manage.py migrate
|
||||
|
||||
# Run tests
|
||||
uv run manage.py test
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After completing setup:
|
||||
|
||||
1. **Explore the Admin Panel**: `/admin/`
|
||||
2. **View API Documentation**: `/api/docs/`
|
||||
3. **Read HTMX Patterns**: [htmx-patterns.md](./htmx-patterns.md)
|
||||
4. **Review Architecture**: [Architecture Decisions](./architecture/)
|
||||
|
||||
## Getting Help
|
||||
|
||||
- Check [Common Issues](#common-setup-issues) above
|
||||
- Review [Environment Variables](./configuration/environment-variables.md)
|
||||
- See [Backend README](../backend/README.md) for development details
|
||||
Reference in New Issue
Block a user