こんにちはjunです。私はフロントエンド エンジニアとして2019年の12月にWeb系会社に入りましたが、社員数が少ない上に複数のお取引先のサイトを保守しているのでサーバーの知識がまず必要になりました。
入社前まではサーバーというとXserverのようなレンタルサーバーにFTPを使ってファイルを転送したり、MAMPやXAMMPを用いてサーバーに似た環境を整えるといったぐらいの知識しかありませんでした。
ですがなんやかんや勉強したり仮想環境を用いて構築を行いました。おかげで入社3ヶ月目には実務上必要なLAMPサーバー構築作業ができるようになり、本番用のサーバーの構築も行い現在稼働しています。さらにインフラ部分とフロント部分との繋がり、またWebサービスの提供がどうやって行われるのかをよく理解できました。
今回の記事では実務上に求められるサーバー構築ができ、そしてある程度インフラ部分がわかるようになるため私が行った・意識したことを共有したいと思います。別途の記事でLAMP環境の構築方法とかvagrantのインストール方法を書きます。
まずプログラミングを習いたての方、例えばPHPを使ってDBと連携したり、JSライブラリのjqueryを用いてUIを学習するぐらいであればMAMPやXAMMPでOKです。ですがMAMPから次のステップに進むならばVPSやvagrantを用いてサーバーという物に触れた方が良いです。
VPSはお金がかかったりクラッシュさせると面倒なので、学習においてはvagrantがベストです。
vagrantとはvirtual boxという仮想マシンを動かすためのツールです。仮想マシン、つまりMacのなかにWindowsの環境を構築したり、CentOS(商用のサーバーでよく使われるOS)を入れてサービスをリリースする環境を自分のPCに構築します。
仮想マシンを素で環境を構築しようとすると大変なので、vagrantというツールで「大体みんなこんな機能使うよね」という感じで設定してくれます。vagrantで構築するOSを指定すればあとはコマンドを使って自前サーバーを設定できるようになります。まあ、vagrant使えばVPSとか商用のサーバー環境を自分のPCで作れるんだなと思ってください。
vagrantが良いのはdockerとは違って、実際のLAMP環境を構築する手順をローカルPC上で実演できるからです。最近はdockerでコードを書いてサーバー構築するという方法もありますが、それでもコマンドをポチポチ唱えてソフトやミドルウェア をインストールして..と構築する場面はまだ多いです
仮想環境なので例えミスって動かなくなっても壊して、再構築すれば良いだけです。そして仮想環境ですが、実際のサーバー構築と同じ動きをするのでサーバーのディレクトリ構成や、コマンド操作の練習が行いやすいです。
さらに言えば失敗できる環境なので、何かしらエラーが起きてそれを直してみるという経験は貴重です。サーバーでエラーということはwebページが全く表示されなかったり、サービスが停止する本番のサーバーでは失敗が許されません。その点を考えれば自由に失敗できる仮想環境は素晴らしいインフラ学習環境でもあります。
確かにdockerも同様に失敗できて、すぐに環境の再構築と破棄が可能です。しかしdockerを用いて環境構築するにはOSのディレクトリ構成とかApacheの設定の仕組みとかをインフラを最低限知っておかないと、ただの暗記コードを書くだけになります。
「このフォルダに〜〜の構成ファイルがあって、ここに設定しているのんだな〜」というのを理解するにはvagrantを用いて実際のサーバーを探検するのがベストです。
webサービスを提供するためにはインターネットに接続されたサーバーが必要です。ではサーバーに何をインストールして、何を設定して、どこにファイルをおけば自分が作ったアプリが実行され、他の人も使えるようになるのかをよく理解することです。
処理フローを追って、そしてインストールしたものがどのように相互作用しているのかを勉強するとインフラの知識の習得が早くなります。
しかしインフラの知識がない中でソフトの相互作用とか全くわからないので、ソフトの前にサーバーの以下の知識を知るといいです。
まずはこれは基礎知識です。PC何に接続したvagrantまたはリモート上のVPSとかに接続する方法、サーバーの中を探求するためのコマンドは知っておかないとまずサーバーをいじれません笑
私も「vagrantを構築したのはいいけど、仮想サーバーはどこにあるん??」となってました。
MAMPなどをインストールするとApache,PHP,Mysqlが入っていました。しかしvagrantで構築するとそれらは入っていません。自分でコマンドを唱えてインストールします。しかしそれらをインストールして稼働できるようになれば、webサービスを構築できます。
「vagrant <ソフトウェア名> インストール」と検索して方法を調べましょう。
サーバー構築では絶対にエラーで悩みます。「Permission Deniedになる..」「PHPがインストールできない!」「500 Internal Server Error?もう知らん!」となるでしょう。エラーになった時は基本的にはググるのですが、そのググりの際に以下の点に注意しておくといいです。
-その記事では何をしたいのか?どんな問題を解決しようとしてるのか、前提条件を確認する
特にバージョンによる差異は要注意です。自分がインストールしようとしているバージョンと、記事内で解説されているバージョンには気をつけましょう。特に
こいつらには注意です。私もかなり苦労しました。バージョンごとに設定が大きく変わったりしているので、単に調べてコピペするだけでは解決しません。とりあえずどんなエラーが起きたのかログをメモして、バージョンに気をつけながら検索をしましょう。
ここでは主に勉強フローしか書いていませんが、
という流れができればインフラの理解はまず進みます。あとはセキュリティとか運用方法とか権限設定を学んでいくといいです。まずは最低限のインフラを整えて自分のwebサービスを表示・機能できるようにすると達成感と理解が半端じゃないです。
確かに最近はLAMP通りの環境ではなく、WebサーバーにNginx、DBはPostgreSQL、ていうか「Dockerでよくね?」「AWS上での構築でしょ!」とも言われて「LAMPは古い。オワコンだ」とも言われます。
しかし私が思うのはこれらの話は「あくまでより良いwebサービスを提供するための技術選定のお話」であってインフラのことを知っている人たちのお話だと思います。インフラ初学者にとって、基本と言いますか原理的な部分としてはLAMP環境でサーバーの知識を知った方が敷居が低いと思います。
多分LAMPほど情報が多く、チュートリアルで分かりやすい環境構築はさほどないと思います。LAMPからサーバーのことを知っていけば、AWSなりDockerなどLAMP以外の環境構築もすぐに理解できると思います。