LAMP環境を構築する

# 初めに
　VirtualBoxを使用してローカルのLAMP環境を構築したので構築手順の忘備録になります。全く知識のない初心者の方でも構築できると思います。
　自分なりにまとめているものなので間違った情報があったら教えてください。

# 目的
　・フロントエンド構築の学習
　・Linuxコマンドの学習
　・サーバーレンタルの事前準備

# 環境
　今回使用するものは「TeraTerm(SSHができるもの,PuTTYなど)」「VirtualBox」「linuxディストリビューション」の3つが必要です。すでに準備できている方は飛ばしていただいて問題ないです。

**・Oracle VM VirtualBox**

https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html

　exeファイルを実行し、指示に従い進めてください。「次へ」を押してるだけでよかったと思います。

**・ディストリビューション**
　好きなディストリビューションをインストールしてください。解説ではRocky Linuxを使用していますが、Alma Linux で同じ手順で構築できることが確認できています。RedHat系なら構築できるかも？
 

**・Tera Term**

https://teratermproject.github.io/

　ssh接続する際に使用します。exeファイルを実行し、指示に従い進めてください。「次へ」を押してるだけでよかったと思います。
 
## 1.Linuxディストリビューションの準備
  Linuxをダウンロードします。

  https://rockylinux.org/ja-JP/download

![スクリーンショット 2024-11-20 202636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/97f7527a-7efb-e488-04e8-1b72430a6560.png)
　DVD ISOをダウンロードしてください。必要な情報がすべてダウンロードされます。他のディストリビューションを入れたい場合は「ディストリビューション名 iso」調べれば出てきます。

 ## 2.Linuxをインストール
 
  ①virtualboxを開きスタート画面上部の歯車「新規」をクリック。

  ②「名前」を入力し、「ISOイメージ」をクリックし先ほどダウンロードしたISOを選択

![スクリーンショット 2024-12-26 182313.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/694578ee-99d3-d036-3a87-c6e093bbb616.png)


  ③「ハードウェア（A）」をクリック、メインメモリーを4096、CPUを2に変更し「完了」をクリックしてください。自動で起動します。　
  

  
![スクリーンショット 2024-12-26 182333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/dabe3816-a14e-fa49-e4ba-f6be320cd598.png)



 ## 3.Linux初期設定

　①　マウス統合の設定を行います。自動起動後マシンの電源をオフにし、使用しているLinuxを選択し設定を開いてください。

 ![スクリーンショット 2024-12-26 213831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/9bd68029-f422-67a2-2fe4-4bc1184499bf.png)

　下の画像の画面がでてくるので「ポインティングデバイス」を「USBタブレット」に変更、「EFIを有効化」のチェックボックスを選択してください。この設定でマウス統合ができ、右Ctrlを押さなくてもよくなります。

 ![スクリーンショット 2024-12-26 213340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/80686c21-336d-573c-74f8-318deda76f92.png)

　②　ポートの設定をしますHttpの80番、SSHの22番を設定します。左の一覧からネットワークを選択し、「ポートフォワーディング（P）」を選択しルールを設定する画面が出てきます。右の緑色の＋ボタンで追加できるので、ホストポートとゲストポート両方に同じ番号を設定します。

 ![スクリーンショット 2024-12-26 214319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/ea960b84-e36a-673f-de3e-cbad76c348e5.png)

　マウス統合とポートの設定が完了したらマシンの起動をしてください。

　**＊** マシンを起動後「仮想マシンはブートに失敗しました」というエラー文がでてきた場合は、先ほどダウンロードしたISOファイルを選択し「マウントとリブートのリトライ」をクリックしてください。ダウンロードが始まります。

 　
　③　言語選択をした次の画面では「rootパスワードの設定」「インストール先の設定」の2つを設定します。
 
![スクリーンショット 2024-12-26 204540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/87ba8d77-dc08-42b6-0502-722c053ba954.png)

　rootユーザのパスワードは何でも大丈夫です。短すぎる場合でも完了をダブルクリックすることで設定することができます。
 　インストール先の設定はデフォルトで問題ないなら一度開いて閉じるだけで完了です。

　2つの設定ができればインストールの開始をクリックしましょう。rootユーザのロックやユーザの新規作成は次回のWordPress導入編でやります。インストールが完了しシステムの再起動してください。

　再起動後ユーザ名の設定やアカウントの設定など求められますが、ユーザ名の設定以外はスキップして問題ないです。

 ## 4.Apache,MySQL,PHP インストール
　色々必要なものをインストールします。まずLAMP環境の　L（Linux）はインストール済みなので、A（Apache）、M（MySQL）、P（PHP）をインストールします。

　①　A（Apache）インストール
 
    sudo dnf install httpd -y   (インストール、-yは初期設定をすべて許可)
    sudo systemctl status httpd (ステータス確認、)
    sudo systemctl enable httpd（自動起動の有効化）
    sudo systemctl start httpd （起動）

　上記のコードを実行することで完了です。statusコマンドを実時は画像のようになっていることが確認できると思います。下記は各コマンドの説明です。
 
  ![スクリーンショット 2024-12-26 224052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/f266c9d9-08ec-6380-8249-1af8a1680688.png)
  
 3行目 service; desabled の部分が自動起動の設定箇所です。presetは「あらかじめ設定されている」という意味なので、disabledが設定されていることが読み取れます。Linuxを開くたびに手動で起動するのは面倒なので自動起動を有効化します。
　また、Active: inactive(dead)となっていることから起動していないので、起動します。以上のコマンドを実行しステータスを確認すると、

 ![スクリーンショット 2024-12-26 224110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/699d11ff-e2aa-5567-3d00-4ad911f046ce.png)

　3行目の disabled が enabled になり、Active: active(runnning)になっていることが確認できます。

　②　M（MySQL）インストール

    sudo dnf install mysql-server　　（インストール）
    sudo systemctl status mysqld　　 （ステータス確認）
    sudo dnf systemctl start mysqld　（起動）
    

　上記がMySQLインストールコマンドになります。mysqld の d はデーモンの意味をしています。デーモンとは「常にバックグラウンドで永遠に動いているプログラムたち」です。
　最後に mysql_secure_installation というセキュリティ設定コマンドを実行します。
 
    sudo mysql_secure_installation　 （セキュリティ設定、起動していないと実行不可）
 
　求められる設定について説明します。許可する又は拒否するか求められますが、全てy（許可）で大丈夫です。

    初めにパスワードの設定を求められます。短すぎるとポリシーではじかれます。
    「Qiita@0302」で設定できました。
    
    Remove anonymous users「匿名ユーザーを削除する」

    disallow root login remotely「rootユーザーのリモート接続の禁止する」

    remove test database and access to it「不要なデータベースとアクセス権の削除」

    reload privilege tables now「権限テーブルの再読み込み」


　③　P（PHP）インストール

    sudo dnf install php:8.x/common　（PHP基本パッケージ,xはバージョン番号）
    
    sudo dnf install php-common　（PHPのコア機能と共通のライブラリ）

    sudo dnf install php-mysqlnd　（MySQLとデータベースを連携させるためのパッケージ）

　上記がPHPインストールのコマンドになります。PHPのバージョンは自分がレンタルするサーバーに合わせるか、最新版を設定しておけば問題ないはずです。


 ## 5.テストページの表示
　テストページが表示できるか確認をします。ファイアーウォールの設定をし、その後に確認をします。

　①　ファイアーウォールでhttp通信を許可するようにします。

    sudo systemctl status firewalld　（ステータス確認）
    
    sudo firewall-cmd --addservice=http --zone=public --permanent
    (httpを許可,permanentで永続的に許可)

　httpをhttpsにすることでhttpsの通信を許可することもできます。
 
　②　WindowsでURLにプライベートIPアドレスを入力しAlma Linuxのテストページが表示されることを確認します。確認方法はWindowsターミナルで ipconfig コマンドを実行。「192.168.x.x」 アドレスを URL 使用ブラウザにて入力。

 ![スクリーンショット 2024-12-26 235516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/b638c606-d8a2-7932-82b1-5f99d99b9ee1.png)

　テストページが出力されれば完了です。表示されずに接続エラーがでる場合はファイアーウォールを切ってみてください。コマンドは
 
     sudo systemctl stop firewalld

　で停止することが出来ます。起動時は stop の箇所を start にしてください。変更後はステータス確認をしてください。
 
　③　var/www/html配下にテストページを作成し表示されるか確認を行います。

     cd /var/www/html　（/var/www/html に移動）

     pwd　（移動できたか確認,できていれば /var/www/html と出力される）

     sudo vi index.html　（表示するページの作成）

　vi 画面では　１. i（挿入）、２．適当な文字を入力、３．Escキー、４．:wq（保存） をやってください。できない場合は一度端末を閉じて再度開き、パーミッションの変更を行って下さい。

     ll　（パーミッションの確認）

     sudo chmod 777 index.html　（パーミッションの設定）

　保存できたらURLに「192.168.x.x/index.html」を入力してください。作成したページが表示されるはずです。
 
 ![スクリーンショット 2024-12-27 000027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/a614aad4-9c5f-536c-5554-00c21565f967.png)

　表示されない場合はURL、ファイアーウォール、/var/www/html配下に作成しているかの確認をしてください。それでもできない場合は一度仮想マシンを再起動してみてください。

 ## 6.SSH接続確認
　サーバーをレンタルするとSSH接続をして自身のサーバーを触ることになります。その事前準備としてSSH接続の方法を確認します。

https://manual.sakura.ad.jp/vps/index.html
 

　①　TeraTermを起動してください。起動後ホスト（T）にプライベートIPアドレスを入力して下さい。localhost でも接続できます。
 
 ![スクリーンショット 2024-12-27 001313.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/6fd30eb5-141c-c35b-4e00-db3dcb3fa399.png)

　セキュリティ警告は無視して続行をクリックすると画像の画面に遷移します。ここでのユーザー名は初期セットアップ時に強制的に作らされたユーザーです。ユーザー名とパスワードを入力したらOKをクリック。
 
 ![スクリーンショット 2024-12-27 001456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/38ce5778-bf45-b0e8-90bb-fcd2d5a2fef9.png)

![スクリーンショット 2024-12-27 001144.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835880/2772852e-44a9-9b9a-979e-d7b4d3b29b3a.png)

　すると無事SSH接続ができました。せっかく接続できたのでmysqlをインストールしたときに設定したセキュリティ設定の「rootユーザーのリモート接続拒否」がちゃんと設定されているのか確認してみましょう。

     sudo sshd -T | grep permitrootlogin

　上記コマンドを実行すると permitrootlogin without-password と出力されます。これは「rootユーザーへパスワードによる接続を拒否する」という意味になります。パスワードではなく公開鍵認証による接続はできる状態です。すべてを拒否したい場合は

     sudo vi /etc/ssh/sshd_config

     i（挿入） 最下行に permitrootlogin no と記述

     Esc :wq （保存して終了）

     sudo sshd -T | grep permitrootlogin

     permitrootlogin no

 　これで公開鍵認証でもリモート接続を禁止することができました。


# まとめ
　初めはdnfコマンドの存在を知らず躓いたりしましたが、chat gpt なども活用しながら進めることができました。一度やった内容を改めてやって、記事にしてまとめて書くことで知識が定着したと思います。
　ただ記事を書く前に２回ほど構築したのですが、その際に発生したエラーを再現できず、また原因究明もできていないのは反省点です。また、マウス統合もVirtualBoxを最新版にアップデートし、初めは問題なく動作していましたが何度か仮想マシンの再起動をしたところ動作しなくなりました。その対処法もまだ調べられていないので解決次第追記しようと思います。


# 参考にしたサイト
　大変参考になりました。ありがとうございます。

https://qiita.com/ine1127/items/b50b9a8f831736cf14ea

https://qiita.com/azamarassy/items/ed843f9dc5f156ef3725

https://tex2e.github.io/blog/linux/systemctl-list-services

https://infra-exp.com/rhel_remotessh/

https://chatgpt.com/