ドットインストールprogateで勉強中に、教材通りだと詰まったところの対処をまとめています

[ドットインストール]ローカル開発環境の構築[windows編]

現在CentOS6がサポート終了しているので、仮想マシンの起動はできるのですが、
必須のアプリケーションをインストールすることができません
アマゾンのAWSを利用する手もありますが、クレジットカードが必須など抵抗がある方もいらっしゃるかと思います
また初心者の私としてはドットインストールなどで解説を受けながら進めたいわけです
ということでやってみたのが
仮想マシンのOSを CentOS6.8 → CentOS7以降 に変更する
実に単純な解決方法ですね
CentOS7以降だとその後のアプリのインストール方法が若干変わるので、その都度説明します

#4 までは教材通りで大丈夫です
#5 の MyCentOSフォルダに移動するところから別ルートに入ります
ドットインストールをやっていない方は次の下準備をやっていただければ問題なく進めるかと思います

1.CentOS7以降の仮想マシンを作る

教材ではここで

vagrant init bento/centos-6.8

というコマンドを実行するわけですが、この通りに実行すると CentOS6.8がインストールされてしまいます
そこで
このページ でCentOS7以降の設定ファイルを拝借して、それで仮想マシンを立ち上げます

とりあえず virtualbox、CentOs などでソートしてこれだ、と思った7以降の CentOS のBOXをクリック
今回は一番目立っている↓この centos/7 2004.01 を例に説明します
他のBOXでも手順は同じです
Newをクリックして

vagrant init centos/7

という部分を、開いておいた PowerShell にコピペして実行します

これで MyCentOSフォルダ(下準備で作ったフォルダ)に CentOS7 を立ち上げるための vagrantfile が作られます
この vagrantfile を何らかのエディタで開いて編集します
その中に

# config.vm.network "private_network", ip: "192.168.33.10"

という箇所があるので
# を消して有効化して保存します
ip ~ の部分は仮想マシンの住所になる番号です
複数の仮想マシンを立ち上げる場合は ip がかぶらないように少し変更しておくとよいかと思います(例えば "192.168.33.11")
あとは PowerShell で

vagrant up

を実行です
途中で何か聞かれるかもですが OK とか Y とかで進めます
これで起動完了です

vagrant status

を実行して
running と表示されていれば成功です
ちなみに

vagrant halt

を実行するとシャットダウンできます

2.仮想マシンにログインする

教材では次に PuTTY というアプリをインストールし、これを使ってログインするのですが、
現バージョンでは残念ながら設定をいじらないと PuTTY ではログインできません
ということで別の方法でログインします
色々あるのですが、とりあえず4つ紹介します

その1 直接ログインする

VirtualBoxを開くと仮想マシン一覧を見ることができます
その中からいじりたいマシンを選んで「表示」をクリックするとちょっと小さい窓が出て
直接仮想マシンを操作することができます
ユーザー、パスワードはどちらも vagrant です
入力してEnterでログインできます
フォントがとげとげしくて、コピペが使えないのが難点です
Tabキーでの入力補完はできるので、環境を整えるだけなら十分ですね

その2 PowerShellからログインする

一番簡単です
vagrant up をした場所で

vagrant ssh

を実行する
以上
ちょろすぎます

Vagrant で作った仮想マシンならこれでいけますが、それ以外のシチュエーションでは使えないのでちょっと補足です
補足と言いながら少々長いです
ログインできればそれでよし、の場合は読み飛ばしてください
まず ssh というのはネットワークで他のパソコンをいじることができる仕組みです
よそ様のパソコンを好き放題出来てしまうわけなので、つなげる段階で厳しく審査されます
具体的にはカギ穴ファイルとそれと対になるカギファイルを作っておいて(※正式な名前ではなく、私のイメージです)
接続先にカギ穴ファイルを、接続元にカギファイルを設置します
ログインするときは、カギ穴ファイルに対応したカギファイルを見せないとログインできないという仕掛けです
(昔のバージョンではパスワードでいけたようですね)
どうやって見せるかというと

ssh -i 自分のパソコンのカギのある場所 ユーザー名@接続先の住所 -p 接続先のポート

と実行します
-i はカギを見せます
-p はこの入り口から入ります という意味です
実行する場所は vagrant ssh の時と違いどこでもOKです
私の場合だと

ssh -i D:/LocalServer/CentOs/.vagrant/machines/default/virtualbox/private_key vagrant@192.168.33.10 -p 22

となります
説明すると
-i D:/LocalServer/CentOs/.vagrant/machines/default/virtualbox/private_key
Dドライブの、LocalServerの中で
CentOsという仮想マシンを立ち上げていると、このパスになります
そこから先のパスは特にいじってなければ共通です

vagrant@192.168.33.10 は
vagrant はユーザー名ですね
@ 以降は vagrantfile の編集時に決めたipを入力します
何もしていなければ 192.168.33.10 です

最後の -p 22 は22番のポートから入りますよという意味です
実は通常は書く必要がありません
ssh とした時点で、22番から入りますってことになっているみたいですね
では何のためのオプションなのかというと
後で少し触れますが、この仮想マシン
実はもう一つの住所と入り口があります
そっちから入るときには指定する必要があるということなんですね
あとはセキュリティ強化のために入り口を普段と違うところに開けるというケースもありそうですね

その3 VScode の Remote-SSH でログインする

個人的に一番おすすめです
一応この機能はまだ Preview なので不思議なことが起こるかもしれません

まずは VScode の拡張機能の Remote-SSH をインストールします
次に設定ファイルを作成します
左下のボタンをクリックして Remote-SSH:Open Configuration File を選びます
設定ファイル候補が出ているので好きなファイルを開きます
選ぶとファイルが開くので設定を書き込みます
書き込む内容は

Host 好きな名前
HostName 192.168.33.10
User vagrant

こんな感じです
Host はこの接続の名前です
後からわかりやすい名前を付けましょう

HostName には接続先の住所を書き込みます
とくに変更していなければ 192.168.33.10 です
User は Vagrant で立ち上げたのなら vagrant でOKですね

保存したら、設定ファイルを作るときに使った左下のボタンをもう一度クリックして
今度は Remote-SSH:Connect ~ のどちらでもいいので選択すると先ほど Host に入力した名前が表示されているはずです
それをクリックすれば接続が始まります
違いは上は今のウィンドウで、下は新しいウインドウで接続します
パスワードを入力すればログイン完了です
さらに接続先のフォルダを表示させることもできます
(もう一度パスワードをきかれます)
ちなみに設定ファイルに

IdentityFile 自分のパソコンのカギのある場所

と追加するとパスワードの入力なしで接続できるようになります
カギについては その2 PowerShell からログインする の補足部分を御覧ください

VScode で接続するとファイルを開くのが簡単になるし、コピペ、ドラッグ&ドロップで編集もできるので色々便利です

おまけ PuTTYでログインする

PuTTY の上手な使い方を知らないので、いまいちメリットは感じられないのですが
接続先の設定を変えることで、カギを使わなくてもログインできるようにできます

まずはどの方法でもいいので仮想マシンにログインします
設定ファイルというのは通常は好き勝手にいじるとよくないので、管理者権限がないと編集できません
てことで

sudo vi /etc/ssh/sshd_config

を実行します
sudo と文頭に入力することで、続くコマンドを管理者権限をもって実行することができます
今回のコマンドでは、
本来は編集できないはずの sshd_config というファイルを編集ソフトの vim で編集しちゃおう、ということですね
コマンドを入力するとずらっと設定が表示されるので
i を押してINSERTモードにします
PasswordAuthentication という個所を探して

PasswordAuthentication yes
# PasswordAuthentication no

となるように # をつけ外しします
これはパスワードでのログインを認めますか? いうことで
このように変更することでカギではなく、パスワードによるログインが可能になり、
PuTTY でログインできるようになります
逆にセキュリティを強化したいときにはパスワードでのログインを禁止したり、
別の項目をいじって、パスワードなしでログインできるようにできたりと実に怖いファイルですね

3.必須アプリケーションをインストールする

まずはOS自体を最新のものにアップデートします

sudo yum update

でOSのアップデートができます
そのほかに何が必要なのかは正直わからないのですが、教材でインストールされている
Apache, PHP, Ruby, Node.js, MySQL
をインストールします

インストール自体は簡単です

sudo yum install httpd php ruby nodejs mariadb-server

でインストールできます
ちょっとバージョンが古いものがインストールされる物もありますが、
練習するだけなら問題ないのでしょう

ただ新しいもの大好きな私としてはどうしても我慢できませんでした
せめて自分で使うものだけでも新しくしたい、という思いで色々調べてみました
ということで新しい物好きな方は以下をご参照ください

その1 Apache のインストール

さっさと使いたい方はこちら

sudo yum install httpd
/var/www/html/ にホームページのデータ(index.html的なファイルがあるところ)を丸ごとコピー
sudo systemctl start httpd
ブラウザで 192.168.33.10 (前章で決めた仮想マシンの住所) にアクセス

Apache は最初に紹介した方法で、すんなり最新版がインストールできました
Apache をインストールと言いながら httpd をインストールしていますが、気にしないでください
しっかり Apache がインストールされます



Apacheとは
Apache は Webサーバーソフトウェアです
最も基本的な使い方は
インターネットで見ることのできるホームページを置いておくことです
普段見ているホームページは、ネットという不思議空間にぷかぷか浮いているわけではなく
どこかの誰かのパソコンの中にデータとして存在していて
それを見せてもらっているというわけです
字面だけ見ると ssh でログインするときとよく似ていますね
ssh と違って、こちらで許可したフォルダの中の特定のファイルしか見ることはできませんが
住所さえ知っていれば誰でも閲覧可能です

その2 MySQL のインストール

さっさと使いたい方はこちら
MySQL8.0をインストールする場合

sudo yum remove mariadb-libs
sudo rm -r /var/lib/mysql
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
sudo yum install mysql-community-server
sudo systemctl start mysqld
sudo cat /var/etc/mysqld.log
↑で出てきたログから
A temporary password is generated for root@localhost: u!ouRy%a,1!e
という個所の u!ouRy%a,1!e(ここはランダムで決まります)をコピー
mysql_secure_installation
ここにさっきのパスワードを入力して、色々設定する
↑の設定に従ってログイン

mariaDBをインストールする場合

sudo yum install mariadb-server
sudo systemctl start mariadb
mysql -u root

コマンドの解説をします
どちらを選ぶかですが、
MySQL と mariaDB のコマンドが混在してややこしい、という方は MySQL8.0用の方法でインストールしましょう

まずは MySQL8.0 をインストールする場合
普通にやると mariaDB がインストールされるので、まずは mariaDB の痕跡を消します

sudo yum remove mariadb-libs
sudo rm -r /var/lib/mysql

この2つを実行すれば消えるはずです
最初から痕跡がない場合は大した反応がないかもしれません
ここから改めて MySQL8 をインストールしていきます
まずは

sudo yum install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

を実行して、MySQL8 のありかを登録します
このアドレスは公式ページの DOWNLOADS から進んでいった先にあります
今後新しいバージョンがでると変わるかもですが、とりあえず今はここの No thanks, just start my download.ってところにあります
次に

sudo yum install mysql-community-server

でインストールします
システムの起動は

sudo systemctl start mysqld

mysql「d」なのに注意です
続いてログインするのですが、最近のバージョンは、rootユーザーでもパスワードがないとログインできなくなりました
そんなこと言われてもパスワードを決めるタイミングなんてありませんでしたよね
実は初期パスワードは勝手にしかもランダムに決められちゃっています
セキュリティ万全ですね
で、肝心の初期パスワードは /var/log/mysql.log といいうファイルにシステム起動時にちゃっかり書き込まれています
アドレスをみて何となく察しが付くと思いますが、通常ではアクセス出来ないファイルですね
ということで

sudo cat /var/etc/mysqld.log

cat コマンドでファイルの中身を表示します
色々書いてある中から
A temporary password is generated for root@localhost: u!ouRy%a,1!e
(root さん用の仮パスワードを生成したよ)
という部分を探します
この u!ouRy%a,1!e(ここはランダムで決まります) という部分に自動生成された初期パスワードが表示されています
これをコピーしておいて

mysql_secure_installation

を実行します
最初にパスワードを聞かれるので先ほどの仮パスワードを入力
あとは本パスワードとかその他いろいろセキュリティ関係を聞かれるがままに設定していけば完了です
ちなみに本パスワードを設定する前に

mysql -u root -p
(rootユーザーとして MySQL にログインします、パスワードを聞いてください)

として、 仮パスワードでログインすることはできますが、
何かしようとしても 本パスワードを設定してからね、と拒否られます…

次に mariaDBをインストールする場合を説明します
まずは

sudo yum install mariadb-server

でインストール
そしてシステムの起動ですね

sudo systemctl start mariadb

ログインするときは maria~ ではなく

mysql -u root
(rootユーザーとして MySQL にログインします、パスワードはありません)

でOKです
MySQL の時と違い仮パスワードは設定されていないのでこれでログインできます
いろいろと統一しておいてほしいものです…
また MySQL の時と同様に

mysql_secure_installation

でパスワードその他いろいろの設定を変えることもできます
どちらも共通して言えることですが、ログアウト時の Bye がなんだかほっこりします



MySQLとは
MySQL はサーバーにデータベースを作るソフトウェアの1つです
まずデータベースとはなんぞ、ということですが
実際に触れるものでいえば電話帳とか、学生時代のクラス名簿とか家計簿とかですね
要はたくさんのデータを後から簡単に見つけたり、加工したりできるように整理したものってことです
なぜそんなことをする必要があるのかというと
トランプの大富豪を想像してみてください
多くのプレイヤーが手札を数字ごとに、強さの順にまとめていないでしょうか
自分の番が来た時に出せるカードを
出すかどうか、を悩むことはあっても
持っているかどうか、で悩むことはないのではないでしょうか
これがデータを整理する方法とそのメリットです
処理速度が圧倒的に早くなりました
大富豪で遊ぶ、という時点で無意識に自分の手札を簡易データベース化しちゃってるんですね
話を戻しまして
リストを作って整理・加工するだけなら html + JavaScript でも出来ますが、残念ながらこれだと表から丸見えです
CSS 等を使ってホームページには記載されていないかのように見せても、ちょっと F12 を押すだけで簡単にバレます
これでは個人情報のような、人に見られてはいけないデータを入力するわけにはいきませんし、
逆に使わないデータをいちいち全部読み込まれても困ります
かといって紙媒体や自分のPCに入れてるだけではホームページに反映させることができません
そもそも、大量のデータの中から特定の条件にあうデータを見つける、なんてことを人力でやっていたら
ミスは多いし、時間はかかるしで良いことなしです
ここはパソコンさんに出張ってもらいたいところです
これらすべての解決策としてサーバーにデータベースを作り、外に漏れないように管理しているのがこの MySQL ということです
そして MySQL から情報を引き出すのが次項で紹介する Nodejs です

その3 Node.js のインストール

さっさと使いたい方はこちら

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install node
ターミナルでプロジェクトを立ち上げたいフォルダへ移動して
npm init

AWS の EC2 に Node.js をインストールする方法がAWS公式ページにありまして
チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ
これがそのまま使えます
nvm というのが Node.js のバージョン管理ツールで
Node.js のバージョンに関して色々とカスタマイズできます
昔のバージョンじゃなと動かない、というシーンに出くわしても簡単にダウングレードすることができます
例えば v12.13.0 に変更したい と思ったら

nvm v12.13.0

で変更できます
ちなみに変更可能なバージョンのリストは

nvm ls-remote

で確認することができます
あとはプロジェクトを立ち上げたいフォルダに移動して

npm init

で初期設定を行えます
package.json というファイルが作られて、 この中に色々設定が書き込まれます
とりあえず個人で練習するだけならエンターを押していくだけでOKです



Nodejsとは
Nodejs というのはサーバーサイドで動く JavaScript です
これだけでは何の事やらですね…
同じアドレスのホームページを見ているのに、人によって表示内容が違う、ということはないでしょうか
これは、サーバーが表からは見えないように隠し持っているデータ(個人情報などなど)をもとに
人それぞれにページをカスタマイズして表示してくれているからです
そのためには、見ている人に合わせて
どのページをどんな風にカスタマイズするのか
という対応マニュアルのようなものを作っておいて、
それを毎回参照してホームページを作る、という仕組みが必要です
こういった仕組みが世の中にはいくつかありまして、その一つが Nodejs ということです
で、その中身が JavaScript で書かれている、ということですね

1番上へ