クラウドから撤退して自前サーバに自分でwebアプリを建てるおはなし

# はじめに

クラウド全盛の昨今ですが、あえてクラウド化に逆らうセルフホスティングの話をします。クラウドに任せるのではなく、自分のサーバの中に自分で使うwebサービスを建てる、そういうおはなしです。

[Self-hosting (web services) - Wikipedia](https://en.wikipedia.org/wiki/Self-hosting_(web_services))

今回はそんなself-hostingにおすすめのwebアプリケーションをドドーンと紹介します。

計算機の歴史は常に振り子でした。
集中処理と分散処理、逐次処理と並列処理、同期処理と非同期処理、RISCとCISC...
これらは決して排他的に対立するということもなく適材適所にするものですが、どちらが主流かというのは時代のトレンドとともに振り子のように揺れ動いてきました。
「クラウドとオンプレ」「所有と非所有」というのもまたその一つですね。

# 利点と欠点

まず利点はなんといっても、自分のデータを自分の手元においておけることです。
データが手元にあり通信経路が暗号化されていれば、クラウド事業者が技術的・契約的・法的問題でデータを消したり見ることはありません。
すべてのデータは手元にあり、（*適切に設定して運用*していてソフトウェアに*穴がなければ*）他人が見ることも消すこともありません。

また、事業者の気ままな変更に付き合う必要がないということも挙げられます。
たとえばEvernoteは度々、大幅なサービスの変更を行っいています。
これに追従できていればいいのですが、「余計な改定しやがっておかげで使えないぜ！」と憤慨しているユーザもたくさんいます。
Self-hostingであれば、ある時点で動くコードを永遠に死守することができます。とくにコンテナ環境であれば古いライブラリを封入しておくことも簡単です（*脆弱性対策は自分で*する必要はあります）。
「〇〇が使えないサービスになったから次は△△に引っ越し」などといっても、△△が第２の〇〇にならない保証はどこにもありません。
EvernoteからNotionに引っ越したところで、Notionが未来永劫安住の地となる保証はなく、サービス終了や値上げの心配は相変わらず残ります。
これを自前化することにより、Evernote朝からNotion朝への王朝交代ではなく、情報の主権を自らに取り戻すことができます。

2022年、ロシアからさまざまなグローバル企業が撤退しました。
もし時の政権が変なことをして世界中から総スカンを食らった場合、自分のデータであってもアクセスできなくなるというリスクがあることが明らかとなってしまいました。
そのような政治的事態は起きないにこしたことはありませんが、これもクラウド依存のリスクといえるでしょう。

独自の拡張や変更、サービス間の連携を自分で組めるといった点も利点です。
外部の事業者のサービスの場合は彼らが公開しているAPIしか使えないわけですが、自前で動かしているのであれば「APIでは届かないところを背後のsqlを直接操作して解決」「データのファイルを直接書き換える」「rate limitを気にせず大量操作」「自分で新機能を追加」といった技も可能になります。

欠点はその**適切に設定して運用**し、**脆弱性対策を自分で**して、かつ**穴がない**ことを確認する責任は常に自分にあるということです。
「ふくいナビ」事件を笑っていることはできません。そのような事件が起きたら自分で自分のデータのバックアップを探してきて自分で復旧しないといけないのです。
自由と自立にはそれなりの責任と手間、時には苦労が伴います...
フリーソフトにはないプロプラ製品の魅力とは、その責任や手間をお金で買うことができる、ということですね。

もちろん、サーバを買うお金、RAIDを組んでそのHDDのお世話をするお金、UPSをつけてピーピー鳴き始めたら電池を交換するお金、電気代といったものもかかります。

<table>
<tbody>
<tr>
<td></td>
<td><b>利点</b></td>
<td><b>欠点</b></td>
</tr>
<tr>
<td><b>クラウド</b></td>
<td>
<ul>
<li>メンテナンス不要</li>
<li>可用性が高い</li>
<li>選択肢が多い</li>
<li>出先からでも使える</li>
<li>構築・運用知識がなくても使える</li>
<li>いつの間にか新機能が追加されて便利になることがある</li>
<li>(契約次第だが)事業者のサポートを受けることができる</li>
<li>(実際はどうだか知らないが)不正アクセス時に補償をうけることができる</li>
</ul>
</td>
<td>
<ul>
<li>定期的な課金</li>
<li>プライバシーや権利の懸念</li>
<li>技術的・経営的・政治的理由による突如の値上げ・改悪・停止リスク</li>
<li>ネットワークに接続していないと使えない</li>
<li>「デジタル終活」が必要</li>
<li>使用できるAPIが制限されている（欲しい機能がない、rate limitなど）</li>
<li>不正アクセスの懸念</li>
</ul>
</td>
</tr>
<tr>
<td><b>自前</b></td>
<td>
<ul>
<li>課金不要</li>
<li>情報は常に自分で管理可能</li>
<li>スタンドアロンでも利用可能</li>
<li>外部の問題に巻き込まれない</li>
<li>コードをいくらでも変更できる。必要なら背後のデータを直接書き換えることもできる</li>
<li>自分が死んだらそのうち勝手に動かなくなる</li>
</ul>
</td>
<td>
<ul>
<li>初期投資が必要</li>
<li>電気代・減価償却がかかる</li>
<li>選択肢が限られる</li>
<li>構築、災害や障害対策、日々の運用、自分でコードを書いたり直したりcontribする知識と時間が必要</li>
<li>作者または自分が新機能を追加しない限り、新機能は追加されない</li>
<li>出先から使えるようにするにはVPNが必要</li>
<li>管理者没後に遺族が遺産にアクセスするには遺族にも計算機の知識が必要</li>
<li>不正アクセスの懸念</li>
</ul>
</td>
</tr>
</tbody>
</table>

# 構成

## 基本的構成

わたしのサイトでは、基本的に以下のような形でつくってあります。

* httpsを解釈するreverse proxy (VPS内)
* httpで動くアプリケーション (自宅サーバdocker内)
* 両者はsite-to-siteなVPNでつながる

![基本構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/b5b7413d-6398-4e78-1d92-30ef85728ec2.png)

露出する頭だけVPSにおいておき、背後のアプリケーションは自宅においてVPNでつなげるというのが基本的な構成です。
そのこころは以下です。

- 自分のノートパソコンやスマホは常時VPNでVPSに接続
- リバースプロキシでSSLクライアント証明書を要求・検証することで、赤の他人のアクセスを排除
- VPSでの処理を最小限にする（なるべく安いVPSを使う）
- なるべく自宅サーバ側で処理をする
- 自宅にグローバルIPをつけたくない

## sslh

nginxやapacheの前段にsslhをつけるとsshとopenvpn（のtcp接続）も443に同居させることができます。
「tcpは80, 443以外禁止」といった公衆WiFiでも幸せになれます。

![sslh利用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/5bcc6d08-d74c-03a4-5384-fbeaaedacaad.png)

sslhはSNIの解釈も可能なので、SNIの処理もsslhにやらせるとnginxやapacheは不要になります。

![sslhのみ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/454cd8e5-33f8-5bb9-7a37-61a245d76b5b.png)

[SSLHでHTTPS, SSH, OpenVPNを443番ポートに共存させる - Qiita](https://qiita.com/kniwase/items/9fb294c8d7eadee4aebf)
[1つのアドレス・ポートを SSH (over SSL) と HTTPS で使う - Qiita](https://qiita.com/albatross/items/36bfc3dfa970f355bc82)

sslhの代わりにstunnel, haproxyを使うこともできますね。
[Haproxyを用いて443ポートで複数サービスをホストする - Qiita](https://qiita.com/Shachihoko/items/cfbceb212f6ff8cb7b8d)

このnginxやapacheを用いない構成の場合、sslh, stunnel, haproxyはバーチャルサーキットを暗号化するレイヤのみ扱うので、websocketだろうが未知のHTTP変種・拡張だろうが関与せず何でも通るという利点があります(HTTP/3のudpは除く)。
欠点はキャッシュもなく、ログ類も乏しく、セキュリティ上の応答ヘッダー追加、本当の接続元のIPアドレスを要求に追加するといった加工も不可能ということでしょうか。
今回はこの欠点を考慮してこの方式は採用しませんでした。

## それ以外のリバースプロキシ

さらに以下のようなものをつかうと、別のL4〜L6あたりのレイヤにそのまま対応することもできますね（ESNIはECHに変わるみたいですが...HTTP/3ってSCTPの夢を達成できるのでしょうかね）。
[devopsext/esni-rev-proxy: Golang reverse proxy with ESNI support on top of TLS 1.3](https://github.com/devopsext/esni-rev-proxy "devopsext/esni-rev-proxy: Golang reverse proxy with ESNI support on top of TLS 1.3")
[WebサーバーのHTTP/3対応をNginxのリバースプロキシでするためのDockerイメージが出来ました - Qiita](https://qiita.com/nwtgck/items/ff633df298dfd9dc0887 "WebサーバーのHTTP/3対応をNginxのリバースプロキシでするためのDockerイメージが出来ました - Qiita")
[QUIC及びHTTP/3対応のNGINXサーバーを構築 - Qiita](https://qiita.com/girlfellfromsky/items/a0a797b76b5aa35cca68 "QUIC及びHTTP/3対応のNGINXサーバーを構築 - Qiita")

## iptablesでUDPも振り分ける

sslhを使うことで、443/tcpを2.4GHzみたいに便利なゴミ捨て場状態にすることができました。
そのゴミ捨て場精神をtcpからudpにも拡大し、53/udpや443/udpに対してdemulitiplexをすることができます。

fortiやpaloのようなガチDPIを導入しなくても`iptables -m string`で簡易DPI(deep?)できます。
例えば、以下のような方法で53/udpにやってきたdnsとwireguardを分離することができます。[^1]

```sh:
iptables -t nat -A PREROUTING \
  -p udp \
  -m udp --dport 53 \
  -m string --algo kmp --from 28 --to 31 --hex-string '|01000000|' \
  -j DNAT --to-destination 127.0.0.1:51820
```

[Protocol &amp; Cryptography - WireGuard](https://www.wireguard.com/protocol/)

[^1]: DNSクエリーの頭はトランザクションIDですので、稀にマッチします。「稀」といっても誕生日のパラドクスが示す通り直感的に感じるより多いのですが、自分のドメイン名への多少のクエリーを捨てても自分は困らない（他人は困るかもしれない）ことでしょう。

同じことを443/udpにすれば、sslhで443/tcpにopenvpn-tcpが同居していたのと同じことを、wireguardで行うことができます。
「udpは53, 443以外禁止」といった公衆WiFiでも幸せになれます。

![iptables udp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/c109d514-fa26-6086-7483-3188c8cf300a.png)

実際はudpの規制をしているような公衆WiFiでは大抵443/udpも通らないので53/udpを使うことになります。

今後、ssh over QUICやNFS over QUICみたいなのが(公式に)登場して、「443/udpに同居する様々なQUICをリバースプロキシする」といった手法も登場してくることでしょう。
現在でもいろいろできそうです（うちはmosh over IPsec）。

[Global options (Caddyfile) — Caddy Documentation](https://caddyserver.com/docs/caddyfile/options#protocol)
[新幹線でもQUICで快適にSSHする #SSH - Qiita](https://qiita.com/tksst/items/68e8f802822913025286)

OSIレイヤ分離的に気持ち悪い、レイヤバイオレーションだ、せっかく多数の`/etc/protocols`や`/etc/services`が作られたのに全部443/udpに退化している、といえばそうなのですが、SSL-VPNのような製品が多数出回っているのに今更それを言ってもね、使えるプロトコルが規制されているのだから仕方ないじゃん、使えるものは便利に使おうぜ、という感じかもしれません。[^2]

[^2]: 実用に耐えるかどうかは別として、udp-over-icmpやssh-over-dnsみたいなものは大昔からたくさんありますね。「使えるものは便利に使わせてもらう」はハッカー文化の基本だと私は思っています。

## 内部アクセス

自宅内からのアクセスのために自宅内にもhttpdを建てておくと、自宅内からのアクセス時に`自宅-VPS-自宅`の往復が発生することもなくなります。
自宅内のDNSサーバ(dnsmasqやdnscrypt-proxy)にはちゃんと自宅内のIPアドレスを返答するようにしてもらいます。

![内部アクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/35496d5a-df11-4244-b4b0-c7d7faae3dd4.png)


今時のブラウザは「出先からはhttps、自宅にいるときはhttp」といった構成は好みませんので(HSTSしましょう)、自宅にいるときでもssl接続できるように証明書の共有をうまく作る必要があります。
certbotが動いた後にはscpするようにしておきましょう。

蛇足になりますが、「VPN接続なんか面倒」と考えるのではなく、「VPN接続することでメリットがたくさんある、VPNはオンデマンドで自動で繋がるので手間もかからない」という状態にしておきましょう。[^3]

[^3]: macosでしたら、hammerspoonからネットワーク変更やスリープを検出し、IPsecやwgを立ち上げるようにします。sshではなくmoshとtmux, gnu screenを常用するようにしましょう。そうすると、自宅でノートパソコンの蓋を閉じて出先で蓋をあければリモートでの作業が即座に継続できますし、いつ蓋を閉じても問題ない、という便利な環境になります。認証にしても、keycloakでFIDOすればセキュリティを損なうことなくパスワード不要になります。確かにその環境を構築するための手間はかかりますが、そんなものはChatGPTにでも手伝って貰えばいいわけで、その後の快適環境から得られるメリットのほうがはるかに大きくなります。
「バリアフリーのためには不格好でも仕方ない」という建築家や「ユニバーサルデザインのためにはダサくても仕方ない」というデザイナーが二流であるのと同様、「セキュリティのためには不便でも仕方ない」などというエンジニアは二流です。両立させるのがプロの仕業というものです。

## その他の方式

今回は443/tcpに山のように同居している連中を「ほどく」作業をVPSにやらせていますが、以下のように443をそのまま自宅まで引き回すという解決策もあります。
[VPSをゲートウェイにして自宅サーバーで443番ポートを公開しhttpsを利用する - Qiita](https://qiita.com/kniwase/items/519c4ea6c96b665b161e)

このほうが構成はシンプルになります。
欠点としては、VPSは生きているのに自宅サーバ（あるはVPN）が落ちたときに503や502のエラーすら出てこなくなり、「すみません現在復旧作業中です」という案内をすぐ掲示することが困難ということが挙げられます。
私の場合、NextCloudで他人とファイルをシェアしているので案内が出せないのは困るため、この構成はとりませんでした。

## ホスト名(Viretual Host, SNI)増えすぎ問題

Webアプリの数だけホスト名をつけることになりますが、数個程度ならともかく数が増えてくるとnginxの設定ファイルやDNSを手で管理するのが面倒になってきます。
ということで、yamlにホスト名ごとにupstream, VPNのみなのかグローバルに公開するのか、ヘッダーを追加したり削除したりするのか、といったものを列挙しておくと設定ファイルを生成してreloadしてくれるジェネレータを書いておきましょう。

## 「VPSもクラウドだろ、撤退できてないじゃないか」問題

SaaSを使わずにIaaSだけを使う、という意味でこうしたわけですが「VPSも使いたくない」といった場合は素直に自宅にグローバル固定IPアドレスをつけるか、torを使って`.onion`ドメインで公開という手になりますね。
[自宅のラズパイを Tor Onion Service にして外から SSH 接続する - Qiita](https://qiita.com/legokichi/items/d3fb4503c99b80ada25c)

あるいはVPSやEC2ではなくawsマネージドサービスだけ使うことにして、VPNとLBだけ使うといった構成もありでしょう。
[オンプレサーバーをターゲットにしたALBリバースプロキシ環境を構築してみる | DevelopersIO](https://dev.classmethod.jp/articles/on-premise-reverse-proxy-using-alb/)

CloudflareのZero Trust（やその類似サービス）を使うという手もありますね。
今回ここで説明しているVPSとVPNの面倒からは解放される一方、今度はCloudflareの「改悪」「値上げ」「サービス終了」に怯えることになりますが...
[「Cloudflare Zero Trust」の検索結果 - Qiita](https://qiita.com/search?q=Cloudflare+Zero+Trust)

## セキュリティの確認

この手の作業をしていると、つい「正しいIDとPasswordを入れた時にうまくいく」ことばかり気にしていて、「正しくないIDやPasswordでは入れない」ことを確認し忘れるといったことがあります。
保護したつもりだったが全く保護してなかった、というミスもありえます。

そこで、「正しく受理している」のみならず「正しく拒否している」ことを確認するためのシェルスクリプトを作っておき、作業後には必ず実行するとともに、cronで毎日実行して失敗したらメールさせるようにしましょう。
curlに`-w '%{http_code}\n'`をつけると、200とか401とか帰ってきます。
`--resolve hoge.example.com:80:192.168.1.1`といった指定をすると、自宅内にいても強制的にvps側のアドレスに接続に行かせるとか、SNIや`Host:`に好きな値をいれることもできます。

また余談ですが、sshや他のプロトコルに対しても「間違った方法ではログインできないようになっている」ことを確認する方法を用意して仕込んでおくと安心です。
SMTPの場合はswaksが便利です。
[Swaks - Swiss Army Knife for SMTP](http://jetmore.org/john/code/swaks/)
[Swaksをメール送信のテストで使う - Qiita](https://qiita.com/viva1000/items/29d6dccd19904461c1aa)

# デスクトップ用アプリもほしい!

頑張ってElectronを書かなくても、以下のようなものを使えばこれらwebサービスはだいたいデスクトップアプリになります（オンラインでしか使えませんが）。

[GitHub - jiahaog/nativefier: Make any web page a desktop application](https://github.com/jiahaog/nativefier)
[Unite for macOS](https://www.bzgapps.com/unite)
[Fluid – Turn any webpage into a real Mac App](https://fluidapp.com/)
[lotato - lost in a sea of browser tabs?](https://www.flotato.com/)

# ユーザ認証

以下で紹介しているwebアプリケーションの中にはユーザ認証機能を全くもっていないものもあります。
自分1人で使うだけならhttpsクライアント証明書[^4]を必須にしたり、VPN接続している端末からのみ接続可能にしておけばそれで十分ですが、他人にもログインさせるとなるとそれでは少し困ります。

[^4]: httpsで使わなくても、オレオレCAは一つあると便利です。IPsecや802.1XのEAP-TLS、dockerの2376/tcpなど簡単にできます。イマドキならOpenSSLと格闘しなくてもeasy-rsaやeasy-caといったものでお手軽にできます。（FreeRADIUSが死んだ時にアクセスできなくならないよう、非常用の物理バックドア有線ポートも作っておきましょう）

そのような場合もauth0みたいな外部サービスを頼るのではなく、keycloakを自分でたてて、webアプリケーションにoauth2を話させるかoauth2-proxyやkeycloak gatekeeperを入れることで幸せになれるかもしれません。
シングルユーザしか想定していないアプリの場合はどのユーザも同じ画面が表示されるわけですが、少なくとも見知らぬ赤の他人が接続することはなくなります。

[Qiitaタグ検索: Keycloak](https://qiita.com/tags/keycloak)

[最小構成で OAuth2 Proxy を使ったHTTPなページでユーザー名を表示する - Qiita](https://qiita.com/bashaway/items/70d86a11830ae02b8786)

問題はアプリ側が独自のログイン画面を持っているがoauth2に対応していない場合です。
ssoは諦めるか、oauth2-proxyが生成する`X-Forwarded-Email`や`X-Forwarded-User`（または`X-Forwarded-Preferred-Username`）ヘッダーを信用するように改造する必要があります。

![auth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/53a0e9d8-5609-df07-cb60-869945cf5740.png)

この図ではアプリケーションサーバへの通信は必ずoauth2proxyを経由するかの如く表記していますが、実際はauth_requestを使って必要な通信だけoauth2proxyに飛ばす形にもできます。

[Nginx + OAuth2 Proxy で静的 Web サイトに認証機能を追加してみる](https://zenn.dev/casa_snona/articles/nginx-with-oauth2-proxy)

長くなりましたが、ここまで前座でした。

# webアプリカタログの歌 「GNUには1024人」

マダム、これがwebアプリのカタログです！
以下、GPLなのかBSDなのか等は別として、すべてオープンソースです。基本的には「有償・プロプラから撤退」という話の記事なので、redmineとかmediawikiとかは掲載していませんが一部そういうものも載せてあります。

特にここでリンクしていませんが、すべてDockerfileやcomposeがgithubにあります。
localstackを使わずに自分でawsもどきを立てよう、というほど大変ではありませんのでご安心を!

## NextCloud

代替対象: Dropbox, Google Drive, One Drive

[Nextcloud](https://nextcloud.com/)

![nextcloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/dd3e027e-bbc1-cdcb-a995-8d2477762957.png)

ファイルをどんどんおいて、共有したり共有しなかったり、プラグインで遊んだりと様々なことができます。
おそらく「self-hosting」といったときに一番有名なソフトでしょう。

PHPで動いているせいかちょっと重いこともあるのですが、安定稼働するとかなり便利です。

OnlyOfficeを追加すると、Google DocumentsやOffice 365の代わりにもなります。
どこまで使えるかどうかは人によるとはおもいますが、たいして複雑なオフィス文書の機能を使っていな私にとってはこれで十分です。

[Qiitaタグ検索: nextcloud](https://qiita.com/tags/nextcloud)

## PhotoPrism

代替対象: Google Photos, iCloud Photos, Amazon Photos

[Browse Your Life in Pictures – PhotoPrism](https://photoprism.app/ "Browse Your Life in Pictures – PhotoPrism")

![photoprism.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/74944e3b-fa03-30bf-37ab-2b3d09f0c51e.jpeg)

画像の山をtensorflowで食べて写っているものを認識して視覚化してくれます。

DAVも話せるので、DAVに写真をバックアップするようなアプリ（[PhotoSync](https://www.photosync-app.com/home)など）をスマホにいれれば同期してくれます。
そうではなくても、NextCloudの中身を直接（DAV経由などではなく）ファイルシステムからReadOnlyで読ませればスライドショー用UIになります。

似たものにPhotonixというのがありますが、まだあまりこなれていないのかPythonの例外がそのまま画面に出たりしました。

[Photonix Photo Manager](https://photonix.org/ "Photonix Photo Manager")

## immich

代替対象: Google Photos, iCloud Photos, Amazon Photos

[GitHub - immich-app/immich: Self-hosted photo and video backup solution directly from your mobile phone.](https://github.com/immich-app/immich)

![immich.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/c3743a0b-efb7-a498-7bc0-b3668a6aaf4a.jpeg)


上記PhotoPrismと似たものですが、スマホとの連携を重視しているようです。
専用クライアントアプリがスマホ用にあり、いい感じにバックアップしてくれます。

必要なコンテナ数はPhotoPrismより多ですが、負荷としては大差ないように感じます。

[写真や動画のためのオープンソースのバックアップソリューション・「Immich」 | かちびと.net](http://kachibito.net/useful-resource/immich)

## gitea

代替対象: github

[Gitea](https://gitea.io/ja-jp/)

![gitea.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/8610cc20-f473-4b82-e36c-4f7d244151a4.png)

「githubもどき」がいろいろあります。
gitlabは重いですが、giteaは軽くていいかんじです。

恥ずかしいコードも秘密のコードもgithubに置かなくてOK!年収を診断することは出来ませんが流出の心配も減るでしょう、不正ログインされなければ。

[「gitea」の検索結果 - Qiita](https://qiita.com/search?q=gitea)

ghコマンド相当品のteaコマンドがあり、CLIからissueを立てたりごにょごにょできます。
git-flow-hookを一緒に使うと便利です。
[gitea/tea: A command line tool to interact with Gitea servers - tea - Gitea: Git with a cup of tea](https://gitea.com/gitea/tea)
[小規模開発のgit-flowの導入を楽にするブランチルールと拡張スクリプト配布 - Qiita](https://qiita.com/eaglesakura/items/4fa17bf1f2b6683e6520)

giteaのfork、forĝejoが登場したとのことです。
ownCloudに対するNextCloudみたいな経緯のようみにえます。
[Forgejo – Beyond coding. We forge.](https://forgejo.org/)
[ユリアーモ辞書（エスペラント辞書）でforĝejo](http://mikage.to/juliamo/#forg%5Eejo)

github actionsの相当機能があります。dependabotは使えませんが、renovateという似たようなものが使えます。

[Gitea Actionsが来てるやんけ #Docker - Qiita](https://qiita.com/Yuumillar/items/911f4e19f4513a063400)
[renovatebot/renovate: Universal dependency update tool that fits into your workflows.](https://github.com/renovatebot/renovate)

## wallabag

代替対象: Pocket

[GitHub - wallabag/wallabag: wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.](https://github.com/wallabag/wallabag)

![wallabag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/ab3f1c5e-a68a-1729-3e5d-d8ba37f5e928.png)

以下に細かいお話があるのでどうぞ。

[「後で読む」サービスのwallabagを自分で建てよう - Qiita](https://qiita.com/curtain6935/items/ef43d3f6a5ad0d918fb7)

## freshrss

代替対象: Feedly

[FreshRSS, a free, self-hostable aggregator…](https://freshrss.org/)

![rss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/70c2df77-178a-318c-350a-c38a1d760c2d.png)

RSSリーダです。

ちなみにうちでは、ファームウェア更新告知や声優さん等のwebのhtmlをとってきて、xpathや正規表現でゴミを捨ててからgitにdiffを蓄積し、差分とスクショをfreshrssに出す自前プログラムを動かしています。
「はてなアンテナ」の代替ですね。

## ArchiveBox

代替対象: archive.org, 魚拓サービス, Evernote WebClipper

[GitHub - ArchiveBox/ArchiveBox: 🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...](https://github.com/ArchiveBox/ArchiveBox)

![archivebox.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/bdfbf7ee-bd1d-4450-6b7e-f972ef858c0e.png)

自分でwebアーカイブを作るというものです。
上記のWallabagは登録したものをRSSで出力できますので、以下のような方法で連携することもできます。

[ArchiveBox + Pocket + Fessで作る、いつでもどこでもマイ魚拓（全文検索付き） - Qiita](https://qiita.com/a0x41/items/89301e4cbe2d9946a953)

残念ながらArchiveBoxの出力としてRSSやgitを使うことはできないようです。
APIがありますので色々できます。

## Leanote

代替対象: Evernote, Notion, Google Note

[Leanote - open source alternative to Evernote · GitHub](https://github.com/leanote)

![leanote.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/d330a47e-6d19-98a1-7a4a-81e280470424.png)

日本ではあまり知られていないソフトですが、中国の人が開発しているようです。
Evernoteの代わりになります。
デスクトップアプリやiOSアプリもあります。
かなりよく出来ていて、お陰様で最近の私はEvernoteへの依存度がかなりヘリました。

markdownも使えますし、ビジュアルなエディッタも使えます。
デスクトップアプリからはenmlのインポートができます。
REST APIもあります。

標準ですといわゆる中華フォントなのですが、ソースのある場所で、

``` sh:
grep -l Hiragino -r . | xargs perl -i.bak -pe 's/Hiragino Sans GB/Hiragino Sans/g;'
```
という呪文を唱えるとあら不思議、日本語フォントになります（一部追加修正が必要）。
githubも中国語が多いですが、日本語話者でもだいたい何書いてあるかくらいはわかるし英語での質問には英語で答えてくれているのでそんなに困りません。
排外主義者・国粋主義者・右翼にはおすすめできないかもしれませんが、普通の人には普通におすすめできるソフトですね。

emacs用modeもあります。
[aborn/leanote-emacs: A minor mode writing markdown note using leanote platform in emacs.](https://github.com/aborn/leanote-emacs "aborn/leanote-emacs: A minor mode writing markdown note using leanote platform in emacs.")

## Joplin

代替対象: Evernote, Notion, Google Note

[laurent22/joplin: Joplin - an open source note taking and to-do application with synchronisation capabilities for Windows, macOS, Linux, Android and iOS.](https://github.com/laurent22/joplin)

![joplin-vieweb](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/e0701aae-68c6-6284-53a9-d352703650c4.jpeg)
（この画像はJoplin-viewebです）

上記Leanoteと同じようなノートアプリです。
「webアプリを建てるおはなし」と書いておいて恐縮ですが、このJoplinはデスクトップアプリが基本となりそのままではwebブラウザからノートの読み書き編集はできません（外部共有ノートの匿名閲覧用には使えます）。

同期サーバがhttp上で動き、Joplinアプリに対して専用の同期APIを提供します。
そのため、自分でREST APIを叩いてノートを読み書き編集するという作業はこのままではできないのですが、Joplinアプリに対して（同期APIとは別の）[Joplin Data API](https://joplinapp.org/api/references/rest_api/) (標準で41184/tcp)を使ってノートの操作ができます。
そのDATA APIを使うWebクライアントもあります。
[joplin-vieweb/joplin-vieweb: A web viewer for Joplin app](https://github.com/joplin-vieweb/joplin-vieweb)

![joplin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/c56ab9cb-0637-12d5-9614-16125000a508.png)

DATA APIを使う側からみればJoplinアプリがサーバになるので常時立てておく、という方法でDATA APIによるノート操作ができます。
DATA API専用Joplinアプリはこれらのコンテナをベースに建てることができます。
[jspiers/headless-joplin: Dockerized Joplin terminal client](https://github.com/jspiers/headless-joplin)
[joplin-vieweb/joplin-terminal-xapi](https://github.com/joplin-vieweb/joplin-terminal-xapi)

ということで、図中の青い部分をコンテナとして常時立ち上げておくとアプリからも自分で作った怪しげなAPI操作ツールからも、EvernoteやNotionみたいな感じで使えます。
私の場合、`archive`タグのついたノートを別の検索可能な場所に移動するなど、いくつかのcron処理などをしています。

同期サーバは専用のものではなくs3やdavでもいけますので、minioやNextCloudでもOKです（共有ノートの公開はできません）。
同期サーバの背後にあるmysqlを含めると、4段構成ということになりますね。

注意が必要なのは同期のタイミングです。DATA APIを叩いている時には適度なタイミングで（ダーティなオブジェクトが多くなりすぎず、デスクトップアプリとの競合がおきにくく、sqliteがロックしたりパフォーマンスが落ちたりしないタイミングで）同期してあげる必要があります（上記コンテナでは5分に一回となっています）。

[Joplin ことはじめ - Qiita](https://qiita.com/isann_tech/items/65bb6198ae6d646f8bc5)

## I, Librarian Free

代替対象: EndNote, Zoteroなど

[mkucej/i-librarian-free: I, Librarian - open-source version of a PDF managing SaaS.](https://github.com/mkucej/i-librarian-free)

![I Librarian Free.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/1fc2bd73-cb08-d077-56ad-410192a8b151.jpeg)

大学も卒業・修了したし論文地獄ともおさらばだぜ！と思っていも、計算機界隈なんかにいたらなんだかんだいって論文は読みますし、自分が興味ある他の分野を調べていても論文にはよく遭遇します。

そういった論文のPDFはNextCloudやノートアプリに入れておいてもいいわけですが、溜まってくると整理に困ってしまいます。
そんな時に便利なのが、文献管理ソフト・サービス。

[【ScrapeStorm】学術研究にオススメ | 文献管理ツール 5選 #論文 - Qiita](https://qiita.com/ScrapeStorm-JP/items/b02840644e2ee7a5a5cb)

有償のものが多い中、I, Librarian (Free版)は無償で使用可能なWebアプリです。
和文、しかも日本国内ネタの社会学類ですとDOIでインポートできなかったりしますが、まぁ研究者ではない読み専なら困らないレベルだと思います。

## WBO

代替対象: Google Jamboard

[WBO — 協同作業できるオンラインホワイトボード](https://wbo.ophir.dev/?lang=ja)
![wbo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/558e71d3-f75f-8ea2-39d5-6e150236b4ba.png)

ブラウザの中で動くホワイトボード、お絵かき掲示板です。
同じURLを開いている複数のブラウザで同じ絵をみることができますので、zoomなどで画面共有しているときにちょっと図を描くのに便利です。
私はiPadのSafariでApplePencilで絵を描き、それをPCのブラウザ経由で画面共有するという使い方をしています。

[lovasoa/whitebophir: Online collaborative Whiteboard that is simple, free, easy to use and to deploy](https://github.com/lovasoa/whitebophir)

## Vikunja

代替対象: todoist, wondrlistなど

[Vikunja](https://vikunja.io/ "Vikunja")

![vikunja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/a04ee989-a0f2-bbc3-e1bd-2eb54f0a6517.png)

todoを管理するツールです。
ノートアプリで、チェックリストを使えば不要といえば不要かもしれませんが、まぁそこはお好みで。

NextCloudに「カレンダー」アプリ（いわゆるプラグイン）を追加すると、NextCloudがCalDAVサーバになります。
そして「タスク」アプリで、VTODOのWebUIが追加されます。
OS標準の「リマインダー」アプリ（AppleのものはCalDAVに対応しています）や2DoといったCalDAV対応ToDoアプリを使うのがいいかもしれません。

ToDo管理アプリというのは依存しはじめるとなかなか抜け出しにくいですね。

## Wekan

代替対象: Trello

[Wekan — Open-Source kanban](https://wekan.github.io/)

![wekan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/d70fc16c-9042-b9e1-dc8c-9f967677f791.png)

カンバン型タスク管理ツールです。
左にある「未着手」を右にある「進行中」にすすめていくあれです。
Trelloのおもらし事件のようにならないよう、「公開」には気をつけましょう。

[WekanをDockerで立てる！ - Qiita](https://qiita.com/awaha/items/2d7d7952048d30a6c284)

似たようなツールは他にもたくさんありますので、自分にあうものを探してみましょう。

[11 Best Open Source Project Management Software \[Self-hosted\]](https://geekflare.com/open-source-project-management-software/)

## HedgeDoc

代替対象: HackMD

![md.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/41c3c9ca-f8c9-0a63-e33c-3cef49712dee.jpeg)

HackMDのオープン版であるCodiMDが名前が変わってHedgeDocになりました。
qiitaの下書きにも使えますし、プレゼンテーションを作ったり共有したりもできます。

[Qiitaタグ検索: HackMD](https://qiita.com/tags/hackmd)

## BulletNotes

代替対象: workflowy

[jean/BulletNotes: Personal Knowledgebase, Note Taking, Scheduling](https://github.com/jean/BulletNotes)
[BulletNotes.io](https://bulletnotes.io/intro "BulletNotes.io")

箇条書きするノートです。

![BulletNotes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/ba76ac8b-f57e-397a-149b-72c42f04adef.png)

他にもvim風のものでvimflowyというのがあります。

[GitHub - WuTheFWasThat/vimflowy: An open source productivity tool drawing inspiration from workflowy and vim](https://github.com/WuTheFWasThat/vimflowy)
[Vimflowy](https://vimflowy.netlify.app/)

日本語は環境によってはちょっと挙動が怪しいことがあります。
githubにパッチがあるので当てましょう。

開発が止まっていますが、Hackflowyというものもあります。
こちらはwebsocketを大量に生成する、日本語のキーイベント（229）が遅い等の問題が多くて実用できませんでした💧

[GitHub - abhshkdz/HackFlowy: Workflowy clone, built using Backbone.js & Socket.io](https://github.com/abhshkdz/HackFlowy)

## agendav

代替対象: Googleカレンダー

[GitHub - agendav/agendav: A CalDAV web client similar to Google Calendar](https://github.com/agendav/agendav)

![agendav.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/ce01badb-69f8-aa5f-d192-128c0db3e8b0.png)

caldavのwebインターフェイスです。
なので背後にcaldavサーバを置くと、なんとgoogleカレンダーのようなものができます。
caldavサーバにはbaikalが使えます。

[Baïkal - baikal](https://sabre.io/baikal/)

## Roundcube

代替対象: gmail, Yahoo mailなど

[roundcube/roundcubemail: The Roundcube Webmail suite](https://github.com/roundcube/roundcubemail)

![roundcube.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/31d880b5-ccb6-062f-ddf1-4d032bd479da.jpeg)

imapのwebインターフェイスです。
なので背後にimapサーバをおくと、なんと(以下略

似たようなものにRainLoopというのがありますが、こちらは開発がもうされていないようです。

[GitHub - RainLoop/rainloop-webmail: Simple, modern & fast web-based email client](https://github.com/RainLoop/rainloop-webmail)

[RainLoop - Qiita](https://qiita.com/tukiyo3/items/39f65e9802a6041e36cb)

RoundCubeに限りませんが、Webアプリに脆弱性が報告されることはままありますので、ちゃんと対応しましょう...
[【セキュリティ ニュース】ウェブメールクライアント「Roundcube」に深刻な脆弱性 - アップデートを強く推奨（1ページ目 / 全1ページ）：Security NEXT](https://www.security-next.com/132036)

メール関連で必要なものを全部一つにまとめたコンテナとしてMailuというのがあります。
私はfetchmail, procmail, spamassassin, postfix, dovecot, DNS等の連携を自分で作ってしまったので利用したことはないのですが、昨今のメールのセキュア化（domainkey, SPF, MTA-STS, DANEなど）は結構大変なのでこういうのがあるのは良いですね。

[Mailu/Mailu: Insular email distribution - mail server as Docker images](https://github.com/Mailu/Mailu)

## overleaf community edition

代替対象: overleaf, sharelatex

[GitHub - overleaf/overleaf: A web-based collaborative LaTeX editor](https://github.com/overleaf/overleaf)

![overleaf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/3a3cda83-4440-c1d7-04ec-794c25c583f7.png)

これがあれば`/usr/local/share/texmf/`の巨漢にSSDを圧迫されて泣くことはもうありませんね。
`-shell-escape`を追加してgnuplotやgraphvizを入れると、グラフもこの中で作成できます。

[Overleafを使った日本語論文の作成 - Qiita](https://qiita.com/fujino-fpu/items/d92d185da730e25743cb)
[Overleaf(旧sharelatex)環境の構築 - Qiita](https://qiita.com/tomy_hara/items/765257716b083dd687c4)

```Dockerfile
FROM sharelatex/sharelatex:4

RUN apt update && \
    apt install -y graphviz gnuplot fonts-noto-cjk && \
    tlmgr update --self && \
    tlmgr install scheme-full && \
    cd /usr/local/bin && \
    ln -s /usr/local/texlive/2023/bin/x86_64-linux/platex  . && \
    ln -s /usr/local/texlive/2023/bin/x86_64-linux/ptex    . && \
    ln -s /usr/local/texlive/2023/bin/x86_64-linux/mendex  . && \
    ln -s /usr/local/texlive/2023/bin/x86_64-linux/pbibtex . && \
    apt clean && \
    rm -fr /var/cache/apt
```

overleafにcliからアクセスするoverleaf-syncというのがあります。
[moritzgloeckl/overleaf-sync: Overleaf Two-Way Synchronization](https://github.com/moritzgloeckl/overleaf-sync)

2023/07現在、community editionまわりやBS, uploadにバグがあるのでissueに上がっているパッチを手マージします。

```sh:
# ログイン(初回のみ)
$ ols login --ce-url=https://sharelatex.example.com --path ~/.olauth
# プロジェクト一覧
$ ols list --ce-url=https://sharelatex.example.com --path ~/.olauth
# 特定のプロジェクトのpdfをダウンロード
$ ols download --ce-url=https://sharelatex.example.com --path ~/.olauth --name お手紙
# 現在のディレクトリ名と同じプロジェクトの中身を同期
$ mkdir お手紙
$ cd $_
$ ols --ce-url=https://sharelatex.example.com --path ~/.olauth 
```

こんな感じのMakefileを書くと幸せになれます。
```Makefile:Makefile
OLSOPT=--store-path ~/.olauth -v --ce-url=https://sharelatex.example.com

output.pdf: main.tex
    ols $(OLSOPT)
	ols download $(OLSOPT)
```


## vaultwarden (旧称bitwarden_rs)

代替対象: lastpass, 1password

[dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs](https://github.com/dani-garcia/vaultwarden)

![bitwarden.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/4c0f842c-9a10-8e26-76f7-84cf41e4cb14.png)

世の中のwebサイトに数多あるパスワードを管理するサービスです。
でもそれをクラウドに置くのって安全なの？命綱を握られてない？という話は当然出てきます。

bitwardenはそういうサービスのうちの一つでして、サーバ側のコードが公開されています。
オープンソースのパスワード管理ソフトはたくさんありますが、iOSクライアントがあるか、多要素認証はできるか、とか言いだすと選択肢は狭まります。
bitwardenはこれらに対応しています。

公式のサーバはお金を払わないと使えない機能があったり、重かったりとあまり実用的ではありません。
そこで登場するのが、非公式互換サーバvaultwardenです。
資源をあまり必要としない上に、yubikeyによる多要素認証も可能になります。
公式のクライアントでは、ログイン画面の⚙️（歯車マーク）からサーバのURLを指定可能です。

ユーザに非常事態が発生して長期に渡り連絡がとれない（つまり死亡）というときに、あらかじめ指定された者（つまり遺族）に非常アクセスを許可する仕組みもあります。
個人でも家族でも仲間内でも、こういうのを建てて緊急事態アクセスを設定しておくと「何か」あったときに残された人が苦労しないで済むかもしれません（残された人がこのサーバを維持管理できるかは分かりませんが、普通、サーバは一ヶ月程度は無保守でも動きますよね？）。
いつ誰が新型コロナウイルスに感染して戦線離脱するかわからないご時世、DR, BCPとして構成員個人のパスワード管理しなければなりませんね。切ないわ...

[bitwarden_rsでパスワード管理サーバーをセルフホスティング](https://banatech.net/blog/view/22)

vaultwarden自体を動かしているサーバが落ちた時にそれを再起動・再デプロイするのに必要な認証情報までvaultwardenに任せてしまうと「缶切りが缶の中にある」という「函の中の鍵」状態になります。
以下のものを使って、定期的にkeepass形式に変換して安全な場所に置いておきましょう（日本語を使っている場合はutf8を使うよう一部修正が必要です）。

[davidnemec/bitwarden-to-keepass: Export (most of) your Bitwarden items into KeePass (kdbx) database. That includes logins - with TOTP seeds, URIs, custom fields, attachments and secure notes](https://github.com/davidnemec/bitwarden-to-keepass)

## Komga

代替対象: Apple BooksのiCloud連携

[Komga](https://komga.org/)

![komga.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/a55258e4-58a7-82d6-7407-bcb214f9002b.jpeg)

手元にあるPDFやepubをwebブラウザから読むことができます。
漫画向けなのでライブラリの中に「シリーズ」という概念があります。
この手のものではCalibre-webが有名ですが、ライブラリが大きくなると遅くてきついです。
Komgaは数万冊いれても動きます。
いくつかのiOSやAndroidのアプリと連携ができるので、それも便利です。

[janeczku/calibre-web: Web app for browsing, reading and downloading eBooks stored in a Calibre database](https://github.com/janeczku/calibre-web)

## Jellyfin

代替対象: iCloud Music Library

[Jellyfin: The Free Software Media System](https://jellyfin.org/)

![jellyfin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/e86e8a8a-188f-4dfa-f291-9f8244ca90d6.png)

自分の手持ちの音楽をブラウザから再生することができるメディアサーバーです。
NextCloudやKomgaもそうですが、自分で買ったものを自分だけが再生できるようにするのなら著作権法上の問題はありません。
もちろん、自分だけがログインできるように守ってあげしまょう。

音声しかないのにm4aではなくmp4になっていると再生できずに止まってしまいます。
ffprobeでvideoがなかったらffmpegでm4aに`-vn -c:a copy`するようなshell scriptを書いて回してあげましょう。

DLNAにも対応していますが、その場合は`network=host`が必要になります。

[Jellyfinでメディアサーバを作ろう - Qiita](https://qiita.com/ogawa_pro/items/ed00e2ad4e35fdbd2b5d)
[【Jellyfin】自分だけのメディアサーバー - Qiita](https://qiita.com/Amijakan/items/0ac52921cdfa5a64160d)

DLNAだけが目的（WebUIでの再生は不要）なら、MiniDNLAがおすすめです。
[複数のMiniDLNAインスタンスを起動して、アクセス制御する - Qiita](https://qiita.com/nikola-f/items/e328941d421a78669704)

## paperless-ngx

代替対象: ScanSnap Home

[Paperless-ngx](https://docs.paperless-ngx.com/)

![paperless-ngx.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/80bf2f09-dd4a-0f2d-5c85-8a17261b7a82.jpeg)

スキャンされたレシート、ハガキ、チラシといった紙切れのPDFを管理するシステムです（書籍向けではありません）。
djangoのREST APIが使えます。

[ScanSnapで一万冊の本をスキャンして管理して読むおはなし #書籍以外の紙 - Qiita](https://qiita.com/curtain6935/items/28908baa23cdc5667455#%E6%9B%B8%E7%B1%8D%E4%BB%A5%E5%A4%96%E3%81%AE%E7%B4%99)

## Exment

代替対象: MS Access, Excel, Googleスプレッドシート

[Exment | エクスメント - システム無料、基本機能充実。シンプルで軽快なオープンソースWebデータベースをあなたに](https://exment.net/)

![ement.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/eba7f018-8aed-d2f5-ebea-56a3559370b1.jpeg)

Webデータベースソフトです。
大昔のHyperCard, 桐みたいなやつですね。
本体はPHP、バックエンドはmysql類でREST APIでも操作できます。

別のテーブルを参照することもできるので第3正規形もできますし、カード画面でjavascriptを入れることができるので（セキュリティはさておき）なんでもし放題、ちょっとしたデータ管理なら十分ですね。
うちは同じ型が幾つもあるタイプのごちゃごちゃしたファイルや、普段は外して置いてある外付けHDDといった物品の管理に使っています。

ただ、残念ながら以下ような欠点があるようです。

* APIのエラーメッセージまで日本語
* datetime型にTimeZoneという概念がない
* 「金額」のデータタイプの通貨が限られる
* APIでsql的なものは使えない
* PHP8未対応
 
この会社は本体はOSSで配布して、商用サポートやプラグインの開発でお金を稼いでいるようです。
WordPress, MovableTypeとかと同じビジネスモデルですね。

[exment-git/docker-exment: exment env](https://github.com/exment-git/docker-exment)
[Qiitaタグ検索: Exment](https://qiita.com/tags/exment)
[Laravel製のオープンソースWebDB『Exment』が正式リリース2年なので、これまでとこれからをまとめてみた - Qiita](https://qiita.com/hirossyi73/items/00cfedf2d7cc6329fe5c)

## webssh

代替対象: aws cloudshell, cloud9のターミナルなど

![WebSSH.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/5e652bde-a5b0-0f04-947d-cc0f25542365.png)

[GitHub - huashengdun/webssh: Web based ssh client](https://github.com/huashengdun/webssh)

ブラウザからsshできるようになります。
便利なのかセキュリティホールなのかは微妙な気もしますが、何かあったときに便利かもしれません...

# おわりに

と、これらのソフトの作者の皆様のおかげで、我々はプライバシーと財布をサブスク課金クラウドから取り返すことができます。
深く感謝です。

たたし、面倒・管理が心配だ、自信がない、という方はやめたほうがいいというのが正直なところです。
残念ながら「プライバシーを売りたくない、お金も払いたくない、自力でやる元気も技術もない、けど使いたい」というような都合の良い話はありません。

また、個人、趣味の仲間内や家族ならともかく、企業・法人であえてオンプレを建てるのもお勧めはしません。
JTCは内製が大好きですが、そんなことに力をかけるより比較優位なことで稼いで、そのお金で他人に任せたほうがいいですよ...

# 参考リンク

こちらも参考にさせていただきました。感謝。

[個人的にセルフホストしてるソフトウェア 2021 | 備忘ノート](https://note.spage.jp/archives/766)
[Dockerで即実行できる、社内・自宅向けオープンソースWebアプリ - Qiita](https://qiita.com/y_hokkey/items/406b5a8c4bc15354d069)
[セルフホスティングへの回帰 - hub](https://scrapbox.io/hub/%E3%82%BB%E3%83%AB%E3%83%95%E3%83%9B%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%B8%E3%81%AE%E5%9B%9E%E5%B8%B0)
[Awesome Self Hosted | LibHunt](https://selfhosted.libhunt.com/)
[Self-Hosted Alternatives to Popular Services](https://www.reddit.com/r/selfhosted/)
[The Top 210 Self Hosted Open Source Projects](https://awesomeopensource.com/projects/self-hosted)