Amazon Linux へ wordpress設定とHTTPS対応

Amazon Linux へ wordpress設定とHTTPS対応

Amazon Linux へ let’s encript設定

で Let’s encript の設定ができたので
続いて wordpress の設定

まずDBの作成

今回は mysql の -e オプションで
コマンドから直接SQLを実行します

参考サイトは
Let’s Encryptを使ってEC2(Amazon Linux)に構築したWordPressを無料でhttps(SSL)対応してみる


mysql コマンドのオプションについては
mysql コマンドオプション

を参考に

ちなみに、mysql のファイルを sqlファイルで作成し
コマンドで実行するなら

mysql -uユーザ名 -pパスワード DB名 < SQLファイル名

で実行可能

mysql -uroot -pパスワード -e 'CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8'

でwordpressDBを作成し
文字コードを utf8 へ設定

mysql -uroot -pパスワード -e "GRANT ALL ON wordpress.* TO 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード'"

これで wordpress のユーザとパスワードを設定し
権限付与

 mysql -uroot -pパスワード -e "FLUSH PRIVILEGES;

で設定反映

次に wordpress の取得と設置

wget https://wordpress.org/latest.tar.gz

で最新版を取得

tar -xzf latest.tar.gz

で解凍

cp -r wordpress/* /var/www/html/

でwordpress の構成ファイルをコピー

これで取得したドメインへブラウザでアクセスすると
インストール画面になります

まず let’s go をクリック

aws-wp-1

次にDatabase Name には
データベース名

username にはユーザ名

Password にはパスワード

これらは mysql で設定した wordpres DB のものを
入力し
submit をクリック

awsw-wp2

次に
Run the instalation
をクリック

aws-wp3

次にサイトの設定になるので
Site Title にはサイト名

Username には管理ユーザ

Pasword にはパスワード

Your Email には連絡用 メルアドを入力

aws-wp4

これでインストールすると確認画面になり
ログインできるようになります

aws-wp5

ただ、このままだとまだセキュリティに問題があるため
設定をしていきます

まず .htaccess を使えるように 設定変更

sudo vim /etc/httpd/conf/httpd.conf

で設定ファイルを開き

151行目あたりの

AllowOverride None

AllowOverride All

へ変更し保存

サブドメインの www.ドメイン名でも
Let’s Encritpt の証明書が有効になるように

sudo vim /etc/httpd/conf.d/ssl.conf 

で設定ファイルを開き

104行目あたりに

 SSLCertificateFile /etc/letsencrypt/live/www.ドメイン名/fullchain.pem

を追記し

114行目あたりに

SSLCertificateKeyFile /etc/letsencrypt/live/www.ドメイン名/privkey.pem

を追記

なお、fulchain.pem なのは
apache 2.4.8 以降だと
chani.pem ではなく、こっちを使うことになります

参考サイトは
Let’s encrypt運用のベストプラクティス

設定ができたら、

sudo service httpd restart

で apache2 の再起動

これで https でアクセスしても警告がでなくなります

次に
wordpressサイト自体のURLを
https でアクセスするよう設定

ログインして Settings > General で
Wordpress Address(URL)

Site Address(URL)

http://
の部分を
https://
に書き換え保存

wp-ssl

これで、wordpress のリンクがhttpsになります

ただ、これだけだと http でアクセスしてくると
https になっていないため
リダイレクト処理を追加します

参考サイトは
WordPressサイトをHTTPS化する手順

sudo vim /var/www/html/.htaccess 

でファイルを開き

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

をファイル先頭に追記し保存
RewriteCond は条件式で
今回はhttpアクセスなら RwriteRule を実行

RewirteRule では https から始まって
ホスト名とリクエストURLを書き換えて
https でリダイレクトという処理

なお

# BEGIN WordPress

# END WordPress

の間に書いてしまうと
wordpress により自動更新されるので
ここ以外に書かないとダメ

これでスマホなどで http でアクセスしても
https にリダイレクトされるのが確認できました

wordpress でDB接続エラーの解決方法

先週あたりから wordpress でDB接続エラーとなり
先日ようやく復旧できたので
解決策のメモです

なお、使用しているサーバはGMOクラウド public になります

まれにDB接続エラーになることがいままであり
そのときにはネットワークの再構築をすれば復旧していました

しかし、今回はこれでも復旧できなかったので数日かかってしまいました

原因は ディスク容量がいっぱいになり、それが原因で mysql の起動ができなかったため
というものです

以下、今回の対処方法のメモログになります

DB接続エラーが表示され、サイトにアクセスできないため
ssh でログインし

mysql -u root -p

で一度DBを確認しようとしたところ

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

となっていたので

mysqlが突然起動しなくなる 第二幕
を参考に

mysqld_safe 

としたところ

mysqld_safe Number of processes running now: 0

となってしまった

このエラーで検索したところ
mysqldが落ちてた時の対応メモ
によれば
によれば
mysql が落ちているらしい

less /var/log/mysqld.log 

でログを確認

InnoDB: Initializing buffer pool, size = 128.0M
とあったので
これで検索し

MySQLが「Fatal error: cannot allocate memory for the buffer pool」となり起動しない問題

にれよれば
buffer pool のメモリ割り当てが小さいのが原因になることがあるらしいので

vim /etc/my.cnf 

でファイルを開き

[mysqld]

の下へ

innodb_buffer_pool_size = 512M

を追記

しかしこれだと

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

となってしまう

エラーをみると mysql.sock がないのが原因と思い
これを作成することに

MySqlのソケットエラーを解決する
を参考にしたところ、
mysql.sock は
mysqlを再起動すると、/var/lib/mysql/mysql.sockが自動的に作成される
とのこと

しかし、mysql を再起動しようとすると

ERROR! MySQL server PID file could not be found!

というエラーになり mysql の起動に失敗

このため mysql が起動できないということで検索した結果
MySQLが起動できない
によれば
ディスクがいっぱいの場合、mysql の起動がエラーになるとのこと

これで検索してみると
mysqlが起動しないのは容量がいっぱいだからかも。
にも書かれていました

コマンドでエラーを再度確認するためログファイルを
tail コマンドで表示します

tail -n 40 /var/log/mysqld.log

なお、tail コマンドについては
【 tail 】 ファイルの末尾を表示する
が参考になります

これでみると

mysql Errcode: 28

と表示されています

ということで

 df -h 

で調べたところ Available のところが 0% ….

このため、ディスク容量を追加することにしました

なお、使用するディスクの追加については
GMOクラウド public の場合
ディスク容量の編集(拡大/縮小)
に画像入りで説明があるので
これを元にディスクを追加したところ
再起動後に無事にサイトが復旧しました

wordpress DB引っ越し

wordpress DB引っ越し

cloud9 のDBを引っ越すため
Amazon Linux 側で mysql のDBを作成します

mysql -u root -p

で mysql にログインし
引っ越し用DBを作成します

create database wptheme;

次にユーザとパスワードの設定

grant all on wptheme.* to wptheme@localhost identified by 'パスワード';

次に設定を反映します

flush privileges;

これで引っ越し用DBを作成できたので
次にインポートするデータを書き換えます

URLが cloud9 のものなので
これを移行するドメインのURLに書き換えます

vim の置き換えを使うと簡単にできるので

:%s/https:\/\/original-theme-snowpooll.c9users.io/http:\/\/wp.snowpool.info/
g

で書き換えます

次に phpmyadmin にログインします

http://ドメイン名/phpmyadmin/
でアクセスして
mysql root ユーザのパスワードでログインします

ログインしたら作成したDBをクリックし
インポートをクリックし
アップロードファイルにチェックを入れ
参照をクリックします

ファイルを選択したら
実行をクリックします

問題なく成功するとメッセージが表示されます

次に cloud9 のwordpress のフォルダをダウンロードします
ダウンロードしたファイルは
tar.gz に圧縮されてダウンロードされます

しかし、このままだと wordpress の設定ファイルの
wp-config.php の中身が
cloud9 のままなので設定を変更します

変更する場所は、24行目あたりの

define('DB_NAME', 'c9');

/** MySQL database username */
define('DB_USER', getenv('C9_USER'));

/** MySQL database password */
define('DB_PASSWORD', '');

/** MySQL hostname */
define('DB_HOST', getenv('IP'));

の部分です

これを

define('DB_NAME', 'wptheme');

/** MySQL database username */
define('DB_USER', 'wptheme');

/** MySQL database password */
define('DB_PASSWORD', 'パスワード');

/** MySQL hostname */
define('DB_HOST', 'localhost');

というように作成したDBに合うように書き換えます

次に、このファイルを AmazonLinux にアップロードします

端末から scp コマンドで転送できるので
EC2にファイルアップロード/ダウンロード
http://qiita.com/mikoto/items/4273cd35dce254727363
を参考にアップロードします

 scp -i pemのパス アップロード対象ファイルパス ec2-user@host:~/

がその構文になります

今回、転送したファイルは
wp-admin[+21].tar.gz
ですが、解凍して サブドメインディレクトリに移動します

sudo tar zxvf wp-admin\[+21\].tar.gz -C /var/www/html/wp.snowpool.info/

で展開します

tar コマンドで tar.gz 圧縮ファイルを展開
-C オプションで展開先を指定しています

今回はサブドメインのディレクトリにしました

ただし、このままアクセスしてもCSSなどが適用されていないため

chown -R apache:apache /var/www/html/wp.snowpool.info/

で権限を変更します

次に

cd /var/www/html/wp.snowpool.info/

でディレクトリ移動

 sudo vim wp-config.php

で編集します

最終行に

define('WP_HOME','http://wp.snowpool.info/');
define('WP_SITEURL','http://wp.snowpool.info/');

を追記します

これはURLやドメイン変更してデザインなどが反映されないときに対処する方法です

詳しくは
サイト URL の変更
https://wpdocs.osdn.jp/%E3%82%B5%E3%82%A4%E3%83%88_URL_%E3%81%AE%E5%A4%89%E6%9B%B4
を参考に

次に .htaccess の変更を行います

sudo vim .htaccess

でファイルを作成

内容を

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

とします

これでもダメなので
設定を見直しました
どうやら virtualhost 設定で
AllowOverride All にしないとダメみたいなので
この設定をします

なお
AllowOverrideは
タグで囲まないと使用できません

そのままやると

Starting httpd: Syntax error on line 1024 of /etc/httpd/conf/httpd.conf:
AllowOverride not allowed here
                                                           [FAILED]

となります

このため

#追記ドメイン用
<VirtualHost *:80>
DocumentRoot /var/www/html/wp.snowpool.info
ServerName wp.snowpool.info
<Directory "/var/www/html/wp.snowpool.info">
AllowOverride All
</Directory>
</VirtualHost>

として保存し

/etc/init.d/httpd restart

で再起動すれば無事に反映されます

もし、これでもダメな場合、
インポートしたDBのサイトURLが違っている可能性があるため
一度

mysql -u root -p

でログインし

drop database wordpressのDB名;

で削除し、URLを修正後、再度 phpmyadmin でインポートし直します

aws バーチャルホスト設定その1

aws バーチャルホスト設定

まず Y!mobile からアクセスする場合
IP制限をつけていると
グローバルIPが変更になったときにつなげられないので
AWS EC2 にアクセスし
ssh 接続可能な IP をマイIPに変更

これでアクセス可能になるので

次に、サブドメインの設定

お名前.com でドメインを取得しているので
ログイン後
ドメイン設定タブをクリック

スクリーンショット 2016-02-28 19.06.00

次に
DNS関連機能の設定をクリック

スクリーンショット 2016-02-28 19.12.53

設定したいドメインにチェックを入れ
次にすすむをクリック

スクリーンショット 2016-02-28 19.15.44

次にDNSレコード設定を利用する の
設定するをクリック

スクリーンショット 2016-02-28 19.25.13

次にTYPE を A から CNAME に変更します
そしてホスト名に追加したサブドメイン
今回なら wp を追記します

VALUE には取得しているドメインを入力します

スクリーンショット 2016-02-28 19.40.22

ここまでできたら
追加をクリックします

これでサブドメインが追加されたので
確認画面にすすむをクリックします

スクリーンショット 2016-02-28 19.41.46

サブドメインが追加できているのを確認できたら
設定する
をクリックします

スクリーンショット 2016-02-28 19.42.42

これでサブドメインの設定ができたので
次に aws のほうを設定します

AmazonLinux microインスタンス WordPress 接続エラー対処

AmazonLinux microインスタンス WordPress 接続エラー対処

AWS で wordpress の構築を行い
いろいろ実験していたのですが
先日アクセスすると
データベース接続エラーに

まずはログインしようとしたのですが
ssh でログインしようとしてもエラー

原因を調べたところ、AWSのセキュリティグループ設定で
送信元のIP制限が引越し前のものだったのが判明

このためセキュリティグループを編集し
カスタムIPからマイIPに変更すると
現在のIPからでも ssh 接続可能になりました

これで

ssh -i pemファイル ec2-user@パブリックDNS

でログインします

次に
WordPress on Amazon EC2で「データベース接続確立エラー」が頻発する

を参考に復旧作業

sudo su -

でroot ユーザになり
プロセスに mysqld があるか確認

ps aux | grep mysqld

しかし、

root     28101  0.0  0.0 110452   900 pts/0    S+   21:51   0:00 grep --color=auto mysqld

となり存在しない

試しに mysqld を起動
もし起動しているのなら start とするとエラーになるはずだけど
無事に起動

service mysqld start

とすると

Starting mysqld:                                           [  OK  ]

原因は micro instance の t1.micro だと
スペック不足による起きるものらしので
メモリを確認

free

とすると

             total       used       free     shared    buffers     cached
Mem:       1020184     385828     634356        308     113352     102744
-/+ buffers/cache:     169732     850452
Swap:            0          0          0

となりスワップが0

ちなみに free コマンドは
【 free 】 メモリーの使用状況を表示する

にあるようにメモリ状況を調べるコマンド

ただし

 less /var/log/messages

で調べても mysql が kill されていることはないため
とりあえず保留しておきます

フリー画像素材をプラグインで導入

フリー画像素材をプラグインで導入

Pixaby Images プラグインを使うと簡単に
フリー画像を挿入することができるようになります

以前は無料で使える画像をダウンロードし
それを wordpress にアップしていましたが

今回のプラグインを使うとより簡単にできます

ダッシュボードのプラグインから
新規追加を選び
pixabay で検索します

pixabay

次にプラグイン一覧から
Pixabay Images を選びインストールします

pixabay2

なお、インストール時にFTP認証がでることがありますが
wordpress の所有者を
ubuntu なら www-data
CentOS なら apache
とすることで回避できます

ubuntu なら

sudo chown -R www-data:www-data wordpress/

で権限変更できます

これでプラグインを有効化すると
Pixabay ボタンが投稿画面に表示されます

pixabay3

ボタンをクリックすると画像の検索画面になりますので
キーワードをいれて Search をクリックします

pixabay4

すると対応する画像がでてくるので
任意の大きさのものをクリックします

今回は

1280 x 847 のものにしました

pixabay5

次に詳細設定をして
投稿に挿入
をクリックすると、画像を挿入することができます

pixabay6

するとコードが追記されるので
プレビューを見ると画像が追加されているのがわかります

pixabay7

pixabay8[

パーマリンク設定変更でリンクエラーになるときの対処

パーマリンク設定変更でリンクエラーになるときの対処

ubuntu14.04 64bit で wordpress をインストールし
パーマリンクの設定を変更後
リンクをしているか調べたけど動作していないので
設定確認

まず mode_rewrite の有効化

 sudo a2enmod rewrite

Module rewrite already enabled

ですでに有効化されているので問題なし

次に設定ファイルへの追記

 sudo vim /etc/apache2/sites-available/000-default.conf 

で設定ファイルを開き

<Directory /var/www/html/wp/>
        AllowOverride All
        Order allow,deny
        allow from all
</Directory>

を最後に追記

設定反映のため apache2 再起動

これでもまだだめなので
.htaccess を wordpress をインストールしたディレクトリに作成

cd /var/www/html/wp/wordpress/
touch .htaccess

書き込み権限がOKなら
これで終わりだけど、権限がないため
ダッシュボードでパーマリンクの設定で

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/wordpress/index.php [L]
</IfModule>

を追記するようにでているので

vim .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/wordpress/index.php [L]
</IfModule>

を追記して保存

これで無事に記事のリンクが可能になります

wordpress CSSファイルの設定

wordpress CSSファイルの設定

wordpress のCSSファイルを作成します

@charset "UTF-8";
/*
Theme Name: snowcorp
Description: snowpool theme test
Author: snowpool
Author URI: https://wp.developapp.net/
Version: 1.0
*/
body{
  margin: 0;
  font-family: 'メイリオ', 'Hiragino Kaku Fothic Pro',sans-serif;
  line-height: 1.5;
}

とします

コメントアウト部分はテーマに関する情報になります
この部分はダッシュボードでテーマの情報として
出力されます

Theme Name はテーマの名前
Description はテーマの説明
Author は製作者
Author URI は製作者のURL
Version はテーマのバージョンになります

なお css の記述には emmet を入れて
http://docs.emmet.io/cheat-sheet/
にあるようなチートシートをみながら記述すると効率的です

次に常に最新のCSSを読み込むようにします
これはキャッシュの影響でCSSが最新ではない
ということを防ぐためです

    <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">

に追記します

?ver=<?php echo date('U'); ?>

を加えることでURLが別のファイルと認識するようになります

    <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>?ver=<?php echo date('U'); ?>">

として保存します

次に関数を書くファイルを作成します

functions.php を作成し
内容は php 開始タグだけにします

<?php

閉じタグを付けないのは、トラブル防止のためです

せっかくなので、これも github に保存します

git add style.css 
git add functions.php
git commit -m "style.css functions.php 追加"
git push origin master

これで保存できました

wordpress テンプレファイル作成

wordpress テンプレファイル作成

ベースとなるテンプレファイルを作成し
これを元にテンプレを作成します

header.php

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>
      <?php wp_title('|', true, 'right'); ?>
      <?php bloginfo('name'); ?>
    </title>

    <meta name="viewport" content="width=device-width,  initial-scale=1.0">

    <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
    <?php wp_head(); ?>
  </head>
  <body <?php body_class(); ?>>

index.php と single.php は

<?php get_header(); ?>


<?php get_footer();  ?>

fotter.php は

<?php wp_footer(); ?>
</body>
</html>

としました

せっかくなので
github に保存しておくことにします

 git clone git@github.com:Snowpooll/wordpress_test.git
cd wordpress_test/

で移動します

次にファイルを git add で追加します
複数あるので、これはスペース区切りで追加できますが
拡張子ですべて選択するほうが楽なので

cp ../*.php .
 git add *.php

としました

そして commit します

git commit -m "テンプレファイル追加"

そしてこれを

git push origin master 

で反映します

これで github に保存できました

wordpress テーマカスタマイズの準備

wordpress テーマカスタマイズの準備

別のマシンでも wordpress のテーマを改造していきたいので
git でテーマを取得します

使用環境は ubuntu 14.04 です
まず ssh で git clone できるようにします

ssh-keygen -t rsa -C メールアドレス

で公開鍵の作成をします

Enter file in which to save the key 

とでてくるので、鍵ファイルの名前を入力します

Enter にすると、ファイル名は
id_rsa
となります

今回は github_rsa
としました

Enter passphrase (empty for no passphrase): 

でパスワードを設定します

Enter same passphrase again:

でもう一回確認のため入力します

cat github_rsa.pub

でファイルの中身を見れるので、
この値をgithub の ssh key の追加画面で追加します

登録できたら
wordpress のテーマ格納ディレクトリになる themes に移動して git を使います

私の場合、 /var/www/html/wpt/
の下に wordpress を配置したので

cd /var/www/html/wpt/wordpress/wp-content/themes/

で移動します

次に git でテーマを取得します

git clone git@github.com:Snowpooll/shoptheme.git

でテーマを取得

 cd shoptheme/shoplist_theme/

で移動してファイルを編集していきます

まず、テーマ名が test になっているのを修正します

vim style.css

2行目の Theme Name: test

Theme Name: ShopList
にします

今回はさらにテーマの変更を反映させます

git add style.css 
git commit -m "テーマ名を test から ShopList へ変更"

で変更内容を commit

git push origin master 

でgithub のソースに変更を反映させます