*

CentOS7にwordpressを移行

公開日: : 最終更新日:2015/11/21 投稿者:raru CentOS7, Linux, サーバ

前の記事で初期設定を行ったサーバにwordpressを移設します。
wordpressの移設は案外簡単で、以下の手順で完了します。
・移設元サーバのwordpressのアプリケーションルートをコピー
・移設元サーバのDBからダンプ取得
・二つを新サーバに配置/取り込み

元サーバデータを取得

まずはアプリそのものの圧縮とダンプ取得を行います。

# mysqldump -u root -p wordpress > /home/hogehoge/wordpress.dump
# cd /var/www/public/projects/
# zip -r /home/hogehoge/wordpress.zip wordpress

まずはDBのダンプを取得します。上のコマンドではrootユーザにパスワード認証を行い、wordpressという名前のDBのダンプを取得しています。
次はプロジェクトルートへ移動し、wordpressフォルダごとコピーしています。
tarコマンドでも良いですし、zipコマンドでも良いです。

今回はrsyncなどは利用せずに旧サーバ -> クライアント -> 新サーバへ転送しました。
今思えばscpでもrsyncでも良かったですね。
アホですね。

MariaDBの設定

ここから新サーバの設定です。
まずはデータベースを用意します。CentOS7からMySQLの変わりにMariaDBが利用されるようになっています。
微妙に違うらしいのですが基本はMySQLと同じです。

インストールと初期化

[root@metal ~]# yum -y install mariadb mariadb-server
[root@metal ~]# systemctl enable mariadb //chkconfig mariadb onと同じ
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
[root@metal ~]# systemctl start mariadb
[root@metal ~]# mysql_secure_installation

ここまででインストールと初期化が完了です。
systemctl enable mariadbでmariadbをサーバ起動時に起動するように設定を行っています。
mysql_secure_installationではrootにパスワードを設定し、他は全てyesで良いです。
不要なDBを削除してくれたりしているだけです。

wordpress用DB作成

続いてwordpress用にDBを作成します。
DB名やユーザは各々好きに設定してください。
以下はサンプル。

[root@metal ~]# mysql -u root -p
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.01 sec)

// wordpressユーザがローカルホストからパスワード******でwordpressDBに対して全ての操作が出来るようにユーザを作成しつつ設定。
MariaDB [(none)]> grant all privileges on wordpress.* to wordpress@localhost identified by '********';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> quit
Bye

これでDBの作成が完了です。

MariaDB設定

次にMariaDB自体の設定を行います。
今回は特に大したことはせず、文字コードの指定を行っています。ただ動かしている分にはこの程度でも十分だと思います。(まだそんなちゃんと見れていないけど)

[root@metal ~]# cp /etc/my.cnf /etc/my.cnf.org
[root@metal ~]# vi /etc/my.cnf
[root@metal ~]# diff /etc/my.cnf.org /etc/my.cnf
0a1,3
> [client]
> default-character-set = utf8
> 
9a13,14
> character-set-server  = utf8
> default-storage-engine  = innodb
19a25,26
> [mysql]
> default-character-set=utf8
[root@metal ~]# systemctl restart mariadb
[root@metal ~]# systemctl status mariadb

文字コードの指定は各々の環境に合わせてください。
wordpressはutf-8をデフォで利用していると思います。

ダンプの復元

ダンプデータからデータを復元します。

[root@metal ~]# mysql -u wordpress -p wordpress < /home/hogehoge/wordpress.dump
Enter password: 
[root@metal ~]# mysql -u root -p
MariaDB [(none)]> use wordpress
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [wordpress]> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_blc_filters        |
| wp_blc_instances      |
| wp_blc_links          |
| wp_blc_synch          |
| wp_commentmeta        |
| wp_comments           |
| wp_ewwwio_images      |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
16 rows in set (0.00 sec)

MariaDB [wordpress]> quit
Bye

ダンプから復元しつつデータの確認。
ワードプレスってあんまりテーブルの数ないんですね。

以上でMariaDBの準備は完了です。

Apache2.4の設定

続いてアプリを乗せるapacheの設定を行います。
CentOS6以下ではyumで2.2系が入っていましたが、CentOS7からは2.4系です。

apacheのインストール

まずはインストールを行い、起動設定を行います。

[root@metal ~]# yum install -y httpd mod_ssl
[root@metal ~]# systemctl is-enabled httpd
disabled
[root@metal ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@metal ~]# systemctl is-enabled httpd
enabled

apacheの設定

次にapacheの設定を変更します。

[root@heavy-metal-explorer ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
[root@metal ~]# diff /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf
86c86,87
< ServerAdmin root@localhost
---
> #ServerAdmin root@localhost
> ServerAdmin admin@heavy-metal-explorer.com
95a97,101
> ServerName heavy-metal-explorer.com:80

131c137
< <Directory "/var/www/html">
---
> #<Directory "/var/www/html">
144c150
<     Options Indexes FollowSymLinks
---
> #    Options FollowSymLinks
151c157
<     AllowOverride None
---
> #    AllowOverride None
156,157c162,163
<     Require all granted
< </Directory>
---
> #    Require all granted
> #</Directory>
164c170
<     DirectoryIndex index.html
---
>     DirectoryIndex index.html index.php
190a197,202
> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
> LogFormat "%h %l %u %t \"%r\" %>s %b" common
> LogFormat "%{Referer}i -> %U" referer
> LogFormat "%{User-agent}i" agent
> CustomLog logs/access_log combined
> 
247c259
<     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
---
>     #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
255,259c267,271
< <Directory "/var/www/cgi-bin">
<     AllowOverride None
<     Options None
<     Require all granted
< </Directory>
---
> #<Directory "/var/www/cgi-bin">
> #    AllowOverride None
> #    Options None
> #    Require all granted
> #</Directory>
316c328
< AddDefaultCharset UTF-8
---
> #AddDefaultCharset UTF-8

<2015/11/20 追記>
非常に大切な設定を忘れていたという致命的なミスに気づきました。

353a366,369
> 
> ServerTokens Prod
> ServerSignature Off
> TraceEnable Off

これを設定することで404ページなどにサーバ情報が表示されることを防ぎます。
忘れてはいけない設定ですね!(忘れてました!)

長々と表示されていますが、利用しないDirectory設定を無効化しているのとindex.phpをdirectory indexに追加している程度です。
次に簡単なセキュリティ設定を以下で行います。

[root@metal ~]# cat /etc/httpd/conf.d/security.conf
# Hide Apache Version
ServerTokens Prod
ServerSignature off

# Hide Header X-Powered-By
Header always unset X-Powered-By

# Anti POODLE
SSLProtocol All -SSLv3
[root@metal ~]# rm /etc/httpd/conf.d/welcome.conf 
rm: remove regular file ‘/etc/httpd/conf.d/welcome.conf’? y
[root@metal ~]# apachectl configtest
Syntax OK

apacheの情報や、phpの情報を表示しないように設定しているのが上3つです。
sslの部分は今年やたらと発生しているssl系障害用の対応です。
こちらから参考(流用)させていただきました。

wordpress用virtual設定

wordpress用の設定ファイルを作成します。

[root@metal ~]# vi /etc/httpd/conf.d/virtual-wordpress.conf 
[root@metal ~]# cat /etc/httpd/conf.d/virtual-wordpress.conf 
<VirtualHost *:80>
  ServerName heavy-metal-explorer.com:80
  DocumentRoot /var/www/public/projects/wordpress
  
  <Directory /var/www/public/projects/wordpress>
    AllowOverride All
    Options FollowSymLinks
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerName heavy-metal-explorer.com:443

  DocumentRoot /var/www/public/projects/wordpress
  
  <Directory /var/www/public/projects/wordpress>
    AllowOverride All
  </Directory>

  ErrorLog logs/wordpress_ssl_error_log
  TransferLog logs/wordpress_ssl_access_log
  LogLevel warn

  // SSL系の設定
</VirtualHost> 

[root@metal ~]# cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org
[root@metal ~]# vi /etc/httpd/conf.d/ssl.conf
[root@metal ~]# diff /etc/httpd/conf.d/ssl.conf.org /etc/httpd/conf.d/ssl.conf
// 省略

ここではwordpress用に設定をしています。
ssl系の設定はssl.confから必要な部分を抜き出しているだけになります。
またssl.confに設定されているvirtualホスト設定を抜き出して設定しているためssl.confの不要になった設定をまるっと削除しています。

鍵の設置

SSL用の鍵を設置します。これは旧サーバから持ってきました。
各々鍵ファイルをssl設定を行った位置に起きましょう。
/etc/pki/tlsの下にフォルダ切っても良いですし、デフォの位置においても良いです。

アプリ設置

設定が完了したらアプリの配置です。
ディレクトリ構成などはご自由に。

[root@metal ~]# mkdir -p /var/www/public/projects
[root@metal ~]# cp /home/hogehoge/wordpress.zip /var/www/public/projects/
[root@metal ~]# cd/var/www/public/projects
[root@metal projects]# unzip
[root@metal projects]# rm wordpress.zip
[root@metal projects]# chown apache:apache -R /var/www/public
[root@metal projects]# cd


上記では転送してきたファイルを所定の位置へ展開しています。
展開したファイルは権限が正しくないため、apacheの管理下に権限を変更しています。
ディレクトリは755, ファイルは644という部分は圧縮しても保持しているようでしたのでそのままにしています。

これで一通りのapache設定が完了です。

<h2>PHP5.6系インストール</h2>
次にwordpressを動かすためにphpをインストールします。
現在最新が5.6系なのでそれを入れましょう。5.6系上でもwordpressは動きます。


[root@metal ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
[root@metal ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[root@metal ~]# yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-mcrypt php-mbstring php-pdo php-mysqlnd php-tokenizer php-xml
[root@metal ~]# php -v 
PHP 5.6.13 (cli) (built: Sep  3 2015 14:08:58) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

[root@metal ~]# mkdir /var/log/php
[root@metal ~]# chmod 755 /var/log/php
[root@metal ~]# cp /etc/php.ini /etc/php.ini.org
[root@metal ~]# vi /etc/php.ini
[root@metal ~]# diff /etc/php.ini.org /etc/php.ini
577a578
> error_log = /var/log/php/error.log
889a891
> date.timezone = "Asia/Tokyo"
[root@metal ~]# systemctl restart httpd

php5.6系はそのままでは入らないのでリポジトリを追加しています。
ついでにいくつか必要そうなパッケージもインストールしていますが、おそらく不要なものもあります。
上記はlaravel5を動かすのに必要なパッケージたちです。

phpをインストールしたら簡単にphp.iniを修正して、apacheを再起動します。
php.iniの変更はapacheの再起動を行わないと反映されないようです。

firewall設定

最後にポートの解放を行います。
このままでは誰も外部からアクセスできませんからね。

[root@metal ~]# firewall-cmd --add-service=http --permanent
success
[root@metal ~]# firewall-cmd --add-service=https --permanent
success
[root@metal ~]# firewall-cmd --reload
success

http, httpsのサービスを追加します。
各々80 443のポートの設定になります。

これにて移行完了です。

あとがき

apache, mariadbあたりの設定手順を乗せるのは自分の設定を後悔するのとほぼ同義なので怖いですね。
上記の設定では実際行っている設定のうち細かい設定は省いていますが、基本こんな感じだと思います。

みなさんもサーバを設定する際には、手順を残すようにしましょう。
手順の蓄積=ノウハウの蓄積です。というか、ないと忘れます。
サーバのことなんて全部覚えてられないので、諦めてそのときに記録しましょう。

関連記事

no image

apache2.4でBOTからのアクセスを排除

私は何か数字が動くものを見るのが好きでgoogle analyticsのリアルタイム情報をよく見てい

記事を読む

no image

CentOS6にredmineを導入

CentOSにredmineを導入しました。 Gitとの連携を目論んでいたのですが、redmine

記事を読む

no image

yum使いがハマるaptitudeの罠 update

最近までaptitudeの使い方に関して大いなる勘違いをしていました。 yum使いの皆様も私と同様

記事を読む

no image

ZabbixからsSMTPを利用してエラー通知メール送信

今回はsSMTPを利用してRaspbian上のZabbix Serverからアラートメールの送信を行

記事を読む

no image

Firewalldで特定IPからの接続をdrop

このサイトは見ての通りwordpressなのですが、wordpressではloginのurlが推測さ

記事を読む

no image

CentOSにSSH鍵認証で接続するGitリポジトリを作成

今回友人と共同開発を行なうと思い、ざっくりとGitサーバを建ててみました。 私はSVNの方が好きな

記事を読む

no image

CentOSで不要カーネルの削除

サーバを利用して時間が経過すると溜まってくるLinuxのkernelの削除方法の備忘録。 忘れるた

記事を読む

no image

CentOS 7 で ruby on rails 環境構築

気づいたらCentOS7が出てから時間が立っていました。 そろそろ新しく建てるサーバはCentOS

記事を読む

no image

RaspbianにRedmine3を導入

普段Zabbixを入れて運用しいてるRaspbianにRedmineも入れてみました。 ややスペッ

記事を読む

no image

個人でのProxyサーバ利用用途

Proxyサーバを建てたいということで、利用用途を考えていました。 まずサイト高速化であったり冗長

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑