ホーム > Linux Server

LAMPでWebサーバーを立てる

Webサーバーとして使っているVultrはディスク容量が少ないので、ファイルサーバーとしてTime4VPSのStorage VPSを利用しています。このVPSはOpenVZ方式なのでLinux以外のOSを選択できないのです。最近仕事でApacheを触ることも多いし、ちょっと勉強がてらLAMPやります。

OpenVZ

Linuxはディストリビューションごとにそれぞれ特徴も違えばお作法も違う。でも元はみんな同じカーネル。ディストリビューションっていうのは周辺ツールやGUIなどをそれぞれの思想に従って組み合わせたものと思っていい。

というわけで仮想化環境を作るのに「ハードウェアレベルの仮想マシンを作って重くなるよりも、ホストのカーネル使いまわして軽い仮想マシン作ったほうがいいんじゃね?」という発想で作られたRed Hat Enterprise Linux用の仮想化ソフトウェアがOpenVZです。

そういうわけで、Time4VPSのOpenVZ方式のVPSで提供されるOSはCentOS/Debian/Ubuntuの中から選ぶことになります。Raspberry PiのOSはDebianベースだし、最近お気に入りのChromebookに入っているLinuxもDebianということで、DebianでLAMP作ってみます。

ディレクトリ構成その他がCentOSよりもFreeBSDに近いからってのもある。

Apache2.4を入れる

2019年11月現在、Time4VPSのStorage VPSで使えるDebianの最新バージョンは9.11。このバージョンのパッケージで提供されているApacheはちょい古い2.4.25。これをインストールします。

1
apt install apache2

Debianの場合、インストールできたらApacheはすでに起動しています。状態はsystemctlで確認できます。

1
systemctl status apache2.service

これだけでもうテストページにアクセスできちゃう。DebianのテストページはApacheの解説ページになっているので、簡単な概要がわかっちゃう。

セキュリティを考慮してApacheバージョンを非表示にしておきましょう。/etc/apache2/conf-available/security.confを書き換えます。

1
2
3
4
5
6
7
8
9
# diff security.conf security.conf.bak
25c25
< ServerTokens Prod
---
> ServerTokens OS
35c35
< ServerSignature Off
---
> ServerSignature On

ところでDebianのapacheのユーザーとグループ名はデフォルトでwww-dataです。これが気に入らないので変えてしまいましょう。一旦apacheデーモンを止めて、ユーザー名とグループ名を変更します。

1
2
3
systemctl stop apache2.service
usermod -l www www-data
groupmod -n www www-data

確認はidコマンドでできます。

1
2
# id www
uid=33(www) gid=33(www) groups=33(www)

ユーザー名を変えてしまったので、Apacheの設定ファイルも書き換えておきます。

/etc/apache2/apache2.confを見ると、apacheのユーザーとグループは/etc/apache2/envvars内で設定しているようです。

1
2
3
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

というわけで該当箇所を以下の通り書き換え。

1
2
3
4
5
# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www

続いて、VirtualHost機能を使ってマルチドメイン設定をしてみます。/etc/apache2/site-available/000-default.confを編集します。ドメインごとにVirtualHostブロックを作ってやると、一つのVPS内で複数のドメインを扱うことができます。

1
2
3
4
5
<VirtualHost *:80>
DocumentRoot /var/www/html/example
ServerName example.com
ServerAlias www.example.com
</VirtualHost>

この設定を有効にするには同ファイルを/etc/apache2/site-enabled/000-default.confとしてシンボリックリンクを張ります。

PHP7.4のインストール

Debian 9.11のphpもバージョンが古い。リポジトリの書き換えはDebian開発者のサイトにやり方が載っています。

サイト中程のPHP PackagesのDebian DPAリンク先のREADME.txtにあるとおり。

1
2
3
4
apt -y install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update

パッケージ更新できたらphp7.4をインストールできます。今回はNextCloudをインストールできるようなモジュールを選んで入れています。

1
apt install php7.4 php7.4-curl php7.4-dom php7.4-gd php7.4-mbstring php7.4-zip php7.4-mysql php7.4-bz2 php7.4-intl php7.4-ldap php7.4-apcu php7.4-redis php7.4-fpm

Apacheでphp-fpmを使う

Nginx同様にApacheでもphp-fpmを使ってサイトでphpが動作するようにします。php-fpmをインストールした時のaptのメッセージに従ってコマンドを実行します。

1
2
a2enmod proxy_fcgi setenvif
a2enconf php7.4-fpm

先ほどapacheのユーザーを書き換えてしまったので、/etc/php/7.4/fpm/pool.d/www.confも一部書き換えておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
# diff www.conf www.conf.bak
23,24c23,24
< user = www
< group = www
---
> user = www-data
> group = www-data
47,48c47,48
< listen.owner = www
< listen.group = www
---
> listen.owner = www-data
> listen.group = www-data

php-fpmの起動は以下のとおり。

1
systemctl start php7.4-fpm.service

なお、/var/run/phpディレクトリが再起動時に削除されてしまってphp-fpmが自動起動しない場合には、/etc/tmpfiles.d/内に設定ファイルを置いておきます。

1
2
cat phpfpm.conf
d /var/run/php 0755 root root

これでphpファイルにアクセスするとCGIが動くようになります。ドキュメントルート/var/www/htmlにinfo.phpファイルを置いて、http://example.com/info.phpにアクセスすると各種情報が表示されるようになります。

1
<?php phpinfo(); ?>

MariaDB10.4のインストール

LinuxではMySQLの互換データベースであるMariaDBが標準みたいです。Debian9.11のMariaDBはバージョンが古いのでリポジトリを書き換えます。MariaDBのリポジトリページへ行って、ディストリビューションとリリースとバージョン、ミラーサイトを適切に選択すると、コマンドが生成されます。

リポジトリを更新してからインストールすると最新の10.4をインストールできます。

1
2
3
4
5
apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirror.nucleus.be/repo/10.4/debian stretch main'
apt update
apt install mariadb-server

これでLAMP環境が整いました。