- Сервер с Ubuntu 18.04, 20.04, 22.04 или 24.04 LTS
- Минимум 2 GB RAM (рекомендуется 4 GB)
- Минимум 20 GB свободного места на диске
- Доступ root или sudo
- Интернет соединение для загрузки пакетов
Полная инструкция
по настройке сервера
Подробное руководство по настройке сервера Ubuntu (18.04, 20.04, 22.04, 24.04) для Laravel проектов. Все этапы с примерами команд, интерактивными меню и объяснениями.
Содержание
1. Требования
Системные требования
Что устанавливается
| Компонент | Версия | Описание |
|---|---|---|
| PHP | 7.2-8.4 (зависит от версии Ubuntu) | Серверный язык программирования. Доступные версии определяются автоматически |
| Node.js | 22, 20, 18, 16 (на выбор) | JavaScript runtime для фронтенда. Можно выбрать несколько версий |
| MySQL | Последняя стабильная | База данных (на выбор) |
| MariaDB | Последняя стабильная | Альтернатива MySQL (на выбор) |
| PostgreSQL | Последняя стабильная | База данных (на выбор) |
| Redis | Последняя стабильная | Кеш и очереди (опционально) |
| Nginx | Последняя стабильная | Веб-сервер (опционально) |
| Composer | Последняя стабильная | Менеджер зависимостей PHP |
| Certbot | Последняя стабильная | SSL сертификаты Let's Encrypt (опционально) |
| Supervisor | Последняя стабильная | Управление процессами (Reverb) (опционально) |
| Adminer | Последняя стабильная | Веб-интерфейс для БД (настраиваемый порт, опционально) |
2. Настройка сервера (1-setup-server.sh)
Что делает скрипт
-
Определение версии Ubuntu
Автоматически определяет версию Ubuntu и доступные версии PHP для этой версии
-
Интерактивный выбор параметров
Предлагает выбрать версии PHP (7.2-8.4 в зависимости от Ubuntu), версии Node.js, тип БД и модули
-
Обновление системы
Обновляет все пакеты системы до последних версий
-
Установка выбранных версий PHP
Устанавливает выбранные версии PHP с необходимыми расширениями для Laravel и выбранных БД
-
Установка Composer
Устанавливает менеджер зависимостей PHP с проверкой подписи
-
Установка Node.js через NVM
Устанавливает выбранные версии Node.js (22, 20, 18, 16) для разных проектов
-
Установка выбранной БД
Устанавливает выбранную БД (MySQL, MariaDB или PostgreSQL) и создает безопасный пароль
-
Установка выбранных модулей
Устанавливает выбранные модули: Redis, Nginx, Supervisor, Certbot, Adminer
-
Настройка SSH ключей
Генерирует SSH ключи для безопасного доступа
-
Настройка файрвола UFW
Настраивает файрвол с открытыми портами: 22 (SSH), 80 (HTTP), 443 (HTTPS), порт Adminer, 5432 (PostgreSQL если установлен)
Использование
# Скачайте скрипт
wget https://gitverse.ru/vtoljatti/serverolite/content/master/1-setup-server.sh
# Сделайте исполняемым
chmod +x 1-setup-server.sh
# Запустите с правами root
sudo ./1-setup-server.sh
Интерактивный режим:
Скрипт предложит выбрать:
- Версии PHP для установки (только доступные для вашей версии Ubuntu)
- Версии Node.js (можно выбрать несколько)
- Тип базы данных: MySQL, MariaDB или PostgreSQL
- Модули для установки: Redis, Nginx, Supervisor, Certbot, Adminer
- Пароли для БД (автоматическая генерация или ввод вручную)
- Порт для Adminer (по умолчанию 500)
- /root/.mysql_root_password (для MySQL/MariaDB)
- /root/.postgresql_password (для PostgreSQL)
3. Настройка Laravel проекта (2-setup-laravel.sh)
Что делает скрипт
-
Интерактивный выбор параметров
Предлагает выбрать тип БД (MySQL/MariaDB/PostgreSQL), версию PHP из установленных, версию Node.js и опции настройки (SSL, миграции, сиды, Reverb, сборка фронтенда)
-
Создание SSL сертификата (опционально)
Создает SSL сертификат через Let's Encrypt для указанного домена (если выбрано)
-
Создание базы данных
Создает базу данных и пользователя для выбранного типа БД (MySQL/MariaDB/PostgreSQL) с автоматически сгенерированным паролем
-
Настройка .env файла
Настраивает .env файл с правильными параметрами БД (DB_CONNECTION, DB_HOST, DB_PORT), домена и окружения
-
Установка зависимостей
Устанавливает PHP зависимости через Composer и Node.js зависимости через npm
-
Сборка фронтенда (опционально)
Собирает фронтенд через Vite (npm run build) если выбрано
-
Настройка прав доступа
Устанавливает правильные права на storage, bootstrap/cache и другие директории
-
Выполнение миграций и сидов (опционально)
Выполняет миграции базы данных и сиды (если выбрано)
-
Настройка Nginx
Создает конфигурацию Nginx с HTTPS, поддержкой WebSocket для Reverb
-
Настройка Supervisor для Reverb (опционально)
Настраивает Supervisor для автоматического запуска Reverb (если выбрано)
-
Настройка Cron
Добавляет cron задачу для планировщика Laravel
Использование
Интерактивный режим (рекомендуется для первого раза):
chmod +x 2-setup-laravel.sh
sudo ./2-setup-laravel.sh
Скрипт предложит выбрать:
- Тип БД: MySQL, MariaDB или PostgreSQL
- Версию PHP из установленных (автоматически определяет доступные версии)
- Версию Node.js из установленных
- Опции настройки: SSL, миграции, сиды, Reverb, сборка фронтенда
- Параметры БД (имя, пользователь, пароль)
С параметрами в командной строке:
sudo ./2-setup-laravel.sh /var/www/project example.com
Полный список параметров:
sudo ./2-setup-laravel.sh \
/var/www/project \ # Путь к проекту
example.com \ # Домен
mysql \ # Тип БД: mysql, mariadb, pgsql
project_db \ # Имя БД (опционально)
project_user \ # Пользователь БД (опционально)
db_password \ # Пароль БД (опционально, сгенерируется автоматически)
root_password \ # Пароль MySQL/MariaDB root или PostgreSQL postgres
8.4 \ # Версия PHP (из установленных)
22 # Версия Node.js (22, 20, 18, 16)
- Убедитесь, что DNS записи (A или AAAA) для домена указывают на IP вашего сервера (если создаете SSL)
- Порты 80 и 443 должны быть открыты в файрволе (если создаете SSL)
- Laravel проект должен быть загружен в указанную директорию
- Выбранный тип БД должен быть установлен (скрипт 1-setup-server.sh)
- Выбранная версия PHP должна быть установлена (скрипт 1-setup-server.sh)
4. Деплой обновлений (3-deploy.sh)
Что делает скрипт
-
Включение режима обслуживания
Включает режим обслуживания Laravel (artisan down)
-
Получение изменений из Git
Выполняет git pull для получения последних изменений
-
Обновление PHP зависимостей
Обновляет зависимости через Composer
-
Обновление Node.js зависимостей
Обновляет зависимости через npm и собирает фронтенд
-
Выполнение миграций
Выполняет новые миграции базы данных
-
Очистка и оптимизация кеша
Очищает все кеши Laravel и создает оптимизированные версии
-
Перезапуск PHP-FPM
Перезапускает PHP-FPM для сброса OPcache
-
Перезапуск Reverb
Перезапускает Reverb (если используется)
-
Отключение режима обслуживания
Отключает режим обслуживания (artisan up)
Использование
Базовое использование:
chmod +x 3-deploy.sh
sudo ./3-deploy.sh /var/www/project
С опциями:
# Пропустить npm install и сборку
sudo ./3-deploy.sh /var/www/project --skip-npm
# Пропустить git pull
sudo ./3-deploy.sh /var/www/project --skip-git
# Пропустить миграции
sudo ./3-deploy.sh /var/www/project --skip-migrate
# Быстрый деплой (только кеш и PHP-FPM)
sudo ./3-deploy.sh /var/www/project --quick
5. Решение проблем
Проблемы с SSL сертификатом
Проблема: Certbot не может создать сертификат
Решение:
- Проверьте, что DNS записи указывают на IP сервера:
nslookup example.com - Убедитесь, что порты 80 и 443 открыты:
sudo ufw status - Проверьте, что домен доступен из интернета
- Попробуйте создать сертификат вручную:
sudo certbot --nginx -d example.com
Проблемы с базой данных
Проблема: Не удается подключиться к MySQL/MariaDB
Решение:
- Проверьте пароль MySQL/MariaDB root:
cat /root/.mysql_root_password - Проверьте статус MySQL:
sudo systemctl status mysqlилиsudo systemctl status mariadb - Попробуйте подключиться:
mysql -u root -p
Проблема: Не удается подключиться к PostgreSQL
Решение:
- Проверьте пароль PostgreSQL postgres:
cat /root/.postgresql_password - Проверьте статус PostgreSQL:
sudo systemctl status postgresql - Попробуйте подключиться:
sudo -u postgres psql - Или с паролем:
PGPASSWORD='пароль' psql -U postgres -h localhost
Проблемы с правами доступа
Проблема: Laravel не может записывать в storage
Решение:
cd /var/www/project
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
Проблемы с Nginx
Проблема: Ошибки в конфигурации Nginx
Решение:
# Проверка конфигурации
sudo nginx -t
# Просмотр логов ошибок
sudo tail -f /var/log/nginx/error.log
# Перезагрузка Nginx
sudo systemctl reload nginx
7. Типы баз данных
MySQL
Стандартная реляционная база данных, рекомендуемая для большинства Laravel проектов.
Особенности:
- Хорошая производительность
- Широкая поддержка в Laravel
- Простота настройки и использования
Пароль root: Сохраняется в /root/.mysql_root_password
MariaDB
Форк MySQL с открытым исходным кодом, полностью совместим с MySQL.
Особенности:
- Полная совместимость с MySQL
- Активное развитие и поддержка
- Те же команды и синтаксис, что и MySQL
Пароль root: Сохраняется в /root/.mysql_root_password (общий с MySQL)
PostgreSQL
Мощная объектно-реляционная база данных с расширенными возможностями.
Особенности:
- Расширенные типы данных (JSON, массивы, геоданные)
- Мощные возможности для сложных запросов
- Отличная поддержка транзакций
- Поддержка полнотекстового поиска
Пароль postgres: Сохраняется в /root/.postgresql_password
.env указано DB_CONNECTION=pgsql
Выбор типа БД
Когда использовать MySQL/MariaDB:
- Стандартные веб-приложения
- Проекты, требующие простоты настройки
- Большинство Laravel проектов
Когда использовать PostgreSQL:
- Проекты с сложными запросами и данными
- Приложения, работающие с JSON данными
- Проекты, требующие расширенных возможностей БД
- Геопространственные данные
6. Продвинутые настройки
Настройка нескольких проектов
На одном сервере можно установить несколько Laravel проектов. Каждый проект настраивается отдельно с выбором типа БД и версий:
# Первый проект (интерактивный режим)
sudo ./2-setup-laravel.sh
# Второй проект с PostgreSQL
sudo ./2-setup-laravel.sh /var/www/project2 project2.com pgsql
# Третий проект с MariaDB, PHP 8.2 и Node.js 18
sudo ./2-setup-laravel.sh /var/www/project3 project3.com mariadb project3_db project3_user "" root_pass 8.2 18
Каждый проект может использовать:
- Разный тип БД (MySQL, MariaDB или PostgreSQL)
- Разную версию PHP (из установленных)
- Разную версию Node.js
- Отдельную базу данных и пользователя
Доступ к Adminer
Adminer доступен по адресу: http://YOUR_SERVER_IP:ПОРТ/adminer.php
Порт настраивается при установке (по умолчанию 500).
Adminer поддерживает подключение к:
- MySQL/MariaDB - используйте пароль из /root/.mysql_root_password
- PostgreSQL - используйте пароль из /root/.postgresql_password
Для безопасности рекомендуется ограничить доступ только с определенных IP адресов в конфигурации Nginx.
Мониторинг и логи
Полезные команды для мониторинга:
# Логи Laravel
tail -f /var/www/project/storage/logs/laravel.log
# Логи Nginx
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
# Статус сервисов
sudo systemctl status nginx
sudo systemctl status php8.4-fpm # или php8.2-fpm, php8.3-fpm и т.д.
sudo systemctl status mysql # или mariadb
sudo systemctl status postgresql # если установлен
sudo systemctl status redis-server
# Статус Supervisor (Reverb)
sudo supervisorctl status
Доступные версии PHP по версиям Ubuntu
| Версия Ubuntu | Доступные версии PHP | Рекомендуемая версия |
|---|---|---|
| Ubuntu 24.04 (Noble) | 8.0, 8.1, 8.2, 8.3, 8.4 | 8.4 |
| Ubuntu 22.04 (Jammy) | 8.0, 8.1, 8.2, 8.3 | 8.3 |
| Ubuntu 20.04 (Focal) | 7.4, 8.0, 8.1, 8.2 | 8.2 |
| Ubuntu 18.04 (Bionic) | 7.2, 7.3, 7.4, 8.0, 8.1 | 8.1 |