セルフホストノススメ ver. 2024
2024年12月24日 火曜日
CONTENTS
【IIJ 2024 TECHアドベントカレンダー 12/24の記事です】
こんにちは、お久しぶり、初めまして、データセンターで働くyt-nkgwです。
昨年のアドベントカレンダー(IIJの今年の新卒エンジニアのおうちを紹介してみる。Part 1/2)ぶりとなります。
ちなみに、今年もなんと新卒の方たちがおうち紹介を執筆してくれています。
- IIJのFY2024 新卒の自宅 / 業務環境紹介 Part 1 | IIJ Engineers Blog
- IIJのFY2024 新卒の自宅 / 業務環境紹介 Part 2 | IIJ Engineers Blog
今回は、おうち紹介記事でも登場(ネタ被り)した「セルフホスト」について説明しましょう。
セルフホストとは
「セルフホスト」ってなんだ?
「セルフホスト(self-hosted)」とは端的に言えば「いろいろなサービスを自前でホスティング(設置)して運用すること」です。
セルフホスト自体は自宅内にホスティングするのを制限するわけではありません。
近い用語に「オンプレミス(on-premises)」というものがありますが、オンプレミスはその名の通り敷地内(premises)に主要なサーバやネットワーク機器を設置し運用します。
逆に「オフプレミス(off-premises)」は敷地外となります。オフプレミスの代表例としてデータセンターのコロケーションラックやVPS(仮想専用サーバ)ですね。
データセンターサービスやVPSサービスを用いてセルフホストするのも可能です。
セルフホストという概念自体は昔からあるものです。
元々のセルフホストは「コンピュータの次のバージョンといった基本プログラム(OS)を作るために必要なツールやプログラムが自己完結できる現在の環境」を示すようなものでした。
この概念は、調べると少なくとも2000年にはあったようです。
本記事におけるセルフホスト、つまりサービスを自前でホスティングするのとは違った考え方です。
あるセルフホストのコミュニティは2014年からあるようで、比較的新しい言葉であることが伺えます。
なぜセルフホストをするの?
理由は色々ありますが、そのサービスを誰がどのようにコントロールしているか不明瞭であるならばセルフホストする、といった考えが多いかと思います。
自由なソフトウエア開発における先駆者のひとりである、リチャード・ストールマン氏は2010年に「What Does That Server Really Serve?」という記事を出しています。この記事の中では「サービスとしてのソフトウェア(SaaS)」の問題点として、SaaSは容赦なくユーザの制御権を奪うこと、利用状況をサーバに送ることなどが書かれています。SaaSを利用する場合、そのメリットや恩恵を受けますが、同時にそのサービスのコントロール権は自分にはありません。このリスクヘッジとしてセルフホストという選択肢があります。
そのほかにも、自分でそのサービスやサーバを動かしてみることで、その機能性や安定性を確かめたり、いわゆる「壊しても良いインフラ環境」(本番ではない自前の環境)としてセルフホストを使うケースもあります。
どんなサービスのホストをするの?
どんなサービスでもホストできます。
インターネット上で稼働しているサービスと同等の代替となるソフトウェアがあり、そのソフトウェアがセルフホストできれば、どんなサービスでもホストできます。
ただし、大きく複雑なサービスであるほどホストするのに非常に手間が掛かったり、安定的にホストするには大変な苦労がかかります。
音楽配信プラットフォームやSNSなどをセルフホストすることもできますが、コンテンツやユーザがあるかいるかはまた別の話になります。
どうやってホストするの?
どこでもセルフホストできます。
おうちで始める場合、空いているノートPCやメインPCに仮想マシンとして展開するほかに、Intel N100を使ったコンパクトなミニPCやラズベリーパイなどを使う選択肢があります。
メモリは16GBあれば(玄人を除いて)まず困りません。まずミニPCに入っているOSは消してしまい、そこに最新のLinuxサーバOS(例: UbuntuやRocky Linux)などを入れて、セットアップし、そこでホストさせます。
自分でサーバを建てられるレンタルサーバ、VPSなどがあればそこでセットアップさせます。
ただし、これらの場合は公開するとインターネット上の悪意のあるユーザからアクセスされてしまう危険性があります。
ネットワークセキュリティについて学び終えてない場合は、手元にパソコンを用意し環境をつくることをオススメします。
どんなセルフホストもまずはローカルネットワークで動作させましょう。
公開する場合は、そのツールを一通り試してから公開することをオススメします。
大体のセルフホストアプリはdockerで動作します。
一部のセルフホストのために、 cockpit-machines
を入れて、WebUIから仮想マシンを操作しておけることをオススメします。
ディレクトリ(フォルダ)として階層構造を作り、その中に気に入ったサービスの docker-compose.yml
を入れておくと良いでしょう。
サービスの設定ファイルを一通り書き終えたら、 docker compose up -d
して起動させ、サービスを動作させます。
これでセルフホストできます。
ちなみにこれを簡単にWebで管理する louislam/dockge: A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager というアプリがあります
良いセルフホスト、悪いセルフホスト
セルフホストというジャンル、そのアプリは比較的、技術オタクが使うことが多いです。
その都合上中にはあまり著作権のことが考えられていないアプリ、ツールが存在するのも確かです。
そのツールがどのような経緯で作られたのかはさておき、ツールを使う者は良識が求められます(道具としての意味を込めてアプリではなくあえてツールと呼びます)。
セルフホストは自分でコンテンツを配置しその配信をできる手段です。
しかし、その手段や運用方法が著作権の私的利用の範囲を超えてないか、「電気通信事業を営む者」に該当しないか等を考慮することが求められます。
またそのライセンスが商用利用可能か、独自のライセンスをもってないか、開発が続いているか、脆弱性パッチは適用されているか、確認した上で使うと良いと思います。
以下に一例を示します。
- あるセルフホストの開発者は、セルフホストのSNSコミュニティ上での一年ほどリリースされていないという話題の中で「残念ながらそのプロジェクトに割く時間がない。いま開発している別のプロジェクトのリリースが終わったら、来年から実施できる」とコメントしている
- ある料理のレシピ情報を管理するセルフホストは、ほかのレシピサイトからWebスクレイピングしてインポートする機能を備えているが、たくさんのユーザがいた場合、一度にたくさんのインポートができてしまい、ほかのレシピサイトに大量にアクセスがいってしまう恐れがある
- あるパスワード管理ツールのリリース情報に脆弱性修正情報も記載されており、アップデートしないと脆弱性を保有したバージョンのままになってしまう
リスペクト・貢献
セルフホストだけにとどまらずオープンソースソフトウェア全般にいえることは、開発者のリスペクト・貢献をどうしていくか、ということです。
ある比較的有名なセルフホストツールのメンテナ(ソフトウェアをメンテナンスする人)はGithubのディスカッション機能にて「Github Sponsor(開発者に寄付する仕組み)を始めて暫く経つが、1回も寄付は来ていない」とコメントしていました。
ある有名なセルフホストツールの開発者は、自由なソフトウェア(AGPLライセンスなソフトウェア)に金銭を払う「購入」メニューを作ったうえで「お金を払わないという選択もまた自由である」とコメントしていました。
(この後に購入からサポートという文言に変更されました)
このように、金銭の面だけとっても貢献に関する方法は開発者によって様々です。
そのソースコードに開発者の迷惑にならない範囲で貢献者や提案者になっても構いませんし、まだ邦訳されていないソフトウェアを翻訳で支援する方法もあります。
もちろん開発者に金銭的に支援する方法も、フリーライドするということも選択肢としてはあります。
「寄付」という行為は学校で習うようなものでもなく、相手を想う気持ちなどから生まれるものです。
是非、素晴らしいソフトウェアと出会ったならば、その貢献を考えてみてください。
セルフホスト 15選
requarks/wiki: Wiki.js | A modern and powerful wiki app built on Node.js
生活してると、いろいろな教訓、知識を得ていきます。
そしたら自分のナレッジ(知識のメモ)を用意したくなると思います。
せっかく書くナレッジ、しっかりまとめたいですよね。
そんなあなたにWiki.js です。
従来からセルフホストのウィキソフトウェアというのはいろいろありました。
例えばWikipediaを構成する「MediaWiki」を利用すると自前でWikipediaと同じデザインのサイトを立ち上げることができます。
そのほかにも有名なウィキソフトウェアとして「PukiWiki」や「Dokuwiki」が挙げられます。
Wiki.jsの特徴としていくつか挙げられます。
- 階層構造と整ったURL
- セルフホストDrawio連携
- 初心者にも扱いやすいWYSIWYGエディタとエンジニアに優しいMarkdownエディタ
階層構造と整ったURL
たくさんのナレッジを管理するのにその配置、データ構造は大事です。
MediaWikiをはじめとする大体のウィキソフトウェアは「あるタイトルに対してページがある」といった構造が多いです。
用語を管理したりする場合はコチラのほうが有利ですが、生活のナレッジはこのようにはなりません。
料理や趣味のフォルダがあり、その中にいろんなレシピや趣味の記録を書いていくことでしょう。
そんな階層構造になっているのがWiki.jsです。
そしてその階層構造はURLで示されます。
あるウィキソフトウェアはURLに「 /page/?id=12345
」のようにつけます。
これでは何を示しているのかがわかりません。
Wiki.jsでは「 /cooking/pot-au-feu
」のように示すことができます。
セルフホストdrawio連携
基本的にウィキソフトウェアはテキストのみで表現しますが、図で表現したい場合があったときに便利なのがこの機能です。
drawioはオフィススイートの図形機能のように図形を並べることができるツールで、フローチャートやシステムのシーケンス図、ネットワークの構成図を描くにも便利なツールです。
drawioのエディタもセルフホストすることができます。別途セルフホストしたこのエディタをWiki.jsに埋め込むことができ、ウィキの画面から編集することができます。
初心者にも扱いやすいWYSIWYGエディタとITエンジニアに優しいMarkdownエディタ
継続的にナレッジを執筆するうえでその編集画面は重要です。
オフィススイートのワープロで使っている、編集画面で見た目通りのデザインをするエディタは「WYSIWYGエディタ」と呼ばれます。
対してITエンジニアでもプログラミングをする人が好む方法として、構文通りにただのテキストとして入力することがあります。
この構文のひとつがMarkdownです。
Wiki.jsは構文通りに入力するエディタだけではなく、非ITエンジニアにもやさしいWYSIWYGエディタで執筆することができます。
また、編集画面はスマートフォンからも開けますので、電車などの移動中にまとめることができます。
alternative
代替ツール、alternativeなどと呼ばれますが、どのセルフホストツールにも大抵は代替ツールがあります。
Wiki.jsはとても作りこまれていますが、その反面比較的”重たいツール”でもあります。
よりシンプルで軽量なツールとして「Linbreux/wikmd: A file based wiki that uses markdown」を紹介します。
wikmdは細やかなアクセス権限管理やWYSIWYGエディタはありませんが、ローカルネットワークで管理するには十分なツールです。
Markdownのほかにdrawioやmermaid、plantuml、Tex形式の数式も使えるため、細かな表現が可能です。
またファイルベースのウィキツールのため、バックアップやサルベージが比較的容易であるというのも挙げられます。
FreshRSS/FreshRSS: A free, self-hostable news aggregator…
FreshRSSはその名の通りRSSを購読するためのツールです。WebUIを備え、またXPathを用いたスクレイピングにも対応しています。
このスクレイピング機能により、RSSのないHTMLでお知らせを掲載しているサイトにも対応することができます。
沢山のソフトウェアを管理するとなると、その脆弱性情報やリリース情報を手に入れることが必要です。
GitHubでリリースされていれば「https://github.com/FreshRSS/FreshRSS/releases.atom
」のようにリリースページに「.atom」をつけるだけでリリース情報を取得することができます。
jellyfin/jellyfin: The Free Software Media System – Server Backend & API
音楽配信サービスが出る前はCDを買って、買ったCDをファイルにして、携帯音楽プレーヤーに持ち歩いていました。
今はいろいろな配信サービスがあるので、こういった手間も少なくなりました。
しかし、レコードに付属するハイレゾ音源やCDから取り込んだ配信されていない曲などもあると思います。
そんなときに便利なセルフホストツールがJellyfinです。
Jellyfinは音楽のほか、ムービーやテレビ番組といったものも対応していますので、押入れの奥にしまった昔のDVDなどを入れておくのもいいでしょう。
Jellyfinはモバイルのアプリもあるので、適切に家のサーバと接続できるネットワークの設定をすれば、出先からも聴くことができます。
PowerDNS-Admin/PowerDNS-Admin: A PowerDNS web interface with advanced features
いろいろなサーバをホストしてくると 192.0.2.1
のようなIPアドレスではなく、myselfhost.example.com
のようなドメインが欲しくなってきます。
そうだ! DNSサーバを立てよう!となってきます。
// なってくることにしましょう 🙂
DNSサーバもいろいろなものがあります。例えば、ISC BIND、dnsmasq、corednsなどいろいろあります。
ここでは強力なWebUI持つPowerdns-adminを紹介します。
Powerdns-adminはPowerdnsというDNSサーバをWebから設定できるツールです。
ドメインを持っていない方は、「home.arpa.
」(RFC8375 – Special-Use Domain ‘home.arpa.’)というドメインがあるので、home.arpa.
ドメインで試してみるのも良いでしょう。
NginxProxyManager/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface
昨年のエンジニアブログでも紹介したツールです。
Nginx Proxy Managerはウェブサーバやリバースプロキシツールとして有名なNginX、証明書として有名なLet’s Encryptの設定を簡単にできるACME(自動証明書管理環境、DNS-01チャレンジ)を持っています。
このツールを使うことにより、様々なセルフホストツールのHTTPS化ができます。
外部から参照できるドメインが必要になりますのでhome.arpaでは扱うことができません。
(技術的にはCAをセルフホストすればよい話になりますが、特殊な利用でない限りはまずオススメできないでしょう)
dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
さて、たくさんセルフホストしてくるとたくさんの認証情報を管理しないといけません。
外部サイトの認証情報をブラウザに保存している人も多いでしょう。
そのパスワード管理、セルフホストできます。
Vaultwardenは、Bitwarden Inc.が開発するパスワードマネージャであるBitwardenと互換性があるセルフホストソフトウェアです。
Vaultwardenは、パスワード管理のほか、2段階認証などの情報も格納することができるツールです。
go-vikunja/vikunja: Mirror of vikunja from https://code.vikunja.io/api
やりたいことが増えてくると、そのタスク管理が必要です。
Vikunjaは高機能なWebUIを備えたタスク管理ツールです。
Vikunjaは各プロジェクト毎に、リスト、ガントチャート、テーブル、カンバンの4つの形式で表現することができ、各プロジェクトへのアクセス権限は個人単位、チーム単位でできるようになっています。
タスクのスケジュールにあわせてカンバン形式で管理することも、ガントチャートで線表を作成することも可能です。
PrivateBin/docker-nginx-fpm-alpine: PrivateBin docker image based on Nginx, php-fpm & Alpine Linux stack
長い行のテキストファイルを送りたいとき、Pastebinというツールがあります。
例えばGithub Gistはバージョン管理機能を備えた一種のPastebinです。
PrivatebinはこのPastebinツールをセルフホストできる選択肢のひとつです。
sissbruecker/linkding: Self-hosted bookmark manager that is designed be to be minimal, fast, and easy to set up using Docker.
沢山のウェブサイトをブラウジング、ネットサーフィンしていると、ブックマークも多くなってきます。
セルフホストのブックマークツールは、「wallabag/wallabag」をはじめ、いろいろなツールがあります。
linkdingは検索エンジンのようなシンプルなUIを持ったブックマークツールです。
alternative
無数あるブックマークツールですが、社内で hoarder-app/hoarder を紹介したところ、社内ユーザにollama(ローカルLLM)を用いたタグ分類などの機能などに注目されました。
私は中々肌に合わなかったのですが、このように、様々なブックマークツールがあるので他のツールを探索するのも良いと思います。
mailcow/mailcow-dockerized: mailcow: dockerized – 🐮 + 🐋 = 💕
インターネットで長く使われるツールのひとつが、メールシステムです。
mailcowは、PostfixやDovecotなどの既存のメールソフトウェアを組み合わせ、SOGoというWebUIを持ったメール・カレンダーシステムです。
メールシステムを構築する場合、docker-mailserver/docker-mailserver や、RainLoop WebmailというWebUIという選択肢もあります。
しかし、カレンダーシステムを使う場合、私の知る限り、NextCloud CalendarかSOGoが選択肢になってきます。
mailcowの特徴として、メールシステムを管理するWebUIを備えています。必要なDNS設定についても教えてくれます。
ArchiveBox | 🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more…
ArchiveBoxは、いわゆる魚拓ツールです。WWWはサーバ上からリソースが消えた場合にもうそのコンテンツは見ることはできません。
インターネット黎明期からあるウェブサイトが閉鎖したり、ウェブサイトの寿命が短いものは、後年でも見たくなるかもしれません。
そんな際にオススメのツールです。
louislam/uptime-kuma: A fancy self-hosted monitoring tool
様々なツールをデプロイしていると、どのツールがちゃんと動いているか、使いたいときに動かなくてトラブルシューティングが必要になったりと、困ってしまいます。
監視ツールといえばZabbixやPrometheusなどが挙げられますが、単なるセルフホストでそこまで要らないよ!と思われるかもしれません。
uptime-kumaはそういう時に便利なセルフホストツールです。
uptime-kumaからHTTPなどのクエリをリクエストして死活監視し、サービスの生存が確認できないときに通知することができます。
通知手段はメールはもちろんのこと、各種チャットツールにも対応しています。
もちろん監視ツールの監視というのも必要なので複数ホストしてお互いを監視する、なんてこともいいですよね。
alternative
同様のツールで、Statping-ngというツールもあります。こちらも似たような機能ですが、細かい設定があるなどの違いがあります。
TimeTagger – Tag your time, get the insight
TimerTaggerは、タイムトラッキングのためのWebアプリです。
タイムトラッキングのアプリも色々なデザインのものがありますが、TimeTaggerはとてもシンプルです。
1日のタイムラインの上に、スケジュールを載せるように、時間をタグ付けして載せていきます。
その結果はレポートという形でCSVファイルとして出力できるので、自分が普段どんな行動をしているかのデータ分析の材料になります。
携帯からも操作ができるので、出先でもタイムトラッキングできます。
immich-app/immich: High performance self-hosted photo and video management solution.
immichは写真管理のツールです。有名な写真管理ツールは、顔を分類し、誰が写った写真かを出してくれます。
immichでもそれができ、日付やアルバムで分類することができます。
alternative
エンドツーエンド暗号化できる「ente-io/ente: FOSS, End to End Encrypted alternative to Google Photos and Apple Photos」というツールもあります。
Freika/dawarich: Self-hosted alternative to Google Location History (Google Maps Timeline)
dawarichは位置情報履歴のツールです。
あちこち旅行にいったときのGPSの記録をセルフホストで可視化することができます。
Google Maps TimelineからインポートすることもできるのでGoogleで記録した過去の履歴をdawarichで見ることもできます。
おわりに
さてセルフホスト15選ということでご紹介しました。
一部でその代替ツールを紹介したように、これは私が気に入っているごく一部のツールで、下記に示すリンクの先のように本当に様々なセルフホストのツールがあります。
- awesome-selfhosted/awesome-selfhosted: A list of Free Software network services and web applications which can be hosted on your own servers
- awesome-foss/awesome-sysadmin: A curated list of amazingly awesome open-source sysadmin resources.
- veggiemonk/awesome-docker: :whale: A curated list of Docker resources and projects
皆さんも一緒にセルフホストの旅に出てはいかがでしょうか
Xのフォロー&条件付きツイートで、「IoT米」と「バリーくんシール」のセットを抽選でプレゼント!
応募期間は2024/12/02~2024/12/31まで。詳細はこちらをご覧ください。
今すぐポストするならこちら→ フォローもお忘れなく!