私は実家である長野県上水内郡飯綱町にメインシャックがあり、自宅の上田市からインターネット経由のリモート操作でCWのコンテスト中心にオンエアしています。
一方、最近自宅にもIC-705を購入して無線設備を構築し始めた関係で、飯綱町でログ入力した直後に、自宅の上田市でログを入力したいというケースがたまに発生することがあります(とくにFT8のログ連携している関係で)。
今までは、OneDrive経由のファイル同期でHamlogのデータを共有していましたが、同期に時間がかかることもあり、何度か誤って同期前に他方で入力してログを消失させてしまうという事故が発生しかけました。これを解決するために、同期ではなく「共有」できないか検討した結果、このBlogを動かしているWebサーバーにWebDavを構築してファイル共有をしてみることにしました。
1. 構成図
まずは、ざっくりとした構成図。本Blog用Webサーバーのストレージの一部をWebDavファイルサーバー用のストレージとしてインターネットに公開します。認証に関しては若干セキュリティは甘いですが、HTTPSのベーシック認証で対応します(守りが弱いのでサイバー攻撃しないでくださいね笑)。
WebDavサーバーへのアクセスは、Windows10標準のWebDavクライアントを使う予定でしたが、PC起動後の再接続に難があるのと、かなりの頻度でHamlogからのアクセスに失敗するためあきらめて、RaiDriveというフリーのクライアントを双方に導入してドライブマウントしました。
RaiDriveのフリー版は、ファイルロックに対応していないため誤って上書きしないよう気を付けなければいけませんが、自分一人で使う分にはさほど問題ないでしょう。
WebDavサーバー(Blogサーバー)はインスタンスのスナップショットを自動で1日に1回、1週間分とっていますが、万が一に備えてバックアップをOneDriveに置くことにします。
2. WebDavサーバーの設定
以下は細かなサーバー側設定です。自分用の覚書です。
サーバースペック等は以下のとおりです。まだCentOS 8を立ち上げたばかりで素のままdnf で入る環境を使っているので、Apache、OpenSSLなどは古いです。そのうちソースビルドして最新に追従したいと思います。
・インスタンス AWS EC2 t3a.nano 2core, RAM 512MB(+2GB Swap), Storage 16GB
・CentOS 8, Apache 2.4.37, OpenSSL 1.1.1c
-1. Webサーバー(Apache2.4)をインストール
CentOS 8のインスタンスにSSMログインして、以下の手順でインストールしていきます。
$ sudo -i # dnf -y install httpd httpd-tools httpd-devel httpd-manual vim # systemctl start httpd # systemctl enable httpd
-2. バーチャルホスト設定
お名前comなどでWebDav用のドメインを取得し、バーチャルホストを設定します。ここでは dav.example.com とします。/home/dav 、/home/dav/webdav ディレクトリを作成してApacheからアクセスできるようにしておきます。
# cd /home # mkdir dav # cd dav # mkdir webdav # chown apache. -R /home/dav # chmod 777 -R /home/dav # cd /etc/httpd/conf.d # vim vhost-http.conf
<VirtualHost *:80> DocumentRoot /home/dav ServerName dav.example.com <Directory "/home/dav/"> Options FollowSymlinks Includes AllowOverride All AddType text/html .html Require all granted </Directory> #RewriteEngine on #RewriteCond %{SERVER_NAME} =dav.example.com #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> -------------------------------- :wq
# systemctl restart httpd
-3. WebサーバーをHTTPS対応する
無料で利用できるSSL証明書 Let’s Encrypt を導入します。対話式で進めていきます(詳細省略)
# dnf module -y install python36 # dnf -y install gcc mod_ssl python3-virtualenv redhat-rpm-config augeas-libs libffi-devel openssl-devel # cd /usr/local/src # curl -O https://dl.eff.org/certbot-auto # mv certbot-auto /usr/local/bin/certbot # chmod 700 /usr/local/bin/certbot # certbot
SSL証明書の発行に成功したら、 -le-ssl が付加されたファイルが自動生成され、HTTPSバーチャルホストに対応されます。
-4. WebDav設定する
Apacheを入れるとWebDavは自動で入るようですが、設定が必要なので設定を行います。ここでは先ほど作成した /home/dav/webdav をファイル共有ディレクトリとします。ここでは簡易的にベーシック認証のみとしますが、IPアドレス制限をしたい場合はコメントアウトしてある Require ip を設定すればOKです。
# cd /etc/httpd/conf.d # vim webdav.conf
<IfModule mod_dav_fs.c> DavLockDB /var/lock/apache_dav2/DAVLock </IfModule> <Directory "/home/dav/webdav"> Dav On Options All <RequireAll> # Basic基本認証設定ここから AuthType Basic AuthName "WebDav Auth" AuthUserFile /etc/httpd/conf.d/.htpasswd_webdav Require valid-user <RequireAny> # IP制限設定ここから #Require ip xxx.xxx.xxx.xxx #Require ip yyy.yyy.yyy.yyy # IP制限設定ここまで </RequireAny> </RequireAll> </Directory> -------------------------------- :wq
WebDav用のロックファイルを設定します。
# vim /etc/tmpfiles.d/dav.conf
D /var/lock/apache_dav2/ 0777 root root - D /var/lock/apache_dav2/DAVLock 0777 root root - -------------------------------- :wq
-5. WebDavへのアクセスユーザーを作成する(Basic認証)
# htpasswd -c -b /etc/httpd/conf.d/.htpasswd_webdav ユーザ名 パスワード
-6. Webサーバーを再起動してWebDavサーバー完成
# systemctl restart httpd
https://dav.example.com/wevdav/ に適当なブラウザでアクセスしてベーシック認証が通ればWebDavサーバー側の設定成功です。
3. WebDavクライアントの設定
それぞれのWindows PCに RaiDrive をインストールして、ドライブマウントします。
-1. RaiDriveのダウンロード、インストール
以下からダウンロードしてWindows PCにインストールします。
https://www.raidrive.com/download
-2. RaiDriveの設定
インストールが済んだら、WevDavを F:ドライブ にマウントしてみます。
ちなみにmacOSの場合は、Finder – 移動 – サーバーへ接続… からマウントできます。
4. Hamlog のログを WebDavに置いて、開く
Hamlogを起動したときにたまに読み込めないことがありますが、1,2回リトライすれば読み込めると思います。Windosw10標準のWebDavクライアントだと10回くらいリトライしてもダメな時があったので、RaiDriveは比較的優秀なのではないでしょうか。
ただ前述しましたとおり、フリー版はファイルロック機能がないため同時アクセスしてしまうと誤って上書きしてしまう恐れがあるので注意が必要です。
同じファイルを直接いじるので、ファイル同期のようにタイムラグがなくリアルタイムでファイル共有ができるようになりました。ちゃんとファイルロックができて、Hamlogの共有オープン機能が利用できるのがベストですが、とりあえずこれで運用してみようと思います。