ライン

ポイント:HPBで作ったページを扱うことができた

ライン

 はじめに

FreeBSD 11.0でApacheのMPM/eventで動作

 WordPressサーバを準備したく思っていますが、既存環境に入れるのはイヤでしたので、最近リリースされたFreeBSD 11.0-RELEASE-p2 の環境に導入することにしました。
 そろそろ、Apacheではなく準備しようとも思いましたが慣れは重要…ということで変更しない方針。
MPMはeventを使いたい予定…なので、(apache22-event-mpmではなく)Apache24で選択。加えて、php-fpmというイメージで作ろうと思います。

 WordPress

 過去に2回、FreeBSDでの試用や利用のための準備をしてきました。このページ群に記録が埋もれています。
…ということで、今回は3回目となります。

#pkg install ja-wordpress
...
New packages to be INSTALLED:
        ja-wordpress: 4.6.1
        php56-curl: 5.6.27
        php56: 5.6.27
        php56-gd: 5.6.27
        libXpm: 3.5.11_4
        xproto: 7.0.28
        libXt: 1.1.5,1
        libSM: 1.2.2_3,1
        libICE: 1.0.9_1,1
        libX11: 1.6.4,1
        libXdmcp: 1.1.2
        libxcb: 1.11.1
        libpthread-stubs: 0.3_6
        libXau: 1.0.8_3
        kbproto: 1.0.7
        libXext: 1.3.3_1,1
        xextproto: 7.3.0
        png: 1.6.23
        t1lib: 5.1.2_4,1
        libXaw: 1.0.13,2
        printproto: 1.0.5
        libXmu: 1.1.2_3,1
        libXp: 1.0.3,1
        freetype2: 2.6.3
        jpeg-turbo: 1.4.2
        php56-xml: 5.6.27
        php56-tokenizer: 5.6.27
        php56-mysqli: 5.6.27
        php56-zip: 5.6.27
        libzip: 1.1.2
        php56-ftp: 5.6.27
        php56-zlib: 5.6.27

Number of packages to be installed: 32

The process will require 66 MiB more space.
15 MiB to be downloaded.

Proceed with this action? [y/N]:

 この辺りもろもろ使わないものも含めて入ってしまうので残念ですけど、しっかり脆弱性だけは対応していくので…という感じで良いことにします。
あっという間にインストールが完了できてしまうので、portsでmakeよりは手軽です。

導入された先を確認しておきます。

#ll /usr/local/www/wordpress/
total 184
-rw-r--r--   1 www   www      418 Nov  4 05:24 index.php
-rw-r--r--   1 www   www    19935 Nov  4 05:24 license.txt
-rw-r--r--   1 www   www    10214 Nov  4 05:24 readme.html
-rw-r--r--   1 www   www     5456 Nov  4 05:24 wp-activate.php
drwxr-xr-x   9 root  wheel   3584 Nov  6 21:00 wp-admin/
-rw-r--r--   1 www   www      364 Nov  4 05:24 wp-blog-header.php
-rw-r--r--   1 www   www     1477 Nov  4 05:24 wp-comments-post.php
-rw-r--r--   1 www   www     3834 Nov  4 05:24 wp-config-sample.php
drwxr-xr-x   5 root  wheel    512 Nov  6 21:00 wp-content/
-rw-r--r--   1 www   www     3286 Nov  4 05:24 wp-cron.php
drwxr-xr-x  17 root  wheel   7168 Nov  6 21:00 wp-includes/
-rw-r--r--   1 www   www     2382 Nov  4 05:24 wp-links-opml.php
-rw-r--r--   1 www   www     3353 Nov  4 05:24 wp-load.php
-rw-r--r--   1 www   www    34057 Nov  4 05:24 wp-login.php
-rw-r--r--   1 www   www     7786 Nov  4 05:24 wp-mail.php
-rw-r--r--   1 www   www    13920 Nov  4 05:24 wp-settings.php
-rw-r--r--   1 www   www    29890 Nov  4 05:24 wp-signup.php
-rw-r--r--   1 www   www     4035 Nov  4 05:24 wp-trackback.php
-rw-r--r--   1 www   www     3064 Nov  4 05:24 xmlrpc.php

 次は、apache24です。

#pkg install apache24
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
...
New packages to be INSTALLED:
        apache24: 2.4.23_1
        expat: 2.2.0
        apr: 1.5.2.1.5.4_1
        gdbm: 1.12
        db5: 5.3.28_4

Number of packages to be installed: 5

The process will require 76 MiB more space.
17 MiB to be downloaded.

Proceed with this action? [y/N]:

/etc/rc.confに追加するものは、以下で入れることができる。
これまでも何度か使ったけど、覚えられない…ので、今回はメモ。

#sysrc apache24_enable=yes
apache24_enable:  -> yes

設定ファイル系を少しだけ触って起動しよう。

#cd /usr/local/etc/apache24
#vi httpd.conf

とりあえず、デフォルトが

#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so

のようにPreforkとなっているので、eventに変更。

# 2016-11-06
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
##LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so

みたいな感じです。
詳細を変更するには、etc/apache24/extra/httpd-mpm.confを利用できるようにコメントになっている箇所を変更する必要がありますが、
今はまずは動くことを確認するのが先。

#service apache24 start
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.

動いていることを確認しよう。

#ps axu | grep -v grep |grep httpd
root           7941   0.0  0.7  76072   6984  -  Ss   21:19      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www            7942   0.0  0.8  81580   7752  -  I    21:19      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
www            7943   0.0  0.8  81580   7752  -  I    21:19      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
www            7944   0.0  0.8  81580   7752  -  I    21:19      0:00.01 /usr/local/sbin/httpd -DNOHTTPACCEPT
#httpd -V Server version: Apache/2.4.23 (FreeBSD) Server built: unknown Server's Module Magic Number: 20120211:61 Server loaded: APR 1.5.2, APR-UTIL 1.5.4 Compiled using: APR 1.5.2, APR-UTIL 1.5.4 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled) -D APR_USE_FLOCK_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr/local" -D SUEXEC_BIN="/usr/local/bin/suexec" -D DEFAULT_PIDLOG="/var/run/httpd.pid" -D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status" -D DEFAULT_ERRORLOG="/var/log/httpd-error.log" -D AP_TYPES_CONFIG_FILE="etc/apache24/mime.types" -D SERVER_CONFIG_FILE="etc/apache24/httpd.conf"

まずはこんな感じ。

次は、MySQLなのですが、ここはMariaDBにして遊ぼうかと思います。

#pkg search maria
elixir-mariaex-0.7.7           Database driver for MariaDB and MySQL written in Elixir
mariadb100-client-10.0.27      Multithreaded SQL database (client)
mariadb100-server-10.0.27      Multithreaded SQL database (server)
mariadb101-client-10.1.17      Multithreaded SQL database (client)
mariadb101-server-10.1.17      Multithreaded SQL database (server)
mariadb55-client-5.5.52        Multithreaded SQL database (client)
mariadb55-server-5.5.52        Multithreaded SQL database (server)

良くわかっていないけど、MySQL5.6系はMaria10.1系ということでいいのだよね?

#pkg install mariadb101-server
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
...
New packages to be INSTALLED:
        mariadb101-server: 10.1.17
        mariadb101-client: 10.1.17

Number of packages to be installed: 2

The process will require 204 MiB more space.
24 MiB to be downloaded.

Proceed with this action? [y/N]:

同様に、

#sysrc mysql_enable=yes
mysql_enable:  -> yes

ではまずは動作させてしまいます。

#service mysql-server start
Installing MariaDB/MySQL system tables in '/var/db/mysql' ...
2016-11-06 21:33:41 34422743040 [Note] /usr/local/libexec/mysqld (mysqld 10.1.17-MariaDB) starting as process 8156 ...
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-11-06 21:33:41 34422743040 [Note] InnoDB: The InnoDB memory heap is disabled
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-11-06 21:33:41 34422743040 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Using SSE crc32 instructions
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Completed initialization of buffer pool
2016-11-06 21:33:41 34422743040 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Database physically writes the file full: wait...
2016-11-06 21:33:41 34422743040 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2016-11-06 21:33:42 34422743040 [Warning] InnoDB: New log files created, LSN=45883
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Doublewrite buffer not found: creating new
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Doublewrite buffer created
2016-11-06 21:33:42 34422743040 [Note] InnoDB: 128 rollback segment(s) are active.
2016-11-06 21:33:42 34422743040 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Foreign key constraint system tables created
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Creating tablespace and datafile system tables.
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Tablespace and datafile system tables created.
2016-11-06 21:33:42 34422743040 [Note] InnoDB: Waiting for purge to start
2016-11-06 21:33:42 34422743040 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.31-77.0 started; log sequence number 0
2016-11-06 21:33:42 34718197760 [Note] InnoDB: Dumping buffer pool(s) not yet started
OK
Filling help tables...
2016-11-06 21:33:45 34422743040 [Note] /usr/local/libexec/mysqld (mysqld 10.1.17-MariaDB) starting as process 8158 ...
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-11-06 21:33:45 34422743040 [Note] InnoDB: The InnoDB memory heap is disabled
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-11-06 21:33:45 34422743040 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Using SSE crc32 instructions
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Completed initialization of buffer pool
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Highest supported file format is Barracuda.
2016-11-06 21:33:45 34422743040 [Note] InnoDB: 128 rollback segment(s) are active.
2016-11-06 21:33:45 34422743040 [Note] InnoDB: Waiting for purge to start
2016-11-06 21:33:45 34422743040 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.31-77.0 started; log sequence number 1616799
2016-11-06 21:33:45 34718177280 [Note] InnoDB: Dumping buffer pool(s) not yet started
OK
Creating OpenGIS required SP-s...
2016-11-06 21:33:47 34422743040 [Note] /usr/local/libexec/mysqld (mysqld 10.1.17-MariaDB) starting as process 8160 ...
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-11-06 21:33:47 34422743040 [Note] InnoDB: The InnoDB memory heap is disabled
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-11-06 21:33:47 34422743040 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Using SSE crc32 instructions
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Completed initialization of buffer pool
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Highest supported file format is Barracuda.
2016-11-06 21:33:47 34422743040 [Note] InnoDB: 128 rollback segment(s) are active.
2016-11-06 21:33:47 34422743040 [Note] InnoDB: Waiting for purge to start
2016-11-06 21:33:47 34422743040 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.31-77.0 started; log sequence number 1616809
2016-11-06 21:33:47 34718177280 [Note] InnoDB: Dumping buffer pool(s) not yet started
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/local/bin/mysqladmin' -u root password 'new-password'
'/usr/local/bin/mysqladmin' -u root -h HOST.example.com password 'new-password'

Alternatively you can run:
'/usr/local/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr/local' ; /usr/local/bin/mysqld_safe --datadir='/var/db/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/local/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Support MariaDB development by buying support/new features from MariaDB
Corporation Ab. You can contact us about this at sales@mariadb.com.
Alternatively consider joining our community based development effort:
http://mariadb.com/kb/en/contributing-to-the-mariadb-project/

Starting mysql.

親切なメッセージがいっぱい表示されていました。

#ps aux | grep mysql | grep -v grep
mysql          8168   0.0  0.3  13144   2704  -  Is   21:33      0:00.01 /bin/sh /usr/local/bin/mysqld_safe...
mysql          8237   0.0 10.1 567668 102768  -  I    21:33      0:00.28 /usr/local/libexec/mysqld --default...

動作も確認しましょう。
それとrootのパスワードのつけておきます。

#mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.17-MariaDB FreeBSD Ports

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye
#mysqladmin -u root password 'PASSword456$'

もしくは、ありがちに、

#mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

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

Thanks for using MariaDB!

でも大丈夫です…というか、必要なことをやってくれて一安心できます。

 次は、PHP関連を入れます。
今は、

#pkg info|grep php
php56-5.6.27                   PHP Scripting Language
php56-curl-5.6.27              The curl shared extension for php
php56-ftp-5.6.27               The ftp shared extension for php
php56-gd-5.6.27                The gd shared extension for php
php56-mysqli-5.6.27            The mysqli shared extension for php
php56-tokenizer-5.6.27         The tokenizer shared extension for php
php56-xml-5.6.27               The xml shared extension for php
php56-zip-5.6.27               The zip shared extension for php
php56-zlib-5.6.27              The zlib shared extension for php

こんなが入っている状態。これだとApacheからまだ扱える状態にありません。
これまでは、mod_php入れて…という流れになりますが、今回はphp-fpmで動かしたいのです。

#sysrc php_fpm_enable=yes
php_fpm_enable:  -> yes

サービスをあげます。

#service php-fpm start
Performing sanity check on php-fpm configuration:
[06-Nov-2016 22:11:32] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful

Starting php_fpm.
#sockstat -4l|grep php
www      php-fpm    8529  0  tcp4   127.0.0.1:9000        *:*
www      php-fpm    8528  0  tcp4   127.0.0.1:9000        *:*
root     php-fpm    8527  7  tcp4   127.0.0.1:9000        *:*

httpd.confでは、

# 2016-11-06
LoadModule fcgid_module libexec/apache24/mod_fcgid.so

の行を追加しておきました。
その前にパッケージの追加が必要でした。(www/mod_fcgid)

#pkg install ap24-mod_fcgid
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.

New packages to be INSTALLED:
        ap24-mod_fcgid: 2.3.9

Number of packages to be installed: 1

47 KiB to be downloaded.

Proceed with this action? [y/N]:

これでサービスを再起動。

#service apache24 restart
Performing sanity check on apache24 configuration:
httpd: Syntax error on line 132 of /usr/local/etc/apache24/httpd.conf: Cannot load libexec/apache24/mod_fcgid.so into server:
 /usr/local/libexec/apache24/mod_fcgid.so: Undefined symbol "ap_unixd_setup_child"

エラーになってしまいました。
なんか悩むの面倒。

#pkg remove ap24-mod_fcgid
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        ap24-mod_fcgid-2.3.9

Number of packages to be removed: 1

Proceed with deinstalling packages? [y/N]: 
...
#pkg install ap24-mod_fastcgi
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.

dovecot2-2.2.24 is locked and may not be modified
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        ap24-mod_fastcgi: 2.4.7_1

Number of packages to be installed: 1

42 KiB to be downloaded.

Proceed with this action? [y/N]:
...
 #cp -p /usr/local/etc/php.ini-production /usr/local/etc/php.ini

入れ替え。
httpd.confに加わった行をコメントをはずして有効に。

# 2016-11-06
LoadModule proxy_module libexec/apache24/mod_proxy.so
...
# 2016-11-06
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...
# 2016-11-06
LoadModule fastcgi_module     libexec/apache24/mod_fastcgi.so

これでApacheも再起動に成功できました。
/usr/local/etc/apache24/Includes/php.confを準備。
とりあえず暫定で。

<LocationMatch "^/.*\.php*$">
    ProxyPass fcgi://127.0.0.1:9000/usr/local/www/apache24/data/
</LocationMatch>

<IfModule dir_module>
    DirectoryIndex index.php index.html
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
</IfModule>

phpinfo(); の表示を確認します。該当箇所は、

こんな感じになっていることを確認できると思います。

ここまで来たら、やっとWordPressに話が戻せます。
ドキュメントルート位置自身を変更してしまうことにしました。
httpd.confを修正します。

# 2016-11-07
DocumentRoot "/usr/local/www/wordpress"
<Directory "/usr/local/www/wordpress">
      Options           FollowSymLinks
      AllowOverride     All
      Require           all granted
</Directory>

それと、これに併せて Includes/php.conf もこれに変更します。
この状態で Apacheを再起動し、アクセスすればページが表示されてきます。

うむ、非SSL通信だけど、まぁいいかな…と思ったら、既にアクセス来ているな。
SSLどこの話以前にこのタイミングは困るので暫定で制限しました。
# グローバルな環境で試しているなよ!ってことではあるが

Require host .example.com

これまで通り、設定のサンプルをセットします。

#cd /usr/local/www/wordpress
#cp -p wp-config-sample.php wp-config.php
#mv wp-config-sample.php wp-config-sample.php_OLD
#vi wp-config.php

ウェブでは無く、ここは手動で設定を入れておきました。
3箇所を自分の設定するものにしておきます。

// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpressdb');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wordpressdb');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'PASSword');

このように決めて、実際にDBに登録をしておきます。

#mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.1.17-MariaDB FreeBSD Ports

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE wordpressdb;
Query OK, 1 row affected (0.10 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpressdb.* TO wordpressdb@localhost IDENTIFIED BY 'PASSword';
Query OK, 0 rows affected (0.17 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> quit;
Bye

 では、再度ウェブページにアクセスしてみます。

 
 
 

なんか化けていて残念な状態もあるけど、動作を開始したようです。

 FTPサーバの導入

 さて、FTPの導入を行うことにします。
ホームページビルダーで利用できるのは、以下のように、FTPとFTPESとFTPSということらしい。
知ったかぶりのままにしてきたので、一応確認。
Wikipediaでいいかな。FTPES(Explicit mode)は、認証だけSSL/TLSで行うのだね。その後は普通にFTP。
FTPS(Implicit)は、認証以降もセキュアな通信なのかな?
そもそも、ヤバイ内容を転送するときには、SFTPなのでExplicitな通信でいいじゃん、という気がする。

 結局、わかったフリを続けるしかなさそうだけど、vsftpdはこれらをサポートしそうなので試します。
マジか!うちのサーバ未対応状態放置だったんかよ。
…というか、どのように設定すると対応になるのだろう。
なるほど、vsftpd-sslというパッケージ入れているのに、SSLの記載ないな。
うちのページで設定方法書いたはずなのに、自分のサイトには使っていなかったらしい。

なるほど。設定したら動作させることができました。
ということで、インストールから開始することにします。

#pkg install vsftpd-ssl
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        vsftpd-ssl: 3.0.3

Number of packages to be installed: 1

119 KiB to be downloaded.

Proceed with this action? [y/N]:

インストールは完了。

#sysrc vsftpd_enable="YES"
vsftpd_enable:  -> YES

設定ファイルを準備しましょう。

#cd /usr/local/etc
#ll vsftpd.conf*
-rw-r--r--  1 root  wheel  4749 Nov  8 21:49 vsftpd.conf
-rw-r--r--  1 root  wheel  4749 Nov  4 07:34 vsftpd.conf.dist
#vi vsftpd.conf

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

#grep -v ^# vsftpd.conf | grep -v ^$
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
listen=YES
background=YES
use_localtime=YES
userlist_deny=YES
userlist_file=/etc/ftpusers
text_userdb_names=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
require_ssl_reuse=NO
rsa_cert_file=/usr/local/etc/apache24/vsftpd.pem

こんなにしました。force_local_data_ssl=YESにして、強制にしたいですけど、既存ユーザ次第かな。

#cd /usr/local/etc/apache24
#openssl genrsa -out ./server.key 4096
Generating RSA private key, 4096 bit long modulus
.........................++
.............................................................................++
e is 65537 (0x10001)
#openssl req -new -days 3650 -key ./server.key -out ./server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:SHINJUKU
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:*.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#openssl x509 -in ./server.csr -out ./server.crt -req -signkey ./server.key -days 3650
Signature ok
subject=/C=JP/ST=TOKYO/L=SHINJUKU/O=example.com/CN=*.example.com
Getting Private key
#chmod 400 server.*
#cat server.key server.cserver.crt  server.csr
#cat server.key server.crt > vsftpd.pem
#chmod 400 vsftpd.pem

こんな感じ。オレオレ証明書を使うかどうかは別にして、こんな感じで準備しました。

#service vsftpd start
#ps aux | grep vsftpd|grep -v grep
root           23327   0.0  0.5  19684   5440  -  Is   22:09      0:00.00 /usr/local/libexec/vsftpd

vsftpd.chroot_list には、利用を許可するユーザ名を記載しておきます。
個人的には、sshで接続するユーザもsshd_configでAllowGroupsで指定していますので、ログインできるユーザは限定しています。

これで利用ができるようになりました。
※しかしながら、後でHomepage Builderの問題により、設定を1行加えることになります

 ホームページビルダー19で試す

 さて、ホームページビルダーでWordPress連動をやってみる、というのをやってみました。
まず、個人ユーザで使うので、これまで設定した内容をコピーし、またApacheの設定は変更してしまうことにしました。
※いちいちバーチャルの指定を書くのも面倒なので

 まず、ユーザは仮に testというアカウントとして /home/test/test.example.com/ というディレクトリがドキュメントルートとして話を進めます。
なので、まずは今回作成した /usr/local/www/wordpress/ をユーザのフォルダにコピーしました。

#cp -pr /usr/local/www/wordpress/ /home/test/test.example.com
#chown -R test:test test.example.com/

みたいな感じです。
当然に、httpd.confとphp.confに書いたディレクトリ情報は、上記のディレクトリに変更してあげて、apacheのrestartをかけておきます。

 

この辺りは、これまでに設定したので大丈夫!(FFFTPでしか動作確認していないけど)のはず。

 

エラー来ました…。流石、わかりにくいエラーメッセージだけで片付けるジャストシステム。
エラーコード 1001といわれても。ユーザアンフレンドリーだと思います。
ファイル転送ツールという機能があるので、そっちでエラーメッセージが
「error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher」
と返していることがわかります。
これは、google先生にお聞きすると、類似事例に出会えるので、vsftpdの設定に緩和策を突っ込むと大丈夫になると分かります。

ssl_ciphers=HIGH

これを加えるだけ。サービスリスタートで問題なく接続できるようになりました。
この後にWordPress設定画面が来ますが、ここでは一般のFTP設定箇所とWordPress設定名とサイトURLを指定します。
WordPressを公開サーバーにインストールするには、クリックを入れないで完了にします。

サイトの公開をクリックすると、普通にFTP転送が開始します。
実際にページを見ると…以前作成したテストページしか出てきません。
これは、WordPressの設定画面で変更をすれば出てくるので慌てる必要はないです。

 「WordPressがインストールされていない、もしくはインストール先フォルダの入力が誤っている可能性があります」
と、わかりにくいメッセージで少し悩む時間もありましたけど、上記のようにWordPressの一式がFTPでアクセスするユーザのオーナーとパーミッションで導入されていれば解消されます。
ジャストシステム系のレンタルサーバ連携を前提にしているモデル…ということで汎用的には作られていないのだとあきらめて使うしか無いですね。
 
 

これでWordPressが利用可能になりました。

SSL化とか、他のユーザでバーチャルドメインで利用させるための設定などを続きでやりますが、ここではこれまでです。

【改訂履歴】作成:2016/11/06 更新:2016/11/12

【参考リンク】

Copyright © 1996,1997-2006,2007- by F.Kimura,