0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NameVirtualHostでWordpress構築

Last updated at Posted at 2015-07-24

目的

GIPは1つ。そのサーバで複数のWebサイトをサポートする。

環境

  • Ubuntu 14.04
  • apache2 version: 2.4.7-1ubuntu4.1
  • php5 version: 5.5.9+dfsg-1ubuntu4.5
  • php5-mysql version: 5.5.9+dfsg-1ubuntu4.11
  • mysql-server-5.6 version: 5.6.19-0ubuntu0.14.04.
  • mysql-client-core-5.6 version: 5.6.19-0ubuntu0.14.04.
  • sysv-rc-conf version: 0.99-7
  • Wordpress version: latest
  • ntp version: 1:4.2.6.p5+dfsg-3ubunt

時刻同期

ntp使用

$ sudo apt-get install ntp
/etc/ntp.conf
# server 0.ubuntu.pool.ntp.org
# server 1.ubuntu.pool.ntp.org
# server 2.ubuntu.pool.ntp.org
# server 3.ubuntu.pool.ntp.org
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
$ sudo service ntp stop
$ sudo service ntp start
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.jst.mfeed. 133.243.236.17   2 u  844 1024  377    2.900   -2.852   0.374
+ntp2.jst.mfeed. 133.243.236.17   2 u  223 1024  377    3.195   -3.600   0.362
+ntp3.jst.mfeed. 133.243.236.17   2 u  845 1024  377    2.782   -3.345   0.653
-juniperberry.ca 193.79.237.14    2 u  984 1024  377  244.422  -14.140   2.015

タイムゾーン

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

作業用ユーザ作成

$ sudo adduser hoge
$ sudo password hoge
Enter new UNIX password: **************
Retype new UNIX password: **************

作業用ユーザへsudo権限付与

$ sudo visudo
/etc/sudoers.
# User privilege specification
root       ALL=(ALL:ALL) ALL
hoge       ALL=(ALL:ALL) AL
$ sudo gpasswd -a hoge sudo
/etc/group.
sudo:x:27:ubuntu,hoge

rootログイン不可・SSHポート変更・ssh接続設定

/etc/ssh/sshd_config.
# Port 22
Port [1024~65535]
# PermitRootLogin without-password
PermitRootLogin no
# 最終行の前に追記
AllowUsers ubuntu hoge

公開鍵設置用Dir(サーバ接続に鍵認証を使用する場合)

$ mkdir .ssh
$ chmod 700 .ssh
$ touch .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

Apache

/etc/apache2/conf-available/security.conf
# ServerTokens Minimal
# ServerTokens OS
# ServerTokens Full
ServerTokens ProductOnly
# Set to one of:  On | Off | EMail
ServerSignature Off
# ServerSignature On
# Set to one of:  On | Off | extended
TraceEnable Off
# TraceEnable On

Wordpress設置用DIR作成

$ sudo mkdir -p /var/www/sites-available/test/htdocs

ドキュメントルート作成

$ sudo mkdir /var/www/sites-enable

シンボリックリンク作成

$ cd /var/www/sites-enable 
$ sudo ln -s ../sites-available/test test

設定ファイル作成

$ cd /etc/apache2/sites-available
$ sudo touch test.conf
test.conf
ServerName ***.***.***.***
<VirtualHost *:80>
    ServerName test
    ErrorLog ${APACHE_LOG_DIR}/test-error.log
    CustomLog ${APACHE_LOG_DIR}/test-access.log combined
    DocumentRoot /var/www/sites-enable/test/htdocs
    <Directory "/var/www/sites-enable/test/htdocs">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

MySQL

mysql起動

$ sudo sysv-rc-conf mysql on
$ sudo service mysql start

MySQL サーバーをセキュリティで保護

$ sudo mysql_secure_installation
現在のrootアカウントのパスワードを入力
Enter current password for root (enter for none): 
OK, successfully used password, moving on...

パスワード変更
Change the root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

匿名ユーザアカウントの削除
Remove anonymous users? [Y/n] Y
 ... Success!

Rootログイン無効化
Disallow root login remotely? [Y/n] Y
 ... Success!

テストデータベース削除
Remove test database and access to it? [Y/n] Y
 - Dropping test database...

権限テーブルをリロードし、変更を保存
Reload privilege tables now? [Y/n] Y
 ... Success!

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

ユーザ・DB作成

$ mysql -u root -p
MySQL データベースのユーザーとパスワードを作成
mysql> create user 'wordpress-hoge'@'localhost' identified by 'パスワード';
データベースを作成
mysql> create database `wordpress-db`;
データベースに対して、以前作成した WordPress ユーザーに対する完全な権限を付与
mysql> grant all privileges on `wordpress-db`.* TO "wordpress-hoge"@"localhost";
すべての変更を有効にするため、MySQL 権限をフラッシュ
mysql> flush privileges;
mysql> exit
  • mysql起動時に「No directory, logging in with HOME=/」が出るのは、mysqlユーザのHOMEディレクトリが「/nonexistent」になっている為。
$ sudo service mysql stop
$ sudo mkdir /home/mysql
$ sudo chown mysql:mysql /home/mysql
$ sudo usermod -d /home/mysql/ mysql
$ sudo service mysql start
  • mysqlログイン時に「Access denied for user ‘root’@’localhost’ (using password: NO)」が出るのは、rootユーザの権限設定がされていないから。
$ sudo service mysql stop
$ sudo mysqld_safe --skip-grant-tables &
$ mysql -u root
現状の確認
mysql> use mysql;
mysql> select * from  user;
ユーザテーブル全削除してから設定を実行
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option;
パスワード設定しない場合
mysql> grant all privileges on *.* to root@localhost identified by '' with grant option;
mysql> flush privileges;
結果確認
mysql> select host, user from user;
mysql> quit;

$ sudo kill -KILL mysqld_safe PID
$ sudo kill -KILL mysqld PID
$ sudo service mysql start
$ mysql -u root -p
  • mysqlログイン時に「ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysql.sock' (2)」が出るのは、クライアントとMysqlとで通信に使用するファイルの参照先が異なっている為。
/etc/mysql/my.conf
[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld]
user            = mysql
pid-file        = /run/mysqld/mysqld.pid
socket          = /run/mysqld/mysqld.sock
socketファイルの破損が原因であれば、mysqlの再起動でファイルが再生成される。
ソケットを指定してログインすることも可能。

$ mysql --socket=~/mysql.sock -u ****** -p

Mysqlのアップデートが失敗する場合、debian.cnfで異なる定義がされている可能性がある。
/etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = ******
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = ******
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

WordPress

$ cd ~/work
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar zxvf latest-ja.tar.gz
$ sudo mv wordpress/* /var/www/sites-available/test/htdocs
$ sudo rm latest-ja.tar.gz
$ cd /var/www/sites-available/test/htdocs
$ sudo cp wp-config-sample.php wp-config.php
wp-config.php
# 作成したDB・USER・USERPASSWORDを記述
define('DB_NAME', 'wordpress-db');
define('DB_USER', 'wordpress-user');
define('DB_PASSWORD', 'your_strong_password');
# https://api.wordpress.org/secret-key/1.1/salt/で作成したデータをAuthentication Unique Keys and Saltsセクションに貼り付ける。
define('AUTH_KEY',         '****************************************************************');
define('SECURE_AUTH_KEY',  '****************************************************************');
define('LOGGED_IN_KEY',    '****************************************************************');
define('NONCE_KEY',        '****************************************************************');
define('AUTH_SALT',        '****************************************************************');
define('SECURE_AUTH_SALT', '****************************************************************');
define('LOGGED_IN_SALT',   '****************************************************************');
define('NONCE_SALT',       '****************************************************************');

$table_prefix  = 'wp_';

# FTPdefine('WP_DEBUG', false);の下に追記する。
define('FS_METHOD', 'direct');
define('WP_AUTO_UPDATE_CORE', 'minor');
  • ブートストラップのwp-load.phpはWordpressをインストールしたディレクトリ内でwp-config.phpを探し、見つからない場合は、1つ上の階層を探す仕組みになっている。これを利用し、セキュリティ対策として、wp-config.phpは1階層上に置く。
wp-load.php
if ( file_exists( ABSPATH . 'wp-config.php') ) {

        /** The config file resides in ABSPATH */
        require_once( ABSPATH . 'wp-config.php' );

} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {

        /** The config file resides one level above ABSPATH but is not part of another install */
        require_once( dirname(ABSPATH) . '/wp-config.php' );

} else {
$ sudo mv wp-config.php ../
  • hogeとwwwユーザがドキュメントルートでファイルを追加・削除・編集できるようにする。
$ sudo groupadd www
$ sudo usermod -a -G www hoge
$ groups
hoge adm cdrom sudo dip plugdev lpadmin sambashare www
$ sudo chown -R root:www /var/www/sites-available/test
$ sudo chmod 2775 /var/www/sites-available/test
$ find /var/www/sites-available/test -type d -exec sudo chmod 2775 {} +
$ find /var/www/sites-available/test -type f -exec sudo chmod 0664 {} +
  • ウェブサーバーはwww-data(ubuntu)apache(RHEL)ユーザーとして実行されるため、ドキュメントルートでファイルを追加・削除・編集出来るように作成したwwwグループに追加する。
$ sudo usermod -a -G www www-data
$ sudo chown -R www-data /var/www/sites-available/test
$ sudo chgrp -R www-data /var/www/sites-available/test
$ sudo chmod 2775 /var/www/sites-available/test
$ find /var/www/sites-available/test -type d -exec sudo chmod 2775 {} +
$ find /var/www/sites-available/test -type f -exec sudo chmod 0664 {} +
$ sudo service apache2 restart

ブラウザへアドレス入力
http://test/wp-admin/install.php


上記手順でtest2,test3・・・を作成する。
wp-config.phpはホスト毎にAuthentication Unique Keys and Saltsセクションと接頭語を異なるものにする。

wp-config.php
# 作成したDB・USER・USERPASSWORDを記述
define('DB_NAME', 'wordpress-db');
define('DB_USER', 'wordpress-user');
define('DB_PASSWORD', 'your_strong_password');
# https://api.wordpress.org/secret-key/1.1/salt/で作成したデータをAuthentication Unique Keys and Saltsセクションに貼り付ける。
define('AUTH_KEY',         '****************************************************************');
define('SECURE_AUTH_KEY',  '****************************************************************');
define('LOGGED_IN_KEY',    '****************************************************************');
define('NONCE_KEY',        '****************************************************************');
define('AUTH_SALT',        '****************************************************************');
define('SECURE_AUTH_SALT', '****************************************************************');
define('LOGGED_IN_SALT',   '****************************************************************');
define('NONCE_SALT',       '****************************************************************');

$table_prefix  = 'wp2_';

# FTPdefine('WP_DEBUG', false);の下に追記する。
define('FS_METHOD', 'direct');
define('WP_AUTO_UPDATE_CORE', 'minor');
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?