こんにちは!今回はLAMP環境を構築して、ちょっとだけドヤ顔しようって記事です(笑)

Linux上に1からwebサーバ・データベース・PHPを導入するため、プログラミング以外の知識が少し必要になります。
しかし、本格的にweb開発をするのであれば必要なスキルなので、是非チャレンジしてみてください!

※本記事ではローカル環境での使用を想定しています。外部にサーバを公開するにはファイアウォールの等設定が必要になります
また、Fedora30を基準に設定を行います。ファイルの初期位置等が異なるかもしれません。

【目次】

スポンサーリンク




LAMPとは?

LAMPとは、

  • Linux
  • Apache
  • MySQL(MariaDB)
  • PHP
の4つの頭文字を取ったweb開発環境のことです。

他にはXAMPPやMAMPなどが手軽に導入できて便利ですが、LAMPの強みは全てオープンソースであるが故の堅牢さにあります。
web開発環境としてもまだまだ現役であり、覚えておいて損はないです。

各用語について

知ってるわボケ!って方は飛ばしてください。

  • Linux…オープンソースで開発されているOSで、ネットワークやセキュリティー面で他OSより優れています。非常に安定していることが特徴です。
  • Apache…世界で最も使われているwebサーバソフトウェアです。
  • MySQL…Oracleに並ぶシェアを誇るデータベース管理システムです。シンプルで素早く動作するため、PHPとの相性も抜群です。
  • PHP…web開発に特化したプログラミング言語です。JavaScriptなどと違い、サーバサイドで実行されるのが特徴です。

Linuxのインストール

記事の趣旨から逸れてしまうので、本記事では割愛します。
気が向いたら別途記事を書くかもしれません(笑)

Apache(webサーバ)のインストール

Apacheのインストールについて解説します。
「dnf」の部分については、自身の環境に合わせて適所読み替えてください。(Ubuntuならapt、CentOSならyum)

[root@localhost]#dnf install -y httpd

上記コマンドでhttpdパッケージをインストールします。
Apache = httpdだと思ってください。

[root@localhost]#httpd -v

適切にインストール出来ていれば、httpdに-vオプションを指定することでバージョンが確認できます。

Apacheの設定

続いて最低限Apacheの設定をしていきます。
コマンドライン上で「httpd.conf」ファイルを編集します。

[root@localhost]#find / | grep 'httpd\.conf'

findはファイルを探すコマンドで、grepは絞り込みを行うコマンドです。
この環境では「/etc/httpd/conf/httpd.conf」に設定ファイルがあることを確認できました。

[root@localhost]#nano /etc/httpd/conf/httpd.conf

ここはお好きなエディタで設定ファイルを開いてください。
個人的には「nano」がオススメです!

以下設定項目

Listen 80  ← リクエストを受け付けるポートが80になっているかを確認。

ServerName www.exsample.com:80 ← サーバ名:80の形で指定。

DocumentRoot "/var/www/html" ← ドキュメントルートを確認(公開フォルダ)

Options Indexes FollowSymLinks
↓
Options Indexes ExecCGI FollowSymLinks ← CGIを許可する

以下追記項目

ServerTokens Prod ← エラーページ等でOS名を非表示にする

ServerSignature Off ← エラーページ等でサーバversionを非表示にする

KeepAlive On ← キープアライブをONにする

ドキュメントルートとは、公開したいファイルを置くフォルダのことです。
デフォルトでは「 /var/www/html 」になっています。
また、OSやApacheの情報は脆弱性の特定に繋がるので、必ず非表示にしましょう。

下記コマンドで起動。

[root@localhost]#systemctl start httpd

MySQLのインストール

Fedoraの場合はMySQLのバージョン8系が用意されていないので、まずはリポジトリを追加する必要があります。

[root@localhost]#dnf install -y
https://dev.mysql.com/get/mysql80-community-release-fc30-1.noarch.rpm

MySQLの本体をマシンへインストールします。

[root@localhost]#dnf install -y mysql-community-server

下記コマンドで起動。
mysqlではなく、「mysqld」となっていることに注意して下さい。

[root@localhost]#systemctl start mysqld

MySQLの設定

MySQLは、初期ユーザであるrootに最初からパスワードが設定されています。
ログファイルから確認できます。

[root@localhost]#grep 'temporary password' /var/log/mysqld.log

2019-05-14T00:28:37.203210Z 5 [Note] [MY-010454] [Server] A 
temporary password is generated for root@localhost: U>J-!;sHu8*>

この場合は、 U>J-!;sHu8*> が初期パスワードです。
簡単に確認できてしまうので、早急にパスワードを変更する必要があります。

先程確認したパスワードを用いてログイン

[root@localhost ~]# mysql -u root -p
Enter password:

-uでユーザ名を指定、-pでパスワードを指定しています。

SQLを実行し、パスワードを変更

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';

強固なパスワードを設定しないとエラーが出るので注意してください。

PHPのインストール

PHPのインストールについて解説します。

[root@localhost]#dnf install -y php php-mbstring php-mysqlnd php-pdo

「phpだけインストールすれば良いんじゃないの?」と思う方も居るかもしれませんが、mbstringやpdoなど別パッケージとして用意されているコマンドがいくつかあります。

ここではよく使うコマンド類も同時にインストールしています。

下記コマンドでバージョン確認

[root@localhost]#php -v

PHPの設定

PHPの設定は「php.ini」ファイルを編集します。(デフォルトでも全然動きます)

[root@localhost]#find / | grep 'php\.ini'

「/etc/php.ini」にファイルが存在することを確認できました。
最低限設定をしていきます。

[root@localhost]#nano /etc/php.ini

expose_php = On
↓
expose_php = Off ← PHPのバージョンを非表示にします

;date.timezone =
↓
data.timezone = "Asia/Tokyo" ← コメントアウトを解除し、タイムゾーンを指定。

Apacheと同様で、バージョン情報は表示させないのが基本です。

Hello World!を表示させてみる

今一度各ソフトの起動を行いましょう!

[root@localhost]#systemctl restart httpd
[root@localhost]#systemctl restart mysqld

次に、ドキュメントルート直下にphpファイルを作成します。
先程確認したように、本環境では「/var/www/html」がドキュメントルートです。

[root@localhost]#nano /var/www/html/test.php

<?php
   print "Hello World!";
?>

ブックマークまで見えてしまってますが(笑)
localhost/test.phpとブラウザ上で指定することで確認できると思います!

mysqlとの連携確認はまた別の機会に行います。(ちょっと大変なので)

もし上手く行かないときは…

いくつか原因は考えられますが、

  • SELinuxが邪魔している
  • パーミッションが適切でない
  • 文法や拡張子が違う

まずはこの辺りを怪しんでみましょう。

SELinuxはセキュリティ関連の制御を行う機能なんですが、扱うのが難しいので止めてしまっても良いかもしれません。
ファイアーウォールが動作しているので、ローカルで使うぶんにはあまり心配する必要はないです。

無効化するには、「/etc/sysconfig/selinux」を編集します。

[root@localhost]#nano /etc/sysconfig/selinux

SELINUX=disabled ← 無効化する

おわりに

なるべくシンプルに仕上げたつもりが、そこそこボリューミーな記事になってしまいました(笑)

やはりLAMPの構築は少し手間が掛かりますが、1から作ることで得られるモノは多いです!
外部公開用のサーバにするにはもう少しテコ入れが必要ですが、これだけで十分開発は行えます。

また、LAMPは少し玄人感あってカッコいいですが、web業界では超メジャーな開発環境なのであまりドヤドヤしない方が良いかもしれません(笑)

そのうちPHPからMySQLを操作するやり方や、ページネーションの実装なども記事にしていこうと思います。
最後までありがとうございました!