使用Fargate构建WordPress,直到WordPress显示出来 ①

首先

由于在构建标题时遇到了困难,因此我将总结使用ECS(Fargate)容器服务构建WordPress的以下图示步骤。

S3用于将WordPress中保存的图片保存到S3上。
如果ECS停止使用,保存的媒体文件将被删除,
因此可以使用WordPress插件WP Offload Media Lite for Amazon S3进行保存。

完成建筑图

スクリーンショット 2022-11-23 14.19.00.png
undefined

准备前的工作

スクリーンショット 2022-03-28 23.04.09.png

 

undefined

对于以下内容,只需要一种中文本地化的解释:

流动或流淌中

    • ALBを設置

 

    • Route53を作成

 

    • Dockerfileを作成

 

    • ECRを作成

 

    • クラスターを作成

 

    • タスク定義を作成

 

    • サービスの作成

 

    • ↑今回の記事はここまで

ACM証明書を作成
ELBに証明書を設置
証明書を設置したCloudFrontを作成
Route53でCloudFrontへのルーティング設定
S3を作成し、Wordpressのプラグインで連携
CloudFrontで画像等のキャッシュ設定
キャッシュの確認

在中国设立ALB

スクリーンショット 2022-11-23 14.20.11.png
undefined

创建目标群体

スクリーンショット 2022-04-02 10.40.16.png

健康检查路径已设置为/wp-admin/install.php。
原因是WordPress的初始页面会变成URL:alb.xxxx.work/wp-admin/install.php。
如果健康检查路径为/,则会被标记为不健康并报错。

请在下面的待定事项中创建目标群体,不需要点击。

返回Road Planner的创建界面,并在其他方面选择默认选项进行创建。

ALB 的听众确认

スクリーンショット 2022-04-10 11.55.16.png

创建专为Fargate使用的安全组。

スクリーンショット 2022-04-10 10.44.10.png

修改RDS的安全组

スクリーンショット 2022-04-02 18.16.57.png

创建 Route53

スクリーンショット 2022-11-23 14.20.53.png

创建 Route53。
– 域名:xxxx.work
– 类型:公共主托管区

undefined

修改域名服务器信息的方法:使用お名前.com

undefined

音樂錄音的設置

使用Route53将自定义域名和ALB的DNS名称关联。
创建主机区xxxx.work的记录
– 记录名称:<空白>
– 记录类型:A
– 别名:选择
– 流量路由目标:ALB,东京区域,选择先前创建的ALB
– 路由策略:简单路由

スクリーンショット 2022-04-02 10.17.29.png

创建一个Dockerfile。

创建目录,并创建Dockerfile。

$ mkdir docker-wordpress
$ cd docker-wordpress
$ touch Dockerfile
FROM wordpress:5.8.1-php7.4-apache

RUN set -ex; \
    apt-get update && apt-get install -y \
        wget \
        unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# /usr/src/wordpress/wp-content/plugin にプラグインを置いておくと、ビルド時、ドキュメントルートに設置する
WORKDIR /usr/src/wordpress/wp-content/plugins

# プラグイン[WP Offload Media Lite for Amazon S3]をインストール
RUN set -ex; \
    wget -q -O amazon-s3-and-cloudfront.zip https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.1.4.3.zip \
    && unzip -q -o '*.zip' -d /usr/src/wordpress/wp-content/plugins \
    && chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins \
    && rm -f '*.zip'

# 所有者の変更
RUN chown -R www-data:www-data /var/www/html

WORKDIR /var/www/html

让我们各自安装所需的插件。

如果想要在Dockerfile中添加主题或其他内容。

如果您想要添加或修改自己的主题或php.ini文件,可以在Dockerfile中添加以下内容,并建议按照以下目录结构进行设置。

这只是一个例子。

FROM wordpress:5.8.1-php7.4-apache

RUN set -ex; \
    apt-get update && apt-get install -y \
        wget \
        unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# /usr/src/wordpress/wp-content/plugin にプラグインを置いておくと、ビルド時、ドキュメントルートに設置する
WORKDIR /usr/src/wordpress/wp-content/plugins
# プラグイン[WP Offload Media Lite for Amazon S3]をインストール

RUN set -ex; \
    wget -q -O amazon-s3-and-cloudfront.zip https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.1.4.3.zip \
    && unzip -q -o '*.zip' -d /usr/src/wordpress/wp-content/plugins \
    && chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins \
    && rm -f *.zip

# 所有者の変更
RUN chown -R www-data:www-data /var/www/html

+ COPY html /var/www/html
+ COPY .htaccess /var/www/html
+ COPY php.ini /usr/local/etc/php/conf.d
+ COPY security.conf /etc/apache2/conf-available

WORKDIR /var/www/html

本地目录结构是一个示例。只添加需要修正的文件和目录。不需要修改的文件和目录将保留原样,完全匹配wordpress:5.8.1-php7.4-apache。

.
├── Dockerfile
├── security.conf
├── .htaccess
├── html
│   ├── wp-config.php
│   └── wp-content
│       └── themes
│           └── themesの中身
└── php.ini

仓库和容器内的目录结构

如果没有特别指定,它将被安置在容器中的 /var/www/html 目录下。

HTML:/var/www/html
存储WordPress修复文件(文件夹结构遵循WordPress结构)。

wp-config.php使用的是这个源代码。

.htaccess文件是用于基于目录控制Web服务器的基本操作的。

php.ini:/usr/local/etc/php/php.ini是php的設定檔案。

安全.conf:/etc/apache2/conf-available/security.conf
apache的安全配置文件

您可以从以下链接下载最新的WordPress源代码。

Download

只需要将wp-config.php文件配置为适用于Docker,并使用以下文件。

https://github.com/docker-library/wordpress/blob/master/latest/php8.1/apache/wp-config-docker.php

如果需要作曲家

如果在使用aws-sdk等时需要composer,可以按照以下方式来使用composer并使用sdk。

FROM wordpress:5.8.1-php7.4-apache

RUN set -ex; \
    apt-get update && apt-get install -y \
        wget \
        unzip \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# /usr/src/wordpress/wp-content/plugin にプラグインを置いておくと、ビルド時、ドキュメントルートに設置する
WORKDIR /usr/src/wordpress/wp-content/plugins
# プラグイン[WP Offload Media Lite for Amazon S3]をインストール

RUN set -ex; \
    wget -q -O amazon-s3-and-cloudfront.zip https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.1.4.3.zip \
    && unzip -q -o '*.zip' -d /usr/src/wordpress/wp-content/plugins \
    && chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins \
    && rm -f '*.zip'

# 所有者の変更
RUN chown -R www-data:www-data /var/www/html

COPY html /var/www/html
COPY .htaccess /var/www/html
COPY php.ini /usr/local/etc/php/conf.d
COPY security.conf /etc/apache2/conf-available


+ ENV COMPOSER_ALLOW_SUPERUSER=1 \
+   COMPOSER_HOME=/composer

+ COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

+ RUN composer config -g process-timeout 3600 \
+   && composer config -g repos.packagist composer https://packagist.org \
+   && composer require aws/aws-sdk-php

创建IAM用户

在推送 Docker 镜像到 ECR 时,使用 CLI 命令行工具,所以请提前创建 IAM 用户并颁发访问密钥。
将 IAM 策略附加到 EC2InstanceProfileForImageBuilderECRContainerBuilds。

使用aws configure –profile命令设置访问密钥和机密密钥。

$ aws configure --profile fargate-wordpress
AWS Access Key ID [None]: ****************DMH2
AWS Secret Access Key [None]: ****************bHBU
Default region name [None]: ap-northeast-1
Default output format [None]:

// aws cli プロフィール変更
$ export AWS_DEFAULT_PROFILE=fargate-wordpress

在本地完成了CLI的设置。

创建ECR

在AWS的ECS控制台页面上,点击ECR的存储库。
创建存储库。
– 可见性设置:私有
– 存储库名称:wordpress(与docker-compose.yml中指定的镜像名称相同)
– 其他保持默认设置。

undefined
$ cd docker-wordpress

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [アカウントエイリアス12桁].dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

我成功登录了。

如果登录失败,请确认IAM用户的访问密钥ID和秘密访问密钥是否与以下信息匹配。
如果不匹配,请新建IAM用户访问密钥,然后修改“~/.aws/credentials“和“~/.aws/config“文件。

// profileの確認
$ cat ~/.aws/credentials
$ cat ~/.aws/config

// profileの確認
$ aws configure --profile fargate-wordpress
AWS Access Key ID [None]: ****************DMH2
AWS Secret Access Key [None]: ****************bHBU
Default region name [None]: ap-northeast-1
Default output format [None]:

// aws cli プロフィール変更
$ export AWS_DEFAULT_PROFILE=fargate-wordpress

继续执行推送命令。

$ docker build -t wordpress .

$ docker tag wordpress:latest [アカウントエイリアス12桁].dkr.ecr.ap-northeast-1.amazonaws.com/wordpress:latest

$ docker push [アカウントエイリアス12桁].dkr.ecr.ap-northeast-1.amazonaws.com/wordpress:latest
undefined

创建集群

スクリーンショット 2022-11-23 14.21.30.png

在ECS的控制台界面上,点击创建集群。

undefined
undefined

请填写集群名称并创建。

undefined

让我们启用CloudWatch容器洞察。

创建任务定义

undefined
undefined

他会以默认设置创建任务定义。

创建服务

undefined
    • 起動タイプ:FARGATE

タスク定義 ファミリー:wordpress-definition

タスク定義 リビジョン:1(latest)

プラットフォームのバージョン:1.4.0

クラスター:wordpress

サービス名:wordpress-service

タスク数の数:1

undefined
スクリーンショット 2022-04-10 12.05.06.png

如果您要创建一个全新的目标群体,请按照以下设置进行操作。

スクリーンショット 2022-04-10 12.10.31.png

当使用ELB对Fargate任务进行访问时,将通过端口80进行访问,并连接到任务内的Nginx上的端口80。

如果将ACM证书安装在ELB上,生产环境的监听器端口将可以选择HTTPS。

下一步是没有自动扩展的。

服务已经创建好了!

当访问URLhttp://xxxx.work时,出现了WordPress!

请务必选择语言后再进行下一步!安装WordPress后,URL将保存在http://.xxxx.work中的RDS上。
最终目标是,在访问URL:https://xxxx.work并进行语言设置后,安装WordPress。

undefined

如果没有显示,请尝试查看由Fargate产生并输出到CloudWatchLogs中的日志。

错误1 (Quotation mark necessary if it is a specific error code)

GET / HTTP/1.1" 302 362 "-" "ELB-HealthChecker/2.0"

这个负载均衡器的健康检查状态为不健康。
请重新确认elb、Fargate的安全组、ALB的目标组和Route53的设置。
如果您在お名前ドットコム上设置了域名服务器,可能需要相当长的时间才能生效。您可以等待一天尝试一下。
另外,还需要确认健康检查路径是否设置为/wp-admin/install.php。

错误②

MySQL Connection Error: (2002) Connection timed out

请确认Fargate与RDS的安全组是否配置正确,并检查是否已为RDS创建了WordPress的数据库,因为它们之间的连接存在问题。

终于WordPress出现了。暂时就到这里吧。
下次,我们将要做以下几件事:
– 创建CloudFront并实现HTTPS加密。

下一步,使用Fargate构建WordPress并进行HTTPS化。
Fargate和WordPress搭配使用,并与S3进行协作连接。

此外,这篇文章介绍了如何使用CodePipeline来实现ECS的滚动部署的方法。

在这篇文章中,我们介绍了Apache错误处理的方法。

请参考这篇文章。

・使用【AWS】中的ECR + ECS + RDS构建Docker环境的步骤
・通过使用Route53,在ALB+EC2的AWS环境中应用自定义域名的步骤
・将使用在お名前.com购买的域名在AWS的「Route 53」中使用的步骤
・部署WordPress的Docker镜像到ECS的步骤