Installation Guide

Complete deployment guide for BizSync360 Enterprise Asset Management

1
System Requirements
ComponentMinimumRecommended
Operating SystemUbuntu 20.04 / CentOS 8 / Windows 10Ubuntu 22.04 LTS
PHP8.18.2+
MySQL / MariaDB8.0 / 10.68.0+ / 10.11+
Composer2.02.6+
Web ServerApache 2.4 or Nginx 1.18Nginx 1.24+
RAM2 GB4 GB+
Disk Space1 GB5 GB+ (for uploads)
Node.js (optional)18.x20.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.