Rocky Linux 9にStandard Notesサーバーをインストールする方法
Rocky Linux 9にStandard Notesサーバーをインストールする方法
このページで
- 前提条件
- ステップ1 - ファイアウォールを設定する
- ステップ2 - DockerとDocker Composeをインストールする
- ステップ3 - Nginxをインストールする
- ステップ4 - SSLをインストールする
- ステップ5 - スタンダードノートをダウンロードして設定する
- ステップ 6 - スタンダードノートサーバーを開始する
ステップ7 - スタンダードノートウェブアプリをインストールする
- Gitをインストールする
- NodeJSをインストールする
- Yarnをインストールする
- PM2パッケージマネージャーをインストールします。
- ウェブアプリをインストールする
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サーバーをインストールおよび設定するためのチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。


