[Anki]データ同期サーバ

TIPS

システムの常駐化(systemd)からApacheのプロキシ設定まで、ステップバイステップで詳しく解説します。

1. 必要なパッケージのインストール

Ankiの同期サーバーエンジンを動かすためのPython環境を準備します。システムを汚さないように「仮想環境(venv)」を使うのがベストプラクティスです。

# パッケージリストの更新
sudo apt update

# Python3と仮想環境構築ツールのインストール
sudo apt install -y python3 python3-venv python3-pip

2. 専用ユーザーとディレクトリの作成

セキュリティの観点から、root 権限ではなく専用のユーザーでサーバーを動かします。

# ankiという名前のユーザーを作成
sudo useradd -m -s /bin/bash anki

# ankiユーザーに切り替え
sudo su - anki

# データ保存用のディレクトリを作成
mkdir ~/anki-data

3. Ankiサーバーのインストール

引き続き anki ユーザーのまま、Pythonの仮想環境を作成してAnki本体(Rustエンジン内包)をインストールします。

# 仮想環境を作成
python3 -m venv anki-venv

# 仮想環境を有効化
source anki-venv/bin/activate

# Ankiをインストール(ここでコンパイル済みのRustエンジンも入ります)
pip install --no-cache-dir anki

# 仮想環境から抜ける(ankiユーザーからも抜けて元のユーザーに戻る)
deactivate
exit

4. systemdでの自動起動(デーモン化)設定

サーバー再起動時にも自動で立ち上がり、裏側で常に動き続けるように systemd サービスを作成します。

1. サービスファイルの作成

sudo nano /etc/systemd/system/anki-sync-server.service

2. 以下の内容を貼り付けます

SYNC_USER1user:password はご自身のお好きなものに変更してください。また、SYNC_HOST=127.0.0.1 とすることで、Apache経由以外の直接アクセスを遮断し、セキュリティを高めます。

[Unit]
Description=Anki Sync Server
After=network.target

[Service]
Type=simple
User=anki
Group=anki
WorkingDirectory=/home/anki
# 同期用のユーザー名とパスワード
Environment="SYNC_USER1=user:password"
# データの保存先
Environment="SYNC_BASE=/home/anki/anki-data"
# ローカルからのアクセスのみ許可(Apache経由にするため)
Environment="SYNC_HOST=127.0.0.1"
Environment="SYNC_PORT=8080"
# 仮想環境のPythonを使ってサーバーを起動
ExecStart=/home/anki/anki-venv/bin/python -m anki.syncserver
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3. サービスの有効化と起動

# systemdの設定を再読み込み
sudo systemctl daemon-reload

# 自動起動を有効化して、今すぐ起動
sudo systemctl enable --now anki-sync-server.service

# ステータス確認(active (running) となっていれば成功)
sudo systemctl status anki-sync-server.service

5. Apacheのリバースプロキシ設定

外部からの通信を受け取り、ローカルで動いているAnkiサーバー(ポート8080)へ橋渡しします。

1. 必要なApacheモジュールの有効化

sudo a2enmod proxy proxy_http headers
sudo systemctl restart apache2

2. Apache設定ファイルの作成

sudo nano /etc/apache2/sites-available/anki.conf

3. 以下の内容を記述します

anki.yourdomain.com の部分は、ご自身のドメインに置き換えてください。(すでにSSL化が済んでいる前提の設定です)

<VirtualHost *:443>
    ServerName anki.yourdomain.com

    # SSL証明書の設定 (Let's Encrypt等のパスを指定)
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/anki.yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/anki.yourdomain.com/privkey.pem

    # リバースプロキシの基本設定
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    # Ankiサーバー特有のタイムアウト対策(大きなメディアファイルの同期用)
    TimeOut 600
    ProxyTimeout 600

    # ログ出力設定
    ErrorLog ${APACHE_LOG_DIR}/anki_error.log
    CustomLog ${APACHE_LOG_DIR}/anki_access.log combined
</VirtualHost>

4. 設定の反映

# サイト設定を有効化
sudo a2ensite anki.conf

# 構文エラーがないか確認 (Syntax OK と出ればOK)
sudo apachectl configtest

# Apacheを再読み込みして適用
sudo systemctl reload apache2

これですべての構築が完了です!

クライアント側(Ankiアプリ)から https://anki.yourdomain.com/ 末尾のスラッシュは必須)にアクセスし、同期をテストしてみてください。

コメント

タイトルとURLをコピーしました