coiaiは、ものづくりを軸にシステム開発やプロダクト開発を行っているIT企業です。この番組では、月に2回程度、創業者である私が「起業のリアル」を発信しています。
今回のメイントピックは、社内にサーバーを1台置いたら、会社のいろいろなシステムや自動化をそこに集約できて、コストもかなり削減できたという話です。あわせて、今月はセキュリティ対策でも動きが多かったので、そのあたりも含めてお話しします。
今月のニュース — 「〇〇2Shell」が続いた月
今月は、セキュリティ関連の大きなニュースがたくさんありました。中でもエンジニアの間で話題になったのは、情報流出のような事件ではなく、プログラムそのものの脆弱性の発見です。Node2ShellやPHP2Shellと呼ばれているものですね。
特にPHPの方はかなり大きな話でした。PHP本体に、認証なしでリモートからコードを実行できてしまう穴が見つかったんです。
弊社でもホームページの一部にPHPを使っていました。こちらはレンタルサーバーで動かしていたので、私たちが直接というより、レンタルサーバー側でパッチを当ててもらう形で対応できました。
ただ、それとは別に、自分たちで運用しているサーバーの中にも、PHPで動いているオープンソースのサービスが一部ありました。それをどうしたのか、という話を、この機会にメイントピックの中でお話ししようと思います。
前提 — 会社に「かなり強めのサーバー」を置いている
まず前提として、今、会社にかなり強めのサーバーを置いています。
**AMDのEPYC(エピック)**というCPUをご存知でしょうか。サーバー用のかなり強いCPUで、うちのものは64スレッド。メモリは125GB積んでいます。
これは、弊社が提供しているサービスの一つ、オンプレミスAI(お客さんの社内に置いて動かすAI)の検証機として使っているものです。
GPUには、NVIDIAのV100という、10年近く前の世代のGPUを使っています。今は32GB版を2枚つないでいて、今月買い足したので、合計8枚まで増やそうと思っているところです。これで、ニューラルネットワークの研究をしたり、ローカルでLLMを動かしたり、いろいろなことをしています。
このサーバーをめちゃくちゃ使い倒しているので、今回はその話をしていきます。参考になるところもあると思うので、ぜひ真似してみてください。
VPNを使わずに、社外から安全にアクセスする
家庭用の回線では、VPNが使えなかった
この自社サーバーは、最初は社内のローカルネットワークだけで使えるようにしていました。ただ、社外から使いたい場面って結構あるんですよね。
普通に考えるとVPNが良さそうなんですが、うちの回線は一般家庭用なんです。一般家庭すぎて、DS-Lite(ディーエス・ライト)という方式になっています。これは、ざっくり言うとIPv4で外から接続を受けられない方式です。VPNの多くは、ルーターのポートを開けて外からの接続を受ける必要があるので、そもそも使えません。
Cloudflare Tunnel・Access・Pocket IDの3点セット
そこで、一般家庭の回線のまま自社サーバーを動かすために、次の3つを組み合わせています。
| 仕組み | 例えるなら | やっていること |
|---|---|---|
| Cloudflare Tunnel | 通り道 | サーバーの側から、Cloudflareに向けて外向きに接続を張りっぱなしにしておく。外からのアクセスは、その中を通ってくる。ルーターのポートは1つも開けなくていい |
| Cloudflare Access | 門番 | ログインしていない通信はCloudflare側で止めて、サーバーに直接届かないようにする |
| Pocket ID(OIDC) | 身分証の発行所 | 顔認証や指紋認証(パスキー)で本人確認をする |
当たり前ですが、これで弊社のサーバーには、自社の社員しかアクセスできない仕組みになっています。
考え方としては、いわゆるゼロトラストです。「社内ネットワークの内側だから安全」と考えるのではなく、リクエストごとに「誰がアクセスしているのか」を確認する。
この構成のいいところは、コストです。Pocket IDは無料ですし、Cloudflareも今のアクセス量ならほぼ無料の範囲で収まっています。
サーバーを手で直接いじらない
サーバーまわりの設定は、確実に、絶対に、Terraform(テラフォーム)などのコードを通して変更するようにしています。
クラウドサービスでインフラを構築するときは、設定をコードで管理する**IaC(Infrastructure as Code)**の環境を整えるのが一般的だと思います。それを自社のサーバーにも当てはめることで、誰が・いつ・何を変更したのかを、リポジトリの変更履歴として残せるようにしています。
なので、サーバーを直接手でいじる、ということはしないようにしています。
NextcloudをやめてRustでファイルサーバーを作り直した
ここからは、この自社サーバーに具体的にどんなサービスを載せているのか、というお話です。
機能が盛り盛りで、しかもPHPだった
まずはファイルサーバーです。ここで、冒頭のPHPの脆弱性の話につながってきます。
**Nextcloud(ネクストクラウド)**をご存知でしょうか。Ubuntuなどのサーバーで動くファイルサーバーのソフトとしてはめちゃくちゃ有名な、オープンソースのソフトです。これが、PHPで動いているんですよね。
本当に申し訳ないのですが、個人的には使いづらいと感じることが多くて。何かというと、機能がめちゃくちゃ盛り盛りなんです。こんなにいらないな、という悩みがずっとありました。
そこにPHPの脆弱性のニュースも重なったので、「自社で書いちゃえばよくない?」と思って、ファイル管理を**Rust(ラスト)**で書き直しました。フロントエンドも含めて、全部自分たちの使いやすいように丸ごと作り替えています。
検索はSQLiteだけ、ファイルが増えたら考える
今はほぼテスト運用の段階です。ファイル内の検索はSQLiteだけでやっていて、いわゆる検索エンジンは立てていません。日本語の全文検索もSQLiteで処理しています。
自社サーバーに置いているファイルは、今のところ数百件程度なので、これで十分なんです。ファイル数が増えてきたら、そのときに検索エンジンを用意すればいい、という判断です。もちろん、セキュリティ的に危なそうなところは一通りチェックしながら動かしています。
音声を入れると、議事録ができるファイルサーバー
これが結構便利で、自社でカスタマイズしたので、例えば音声ファイルを入れた瞬間に、サーバーの中で動いているWhisper(音声認識)とオープンソースのLLMが自動で文字起こしをして、議事録にしてくれる、という運用をしています。
ちょっと高機能なファイルサーバーとして使っている感じですね。
サーバーからPHPが1つもなくなった
この作り直しで、サーバーの中で動いているプログラムから、PHPのものが1つもなくなりました。管理もかなり楽になってよかったと思っています。
個人的な話をすると、これまでWeb開発をしてきた中で、PHPは結構苦手な言語だったんですよね。管理も難しいですし。Laravelが主流になってきて良くなってきたとは思っていたのですが、特別好きな言語でもないので、「Rustにしちゃおう」と思ってRustにしちゃいました。
SEOの改善レポートを、GASではなく自社サーバーで毎週自動化
Search ConsoleとGA4の数字を、Claudeに分析させる
自社サーバーでいい感じにできていることとして、SEOの改善レポートもあります。
今、自社のホームページ(coiai.net)のSEO改善をちゃんとやっていこうとしています。そのために、Google Search ConsoleやGoogleアナリティクス(GA4)の数字を取ってきて、それをClaudeに分析してもらう、ということをしています。
GASならAPIキーの費用がかかる
実はこれ、**Google Apps Script(GAS)**を使えば全く同じことができるんです。ただ、GASからClaudeに分析させるには、ClaudeのAPIを叩く必要がある。毎週分析させているので、そのたびにAPIの費用がかかるのは、あまり良くないなと思っていました。
自社サーバーなら、データを1回読ませてClaudeに返答させる、ということが、普段契約しているClaudeのプランの範囲内でできてしまうんです。わざわざGASを使わなくても、自社サーバーがあるからそっちでやっちゃおう、ということができるようになりました。
最終的には、サーバーからメールを飛ばして、私たちが普段使っているメールに、SEOの改善レポートを毎週届けてもらっています。ここは結構気に入っています。
ファンのないGPUを、3Dプリントのダクトで冷やす
そのままサーバーの話をすると、先ほどのV100は、ファンの付いていないグラフィックボードなんです。データセンターのサーバーラックの中で、強い風が流れている前提で作られているんですね。
なので、こちらでファンを用意して、グラフィックボードに風を当ててあげないといけない。そこを3Dプリンターでダクトを作って、いい感じに風が当たるように工夫しています。ソフトウェアの会社ですが、こういうところはものづくりの会社っぽいかなと思います。
会社のメールを、セキュリティの強いサービスに引っ越した
レンタルサーバーから完全に脱却したい
最後に、会社のメールを、ちゃんとセキュリティの強いものに引っ越しました。
もともとはロリポップなどのレンタルサーバーを使っていました。個人事業主だった頃の名残で、ホームページもほとんどレンタルサーバーで動かしていたんです。ただ、レンタルサーバーからは完全に脱却したいと思っていて、ホームページも基本的にAWSなどに移行していこうとしているところです。
というのも、もっと高機能にしていきたい、という要望が結構あるんですよね。前回お話ししたとおり、弊社はもうWordPressを使っておらず、自社でCMSを作って運用しています。今はLaravelで作っていますが、別のフレームワークでもいいなと思っていて。弊社が普段メインで使っているバックエンドの言語は、JavaやKotlin、それからRustなんです。PHPを使っているのはホームページだけ。であれば、レンタルサーバーで無理にPHPを動かし続ける必要はないかな、と。
メールは「最後の砦」
それに伴って、メールももう少しセキュアなものにしようと思いました。
いわゆるレンタルサーバーのメールって、メールアドレスとパスワードが抜かれてしまうと、誰でもログインできてしまうんですよね。それはちょっと微妙です。一人ひとりに2段階認証があったり、端末ごとにパスワードを発行できたりしないと、セキュリティ的に弱すぎます。
今は、いろいろなサービスのアカウントが、メールアドレスさえ押さえればパスワードの再発行ができてしまうじゃないですか。そういう意味で、メールアドレスは最後の砦なんです。そこをセキュリティの弱いままにしておくのは嫌だな、と。
mailbox.orgを選んだ理由
そこで、mailbox.orgというドイツのメールサービスに、ひとまず移行しました。
他にはGoogle Workspaceなども検討したのですが、値段が高いという理由で、mailbox.orgにしました。それから、弊社はGoogleのサービスに無理に一本化する必要がないんです。ログインの仕組みは先ほどのPocket ID(OIDC)で自分たちで持っているので、Googleに揃えなくてもいいかな、と。
セキュリティは「1日だけ頑張ればいい」ものではない
こうして、メールも含めて、全体的にセキュリティをかなり強くできたと思っています。……と言いつつ、これでやられちゃったら笑えないですよね(笑)。でも、やれることは今、全部やっているという感じです。
それ以外にも、社内には、Claudeを使ってペネトレーションテスト(疑似攻撃によるセキュリティ診断)ができる環境を持っている方がいるので、その方に協力してもらって、社内のセキュリティ改善を常に続けるように心がけています。
さらに、社内で動かしているローカルLLMでも、常時セキュリティの穴がないかを監視し続ける、ということをやっています。
セキュリティって、1日だけすごく頑張ればいいものではないじゃないですか。だから、継続的にパッチを当て続けたり、「ここが弱いですよ」という通知を出す仕組みを整えたりしている、というのが最近の弊社の動きです。
お問い合わせ、アイデアだけでも大歓迎です
最近、ホームページからのお問い合わせが増えてきていて、嬉しく思っています。
弊社ではいろいろなことをやっていますので、**実証実験(PoC)**や「こんなふうにやりたい」というものがあれば、ぜひお問い合わせください。アイデアだけでも全然大丈夫です。「こんなことをやってみたいんだけど、できるのかな」というのを、ぜひ聞かせてください。
弊社の強みは、「こんなことできますか?」と言われたときに、「予算の面から言うと、これくらい回収できないと現実的には難しいですよ」という現実的なことも、きちんとお伝えするところです。ただ作って終わりではなく、ご提案いただいたサービスが、ずっとみんなに使い続けてもらえるサービスとして成り立つように、いろいろ提案させていただきます。
現実的な月額の費用なども含めて、関わる全員が損しないようにサービスを設計していく。これが弊社の強みですので、ぜひご相談ください。
おわりに
株式会社coiaiでは、Web開発 / XR開発 / 基幹システム開発 / オンプレミスAIの導入支援を行っています。
他にも大概なんでもできますので、他社さんに断られた案件、見積もりが高すぎた案件など、お見積もりは無料ですので、なんでもご連絡ください。
ということで、次回はまた来月になりますかね。チャンネル登録して、次回も聞きに来てくだされば嬉しいです。ありがとうございました。
