Установка и настройка Laravel с Docker Compose на Ubuntu 22.04 — подробное руководство.
В этом пошаговом руководстве вы узнаете, как установить и настроить Laravel с помощью Docker Compose на Ubuntu 22.04 и создать безопасную и оптимизированную производственную среду.

Установка и настройка Laravel с Docker Compose на Ubuntu 22.04 — подробное руководство.

В этой статье мы покажем, как установить и развернуть приложение Laravel на Ubuntu 22.04 с помощью Docker Compose. Пошагово описав весь процесс, вы легко сможете создать безопасную и оптимизированную производственную среду.
0 Акции
0
0
0
0

Как установить и настроить Laravel с Docker Compose на Ubuntu 22.04?

В этом практическом и техническом руководстве мы шаг за шагом расскажем вам о процессе установки и настройки приложения. Laravel С использованием Docker Compose На сервере Убунту 22.04 Цель этой статьи — предоставить разработчикам, командам DevOps и техническим менеджерам практические рекомендации по созданию безопасной, масштабируемой и поддерживаемой производственной среды.

Первоначальный контрольный список

Перед началом работы подготовьте следующее:

  • Сервер Убунту 22.04 При наличии прав root или пользователя с правами sudo.
  • Докер (стабильная версия) и Docker Compose (или используйте плагин docker compose)
  • Открытые порты: 80/443 Для веб-сайта; при необходимости 3306 Или 5432 Для базы данных (желательно с ограничением по IP-адресам)
  • Достаточное дисковое пространство (рекомендуется SSD) и доступ к одному из более чем... 85 точек Глобальный режим при использовании облачных сервисов.
  • Доменное имя и DNS-запись, указывающая на IP-адрес сервера.

Установка Docker и Docker Compose на Ubuntu 22.04

Для установки Docker и плагина docker compose выполните следующие команды на сервере:

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER

Затем выйдите из системы и войдите снова. newgrp docker Использовать.

Для проверки установки:

docker --version
docker compose version

Предлагаемая структура проекта

Для упрощения сопровождения и разработки рекомендуется организовать папку проекта следующим образом:

  • project-root/
    • docker/
      • nginx/default.conf
      • php/Dockerfile
    • src/ — Код Laravel (или монтирование)
    • docker-compose.yml
    • .env

Рекомендуемый Dockerfile для PHP-FPM (PHP 8.1)

Файл с указанием пути docker/php/Dockerfile Создайте что-то вроде следующего примера:

FROM php:8.1-fpm

# Install required tools and extensions
RUN apt-get update && apt-get install -y \
    git zip unzip libpng-dev libjpeg-dev libfreetype6-dev libonig-dev libxml2-dev \
    libzip-dev libpq-dev cron curl supervisor \
  && docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql mbstring xml bcmath zip opcache \
  && pecl install redis && docker-php-ext-enable redis \
  && pecl install xdebug || true \
  && apt-get clean && rm -rf /var/lib/apt/lists/*

# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# Create non-root user
RUN useradd -G www-data,root -u 1000 -d /home/appuser appuser
WORKDIR /var/www/html
USER appuser

пример файла docker-compose.yml

Предложенная версия docker-compose.yml Для запуска приложения, веб-сервера, базы данных и Redis:

version: "3.8"

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    image: laravel_app:latest
    container_name: laravel_app
    restart: unless-stopped
    volumes:
      - ./src:/var/www/html
      - ./docker/php/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
    environment:
      - APP_ENV=production
      - APP_DEBUG=false
    networks:
      - laravel-net

  web:
    image: nginx:alpine
    container_name: laravel_web
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./src:/var/www/html:ro
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./certs:/etc/letsencrypt
    depends_on:
      - app
    networks:
      - laravel-net

  db:
    image: mysql:8.0
    container_name: laravel_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - laravel-net

  redis:
    image: redis:6-alpine
    container_name: laravel_redis
    restart: unless-stopped
    volumes:
      - redis_data:/data
    networks:
      - laravel-net

volumes:
  db_data:
  redis_data:

networks:
  laravel-net:
    driver: bridge

Конфигурационный файл Nginx (docker/nginx/default.conf)

Пример конфигурации Nginx для маршрутизации запросов к приложению PHP-FPM:

server {
    listen 80;
    server_name example.com;

    root /var/www/html/public;
    index index.php index.html;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

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

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny all;
    }
}

Примечание: В архитектурах с обратным прокси или множеством сервисов Nginx можно разместить на уровне балансировщика нагрузки или CDN.

Подготовка кода и установка зависимостей.

Если у вас нет проекта Laravel, вы можете создать новый с помощью Composer:

composer create-project --prefer-dist laravel/laravel src

Затем, чтобы создать и запустить контейнеры:

docker compose build
docker compose up -d

Для выполнения команд Composer и Artisan внутри PHP-контейнера:

docker exec -it laravel_app bash
composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan migrate --force
php artisan config:cache
php artisan route:cache
exit

Настройка файла .env для Docker

Пример конфигурации .env, совместимой с docker-compose:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

CACHE_DRIVER=redis
REDIS_HOST=redis

APP_URL=https://example.com

SSL и Let's Encrypt — два простых способа.

Есть два простых способа включить HTTPS:

  • Использование Certbot на хосте: Временно остановите Nginx, поместите выданный сертификат в папку. ./certs и прикрепить его к контейнеру.
  • Используя автоматизированное решение: Инструменты, такие как docker-letsencrypt-nginx-proxy-companion Или Трафик Они подходят для автоматизированного управления сертификатами.

Быстрый пример с использованием Certbot:

sudo apt install -y certbot
sudo docker compose down
sudo certbot certonly --standalone -d example.com --non-interactive --agree-tos -m [email protected]
# Copy certificates from /etc/letsencrypt/live/... to ./certs and then:
sudo docker compose up -d

Запускать при загрузке и поддерживать работу службы.

Чтобы гарантировать запуск служб после перезагрузки:

sudo systemctl enable docker

Кроме того, в docker-compose из перезапуск: если не остановлено Он уже использовался. При необходимости можно создать юнит systemd для docker-compose.

Практические советы по безопасности

  • Использование пользователя без прав root в PHP-контейнере (пользователь приложения (в приведенном выше Dockerfile)
  • Ограничение доступа к порту базы данных с помощью брандмауэра (UFW):
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

Другие рекомендации:

  • Регулярное резервное копирование тома базы данных (db_data) и хранить его вне сервера
  • Включение HTTPS и HSTS
  • Использование секретов или служб управления ключами для хранения паролей (секреты Docker или службы управления ключами)
  • Используйте такие инструменты безопасности, как... фейл2бан А при необходимости, например, WAF. ModSecurity
  • Используйте CDN или службу защиты от DDoS-атак для защиты трафика.

Оптимизация производительности для производственных сред

  • Включение OPcache в php.ini:
    opcache.memory_consumption=256
    opcache.validate_timestamps=0
  • Настройка php-fpm (pm = динамический или по запросу) и увеличение его количества. max_children Согласно данным серверной памяти
  • Использование Redis для кэширования и управления сессиями.
  • Использование CDN для статических файлов
  • Горизонтальное масштабирование: запуск нескольких экземпляров сервиса приложения с использованием балансировщика нагрузки (NGINX или HAProxy).
  • Используйте отдельных сотрудников и руководителей или отдельные службы для обслуживания в режиме реального времени и в очередях.

Рабочие в очереди и компания Horizon

Добавьте отдельный сервис в docker-compose для запуска обработчиков очереди. Пример:

worker:
  build: ...
  command: php /var/www/html/artisan queue:work --sleep=3 --tries=3
  depends_on: [app, redis]
  restart: unless-stopped

Для Laravel Horizon лучше всего использовать выделенный контейнер с установленными PHP и Horizon и разместить его за Nginx/authentication.

Советы по выбору местоположения и центра обработки данных

Практические советы по выбору местоположения:

  • Для минимизации задержки выбирайте сервер, расположенный близко к вашим конечным пользователям или месту назначения. Поставщик услуг — это не просто поставщик услуг. 85 представительств по всему миру Да, это так.
  • Для геймеров или трейдеров выбирайте местоположение с низким пингом и оптимизированной сетью BGP.
  • Используйте серверы, оснащенные графическими процессорами, для обработки и рендеринга с помощью ИИ.
  • Используйте серверы и CDN с защитой от DDoS-атак, чтобы противостоять им.

Резервное копирование, мониторинг и журналы событий.

  • Журналы контейнеров с docker logs Доступны; для централизованной агрегации используйте ELK или Prometheus+Grafana.
  • Ежедневное резервное копирование базы данных и периодическое восстановление (тестирование)
  • Мониторинг ресурсов ЦП/ОЗУ, отслеживание приложений и ошибок в CI/CD.

Стандартная отладка

  • Ошибка 502 Bad Gateway: Убедитесь, что php-fpm запущен в контейнере приложения и что параметр fastcgi_pass установлен на правильный адрес.приложение:9000) чтобы указать.
  • Проблема с подключением к базе данных: Проверьте переменные .env, сетевые настройки Docker и журналы MySQL.
  • Права доступа к файлу: В случае ошибок доступа установите права доступа к папкам storage и bootstrap/cache:
sudo chown -R 1000:1000 src/storage src/bootstrap/cache

Заключение и окончательные рекомендации

Использование Docker Compose для запуска Laravel на Ubuntu 22.04 упрощает разработку и развертывание, делая их повторяемыми и масштабируемыми. Следуя этому руководству, вы сможете настроить безопасную, быструю и поддерживаемую производственную среду: PHP-FPM с NginxMySQL/MariaDB или PostgreSQL, Redis для кэширования и очередей, а также настройки и мониторинг SSL.

Сопутствующие услуги

Для профессиональной реализации этой архитектуры можно использовать следующие сервисы:

  • Больше, чем 85 представительств по всему миру Для уменьшения задержки и приближения сервера к пользователю или месту назначения.
  • Графический сервер (GPU) для вычислений и рендеринга в системах искусственного интеллекта.
  • VPS для торговли с низким пингом и оптимизированной сетью BGP.
  • Игровой VPS с низким пингом и защитой от DDoS-атак.
  • Услуги хостинга и регистрации доменов, CDN, сетевые решения и BGP-протоколы.
  • Высокопроизводительный облачный сервер и управляемое резервное копирование

Часто задаваемые вопросы

Вам также может понравиться

Основы UFW: общие правила и команды брандмауэра для безопасности Linux

Основы UFW: общие правила и команды брандмауэра для обеспечения безопасности Linux Введение UFW (Unified Firewall) — это инструмент командной строки…
Настройка сервера FiveM

Настройка сервера FiveM/игрового сервера GTA V

Содержание Общее введение Предварительные требования к оборудованию и советы Подготовка сервера (пользователь, обновления, пакеты) Загрузка последней версии (рекомендуется) FXServer (метод…
Как установить Cockpit на Ubuntu 24.04

Как установить Cockpit в Ubuntu 24.04

Cockpit — это веб-панель управления серверами, которая позволяет осуществлять мониторинг, управление службами, хранилищем, журналами и пользователями в простом графическом интерфейсе. Использование Cockpit на VPS позволяет системным администраторам выполнять многие задачи по администрированию сервера без необходимости использования командной строки. Ниже мы пошагово расскажем, как установить, настроить безопасность и получить доступ к Cockpit.
Установка и настройка SoftEther Server на Ubuntu 22.04/20.04

Установка и настройка SoftEther Server на Ubuntu 22.04/20.04

В этом руководстве мы шаг за шагом покажем вам, как установить и настроить SoftEther Server на Ubuntu 22.04/20.04. Советы будут включать в себя информацию о безопасности, мерах по настройке брандмауэра и оптимизации производительности для торговли и игр.
Настройка различных типов туннелей MikroTik к MikroTik или Ubuntu — функции, безопасность и скорость.

Настройка различных типов туннелей MikroTik к MikroTik или Ubuntu — функции, безопасность и скорость.

В этой статье представлено полное руководство по настройке туннелей MikroTik-MikroTik-Ubuntu и Ubuntu. Рассматриваются типы туннелей, сравниваются показатели безопасности и производительности, а также даются практические советы по оптимизации скорости и безопасности. Подходит для сетевых администраторов, трейдеров и геймеров.