こんにちは!今回はLAMP環境を構築して、ちょっとだけドヤ顔しようって記事です(笑)
Linux上に1からwebサーバ・データベース・PHPを導入するため、プログラミング以外の知識が少し必要になります。
しかし、本格的にweb開発をするのであれば必要なスキルなので、是非チャレンジしてみてください!
※本記事ではローカル環境での使用を想定しています。外部にサーバを公開するにはファイアウォールの等設定が必要になります
また、Fedora30を基準に設定を行います。ファイルの初期位置等が異なるかもしれません。
【目次】
LAMPとは?
LAMPとは、
- Linux
- Apache
- MySQL(MariaDB)
- PHP
他には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を操作するやり方や、ページネーションの実装なども記事にしていこうと思います。
最後までありがとうございました!