# Tom's Java Jive - PHP/MySQL Deployment Guide ## cPanel FTP Deployment Instructions This guide covers deploying Tom's Java Jive to a cPanel shared hosting environment with FTP access only (no SSH/root). ### Requirements - PHP 8.4+ - MySQL 8.0+ - FTP Client (FileZilla, Cyberduck, etc.) - cPanel access for database creation --- ## Step 1: Create MySQL Database in cPanel 1. Log into your cPanel dashboard 2. Navigate to **MySQL® Databases** 3. Create a new database: - Database name: `tomsjavajive` (or your preferred name) - Note the full database name (usually `cpaneluser_tomsjavajive`) 4. Create a database user: - Username: (your choice) - Password: (strong password) 5. Add user to database: - Select the user and database - Grant **ALL PRIVILEGES** 6. Note down your credentials: - Database host: `localhost` (usually) - Database name: (full name from step 3) - Username: (full username from step 4) - Password: (from step 4) --- ## Step 2: Configure Application Settings ### Edit `config/database.php` ```php define('DB_HOST', 'localhost'); define('DB_NAME', 'cpaneluser_tomsjavajive'); // Your full database name define('DB_USER', 'cpaneluser_dbuser'); // Your full database username define('DB_PASS', 'your_secure_password'); // Your database password ``` ### Edit `config/config.php` ```php define('SITE_NAME', "Tom's Java Jive"); define('SITE_URL', 'https://yourdomain.com'); // Your actual domain define('SITE_EMAIL', 'support@yourdomain.com'); // Set to 'production' for live site define('ENVIRONMENT', 'production'); define('DEBUG_MODE', false); // Stripe Keys (get from https://dashboard.stripe.com/apikeys) define('STRIPE_SECRET_KEY', 'sk_live_xxxx'); // Use sk_test_ for testing define('STRIPE_PUBLISHABLE_KEY', 'pk_live_xxxx'); define('STRIPE_WEBHOOK_SECRET', 'whsec_xxxx'); // SendGrid (get from https://app.sendgrid.com/settings/api_keys) define('SENDGRID_API_KEY', 'SG.xxxx'); define('SENDER_EMAIL', 'noreply@yourdomain.com'); // Twilio (optional - get from https://www.twilio.com/console) define('TWILIO_SID', ''); define('TWILIO_AUTH_TOKEN', ''); define('TWILIO_PHONE', ''); ``` --- ## Step 3: Upload Files via FTP 1. Connect to your server using FTP: - Host: Your domain or ftp.yourdomain.com - Port: 21 (or 22 for SFTP) - Username: Your cPanel username - Password: Your cPanel password 2. Navigate to `public_html` (or your web root) 3. Upload ALL files from the `tomsjavajive-php` folder: ``` /public_html/ ├── admin/ ├── api/ ├── assets/ ├── account/ ├── config/ ├── docs/ ├── includes/ ├── install/ ├── pages/ ├── index.php ├── shop.php ├── product.php ├── cart.php ├── checkout.php ├── payment.php ├── login.php ├── register.php ├── logout.php └── ... (other files) ``` 4. Set file permissions (via FTP client or cPanel File Manager): - All `.php` files: 644 - All directories: 755 - `uploads/` directory: 755 (create if not exists) - `config/` directory: 755 --- ## Step 4: Import Database Schema ### Option A: Using phpMyAdmin (Recommended) 1. In cPanel, open **phpMyAdmin** 2. Select your database from the left sidebar 3. Click the **Import** tab 4. Click **Choose File** and select `install/schema.sql` 5. Click **Go** to execute ### Option B: Using MySQL command in cPanel Terminal (if available) ```bash mysql -u cpaneluser_dbuser -p cpaneluser_tomsjavajive < install/schema.sql ``` --- ## Step 5: Create First Admin User After importing the schema, create your first admin user via phpMyAdmin: 1. Open phpMyAdmin 2. Select your database 3. Click the **SQL** tab 4. Run this query (replace with your details): ```sql INSERT INTO admin_users (user_id, email, password_hash, name, is_admin, is_master, permissions) VALUES ( 'admin_001', 'admin@yourdomain.com', '$2y$12$xxxxx', -- Generate bcrypt hash (see below) 'Admin', 1, 1, '{"dashboard":true,"pos":true,"products":true,"orders":true,"customers":true,"settings_payment":true,"settings_shipping":true,"settings_email":true,"admin_management":true}' ); ``` **To generate password hash:** Create a temporary PHP file called `generate_hash.php`: ```php 12]); ?> ``` Upload it, visit it in browser, copy the hash, then DELETE the file. --- ## Step 6: Configure Stripe Webhook (Optional but Recommended) 1. Go to [Stripe Dashboard > Webhooks](https://dashboard.stripe.com/webhooks) 2. Click **Add endpoint** 3. Set endpoint URL: `https://yourdomain.com/api/webhook.php` 4. Select events: - `payment_intent.succeeded` - `payment_intent.payment_failed` - `charge.refunded` 5. Copy the **Signing secret** to your `config.php` --- ## Step 7: Test Your Installation 1. Visit `https://yourdomain.com` - Should show storefront 2. Visit `https://yourdomain.com/admin/` - Should show admin login 3. Login with your admin credentials 4. Add a test product 5. Test the checkout flow --- ## Data Migration from MongoDB If you have existing data in MongoDB that needs to be migrated: ### Prerequisites - PHP with MongoDB extension (`pecl install mongodb`) - Access to your MongoDB server ### Running Migration The migration script is located at `install/migrate_from_mongodb.php`. Since cPanel typically doesn't have MongoDB extension, you have two options: **Option A: Export/Import Manually** 1. Export MongoDB collections to JSON using `mongoexport` 2. Convert and import to MySQL using phpMyAdmin or custom scripts **Option B: Run Migration Locally** 1. Install PHP MongoDB extension locally 2. Connect to both databases 3. Run: `php migrate_from_mongodb.php [mongodb_url] [mongodb_dbname]` --- ## Security Checklist Before going live: - [ ] Change default admin password - [ ] Update `SITE_URL` in config.php - [ ] Set `ENVIRONMENT` to 'production' - [ ] Set `DEBUG_MODE` to false - [ ] Configure real Stripe keys (not test keys) - [ ] Configure SendGrid for emails - [ ] Delete `install/` folder after setup - [ ] Set up SSL certificate (HTTPS) - [ ] Enable Stripe webhook - [ ] Test payment flow end-to-end --- ## Troubleshooting ### "Database connection failed" - Check database credentials in `config/database.php` - Verify database exists in cPanel - Ensure user has privileges on the database ### "500 Internal Server Error" - Check `.htaccess` file exists - View error logs in cPanel > Error Log - Temporarily enable `DEBUG_MODE` in config.php ### "Blank page" - Enable PHP error display temporarily - Check PHP version (requires 8.4+) - View Apache/PHP error logs ### "Session errors" - Ensure `session.save_path` is writable - Check `sessions/` folder permissions ### "Payment not working" - Verify Stripe keys are correct - Check browser console for JS errors - Verify webhook endpoint is accessible --- ## File Structure Reference ``` tomsjavajive-php/ ├── admin/ # Admin panel │ ├── assets/ # Admin CSS/JS │ ├── includes/ # Admin header/footer │ ├── index.php # Dashboard │ ├── products.php # Product management │ ├── orders.php # Order management │ └── ... ├── api/ # API endpoints │ ├── cart.php │ ├── products.php │ ├── orders.php │ └── webhook.php # Stripe webhook ├── assets/ # Public assets │ ├── css/ │ ├── js/ │ └── images/ ├── account/ # Customer account pages ├── config/ # Configuration files │ ├── config.php # Main config │ └── database.php # DB credentials ├── includes/ # Shared includes │ ├── auth.php │ ├── db.php │ ├── functions.php │ ├── header.php │ └── footer.php ├── install/ # Installation files │ ├── schema.sql # Database schema │ └── migrate_from_mongodb.php ├── index.php # Homepage ├── shop.php # Shop page ├── product.php # Product detail ├── cart.php # Shopping cart ├── checkout.php # Checkout └── payment.php # Stripe payment ``` --- ## Support For issues with this deployment: 1. Check the troubleshooting section above 2. Review error logs in cPanel 3. Verify all configuration values are correct --- *Last updated: December 2025* *PHP Version: 8.4.19 | MySQL Version: 8.0*