はじめに
この記事は、40歳頃からプログラミングを始めたぼくが、はじめての自宅サーバではじめてちゃんとしたWebサイトを公開することを達成した経験談となります。
ちなみに完成したサイト(絶賛更新中)はこちらです。
サイトのProfileのページには、ぼくのスキルの状況や学習の経歴なども書いてあるので、興味のある方はぜひごらんになってください。
少しでもそういったことが伝わる記事になっていれば幸いです。
開発する際に使った(学んだ)技術等
正しい表現じゃないかもですが、こんな感じです。
Webサイトを作った理由
体験談の前に、なぜぼくがWebサイトを作ったか理由をすこし。
ぼくには、やりたいことがありまして。
それは、
「自分のスキルを活かして、だれかの役に立つ活動をする。」
とはいえ、なかなかそういった活動をするベースもなく、ニーズを汲み取る機会もない。
そんなぼくに必要なものが、次の2つであると考えました。
これらの環境を満たすもの、それが自分のWebサイトを作ることだという考えに至ったためWebサイトを作りました。
某AIが「プラットフォーム」とぼくのサイトを表現してて、けっこうしっくりきてます😆
なぜ自宅サーバーか
おそらくただサイトを作るだけならレンタルサーバーやVPS使えばいいのに。
セキュリティもそっちの方が安全じゃない?
と、思われた方も多いと思いますが、まず第一にコストを抑えたい、そして
多くの学びを得たい、と考えていろいろ調べた結果
メリット
- ランニングコストがレンタルサーバやVPSより小さい(というか電気代ぐらいしかかからない)
- レンタルサーバやVPSでは得られない学びがある(VPS使ったことないですが)
- ゆくゆくwebアプリとか様々なものを公開していくにあたり自由度が高い
デメリット
- イニシャルコストがかかる(ルータやらラズパイやら)
- セキュリティ対策を誤ると大変ぽい
と考え、総合的に、コストパフォーマンス(パフォーマンスには「学び」が含まれます。)に自宅サーバー、自宅ネットワーク。自分で全部やるのがが最適という結論に至りました。
また、デメリットに記載したイニシャルコストやセキュリティ対策に関しては、それらのコストから得られるパフォーマンス(学び)が大きく上回ると考え、ぼく的には「コスパいいね!」という感覚に至っています。
サイト公開に至るまでのざっくりスケジュール
ざっくりとこんなスケジュールで公開に至りました。学び始めて毎日コツコツやってたのですが、意外に早く公開まで行けました。
もちろん途中いろいろ課題にぶちあたりましたが、時にネットで知り合った人を頼るなどして、なんとか乗り越えられました。
時期 | 内容 |
---|---|
2024.2 | ラズパイ、VPNルータ購入。自宅ネットワーク再構築開始。サーバーってなにかを学習。 |
2024.3 | React学習(少し学んだことがありましたが、ほぼ忘れてたので(;^_^A)。学習しながらサイト制作開始。 |
2024.4 | Webサイト公開 |
自宅サーバーってぶっちゃけどう?
個人的な見解ですが、控えめにいってめっちゃいいです。
正直ぼくは最初
- サーバー難しそう
- サーバーって高そう
- コマンドなんて操作できなさそう
きっと無理だ!と思ってましたが、やってみた結果
- RaspberryPiって意外に安い(正直ひと昔前に比べるとめちゃくちゃ高くなってますが…)
- いらなくなったパソコンでもサーバー作れる。
- ググれば大抵のことはわかる。
- 調べながらコマンド打ってたら抵抗なくなってくる(いましは、ChatGPTが教えてくれますしね。)
といった感じで、結局事前の勝手な想像とは違いました。
ぼくの場合、Webサイト作って外部公開しているので、セキュリティリスクがありますが、単にサーバーを学んでみたい、触ってみたいって方には、ぜひ自宅内だけでもサーバーを立ててみては?と思っちゃいます。
自宅サーバーをやってみて学んだこと
サーバとは?
そもそもここ。
エンジニアの方だときっと一丁目一番地のことだと思うんですが、僕は最初どっち使ったらいいんだろ?と、ここで立ち止まりました。
そして今の僕の理解はこちらです。
ようは、使っている人に素早く情報とかを提供するために特化したものそれがサーバなんだな。
あくまで個人的な解釈ですが、「なぜデスクトップ環境が不要なのか」だって目的はクライアントさんが快適に使うことじゃなく、サーブ(提供)するために全力投球ですから!
的な解釈に至りました。
サーバーの目的を阻害するものはいらない。ですね。
結果Ubuntu Serverをもちろん使いました。CLIと書きましたが、結局VSCODEでSSLでつないで使ってますけどw
自宅サーバ公開のための自宅ネットワーク構築
サーバーを公開するために、ネットワークを学ぶ必要がありました。
正直リスク度外視で単純に公開するだけなら、おそらくインターネットを引き込んでいるどこのご家庭でも、コストなしにすぐできるんじゃないかなと思います。
が、インターネット
自由に情報が行きかう世界。なにも防御をせずに出てってしまうとえらいことになります(と、ネットでよく書かれています。)
けど、怖がっててもなにもできないですし、なにか問題がおきてもきっとそれが経験になると思い、現在トライしてます。
ただし、以下の2点はさすがに許容できないと思っていろいろ勉強しました。
自宅内LANは、いろいろ情報資産がありますし、なにより自分だけじゃなく家族のデバイスとかもいるわけで、迷惑はかけられない。自宅サーバー外部公開するなら、そこはちゃんと守れなきゃ!
ということで主な対策は以下のような感じでとりました。
今後もいろいろログ監視など、チャレンジしていきますが、とりあえず序盤はこんな感じの対策してます。
もし、ネットワーク詳しい方で、だめだめそんなんじゃなどアドバイスがありましたら、ぜひご教示いただけると幸いです。
そして、公開サーバの乗っ取り対策はこちら。
個人情報とかおいてあるわけではないので、おかしくなったら、速攻でLAN抜いて初期化でもいいのですが、なによりひと様に迷惑はかけたくないので、防衛策を講じています。
ここらへんは、鋭意いろいろ勉強中で防衛策は適宜更新していく予定ですが、いったんはこんな感じです。
自宅サーバーの中のネットワーク構築
先に書いたのは、リアルなデバイス間のネットワークでしたが、こちらは、自宅サーバー内のネットワーク構築です。
自宅サーバの運用をする上で、将来的に
入口になるWebサイトを軸にしていろいろなWebアプリをたくさん作っていきたい
と考えていたため、Dockerを活用し、ざっくり次のような構成になっています。
Nginxほんと優秀。
正直少し前までなんて読むかも知らなかったNginx。
リバースプロキシサーバーなんてものも正直ぜんぜん知らなかったのですが、
外からきた通信をまずリバースプロキシでキャッチして、行先を確認。
行先のWebサーバーにパスをするといったなんとも簡単な作りですが、個人的にはとても分かりやすくていいなと思ってます。
また、Nginx Proxy ManagerなるGUIで操作できるツールとも出会いまして、こちらもとても使いやすいので、ぜひ触ったことがない人は一度使ってみてはいかがでしょうか?
すごくUIもわかりやすく、なによりLet's Encryptの設定がちょこっとの入力とクリックだけでできてしまうという。めちゃくちゃおすすめです。
ちなみに、今後は、Webサーバを増やしていろんなアプリサービスを提供していけるように計画をしています。
DDNSやらドメインまわりのあれこれ
サイトを公開するにあたり、グローバルIPアドレスと独自ドメイン、そしてDDNSをどうするか。
ちょっといろいろ考察しました。
一般のご家庭でWebサイトを公開しようとした場合、おそらくだいたいの人が
- グローバルIPアドレスは動的(変わりえる)
- DDNSどうしよう(動的IPアドレスに対応したDNSサービス?的な)
になると思います。
たぶんいろいろなやり方があるのだろうと思いますが、ドメイン周りは次のような感じになりました。
ちなみにMyDNS様という素晴らしいDDNSサービスをドネーションのみで運営されているところがありまして、本当に感謝してもしきれません。
おまけのWebサイト
記事を書いてて、Webサイトがどうこうはもうおまけだな。
と、おもいましたが、今回Webサイトを制作してみて(ちゃんとしたサイトを作るのは初めてだったのですが)
React✕MUI相性抜群!
これにつきます。
デザインが苦手な方は特におすすめの組み合わせなので、ぜひぜひ興味のある方は、トライしてみてください。
さいごに
ここまで読んでいただきありがとうございました。
ここまで書いてきて、思うがままに書いたので、読みづらい点等あったかと思いますが、本当にありがとうございました。
ぼくは、先に書いたように自分の技術を「だれかのために」提供したいと考えています。
もし、この記事を読んで、「自宅サーバー」やってみたい!
「自宅ネットワーク」やってみたいなど、思われた方
ぼくは、ぼくのスキルを提供することは惜しみません(営利活動や反社会的など一部の活動には協力できませんが…)ので、もし、なにかサポート等できることがありましたら、SNSなどでコンタクトをとっていただければ幸いです。