Ubuntu20.04にEtherpadCollaborativeWebEditorをインストールする方法
序章
Etherpadは、ブラウザでのリアルタイムの共同テキスト編集を可能にするWebアプリケーションです。 Node.jsで記述されており、さまざまなプラットフォームやオペレーティングシステムでセルフホストできます。
このチュートリアルでは、SQLiteデータベースエンジンを使用してデータを保存し、EtherpadをUbuntu20.04サーバーにインストールします。 また、アプリケーションのリバースプロキシとして機能するようにNginxをインストールして構成し、Let’s Encrypt認証局からSSL証明書を取得してインストールし、Etherpadインスタンスへの安全なHTTPS接続を有効にします。
注: App Platformサービスを使用してEtherpadをセルフホストする場合は、 Etherpad CollaborativeWebEditorをAppPlatformにデプロイするチュートリアルを参照してください。 Etherpad Dockerコンテナを実行し、マネージドPostgreSQLデータベースに接続するためのプラットフォームアプリ。
前提条件
このチュートリアルを開始する前に、次のものが必要です。
- root 、
sudo
が有効になっていないユーザー、およびUFWファイアウォールが有効になっているUbuntu20.04サーバー。 これらの要件の設定の詳細については、 Ubuntu20.04を使用した初期サーバー設定をお読みください。 - Node.jsがインストールされている、バージョン14以降。 NodeSourceパッケージを使用して最新バージョンのNode.jsをインストールする方法については、Ubuntu20.04にNode.jsをインストールする方法のオプション2を参照してください。
- サーバーのパブリックIPアドレスを指すドメイン名。 たとえば、
example.com
やetherpad.example.com
のようになります。
注: DigitalOceanを使用している場合は、 DNSドキュメントを使用すると、コントロールパネルでドメイン名を設定できます。
前提条件が整ったら、ステップ1に進み、Etherpadアプリケーションをダウンロードして構成します。
ステップ1—Etherpadのダウンロードと設定
Etherpadをインストールするには、ソースコードをダウンロードし、依存関係をインストールして、サーバーを実行するようにsystemdを構成する必要があります。
Etherpadのメンテナは、ソフトウェアを独自のユーザーとして実行することを推奨しているため、最初のステップは、adduser
コマンドを使用して新しいetherpadユーザーを作成することです。
- sudo adduser --system --group --home /opt/etherpad etherpad
これにより、--system
ユーザーが作成されます。つまり、直接ログインできず、パスワードやシェルが割り当てられていません。 /opt/etherpad
のホームディレクトリを指定します。ここで、Etherpadソフトウェアをダウンロードして構成します。 また、--group
フラグを使用して、etherpadグループを作成します。
ここで、etherpadユーザーとしていくつかのコマンドを実行する必要があります。 これを行うには、sudo
コマンドを使用して、bash
シェルをetherpadユーザーとして開きます。 次に、ディレクトリ(cd
)を/opt/etherpad
に変更します。
- sudo -u etherpad bash
- cd /opt/etherpad
シェルプロンプトが更新され、etherpadユーザーであることが示されます。 etherpad@host:~$
のようになります。
次に、Gitを使用してEtherpadリポジトリを/opt/etherpad
に複製します。
- git clone --branch master https://github.com/ether/etherpad-lite.git .
これにより、Etherpadソースコードのmaster
ブランチが現在のディレクトリ(.
)にプルされます。 それが完了したら、EtherpadのinstallDeps.sh
スクリプトを実行して、依存関係をインストールします。
- ./bin/installDeps.sh
これには1分かかる場合があります。 完了したら、最後の依存関係を手動でインストールする必要があります。 SQLiteをデータベースとして使用するには、cd
をEtherpadsrc
フォルダーに入れ、sqlite3
パッケージをインストールする必要があります。
まず、src
ディレクトリに移動します。
- cd src
次に、npm
を使用してsqlite3
パッケージをインストールします。
- npm install sqlite3
etherpad ユーザーとしての最後のタスクは、Etherpad settings.json
ファイルを更新して、データベースにSQLiteを使用し、Nginxとうまく連携することです。 /opt/etherpad
ディレクトリに戻ります。
- cd /opt/etherpad
次に、お気に入りのテキストエディタを使用して設定ファイルを開きます。
- nano settings.json
ファイルはJSONとしてフォーマットされていますが、各設定を説明する全体に広範なコメントが付いています。 構成できるものはたくさんありますが、今のところ、データベース構成を更新する2つの値に関心があります。
"dbType": "dirty",
"dbSettings": {
"filename": "var/dirty.db"
},
下にスクロールして、ここに表示されているdbType
およびdbSettings
セクションを探します。 次のように、設定をsqlite
と選択したファイル名に更新します。
"dbType": "sqlite",
"dbSettings": {
"filename": "var/sqlite.db"
},
最後に、もう少し下にスクロールして、trustProxy
設定を見つけ、true
に更新します。
"trustProxy": true,
設定ファイルを保存して閉じます。 nano
では、CTRL+O
、ENTER
と入力して保存し、CTRL+X
と入力して終了します。
それが終わったら、必ずetherpadユーザーのシェルを終了してください:
- exit
通常のユーザーのシェルに戻ります。
Etherpadがインストールおよび構成されています。 次に、Etherpadプロセスを開始および管理するためのsystemdサービスを作成します。
ステップ2—Etherpad用のSystemdサービスを作成する
起動時にEtherpadを起動し、systemctl
を使用してプロセスを管理するには、systemdサービスファイルを作成する必要があります。 お気に入りのテキストエディタで新しいファイルを開きます。
- sudo nano /etc/systemd/system/etherpad.service
Etherpadのドキュメントwikiの情報に基づいてサービス定義を作成します。 Etherpad Liteをサービスとして展開する方法ページには、機能させるためにいくつかの変更が必要な構成例が示されています。
次のコンテンツをテキストエディタに追加し、ファイルを保存して閉じます。
[Unit]
Description=Etherpad, a collaborative web editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js
Restart=always
[Install]
WantedBy=multi-user.target
このファイルは、Etherpadを実行するために必要な情報(実行するユーザーとグループ、プロセスの開始に使用されるコマンド(ExecStart=...
)など)をsystemdに提供します。
ファイルを閉じた後、systemdデーモンをリロードして、新しい構成をプルします。
- sudo systemctl daemon-reload
次に、etherpad
サービスを有効にします。 これは、サーバーが再起動するたびにサービスが起動することを意味します。
- sudo systemctl enable etherpad
そして最後に、サービスを開始できます。
- sudo systemctl start etherpad
systemctl status
を使用して、サービスが正しく開始されたことを確認します。
- sudo systemctl status etherpad
Output● etherpad.service - Etherpad, a collaborative web editor.
Loaded: loaded (/etc/systemd/system/etherpad.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-09-09 14:12:43 UTC; 18min ago
Main PID: 698 (node)
Tasks: 13 (limit: 1136)
Memory: 152.0M
CGroup: /system.slice/etherpad.service
└─698 /usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js
出力は、サービスがactive (running)
であることを示しているはずです。
Etherpadは現在実行中ですが、ポート9001
がファイアウォールによってブロックされているため、一般には利用できません。 次のステップでは、Etherpadプロセスの前にリバースプロキシとしてNginxを設定することにより、Etherpadを公開します。
ステップ3—Nginxのインストールと構成
NginxなどのWebサーバーをNode.jsサーバーの前に配置すると、キャッシュ、圧縮、静的ファイルの提供をより効率的なプロセスにオフロードすることで、パフォーマンスを向上させることができます。 Nginxをインストールし、Etherpadへの proxy リクエストに設定します。つまり、ユーザーからのリクエストをEtherpadに渡し、また元に戻します。
まず、パッケージリストを更新してから、apt
を使用してNginxをインストールします。
- sudo apt update
- sudo apt install nginx
「NginxFull」UFWアプリケーションプロファイルを使用して、ポート80
および443
(HTTPおよびHTTPS)へのトラフィックを許可します。
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
次に、/etc/nginx/sites-available
ディレクトリにある新しいNginx構成ファイルを開きます。 etherpad.conf
と呼びますが、別の名前を使用することもできます。
- sudo nano /etc/nginx/sites-available/etherpad.conf
以下を新しい構成ファイルに貼り付けます。必ずyour_domain_here
をEtherpadサーバーを指すドメインに置き換えてください。 たとえば、これはetherpad.example.com
のようになります。
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/etherpad.access.log;
error_log /var/log/nginx/etherpad.error.log;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_buffering off;
proxy_set_header Host $host;
proxy_pass_header Server;
# proxy headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
# websocket proxying
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
この構成は、Etherpadwikiで提供されているa構成に大まかに基づいています。 次のステップでCertbotにSSLの構成を任せるため、現時点ではHTTPのみです。 残りの構成では、ログの場所を設定してから、すべてのトラフィックをhttp://127.0.0.1:9001
に渡します。これは、前の手順で起動したEtherpadインスタンスです。 また、正常に動作するプロキシと、プロキシを介して機能するWebSocket(リアルタイムの双方向通信を可能にする永続的なHTTP接続)に必要なさまざまなヘッダーを設定します。
ファイルを保存して閉じ、/etc/nginx/sites-enabled/
にリンクして構成を有効にします。
- sudo ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/
nginx -t
を使用して、構成ファイルの構文が正しいことを確認します。
- sudo nginx -t
[secondary_lable Output]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最後に、nginx
サービスをリロードして、新しい構成を取得します。
- sudo systemctl reload nginx
これで、EtherpadサイトがプレーンHTTPで利用できるようになり、次のようになります。
サイトがHTTP経由で稼働しているので、CertbotおよびLet’sEncrypt証明書を使用して接続を保護します。
ステップ4—CertbotのインストールとSSL証明書の設定
CertbotとLet’sEncryptの無料認証局のおかげで、EtherpadアプリにSSL暗号化を追加するのに必要なコマンドは2つだけです。
まず、CertbotとそのNginxプラグインをインストールします。
- sudo apt install certbot python3-certbot-nginx
次に、certbot
を--nginx
モードで実行し、Nginxserver_name
構成で使用したものと同じドメインを指定します。
- sudo certbot --nginx -d your_domain_here
Let’s Encryptの利用規約に同意し、メールアドレスを入力するよう求められます。
その後、すべてのHTTPトラフィックをHTTPSにリダイレクトするかどうかを尋ねられます。 それはあなた次第ですが、これは一般的に推奨され、安全に行うことができます。
その後、Let’s Encryptがリクエストを確認し、Certbotが証明書をダウンロードします。
OutputCongratulations! You have successfully enabled https://etherpad.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=etherpad.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/etherpad.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/etherpad.example.com/privkey.pem
Your cert will expire on 2021-12-06. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbotは自動的にNginxをリロードして、新しい構成と証明書を取得します。 サイトをリロードすると、リダイレクトオプションを選択した場合、自動的にHTTPSに切り替わります。
完了です。 新しいEtherpadエディターを試して、協力者を招待してください。
結論
このチュートリアルでは、NginxとLet’sEncryptSSL証明書を使用してEtherpadをセットアップします。 これでEtherpadを使用する準備が整いましたが、認証済みユーザーの追加、プラグインの追加、 skins によるユーザーインターフェイスのカスタマイズなど、さらに多くの構成を行うことができます。
SQLiteを利用したEtherpadインスタンスは、適度な数のアクティブユーザーを処理できますが、トラフィックが非常に多いと予想される場合は、代わりにMySQLまたはPostgreSQLデータベースの構成を検討することをお勧めします。
これらの構成オプションはすべて、公式のEtherpadwikiに記載されています。