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 по необходимости проекта.
