ウェブサイト検索

Debian 11にNginxとSSLを使用してEtherpadをインストールする方法


Debian 11にNginxとSSLを使用してEtherpadをインストールする方法

このチュートリアルはこれらのOSバージョンのために存在します

  • Debian 12 (ブックワーム)
  • Debian 11 (Bullseye)

このページで

  1. 前提条件
  2. パッケージの依存関係をインストールする
  3. MariaDBデータベースのインストールと設定
  4. Etherpadのインストールと設定
  5. Nginxのインストールと構成
  6. Etherpadのインストールを確認する
  7. 結論

Etherpadは、Google DocsやZoho Writerなどのサービスに対する無料かつオープンソースの代替手段です。Etherpadはチーム用の共同作業およびリアルタイムのテキストエディタであり、ウェブベースのテキストエディタなので、いつでもどこでもアクセス可能です。

Etherpad上の変更はリアルタイムで行われており、Etherpadはバージョン管理とチーム用の組み込みフォーマット機能をサポートしています。Etherpadは、さまざまなプラグインをサポートした高度にカスタマイズ可能なエディターです。また、doc、pdf、odt、markdownなどの現代のドキュメントフォーマットもサポートしています。

このチュートリアルでは、Debian 11 Bullseye に Etherpad リアルタイムコラボレーティブエディタをインストールして構成します。このチュートリアルでは、データベースバックエンドとして MariaDB を使用し、リバースプロキシとして Nginx ウェブサーバーを使用して、安全な HTTPS を有効にします。最後には、Etherpad がインストールされ、安全な HTTPS 暗号化によって保護されます。

前提条件

このチュートリアルを完了するためには、まず次の要件が必要です。

  • テスト用のDebian 11サーバーでは、1 GBのRAMを使用できます。本番環境では、環境や使用状況に応じてより多くのリソースを使用することができます。
  • ルート特権を持つ非ルートユーザー。オプションとして、ルートユーザーを使用することもできます。
  • インストールのためのドメイン名を設定し、それがサーバーのIPアドレスを指していることを確認してください。この例では、ドメイン「etherpad.example.io」を使用します。

これらの要件をすべて満たしたら、インストールを開始するために最初のセクションに進んでください。

パッケージの依存関係をインストールする

EtherpadはNode.jsの上に構築されたウェブアプリケーションです。本稿執筆時点で、Etherpadの最新バージョンはxxxであり、少なくともNode.jsの14.xバージョンが必要です。このセクションでは、Debian 11サーバーにNode.jsを含むいくつかのパッケージ依存関係をインストールします。

まず、パッケージインデックスリストを更新し、その後、次のコマンドを実行してビルド依存関係をインストールします。

sudo apt update
sudo apt install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential -y

このチュートリアルでは、Node.jsの複数のバージョンを提供するNodesourceリポジトリからNode.jsをインストールします。このチュートリアルでは、Etherpadのインストールに16.xのNode.jsバージョンを使用します。

次に、Node.js リポジトリをシステムに追加するための以下のコマンドを実行します。このコマンドは、Nodesource リポジトリを自動的に追加して、パッケージインデックスを更新します。

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -

次に、以下のコマンドを実行してNodesourceリポジトリからNode.js 16.xをインストールします。

sudo apt install nodejs -y

4. インストールが完了したら、次のコマンドを使用してNode.jsのバージョンを確認してください。

node --version

あなたは「blah blah」のような出力を受け取ります。

このセクションでは、Etherpadのパッケージ依存関係とNodesourceリポジトリからのNode.jsバージョン16.xをインストールしました。次に、MariaDBデータベースをインストールして構成します。

MariaDBデータベースのインストールと設定

このセクションでは、Debian 11サーバーにMariaDBデータベースをインストールします。次に、MariaDBのルートパスワードを設定し、最後にEtherpadのために新しいデータベースとユーザーを作成します。

1. デフォルトでは、MariaDB パッケージは Debian 11 リポジトリで利用可能です。これをインストールするには、次のコマンドを実行してください。

sudo apt install mariadb-server -y

2. MariaDBのインストールが完了すると、自動的に実行され、有効になります。

MariaDBは、MariaDBのルートパスワードの設定を含む、MariaDBを安全にデプロイするのに役立つコマンドラインツールを提供します。以下のように、コマンド 'mysql_secure_installation' を実行してください。

mysql_secure_installation

これからMariaDBのデプロイに関する質問がいくつかあり、ルートパスワードの設定を求められます。

3. MariaDBのデフォルトのrootユーザーにはパスワードがなく、ENTERを押してください。

Enter current password for root (enter for none):
OK, successfully used password, moving on...

4. これから、認証方法を「unix_socket」に切り替えるよう求められます。「Y」と入力して同意してください。

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!

5. Yと入力してMariaDBの新しいルートパスワードを設定します。次に、強力なパスワードを入力し、繰り返します。

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

6. デフォルトのMariaDBインストールには匿名ユーザーが含まれています。削除するには「Y」と入力してください。

Remove anonymous users? [Y/n] Y
 ... Success!

7. では、MariaDBのrootユーザーのリモートログインを無効にします。 進むには Y を入力してください。

Disallow root login remotely? [Y/n] Y
 ... Success!

8. 次に、デフォルトのデータベース「test」とその上のすべての権限を削除するために、「Y」と入力して同意します。

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

最後に、新しい設定を適用するためにテーブルの権限を再読み込みします。'Y'と入力して、ENTERを押してください。

Reload privilege tables now? [Y/n] Y
 ... Success!

すべての設定が完了すると、以下のような「完了しました!」という出力メッセージが表示されます。

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

10. 次に、MariaDBシェルにログインするために以下のコマンドを実行します。MariaDBのrootパスワードを入力するよう求められます。あなたのパスワードを入力してください。

mysql -u root -p

11. それでは、以下のクエリを実行してEtherpad用の新しいデータベースとユーザーを作成します。この例では、新しいデータベース「etherpad_lite_db」を作成し、ユーザー「etherpaduser」とパスワード「StrongPasswordEtherpadDB」を設定します。パスワードを変更することを忘れないでください。

CREATE DATABASE etherpad_lite_db;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'StrongPasswordEtherpadDB';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;

12. その後、新しい設定を適用するためにすべてのテーブルの権限を再読み込みし、mariaDBシェルからログアウトするために「exit」クエリを実行します。

FLUSH PRIVILEGES;
EXIT

このセクションでは、Debian 11にMariaDBデータベースのインストールと構成を完了しました。また、Etherpad用のデータベースとユーザーを作成しました。次に、Etherpadのソースコードをダウンロードし、インストールします。

Etherpadのインストールと設定

このセクションでは、ソースコードからEtherpadをインストールし、MariaDBをデータベースとして設定し、Etherpad用の新しいsystemdファイルを作成します。最終的には、Etherpadがsystemdサービスとして実行されます。

1. Etherpadのソースコードをダウンロードする前に、あなたのシステムに新しいユーザー「etherpad」を作成します。このユーザーはEtherpadインストーラスクリプトを実行し、Etherpadサービスを実行するために使用されます。

以下の'adduser'コマンドを実行して、新しいユーザー'etherpad'を作成します。また、ホームディレクトリを'/opt/etherpad-lite'に設定します。このディレクトリは、すべてのEtherpadソースを保存するために使用されます。

sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad

2. では、ディレクトリ「/opt」に移動し、gitコマンドを使用してEtherpadのソースをクローンします。

cd /opt/
git clone --branch master https://github.com/ether/etherpad-lite.git

3. それから、'etherpad-lite' ディレクトリの所有権をユーザー 'etherpad' とグループ 'etherpad' に変更します。

sudo chown -R etherpad:etherpad etherpad-lite

4. 次に、ディレクトリ「etherpad-lite/」に移動し、以下のようにインストーラースクリプト「installDeps.sh」を使用してすべてのNode.js依存関係をインストールします。インストーラースクリプト「installDeps.sh」は、非ルートユーザー「etherpad」として実行されます。

cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/installDeps.sh" etherpad

すべてのパッケージ依存関係のインストールが完了するまで待ってください。

次に、ファイル「settings.json」を変更してEtherpadのインストールを設定します。そのファイルを編集するには、nanoエディタを使用するか、お好みのエディタを使用できます。

nano settings.json

行の一番上で、自分のタイトルにタイトルを変更してください。この例では、タイトルをEntherpad Johndoeとして使用しています。

  "title": "Etherpad Johndoe",

このチュートリアルでは、EtherpadはNginxリバースプロキシの下で動作します。また、Etherpadをlocalhostで実行することは安全性のために良いことです。さて、'ip:'の設定を'127.0.0.1'に変更します。この設定では、Etherpadはlocalhostのみに配置されます。

  "ip": "127.0.0.1",
  "port": 9001, 

デフォルトでは、EtherpadはデータベースとしてSQLiteを使用します。無効にするには、これらの行をすべてコメントアウトしてください。

  /*
  *"dbType": "dirty",
  *"dbSettings": {
  *  "filename": "var/dirty.db"
  *},
  */

さて、以下にMariaDBデータベースの設定を入力してください。そして、データベース名、ユーザー名、パスワードを変更することを確認してください。

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "StrongPasswordEtherpadDB",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

ファイルを保存して終了します。

次に、ディレクトリ「/etc/systemd/system」に新しいsystemdサービスファイル「etherpad.service」を作成します。このファイルには、Etherpadがサーバー上で適切に動作するために必要なすべての設定詳細が含まれます。nanoエディタを使用して作成してください。

sudo nano /etc/systemd/system/etherpad.service

次の設定をファイルに追加してください。

[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.
Restart=always
[Install]
WantedBy=multi-user.target

このサービスファイルは、ユーザーおよびグループ「etherpad」として実行されます。また、「Environment=NODE_ENV=production」オプションがあることに気付くでしょう。これは、Etherpadアプリケーションが本番環境で実行されることを意味します。「ExecStart=..」オプションは、Etherpadアプリケーションを実行するためのデフォルトのコマンドです。

ファイルを保存して閉じてください。

今、システムdマネージャーをリロードして新しいサービスファイルを適用します。

sudo systemctl daemon-reload

その後、etherpadサービスを起動して有効にし、次のコマンドを実行してその状態を確認します。

sudo systemctl enable --now etherpad
sudo systemctl status etherpad

以下のスクリーンショットに似た出力を受け取ります。etherpadサービスは現在「アクティブ(実行中)」であり、システム起動時に自動的に開始され、デフォルトポート「9001」でローカルホスト上で実行されています。

この時点で、あなたはEtherpadのインストールを完了しました。次に、Nginxをインストールして、Etherpadアプリケーションのリバースプロキシとして設定します。

Nginxのインストールと構成

本番環境では、アプリケーションの前にリバースプロキシを置くことを常に推奨します。これにより、アプリケーションのパフォーマンスとセキュリティが向上します。このセクションでは、リバースプロキシとしてNginxウェブサーバーをインストールし、設定します。最後には、あなたのドメイン名で動作するEtherpadがHTTPSプロトコルで保護されている状態になります。

最初に、以下のコマンドを実行してNginxパッケージをインストールします。

sudo apt install nginx -y

2. さて、DebianシステムにUFWファイアウォールがある場合は、以下のufwコマンドを実行して、HTTPおよびHTTPSポート(80および443)への公共アクセスを許可します。

sudo ufw allow "Nginx Full"

次の出力が得られます。

Rule added
Rule added (v6)

次に、ディレクトリ「/etc/nginx/sites-available/」に新しいNginx仮想ホストファイル「etherpad」を作成します。nanoエディタまたは好みのエディタを使用して作成してください。

sudo nano /etc/nginx/sites-available/etherpad

次の設定をファイルにコピーして貼り付けてください。また、自分のドメイン名とSSL証明書のパスを自分の情報に置き換えてください。SSL証明書は、Letsencryptを使用して自由に生成できます。

enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  etherpad.example.io;
    return 301   https://$host$request_uri;
}
we're in the http context here
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  etherpad.example.io;
    access_log  /var/log/nginx/eplite.access.log;
    error_log   /var/log/nginx/eplite.error.log;
    ssl_certificate      /etc/letsencrypt/live/etherpad.example.io/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/etherpad.example.io/privkey.pem;
    ssl_session_timeout  5m;
    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    location / {
        proxy_pass         http://127.0.0.1:9001;
        proxy_buffering    off; # be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
        proxy_set_header   Host $host;
        proxy_pass_header  Server;
        # Note you might want to pass these headers etc too.
        proxy_set_header    X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html
        proxy_set_header    X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
        proxy_set_header    X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
        proxy_http_version  1.1; # recommended with keepalive connections
        # WebSocket proxying - from https://nginx.org/en/docs/http/websocket.html
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection $connection_upgrade;
    }
}

このNginx仮想ホストファイルは、HTTPから安全なHTTPSプロトコルへのトラフィックを自動的にリダイレクトします。エラーが発生した場合のデバッグのために、ログファイル'/var/log/nginx/eplite.error.log'を確認してください。すべてのクライアントリクエストは、ローカルホストのポート9001で動作しているEtherpadアプリケーションに送信されるproxy_passバックエンドに送られます。

4. ファイルを保存して閉じたら、仮想ホストの設定を有効にするために、ファイル「etherpad」のシンボリックリンクをディレクトリ「/etc/nginx/sites-enabled」に作成します。

sudo ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/

5. 次に、コマンド「nginx -t」を実行してnginxの設定を確認します。このコマンドは設定に関する構文エラーをチェックします。

sudo nginx -t

以下のように出力されます。出力メッセージ「構文は正しい」は、エラーがないことを意味します。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful.

6. 最後に、新しいNginxバーチャルホストファイルを適用するために、Nginxサービスを再起動します。

sudo systemctl restart nginx

このセクションでは、EtherpadアプリケーションのリバースプロキシとしてのNginxのインストールと設定を完了しました。あなたのEtherpadは現在、http://etherpad.example.ioで利用可能です。

Etherpadのインストールを確認する

1. ウェブブラウザを開き、アドレスにドメイン名「http://etherpad.example.io/」を入力します。そして、自動的に以下の安全なHTTPS接続にリダイレクトされます。

2. 新しいパッドを作成するには、カラムにパッドの名前を入力し、'OK' ボタンをクリックしてください。

これから下記のようにEtherpadリアルタイムコラボレーションエディタが表示されます。

結論

このチュートリアルでは、Debian 11サーバーにEtherpadリアルタイムコラボレーティブエディタをインストールして設定しました。また、EtherpadアプリケーションのためにNginxをリバースプロキシとしてインストールして設定しました。

あなたは今、チームでのコラボレーションエディタとしてEtherpadを使用する準備ができました。Etherpadに関するさらなる情報は、公式のEtherpadドキュメントを確認してください。

関連記事: