システムの常駐化(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_USER1 の user: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/ (末尾のスラッシュは必須)にアクセスし、同期をテストしてみてください。

コメント