1
System Requirements
| Component | Minimum | Recommended |
|---|---|---|
| Operating System | Ubuntu 20.04 / CentOS 8 / Windows 10 | Ubuntu 22.04 LTS |
| PHP | 8.1 | 8.2+ |
| MySQL / MariaDB | 8.0 / 10.6 | 8.0+ / 10.11+ |
| Composer | 2.0 | 2.6+ |
| Web Server | Apache 2.4 or Nginx 1.18 | Nginx 1.24+ |
| RAM | 2 GB | 4 GB+ |
| Disk Space | 1 GB | 5 GB+ (for uploads) |
| Node.js (optional) | 18.x | 20.x LTS |
2
Required PHP Extensions
# Install required PHP extensions (Ubuntu/Debian) sudo apt install php8.2-cli php8.2-fpm php8.2-mysql php8.2-xml \ php8.2-mbstring php8.2-curl php8.2-zip php8.2-gd \ php8.2-intl php8.2-ldap php8.2-bcmath php8.2-opcache # Verify extensions php -m | grep -E "pdo_mysql|xml|mbstring|curl|zip|gd|intl|ldap"
The
php-ldap extension is required for Active Directory / LDAP integration. The php-gd extension is required for barcode and PDF generation.3
Download & Extract
# Clone the repository or extract the release archive cd /var/www git clone https://your-repo-url/bizsync360-eam.git bizsync360 cd bizsync360 # Or extract from archive tar -xzf bizsync360-eam-v1.0.0.tar.gz -C /var/www/bizsync360
4
Install Composer Dependencies
# Install PHP dependencies composer install --no-dev --optimize-autoloader # For development environments composer install
5
Environment Configuration
# Copy the example environment file cp .env .env.local # Edit environment variables nano .env.local
# .env.local - Key Configuration APP_ENV=prod APP_SECRET=your-unique-secret-key-here APP_DEBUG=0 # Database Connection DATABASE_URL="mysql://bizsync360_user:StrongPassword123@127.0.0.1:3306/bizsync360_eam?serverVersion=8.0&charset=utf8mb4" # Application Base URL APP_BASE_URL="https://eam.yourcompany.com" # Timezone APP_TIMEZONE="Africa/Johannesburg" # LDAP Configuration (optional) LDAP_HOST="ldap://dc.yourcompany.com" LDAP_PORT=389 LDAP_BASE_DN="dc=yourcompany,dc=com"
6
Database Setup
# Log in to MySQL mysql -u root -p # Create the database and user CREATE DATABASE bizsync360_eam CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'bizsync360_user'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT ALL PRIVILEGES ON bizsync360_eam.* TO 'bizsync360_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
7
Run Migrations & Seed Data
# Create the database schema php bin/console doctrine:migrations:migrate --no-interaction # Load seed data (asset types, locations, sample data) php bin/console app:load-seed-data # (Optional) Generate sample data for testing php bin/console app:generate-sample-data # Clear and warm up cache php bin/console cache:clear --env=prod php bin/console cache:warmup --env=prod
8
Web Server Configuration
Nginx (Recommended)
server {
listen 443 ssl http2;
server_name eam.yourcompany.com;
root /var/www/bizsync360/public;
ssl_certificate /etc/ssl/certs/eam.yourcompany.com.crt;
ssl_certificate_key /etc/ssl/private/eam.yourcompany.com.key;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ { return 404; }
client_max_body_size 50M;
access_log /var/log/nginx/bizsync360_access.log;
error_log /var/log/nginx/bizsync360_error.log;
}
Apache (.htaccess already included)
# Apache VirtualHost <VirtualHost *:443> ServerName eam.yourcompany.com DocumentRoot /var/www/bizsync360/public <Directory /var/www/bizsync360/public> AllowOverride All Require all granted </Directory> SSLEngine on SSLCertificateFile /etc/ssl/certs/eam.yourcompany.com.crt SSLCertificateKeyFile /etc/ssl/private/eam.yourcompany.com.key </VirtualHost>
9
File Permissions
# Set ownership sudo chown -R www-data:www-data /var/www/bizsync360 # Set directory permissions find /var/www/bizsync360 -type d -exec chmod 755 {} \; find /var/www/bizsync360 -type f -exec chmod 644 {} \; # Writable directories chmod -R 775 /var/www/bizsync360/var chmod -R 775 /var/www/bizsync360/public/uploads
10
SSL / HTTPS (Let's Encrypt)
# Install certbot sudo apt install certbot python3-certbot-nginx # Obtain and install certificate sudo certbot --nginx -d eam.yourcompany.com # Auto-renewal is configured automatically sudo certbot renew --dry-run
11
Scheduled Tasks (Cron Jobs)
# Edit crontab sudo crontab -e -u www-data # Add the following cron jobs: # Run depreciation calculations daily at 2:00 AM 0 2 * * * cd /var/www/bizsync360 && php bin/console app:run-depreciation >> /var/log/bizsync360-cron.log 2>&1 # Process Symfony messenger queue * * * * * cd /var/www/bizsync360 && php bin/console messenger:consume async --time-limit=58 >> /var/log/bizsync360-messenger.log 2>&1 # Clear expired cache entries weekly 0 3 * * 0 cd /var/www/bizsync360 && php bin/console cache:pool:prune >> /dev/null 2>&1
12
Production Checklist
- Set
APP_ENV=prod - Set
APP_DEBUG=0 - Generate unique
APP_SECRET - Configure SSL/HTTPS
- Set file permissions correctly
- Run
composer install --no-dev
- Warm up production cache
- Configure cron jobs
- Set up database backups
- Configure log rotation
- Enable OPcache for PHP
- Test LDAP connectivity
13
Troubleshooting
Check
var/log/prod.log for details. Common causes: missing PHP extensions, incorrect database credentials, or file permission issues on the var/ directory.Verify
DATABASE_URL in .env.local. Ensure MySQL is running: sudo systemctl status mysql. Test connection: php bin/console doctrine:database:create --if-not-exists.Ensure
php-ldap is installed. Test connectivity: ldapsearch -x -H ldap://your-dc:389 -b "dc=company,dc=com". Check firewall rules allow port 389/636.Check
upload_max_filesize and post_max_size in php.ini. Ensure public/uploads/ is writable by the web server user. For Nginx, check client_max_body_size.