Files
2026-04-04 02:19:32 +03:00

8.7 KiB

JobifyGarden Deployment Guide

Requirements

  • PHP: 8.3.x (minimum)
  • MySQL: 8.0+ or MariaDB 10.3+
  • Composer: 2.x
  • Node.js: 18.x or 20.x
  • Redis: 6.x+ (for caching and queues)
  • Nginx or Apache
  • Supervisor (for queue workers)

Server Setup

1. Install PHP 8.3 and Extensions

# Ubuntu/Debian
sudo apt update
sudo apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-mysql php8.3-redis \
    php8.3-xml php8.3-mbstring php8.3-curl php8.3-zip php8.3-gd \
    php8.3-intl php8.3-bcmath php8.3-opcache

# Verify PHP version
php -v
# Should show: PHP 8.3.x

2. Install MySQL

sudo apt install -y mysql-server
sudo mysql_secure_installation

# Create database
sudo mysql -u root -p
CREATE DATABASE jobifygarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'jobifygarden'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON jobifygarden.* TO 'jobifygarden'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. Install Redis

sudo apt install -y redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server

4. Install Composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

5. Install Node.js

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

Application Deployment

1. Clone the Repository

cd /var/www
sudo git clone <repository-url> jobifygarden
sudo chown -R www-data:www-data jobifygarden
cd jobifygarden

2. Install Dependencies

# Install PHP dependencies
composer install --no-dev --optimize-autoloader

# Install Node.js dependencies
npm ci

# Build frontend assets
npm run build

3. Configure Environment

# Copy environment file
cp .env.example .env

# Edit .env file
nano .env

Update the following in .env:

APP_NAME=JobifyGarden
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=jobifygarden
DB_USERNAME=jobifygarden
DB_PASSWORD=your_secure_password

CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

4. Generate Application Key

php artisan key:generate

5. Run Database Migrations

php artisan migrate --force

6. Optimize Application

php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

7. Set Permissions

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

Web Server Configuration

Nginx Configuration

Create /etc/nginx/sites-available/jobifygarden:

server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com;
    root /var/www/jobifygarden/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # Gzip compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
}

Enable the site:

sudo ln -s /etc/nginx/sites-available/jobifygarden /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Apache Configuration (Alternative)

Create /etc/apache2/sites-available/jobifygarden.conf:

<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/jobifygarden/public

    <Directory /var/www/jobifygarden/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/jobifygarden_error.log
    CustomLog ${APACHE_LOG_DIR}/jobifygarden_access.log combined
</VirtualHost>

Enable the site:

sudo a2enmod rewrite
sudo a2ensite jobifygarden
sudo systemctl reload apache2

SSL Certificate (Let's Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Queue Worker Setup (Supervisor)

Create /etc/supervisor/conf.d/jobifygarden-worker.conf:

[program:jobifygarden-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/jobifygarden/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/jobifygarden/storage/logs/worker.log
stopwaitsecs=3600

Start the workers:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start jobifygarden-worker:*

Scheduled Tasks (Cron)

Add to crontab for www-data user:

sudo crontab -u www-data -e

Add this line:

* * * * * cd /var/www/jobifygarden && php artisan schedule:run >> /dev/null 2>&1

Database Optimization

Run regularly to maintain database performance:

php artisan db:optimize

Consider adding to scheduler in app/Console/Kernel.php:

$schedule->command('db:optimize')->weekly();

Monitoring & Maintenance

Clear Caches

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

View Logs

tail -f storage/logs/laravel.log

Monitor Queue

php artisan queue:monitor

Database Backup

# Create backup directory
mkdir -p /var/backups/jobifygarden

# Add to cron (daily at 2 AM)
0 2 * * * mysqldump -u jobifygarden -p'password' jobifygarden | gzip > /var/backups/jobifygarden/backup-$(date +\%Y\%m\%d).sql.gz

Performance Tuning

PHP-FPM Configuration

Edit /etc/php/8.3/fpm/pool.d/www.conf:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

OPcache Configuration

Edit /etc/php/8.3/fpm/conf.d/10-opcache.ini:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=0

Restart PHP-FPM:

sudo systemctl restart php8.3-fpm

Security Checklist

  • Update .env with strong APP_KEY
  • Set APP_DEBUG=false in production
  • Configure firewall (UFW/iptables)
  • Set up fail2ban for brute force protection
  • Keep PHP and dependencies updated
  • Regular security audits: composer audit
  • Monitor error logs regularly
  • Set up automated backups
  • Use HTTPS only (redirect HTTP to HTTPS)
  • Configure proper file permissions

Updating the Application

cd /var/www/jobifygarden

# Enable maintenance mode
php artisan down

# Pull latest code
git pull origin main

# Update dependencies
composer install --no-dev --optimize-autoloader
npm ci
npm run build

# Run migrations
php artisan migrate --force

# Clear and rebuild caches
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Disable maintenance mode
php artisan up

# Restart queue workers
sudo supervisorctl restart jobifygarden-worker:*

Troubleshooting

Permission Issues

sudo chown -R www-data:www-data /var/www/jobifygarden
sudo chmod -R 775 storage bootstrap/cache

Queue Not Processing

# Check supervisor status
sudo supervisorctl status

# Restart workers
sudo supervisorctl restart jobifygarden-worker:*

# Check worker logs
tail -f storage/logs/worker.log

Database Connection Issues

# Test database connection
php artisan tinker
>>> DB::connection()->getPdo();

Performance Issues

# Check slow query log
php artisan db:monitor

# Optimize database
php artisan db:optimize

# Clear all caches
php artisan optimize:clear
php artisan optimize

Support

For issues and questions, check:

  • Application logs: storage/logs/laravel.log
  • Web server logs: /var/log/nginx/error.log or /var/log/apache2/error.log
  • PHP-FPM logs: /var/log/php8.3-fpm.log
  • Supervisor logs: /var/log/supervisor/supervisord.log

Last Updated: April 4, 2026