[Laravel] Class ‘DOMDocument’ not found 対処法

OSSのCMSを試していたら以下のエラーに直面したので覚え書き。

足りないPHPモジュールを追加して

Apacheを再起動したら直った。

参考サイト

php – Class ‘DOMDocument’ not found – Stack Overflow
https://stackoverflow.com/questions/14395239/class-domdocument-not-found

[Unix] シェルで日本語の表示・コピペを可能にする

自分はサーバーにシェルでログインして、vimでファイルを開いて日本語を直で入力するなんてことはしない。どうしても日本語をいじりたい場合には、ローカルマシンの使い慣れたIMEで入力した日本語をシェルの画面上でコピペする。

だけど、もし日本語をコピペすると壊れた文字が入るような場合には、ターミナルの環境変数を変更する以下の通り必要あり。

参考サイト

CentOS7・日本語の文字化け
http://www.ajisaba.net/linux/centos7/character_corruption.html

[WordPress] アップデート時にFTP情報を求められる場合の対処法

まずはファイルのパーミッションの確認。Webブラウザ経由でファイルを更新するので、Webブラウザの実行ユーザがファイルを更新できなければならない。

パーミッションに問題が無ければ、wp-config.phpの末尾に以下の行を追加すれば解決する、たぶん。

参考サイト

Editing wp-config.php | WordPress.org
https://wordpress.org/support/article/editing-wp-config-php/

[WordPress] xmlrpc.phpは何をしているのか

仕事柄毎日一定時間以上はアクセスログを眺めているが、WordPressサイトで攻撃を受けやすいファイルの1つにxmlrpc.phpがある。このファイルはどんな機能を担っているのだろうか。今更ながら予備知識を入れておく。

xmlrpc.phpの役割

その名の通り、XML-RPC経由でAPIを提供している。XML-RPCは、エンコードにXML形式、転送にHTTPを採用した、RPC (Remote Procedure Call)のプロトコル。XML-RPCのプロトコルでxmlrpc.phpを叩くことでAPIをコールすることができる。

具体的にどんなAPIが提供されているかは、公式サイトに説明ページがある。WordPress独自のAPIに加えて、他ブログシステムのAPIもサポートしているようだ。

XML-RPC WordPress API « WordPress Codex
https://codex.wordpress.org/XML-RPC_WordPress_API

xmlrpc.phpは必要か?

自分のサイトには必要無し。だって、外部からサイトを操作したりデータを取得することはないから。

というわけでブロックしとく

[AWS] EC2/CWAgentでカスタムメトリックスを収集する

CloudWatchで参照できるEC2のメトリックスには、メモリ使用量やボリュームの空き容量など、自分が欲しい情報が含まれていない。これらは、対象のEC2インスタンスでCloudWatchエージェントを実行して、カスタムメトリックスとして取得しなければならない。

以下、CloudWatchエージェントのセットアップの覚え書き。

CloudWatchエージェントのインストール

CloudWatchエージェント設定ファイルの作成

AWS CloudWatch Agent Configuration Managerを使って対話的に作成することができるが、

JSON形式の書式が分かっていれば、エディタで作成することも可能だ。

IAMロールの作成

IAM Management Console

  • Roles
  • [Create role]
  • Select type of trusted entity: AWS service
  • Choose a use case: EC2
  • [Next: Permissions]
  • [*] CloudWatchAgentServerPolicy
  • [Next: Tags]
  • Add tags (optional):
  • [Next: Review]
  • Review
  • Role name: CloudWatchAgentServerRole
  • Role description:
  • Trusted entities: – AWS service: ec2.amazonaws.com
  • Policies: CloudWatchAgentServerPolicy
  • Permissions boundary: Permissions boundary is not set
  • [Create role]

EC2へのIAMロールのアタッチ

EC2 Instances

  • 対象のEC2インスタンスを選択
  • Actions>Security>Modify IAM role
  • IAM role: CloudWatchAgentServerRole
  • [Save]

CloudWatchエージェントの起動

実行されているか確認

これでClouwWatchエージェントは稼働するようになったので、CloudWatchにメトリックスが送られてきているか確認する。

CloudWatch

  • Metrics>All metrics
  • Custom Namespaces
  • CWAgent

参考サイト

CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集するhttps://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

CloudWatch エージェントにより収集されるメトリクス
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html

新しいCloudWatch AgentでEC2インスタンスのメモリ使用率を監視する – Qiita
https://qiita.com/hayao_k/items/d983177510b3b3a69561

[ソフト] PostmanからWSL2内のサーバーにアクセスできない

WSL2のUbuntu 20.04 LTSでLAMP環境を作ってウェブアプリケーションをセットアップ。Windowsのブラウザからのアクセスは問題ないけど、Postmanからアクセスすると Error: connect ECONNREFUSED 127.0.0.1:80 のエラーとなる。

散々自分の環境を疑ったけど原因と思しき点は見つからず。

Postmanのコミュニティにあたったら、既に報告されていた。

Error: connect ECONNREFUSED 127.0.0.1:443 – Just getting started – Postman
https://community.postman.com/t/error-connect-econnrefused-127-0-0-1-443/18698

Issueも立っていたので、近い将来解決されることを期待したい。

WSL2, Error: connect ECONNREFUSED 127.0.0.1:80 with Postman, however cUrl returns HTTP200 · Issue #9981 · postmanlabs/postman-app-support · GitHub
https://github.com/postmanlabs/postman-app-support/issues/9981

[Apache] SSL証明書のパスフレーズ入力を省略する

依頼を受けてサーバー構築。SSL証明書が提供されたのでApacheに設定して再起動したら、パスフレーズを聞いてきた。どうやら鍵ファイル作成がパスフレーズ付きで行われたらしい。

依頼元からパスフレーズは教えてもらったけど、Apacheを再起動する度にパスフレーズを入力するのは避けたい。無人でサーバーマシンがリブートされたような場合にApacheが自動起動しないのでは困る。

パスフレーズの入力を省略(自動化)するために、参考サイトの手順に倣って設定する。以下覚え書き。

参考サイト

SSL使用時にApacheの再起動時で必要なパスワードの入力を省略 – Qiita
https://qiita.com/yoshizaki_91/items/26b01edb577861fbcfe6

[Laravel] 常時SSL化する

LaravelのURL取得関数が常に https:// のURLを返すようにする。

参考サイト

Laravelを常時SSL化する(初心者向け) – Qiita
https://qiita.com/Yuhei_K/items/130c8353946b0397154c

LaravelのSSL化対策 │ Webty Staff Blog
https://webty.jp/staffblog/production/post-3209/

[Postfix] キュー操作、送信テストのコマンド

たまにしか使わないので備忘録。

ログファイル

キューの操作

現在のキューの一覧。

キューの削除。

全てのキューを削除。

キューを送信。

メール送信

sendmailを使う。

mailを使う。

telnetを使う。

参考サイト

Postfixのメールキューを確認、削除する方法 – Qiita
https://qiita.com/pb_tmz08/items/60c760d71da00fcf5d9b

[AWS] EC2/PostfixからAmazon SES経由でメール送信する

EC2にPostfixをインストールしてメールを送りたいのだけど、実はEC2からのメール送信(正確にはポート25のトラフィック)は制限されている。

よくある質問 – Amazon EC2 | AWS
https://aws.amazon.com/jp/ec2/faqs/#Are_there_any_limitations_in_sending_email_from_EC2_instances

Amazon Elastic Compute Cloud (EC2) では 2020年1月27日より、お客様やほかの受信者の皆さまをスパムやEメールの不正使用から守るために、デフォルトでポート25のEメールトラフィックを制限することになりました。ポート25は、Eメール送信用のデフォルトのSMTPポートとして広く使われています。過去にポート25スロットルをリクエストして、削除したことのあるAWSアカウントには、今回の変更による影響はありません。

では、EC2からメールを送信したければどうするか?

  • AWSにポート25の制限解除を申請する、あるいは
  • Amazon SES (Simple Email Service) を利用する

Amazon SESとは?

Amazon SES(高可用性で低価格なEメール送信サービス)| AWS
https://aws.amazon.com/jp/ses/

Amazon SES 料金:
Amazon Simple Email Service (SES) は、送受信される E メールの量に基づく従量制料金のサービスです。サブスクリプションや契約交渉、最低料金はありません。

AWS 無料利用枠:
Amazon EC2 または AWS Lambda 経由でホストされているアプリケーションから Amazon SES を呼び出した場合、月に 62,000 通のメッセージまでは無料で送信できます。この無料利用枠の有効期限はありません。

自分がメールを必要とするのは

  • ウェブアプリからの通知を受け取りたい (自分宛)
  • バッチプログラムの結果を受け取りたい (自分宛)

というわけで、1日にせいぜい10通程度のメールを自分が受け取るだけ。

Amazon SESの無料枠で充分そうなので、以下セットアップする。

  1. Amazon SESをセットアップする
  2. EC2のPostfixからAmazon SES経由でメール送信できるようにする

Amazon SESをセットアップする

(1) メアドのベリファイ

  • AWSコンソールのAmazon Simple Email Serviceにアクセス
  • Identity Management>Email Addresses
  • [Verify a New Email Address]をクリック
  • Email Address:にメアドを入力して[Verify This Email Address]をクリック
  • 入力したメアド宛てに確認メールが届くので、本文中のリンクをクリック
  • Verification Statusがpending verificationからverifiedに変わる

(2) サンドボックスについて

Email Sending>Sending Statistics をクリックすると以下の説明がある。

Your account details
Your Amazon SES account has “sandbox” access in region US West (N. California). When in the sandbox, you can only send email to the Amazon SES mailbox simulator and verified email addresses or domains. Request to be moved out of the sandbox by updating your account details. Learn more.
Can’t find your existing account settings? Your account may be set up in a different AWS region. Try switching regions in the top navigation bar.

「初期状態ではSESアカウントはサンドボックスアクセスになっていて、SESメールボックスシミュレータとベリファイ済みメアドにしかメール送信できない。サンドボックスを解除するには申請が必要」と言っているが、自分の場合は自分宛て(ベリファイ済みメアド)しかメールしないので、サンドボックスのままにしておく。

(3) SMTP設定

  • Email Sending>SMTP Settings
  • SMTP経由でメールを送るのに必要な情報が表示されるのでメモする
    Server Name: email-smtp.us-west-1.amazonaws.com
    Port: 25, 465 or 587
    Use Transport Layer Security (TLS): Yes
  • [Create My SMTP Credentials]をクリック
  • IAM User Nameを入力 (デフォルトのままでも可)
  • [Create]をクリック
  • SMTP UsernameとSMTP Passwordが作成されるのでメモする

EC2のPostfixからAmazon SES経由でメール送信できるようにする

公式サイトの手順をなぞる。

Amazon SES とPostfixの統合 – Amazon Simple Email Service Classic
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/postfix.html

sendmailをアンインストール (もしインストールされていたら)。

Postfixをインストール。

SASL認証パッケージをインストール。

後でテストとかバッチ処理で使うのでmailコマンドをインストール。

Postfixの設定 (メールサーバー: email-smtp.xxxxx は適宜変更)。

テスト送信 (自分から自分宛に送る)。

メール届いた (Gmailで受信)。ヘッダは以下の感じで、SPFもDKIMも設定されている。

参考サイト

Amazon SES とPostfixの統合 – Amazon Simple Email Service Classic
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/postfix.html

Postfixからの送信を全てSES経由に変更する – Qiita
https://qiita.com/fantasista_21jp/items/e227f802095a0049a8d0

【AWS】EC2インスタンスからPostfix + SESで外部へシステムメールを送信 | 電算星組
https://densan-hoshigumi.com/aws/aws-postfix-ses-send-email

[AWS] Amazon SES と Postfix を連携しメールを送付する
https://mseeeen.msen.jp/send-emails-by-linking-amazon-ses-and-postfix/

Amazon SESのSMTPエンドポイントを試してみた | DevelopersIO
https://dev.classmethod.jp/articles/sendmail-from-ses-smtpendpoint/

Amazon SESによるメール送信環境の構築と実践 | DevelopersIO
https://dev.classmethod.jp/articles/amazon-ses-build-and-practice/