Installation Guide
This guide covers comprehensive installation and configuration for both development and production environments of the SWL Library Management System.For a quick development setup, see the Quick Start Guide. This guide focuses on production-ready installations.
System Requirements
Minimum Requirements
Python
Python 3.8 or higherVerify:
python --versionMemory
512 MB RAM minimum1 GB+ recommended for production
Storage
100 MB for applicationAdditional space for database growth
Operating System
Linux, macOS, or WindowsLinux recommended for production
Production Requirements
For production deployments, you’ll also need:- PostgreSQL 12+ (recommended) or SQLite 3.x
- Web server: Nginx or Apache for reverse proxy
- WSGI server: Gunicorn (Linux/macOS) or Waitress (Windows)
- SSL certificate for HTTPS (Let’s Encrypt recommended)
- Process manager: systemd or supervisor
Installation Steps
Create Virtual Environment
Always use a virtual environment to isolate dependencies:Verify activation:
Install Python Packages
Install all required dependencies from This installs 30+ packages including:Core Framework:
requirements.txt:- Flask 3.1.3 - Web framework
- Werkzeug 3.1.6 - WSGI utilities
- Jinja2 3.1.6 - Template engine
- SQLAlchemy 2.0.47 - ORM
- Flask-SQLAlchemy 3.1.1 - Flask integration
- Flask-Migrate 4.1.0 - Database migrations
- alembic 1.18.4 - Migration tool
- Flask-Login 0.6.3 - Session management
- Flask-WTF 1.2.2 - Form handling
- WTForms 3.2.1 - Form validation
- Flask-APScheduler 1.13.1 - Cron jobs
- APScheduler 3.11.2 - Task scheduler
- pandas 3.0.1 - Excel import/export
- openpyxl 3.1.5 - Excel file handling
- numpy 2.4.2 - Numerical operations
Database Setup
Option 1: SQLite (Development)
SQLite is perfect for development and small deployments (< 100 concurrent users). It requires no separate database server.
config.py:10-11:
instance/app.db on first run.
Initialization:
- Create
instance/app.db - Initialize all tables
- Create the default admin account
- Seed sample inventory
Option 2: PostgreSQL (Production)
Database Migrations (Advanced)
For production deployments, use Flask-Migrate for schema changes:migrations/versions/ and tracked in version control.
Configuration Deep Dive
Theconfig.py file contains all application settings:
Security Configuration
config.py
Database Configuration
config.py
Scheduler Configuration
config.py
Business Logic Configuration
config.py
.env
Logging Configuration
config.py
logs/library.log with rotation (from app/__init__.py:49):
Production Deployment
Using Gunicorn (Linux/macOS)
Run Gunicorn
-w 4: 4 worker processes (adjust based on CPU cores)-b 0.0.0.0:5000: Bind to all interfaces on port 5000wsgi:app: Importappfromwsgi.py
Using Waitress (Windows)
serve.py:
serve.py
Nginx Reverse Proxy
Create/etc/nginx/sites-available/swl:
SSL with Let’s Encrypt
Deployment Checklist
Security Hardening
Security Hardening
- Set strong
SECRET_KEYvia environment variable - Change default admin password (
1000000000/admin123) - Use PostgreSQL instead of SQLite
- Enable HTTPS with valid SSL certificate
- Set
FLASK_DEBUG=0in production - Configure firewall (allow only 80/443)
- Run application as non-root user (
www-data) - Set proper file permissions (
chmod 600 .env) - Disable directory listing in web server
- Implement rate limiting (Flask-Limiter)
Performance Optimization
Performance Optimization
- Use PostgreSQL for production
- Configure Gunicorn with appropriate workers
- Enable Nginx gzip compression
- Set up static file caching
- Configure database connection pooling
- Add database indexes for frequent queries
- Monitor application logs for slow queries
- Set up log rotation for disk space
Backup Strategy
Backup Strategy
- Daily automated database backups
- Test restore procedures regularly
- Back up
.envfile (securely) - Version control for code (Git)
- Off-site backup storage
- Document backup/restore procedures
Monitoring & Logging
Monitoring & Logging
- Configure log rotation (done automatically)
- Set up log aggregation (Sentry, Papertrail)
- Monitor disk space for database growth
- Set up uptime monitoring (UptimeRobot)
- Configure error notifications
- Monitor scheduled task execution
- Track application metrics (users, loans, etc.)
Troubleshooting
Common Installation Issues
pip install fails with compilation errors
pip install fails with compilation errors
Problem: Some packages require compilation (psycopg2, numpy)Solution: Install system development tools:Or use binary wheels:
Database connection errors
Database connection errors
PostgreSQL connection refused:
- Check PostgreSQL is running:
-
Verify connection settings in
DATABASE_URL -
Check PostgreSQL listens on correct interface (
/etc/postgresql/.../postgresql.conf):
- Verify
pg_hba.confallows connections:
- Test connection:
Permission denied on instance/ directory
Permission denied on instance/ directory
Problem: Can’t write to
instance/app.dbSolution: Ensure proper permissions:Scheduled tasks not running
Scheduled tasks not running
Problem: Overdue loan checks don’t executeSolution:
- Verify scheduler is enabled (
app/__init__.py:28):
- Check logs for scheduler errors:
-
Ensure timezone is correct in
config.py - Test manually:
Static files not loading
Static files not loading
Problem: CSS/JS files return 404Solution:
-
Verify static directory exists:
app/static/ - Check Nginx configuration serves static files
- Ensure correct permissions:
Database Issues
Reset database (development only):Next Steps
Configuration Guide
Detailed configuration options and customization
User Management
Creating users, roles, and permissions
Inventory Setup
Adding catalog items and equipment
API Reference
Explore models, services, and routes
Getting Help
If you encounter issues not covered here:- Check the application logs:
logs/library.log - Review error messages carefully
- Search existing GitHub issues
- Create a new issue with:
- Python version
- Operating system
- Full error traceback
- Steps to reproduce
For production support and custom deployments, consider professional services or community forums.