Deploy on Shared Hosting
Jambo can run on shared hosting if your host provides PHP 8.4+ with the required extensions and shell access via SSH.
Requirements
Before starting, verify your host supports:
- PHP 8.4+ with
ctype,iconv,sodium,pdo_mysqlextensions - MySQL 8+ or PostgreSQL 14+
- SSH access (for Composer and migrations)
- Node.js 18+ (for building frontend assets — run locally then upload
public/build/)
Deployment steps
1. Prepare locally
On your local machine, install dependencies and build frontend assets:
composer install --no-dev --optimize-autoloadernpm ci && npm run build2. Upload files
Upload the project files to your hosting public_html parent directory (not inside public_html). Your folder structure should be:
~/├── jambo/ ← project files (all except public/)│ ├── bin/│ ├── config/│ ├── src/│ ├── var/│ └── vendor/└── public_html/ ← only the contents of public/ ├── index.php ├── build/ └── uploads/3. Point public_html to Jambo’s public folder
Copy the contents of public/ into your public_html folder. Then edit public_html/index.php to adjust the path to the Symfony kernel:
// Change this line to point to your project rootrequire_once dirname(__DIR__).'/jambo/vendor/autoload_runtime.php';4. Configure .env
Create .env in the project root (not in public_html):
APP_ENV=prodAPP_SECRET=your-secret-keyDATABASE_URL="mysql://user:pass@localhost/dbname?serverVersion=8.0"5. Run migrations via SSH
ssh your-hostcd ~/jambophp bin/console doctrine:migrations:migratephp bin/console app:setupphp bin/console cache:warmup6. Set permissions
chmod -R 755 var/chmod -R 755 public/uploads/Troubleshooting
500 error — check var/log/prod.log for details. Most common causes: wrong DATABASE_URL, missing PHP extensions, or incorrect file paths.
Blank page — set APP_DEBUG=1 temporarily to see the error, then set it back to 0.
Assets not loading — verify that public/build/ was uploaded and the paths in public/index.php are correct.