Ubuntuサーバー(16.04)でqbittorrent-nox
を実行しています。
ダイナミックDNSアドレスを使用してWebUIにアクセスします。
Githubページには、HTTPSを設定するためのチュートリアルがありますが、自己署名証明書のみを使用しています。
certbot
を--webroot
および--standalone
オプションとともに使用しようとしましたが、役に立ちませんでした。主な問題の1つは、webUIのファイルが実際にどこから提供されているのかわからないことです。そうしないと、--webroot
が機能するはずです。
誰かが私がそれを機能させる方法を説明できますか?
Archlinuxでもこれを行うことができましたが、Ubuntuでも同じだと思います。
次のようにcertbotを実行します。
Sudo certbot certonly --manual -d yourhostname.org
指示に従ってください。ある時点で、certbotは、ホスト名を所有していることを確認するためにWebサーバーを実行するように指示します。また、Pythonで単純なWebサーバーを実行するためのコマンドもいくつか提供されます。これらのコマンドを、サーバー上の新しいシェルでrootとして実行します。
必ずポート80
をルーターからqbittorrent-nox
をホストしているサーバーに転送し、サーバーファイアウォールで同じポートを開いてください。 ufw
を使用する場合、これは必要なコマンドです。
Sudo ufw allow WWW
WWW
は、ポート80での接続を許可するための単純な構成です。
検証手順が完了すると、キーファイルと証明書ファイルが/etc/letsencrypt/live/yourhostname.org
にあります。 privkey.pem
とcert.pem
をqbittorrent-nox
web-uiにコピーして貼り付けると、完了です。
PS。この最後に、pythonWebサーバーを強制終了できます。
PPS。サーバーでポート80
を使用していない場合は、ufw ALLOW
ルールおよびルーターのポート転送からポートを削除することもできます。
基本的に、前のセクションで示した手順を自動化する必要があります。
実行するコマンドは次のとおりです。
certbot renew
--manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh \
--manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh \
--post-hook /etc/letsencrypt/scripts/post-hook.sh
hooks
は、基本的にcertbotによって実行されるスクリプトです。 certbotは、いくつかの環境変数をスクリプトにエクスポートします。詳細については、 certbot docs を参照してください。
スクリプトは/etc/letsencrypt/scripts
に配置されます。このフォルダーを作成し、そこにスクリプトを配置するか、他の任意のフォルダーを使用します。
auth-hook.sh
は、検証手順の前に実行されます。 CERTBOT_TOKENを公開するための単純なWebサーバーをセットアップします。
#!/bin/zsh
ufw allow WWW
mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" $CERTBOT_VALIDATION > .well-known/acme-challenge/$CERTBOT_TOKEN
$(command -v python2 || command -v python2.7 || command -v python2.6) -c "import BaseHTTPServer, SimpleHTTPServer; s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); s.serve_forever()" &> /dev/null &
cleanup-hook.sh
は、証明書が更新されているかどうかに関係なく、検証手順の後に実行されます。これを使用して、Webサーバーをクリーンアップします。
#!/bin/zsh
kill $(ps aux | grep SimpleHTTPServer | awk 'NR==1{print $2}')
rm -rf /tmp/certbot/public_html/.well-known/acme-challenge
ufw delete allow WWW
post-hook.sh
は、証明書が実際に更新されたときに実行されます。 /home/user/.config/qBittorrent/qBittorrent.conf
を更新するために使用します。
#!/bin/zsh
systemctl stop qbittorrent.service &&
/etc/letsencrypt/scripts/update_config.py \
--hostname $CERTBOT_DOMAIN \
--configfile /home/user/.config/qBittorrent/qBittorrent.conf &&
systemctl start qbittorrent.service &&
注意:qbittorrent
構成は、それを実行しているユーザーのホームフォルダーに配置されます。構成に応じてこのスクリプトを編集します。
update_config.py
はqBittorrent.conf
を更新します。 ConfigParserモジュールがpythonファイル(key=value
)を編集するのに非常に便利だったので、INIを使用しました。私より賢い人は、おそらくsed
またはawk
で同じことを達成できます。
#!/usr/bin/python3
import argparse
import configparser
Config = configparser.ConfigParser()
Config.optionxform = str
parser = argparse.ArgumentParser(description='Updates qbittorrent config.')
parser.add_argument('--hostname', required=True)
parser.add_argument('--configfile', required=True)
args = parser.parse_args()
with open('/etc/letsencrypt/live/' + args.hostname + '/cert.pem', 'r') as f:
cert = f.read()
with open('/etc/letsencrypt/live/' + args.hostname + '/privkey.pem', 'r') as f:
key = f.read()
cert = cert.replace('\n', '\\n')[:-2]
cert = "\"@ByteArray(" + cert + ")\""
key = key.replace('\n', '\\n')[:-2]
key = "@ByteArray(" + key + ")"
Config.read(args.configfile)
Config["Preferences"]["WebUI\HTTPS\Certificate"] = cert
Config["Preferences"]["WebUI\HTTPS\Key"] = key
with open(args.configfile, 'w') as f:
Config.write(f, space_around_delimiters=False)
必要に応じてこれらのスクリプトを編集します。次に、--dry-run
オプションを指定して前のコマンドを実行してみます。これにより、証明書の有効期限が切れていない場合でも、更新手順が実行されます。
certbot renew --manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh --manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh --post-hook /etc/letsencrypt/scripts/post-hook.sh --dry-run
すべて問題がなければ、cronジョブを設定できます。
# EDITOR=vim crontab -e
00 04,16 * * * sleep $((RANDOM % 60)); certbot renew --quiet --manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh --manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh --post-hook /etc/letsencrypt/scripts/post-hook.sh
ジョブは毎日04:00と16:00に実行されます。ランダムスリープは、選択した時間内にランダムな分を選択します( certbot docs で提案されています)。
--quiet
オプションを追加します。cronジョブに適しています。