Deployment Options
Railway
One-click deployment with automatic scaling and managed infrastructure.Best for: Quick setup, minimal DevOps experience
Docker
Run locally or on any server with Docker Compose.Best for: Development, small deployments, full control
Kubernetes
Production-grade deployment with Helm charts.Best for: Large organizations, high availability requirements
Railway (One-Click Deployment)
Railway provides the fastest path to a running PERSCOM instance. It handles infrastructure, databases, and scaling automatically.Deploy To Railway
Click the button below to deploy PERSCOM to Railway:What Railway Provisions
Railway automatically creates and configures:- Laravel Application — The main PERSCOM web application
- Queue Worker — Background job processing with Horizon
- Scheduler — Automated tasks and cron jobs
- MySQL Database — Persistent data storage
- Redis Cache — Session and cache storage
Deployment Steps
- Click the Deploy on Railway button above.
- Sign in to Railway (or create an account).
- Authorize Railway to access the repository.
- Wait for the build to complete (approximately 5-10 minutes).
- Access your PERSCOM instance at the provided URL.
Railway Pricing
Railway offers usage-based pricing:- Hobby Plan — $5/month, suitable for small organizations
- Pro Plan — $20/month, includes team features and priority support
Docker Compose (Local/Self-Hosted)
Docker Compose is ideal for local development or deploying to a single server.Prerequisites
- Docker Desktop installed
- Git installed
- At least 4GB of available RAM
Quick Start
-
Clone the repository:
-
Copy the environment file:
-
Start the containers:
-
Run the setup command:
-
Access PERSCOM at
http://localhost:8080
Services
Docker Compose starts the following services:| Service | Description | Port |
|---|---|---|
perscom | Main web application | 8080 |
mysql | MySQL 8.4 database | 3306 |
redis | Redis cache | 6379 |
horizon | Queue worker | — |
scheduler | Task scheduler | — |
Configuration
Edit your.env file to customize the deployment:
Common Commands
Production Considerations
For production Docker deployments:-
Use the production target:
Modify
compose.yamlto use theproductiontarget instead ofdevelopment: - Set secure passwords for MySQL and Redis.
- Configure a reverse proxy (nginx, Traefik, or Caddy) for SSL termination.
- Enable backups for the MySQL volume.
-
Set
APP_DEBUG=falseandAPP_ENV=production.
Kubernetes (Helm Charts)
For production environments requiring high availability and scalability, deploy PERSCOM to Kubernetes using Helm charts.Prerequisites
- Kubernetes cluster (1.24+)
- Helm (3.0+)
kubectlconfigured for your cluster- Persistent volume provisioner (for MySQL and Redis)
Add The Helm Repository
Install PERSCOM
Configuration Values
Create avalues.yaml file for custom configuration:
Scaling
Scale the web application horizontally:Upgrading
Environment Variables
Key environment variables for all deployment methods:Required
| Variable | Description |
|---|---|
APP_KEY | Application encryption key (auto-generated during setup) |
APP_URL | Public URL of your PERSCOM instance |
DB_HOST | Database hostname |
DB_DATABASE | Database name |
DB_USERNAME | Database username |
DB_PASSWORD | Database password |
Optional Integrations
| Variable | Description |
|---|---|
MAIL_MAILER | Email driver (smtp, ses, mailgun, etc.) |
DISCORD_BOT_TOKEN | Discord bot token for notifications |
TWILIO_ACCOUNT_SID | Twilio account for SMS notifications |
PUSHER_APP_KEY | Pusher credentials for real-time updates |
STRIPE_KEY | Stripe API key for billing (if applicable) |
Security Best Practices
- Generate strong secrets — Use unique, random values for
APP_KEY, database passwords, and API keys - Enable HTTPS — Always use SSL/TLS in production
- Rotate credentials — Regularly update passwords and API keys
- Restrict database access — Only allow connections from application servers
- Enable backups — Configure automated database backups
- Monitor logs — Set up log aggregation and alerting
- Keep updated — Regularly update PERSCOM and dependencies
Troubleshooting
Application Won’t Start
- Check logs:
docker compose logs perscomorkubectl logs -n perscom - Verify database connectivity
- Ensure all required environment variables are set
- Run migrations:
php artisan migrate
Database Connection Errors
- Verify
DB_HOST,DB_DATABASE,DB_USERNAME, andDB_PASSWORD - Ensure the database service is running
- Check network connectivity between services
Queue Jobs Not Processing
- Verify Redis is running and accessible
- Check Horizon status:
php artisan horizon:status - Review Horizon logs for errors
Permission Errors
- Ensure
storage/andbootstrap/cache/directories are writable - For Docker, verify volume permissions match the container user