2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi 4 でブログサイトを立ち上げた

Last updated at Posted at 2024-03-06

 Raspberry Pi 4(以下「raspi」)に LAMP 環境を整え、WordPress でブログサイトを立ち上げた。情報共有と復旧時の備えとして投稿する。誤記・誤認があったらご指摘ください。

OS のインストール

 基本的にはこの記事に従って作業した。ただし、今回は raspi を web サーバーとしてのみ稼働させるのと、環境設定は全て Windows マシンから ssh を用いて行うので OS は Raspberry Pi OS (64-bit) Lite を選択した。また、モニターとの接続は無用なので「... OS customization setting ?」は「YES」を選択して必要事項を入力した。




ONU の設定

 raspi に microSD をアタッチして初回の起動した後 DHCP が割り振る IP アドレス(ここでは「192.168.1.5」とする)に対して次の設定を行った。

  • IP アドレスの固定
  • 80/tcp と 443/tcp の解放

SSH の設定

著者の備忘録に従って鍵交換認証の設定を行った。

% cd C:\Users\usr-win\.ssh
% ssh-keygen -R 192.168.1.5
% scp ir_rsa.pub usr-rp@192.168.1.5:/home/usr-rp
% ssh usr-rp@192.168.1.5
$ mkdir .ssh
$ touch .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ cat id_rsa.pub >> .ssh/authorized_keys
$ rm id_rsa.pub

 同時に、これ以降は大半の作業を root 権限で行うことになるので以下を実行した。root のパスワードは後に MariaDB の初期設定時に必要になる。インストール作業が全て終了したら root によるログインは禁止しておく。

sudo su
passwd 
cp -r /home/usr-x/.ssh/ /root/.ssh/
vi /etc/ssh/sshd_config # 「PermitRootLogin yes」に変更
systemctl restart sshd
vi /root/.bashrc # 末尾に「alias h='history'」を追加
apt update
apt -y upgrade
reboot

 Windows マシンの ~\.ssh\config に以下を追加する。

Host raspi
    Hostname 192.168.1.5 
    User root
    ForwardAgent yes

LAMP の設定

 今回インストールした Raspberry Pi OS は Debian GNU/Linux (bookworm) なのでこの記事が非常に参考になった。
 ここでは FQDN が www.example.com、サーバー管理者のメールアドレスが admin@example.com であるものとして記す。
 なお、作業は VSCode Development を使うとコマンドの投入が本文のコピー・ペーストで済み、ファイルの編集にサーチボックスが使えるのでお勧めである。

Cerbot のインストール

 「SSL 証明書を取得する (Let's Encrypt)」に従った。

apt -y install certbot
certbot certonly --webroot -w /var/www/html -d www.example.com
# 以下 3 行は certbot に対する応答
Enter email address -> admin@example.com
agree in order to register -> Y
share your email address with the Electronic Frontier Foundation -> Y

certbot certonly --standalone -d www.example.com

PHP のインストール

PHP 8.2 : インストール」に従うとともに、wordpress.org が推奨しているモジュールをインストールする。

apt -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring
apt -y install php-fpm php-curl php-zip imagemagick php-imagick php-intl

MariaDB のインストール

 「MariaDB 10.11 : インストール」に従った。

apt -y install mariadb-server
vi /etc/mysql/mariadb.conf.d/50-server.cnf
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci
systemctl restart mariadb
mysql_secure_installation
# 以下 7 行は mysql_secure_installation に対する応答
Enter current password for root -> 最初にログインした時に設定したパスワード
Switch to unix_socket authentication [Y/n] -> n
Change the root password? [Y/n] -> n
Remove anonymous users? [Y/n] -> y
Disallow root login remotely? [Y/n] -> y
Remove test database and access to it? [Y/n] -> y
Reload privilege tables now? [Y/n] -> y

Apsche2 のインストール

インストール

apt -y install apache2 libapache2-mod-php libapache2-mod-security2
vi /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
vi /etc/apache2/mods-enabled/dir.conf
DirectoryIndex index.html index.htm index.php
vi /etc/apache2/apache2.conf

 70 行目に追加

ServerName www.example.com
vi /etc/apache2/sites-enabled/000-default.conf
ServerAdmin admin@example.com
systemctl reload apache2

 web ブラウザで http://www.example.com にアクセスして Apache2 Debian Default Page が表示されることを確認する。

SSL/TLS の設定

vi /etc/apache2/sites-available/default-ssl.conf
ServerAdmin admin@example.com
SSLCertificateFile      /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example/chain.pem
a2enmod ssl
systemctl restart apache2

 web ブラウザで https://www.example.com にアクセスして Apache2 Debian Default Page が表示されることを確認する。

PHP スクリプトを利用する

vi /etc/php/8.2/apache2/php.ini
date.timezone = "Asia/Tokyo"
systemctl reload apache2
echo '<?php phpinfo(); ?>' > /var/www/html/info.php

 web ブラウザで https://www.example.com/info.php にアクセスして PHP Version 8.2.7 が表示されることを確認する。

PHP + PHP-FPM の設定

vi /etc/apache2/sites-available/default-ssl.conf

 <VirtualHost> - </VirtualHost> 内に追記

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>
vi /etc/php/8.2/fpm/pool.d/www.conf

 最終行に追記

php_value[max_execution_time] = 600
php_value[memory_limit] = 2G
php_value[post_max_size] = 2G
php_value[upload_max_filesize] = 2G
php_value[max_input_time] = 600
php_value[max_input_vars] = 2000
php_value[date.timezone] = Asia/Tokyo
vi /etc/apache2/apache2.conf
<Directory /var/www/>
    Options Indexes FollowSymLinks
    # AllowOverride None
    AllowOverride All
    Require all granted
</Directory>
a2enmod proxy_fcgi setenvif rewrite
a2enconf php8.2-fpm
systemctl restart php8.2-fpm apache2

 web ブラウザで https://www.example.com/info.php にアクセスして [FPM/FastCGI] が表示されることを確認する。

mod_security の設定

cp -p /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
systemctl reload apache2

 web ブラウザで https://www.example.com/?q=<script にアクセスして Not Acceptable が表示されることを確認する。

WordPress のインストール

 「Apache2 : ブログシステム : WordPress」に従った。ただし作業済の工程はスキップし、インストール先は /var/www/html に変更した。

wget https://ja.wordpress.org/latest-ja.tar.gz
tar zxvf /root/latest-ja.tar.gz -C /var/www/html
rm /root/latest-ja.tar.gz
chown -R www-data /var/www/html/wordpress
touch /etc/apache2/conf-available/wordpress.conf
vi /etc/apache2/conf-available/wordpress.conf
Timeout 600
ProxyTimeout 600

Alias /wordpress "/var/www/wordpress/"
DirectoryIndex index.php index.html index.htm
<Directory "/var/www/wordpress">
    Options FollowSymLinks
    AllowOverride All
    Require all granted

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</Directory>
a2enconf wordpress
systemctl restart apache2
mysql

 mysql のプロンプトに対して以下の SQL 文を入力して wordpress データベースを作成する。

create database wordpress; 
grant all privileges on wordpress.* to wordpress@'localhost' identified by 'password';
exit

 web ブラウザで https://www.example.com/wordpress/wp-admin/setup-config.php にアクセスしてインストールを進める。


 先に設定した wordpress データベースのユーザー名は wordpress、データベースのパスワードは password である。

 次回以降、上記のアカウントで https://www.example.com/wordpress/wp-login.php?wp_lang=ja にログインするとダッシュボードが表示される。
 以上が正常に動作することを確認のうえ FQDN で wordpress にリダイレクトするよう以下を実行する。

mv /var/www/html/index.html /var/www/html/index_.html
touch /var/www/html/.htaccess 
vi /var/www/html/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www.)?www.example.com$
    RewriteCond %{REQUEST_URI} !^/wordpress/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /wordpress/$1
    RewriteCond %{HTTP_HOST} ^(www.)?www.example.com$
    RewriteRule ^(/)?$ wordpress/index.php [L] 
</IfModule>
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?