1
0

仮想化ソフトを使ってMac環境にLinuxを入れて動的サーバーを立てる

Last updated at Posted at 2024-09-19

備忘録自分の学習用

学習の目的

  • 動的コンテンツのWebサーバーを建てること
  • Webサーバーがどのように動いているのかを学ぶ

学習の流れ

1. サーバー構築作業

- ローカルマシンに仮想環境(UTM)を導入
- 仮想環境にLinux(ubuntu)を導入
- Linux補助ツール導入
- nginx導入とphpファイル読み込み設定
- PHPとPHP-fpmインストール
- PHPファイルの作成と導入
- systmctlのnginxを再起動

2. 実装中に出てきた不明点をまとめて調べる

UTM導入

  • UTMQEMUというオープンソースのマシンエミュレーターをベースとした仮想化ソフトウェア。macOS上でx86/x64用のアプリケーションを実行することが可能。
  • マシンに直接OSを入れるわけではないので、ローカル環境が汚れないという利点で使用。

Ubuntu導入

Ubuntu補助ツール導入

  • Ubuntuのパッケージ管理システムを最新化
    • sudo apt-get update && apt-get -y upgrade
  • UbuntuGUI導入
    • sudo apt-get -y install ubuntu-desktopを叩く

nginx導入と読み込みファイルの設定

  • nginxパッケージを検索する
    • apt search nginx
  • nginxをインストールする
    • apt install nginx
  • nginxの設定
    • HTMLの配置場所
      • cd /var/www/html
    • なぜ/var/www/htmlにあるファイルを参照するのか
      • nginx.confの中で以下を読み込んでいる

      include /etc/nginx/conf.d/.conf;
      include /etc/nginx/sites-enabled/
      ;

    • site-enebledを確認する
      • root /var/www/htmlでhtml配置場所を参照
      • # Add index.php to the list if you are using PHPの場所で記載したファイルを左から優先して読み込んでいく
    • sites-enabled/defaultファイルにindex.phpを読み込むよう記載
      • index index.php index.html index.htm index.nginx-debian.html;
  • PHPインストール
    • 最新のPHP8.3をインストール
      • sudo apt install -y php8.3
      • php -vコマンドを叩きphpが導入されていることを確認
    • PHP-FPMをインストール
      • sudo apt install php-fpm
      • sudo systemctl start php8.3-fpmサービス自動起動
  • PHPファイル作成
    • cd /var/www/htmlでディレクトリ移動
    • sudo touch index.php入力
    • sudo vim index.php入力し、以下phpinfoを貼り付け
      • <?php phpinfo(); ?>
  • nginxの読み込み設定をPHPに変更する
    • nginxのsites-enabled/defaultを以下のように更新
 # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
                #fastcgi_pass 127.0.0.1:9000;
        }
  • nginxのコードを更新したので、裏で動いているsystmctlのnginxを再起動
    • sudo systemctl restart nginx

web確認

終わり。
スクリーンショット 2024-09-17 21.25.58.png

備考


実装中に出てきた不明点をまとめて調べる

NGINXとApachの違い・用途・一般的にどちらを使うか

NGINXが誕生した経緯

  • 今まではApachが人気で利用されていたが、「C10K問題」が懸念された
  • C10K問題:同時接続するクライアントが多すぎるとソフトウェア上の問題によりサーバーがパンクしてしまうこと
  • 「C10K問題」を回避するため、Apachに変わるNGINXが開発された

NGINXとApachを比較

処理

  • Apache:1リクエストに対して1プロセスが処理
  • NGINX :1プロセスで複数のリクエストを処理

処理能力
・ApacheよりもNGINXの方が1.2倍~1.5倍ほど高い

同時接続数

  • NGINXはApacheの10~100倍

メモリ消費量

  • マルチプロセス(Apache):リクエストの量に応じてメモリが消費される
  • シングルスレッド(NGINX):同時処理数が増えてもそれほどメモリ使用量は変わらない
  • 同時処理数が少ない場合には両者にあまり違いはない

Apachの強みと弱み

メリット デメリット
簡単に機能拡張できる メモリを大量に消費する
信頼性・安定性が高い 同時処理数が多くなると耐えられない
開発者向け技術情報を入手しやすい -
重い処理が得意 -

NGINXの強みと弱み

メリット デメリット
速くて高負荷に強い CPUリソースがたくさん必要な処理は不向き
リバースプロキシやロードバランサの機能がある Nginx単体で完結させるのは難しい
柔軟にカスタマイズ可能 -
- 機能が少ない
- ソースコードが複雑

結局ApacheとNginxどっちがいいのか?

Apach NGINX
少量の同時接続数で重い処理を担当 大量の同時接続数や軽い静的コンテンツを担当

どちらも利用するケース

  • NGINXには大量の同時接続数で重たい処理の場合はNGINXをリバースプロキシサーバーとして利用して、動的コンテンツはApacheに処理させるという相互の利用も効果的


systemctlとsystemdとは何か

systemctlについて

  • systemdを操作するためのコマンド
  • systemctl [start stop restart enable disable] サービス名

systemdについて

  • バックグラウンドで動作するサービスやプロセスなどの起動状態を管理するデーモン
  • systemdはすべてのプロセスの親プロセス


www-dataとは何か

ウェブサーバーが動くためには誰かの名前を借りて作業をする必要があります。
その役割をしているのが「www-data」という名前のキャラクター(ユーザー)です。

何故そんな名前(ユーザー)が必要か? 
ウェブサーバーがウェブページを表示したり、ファイルを読み書きしたりするときに、普通の人の代わりに「www-data」が操作します。これにより、悪い人(ハッカー)がウェブサーバーを通じてコンピュータ全体にアクセスするのを防ぐ役割も果たしています。

例えるなら、学校の先生(ウェブサーバー)が教室(ウェブサイト)で授業をするとき、先生個人の名前を使わず、「教務」という名札を使って動き回っているような感じです。

上記ChatGPTより引用

PHP-FPMとは何か

  • FPM ( FastCGI Process Manager ) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意している
  • Web サーバー 上で PHP ( 動的コンテンツを生成する言語 ) を動作せるための仕組み

CGIとFast CGIの違い

  • CGI
    • ユーザーから要求がある度に、プロセスの生成と破棄を行うが、
      量の要求があればその分だけプロセスの生成と破棄が実施され、この事がパフォーマンスの悪化に繋がっていく
  • Fast CGI
    • 初回リクエスト時に起動したプロセスをメモリ上へ保持を行い、次回リクエストに対してはそのメモリに保持したプロセスの実行を行い

最後に

  • 今回はwebサーバーを立てて、不明点を洗ってそれぞれが何であるかを洗い出した。
  • 以下の書籍を読んでweb技術について知見を広げていく。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0