【6日目】VirtualBoxとAlmaLinix9を利用してローカルサーバー構築【作曲の補助ツールを作るまでの日記】

プログラミング

2023年7月14日~15日

色々調べてたら、YouTubeに virtual boxにCentOSを入れるところからサーバー構築まで教えてくれている方がいたので、これやpaiza、またこちらの記事や他の情報を参考にサーバー構築をしていく。

動画はとりあえず一通り見た。

この動画の通りやれば恐らく問題ないんだけど、理解して説明できたほうが良いよね。それなら

  • VMとは
  • Linuxディストリビューションとは
  • Bashでの基本操作
  • Vimの基本操作
  • ユーザー権限
  • パッケージのYum
  • SSHとは
  • IPアドレス
  • ポートとは
  • ファイアウォールとは
  • Apacheの仕組み
  • HTTP

らへんの知識が必要になるのかなと思う。

幸いにも、昨日まででLinux関連はほとんど触ったり学んだりしているので、サーバー関係の知識を入れればできそうだと甘く見ている。

とりあえず色々調べて思ったのは、私のAlmaLinuxってなんかGUIじゃね?

恐らく、インストールするときにGUIの方でインストールしてしまった。悪くはないんだけど、実践的じゃないので一回完全CUIでインストールし直す。あと、VirtualBoxにはセーブ機能(スナップショット)というのがあって便利そうなので、それも使っていこう。

VirtualBoxから仮想環境を削除するのは驚くほど簡単だった。ただ該当のものを右クリックして除去を押すだけ。

とりあえず、もう一回インストールからやっていこう。

VirtualBoxでの環境作成からAlmaLinuxインストール完了まで

とりあえず、名前はAlmaLinux_testにする。

それ以外は昨日と同じ設定で。

設定し終わったら設定→ディスプレイのグラフィックスコントローラーを「VBoxSVGA」にしておくと、画面が見切れない。

昨日はなんかEnterキーとかを適当に押してたら通過できたけど、ここでは「Test thi media & install AlmaLinux」を矢印キーで選択してEnter。

ここで、GUIの設定画面にならずCUIでの設定を求められた場合は、GUIでやりたければまた除去→インストール。で恐らくGUIでの設定起動になる。

設定は大体昨日と同じだけど、今回はソフトウェアをサーバー(GUI使用)からサーバーに。

一通り必須事項を設定したらインストール

インストール後に再起動。

そんで、再起動すると

これが完全なCUIってこと?

インストールからスナップショットまで

コマンドは分からん事多いけど、とりあえず慣れる為にもCUIでやっていく。まずは管理者権限のrootでログイン。

1回pwミスった。pwは打ち込んでも表示されないので気を付けて。

ここからは一般ユーザーの追加とグループの追加、一般ユーザーの権限の追加を行う。
現在のユーザー一覧はcat /etc/passwd | lessで、グループ一覧はcat /etc/group | lessで見る。

これは、/etc/passwdや/etc/groupのファイルがテキスト形式の情報を持ったファイルということ。なんか.txtが無いと気持ち悪いんだけど、拡張子は要らないらしい。
実際に、fileコマンドでファイルの内容を見ると

のようにASCⅡ textと出てくる。

一般ユーザーの追加

ログインしたらadduser usernameでユーザー追加とpasswd usernameでパスワード設定。

これで一般ユーザーの追加。usernameはお好きな名前を。

一般ユーザーが管理者権限を発動させるには、suコマンドでrootに切り替えるか、sudoコマンドで実行するかの2択らしい。

ここら辺は理由が分からないんだけど、rootユーザーに直接ログインするのではなく、一般ユーザーにrootユーザーに切り替えられる権限を与えて、あくまでも一般ユーザーで作業するのが良いらしい。どちらにしろrootに切り替えられるならどっちでもよくないかと思ってしまうが、何か理由はあるはず。恐らく、履歴が残るとか意図しない管理者権限を発動させない為だと思われる。

その上で、全てのユーザーがrootに切り替えられると良くないので、「wheel」というグループを作ってその中に入ってる一般ユーザーだけがsuコマンドでrootに切り替えられるようにする。

sudoコマンドも同じ要領でwheelに所属しているユーザーだけ使えるようにする。
とにかく、rootに直接ログインはやめた方がいい。

グループへの追加

次に、usermod -aG wheel usernameでグループに追加。

usermodはユーザーの属性を変化させるコマンドで、aが追加、Gでグループを意味する。
追加したらgroups usernameでそのユーザーが所属するグループを確認できる。

su権限の追加

wheelグループに属する人であればsuでrootになれるように、設定ファイルを書き換える。

設定ファイルを書き換えるにはviというテキストエディタを使うのがいいのかな。vimはviの後継版らしいが、大体のLinuxディストリビューションの場合、viでもvimでも起動するテキストエディタは同じらしいので、vi≒vimと考えていい。

ここにきて恥ずかしながらvimの操作が分からないので、paizaで学習してくる。
入門編3にvimの使い方講座があるんだよね。素晴らしいね。

以下はvimメモ

  • viは昔からあるテキストエディタ
    マウスが無いころからあるらしい。だから、ターミナル上で動作するし、キーボードしか使わない。その後継であるvimも同じくキーボードのみ。
  • vimのモード
    vimはノーマルモード、インサートモード、コマンドモード、ビジュアルモードがある。
    インサート、コマンド、ビジュアルモードはノーマルモードからしか移れないので、escキーで毎回ノーマルモードに移る必要あり。
  • 超基本的な操作
    vimで新規でvimの起動。
    vim filenameで指定したファイルの編集。
    iでインサートモード。
    :でコマンドモード。
    escでノーマルモードに移る。
    ノーマルモードでdwと打つとカーソルで選択している単語を1個消す。これは、deleteコマンドのdと次の単語に移動するコマンドwを組み合わせている。
    :wで保存(write)。
    :qでvimの終了。
    :wqを合わせて保存して終了。
    :w hello.txtみたいにすることで名前を指定して終了。
    :q!とすることで、保存せずに終了。
  • vimのカーソル移動
    癖が強すぎてびっくりなカーソル移動。
    とりあえず、:set numberで行番号の表示。

    矢印キーでもいいけど、ホームポジションとかを崩したくなければ[←:h],[↑:k],[↓:j],[→,l]にようにh,k,j,lが対応しているので、これで移動。

    wで次の単語の先頭に、bで前の単語の先頭に。
    $で行の末尾に、^で行の先頭に。
    ggでテキスト全体の先頭に。Gでテキスト全体の末尾に。
    (number)Gで好きな行数の先頭に。例えば10Gで10行目の先頭に。

    %で対応する括弧に移動。恐らくプログラミング言語で書かれたものとかを弄るときに使う。

    それで、移動系は(number)移動系コマンドと打つことで、繰り返しができる。
    例えば、10jとやれば10回jを押したことになる。
  • 単語の削除と操作の取り消し
    ノーマルモードではxでdelete的な消し方、Xでbackspace的な消し方が出来る。x=ば
    つ=消すみたいなイメージらしい。

    そして、uキーで前の動作を取り消せる。undo。
    Uで行全体の動作の取り消し
    ctrl+rで取り消しの取り消し
    さっきも紹介したdwで次の単語の前まで消す。ddで行全体の削除。

    dwのように、コマンドは組み合わせられるので、gg→dGで全ての文章を削除みたいのもできる。
  • コピーと貼り付け
    そもそも、xとかで削除すると削除したものがコピーされる。
    ywで一単語コピー、yyで一行コピー

    pでカーソルの右に貼り付け、Pでカーソルの左に貼り付け。

    また、範囲を選択してコピーしたかったら範囲の始点または終点に移動してvでビジュアルモード。そこから範囲を指定してyでコピー。
  • テキストの検索
    なんか色々あるんだけど、簡易的な実用性を考えると以下の物だけで問題ないと思う。
    ・[/(keyword)] 下方向に検索
    ・[?(keyword)] 上方向に検索
    ・[n] 次の候補に移動
    ・[N] 前の候補に戻る
    enterで検索した場所に移動。

とりあえずこんなもんで普通の操作はできるようになったかなぁ。

設定ファイルの書き換え

PAMというものの設定ファイルを書き換えてwheelに入っている場合suコマンドでrootになれるようにする。

/etc/pam.d/suにあるので、vim /etc/pam.d/suで編集。

そして’auth required pam_wheel.so use_uid’というのを追加したいが、以下の私の場合のようにコメントアウトされてることが大体らしいので、ノーマルモードのままxキーで#だけ消して:wqで保存。

これでwheelに入っていればsuコマンドでrootになれるようになったはず。
申し訳ないけど、「auth required pam_wheel.so use_uid」の意味を知るにはPAMの知識が必要になりそうなので、とりあえず今はスルーで。PAMが何なのかも分かってない。

wheelに入っていればsudoを出来るようにする

こちらも同じく設定ファイルを弄る。

次は「/etc/sudoers」の設定ファイル。こちらはvimじゃなくvisudoというので弄るのがいいらしい。
visudoはsudoファイルを弄る為だけのコマンド。色んな安全性の確保をしてくれるっぽい。それくらいsudoコマンドは大事ってことか。

‘visudo’と打つだけでおk。
‘%wheel ALL=(ALL) ALL’を追加したいんだけど、見た感じ私の場合は最初から追加されていた。なのでこのままでいいのかな。

SSHの制限

サーバーはSSHというツールでリモート操作をすることが多いらしい。ここで、SSHでのlootログインは許可しないようにする。理由は、攻撃者はrootを狙ってくるから。rootって名前はデフォルトだからパスワードの総当たり攻撃で破られてしまうらしい。

なので、SSHではrootにログインできない設定にする。
今回の私の場合はローカル環境のつもりなので正直要らないのだけど、実践を想定してやっておく。

これは’/etc/ssh/sshd_config’のファイルの’PermitRootLogin yes’という記述を’PermitRootLogin no’にすればおk。これはvimでいいかな。

私の場合はそもそもPermitRootLoginの記述が無かったから足しておいたんだけど、大丈夫かこれ。

設定し終わったら’systemctl restart sshd’でデーモンの再起動。
デーモンというのはメモリ上で待機しているソフトウェアみたいな感じだったはず。ファイル名の最後にdが付いてたらデーモンの可能性が高い。

スナップショットを取る

ここまで来たら初期設定みたいなのは完了したのでスナップショットで一旦保存しておく。

一回’sudo shutdown -h now’で仮想環境の電源を落とす。

三本線(ハンバーガーともいうらしい)からスナップショット→作成で作る。

SSH接続を行う

SSHは「Secure Shell」の略で、コンピュータを遠隔操作するためのツール。正直、VirtualBoxを使って1台のPCでローカル環境を作るなら要らないんだけど、実務になるとSSHでの操作になるっぽい。利便性の問題? なので、今のうちに慣れておこうみたいな。

telentというのもあるんだけど、そちらは通信が暗号化されない。SSHは暗号化されるのでセキュアだよねということらしい。

ここからはサーバーっぽい知識が必要になってくるので、ちょっと厳しいけど色々調べながらやっていく。

TeraTermを入れてみる

正直、よくわかんないんだけど、WinユーザーはTeraTermを使うと良さげなので、インストールしてみる。

インストール完了。ダウンロードはOSDNからできなかったので、窓の社からやった。

このホストにゲストOSのローカルIPアドレスを入れてOKを押せばいいのか?

色々調べたら、ローカル環境であればこの人の方法でいけそうなので、これでやってみる。

まず、ホストOS(私はwindows)の方でcmdを開いてipconfigと打つ。
wifiを利用しているので「Wireless Lan adapter Wi-Fi 」の項目のIPv4のアドレスをメモ。

次はAlmaLinuxで「ip a」と打ち込み、項目 enp0s3 の inetの行を確認。10.0.2.15みたいなのをメモ。

次にVirtualBoxのAlmaLinuxのネットワーク設定を開く。

Advancedを押し→ポートフォワーディング

右上のプラスを押して、色々設定する。

  • 名前:好きなので
  • プロトコル:TCP
  • ホストIP:cmdでゲットしたホストOSの方
  • ホストポート:1024~65535の間で好きなの
  • ゲストIP:AlmaLinuxでゲットした方
  • ゲストポート:22

で、おk。

次に、suコマンドでrootになってから’systemctl status sshd’と打ち込む。sshdが動作しているかの確認。

activeならおk。違ったら’systemctl start sshd’で起動。
最後に’systemctl restart NetworkManager’と‘systemctl restart network’でネットワークの再起動をしておくらしいが、networkの方は見つかりませんと言われた。

次に、TeraTermの起動。

ホスト(T)はLinuxの方の一般ユーザー名@ホストOSのIPアドレス
TCPはさっき設定したお好みのやつ。

OKを押す。

そのまま続行をクリック。

パスワードを入れてクリック。

よし、同一LANのローカル環境でしか意味をなさないとは思うんだけど、とりあえずSSH接続が出来た。

一応利点もあって、コピペが可能になった。

しかし、色々調べるとポートの設定とかファイアウォールの設定とかセキュアにするための設定が色々あるらしい……ね、今日はローカル環境だからね……ね?

Apacheを入れてみる

本命に行こう。というか、5日くらいかけてようやく本命ですか。

ここからはTera Termで操作する。

前、AlmaLinuxはyumコマンドでパッケージ管理をするといったんだけど、今はそうでもないらしい
yumの後継でdnfというのが出ていて、一応それが推奨されてんのかなぁ? わかんない。

でも、新しいものを使っておくべき感はあるので、今回はdefでApacheを入れるとこまでやってみる。

Apacheのインストール

まず、’sudo dnf update’でパッケージ情報をアップデートする。
これはディストリビューションが用意しているパッケージリポジトリサーバーにアクセスして最新の情報を得る→差分のアップデートをするコマンドらしい。

Tera Termが日本産なこともあってか、日本語なのがありがたい。
分かりやすいとかじゃなく、精神的な安心感がすごい。留学先の日本人みたいな感じ? しらんけど。

私の場合、515Mのアップデートがあったらしいので、yで全部アップデート。

アップデートが完了したら、’sudo dnf install httpd’でapacheのインストール。httpdがapacheらしい。

こちらは5.9Mくらい。

完了!

Complete!じゃなくて、完了しました! なのがイイ!

次はApacheを起動してみる。

起動するときはsystemctlを使う。systemctlはサービスの開始、停止、無効化をするときに使うコマンドっぽい。

一応’man コマンド名’とやるとマニュアルが見れるんだけど、英語すぎだし、975行あるんだが。

うん。とにかく、習うより慣れろ精神で’sudo systemctl start httpd’を実行。

実行できたかよくわからないので、’sudo systemctl status httpd’で状態確認。

いや~できてますね~。

時間を見ると、後20分くらいでAtCoderが始まるのでまぁまぁ焦っている。

次に、自動起動の設定。
‘sudo systemctl enable httpd’とすればAlamLinuxを起動するたびにApacheを自動起動してくれる。

apacheは/var/www/html下にあるファイルをサーブしてくれる。だから、ここになんか適当にファイルを作ろう。
とりあえず、vimを開いて前作ったDTMガチャのコードをコピペ。因みにペーストは右クリック。

‘sudo vim /var/www/html/test.phpで、test.phpを作り書き込んだ。
これで、10.0.2.15にアクセスすればいいのか? うーん、できない。

設定を間違っているのか、根本的なところ間違っているのかわかんないけど、とりあえずAtCoderやってくる。

よし、やってきた。恐らくレートちょいsageくらい。B問題で手こずってしまった。

今はとりあえず、Apacheを起動してphpファイルも置いたけどブラウザで見れないっていう状況か。ブログ書いてると数時間後に帰ってきても何やってるかすぐ把握できるからいいね。

色々調べた感じ、ファイアウォールとSELinuxが原因かなという感じ。
ここら辺は本当に自己責任でって感じだと思うんだけど、外部にサーバーを公開しないのであれば、ファイアウォールは80番ポートを開放して、SELinuxは無効化してっていう感じで大丈夫なのかな。

ファイアウォールやSELinuxはちょっと下手なこと言えないのでとりあえずやったことだけ書く。

‘sudo firewall-cmd –permanent –add-service=http’でファイアウォールの80番ポートの開放。
’sudo firewall-cmd –reload’で再起動。

‘sudo vim /etc/selinux/config’でコンフィグを開いてSELinuxの無効化。
SELINUX=disabledにすればおk。

一回設定し終わったら再起動。

うん。できない。

VirtualBoxのネット接続がNATなのが原因な可能性があるので、ブリッジモードにしてみる。

これにより、IPアドレスが変更されたのでSSHも新しく設定を直す。

具体的には、AlmaLinuxのIPをusername@IPにして、ポートを22にすればいい。

IPはip aで見れる。

それで新しいIPで接続してみると……
きたぁ…

正直、なんでさっきいけて今いけないのかがよくわかってないので、あんまり良くない。

ちなみに、test.phpはこんな感じで表示された。

これ、恐らくPHP入ってないから?

SSHを公開鍵認証にする

PHPを見れるようにする前に、SSHの接続方法を公開鍵認証にしておく。
恐らくプライベートネットワークに接続している人じゃないとSSH接続できないと思うからやんなくてもいいけど、怖いからやっておこう。

公開鍵とかって学校で習うけど、どこで使うねんって思うよね。
今のところ私の経験では、AppleDeveloper認証とSSH接続で使うよ。

方法はこの方の記事を参考にする。

うーん。なんかいろいろやってるけど成功しない。
色々調べると、Tera Term5.0betaだったらいけるみたいな情報を得たので、アップデートしてみる。
OSDNのサーバーが重いのか7Mbなのに滅茶苦茶時間かかった。

お、Tera Term5.0betaだったらいけた。

これで、公開鍵認証でログインできるようになったので通常ログインを出来なくする。
‘sudo vim /etc/ssh/sshd_config’でsshdコンフィグを弄る。

このPasswordAuthentication yesをPasswordAuthentication noにする。コメントアウトされてるので、そこも消す。

これで再起動してみようか。

よし、パスワード方式でログインできないようになった。完了!

PHPを見れるようにする

PHPが見れないと意味ないよね。やっていこう。

‘sudo dnf install php’でインストール。

php -vでバージョン確認。

今回はPHP8を使う。

次はApacheの設定ファイルをいじる。
‘sudo vim /etc/httpd/conf/httpd.conf’

一番最後らへんに’AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps’を追加。

そして、表示させてみると!

よし、ようやく。マジでようやく自分でサーバーを建ててPHP表示までできた。

流石に疲れた。

最後にセーブ

セーブしよう。絶対にしよう。
スナップショット→作成

おわりに

恐らく、セキュアやら公開サーバーやらを考えるとまだまだ考慮したり設定しなきゃいけない所がいっぱいあると思うんだけど、とりあえずXAMPPとかを使わずにVMでローカルサーバー構築完了。

これでようやくGithubの草も生やせる。サーバー構築やってても草は生えない。

とりあえず明日からPHPとかlaravel、DBらへんを弄っていきたいんだけど、サーバーのことを学んでいくうちに、DBにもサーバーがあることを知ってしまった。

恐らくだけど、VM使ってWebサーバーとDBサーバーを別に立ててそこを連携させるみたいなことやるよねこれたぶん。

それを考えると、とりあえずPHPとlaravelかなぁ。

PaizaにAWS講座があったのでそちらでAWSの事を学んでしまうのもありなんだけど、流石にそろそろPHPとかlaravelとか弄りたいかなぁ。

とりあえず今日は終わり! やりたいところまで行けて良かった! おやすみなさい。