AWSでWordPressのプラグインのインストール・アップデート

AWSで運用しているとWordPressのプラグインがインストール・アップデートできないって現象に見舞われるんですが、これはどうやら所有権の問題のようなのでその対処法を記載

まず、wp-config.phpに以下を追記。

define('FS_METHOD','direct');

これはFTPでエラーというのを防ぐためのもの。

続いてプラグインインストール・アップデート時のみwordpressディレクトリの所有権をrootに変更する。

chown -R root:root /home/wp

終わったら元に戻します。

chown -R user:user /home/wp

戻しておかないとWINSCPなどでアクセスできなくなっちゃいます。

超便利なWebminをAWSでも使う

まず、Webminをセットアップします。

で、デフォルトでは外部からアクセスできないので設定を変更します。rootでログインして、

vi /etc/webmin/miniserv.conf

を編集します。

最後の行の

allow=127.0.0.1

#allow=127.0.0.1

にして再起動

systemctl restart webmin

でアクセスできます。

アクセスしたら英語になってんので日本語にしましょ。

ここの設定をJapaneseに変えれば日本語になります。

キーボード入力の実装

キーボードの入力は直接もできるのですがここでは「プロジェクト設定」の「インプット」で行います。

こんな感じで

レベルBPで設定します。(動かすPlayerPawnでも記述できます。)

細かく見て行くと、BeginPlayで初期位置と向きを設定していて一旦位置を変数に格納してResetイベントが呼ばれたら初期値に戻すという仕様です。

次にキーのWが押されたら前進、Sが押されたら後退、Aが押されたら左、Dが押されたら右に移送する仕様です。ここで重要なのはForward(向き)を取り、ローカルで前進後退左右に移動しているという点です。

また、Z軸に左右回転とZ軸にUpDownと見上げる見下ろす処理も実装しています。

さらにこのままではゲームが終わらないのでESCキーを押されたらゲームが終了する処理も入れてます。

スプライトがプレイヤーのカメラ方向を常に向き、ふわふわ・くるくる。消えたり、現れたり

レベルにスプライト(平面)を置いて常にカメラを向く仕様を実装します。

まず、プレイヤーを作りますが

↑の手順でPawnで作成して作成したPawnのBlueprintをWクリックして開きます。

Collisionをつけてカメラもくっつけときます。collisionは当たりの判定用に使います。※追加したらコンパイルしておきましょう。

で、プロジェクト設定を開き

マップ&モードのDefaultGameModeの+を押し、NewGameModeを新たに作ります。

で、GameInstanceClassの+を押し、同様にNewGameInstanceを作り、選択したゲームモードのDefaultPawnClassに作成したPawnを指定します。

これでプレイヤーの設定は終わりです。

で、Blueprintsフォルダ内で右クリックしてブループリントクラスを作成して平面を置いておきます。


ブループリントクラスを作ります。クラスを作っただけで何もありません。


Actorを選択しときます。


Ghostって名前をつけました。これをWクリックして開きます。


平面を追加しておきます。


平面は回転x:90、y:0、z:-90にしておきましょう。

で、マテリアルを作ります。


できたマテリアルのBlueprintをWクリック


デフォルトはこんな感じ

こんな感じで作ります。LerpにAlphaって名前をつけてます。

Alphaの設定はこんな感じ。デフォルトは1です。

マテリアルを作ったら平面に貼ります。

こんな感じ。でこれが常にPlayerを向くようにします。

実装はこんな感じです。

ちなみにお化けなのでふわふわさせます。

こんな感じ。上下にふわふわしながらやや周回します。

まあ、これだけじゃ面白くないのでお化けに近づくとお化けが驚いて怒って逃げる(消える)ってのを実装します。

全体はこんな感じ。

詳しくはお化けのcollisionを350cmに設定しているので、playerがお化けのcollisionに触れて、お化けのダイナミックマテリアルの値が1ならテクスチャを差し替えるって事をします。

で、0.5秒後に怒った絵に差し替えて

2秒後にイベントが発生してタイムラインが動いて2秒でAlphaが0になって消えるって実装です。

ダイナミックマテリアルはコンストラクションスクリプトの中で設定しています。

で、何でAlphaが1か1以外かを見ているのかというと、消える2秒の間で再びお化けのcollisionに触れた場合に絵を差し替える処理をさせないためです。

ちなみにお化けのcollisionから出た場合は以下の処理になります。

またここでAlphaが0かどうかの判定がありますが、0なら10秒後に現れるんですが、でもお化けとPlayerの距離が350cm以上離れてないとAlphaが0から戻らないようにしています。

350cm以上はなれると再び2秒でAlphaが1に戻り姿を現します。

という感じ。

 

このアプリを動かしてみるにはこちらからダウンロードします。

キーボードの[W]で前進。[A]で左移動、[D]で右移動、[S]で後退、[Z]で左向き、[C]で右向き、[esc]で終了です。

新しく自分の作ったレベルでゲームができるように設定

新しく自分の作ったレベルでゲームができるように設定します。

まずはUE4エディタを起動しモバイルアプリでスターターパックあり(なしでもいいんですが、使えるものが多いのでありがいいかと…)

すると最初のレベルが表示されますが、これは今は使わないので「ルート」に新しいフォルダでも作って自分の作るコンテンツの名前にしてその中に「Blueprints」「Level(Map)」「Materials」「Sounds」「Textures」などわかり易い名前のフォルダを更に作ります。

まずは自分のLevelを作ります。

コンテンツブラウザ内のフォルダを開いてマウスの右クリックでメニューが出ますので「レベル」を選択して作成します。

こんな感じで何もないのでまず床など置いてみましょう。

「基本」「平面」をクリックして「平面」をドラッグしたままレベル(マップ)に置きます。右のアウトライナを見ると「Plane」が追加されてます。位置がメチャメチャなのでxyzとも0,0,0にしておきましょう。また大きさもデフォルトでは1mになってますので100mくらいにしておきましょう。(拡大縮小のところのxyを100でzは高さなのでそのまま)でも明かりがないのでまだ床も見えません。

次にライトを置いてみます。

「ライト」「ディレクショナリライト」をドラッグしてレベルにおきます。

でも何も見えないんですが、これは0,0,0の位置から床を見ているので何も見えないんです。右の「アウトライナ」の中の「Plane」をクリックして、表示中央の矢印「z軸」をクリックして少し下にずらします。そうですねz軸-100くらいにしましょうか。


すると床が見えました。

「編集」「プロジェクト設定」で「マップ&モード」で作成したレベルを設定すれば、エディタもゲームもこのレベルから始まります。

設定して一旦終了して再度エディタを起動すると作ったレベル(マップ)から始まります。

 

AWSのUbuntuのSSL化

AWSのubuntuを無料のSSL化ました。

https://wspri.dip.jp

でアクセスできます。

Let’s EncryptのSSL証明書を使っています。

 

設定は簡単です。まず、rootでSSHにログインしてコンソールに

apt -y install certbot

と入力します。これでClientのcertbotがインストールされます。

次に証明書を発行しましょう。

certbot certonly --webroot -w /var/www/html -d wspri.dip.jp

で、DdocumentRootとアクセスしたいドメイン名を指定します。すると問い合わせ可能なメアドを聞いてきますので入力します。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

で、あとは利用許諾をするかしないかを選択して終わりです。が、おまけに財団に協力するかとか聞いてきます。

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
An unexpected error occurred:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Please see the logfiles in /var/log/letsencrypt for more details.

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

僕は一度失敗したのでもう一回やり直しました。

あとは/etc/letsencrypt/live/ドメイン/の中にcert.pem、chain.pem、fullchain.pem、privkey.pemがありますので通常の手順で設定してApache2の再起動で終わりです。

vi /etc/apache2/sites-available/default-ssl.conf

SSLCertificateFile      /etc/letsencrypt/live/wspri.dip.jp/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/wspri.dip.jp/privkey.pem

SSLCertificateChainFile /etc/letsencrypt/live/wspri.dip.jp/chain.pem

尚証明書の更新にはまず、期限を確認します

sudo certbot certificates

こうすると時間かかりますが以下が返ってきます。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
 
-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: example.com
    Domains: example.com
    Expiry Date: 2020-03-03 08:15:28+00:00 (VALID: 81 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
-------------------------------------------------------------------------------

まあ、あと81日で有効期限が終わるようです。
なので30日を切ったら以下のコマンドを実行します。

certbot renew

事前にテストをする場合は

certbot renew --dry-run

としますが0.32以前のバージョンだとエラーが出るようです。

PHPマニュアル

簡易的にPHPスクリプトにセキュリティとしてパスワードをかける実装

<?php
//passwdを自分なりのpasswdにするんだよ
$pass = "passwd";
if(isset($_POST['pass'])&&$_POST['pass']==$pass){
        //postされてパスワードが$passと同じならばphpinfo()を出力
        phpinfo();
}else if(isset($_POST['pass'])&&$_POST['pass']!=$pass){
        //postされたがパスワードが違った場合はメッセージを表示
        echo ("Access is prohibited.");
}else{
        //postがされていない時はパスワードの入力フォームを表示
        echo ("<form method=\"POST\" action=\" $script_php \">\n
              Input Password<br><br>\n
              Password:<input type=\"password\" name=\"pass\">\n
              <input type=\"submit\" value=\"Input\">\n
        ");
}
?>

PHPマニュアル

つまったら検索

AWSインスタンスをインターネットで公開する

ログインしてインスタンスを作るまでは簡単な筈ですね。
まあ、僕は使っているモバイルノートがubuntuなのでubuntuにしています。アマゾンLinuxはアバウトでいいんですがセキュリティがちょっと心配なのでubuntuにしているのも理由のひとつです。

インスタンスが稼動するとこんな感じで「インスタンスの状態」がRunninngになります。

ただ、これだけではAWSネットワーク内にインスタンスがあるだけでwwwに公開されていません。自宅サーバの公開手順ではルータの設定でportをwww上に公開したようにAWSもportを公開する必要があります。

左側メニューの一番上の「EC2ダッシュボード」をクリックするとこのようなページが表示されます。

で、ここでは「6個のセキュリティグループ」をクリックして解放するportを追加します。

WSPRIはメール(受信)、WEB(ssl)、SSHを開放しています。

開放するportは「セキュリティグループの作成」で作成します。

開放するプロコトルを選択して「セキュリティグループ名」を適当につけて「説明」を入れます。

で、作成すると左メニューの「インスタンス」の<アクション<ネットワーキング<セキュリティグループの変更<で開放するportが選択できます。

これでApache2なりNginxなりPopServerなり公開できます。

でも、SMTPなどメールの送信にはAWSは使わない方がいいかも?なぜならほとんどが迷惑メール扱いにされちゃいます。

WSPRIでは送信にはGmailを使ってます。

サンダーバードなどの場合はそのままではsmtp.gmail.comにログインできないのでGmail設定の以下を変更します。(Googleアカウントでログインした上で)

送受信のテストをしてみましょう。送受信できるはず。

ちなみにApache2の設定もpostfix+Devecotの設定も特殊な方法はしていません。

またWSPRIはIeserverのDDNSを利用してます。

IPの設定はCrontabで以下を設定しています。(30分おきにIPをIeserverに送信しています)

10,40 * * * * /usr/bin/wget -O - 'https://ieserver.net/cgi-bin/dip.cgi?username=wspri&domain=dip.jp&password=*****&updatehost=1' > /dev/null

AWSではrootの初期状態ではパスワードの設定がないため必要な場合は以下を参考に設定します。

AWSでのrootパスワードの設定

Apache2、php、Mysql、wordpressその他のインストールと設定は以下を参照します。

ServerWorld

WordPress

 

viエディタの使い方

↑Linuxだとよく使うエディタの使い方

Unixコマンド

↑Unixのコマンドもよく使うんだよね