開発者ドキュメント

DockerComposeでDrupalをインストールする方法

著者は、 Write for DOnations プログラムの一環として、国連財団を選択して寄付を受け取りました。

このチュートリアルの元のWordPressバージョンは、 KathleenJuellによって作成されました。

序章

Drupal は、 PHP で記述され、オープンソースの GNU General Public Licenseの下で配布されるコンテンツ管理システム(CMS)です。 世界中の人々や組織がDrupalを使用して、政府のサイト、個人のブログ、企業などに電力を供給しています。 Drupalが他のCMSフレームワークと異なる点は、成長するコミュニティと、安全なプロセス、信頼性の高いパフォーマンス、モジュール性、適応する柔軟性などの一連の機能です。

Drupalでは、 LAMP (Linux、Apache、MySQL、およびPHP)または LEMP (Linux、Nginx、MySQL、およびPHP)スタックをインストールする必要がありますが、個々のコンポーネントのインストールには時間がかかります。タスク。 DockerDockerCompose などのツールを使用して、Drupalのインストールプロセスを簡素化できます。 このチュートリアルでは、Dockerイメージを使用してDockerコンテナー内に個々のコンポーネントをインストールします。 Docker Composeを使用することで、データベース、アプリケーション、およびそれらの間のネットワーク/通信用の複数のコンテナーを定義および管理できます。

このチュートリアルでは、Docker Composeを使用してDrupalをインストールし、コンテナー化を利用してDrupalWebサイトをサーバーにデプロイできるようにします。 MySQL データベース、 Nginx Webサーバー、およびDrupalのコンテナーを実行します。 また、サイトに関連付けたいドメインのLet’sEncryptを使用してTLS/ SSL証明書を取得することにより、インストールを保護します。 最後に、 cronジョブを設定して証明書を更新し、ドメインのセキュリティを維持します。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—Webサーバー構成の定義

コンテナを実行する前に、NginxWebサーバーの構成を定義する必要があります。 構成ファイルには、Drupal固有のロケーションブロックと、証明書の自動更新のためにLet’sEncryptの検証要求をCertbotクライアントに送信するロケーションブロックが含まれます。

まず、Drupalセットアップ用のプロジェクトディレクトリを作成しましょう。 drupal:

  1. mkdir drupal

新しく作成したディレクトリに移動します。

  1. cd drupal

これで、構成ファイル用のディレクトリを作成できます。

  1. mkdir nginx-conf

nanoまたはお気に入りのテキストエディタでファイルを開きます。

  1. nano nginx-conf/nginx.conf

このファイルでは、サーバー名とドキュメントルートのディレクティブを含むサーバーブロックと、証明書、PHP処理、静的アセットリクエストに対するCertbotクライアントのリクエストを送信するロケーションブロックを追加します。

次のコードをファイルに追加します。 必ず交換してください your_domain あなた自身のドメイン名で:

〜/ drupal / nginx-conf / nginx.conf
server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;

    index index.php index.html index.htm;

    root /var/www/html;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass drupal: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;
    }

    location = /favicon.ico { 
        log_not_found off; access_log off; 
    }
    location = /robots.txt { 
        log_not_found off; access_log off; allow all; 
    }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

サーバーブロックには、次の情報が含まれています。

ディレクティブ:

ロケーションブロック:

FastCGIプロキシの詳細については、NginxでのFastCGIプロキシの理解と実装を参照してください。 サーバーとロケーションブロックの詳細については、Nginxサーバーとロケーションブロックの選択アルゴリズムについてを参照してください。

編集が終了したら、ファイルを保存して閉じます。

Nginx構成が整ったら、実行時にアプリケーションとデータベースコンテナーに渡す環境変数の作成に進むことができます。

ステップ2—環境変数を定義する

Drupalアプリケーションには、サイトに関連する情報を保存するためのデータベース(MySQL、PostgresSQLなど)が必要です。 Drupalコンテナーは、データベース(MySQL)コンテナーにアクセスするために、実行時に特定の環境変数にアクセスする必要があります。 これらの変数にはデータベースのクレデンシャルなどの機密情報が含まれているため、Docker Composeファイル(コンテナの実行方法に関する情報を含むメインファイル)で直接公開することはできません。

に敏感な値を設定することを常にお勧めします .env ファイルし、その循環を制限します。 これにより、これらの値がプロジェクトリポジトリにコピーされ、公開されるのを防ぐことができます。

メインプロジェクトディレクトリで、 ~/drupal、というファイルを作成して開きます .env:

  1. nano .env

次の変数をに追加します .env ファイル、強調表示されたセクションを使用する資格情報に置き換えます。

〜/ drupal / .env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=drupal
MYSQL_USER=drupal_database_user
MYSQL_PASSWORD=drupal_database_password

これで、MySQLルート管理者アカウントのパスワードと、アプリケーションデータベースの優先ユーザー名とパスワードが追加されました。

私たちの .env ファイルには機密情報が含まれているため、プロジェクトに含めることを常にお勧めします .gitignore.dockerignore GitリポジトリとDockerイメージに追加されないようにファイルを作成します。

バージョン管理のためにGitを使用する場合は、現在の作業ディレクトリをリポジトリとして初期化します git init:

  1. git init

開ける .gitignore ファイル:

  1. nano .gitignore

以下を追加します。

〜/ drupal / .gitignore
.env

ファイルを保存して終了します。

同様に、 .dockerignore ファイル:

  1. nano .dockerignore

次に、以下を追加します。

〜/ drupal / .dockerignore
.env
.git

ファイルを保存して終了します。

クレデンシャルを環境変数として保護するための対策を講じたので、次のステップであるサービスを定義することに移りましょう。 docker-compose.yml ファイル。

ステップ3—DockerComposeを使用したサービスの定義

Docker Composeは、マルチコンテナーDockerアプリケーションを定義および実行するためのツールです。 YAMLファイルを定義して、アプリケーションのサービスを構成します。 DockerComposeのserviceは実行中のコンテナーであり、Composeを使用すると、これらのサービスを共有ボリュームおよびネットワークとリンクできます。

Drupalアプリケーション、データベース、およびWebサーバー用にさまざまなコンテナーを作成します。 これらに加えて、Webサーバーの証明書を取得するためにCertbotを実行するコンテナーも作成します。

作成する docker-compose.yml ファイル:

  1. nano docker-compose.yml

次のコードを追加して、ファイルの作成バージョンを定義します。 mysql データベースサービス:

〜/ drupal / docker-compose.yml
version: "3"

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal

これらのすべての構成オプションを1つずつ見ていきましょう。 mysql サービス:

私たちは mysql サービス定義なので、今度はの定義を追加しましょう drupal ファイルの最後までのアプリケーションサービス:

〜/ drupal / docker-compose.yml
...
  drupal:
    image: drupal:8.7.8-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html

このサービス定義では、コンテナに名前を付け、再起動ポリシーを定義しています。 mysql サービス。 このコンテナに固有のオプションもいくつか追加しています。

次に、Nginxサービス定義を追加しましょう drupal サービス定義:

〜/ drupal / docker-compose.yml
...
  webserver:
    image: nginx:1.17.4-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external

繰り返しになりますが、コンテナーに名前を付け、開始順にDrupalコンテナーに依存するようにしています。 また、アルパインイメージ( 1.17.4-alpine Nginxイメージ)も使用しています。

このサービス定義には、次のオプションも含まれています。

最後に、最後のサービス定義を追加します certbot サービス。 必ず交換してください sammy@your_domainyour_domain あなた自身の電子メールとドメイン名で:

〜/ drupal / docker-compose.yml
...
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --staging -d your_domain -d www.your_domain

この定義は、DockerHubからcertbot /certbotイメージをプルするようにComposeに指示します。 また、名前付きボリュームを使用して、ドメイン証明書やキー入力などのリソースをNginxコンテナと共有します certbot-etc およびアプリケーションコード drupal-data.

私たちも使用しました depends_on 確認するために certbot コンテナは webserver サービスが実行されています。

何も指定していません networks これは、このコンテナがネットワークを介してどのサービスとも通信しないためです。 名前付きボリュームを使用してマウントしたドメイン証明書とキーを追加するだけです。

また、 command コンテナのデフォルトで実行するサブコマンドを指定するオプション certbot 指図。 Certbotクライアントは、証明書を取得およびインストールするためのプラグインをサポートしています。 私たちは使用しています webroot 含めることによって証明書を取得するプラグイン certonly--webroot コマンドラインで。 プラグインと追加コマンドの詳細については、公式のCertbotドキュメントをご覧ください。

後に certbot サービス定義、ネットワークとボリュームの定義を追加します。

〜/ drupal / docker-compose.yml
...
networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:
  certbot-etc:

トップレベル networks キーを使用すると、作成するネットワークを指定できます。 networks 同じDockerデーモンホスト上にあるため、すべてのポートのサービス/コンテナー間での通信を許可します。 2つのネットワークを定義しました。 internalexternal、の通信を確保するために webserver, drupal、 と mysql サービス。

The volumes キーは、名前付きボリュームを定義するために使用されます drupal-data, db-data、 と certbot-etc. Dockerがボリュームを作成すると、ボリュームのコンテンツはホストファイルシステム上のディレクトリに保存されます。 /var/lib/docker/volumes/、それはDockerによって管理されています。 次に、各ボリュームのコンテンツは、このディレクトリからボリュームを使用する任意のコンテナにマウントされます。 このようにして、コンテナ間でコードとデータを共有することが可能です。

完成した docker-compose.yml ファイルは次のようになります。

〜/ drupal / docker-compose.yml
version: "3"

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal
  
  drupal:
    image: drupal:8.7.8-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html
  
  webserver:
    image: nginx:1.17.4-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
  
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --staging -d your_domain -d www.your_domain

networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:
  certbot-etc:

サービスの定義は完了です。 次に、コンテナを起動して、証明書リクエストをテストしましょう。

ステップ4—SSL証明書とクレデンシャルを取得する

コンテナを次のように開始できます docker-compose up コマンド。指定した順序でコンテナを作成して実行します。 ドメインリクエストが成功すると、出力に正しい終了ステータスが表示され、適切な証明書がマウントされます。 /etc/letsencrypt/live Webサーバーコンテナ上のフォルダ。

コンテナをバックグラウンドで実行するには、 docker-compose up とのコマンド -d 国旗:

  1. docker-compose up -d

サービスが作成されたことを確認する同様の出力が表示されます。

Output
... Creating mysql ... done Creating drupal ... done Creating webserver ... done Creating certbot ... done

を使用してサービスのステータスを確認します docker-compose ps 指図:

  1. docker-compose ps

が表示されます mysql, drupal、 と webserver とのサービス StateUp、 その間 certbot で終了します 0 ステータスメッセージ:

Output
Name Command State Ports -------------------------------------------------------------------------- certbot certbot certonly --webroot ... Exit 0 drupal docker-php-entrypoint php-fpm Up 9000/tcp mysql docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp webserver nginx -g daemon off; Up 0.0.0.0:80->80/tcp

あなたが他のものを見たら Up の中に State の列 mysql, drupal、 また webserver サービス、または以外の終了ステータス 0 のために certbot コンテナの場合は、必ずサービスログを確認してください。 docker-compose logs 指図:

  1. docker-compose logs service_name

これで、証明書がにマウントされていることを確認できます。 webserver を使用したコンテナ docker-compose exec 指図:

  1. docker-compose exec webserver ls -la /etc/letsencrypt/live

これにより、次の出力が得られます。

Output
total 16 drwx------ 3 root root 4096 Oct 5 09:15 . drwxr-xr-x 9 root root 4096 Oct 5 09:15 .. -rw-r--r-- 1 root root 740 Oct 5 09:15 README drwxr-xr-x 2 root root 4096 Oct 5 09:15 your_domain

すべてが正常に実行されたので、編集できます certbot 削除するサービス定義 --staging 国旗。

を開きます docker-compose.yml ファイル、に移動します certbot サービス定義、および置換 --staging コマンドオプションのフラグ --force-renewal フラグ。これは、既存の証明書と同じドメインを持つ新しい証明書を要求することをCertbotに通知します。 更新された certbot 定義は次のようになります。

〜/ drupal / docker-compose.yml
...
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --force-renewal -d your_domain -d www.your_domain
...

実行する必要があります docker-compose up もう一度作成するには certbot 容器。 また、 --no-deps Composeに開始をスキップできることを通知するオプション webserver サービス、すでに実行されているため:

  1. docker-compose up --force-recreate --no-deps certbot

証明書要求が成功したことを示す出力が表示されます。

Output
Recreating certbot ... done Attaching to certbot certbot | Saving debug log to /var/log/letsencrypt/letsencrypt.log certbot | Plugins selected: Authenticator webroot, Installer None certbot | Renewing an existing certificate certbot | Performing the following challenges: certbot | http-01 challenge for your_domain certbot | http-01 challenge for www.your_domain certbot | Using the webroot path /var/www/html for all unmatched domains. certbot | Waiting for verification... certbot | Cleaning up challenges certbot | IMPORTANT NOTES: certbot | - Congratulations! Your certificate and chain have been saved at: certbot | /etc/letsencrypt/live/your_domain/fullchain.pem certbot | Your key file has been saved at: certbot | /etc/letsencrypt/live/your_domain/privkey.pem certbot | Your cert will expire on 2020-01-03. To obtain a new or tweaked certbot | version of this certificate in the future, simply run certbot certbot | again. To non-interactively renew *all* of your certificates, run certbot | "certbot renew" certbot | - Your account credentials have been saved in your Certbot certbot | configuration directory at /etc/letsencrypt. You should make a certbot | secure backup of this folder now. This configuration directory will certbot | also contain certificates and private keys obtained by Certbot so certbot | making regular backups of this folder is ideal. certbot | - If you like Certbot, please consider supporting our work by: certbot | certbot | Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate certbot | Donating to EFF: https://eff.org/donate-le certbot | certbot exited with code 0

証明書が正常に生成されたので、Nginx構成を更新してSSLを含めることができます。

手順5—Webサーバーの構成とサービス定義を変更する

NginxにSSL証明書をインストールした後、すべてのHTTPリクエストをHTTPSにリダイレクトする必要があります。 また、SSL証明書とキーの場所を指定し、セキュリティパラメータとヘッダーを追加する必要があります。

あなたが再作成しようとしているので webserver これらの追加を含めるサービスは、今すぐ停止できます。

  1. docker-compose stop webserver

これにより、次の出力が得られます。

Output
Stopping webserver ... done

次に、前に作成したNginx構成ファイルを削除しましょう。

  1. rm nginx-conf/nginx.conf

ファイルの別のバージョンを開きます。

  1. nano nginx-conf/nginx.conf

次のコードをファイルに追加して、HTTPをHTTPSにリダイレクトし、SSLクレデンシャル、プロトコル、およびセキュリティヘッダーを追加します。 交換することを忘れないでください your_domain あなた自身のドメインで:

〜/ drupal / nginx-conf / nginx.conf
server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;

    location ~ /.well-known/acme-challenge {
        allow all;
        root /var/www/html;
    }

    location / {
        rewrite ^ https://$host$request_uri? permanent;
    }
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name your_domain www.your_domain;

    index index.php index.html index.htm;

    root /var/www/html;

    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass drupal: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;
    }

    location = /favicon.ico {
        log_not_found off; access_log off;
    }
    location = /robots.txt {
        log_not_found off; access_log off; allow all;
    }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

HTTPサーバーブロックは、Certbot更新要求のwebrootプラグインを指定します。 .well-known/acme-challenge ディレクトリ。 また、 rewrite ルートディレクトリへのHTTPリクエストをHTTPSに転送するディレクティブ。

HTTPSサーバーブロックは sslhttp2. HTTP / 2がHTTPプロトコルを反復処理する方法と、それがWebサイトのパフォーマンスにもたらすメリットの詳細については、 Ubuntu18.04でHTTP/2サポートを使用してNginxをセットアップする方法の概要を参照してください。

これらのブロックはSSLを有効にします。これは、SSL証明書とキーの場所、および推奨されるヘッダーが含まれているためです。 これらのヘッダーにより、 SSLLabsおよびSecurityHeadersサーバーテストサイトでAの評価を取得できます。

私たちの rootindex ステップ1で説明したDrupal固有のロケーションブロックの残りの部分と同様に、ディレクティブもこのブロックに配置されます。

更新されたNginx構成ファイルを保存して閉じます。

再作成する前に webserver コンテナ、追加する必要があります 443 私たちへのポートマッピング webserver SSL証明書を有効にしたためのサービス定義。

を開きます docker-compose.yml ファイル:

  1. nano docker-compose.yml

で次の変更を行います webserver サービス定義:

〜/ drupal / docker-compose.yml
...
  webserver:
    image: nginx:1.17.4-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
...

SSL証明書を有効にした後、 docker-compose.yml 次のようになります。

〜/ drupal / docker-compose.yml
version: "3"

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    env_file: .env
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - internal
  
  drupal:
    image: drupal:8.7.8-fpm-alpine
    container_name: drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
      - external
    volumes:
      - drupal-data:/var/www/html
  
  webserver:
    image: nginx:1.17.4-alpine
    container_name: webserver
    depends_on:
      - drupal
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - drupal-data:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - certbot-etc:/etc/letsencrypt
    networks:
      - external
  
  certbot:
    depends_on:
      - webserver
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - drupal-data:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email sammy@your_domain --agree-tos --no-eff-email --force-renewal -d your_domain -d www.your_domain

networks:
  external:
    driver: bridge
  internal:
    driver: bridge

volumes:
  drupal-data:
  db-data:
  certbot-etc:

ファイルを保存して閉じます。 を再現しましょう webserver 更新された構成によるサービス:

  1. docker-compose up -d --force-recreate --no-deps webserver

これにより、次の出力が得られます。

Output
Recreating webserver ... done

でサービスを確認してください docker-compose ps:

  1. docker-compose ps

が表示されます mysql, drupal、 と webserver としてのサービス Up その間 certbot で終了します 0 ステータスメッセージ:

Output
Name Command State Ports -------------------------------------------------------------------------- certbot certbot certonly --webroot ... Exit 0 drupal docker-php-entrypoint php-fpm Up 9000/tcp mysql docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp webserver nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

これで、すべてのサービスが実行され、Webインターフェイスを介してDrupalのインストールを進めることができます。

ステップ6—Webインターフェイスを介したインストールの完了

DrupalのWebインターフェイスからインストールを完了しましょう。

Webブラウザーで、サーバーのドメインに移動します。 代用することを忘れないでください your_domain ここにあなた自身のドメイン名があります:

https://your_domain

使用する言語を選択します。

保存して続行をクリックします。 インストールプロファイルページに移動します。 Drupalには複数のプロファイルがあるため、標準プロファイルを選択し、保存して続行をクリックします。

プロファイルを選択したら、データベース構成ページに進みます。 データベースタイプをMySQL、MariaDB、Percona Server、または同等のとして選択し、データベース名ユーザー名、およびパスワードの値を入力します対応する値から MYSQL_DATABASE, MYSQL_USER、 と MYSQL_PASSWORD それぞれで定義されています .env 手順2のファイル。 詳細オプションをクリックし、ホストの値を mysql サービスコンテナ。 [保存して続行]をクリックします。

データベースを構成した後、Drupalのデフォルトのモジュールとテーマのインストールを開始します。

サイトがインストールされると、サイト名、電子メール、ユーザー名、パスワード、および地域設定を構成するためのDrupalサイトセットアップページが表示されます。 情報を入力し、保存して続行をクリックします。

保存して続行をクリックすると、 Drupalへようこそページが表示され、Drupalサイトが正常に稼働していることが示されます。

Drupalのインストールが完了したので、SSL証明書が自動的に更新されることを確認する必要があります。

ステップ7—証明書の更新

Let’s Encryptの証明書は90日間有効なので、証明書が失効しないように自動更新プロセスを設定する必要があります。 これを行う1つの方法は、 cron スケジューリングユーティリティ。 この場合、作成します cron 証明書を更新し、Nginx構成をリロードするスクリプトを定期的に実行するジョブ。

を作成しましょう ssl_renew.sh 証明書を更新するためのファイル:

  1. nano ssl_renew.sh

次のコードを追加します。 ディレクトリ名をroot以外のユーザーに置き換えることを忘れないでください。

〜/ drupal / ssl_renew.sh

#!/bin/bash

cd /home/sammy/drupal/
/usr/local/bin/docker-compose -f docker-compose.yml run certbot renew --dry-run && \
/usr/local/bin/docker-compose -f docker-compose.yml kill -s SIGHUP webserver

このスクリプトは次のように変更されます ~/drupal プロジェクトディレクトリと以下を実行します docker-compose コマンド。

次のコマンドを実行して、ファイルを閉じて実行可能にします。

  1. sudo chmod +x ssl_renew.sh

次に、 root 指定された間隔で更新スクリプトを実行するためのcrontabファイル:

  1. sudo crontab -e

このファイルを初めて編集する場合は、次のコマンドでファイルを開くためのテキストエディタを選択するように求められます。

Output
no crontab for root - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]: ...

ファイルの最後に、次の行を追加して、 sammy あなたのユーザー名で:

crontab
...
*/5 * * * * /home/sammy/drupal/ssl_renew.sh >> /var/log/cron.log 2>&1

これにより、ジョブ間隔が5分ごとに設定されるため、更新要求が意図したとおりに機能したかどうかをテストできます。 ログファイルも作成しました。 cron.log、ジョブからの関連する出力を記録します。

5分後、 tail チェックするコマンド cron.log 更新要求が成功したかどうかを確認するには、次のようにします。

  1. tail -f /var/log/cron.log

更新が成功したことを確認する出力が表示されます。

Output
** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/your_domain/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

プレス CTRL+C やめるには tail 処理する。

これで、crontabファイルを変更して、週の2日ごとの午前2時にスクリプトを実行できるようになりました。 crontabの最終行を次のように変更します。

crontab
...
* 2 * * 2 /home/sammy/drupal/ssl_renew.sh >> /var/log/cron.log 2>&1

終了してファイルを保存します。

それでは、を削除しましょう --dry-run からのオプション ssl_renew.sh 脚本。 まず、それを開きます:

  1. nano ssl_renew.sh

次に、内容を次のように変更します。

〜/ drupal / ssl_renew.sh
#!/bin/bash

cd /home/sammy/drupal/
/usr/local/bin/docker-compose -f docker-compose.yml run certbot renew && \
/usr/local/bin/docker-compose -f docker-compose.yml kill -s SIGHUP webserver

私たちの cron ジョブは、SSL証明書が適格になったときに更新することにより、SSL証明書の有効期限を処理します。

結論

このチュートリアルでは、Docker Composeを使用して、NginxWebサーバーでDrupalインストールを作成しました。 このワークフローの一環として、Drupalサイトに関連付けたいドメインのTLS / SSL証明書を取得し、必要に応じてこれらの証明書を更新するためのcronジョブを作成しました。

Dockerについて詳しく知りたい場合は、Dockerトピックページをご覧ください。

モバイルバージョンを終了