Raspberry Pi 3 Model B+ 上の FreeBSD 13.0-RELEASE 環境に Apache/PHP/MySQL をインストールする手順です。
Apache/PHP/MySQL の基本的な設定変更までを行います。
パッケージをインストールします。
本稿では MySQL のバージョンは 5.7 を選択することとします。
root@raspberrypi:~ # pkg install mysql57-server
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 17 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
ca_root_nss: 3.63
curl: 7.78.0
cyrus-sasl: 2.1.27_1
groff: 1.22.4_3
indexinfo: 0.3.1
libedit: 3.1.20210216,1
libevent: 2.1.12
libiconv: 1.16
liblz4: 1.9.3,1
libnghttp2: 1.43.0
libpaper: 1.1.24.4
mysql57-client: 5.7.35
mysql57-server: 5.7.35
perl5: 5.32.1_1
protobuf: 3.14.0,1
psutils: 1.17_5
uchardet: 0.0.7
Number of packages to be installed: 17
The process will require 321 MiB more space.
38 MiB to be downloaded.
Proceed with this action? [y/N]: y
起動スクリプトは /usr/local/etc/rc.d ディレクトリ以下に配置されます。
root@raspberrypi:~ # ls -l /usr/local/etc/rc.d/mysql-server
-rwxr-xr-x 1 root wheel 2187 Aug 30 08:44 /usr/local/etc/rc.d/mysql-server
設定ファイルは /usr/local/etc/mysql ディレクトリ以下に配置されます。
root@raspberrypi:~ # ls -l /usr/local/etc/mysql/my.cnf
-rw-r--r-- 1 root wheel 2206 Aug 30 08:44 /usr/local/etc/mysql/my.cnf
本稿では以下の方針例の通り設定ファイルの編集 (各設定値の変更) を行うこととします。
バッファプールのサイズ | 1G から 64M に変更 |
---|---|
同時接続数 | 15 に変更 |
文字コードの設定 | UTF8 に変更 |
その他リソース関連設定 | 原則としてデフォルト値に変更 |
バイナリログ出力 | 無効化 |
スロークエリログ出力 | 無効化 |
レプリケーション関連設定 | 無効化 |
SSL 接続 | 無効化 |
以下は編集後の /usr/local/etc/mysql/my.cnf の内容例となります。
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
prompt = \u@\h [\d]>\_
no_auto_rehash
default-character-set = utf8
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
bind-address = 127.0.0.1
basedir = /usr/local
datadir = /var/db/mysql
tmpdir = /var/db/mysql_tmpdir
#slave-load-tmpdir = /var/db/mysql_tmpdir
secure-file-priv = /var/db/mysql_secure
#log-bin = mysql-bin
#log-output = TABLE
#master-info-repository = TABLE
#relay-log-info-repository = TABLE
#relay-log-recovery = 1
#slow-query-log = 1
#server-id = 1
#sync_binlog = 1
#sync_relay_log = 1
#binlog_cache_size = 16M
#expire_logs_days = 30
default_password_lifetime = 0
#enforce-gtid-consistency = 1
#gtid-mode = ON
safe-user-create = 1
lower_case_table_names = 1
explicit-defaults-for-timestamp = 1
myisam-recover-options = BACKUP,FORCE
open_files_limit = 5000
table_open_cache = 2000
table_definition_cache = 1400
net_retry_count = 16384
key_buffer_size = 8M
max_allowed_packet = 4M
query_cache_type = 0
query_cache_size = 0
#long_query_time = 0.5
innodb_buffer_pool_size = 64M
innodb_data_home_dir = /var/db/mysql
innodb_log_group_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:12M:autoextend
innodb_temp_data_file_path = ibtmp1:12M:autoextend
innodb_flush_method = O_DIRECT
innodb_log_file_size = 16M
innodb_log_buffer_size = 8M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_autoinc_lock_mode = 2
skip-symbolic-links
max_connections = 15
ssl = 0
character-set-server = utf8
[mysqldump]
max_allowed_packet = 4M
quote_names
quick
MySQL を起動します。
root@raspberrypi:~ # service mysql-server onestart
Starting mysql.
初期パスワードファイルが /root/.mysql_secret として作成されます。
以下は初期パスワードファイルの内容例となります。
# Password set for user 'root@localhost' at 2021-10-07 13:42:53
?j0wo2oFhLWl
MySQL に root ユーザで接続します。
root@raspberrypi:~ # /usr/local/bin/mysql -u root -p`grep -v "^#" /root/.mysql_secret`
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost [(none)]>
root ユーザのパスワードを変更します。
以下はパスワードを『Password1234』の文字列に変更する場合の例となります。
root@localhost [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password1234';
Query OK, 0 rows affected (0.01 sec)
MySQL との接続を切断します。
root@localhost [(none)]> quit
Bye
MySQL の自動起動が行われるようにする場合は、/etc/rc.conf に『mysql_enable="YES"』の設定を追加します。
mysql_enable="YES"
なお自動起動の設定後は、service コマンドでの起動は onestart ではなく start を指定 (『service mysql-server start』を実行) となります。
MySQL のログファイルは切り替え後にフラッシュ操作が必要となるため、本稿では手動でログローテーションを行うこととします。
※newsyslog の設定だけではログローテーションは完結しない形となります。
ログファイルの切り替えを行います。
本稿では日付 (_YYYYMMDD) のサフィックスを付与することとします。
root@raspberrypi:~ # mv /var/db/mysql/raspberrypi.err /var/db/mysql/raspberrypi.err_`/bin/date '+%Y%m%d'`
フラッシュ操作を行います。
mysqladmin flush-logs コマンド実行後、パスワード入力のプロンプトが表示されます。
パスワードを入力します。
root@raspberrypi:~ # /usr/local/bin/mysqladmin -u root -p flush-logs
Enter password:
新規ログファイルの作成とオープンが行われます。
root@raspberrypi:~ # ls -l /var/db/mysql/raspberrypi.err*
-rw-r----- 1 mysql mysql 0 Oct 7 14:40 /var/db/mysql/raspberrypi.err
-rw-r----- 1 mysql mysql 2974 Oct 7 14:05 /var/db/mysql/raspberrypi.err_20211007
パッケージをインストールします。
root@raspberrypi:~ # pkg install apache24
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 10 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
apache24: 2.4.49
apr: 1.7.0.1.6.1_1
db5: 5.3.28_7
expat: 2.4.1
gdbm: 1.20
gettext-runtime: 0.21
jansson: 2.13.1
libxml2: 2.9.12
pcre: 8.45
readline: 8.1.1
Number of packages to be installed: 10
The process will require 92 MiB more space.
20 MiB to be downloaded.
Proceed with this action? [y/N]: y
MPM のデフォルトは prefork となります。
root@raspberrypi:~ # /usr/local/sbin/httpd -V
Server version: Apache/2.4.49 (FreeBSD)
Server built: unknown
Server's Module Magic Number: 20120211:116
Server loaded: APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: prefork
threaded: no
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"
起動スクリプトは /usr/local/etc/rc.d ディレクトリ以下に配置されます。
root@raspberrypi:~ # ls -l /usr/local/etc/rc.d/apache24
-rwxr-xr-x 1 root wheel 6132 Sep 23 04:19 /usr/local/etc/rc.d/apache24
設定ファイルは /usr/local/etc/apache24 ディレクトリ以下に配置されます。
root@raspberrypi:~ # ls -l /usr/local/etc/apache24/httpd.conf
-rw-r--r-- 1 root wheel 21089 Sep 23 04:19 /usr/local/etc/apache24/httpd.conf
/usr/local/etc/apache24/httpd.conf の『ServerName』の設定を変更します。
以下は ServerNameを『raspberrypi』とする場合の例となります。
#ServerName www.example.com:80
ServerName raspberrypi
Apache を起動します。
root@raspberrypi:~ # service apache24 onestart
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
DocumentRoot (/usr/local/www/apache24/data ディレクトリ) に配置された index.html にアクセスします。
以下例の通り HTML ソースが表示されることを確認します。
root@raspberrypi:~ # /usr/local/bin/curl http://localhost/index.html
<html><body><h1>It works!</h1></body></html>
Apache の自動起動が行われるようにする場合は、/etc/rc.conf に『apache24_enable="YES"』の設定を追加します。
apache24_enable="YES"
なお自動起動の設定後は、service コマンドでの起動は onestart ではなく start を指定 (『service apache24 start』を実行) となります。
/etc/newsyslog.conf.d/apache24.conf を新規作成してログローテーションの設定を行います。
以下は /var/log/httpd-access.log と /var/log/httpd-error.log に対して、毎日 00:00 に bzip2 圧縮を行い 7 世代保存を行う場合の例となります。
/var/log/httpd-access.log 644 7 * @T00 J /var/run/httpd.pid 30
/var/log/httpd-error.log 644 7 * @T00 J /var/run/httpd.pid 30
パッケージをインストールします。
本稿では PHP のバージョンは 7.4 を選択することとします。
また mbstring と mysqli の拡張モジュールも併せてインストールすることとします。
root@raspberrypi:~ # pkg install mod_php74 php74-mbstring php74-mysqli
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 7 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
libargon2: 20190702
mod_php74: 7.4.24
oniguruma: 6.9.7.1
pcre2: 10.37
php74: 7.4.24
php74-mbstring: 7.4.24
php74-mysqli: 7.4.24
Number of packages to be installed: 7
The process will require 43 MiB more space.
7 MiB to be downloaded.
Proceed with this action? [y/N]: y
httpd.conf への PHP モジュールのロードに関する設定が自動的に追加されます。
LoadModule php7_module libexec/apache24/libphp7.so
設定ファイルの雛型をコピーして /usr/local/etc/php.ini を新規作成します。
本稿では php.ini-production を使用することとします。
root@raspberrypi:~ # cp -p /usr/local/etc/php.ini-production /usr/local/etc/php.ini
/usr/local/etc/php.ini に『date.timezone = Asia/Tokyo』の設定を追加します。
;date.timezone =
date.timezone = Asia/Tokyo
/usr/local/etc/php.ini に『mbstring.language = Japanese』の設定を追加 (コメントアウトを解除) します。
;mbstring.language = Japanese
mbstring.language = Japanese
/usr/local/etc/apache24/Includes/php74.conf を新規作成して PHP ファイルに関するハンドラの設定を行います。
以下は内容例となります。
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
設定の反映 (Apache の再起動) を行います。
※自動起動の設定後は、service コマンドでの再起動は onerestart ではなく restart を指定 (『service apache24 restart』を実行) となります。
root@raspberrypi:~ # service apache24 onerestart
Performing sanity check on apache24 configuration:
Syntax OK
Stopping apache24.
Waiting for PIDS: 2722.
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.
/usr/local/www/apache24/data/test.php を新規作成します。
以下は内容例となります。
<?php
$link = mysqli_connect( "localhost", "root", "Password1234" );
if( mysqli_connect_errno() ){
printf( "Connect failed: %s\n", mysqli_connect_error() );
exit();
}
printf( "Server version: %s\n", mysqli_get_server_info($link) );
mysqli_close( $link );
?>
test.php にアクセスします。
以下例の通り MySQL のバージョンが表示されることを確認します。
root@raspberrypi:~ # curl http://localhost/test.php
Server version: 5.7.35