ウェブサイト検索

Rocky Linux 9にStandard Notesサーバーをインストールする方法


Rocky Linux 9にStandard Notesサーバーをインストールする方法

このページで

  1. 前提条件
  2. ステップ1 - ファイアウォールを設定する
  3. ステップ2 - DockerとDocker Composeをインストールする
  4. ステップ3 - Nginxをインストールする
  5. ステップ4 - SSLをインストールする
  6. ステップ5 - スタンダードノートをダウンロードして設定する
  7. ステップ 6 - スタンダードノートサーバーを開始する
  8. ステップ7 - スタンダードノートウェブアプリをインストールする

    1. Gitをインストールする
    2. NodeJSをインストールする
    3. Yarnをインストールする
    4. PM2パッケージマネージャーをインストールします。
    5. ウェブアプリをインストールする
  9. ステップ8 - Nginxを設定する
  10. ステップ9 - SELinuxを設定する
  11. ステップ10 - 標準ノートを使用する
  12. ステップ11 - 有料機能を有効にする
  13. ステップ12 - ファイルアップロードのためのサーバー設定
  14. ステップ13 - スタンダードノーツサーバーとウェブアプリをアップグレードする
  15. 結論

Standard Notesはオープンソースで完全に暗号化されたノートアプリです。無料と有料のプランを提供しており、クラウドホスティングと自分のサーバーにホストするオプションの両方があります。異なるデバイス間で保存されたノートを同期するために、自分のサーバーを使用できます。Standard Notesはすべてのデスクトップオペレーティングシステムとモバイルプラットフォームのアプリを提供しています。

このチュートリアルでは、Rocky Linux 9 マシン上で標準ノートサーバーを自己ホストする方法を学びます。また、サーバーで無料で有料プランをアクティベートする方法や、ファイルアップロードを有効にする方法も学びます。

前提条件

    少なくとも2GBのRAMを搭載したRocky Linux 9を実行しているサーバー。

    sudo権限を持つ非ルートユーザー。

    サーバーにポイントされた完全修飾ドメイン名があります。私たちのチュートリアルでは、ドメインstandardnotes.example.comを使用します。ファイルサーバー用にもう2つのドメイン名が必要で、1つはファイルサーバー用、もう1つはウェブアプリ用です。ファイルサーバーにはドメインsnotes-files.example.comを使用し、ウェブアプリにはsnotes-web.example.comを使用します。

    すべてが更新されています。

    sudo dnf update
    

    あなたのシステムに必要ないくつかのパッケージ。

    sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils
    

    これらのパッケージの一部は、すでにあなたのシステムにインストールされている可能性があります。

ステップ1 - ファイアウォールを設定する

パッケージをインストールする前に、最初のステップはファイアウォールを設定してHTTPおよびHTTPS用のポートを開くことです。Rocky LinuxはFirewalldファイアウォールを使用します。ファイアウォールの状態を確認してください。

sudo firewall-cmd --state
running

ファイアウォールは異なるゾーンで動作し、パブリックゾーンは私たちが使用するデフォルトのゾーンです。ファイアウォールでアクティブなすべてのサービスとポートをリストアップしてください。

sudo firewall-cmd --zone=public --list-all

次の出力を表示する必要があります。

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

ファイアウォールでHTTPおよびHTTPSポートを開いてください。

sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --add-service=https

ファイアウォールの状態を再確認してください。

sudo firewall-cmd --zone=public --list-all

あなたは似たような出力を見るべきです。

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

すべての変更を永久的に行い、変更を有効にするためにファイアウォールを再読み込みしてください。

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

ステップ2 - DockerとDocker Composeをインストールする

公式のDockerリポジトリをインストールします。

sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Dockerをインストールしてください。

sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Dockerデーモンを有効にして実行します。

sudo systemctl enable docker --now

Dockerサービスのステータスを確認してください。

sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:35:00 UTC; 5s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 23273 (dockerd)
      Tasks: 9
     Memory: 34.0M
        CPU: 176ms
     CGroup: /system.slice/docker.service
             ??23273 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Apr 16 23:35:00 standard-notes systemd[1]: Starting Docker Application Container Engine...
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.050964934Z" level=info msg="Starting up"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.083526973Z" level=info msg="Loading containers: start."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.654481705Z" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.772647844Z" level=info msg="Loading containers: done."
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793814339Z" level=info msg="Docker daemon" commit=60b9add containerd-snapshotter=false storage-driver=overlay2 version=26.0.1
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.793962347Z" level=info msg="Daemon has completed initialization"
Apr 16 23:35:00 standard-notes dockerd[23273]: time="2024-04-16T23:35:00.827030005Z" level=info msg="API listen on /run/docker.sock"
Apr 16 23:35:00 standard-notes systemd[1]: Started Docker Application Container Engine.

Dockerコマンドを実行する際にsudoを使用しないように、システムユーザーをDockerグループに追加してください。

sudo usermod -aG docker $(whoami)

変更を有効にするために、ログアウトした後にサーバーに再度ログインしてください。

変更を確認してください。

groups
navjot wheel docker

ステップ3 - Nginxをインストールする

Rocky Linux 9は古いバージョンのNginxを搭載しています。最新バージョンをインストールするには、公式のNginxリポジトリを使用する必要があります。

/etc/yum.repos.d/nginx.repo ファイルを作成して編集のために開いてください。

sudo nano /etc/yum.repos.d/nginx.repo

そのコードをそこに貼り付けてください。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

作業が完了したら、Ctrl + X を押してファイルを保存し、表示されたプロンプトで Y を入力します。私たちはNginxのメインラインバージョンを使用するため、上記のファイルのメインラインセクションで enabled=1 を使用してメインラインリポジトリを有効にしました。どちらかを選択できます。

Nginxをインストールします。

sudo dnf install nginx -y

インストールを確認してください。

nginx -v
nginx version: nginx/1.25.5

Nginxサーバーサービスを有効にして開始します。

sudo systemctl enable nginx --now

サービスの状態を確認してください。

sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-16 23:41:23 UTC; 6s ago
       Docs: http://nginx.org/en/docs/
    Process: 4886 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 4887 (nginx)
      Tasks: 3 (limit: 10819)
     Memory: 3.1M
        CPU: 11ms
     CGroup: /system.slice/nginx.service
             ??4887 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??4888 "nginx: worker process"
             ??4889 "nginx: worker process"

Apr 16 23:41:23 standard-notes systemd[1]: Starting nginx - high performance web server...
Apr 16 23:41:23 standard-notes systemd[1]: Started nginx - high performance web server.

ステップ4 - SSLをインストールする

SSL証明書を生成するためにCertbotをインストールする必要があります。それにはSnapdパッケージインストーラーを使用します。Rocky Linuxにはこれが含まれていないため、Snapdインストーラーをインストールしてください。これにはEPEL(Enterprise Linux用の追加パッケージ)リポジトリが必要です。

EPELリポジトリをインストールします。

sudo dnf install epel-release -y

Snapdパッケージをインストールします。

sudo dnf install snapd -y

スナップサービスを有効にして開始します。

sudo systemctl enable snapd --now

Snapコアパッケージをインストールし、Snapdのバージョンが最新であることを確認してください。

sudo snap install core && sudo snap refresh core

Snapdが動作するために必要なリンクを作成してください。

sudo ln -s /var/lib/snapd/snap /snap
echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Certbotをインストールします。

sudo snap install --classic certbot

次のコマンドを使用して、Certbot コマンドが /usr/bin ディレクトリへのシンボリックリンクを作成することで実行できることを確認してください。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbotのバージョンを確認してください。

certbot --version
certbot 2.10.0

次のコマンドを実行してSSL証明書を生成します。

sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d standardnotes.example.com

上記のコマンドは、サーバーの/etc/letsencrypt/live/standardnotes.example.comディレクトリに証明書をダウンロードします。

ファイルのサブドメインについても同じことを行う必要があります。

sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d snotes-files.example.com

そして最後に、再びウェブアプリのために。

sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email  -d snotes-web.example.com

ディフィー・ヘルマン群証明書を生成します。

sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbotの更新スケジューラーサービスを確認してください。

systemctl list-timers

snap.certbot.renew.serviceが実行されるようにスケジュールされたサービスの1つとして見つかります。

NEXT                        LEFT          LAST                        PASSED      UNIT                        ACTIVATES                   ----------------------------------------------------------------------------------------------------------------------------------  
Wed 2024-04-17 00:00:00 UTC 5min left   Tue 2024-04-16 23:29:44 UTC 24min ago    logrotate.timer              logrotate.service
Wed 2024-04-17 00:31:26 UTC 36min left  -                           -            dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-17 11:00:00 UTC 11h left    -                           -            snap.certbot.renew.timer     snap.certbot.renew.service

プロセスのドライランを実行して、SSLの更新が正常に機能しているか確認してください。

sudo certbot renew --dry-run

エラーが見当たらなければ、すべて準備完了です。あなたの証明書は自動的に更新されます。

ステップ5 - スタンダードノートをダウンロードして設定する

システムのホームディレクトリにいることを確認してください。

cd ~

Standard Notesサーバー用の作業ディレクトリを作成し、そこに移動します。

mkdir standardnotes
cd ~/standardnotes

Standard NotesのGitHubリポジトリから環境例ファイルをダウンロードしてください。

wget https://raw.githubusercontent.com/standardnotes/server/main/.env.sample

ダウンロードしたサンプルファイルから作業環境ファイルを作成してください。

cp .env.sample .env

「.env」ファイルを設定するには、3つの認証と暗号化のキーが必要です。次のコマンドを実行して、3つの別々のキーを生成し、その出力をコピーしてください。

openssl rand -hex 32

強力なデータベースパスワードも必要です。安全なデータベースパスワードを生成するには、以下のコマンドを実行できます。

openssl rand -hex 12

環境ファイルを編集のために開いてください。

nano .env

強力なデータベースのパスワードを選択し、それをDB_PASSWORD変数に追加してください。

######
DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=changeme
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
KEYS #
########

AUTH_JWT_SECRET=
AUTH_SERVER_ENCRYPTION_SERVER_KEY=
VALET_TOKEN_SECRET=

以前に生成されたキーを追加し、それらを KEYS セクションの3つの変数に対して配置してください。

デフォルトでは、ユーザー登録は有効になっています。スタンダードノートサーバーでパブリックユーザー登録を無効にしたい場合は、環境ファイルに以下の変数を追加してください。ただし、最初のアカウントを作成した後にのみこれを行ってください。最初からこの設定を使用すると、自分自身がアプリを使用できなくなります。

AUTH_SERVER_DISABLE_USER_REGISTRATION=true

標準ノートファイルのURLを定義するために、次の変数を追加してください。

PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

完全な .env ファイルは次のようになります。

######
DB #
######

DB_HOST=db
DB_PORT=3306
DB_USERNAME=std_notes_user
DB_PASSWORD=<YourDBPassword>
DB_DATABASE=standard_notes_db
DB_TYPE=mysql

#########
CACHE #
#########

REDIS_PORT=6379
REDIS_HOST=cache
CACHE_TYPE=redis

########
KEYS #
########

AUTH_JWT_SECRET=52b354ad5d8f11c995b4eed33870a1a7afbbc84b8da61e0b583660b075d0390c
AUTH_SERVER_ENCRYPTION_SERVER_KEY=fce4fe78972c3407be47127aee57d67e86b84afb628020b7ab6999edb3c905f1
VALET_TOKEN_SECRET=50aad911a283f252713139667b6475ac105280a220e009e05f733cf785630ce5

AUTH_SERVER_DISABLE_USER_REGISTRATION=true
PUBLIC_FILES_SERVER_URL=https://snotes-files.example.com

作業が完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。

GitHubリポジトリからLocalstackのブートストラップスクリプトをダウンロードしてください。

wget https://raw.githubusercontent.com/standardnotes/server/main/docker/localstack_bootstrap.sh

スクリプトに実行権限を与えてください。

chmod +x localstack_bootstrap.sh

GitHubリポジトリからStandard NotesサーバーのDocker Composeファイルをダウンロードしてください。

wget https://raw.githubusercontent.com/standardnotes/server/main/docker-compose.example.yml

ダウンロードした例のコンポーズファイルから動作するDocker Composeファイルを作成します。

cp docker-compose.example.yml docker-compose.yml

編集のために開いてください。

nano docker-compose.yml

MYSQL_ROOT_PASSWORD と MYSQL_PASSWORD の値を、前に選択したデータベースのパスワードに変更します。その際、.env ファイルを参照してください。あなたの Docker Compose ファイルは次のようになります。

services:
  server:
    image: standardnotes/server
    env_file: .env
    container_name: server_self_hosted
    restart: unless-stopped
    ports:
      - 3000:3000
      - 3125:3104
    volumes:
      - ./logs:/var/lib/server/logs
      - ./uploads:/opt/server/packages/files/dist/uploads
    networks:
      - standardnotes_self_hosted

  localstack:
    image: localstack/localstack:3.0
    container_name: localstack_self_hosted
    expose:
      - 4566
    restart: unless-stopped
    environment:
      - SERVICES=sns,sqs
      - HOSTNAME_EXTERNAL=localstack
      - LS_LOG=warn
    volumes:
      - ./localstack_bootstrap.sh:/etc/localstack/init/ready.d/localstack_bootstrap.sh
    networks:
      - standardnotes_self_hosted

  db:
    image: mysql:8
    container_name: db_self_hosted
    environment:
      - MYSQL_DATABASE=standard_notes_db
      - MYSQL_USER=std_notes_user
      - MYSQL_ROOT_PASSWORD=<YourDBPassword>
      - MYSQL_PASSWORD=<YourDBPassword>
    expose:
      - 3306
    restart: unless-stopped
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/import:/docker-entrypoint-initdb.d
    networks:
      - standardnotes_self_hosted

  cache:
    image: redis:6.0-alpine
    container_name: cache_self_hosted
    volumes:
      - ./data/redis/:/data
    expose:
      - 6379
    restart: unless-stopped
    networks:
      - standardnotes_self_hosted

networks:
  standardnotes_self_hosted:
    name: standardnotes_self_hosted

ファイルを保存するには、Ctrl + Xを押し、完了後に表示されるプロンプトでYを入力してください。これで、Standard Notesサーバーのセットアップのダウンロードと設定が完了します。

ステップ6 - スタンダードノーツサーバーを開始する

サーバーを起動するには、以下のコマンドを実行してください。

docker compose up -d

このコマンドは完了するまでに数分かかります。この間に、プロセスは関連するすべてのDockerイメージを引き出し、すべてのサービスのコンテナを作成します。また、データベースを.populateし、適切なマイグレーションも行います。CPUの使用率は数分間急上昇する可能性がありますが、すぐに下がるはずです。

Standard Notesサーバーのログはlogsディレクトリにあります。次のコマンドを使用してプロセスログをチェックできます。

tail -f logs/*.log

Ctrl + C を押してログを終了します。実行中のコンテナのステータスは、次のいずれかのコマンドを使用して確認できます。

docker compose ps
OR
docker ps

あなたは同様の出力を受け取るでしょう。

NAME                     IMAGE                       COMMAND                  SERVICE      CREATED          STATUS                   PORTS
cache_self_hosted        redis:6.0-alpine            "docker-entrypoint.s…"   cache        16 minutes ago   Up 5 minutes             6379/tcp
db_self_hosted           mysql:8                     "docker-entrypoint.s…"   db           16 minutes ago   Up 5 minutes             3306/tcp, 33060/tcp
localstack_self_hosted   localstack/localstack:3.0   "docker-entrypoint.sh"   localstack   16 minutes ago   Up 5 minutes (healthy)   4510-4559/tcp, 4566/tcp, 5678/tcp
server_self_hosted       standardnotes/server        "docker-entrypoint.sh"   server       16 minutes ago   Up 5 minutes             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:3125->3104/tcp, :::3125->3104/tcp

次のコマンドを使用してサーバーの健康状態をチェックできます。

curl http://localhost:3000/healthcheck
OK

Standard Notesはデフォルトでポート3000を使用します。.envファイルで別のポートを設定した場合は、上記のコマンドでそれを更新する必要があります。

ステップ7 - スタンダードノートウェブアプリをインストールする

既存のStandard Notesウェブアプリを使用するか、自分でホストすることができます。私たちのチュートリアルでは、Standard Notesウェブアプリを自己ホストします。

Gitをインストールする

進む前に、いくつかのものをインストールする必要があります。その1つがGitです。Gitをインストールしてください。

sudo dnf install git -y

NodeJSをインストールする

次のステップはNodeJSをインストールすることです。これにはNode 18.x LTSバージョンをインストールします。NodeJSをインストールするために、次のコマンドを実行してください。

curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

インストールを確認してください。

node --version
v18.20.2

Yarnをインストールする

私たちはYarnパッケージマネージャーも必要です。Nodeを使用してインストールしてください。

sudo npm install --global yarn

PM2パッケージマネージャーをインストールします。

私たちは、標準ノートのウェブアプリをバックグラウンドサービスとして実行するためにPM2が必要です。

sudo npm install --global pm2

ウェブアプリをインストールする

ウェブアプリのためにディレクトリを作成し、それに切り替えます。

cd ~
mkdir snotes-app
cd ~/snotes-app

GitHubからStandard Notesアプリをダウンロードしてください。

git clone https://github.com/standardnotes/app.git .

Yarnを使って依存関係をインストールします。警告は無視してください。

yarn install

ウェブアプリのパッケージを構築します。

yarn build:web

ウェブディレクトリに切り替えてください。

cd packages/web

PM2を使用してウェブアプリを起動します。

pm2 start "yarn start" --name api

次のコマンドを使用して、サービスの状態を確認できます。

pm2 status
[PM2] Starting /usr/bin/bash in fork_mode (1 instance)
[PM2] Done.
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id ? name   ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user     ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0  ? api    ? default     ? N/A     ? fork    ? 15090    ? 0s     ? 0    ? online    ? 0%       ? 26.2mb   ? navjot   ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

アプリは起動され、ポート3001を介してアクセス可能です。この情報を使用して、ウェブアプリのためのNginx構成を作成します。

PM2は再起動時にアプリケーションを再起動しません。そのためには、スタートアップスクリプトを生成する必要があります。

pm2 startup

あなたは同様の出力を得るべきです。

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

出力に記載されたコマンドを実行してください。

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

これにより、systemd サービスファイルが生成され、有効化されます。

再起動時に自動的に開始されるプロセスを保存します。

pm2 save

ステップ8 - Nginxを設定する

ファイル /etc/nginx/nginx.conf を編集のために開いてください。

sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;の前に次の行を追加してください。

server_names_hash_bucket_size 64;

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

/etc/nginx/conf.d/standardnotes.conf ファイルを作成して編集のために開いてください。

sudo nano /etc/nginx/conf.d/standardnotes.conf

以下のコードをそこに貼り付けてください。standardnotes.example.comをあなたのドメイン名に置き換えます。client_max_body_sizeの値を50MBに設定しました。必要に応じて変更できます。

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name standardnotes.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/standardnotes.access.log;
  error_log   /var/log/nginx/standardnotes.error.log;

  ssl_certificate      /etc/letsencrypt/live/standardnotes.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/standardnotes.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/standardnotes.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_cache off;
  }
}
enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  standardnotes.example.com;
    return 301   https://$host$request_uri;
}

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

上記のファイルは、メインのStandard Notesアプリケーション用です。次に、Filesサブドメイン用の別のファイルを設定する必要があります。

sudo nano /etc/nginx/conf.d/files-standardnotes.conf

以下のコードをそこに貼り付けてください。snotes-files.example.comをあなたのドメイン名に置き換えます。client_max_body_size変数の値は50MBに設定しています。必要に応じて変更できます。

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name snotes-files.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/files-standardnotes.access.log;
  error_log   /var/log/nginx/files-standardnotes.error.log;

  ssl_certificate      /etc/letsencrypt/live/snotes-files.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/snotes-files.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/snotes-files.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3125;
    proxy_cache off;
  }
}
enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  snotes-files.example.com;
    return 301   https://$host$request_uri;
}

そして最後に、ウェブアプリのための設定ファイルを作成する必要があります。

sudo nano /etc/nginx/conf.d/web-standardnotes.conf

そのコードをそこに貼り付けてください。

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  http3 on;
  quic_retry on;

  server_name snotes-web.example.com;

  client_max_body_size 50M;

  access_log  /var/log/nginx/standardnotes-web.access.log;
  error_log   /var/log/nginx/standardnotes-web.error.log;

  ssl_certificate      /etc/letsencrypt/live/snotes-web.example.com/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/snotes-web.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/snotes-web.example.com/chain.pem;

  ssl_session_timeout  5m;
  ssl_session_cache shared:MozSSL:10m;
  ssl_session_tickets off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_pass http://127.0.0.1:3125;
    proxy_cache off;
  }
}
enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  snotes-web.example.com;
    return 301   https://$host$request_uri;
}

Nginxの設定を確認してください。

sudo nginx -t

Nginxサーバーを再起動して、設定ファイルを有効にします。

sudo systemctl restart nginx

ステップ9 - SELinuxを設定する

外部ホストへの接続を許可するポリシーを適用してください。

sudo setsebool -P httpd_can_network_connect 1

NginxがPostgreSQLへのアクセスを許可するようにポリシーを適用してください。

sudo setsebool -P httpd_can_network_connect_db 1

ステップ10 - 標準ノートを使用する

ブラウザでURL https://standardnotes.example.com を開くと、次の出力が表示されるはずです。

これはあなたのサーバーが稼働していることを意味します。Standard Notesを使用するには、公式アプリを使用する必要があります。私たちのチュートリアルでは、ウェブアプリを使用しますが、方法はデスクトップアプリやモバイルアプリでも同じです。

ウェブアプリにアクセスするには、URL https://snotes-web.example.com を開いてください。ページの左下にある無料アカウントを作成リンクをクリックし、メールアドレスとパスワードを入力します。高度な機能ボタンをクリックし、カスタム同期サーバーオプションのチェックを外し、ボックスにhttps://standardnotes.example.com のURLを入力してください。

次へボタンをクリックして進んでください。再度パスワードを求められます。

サインインすると、メモを作成したり、アプリケーションを使用したりできます。

ステップ11 - 有料機能を有効にする

これまでのところ、Standard Notesアプリケーションの基本機能を有効にしました。ただし、一部の有料サーバーサイド機能を有効にすることができ、Standard Notesではこれを無料で行うことができます。なお、これはSuper Notesやネストタグなどのクライアントサイドのプレミアム機能を有効にするものではありません。それらを有効にするためには、Standard Notesオフラインプランを通じて大幅に割引されたサブスクリプションを購入できます。

自己ホスト型アプリケーションでサーバーサイドのプレミアム機能を有効にするには、Standard Notesディレクトリから次のコマンドを実行する必要があります。

cd ~/standardnotes

docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
      'INSERT INTO user_roles (role_uuid , user_uuid) VALUES ((SELECT uuid FROM roles WHERE name=\"PRO_USER\" ORDER BY version DESC limit 1) ,(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\")) ON DUPLICATE KEY UPDATE role_uuid = VALUES(role_uuid);' \
    "

docker compose exec db sh -c "MYSQL_PWD=\$MYSQL_ROOT_PASSWORD mysql \$MYSQL_DATABASE -e \
      'INSERT INTO user_subscriptions SET uuid=UUID(), plan_name=\"PRO_PLAN\", ends_at=8640000000000000, created_at=0, updated_at=0, user_uuid=(SELECT uuid FROM users WHERE email=\"EMAIL@ADDR\"), subscription_id=1, subscription_type=\"regular\";' \
    "

ウェブアプリケーションを再読み込みすると、あなたのアカウントに有料機能が有効化されるはずです。クライアントサイドの機能を有効化するには、アプリの設定を開き、一般 >> オフラインアクティベーション メニューを選択し、オフラインプランの購入によって取得したアクティベーションコードを入力してください。

ステップ12 - ファイルアップロードのためにサーバーを構成する

ファイルアップロードはStandard Notesの有料機能であり、オフラインプランを購入しないと動作しません。ファイルアップロードのためにカスタムAPI URLは有効にしましたが、それでも動作しません。それを動作させるためには、アップロードディレクトリに適切な権限を与える必要があります。アップロードは~/standardnotes/uploadsディレクトリに保存されます。権限を変更するために、以下のコマンドを実行してください。

sudo chmod -R 775 data
sudo chmod -R 755 uploads
sudo chown -R 1001.1001 uploads

現在、Standard Notesはすべてのユーザーに対してアップロード制限をゼロに設定しています。これは、手動で割り当てられない限り、ユーザーはファイルをアップロードできないことを意味します。したがって、ファイルアップロードを機能させるための最終ステップは、有料ユーザーアカウントのファイルクォータを有効にすることです。これを、データベースコンテナ内でSQLクエリを実行することで行うことができます。

データベースコンテナ内のMySQLシェルにログインします。

docker exec -it db-standalone mysql -u std_notes_user -p
Enter password:

MySQLシェル内に入ったら、データベースのリストを確認しましょう。

mysql > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| standard_notes_db  |
+--------------------+
3 rows in set (0.01 sec)

スタンダードノートのデータベースに切り替えてください。

mysql > use standard_notes_db;

上記の有料ユーザーに10GBのファイルクォータを追加するために、以下のSQLコマンドを実行してください。

mysql> INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="[email "));

ここで10737418240は合計バイトを指し、これは10GBに相当します。この数値は必要に応じて変更できます。

MySQLシェルとデータベースコンテナから退出します。

mysql > exit

ステップ13 - スタンダードノーツサーバーとウェブアプリをアップグレードする

Standard Notesサーバーのアップグレードの最初のステップは、既存のコンテナを停止して削除することです。

cd ~/standardnotes
docker compose stop
docker compose remove --orphans

最新の .env、localstack_bootstrap.sh、および Docker Compose ファイルを GitHub リポジトリから取得してください。必要な変更を加え、既存のファイルを更新されたものと置き換えてください。

サーバーコンテナを再起動してください。

docker compose up -d

あなたの更新された同期サーバーが現在稼働しています。

ウェブアプリのディレクトリに切り替えます。

cd ~/snotes-app

Webアプリのルートディレクトリに切り替えます。

cd packages/web

既存のプロセスを停止してください。

pm2 stop api

メインアプリディレクトリに戻ります。

cd ~/snotes-app

GitHubリポジトリから最新の変更をプルします。

git pull

ウェブディレクトリの中に戻ってください。

cd packages/web

プロセスを開始してください。

pm2 start api

あなたのウェブアプリは更新されるべきです。

結論

これで、Rocky Linux 9マシンにStandard Notesサーバーをインストールおよび設定するためのチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。

関連記事: