Nasadenie SScloud na server

Tento návod popisuje nasadenie SScloud na produkčný server (Linux, PHP 8.2+, MySQL/MariaDB).

Požiadavky

  • PHP 8.2+ s rozšíreniami: BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, GD (pre PDF reporty)
  • Composer (správca PHP závislostí)
  • Node.js 18+ a npm (pre frontend build)
  • MySQL 8.0+ alebo MariaDB 10.6+
  • Nginx alebo Apache (webserver)
  • Supervisor (pre queue worker — voliteľné)
  • Certbot (Let's Encrypt SSL)

Postup inštalácie

1. Klonovanie a závislosti

cd /var/www
git clone https://github.com/brano300/SScloud.git sscloud
cd sscloud

composer install --no-dev --optimize-autoloader
npm install && npm run build

2. Konfigurácia prostredia

cp .env.example .env
php artisan key:generate

Upravte .env:

APP_NAME=SScloud
APP_ENV=production
APP_DEBUG=false
APP_TIMEZONE=Europe/Bratislava
APP_URL=https://cloud.supersolar.sk

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sscloud
DB_USERNAME=sscloud_user
DB_PASSWORD=silne_heslo

MAIL_MAILER=smtp
MAIL_HOST=smtp.vas-provider.sk
MAIL_PORT=587
MAIL_USERNAME=info@supersolar.sk
MAIL_PASSWORD=email_heslo
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=info@supersolar.sk
MAIL_FROM_NAME=SScloud

3. Databáza

mysql -u root -p -e "CREATE DATABASE sscloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'sscloud_user'@'localhost' IDENTIFIED BY 'silne_heslo';"
mysql -u root -p -e "GRANT ALL ON sscloud.* TO 'sscloud_user'@'localhost';"

php artisan migrate --force
php artisan db:seed --class=PricingPlanSeeder

4. Oprávnenia

chown -R www-data:www-data /var/www/sscloud
chmod -R 755 /var/www/sscloud
chmod -R 775 storage bootstrap/cache

5. Cache (produkcia)

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

6. Nginx konfigurácia

server {
    listen 80;
    server_name cloud.supersolar.sk;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name cloud.supersolar.sk;
    root /var/www/sscloud/public;

    ssl_certificate /etc/letsencrypt/live/cloud.supersolar.sk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.supersolar.sk/privkey.pem;

    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.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

7. SSL certifikát

certbot --nginx -d cloud.supersolar.sk

8. Scheduler (crontab)

crontab -e

Pridajte:

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

Toto spúšťa:

  • Každých 5 min — zber snapshotov z meničov
  • Každých 15 min — health check elektrární
  • Každú hodinu — OKTE ceny
  • Denne 08:00 — kontrola licencií
  • Pondelok 09:00 — pripomienky na obnovu licencií
  • 1. v mesiaci 07:00 — mesačné reporty
  • Nedeľa 03:00 — čistenie starých dát (90 dní)

9. Queue worker (voliteľné — pre emaily a webhooky)

Vytvorte /etc/supervisor/conf.d/sscloud-worker.conf:

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

Aktualizácia

cd /var/www/sscloud
php artisan down

git pull origin main
composer install --no-dev --optimize-autoloader
npm install && npm run build
php artisan migrate --force

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

php artisan up

Monitoring

  • Health check: GET /api/health — vráti status a verziu
  • Logy: storage/logs/laravel.log
  • Admin panel: /admin/stats — štatistiky a zdravie systému
  • Alerty: /admin/alerts — výpadky, fuse alerty, licencie

Zálohovanie

Odporúčame zálohovať:

  • Databázu (denný mysqldump)
  • .env súbor
  • storage/ priečinok (reporty, logy)
# Príklad dennej zálohy
mysqldump -u sscloud_user -p sscloud | gzip > /backups/sscloud-$(date +%Y%m%d).sql.gz