Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Deploying Fluxer - An Open Source Instant Messaging and VoIP Platform

2026年10月01日に「Dev.to」が公開したITニュース「Deploying Fluxer - An Open Source Instant Messaging and VoIP Platform」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Fluxerは、チャットや音声・ビデオ通話ができるオープンソースのプラットフォームだ。この記事では、Docker Composeを利用しLinuxサーバーに自分で導入・運用する方法を解説する。HTTPSで安全に公開し、管理者アカウント設定まで網羅しており、すぐに利用を開始できる。

ITニュース解説

Fluxerは、友人、グループ、コミュニティのために作られた、無料で利用できるオープンソースのインスタントメッセージングおよびVoIP(ボイスオーバーIP、インターネット電話)プラットフォームだ。これは、テキストメッセージング、コミュニティ機能、テキストおよび音声チャネル、メディアのアップロード、検索、ユーザーのオンライン状況表示、そしてウェブブラウザベースのインターフェースからの音声およびビデオ通話といった多彩な機能を提供する。まるで自分たち専用のコミュニケーションハブを構築できるようなものだと考えると分かりやすいだろう。

Fluxerを動かすためには、単一のプログラムではなく、複数の異なるソフトウェアが連携して動作する必要がある。これを「スタック」と呼ぶ。Fluxerの公式なDocker Composeスタックは、ウェブアプリケーション本体、API(アプリケーションプログラミングインターフェース)、ゲートウェイ、管理ダッシュボード、メッセージングサービス、メディアサービスといった主要なコンポーネントを含んでいる。加えて、データの保存には「PostgreSQL」というデータベース、一時的なデータやキャッシュの処理には「Valkey」、メッセージのやり取りには「NATS」、検索機能には「Meilisearch」、大量のメディアファイルを効率的に管理する「SeaweedFS」、そしてリアルタイムの音声・ビデオ通信を担う「LiveKit」、さらにウェブトラフィックを安全に処理する「Caddy」というウェブサーバー兼リバースプロキシが使われている。これら全てがDockerという仮想化技術を使い、それぞれのコンポーネントが独立した「コンテナ」として動作することで、システム全体の管理を容易にしている。

この記事の目的は、このような複雑な構成を持つFluxerを、Linuxサーバー上に「自己ホスト」する方法を解説することにある。「自己ホスト」とは、インターネット上のサービスを自分で用意したサーバーで動かすことを指す。具体的には、Docker Composeスタックを利用してFluxerをデプロイし、Caddyをリバースプロキシとして利用してHTTPS(安全なウェブ通信)経由でインターネットに公開し、最後にシステム全体の管理者となる「オーナーアカウント」を作成する手順を学ぶ。これらの手順を終えれば、自分のドメイン名でメッセージングや音声・ビデオチャネルが利用できるセキュアなFluxerインスタンスが手元に構築されることになる。

まず、Fluxerをデプロイするための準備として、サーバー上に作業用のディレクトリと必要な設定ファイルを用意する。初めに~/fluxerという新しいディレクトリを作成し、その中に移動する。次に、Fluxerの公式リポジトリから、システムを構成するための重要な設定ファイルをダウンロードする。具体的には、Docker Composeの設定を記述したdocker-compose.yml、Caddyというウェブサーバーの設定ファイルであるCaddyfile、LiveKitという音声・ビデオ通話サービスの設定ファイルであるlivekit.yaml、そして環境変数を定義する.env.exampleファイル(これは後で.envという名前に変更して使用する)をダウンロードする。これらのファイルは、Fluxerのコンテナの定義、ウェブサイトの公開設定、音声サービスの設定、そしてアプリケーションの動作に必要な各種設定を規定している。

ファイルが揃ったら、最も重要な設定ファイルの一つである.envファイルを開き、いくつか必須の環境変数を設定する。FLUXER_DOMAINとFLUXER_CADDY_SITE_ADDRESSには、自分で取得したFluxerを公開するドメイン名(例: fluxer.example.com)を設定する。このドメイン名が、ユーザーがブラウザからFluxerにアクセスする際のURLとなる。また、FLUXER_VAPID_EMAILには、ウェブプッシュ通知の管理に使用されるメールアドレスを設定する。これらの設定を正確に行うことが、Fluxerが正しく動作し、インターネット上でアクセス可能になるための最初のステップだ。

次に、Fluxerの各種サービスが安全に通信し、悪意のあるアクセスから保護されるための「シークレット」を生成する。シークレットとは、プログラム間で認証や暗号化のために使われる、人間には推測できないようなランダムな文字列のことだ。Fluxerでは、データベースのパスワード、検索エンジンのマスターキー、オブジェクトストレージの秘密鍵、内部的な通信のためのトークン、管理者ダッシュボードやメディアアップロードのためのキー、LiveKitのAPI秘密鍵など、多岐にわたるシークレットが必要となる。これらのシークレットは、openssl rand -hex 32やopenssl rand -base64 32といったコマンドを使ってランダムな文字列を生成し、一つ一つ.envファイルに自動的に挿入していく。これにより、システム内の各コンポーネントが互いを安全に識別し、通信できるようになる。これらのシークレットは、システムのセキュリティを保つ上で極めて重要であるため、適切に生成し管理する必要がある。

さらに、ウェブブラウザへのプッシュ通知機能を実現するために「VAPIDキー」というものも生成する。これはウェブプッシュ通知サービスでユーザーを認証するための鍵ペアで、公開鍵と秘密鍵から構成される。このキーペアは、一時的にNode.jsというプログラミング環境のコンテナを起動し、その中でコマンドを実行して生成する。生成された公開鍵と秘密鍵は、それぞれ.envファイルのFLUXER_VAPID_PUBLIC_KEYとFLUXER_VAPID_PRIVATE_KEYに設定する。これらの鍵を設定することで、Fluxerはユーザーのブラウザに新しいメッセージの通知などを送れるようになる。.envファイルには、これらの重要な認証情報や秘密情報が多数含まれるため、ファイルのアクセス権限をchmod 600 .envコマンドで制限し、所有者のみが読み書きできるように設定することは極めて重要だ。これにより、誤って情報が漏洩するリスクを低減できる。最後に、設定したドメイン名やメールアドレスが正しく.envファイルに反映されているかを確認する。

準備が整ったら、いよいよFluxerのコンテナをデプロイする段階に進む。まずは、docker compose config --quietコマンドで、先ほどダウンロードして編集したDocker Composeの設定ファイルに文法的な誤りがないかを確認する。このコマンドは、設定に問題がなければ何も表示しない。次に、docker compose pullコマンドを実行して、Fluxerを構成するすべてのサービス(ウェブアプリ、データベース、検索エンジン、メディアストレージなど)のDockerイメージをインターネット上からダウンロードする。これらのイメージは、各サービスを動作させるための完全なパッケージだ。ダウンロードが完了したら、docker compose up -dコマンドを実行して、Docker Composeスタックで定義されたすべてのコンテナをバックグラウンドで起動する。この最初の起動は、イメージのダウンロードや各サービスの初期化に時間がかかる場合がある。

コンテナが起動したら、docker compose ps -aコマンドを使って、すべてのサービスが正常に動作しているかを確認する。このコマンドの出力で、各サービスの状態が「Up」と表示され、さらに健康状態を示す「(healthy)」が付いていれば、正常に動作していると判断できる。ただし、seaweedfs-initというコンテナは、オブジェクトストレージに必要なバケットを作成した後に終了するのが正常な動作であるため、そのコンテナの終了コードが0であれば問題ない。もし何らかの問題でコンテナが起動しない場合は、docker compose logs SERVICE_NAMEコマンドを使って、そのサービス(例えばapiやgateway)のログを確認することで、原因を探ることができる。APIログや全体のログを監視し、サービスが安定して動作していることを確認することも重要だ。

Fluxerの公式Docker Composeスタックには、Caddyというウェブサーバーがリバースプロキシとして含まれている。リバースプロキシとは、ユーザーからのインターネットアクセスを最初に受け付け、適切な内部サービスにそのリクエストを転送する役割を持つ。Caddyは、サーバーのポート80(HTTP)と443(HTTPS)で通信を待ち受け、.envファイルで設定したドメイン名(FLUXER_CADDY_SITE_ADDRESS)に対して自動的にHTTPS用のセキュリティ証明書を取得し、更新する。これにより、Fluxerへのアクセスは常に暗号化され、安全に保たれる。API、ゲートウェイ、メディアサービス、管理ダッシュボード、LiveKitのシグナリング、ウェブアプリケーションなど、すべてのFluxerサービスが同じ公開ドメイン名を通じてアクセスできるようになる。docker compose exec caddy caddy validate --config /etc/caddy/CaddyfileコマンドでCaddyの設定が正しいか検証し、docker compose logs --tail=100 caddyでCaddyのログを確認することで、証明書が正常に発行されているかなどを確認できる。

最後に、デプロイされたFluxerにウェブブラウザからアクセスし、初期設定を行う。ウェブブラウザでhttps://fluxer.example.com(自分のドメインに置き換える)にアクセスすると、Fluxerのセットアップウェルカムページが表示されるはずだ。ここで、言語やテーマを選択し、次に進むと「管理者アカウントの作成」ページが表示される。Fluxerは、最初に作成されたアカウントを自動的に管理者として設定するため、ここで必要な情報を入力してアカウントを作成する。アカウント作成後、https://fluxer.example.com/adminにアクセスし、作成した管理者アカウントでログインする。初回ログイン時には、管理アプリケーションが必要とする権限の承認を求められるので、必要なスコープを有効にして「Authorize」をクリックする。承認後、管理者ダッシュボードにリダイレクトされ、ユーザー管理、コミュニティ(ギルド)やチャネルの作成、モデレーション設定、その他インスタンス全体の機能の管理が可能となる。これで、メッセージング、音声、ビデオチャネル、メディア共有機能が利用可能な、セキュアなFluxerインスタンスの自己ホスティングが完了した。

Fluxerが正常に動作を開始したら、次にできることは多岐にわたる。たとえば、新しいコミュニティ(ギルド)やチャネルを作成し、友人やグループのメンバーを招待して利用を開始できる。管理者ダッシュボードからモデレーション設定やユーザーの権限設定を細かく調整し、コミュニティのルールを確立することも重要だ。また、オブジェクトストレージ(SeaweedFS)のデータ保持ポリシーを見直したり、利用状況の増加に合わせてSeaweedFS、Meilisearch、LiveKitといった各コンポーネントのリソース使用状況を監視し、必要に応じてサーバーのスペックを強化することも考慮に入れる必要がある。これらの運用と管理を通じて、構築したFluxerインスタンスを長期的に安全かつ快適に利用していくことが可能になる。

関連コンテンツ

関連IT用語

関連ITニュース