# Epic Travel & Expeditions - cPanel Deployment Guide ## Overview This package contains the Epic Travel & Expeditions website configured for cPanel hosting with MySQL database. ## Requirements - cPanel hosting with: - Python 3.8+ support - MySQL 5.7+ or MariaDB 10.3+ - Apache with mod_rewrite enabled - SSL certificate (recommended) - At least 500MB disk space - PHP 7.4+ (optional, for phpMyAdmin) ## Package Contents ``` epic-travel-cpanel/ ├── backend/ # Python FastAPI backend │ ├── routes/ # API endpoints │ ├── models/ # Database models │ ├── server.py # Main application │ ├── requirements.txt # Python dependencies │ └── .env.example # Environment template ├── frontend/ # React frontend (production build) │ ├── build/ # Compiled React app │ └── .htaccess # Apache configuration ├── database_schema.sql # MySQL database schema ├── setup_admin.py # Admin user setup script └── INSTALLATION.md # This file ``` ## Installation Steps ### Step 1: Database Setup 1. **Create MySQL Database** - Log into cPanel → MySQL Databases - Create new database: `username_epic_travel` - Create database user with strong password - Grant ALL PRIVILEGES to the user 2. **Import Database Schema** - Go to phpMyAdmin - Select your database - Click "Import" tab - Upload `database_schema.sql` - Click "Go" 3. **Generate Admin Password Hash** ```bash cd backend python3 setup_admin.py ``` - Copy the generated hash - Update the admin_users INSERT statement in the SQL file if needed ### Step 2: Backend Setup 1. **Upload Backend Files** - Upload `backend/` folder to your cPanel account - Recommended location: `~/epic-travel-api/` 2. **Install Python Dependencies** ```bash cd ~/epic-travel-api python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` 3. **Configure Environment** - Copy `.env.example` to `.env` - Edit `.env` with your settings: ```env MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_DATABASE=username_epic_travel MYSQL_USER=username_dbuser MYSQL_PASSWORD=your_secure_password JWT_SECRET_KEY=your_random_256bit_key ADMIN_DEFAULT_PASSWORD=Joker1974!!! CORS_ORIGINS=https://yourdomain.com ``` 4. **Setup Python Application** - In cPanel → Setup Python App - Python version: 3.8+ - Application root: `/home/username/epic-travel-api` - Application URL: `/api` - Application startup file: `server.py` - Application Entry point: `app` - Click "Create" 5. **Install Dependencies via cPanel** - In the Python App configuration - Click "Run pip install" button - Or run: `pip install -r requirements.txt` ### Step 3: Frontend Setup 1. **Upload Frontend Build** - Upload contents of `frontend/build/` to your public_html - Or to a subdomain folder 2. **Configure .htaccess** - Ensure `.htaccess` is present in the root - Modify if your API is on a different path 3. **Update API URL** - In `public_html/static/js/main.*.js` - Or set via environment variable during build ### Step 4: SSL Configuration 1. **Enable SSL** - In cPanel → SSL/TLS - Install Let's Encrypt certificate (free) - Enable "Force HTTPS Redirect" 2. **Update CORS** - Edit backend `.env` - Set: `CORS_ORIGINS=https://yourdomain.com` - Restart Python application ### Step 5: Testing 1. **Test Backend API** ```bash curl https://yourdomain.com/api ``` Should return: `{"message": "Epic Travel API is running", "status": "healthy"}` 2. **Test Frontend** - Visit: https://yourdomain.com - Should see Epic Travel homepage 3. **Test Admin Login** - Visit: https://yourdomain.com/admin - Login with: - Email: admin@epictravel.com - Password: Joker1974!!! ## Configuration Files ### Backend .env ```env # Database Configuration MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_DATABASE=username_epic_travel MYSQL_USER=username_dbuser MYSQL_PASSWORD=your_password # Security JWT_SECRET_KEY=generate_with_openssl_rand_hex_32 ADMIN_DEFAULT_PASSWORD=Joker1974!!! # CORS CORS_ORIGINS=https://yourdomain.com ``` ### Frontend .htaccess ```apache RewriteEngine On RewriteBase / # API Proxy RewriteCond %{REQUEST_URI} ^/api/(.*)$ RewriteRule ^api/(.*)$ https://yourdomain.com/api/$1 [P,L] # React Router RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.html [L] ``` ## Troubleshooting ### Backend not starting - Check Python version: `python3 --version` - Check error logs in cPanel - Verify MySQL connection details - Ensure all dependencies installed ### Frontend shows blank page - Check browser console for errors - Verify API URL in frontend build - Check .htaccess file exists - Clear browser cache ### Database connection fails - Verify MySQL credentials - Check if database user has proper privileges - Ensure MySQL server is running - Check host (use 'localhost' not '127.0.0.1') ### CORS errors - Update CORS_ORIGINS in backend .env - Restart Python application - Check SSL configuration - Ensure frontend and backend use same protocol (HTTPS) ## Performance Optimization 1. **Enable Gzip Compression** - Add to .htaccess: ```apache AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/json ``` 2. **Enable Browser Caching** - Add to .htaccess: ```apache ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ``` 3. **MySQL Optimization** - Add indexes to frequently queried columns - Use connection pooling - Enable query caching ## Maintenance ### Updating the Application 1. Backup database: Export via phpMyAdmin 2. Backup files: Download via FTP 3. Upload new files 4. Run any database migrations 5. Restart Python application ### Database Backup ```bash mysqldump -u username -p username_epic_travel > backup_$(date +%Y%m%d).sql ``` ### Monitoring - Check error logs in cPanel - Monitor disk space usage - Review database size - Check Python app status ## Support For issues specific to this application: - Check logs in cPanel - Verify all configuration settings - Ensure MySQL connection is working - Test API endpoints individually ## Security Checklist - [ ] Strong MySQL password set - [ ] JWT secret key generated and set - [ ] Admin password changed from default - [ ] SSL certificate installed - [ ] HTTPS redirect enabled - [ ] CORS properly configured - [ ] File permissions set correctly (644 for files, 755 for directories) - [ ] .env file protected (not web-accessible) ## Credits Epic Travel & Expeditions Contact: advisor@epictravelexpeditions.com Phone: +1 (817) 266-2022