Перенос Laravel-проекта cybertools.cc с Hestia на WordOps

Перенос Laravel-проекта cybertools.cc с Hestia на WordOps

Весной 2025 года Laravel-проект cybertools.cc переехал с Hestia Control Panel на сервер с WordOps. Ниже рабочий порядок: бэкап, файлы, база, Composer, Nginx и PHP, кэши artisan, cron и закрытие .env. Пароли и IP в тексте заменены плейсхолдерами.

Подготовка

На старом сервере нужен root или админ Hestia. Сайт там обычно лежит в /home/<username>/web/cybertools.cc/public_html. Первым делом полный бэкап пользователя, архив появится в /backup, его стоит сразу скачать к себе:

v-backup-user <username>

На новом сервере ставим WordOps и стек Nginx, PHP, MariaDB:

wget -qO wo wops.cc && sudo bash wo
sudo wo stack install

Сайт и база в WordOps

Для Laravel нужен PHP-сайт с базой. По документации WordOps это ключ –mysql, а реквизиты созданной базы лежат в /var/www/site.tld/wo-config.php. Версию PHP задаём сразу, под требования composer.json проекта:

sudo wo site create cybertools.cc --mysql --php83
sudo cat /var/www/cybertools.cc/wo-config.php

Файлы проекта

# на старом сервере
tar -czf cybertools.tar.gz -C /home/<username>/web/cybertools.cc public_html
# на новом, после scp
cd /var/www/cybertools.cc/htdocs
tar -xzf ~/cybertools.tar.gz
mv public_html/* public_html/.[!.]* . 2>/dev/null; rmdir public_html

WordOps смотрит в /var/www/cybertools.cc/htdocs, а Laravel должен отдаваться из каталога public. Правим root в /etc/nginx/sites-available/cybertools.cc на /var/www/cybertools.cc/htdocs/public и проверяем конфиг. В блоке location / должно быть try_files $uri $uri/ /index.php?$query_string.

sudo nginx -t && sudo wo stack reload --nginx

Права:

cd /var/www/cybertools.cc/htdocs
sudo chown -R www-data:www-data .
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chmod -R 775 storage bootstrap/cache
sudo chmod 640 .env

База данных

# на старом сервере
mysqldump -u <dbuser> -p cybertools_db > cybertools_db.sql
# на новом
mysql -u <wo_dbuser> -p <wo_dbname> < cybertools_db.sql

В .env прописываем реквизиты из wo-config.php:

DB_HOST=localhost
DB_DATABASE=<wo_dbname>
DB_USERNAME=<wo_dbuser>
DB_PASSWORD=<wo_dbpassword>

APP_KEY, ключи Socialite, Stripe, почты и прочие секреты переносим из старого .env. В репозиторий и чаты их не выкладываем.

Composer и PHP

cd /var/www/cybertools.cc/htdocs
composer install --no-dev --optimize-autoloader

Если на старом lock-файле всплывают конфликты, например Monolog и Illuminate\Log, обновляем зависимости осознанно под свою ветку Laravel, а не всё сразу до latest. Если проекту нужна другая ветка PHP, сайт переключается одной командой, например sudo wo site update cybertools.cc –php82.

Artisan и cron

php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan storage:link

Планировщик Laravel от пользователя, под которым работает PHP:

sudo crontab -u www-data -e
* * * * * cd /var/www/cybertools.cc/htdocs && php artisan schedule:run >> /dev/null 2>&1

Проверка, DNS и SSL

  • до смены DNS проверить сайт через hosts-файл: главная, блог, страницы утилит, вход через соцсети, тарифы, отправка почты;
  • в .env на проде APP_DEBUG=false, после правки снова php artisan config:cache;
  • закрыть .env в Nginx: location ~ /\.env { deny all; };
  • сменить A и AAAA на новый сервер и после этого выпустить сертификат: sudo wo site update cybertools.cc -le.

Логи на первые дни:

tail -f /var/log/nginx/cybertools.cc.error.log
tail -f /var/www/cybertools.cc/htdocs/storage/logs/laravel.log

Итог: перенос Laravel с Hestia на WordOps это бэкап, сайт с базой через –mysql, root на public, Composer, кэши artisan и cron. Если после переезда пустая страница или 500, сначала смотрим laravel.log и лог Nginx: обычно виноваты права на storage, старый config-cache, root не на public или не та версия PHP.

Источники и ссылки


Комментарии загружаются…