Laravel на WordOps: LEMP, Composer и root на public/

WordOps – набор скриптов для быстрого поднятия и обслуживания LEMP (Linux, Nginx, MariaDB, PHP) на Ubuntu/Debian. Ниже – практичный порядок: установка WordOps, сайт с PHP, Laravel через Composer и vhost с root на public/.

1. Установка WordOps

Нужен свежий сервер (Ubuntu/Debian предпочтительнее). Под root или через sudo:

wget -qO wo wops.cc && sudo bash wo
# либо классический вариант из репозитория:
# git clone https://github.com/WordOps/WordOps.git --depth=1
# cd WordOps && sudo bash install

Инсталлятор поставит Nginx, MariaDB, PHP-FPM и утилиту wo. Дождитесь окончания без ошибок в логе. После установки проверьте:

wo --version
wo stack status

2. Сайт под PHP

Создайте vhost (подставьте свой домен или тестовый):

sudo wo site create example.com --php

WordOps положит файлы в /var/www/example.com/htdocs, настроит Nginx и PHP. DNS или /etc/hosts должны указывать на сервер, иначе в браузере увидите чужой vhost или ошибку.

Для HTTPS удобно сразу:

sudo wo site update example.com --letsencrypt

3. Composer и проект Laravel

Composer часто уже есть; если нет:

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

Создайте приложение. Удобнее поставить его рядом с htdocs или прямо в каталог сайта, а document root потом сдвинуть на public:

cd /var/www/example.com
sudo -u www-data composer create-project --prefer-dist laravel/laravel htdocs-laravel
# или от root с последующей сменой владельца:
# composer create-project --prefer-dist laravel/laravel htdocs-laravel
# chown -R www-data:www-data htdocs-laravel

Права: каталоги storage и bootstrap/cache должны быть доступны PHP-FPM (обычно пользователь www-data).

4. Nginx: root на public/

WordOps хранит конфиги сайта в /etc/nginx/sites-available/ (или через wo site edit example.com). Document root должен указывать на .../public, иначе наружу утекут .env и исходники.

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/htdocs-laravel/public;
    index index.php index.html;

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }

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

Версию PHP и путь сокета смотрите через wo site info example.com или ls /run/php/. После правок:

sudo nginx -t && sudo systemctl reload nginx

5. База данных

sudo mysql -u root
CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

На WordOps root MariaDB часто ходит через unix_socket без пароля – это нормально на локальной машине.

6. .env и artisan

cd /var/www/example.com/htdocs-laravel
cp .env.example .env
php artisan key:generate
nano .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=strong_password_here

APP_URL=https://example.com

Миграции и кэш (на пустом проекте миграции минимальны, но привычка полезная):

php artisan migrate
php artisan config:cache
php artisan route:cache

7. Проверка

  • В браузере открывается welcome-страница Laravel, не листинг каталога
  • storage/logs/laravel.log без ошибок подключения к БД
  • .env недоступен по HTTP (должен отдавать 403/404)
  • Права на storage и bootstrap/cache корректны

Итог

WordOps снимает рутину LEMP, Laravel – отдельный слой поверх PHP-сайта. Главное: root Nginx только на public/, отдельный пользователь БД и нормальные права на writable-каталоги. Дальше – очереди, supervisor, cron для schedule:run по необходимости проекта.

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


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