最初に
今回使用したのはさくらいたーネットの「さくらのVPS」に2024年時点で最新のubuntuのバージョンを入れ、そこにLAMP環境とcertbotでSSLを設定する方法を解説します。
管理者用の権限が必要なコマンドは sudo で実行してください。
本章でカバーする作業
- システムのチェックとaptのアップデート
- SSHの設定
- PHPとApache2のインストールと設定
- Apache2のバーチャルドメイン設定
- Certbotのインストール
- MariaDBのインストールと設定
関連記事
チェックとパッケージマネージャのアップデート
チェック
cat /etc/os-release
root@spankyjpn:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
root@spankyjpn:~#
aptを使ってパッケージのアップデート
apt update
apt upgrade
SSHの公開鍵の設定
さくらのVPSでubuntuを使う場合は、管理ユーザーのユーザー名は ubuntu がデフォルト。
ユーザーubuntuにssh用のフォルダを作成する
cd /home/ubuntu
mkdir .ssh
chown ubuntu:ubuntu .ssh
chmod 700 .ssh
cd .ssh
SSHキーを作成する
puttyを使っている人は、まずputtygen.exe を使ってputty用の秘密鍵と公開鍵を作成しておく。
次に、visual studio codeやNavicat、openssh形式のキーファイルを使う人用にputty形式の秘密鍵をopenssh形式の秘密鍵に変換して保存しておく。
SSHD設定の調整
/etc/ssh/sshd_config の最低限の設定
SSHの設定がすべてOKになったら「PasswordAuthentication」は「no」にしていくと良い
PermitRootLogin no
PasswordAuthentication no
ポート番号
デフォルトのポート番号を使いたくない人は変更しておく。気にしないならこのままでいい。
Port 22
SSHDの再起動
systemctl restart ssh
PHP&Apache2のインストール
apt install php
phpをインストールしたらapache2もいっしょに入った・・・
root@spankyjpn:~# apt install php
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
apache2 apache2-bin apache2-data apache2-utils
libapache2-mod-php8.3 libapr1t64 libaprutil1-dbd-sqlite3
libaprutil1-ldap libaprutil1t64 liblua5.4-0 php-common php8.3
php8.3-cli php8.3-common php8.3-opcache php8.3-readline ssl-cert
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
www-browser php-pear
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils
libapache2-mod-php8.3 libapr1t64 libaprutil1-dbd-sqlite3
libaprutil1-ldap libaprutil1t64 liblua5.4-0 php php-common
php8.3 php8.3-cli php8.3-common php8.3-opcache php8.3-readline
ssl-cert
0 upgraded, 18 newly installed, 0 to remove and 5 not upgraded.
Need to get 6997 kB of archives.
After this operation, 30.5 MB of additional disk space will be used.
Do you want to continue? [Y/n]
バージョンの確認
php -v
root@spankyjpn:~# php -v
PHP 8.3.6 (cli) (built: Jun 13 2024 15:23:20) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies
root@spankyjpn:~#
apache2 -v
root@spankyjpn:~# apache2 -v
Server version: Apache/2.4.58 (Ubuntu)
Server built: 2024-07-17T18:55:23
root@spankyjpn:~#
Apache2設定&Apache2起動
vim /etc/apache2/conf-enabled/security.conf
systemctl restart apache2
root@spankyjpn:~# vim /etc/apache2/conf-enabled/security.conf
➤ ServerTokens を 「Prod」に変更
root@spankyjpn:~# systemctl restart apache2
root@spankyjpn:~#
パケットフィルタの設定
さくらのVPSだとufwを使わなくてもクラウドサーバのコントロールパネルからHTTP(80番ポート)とHTTPS(443番ポート)の設定ができる。
Apache2バーチャルドメインの設定
フォルダ(ドキュメント・ルート)の設定
「/etc/apache2/sites-available」に以下の設定ファイルを作成する。
ファイル名はドメイン名がspankyjpn.comであれば「spankyjpn.com.conf」にする。
バーチャルドメインの設定
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName ドメイン名
ServerAlias www.ドメイン名
DocumentRoot /var/www/htdocs_ドメイン名/www
ErrorLog ${APACHE_LOG_DIR}/ドメイン名_error.log
CustomLog ${APACHE_LOG_DIR}/ドメイン名_access.log combined
ScriptAlias /cgi-bin/ /var/www/htdocs_ドメイン名/cgi-bin/
<directory /var/www/htdocs_ドメイン名/www>
Options FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</directory>
</VirtualHost>
ファイルを有効化する
ドメイン名が spankyjpn.com であれば spankyjpn.com.conf を指定。
a2ensite ドメイン名.conf
Apache2用設定ファイルをチェックしてOKならApache2を再起動
ドメイン名が spankyjpn.com であれば spankyjpn.com.conf を指定。
apache2ctl configtest
root@spankyjpn:/etc/apache2/sites-available# apache2ctl configtest
Syntax OK
root@spankyjpn:/etc/apache2/sites-available#
systemctl restart apache2
Apache2のバーチャルドメイン・サイトを停止する場合
a2dissite ドメイン名.conf
systemctl restart apache2
Apache2用のユーザーとグループ
Apache2では以下のユーザーとグループを使うように /etc/apache2/envvars 内で定義されています。
cat /etc/apache2/envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
つまり /var/www 以下でApache2が使うであろうファイルは「www-data」というユーザー及びグループに設定しておいたほうが良さそうです。
chown -R {ユーザー名}:{グループ名} .
find . -type f -print | xargs chmod 664
find . -type d -print | xargs chmod 775
Certbotのインストール
apt install certbot python3-certbot-apache
MariaDB (MySQL互換DB)のインストール
インストール
apt install mariadb-server
インストールできたかを確認
systemctl status mariadb
Active: active (running)
と表示されていればOK
root@spankyjpn:/var/www# systemctl status mariadb
● mariadb.service – MariaDB 10.11.8 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Active: active (running) since Thu 2024-09-12 20:24:14 JST; 41s ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: xxxxx (mariadbd)
Status: “Taking your SQL requests now…”
Tasks: 13 (limit: xxxxx)
Memory: xx.xM (peak: xx.xM)
CPU: xxxms
CGroup: /system.slice/mariadb.service
└─xxxxxx /usr/sbin/mariadbd
mysql_secure_installation
mysql_secure_installation
Enter current password for root (enter for none): エンターキー
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
MariaDBのデータをすべて消去して再起動する場合はこれ
systemctl stop mariadb
rm -rf /var/lib/mysql/*
mysql_install_db –datadir=/var/lib/mysql –user=mysql
systemctl start mariadb
MariaDBをNavicatでつかえるようにする
基本タブは、「パスワード」欄にMariaDBのrootユーザーのパスワード。またはアクセスできるユーザー名を「ユーザー名」欄にいれてそのユーザーのパスワードを「パスワード」欄に入れます。ポート番号を変えていなければそのまま使用。
SSHタブについて。
「ホスト」欄:サーバのIPアドレスでOK
「ポート」欄:/etc/ssh/sshd_configでポート番号を変更していたらここを変える
「ユーザー名」欄:さくらにVPSのubuntuサーバなら「ubuntu」
「認証方式」欄:公開鍵
「プライベートキー」欄:SSHの秘密鍵
「パスフレーズ」欄:SSHのパスフレーズ
「パスフレーズを保存」:お好みに応じてON
MariaDBトラブルシューティング
Server Refused Our Key
多くの場合、SSHの公開鍵を格納している場所が間違っていたり、.ssh フォルダや authorized_keys ファイルのパーミッションが間違っていることが原因のようです。SSH設定の項目を見直してパーミッションなどを再度確認します。
Access denied for user
このエラーは、MariaDBを「mysql_secure_installation」で初期設定したときにおこります。このコマンドで初期化をした直後は、ローカルホスト内であれば rootユーザーになり、「mysql」と打ち込んだけでMariaDBにログインできてしまいますが、下記のコマンドを投入してrootユーザーのパスワードを設定することで、ローカルホストからでもパスワードを打ち込まなければログインできなくできるのと同時に、リモートホストからSSHトンネリングを使ってアクセスすることもできるようになります。
ALTER USER ‘root’@’localhost’ IDENTIFIED VIA mysql_native_password USING PASSWORD(‘MariaDBのrootパスワード’);
FLUSH PRIVILEGES;