初心者がサーバーエンジニアになるためのお勉強の順序は私見ですけどこれがベストかなぁ。
こんにちは。
数十年経ってもこれといって勉強方法が確立されていないサーバーエンジニアの世界なのですが、もし私が教える立場にいて、急造ではなくしっかりと人を育てていける時間的な余裕がある現場なら、こういうことからさせるかなって話を書きます。
あくまで私見なので「そうじゃないだろう」って意見も多いと思いますけど、数多ある方法論の 1つとしてのものですね。
まぁ経験からの話なのでそんなに間違ってもいないと思いますよ。
1.自作PCを作る
クラウドやレンタルサーバーなど簡単に使えるようになりましたが、サーバー機を購入してサーバーとして運用できるまでがサーバーエンジニアの業務範囲に入っている事を鑑みると、コンピューターハードウェアの知見が無いのは辛いです。
まだまだクラウドじゃなく実機でサーバーを立てている所も多いし、クラウドの裏で動いているのは所詮は PCサーバーなのですから。
しかし PCサーバーハードウェアのお勉強のためだけに非常に高価な実機を買うのは現実的ではありません。
でも 自作PCをやることで、CPU・メモリ・SSD(HDD)・電源といった現物に触れることができます。
自作PCと PCサーバー機では、使っている部品が違ったり HDDのインターフェイス規格が違ったりという差はありますが、大枠は自作PCの延長線上で捉えられます。
自作PCをやっている・やっていないでは、サーバーの実機に触れる際は勿論のこと、クラウドサービスの表面に出てくる仮想的なハードウェアの説明から得るイメージが全然違うと思います。
注意して欲しいのは Gaming PCのスペックは必要ないということです。
(ゲームもやりたいなら別に良いですが)
後々搭載できるメモリ量が重要になるので、最大搭載可能メモリ量だけ気にしておけば最初はメモリが 4GBあれば十分ですね。
CPUはそんなにこだわらなくても良いと思います。
動けばよし。
オススメは他人が作った自作PCで「先日まで使ってました。新しいのを買ったので売ります。」ってのをオークションで買うことですかね。
動いていた実績のある部品のセットが一式手に入りますから。
===== 2024年3月3日追記 =====
2023年から「ミニPC」と呼ばれる手のひらに乗るようなサイズのデスクトップPCが流行ってきています。
スペックはピンキリでどれが良いと言い切れるものではないのですが、最新世代の CPU(但し廉価版)・メモリ 32GB〜64GB・SSD・(ライセンスは限りなく怪しいらしい)WindowsOSを搭載していて、2万円台から7万円台となっています。
こんなのが 2万円台で買えるようになりました。
中古PCの最新OSへの対応の無さ、そもそもの購入リスクなど、そういったデメリットを勘案すると、新品ミニPCを購入するのは中々良い選択だと思います。
ミニPCはパーツ交換の選択肢の無さがハードウェアのお勉強の機会損失になる、これがミニPCのデメリットでしょうか。
しかしミニPCの台頭で、自宅でお勉強するサーバーエンジニアの界隈で今流行ってきているのは、Proxmox VEを使ったクラスタ環境を作ってしまう「ホームラボ」というもの。
当ホームページでは
「PROXMOX環境構築 1」や
「PROXMOXクラスター 1」で扱っています。
メモリを多く積むために家にフルタワーケースを置くより専有スペースが小さくなりますし、仮想環境・クラスタサーバー・ネットワークなどのお勉強に繋がるので、中々良い環境だと思います。
最初はミニPC 1台でスタートし、必要になったら 2台目・3台目を追加購入していくのも良いでしょう。
2.Linuxクライアントに触れる
自作PCを作ったら Windows10や 11じゃなく、とりあえず Linuxのクライアントをインストールしてイジってみて下さい。
Windowsのライセンス分の節約にもなりますし。
このホームページでは、Ubuntuをよく使っていますね。
一番メジャーなんで、「Linuxって言ってもどれ?」って迷うようなら Ubuntuで良いでしょう。
ユーザーが多いだけに情報も得やすいです。
Linuxのクライアント環境が手に入ったら、WEBブラウズでもしながらたまに黒い画面(ターミナル)でコマンドを打ち込んでみるとかやってみれば良いです。
Linuxにはサーバー版のOSもありますけど、あれはクライアント版からウィンドウシステムを抜いたものと捉えて下さい。
サーバー版でできることはクライアント版でもできます。
Linuxの情報を調べてネットを回っているうちに、黒い画面経由でソフトをインストールしたりするでしょう。
そうしているうちに環境が汚れてきて「綺麗にしたいな〜」って思うはずです。
そうしたらまた 1からインストールすれば良いんですよ。
OSインストールの繰り返し、これがサーバーエンジニアのお勉強になります。
3.仮想環境利用のために自作PCのメモリ増強
Linuxクライアントを使っていると、他のディストリビューションが気になってきます。
しかしお気に入りの環境を消して他のを入れるわけにも行かぬ…という状況になります。
ここで登場するのが仮想環境です。
仮想環境を作れるソフトを導入することで、1つの PCで複数の OSを同時に実行することができます。
ソフトの候補は以下 3つ。
- Oracle VM VirtualBox
- VMware Workstation Player
- (Windows 11 Proを買って) Hyper-V
機能は似たりよったりなのでどれでも良いです。
サーバーエンジニアとして大事なのは、これらのソフトはプログラムでハードウェアの機能をエミュレートしているというコンセプトを理解することです。
まるでそこに 1つのコンピューターがあるような枠を作れるんですね。
これはクラウドでもやってることで、AWSの EC2や Azureの仮想インスタンスのベースになっている技術です。
説明が長くなりましたが、仮想環境を使うには最低でも
- PCにインストールしたOS
- 仮想環境ソフトウェアの中で動いている仮想OS
の 2つの OSが同時に動くんですが、それぞれメモリを食うので、昨今の最新OSのメモリ使用量を鑑みると 4GBのメモリ量では足りません。
オークションで購入して 32GBくらいまで増やすのが良いと思います。
4.RedHat系 Linuxに触れる
メモリ増設 & 仮想環境ソフトの導入が済んだら、前回が Ubuntuなら RedHat Enterprise Linux(RHEL)互換の Linuxディストリビューションをインストールすることをお勧めします。
RHELは日本の商用シーンで使われる Linuxサーバーの OS筆頭のはずなので、お仕事では Ubuntuよりもずっとこちらの方に需要があるはずです。
安定動作を求める環境用なので Ubuntuよりも使っているものが古く(良い意味で枯れている)、クライアントとしては面白味に欠けるので最初にインストールするクライアントOSとしては出しませんでした。
同じ Linuxでもコマンド類の動作が若干違っていて、基本は同じながらも一応 Ubuntuとは別体系の知識が必要になります。
導入候補は以下 3つ。
以前は CentOSというのが RHEL互換の鉄板だったのですが、すったもんだの末にその地位を捨ててしまいまして…
2023年8月11日現在の最新ニュースですが、ヨーロッパでよく使われている SuSE Linux と Oracle Linux が共闘してフリーの RHEL互換OSを作っていくことにしたって言っています。
暫く経ったら、鉄板の互換OSが出てくるかも知れません。
5.サーバー製品をインストールして環境構築してみる
OS環境ができたら、あとはひたすらサーバー製品(と言ってもお金がかかりますから OSSが主となります)をインストールしまくり、環境をセッティングしまくってそのノウハウを溜め込みましょう。
この辺りから「あのソフトもこのソフトもベースでは同じことやってるな」という部分が見えてくるはずです。
サーバーエンジニアの応用力となるのがこの部分の知見です。
このホームページではこの段階でやることを多く書いていますよ。
WindowsのサーバーOSもこの一環でインストールしてみると良いですね。
6.息切れするので理論に立ち戻る
5の途中で苦しくなってくるはずです。
意味が良くわからないまま、どこかのブログの真似をして環境構築しているため、ブログとちょっと違った部分があると応用が効かずに先に進めなくなります。
そこで書籍の出番になります。
遠回りに感じるかも知れませんが、単に教科書的に本を通読するのと、「上手く行かない」と解決策を求めている状態で本を読むのとでは、基本から網羅されている本から得られるものに雲泥の差があります。
書籍がない場合は、オフィシャルのドキュメントにあたるのが良いでしょう。
(英語が多くて辛いですが)
LPICなんかの資格を取りに行くのも良い頃合いです。
7.ネットワークに打って出る
ここまではサーバーOSと言っても GUIがインストールされていて、サーバーのローカルで環境構築が完了していますが、サーバーってのはネットワークを介して利用したりメンテしたりするものです。
サーバーエンジニアはネットワークからは逃れられません。
ですので、ここからはサーバーOSに GUIをインストールするのは止めにしましょう。
Ubuntuにはサーバー専用のインストールメディアがあります。
RHEL互換の方は、インストール時に GUIを抜く事ができます。
そして Linuxクライアントのターミナルから sshで接続して作業するようにします。
これまでローカルなら上手く動かすことができたサーバー製品でも、ネットワーク越しに利用できるようにするとなると上手く行かなくなります。
ここに至って「サーバー・クライアント」の概念の理解が必要なこと、TCP/IPなど表面に出てこないネットワークプロトコルを理解することの必要性も感じるでしょう。
そうしたら必ず TCP/IPの本を1冊は読んで下さい。
そういう本は持っていてこれまで読んだことがあったとしても、この段階で読むといきなり目の前が開かれるような気持ちを味わえるはずです。
ここまで来ますと、相当にやれるようになっているはずです。
8.スキルの幅を広げていく
OSを知りネットワークを知るようになると、応用範囲が広がりスキルの幅を広げる準備ができていると言えます。
色々ありますが例としてはこんな方向性があります。
- プログラミング
- ネットワークの深い方(ルータとか)
- コンテナ周り(Kubernetesなど)
- パブリッククラウド
- ストレージ周り
- セキュリティ
- サーバー構築自動化
他にも色々ありますけど、流石にここまで来ると全部を網羅するのは人間の脳が追いつきません。
自分が興味のある方向に進めば良いと思います。
特にコンテナはここまでやってからではないと手を付けるのはよした方が良いくらいに思いますね。
番外.運用スキル
サーバーエンジニア ≒ 運用エンジニア
という式が成り立ってしまうのが日本のIT業界なので、運用スキルはどうすれば身につけられるの?という疑問を持っている方も多いでしょう。
残念ながら運用スキルは現場でしか身に付きません!
これは運用はシステム毎に要件が違うからなんですね。
そのために運用スキルって言っても決まった道筋があるわけではなく、複数の現場やシステム環境を経験すると抽象的な何かが見えてくるだけ、とそんな気がします。
また、運用にはゴールがなく、改善改善の日々で何が正解かも分からない状態なのが普通です。
「じゃ、お勉強しても無駄じゃん(バカナノ)」とお思いなさるな。
運用というのは、上に書いたようなお勉強を通して身につけた技術スキルあってのものであって、決して徒手空拳であたるものではありません。
=============
何だか果てしない道だなぁ〜…
と遠い目になってしまいそうですが、確かに果てしないのです。
でもお勉強を重ねた時間は裏切りませんよ。
やった分はサーバーエンジニアの血肉となって残り、他の追随を許さぬ状態になるはず。
サーバーエンジニアとして生きるなら、迷わず「お勉強!」の精神でいることが大切です。
サーバーエンジニアが読むべき本は、時間が経っても枯れないので助かります。