Ubuntu 22.04 に Docker Compose を使って Laravel をインストールして設定する - 包括的なガイド
このステップバイステップ ガイドでは、Ubuntu 22.04 で Docker Compose を使用して Laravel をインストールおよび構成し、安全で最適化された運用環境を作成する方法を学習します。.

Ubuntu 22.04 に Docker Compose を使って Laravel をインストールして設定する - 包括的なガイド

この記事では、Docker Composeを使用してUbuntu 22.04にLaravelアプリケーションをインストールおよびデプロイする方法を説明します。手順を1つずつ説明していくことで、安全で最適化された本番環境を簡単に構築できます。.
0 株式
0
0
0
0

Ubuntu 22.04 に Docker Compose を使用して Laravel をインストールしてセットアップする方法は?

この実用的かつ技術的なガイドでは、アプリケーションのインストールと構成のプロセスを段階的に説明します。 ララベル 使用 Dockerコンポーズ サーバー上 ウブントゥ 22.04 この記事の目的は、開発者、DevOps チーム、技術マネージャーが安全でスケーラブルかつ保守可能な運用環境を構築するための繰り返し可能なガイドラインを提供することです。.

初期チェックリスト

始める前に、次のものを準備してください。

  • サーバー ウブントゥ 22.04 ルートアクセスまたはsudo権限を持つユーザー
  • ドッカー (安定版)と Dockerコンポーズ (または docker compose プラグインを使用する)
  • 開いているポート: 80/443 ウェブ用(必要な場合) 3306 または 5432 データベース用(IPに限定することが望ましい)
  • 十分なディスク容量(SSDを推奨)と、 85か所 クラウドサービスを使用する場合はグローバル
  • ドメイン名とサーバーIPを指すDNSレコード

Ubuntu 22.04にDockerとDocker Composeをインストールする

サーバー上で次のコマンドを実行して、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 --version
docker compose version

提案されたプロジェクト構造

メンテナンスと開発を容易にするために、プロジェクト フォルダーを次のように構成することをお勧めします。

  • プロジェクトルート/
    • ドッカー/
      • nginx/default.conf
      • PHP/Dockerファイル
    • ソース/ — Laravel コード(またはマウント)
    • docker-compose.yml
    • .env

PHP-FPM (PHP 8.1) に推奨される Dockerfile

パスを持つファイル 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 アプリケーション、Web サーバー、データベース、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)

リクエストを PHP-FPM (アプリ) にルーティングするための Nginx 構成の例:

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

PHP コンテナ内で Composer および Artisan コマンドを実行するには:

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

Docker用の.envファイルの設定

docker-compose と互換性のある .env 構成の例:

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 — 2つの簡単な方法

HTTPS を有効にするには、次の 2 つの簡単な方法があります。

  • ホスト上で Certbot を使用する: Nginxを一時的に停止し、発行された証明書をフォルダに配置します ./証明書 コンテナにマウントします。.
  • 自動化ソリューションの使用: 次のようなツール 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から 再起動: 停止しない限り 使用済みです。必要に応じて、docker-compose 用の systemd ユニットを作成できます。.

実用的なセキュリティのヒント

  • PHPコンテナで非rootユーザーを使用する(アプリユーザー 上記のDockerfile内)
  • ファイアウォール (UFW) を使用してデータベース ポートへのアクセスを制限する:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

その他の推奨事項:

  • データベースボリュームの定期的なバックアップ(db_データ)をサーバーの外部に保存する
  • HTTPSとHSTSの有効化
  • シークレットまたはキー管理サービスを使用してパスワードを保存する(Docker シークレットまたはキー管理サービス)
  • 次のようなセキュリティツールを使用する 失敗2禁止 そして、WAFが必要な場合は モッドセキュリティ
  • トラフィックを保護するためにCDNまたはアンチDDoSサービスを使用する

実稼働環境のパフォーマンス最適化

  • OPcacheを有効にする php.ini:
    opcache.memory_consumption=256
    opcache.validate_timestamps=0
  • php-fpm(pm = dynamicまたはondemand)の設定と増加 最大子供数 サーバーのメモリによると
  • キャッシュとセッションにRedisを使用する
  • 静的ファイルにCDNを使用する
  • 水平スケーリング: ロードバランサー (NGINX または HAProxy) を使用してアプリ サービスの複数のインスタンスを実行する
  • リアルタイムとキューには別々のワーカーとスーパーバイザーまたはサービスを使用します。

キューワーカーとホライゾン

キューワーカーを実行するために、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か所 そうですよ。.
  • ゲーマーやトレーダーの場合は、ping が低く、BGP ネットワークが最適化された場所を選択してください。.
  • AI 処理とレンダリングには GPU 搭載サーバーを使用します。.
  • DDoS に抵抗するには、Anti-DDoS 保護機能を備えたサーバーと CDN を使用します。.

バックアップ、監視、ログ

  • コンテナログ dockerログ アクセス可能です。集中集約には ELK または Prometheus+Grafana を使用します。.
  • 毎日のデータベースバックアップと定期的な復元テスト
  • CI/CD における CPU/RAM リソース、アプリケーション、エラー追跡の監視

一般的なデバッグ

  • 502 不正ゲートウェイエラー: php-fpmがアプリケーションコンテナ内で実行されていること、fastcgi_passが正しいアドレスに設定されていることを確認します(アプリ:9000)を指摘します。.
  • データベース接続の問題: .env 変数、docker ネットワーク、および MySQL ログを確認します。.
  • ファイルの権限: 権限エラーが発生した場合は、ストレージおよびブートストラップ/キャッシュ フォルダの所有権を設定します。
sudo chown -R 1000:1000 src/storage src/bootstrap/cache

結論と最終勧告

Ubuntu 22.04でDocker Composeを使用してLaravelを実行すると、開発とデプロイメントがシンプルになり、繰り返し実行が可能になり、スケーラブルになります。このガイドに従うことで、安全で高速、そしてメンテナンス性に優れた本番環境を構築できます。 PHP-FPMとNginx、MySQL/MariaDB または PostgreSQL、キャッシュとキュー用の Redis、SSL 設定と監視。.

関連サービス

このアーキテクチャを専門的に実装するには、次のサービスを使用できます。

  • より多い 世界85か所 遅延を減らし、サーバーをユーザーまたは宛先に近づける
  • AIコンピューティングとレンダリングのためのグラフィックスサーバー(GPU)
  • 低pingと最適化されたBGPネットワークを備えた取引用VPS
  • 低pingとアンチDDoSを備えたゲーミングVPS
  • ホスティングおよびドメイン登録サービス、CDN、ネットワークおよびBGPソリューション
  • 高性能クラウドサーバーとマネージドバックアップ

よくある質問

あなたも気に入るかもしれない
Ubuntu 24.04 に Cockpit をインストールする方法

Ubuntu 24.04にCockpitをインストールする方法

Cockpit は、サービス、ストレージ、ログ、ユーザーをシンプルでグラフィカルな方法で監視・管理できる、Web ベースのサーバー管理パネルです。VPS で Cockpit を使用すると、システム管理者はコマンドラインを使わずに多くのサーバー管理タスクを実行できます。以下では、Cockpit のインストール、セキュリティ設定、そしてアクセス方法について順を追って説明します。.
MikroTikまたはUbuntuへのさまざまなタイプのMikroTikトンネルの設定 - 機能、セキュリティ、速度

MikroTikまたはUbuntuへのさまざまなタイプのMikroTikトンネルの設定 - 機能、セキュリティ、速度

この記事では、MikroTikとMikroTik、そしてUbuntu間のトンネル設定に関する完全なガイドを提供します。トンネルの種類を解説し、セキュリティとパフォーマンスを比較し、速度とセキュリティを最適化するための実用的なヒントを提供します。ネットワーク管理者、トレーダー、ゲーマーに最適です。.