Полная инструкция
по настройке сервера

Подробное руководство по настройке сервера Ubuntu (18.04, 20.04, 22.04, 24.04) для Laravel проектов. Все этапы с примерами команд, интерактивными меню и объяснениями.

1. Требования

Системные требования

  • Сервер с Ubuntu 18.04, 20.04, 22.04 или 24.04 LTS
  • Минимум 2 GB RAM (рекомендуется 4 GB)
  • Минимум 20 GB свободного места на диске
  • Доступ root или sudo
  • Интернет соединение для загрузки пакетов
Автоматическое определение версии Скрипт автоматически определяет версию Ubuntu и предлагает только те версии PHP, которые доступны для вашей версии системы.

Что устанавливается

Компонент Версия Описание
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)

ВАЖНО Скрипт можно безопасно запускать повторно. Он не сломает существующие настройки, базы данных и конфигурации.

Что делает скрипт

  1. Определение версии Ubuntu

    Автоматически определяет версию Ubuntu и доступные версии PHP для этой версии

  2. Интерактивный выбор параметров

    Предлагает выбрать версии PHP (7.2-8.4 в зависимости от Ubuntu), версии Node.js, тип БД и модули

  3. Обновление системы

    Обновляет все пакеты системы до последних версий

  4. Установка выбранных версий PHP

    Устанавливает выбранные версии PHP с необходимыми расширениями для Laravel и выбранных БД

  5. Установка Composer

    Устанавливает менеджер зависимостей PHP с проверкой подписи

  6. Установка Node.js через NVM

    Устанавливает выбранные версии Node.js (22, 20, 18, 16) для разных проектов

  7. Установка выбранной БД

    Устанавливает выбранную БД (MySQL, MariaDB или PostgreSQL) и создает безопасный пароль

  8. Установка выбранных модулей

    Устанавливает выбранные модули: Redis, Nginx, Supervisor, Certbot, Adminer

  9. Настройка SSH ключей

    Генерирует SSH ключи для безопасного доступа

  10. Настройка файрвола 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)
Эти пароли понадобятся для настройки Laravel проектов.
Важно Скрипт автоматически определяет версию Ubuntu и предлагает только те версии PHP, которые доступны для вашей версии системы. Например, на Ubuntu 20.04 будут доступны PHP 7.4-8.2, а на Ubuntu 24.04 - PHP 8.0-8.4.

3. Настройка Laravel проекта (2-setup-laravel.sh)

Что делает скрипт

  1. Интерактивный выбор параметров

    Предлагает выбрать тип БД (MySQL/MariaDB/PostgreSQL), версию PHP из установленных, версию Node.js и опции настройки (SSL, миграции, сиды, Reverb, сборка фронтенда)

  2. Создание SSL сертификата (опционально)

    Создает SSL сертификат через Let's Encrypt для указанного домена (если выбрано)

  3. Создание базы данных

    Создает базу данных и пользователя для выбранного типа БД (MySQL/MariaDB/PostgreSQL) с автоматически сгенерированным паролем

  4. Настройка .env файла

    Настраивает .env файл с правильными параметрами БД (DB_CONNECTION, DB_HOST, DB_PORT), домена и окружения

  5. Установка зависимостей

    Устанавливает PHP зависимости через Composer и Node.js зависимости через npm

  6. Сборка фронтенда (опционально)

    Собирает фронтенд через Vite (npm run build) если выбрано

  7. Настройка прав доступа

    Устанавливает правильные права на storage, bootstrap/cache и другие директории

  8. Выполнение миграций и сидов (опционально)

    Выполняет миграции базы данных и сиды (если выбрано)

  9. Настройка Nginx

    Создает конфигурацию Nginx с HTTPS, поддержкой WebSocket для Reverb

  10. Настройка Supervisor для Reverb (опционально)

    Настраивает Supervisor для автоматического запуска Reverb (если выбрано)

  11. Настройка 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)
Автоматическое определение версий Скрипт автоматически определяет установленные версии PHP и Node.js и предлагает выбрать из них. Не нужно указывать версии вручную - просто выберите из списка доступных.

4. Деплой обновлений (3-deploy.sh)

Что делает скрипт

  1. Включение режима обслуживания

    Включает режим обслуживания Laravel (artisan down)

  2. Получение изменений из Git

    Выполняет git pull для получения последних изменений

  3. Обновление PHP зависимостей

    Обновляет зависимости через Composer

  4. Обновление Node.js зависимостей

    Обновляет зависимости через npm и собирает фронтенд

  5. Выполнение миграций

    Выполняет новые миграции базы данных

  6. Очистка и оптимизация кеша

    Очищает все кеши Laravel и создает оптимизированные версии

  7. Перезапуск PHP-FPM

    Перезапускает PHP-FPM для сброса OPcache

  8. Перезапуск Reverb

    Перезапускает Reverb (если используется)

  9. Отключение режима обслуживания

    Отключает режим обслуживания (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

Совет Для использования PostgreSQL в Laravel убедитесь, что в .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
Автоматическое определение Скрипт автоматически определяет версию Ubuntu и предлагает только доступные версии PHP. Не нужно вручную проверять, какие версии можно установить.