コンテンツへスキップ

Synologyを用いたWEBサーバーへのサイト追加

前提

Synologyでドキュメントルート、外部公開設定

WEB公開するフォルダ(ドキュメントルート)作成と、登録するドメイン名を登録します。
「Web Station」の「仮想ホスト」より「作成」ボタンより、Virtual Hostの新規追加を行います。

「ドキュメントルート」設定項目の「検索する」ボタンより、表示される設定画面より「フォルダの作成」ボタンを押し、新規作成するフォルダ名を登録します。

新規サイトに Synology 無料SSL証明書導入(Let’s Encrypt)設定

「コントロールパネル」の「セキュリティ」を選択します。

「セキュリティ」画面より、「証明書タブ」を選択し、新規サイトの証明書を追加します。

Raspberry PiのApache2にドメイン名指定の仮想ホスト

サブドメインを用いて、Apache2のVirtualHostを設定します。
Raspberry Piで運用している「aaa.com」がApacheのメインサイトに設定されている環境で、「bbb.aaa.com」のサブドメインに新規WEBサーバーバーチャルホストを設定します。WEBリクエストのURLの違いにより、表示する/利用するWEBサーバーの切替が行われます。

前提条件など

VirtualHost向け設定ファイル

テンプレートファイル「000-default.conf」をコピーして、今回作成するVirtualHost設定ファイルの雛形を作成し、設定ファイルを作成します。

コピーして作成したbbb.aaa.com.confファイルを編集。

VirtualHost設定の有効化とApache2への反映

a2ensite コマンドを用いて、作成した設定ファイルをAvailable からEnabelへ。

Apacheを再起動して、VirtualHostは利用可能となります。
sudo service apache2 restart

Raspberry PiにLet's EncryptのSSL証明書

現時点ですと、EncryptのSSLを発行する際に、通常の方法ですとポート80を証明書を発行したい(SSL証明書を受け取りたい)サーバーで開放する必要がありました。
よって、Raspberry Piでは、自己証明書SSLを利用しておりました。Raspberry Piの自己証明書SSL
ポート80を利用しているSynologyは、Synologyの機能を用いて、Let's Encryptの証明書を導入しております。Synology無料SSL証明書導入(Let’s Encrypt)

最近の便利さには、日々関心しておりますが、今回の驚きも大きかったです。
Apacheの設定まで確認し、必要な証明書を確認し、各種設定含め自動実行出来ます。

cerbotおよびpython-cerbot-apacheの導入

python-cerbot-apacheをインストール祭に、次のパケケージもインストールされます。python3-augeas python3-certbot-apache

cerbot --apacheを実行し、SSL証明書発行およびapacheのSSL設定

cerbot --apacheを実行し、SSL証明書を設定したいドメインを選択し、SSL証明書の発行およびApacheのSSL関係設定を実施します。
実際には、対象ドメインの選択のみで、全て自動で設定されます。

cerbot renewで証明書更新をテスト

証明書の有効期限が1ヶ月未満になると、証明書の再取得が行われます。
コマンド実行をテストし、次のステップで、cronの定期実行ジョブとして、コマンドラインを登録します。

cronの定期実行ジョブ登録

以下の例では、毎週日曜日の深夜1時にcertbot renewが実行されるように登録しています。

 

 

LinuxからValue-domainのDDNS(Dynamic DNS)更新

関連記事:SynologyでValueDomain向けのDDNS設定方法

SynologyでのDDNS更新も良い機能だなと思いましたが、今回はオーソドックスにLinuxホストからValue DomainのDDNS更新方法です。
Raspberry Piで設定を実施しました。
VALUE-DOMAIN(バリュードメイン)

VALUE-DOMAINのIP更新方法

VALUE-DOMAINで本設定を行う際は、VALUE-DOMAINのポータルサイトよりIP更新時に用いるドメインのパスワードを取得する必要があります。
参考URL:https://www.value-domain.com/ddns.php?action=howto

ツールなどからのアクセス先(HTTP GET/POSTリクエスト)

https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=ドメイン名&p=パスワード&h=ホスト名&i=IPアドレス

パラメータ説明
d更新するドメインを指定します。
例:value-domain.com
p更新するドメインのパスワードを指定します。
例: 1234
h更新するドメインのホスト名を指定します。DNSレコード編集画面のホスト名と全く同じ仕様です。
例: *(全ホスト)、www、指定なしはホスト名なし
i更新するドメインのIPアドレスを指定します。指定しない場合は、自動的に接続者のIPアドレスが設定されます。
aaaaレコードが存在し、IPアドレスがIPv6フォーマットの場合、aaaaレコードのホストがアップデートされます。

Raspberry PiからVALUE-DomainのIPアドレス変更

DDNS更新のスクリプトファイル準備

設定ファイルを作成します。ドメイン名と取得したパスワードを記載します。

IPアドレスを更新するスクリプトです。
IPアドレス変更時に、VALUE-DOMAINにIP変更を通知します。

作成したファイルの実行権限を変更します。

定期実行登録(crontab登録)

2分、7分、12分と5分毎にスクリプトを実行し、IPアドレスが変更していないか確認を行うように、crontabにスクリプトを登録します。



Apache2系のインストール

絶対難しくなった。と思うのは私だけ?
設定ファイルを分割しすぎ、直感的に分からない。
Virtual Hostに、CGIモジュール導入で苦労したので、記事にしておきます。

Apache2をRaspberry Piへインストール

Apache「apache2」、SQLサーバー「 mariadb-server」、PHPのSQLモジュール「 php-mysql」をインストールします。
MySQLサーバー「mysql-server」をインストールしようとしましたが、「パッケージ 'mysql-server' にはインストール候補がありません」と表示されました。

MariaDB は MySQL の派生のようで、今後のスタンダードになっていくオープンソースのデータベースのようです。

Apache2の設定ファイル

設定ファイル編集方法

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
# /etc/apache2/
# |-- apache2.conf
# | -- ports.conf
# |-- mods-enabled
# | |-- *.load
# |
-- *.conf
# |-- conf-enabled
# | -- *.conf
#
-- sites-enabled
# `-- *.conf

conf-(available|enabled)、mods-(available|enabled)、sites-(available|enabled)、というディレクトリがあります。
confには設定ファイル、modsは拡張機能、sitesにはサイトの設定があります。
それぞれ「available」「enabled」の2つのフォルダが存在します。
設定ファイルを作成する際は、「available」フォルダに設定ファイルを作成し、次のコマンドで、設定ファイルを有効化、無効化します。

  • 有効化コマンド
    • a2enconf 設定ファイル有効化
    • a2enmod 拡張機能有効化
    • a2ensite サイト有効化
  • 無効化コマンド
    • a2disconf 設定ファイル無効化
    • a2dismod 拡張機能無効化
    • a2dissite サイト無効化

有効化、無効化のコマンドにより、「available」フォルダ内の設定ファイルのリンクが、「enabled」フォルダ内に作成・削除されます。

設定ファイル変更後は、apacheサービスの設定再読み込みや再起動が必要です。

設定ファイル編集

拡張機能をする際は、有効化されているモジュールを調べます。

「cgi_module」は、デフォルトでは有効になっていないので、以下のコマンドでCGIが利用出来るように変更します。

CGIを利用したいフォルダに「 +ExecCGI」を追記し、CGIが動作するように設定します。以下は、トップフォルダでCGIを利用出来るようにした際の例です。

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews +ExecCGI
AllowOverride None
Order allow,deny
allow from all
</Directory>

サービス操作

参考にApache2のサービス操作のコマンドを載せておきます。

参考にさせて頂いたサイト

めざましじゃんけん 画像検出システム

めざましじゃんけん結果

テレビ画像よりフジテレビ、めざましテレビ内で実施されるめざましじゃんけんの結果を蓄積します。めざましじゃんけんは、デジタル放送のコンテンツであり、B-CAS(ビーキャス)カードを用いた受信装置により、データ放送を画面表示させ、リアルタイムに参加する必要があります。番組録画しても、データ放送のコンテンツは録画することは出来ません。

  1. 環境準備(インストール)

  2. Darknet/YOLOで学習モデル準備

  3. システム実装と結果公開

  4. プログラム関連技術

本システム実装に関連した、プログラム関係のTips。

    • PHP
    • Python
  1. 【機械学習導入】ニューラルネットワークChainerフレームワーク

    • 導入方法
    • 機械学習
    • Out of Memoryへの対応
    • 学習モデルのRaspberry Piでの実行

Raspberry Piの自己証明書SSL作成

自己証明書でなく無料で利用ができるLet's Encript(参考記事(Let's Encrypt導入))を利用したかったのですが、メインのWEBサーバーであるSynologyがPort80を利用しており、現時点のLet's Encrypt証明書を入手するツールにおいて、Port80以外の8080などでhttp通信を待ち受けているサイトでの簡単なSSL証明書作成および入手方法が見つかりませんでした。
手動発行やSynologyからフックさせる方法はありそうでしたが、今後の3ヶ月毎の自動更新などを考え、利用を諦めました。HTTPのポート番号指定「--http-01-port 8080」やHTTPSのポート番号指定「--tls-sni-01-port 4443」を実施しましたが、最初にポート80へのアクセスが発生しておりました。
そこで、 今回は昔ながらの自己証明書作成を実施しました。

現在運用しているシステム構成イメージ(API連携プラットフォーム
SynologyとRaspbery Piの共存構成イメージ

SSL証明書作成

以下コマンド一覧です。

apacheのSSL関係の構成定義ファイルに作成した証明書を登録します。「/etc/apache2/sites-available/default-ssl.conf」
しかし、現時点で作成したSSLのサーバ証明書はパスワードが設定されているので、apacheサーバ再起動時にパスワード入力が必要となるので、パスワード不要なサーバー証明書を後程作成しなおします。

以下、コマンドログです。

apache2/httpサービス再起動時にパスワード入力不要とする

  1. 現在のserver証明書のバックアップ
  2. パスワード無しの証明書を作成

元ファイルのバックアップ

パスフレーズの解除

apache2サービスを再起動し、パスワードが要求されないことを確認し、すべての手順終了です。

Webhooksの利用

Webhooksは、WEB APIとなります。
Webhook(Webコールバック、HTTPプッシュAPIなど)はあるアプリケーションから別のアプリケーションに対してリアルタイムな情報提供を実現するための仕組みです。
Web/URLアクセスを行います。
Webhooksは、WEB受信とWEB送信側の機能を実現出来ます。

  1. SynologyやRaspberry PiからのURLアクセスを受け付けるWebhook
  2. WebhookからSynologyやRaspberry PiへアクセスするWebhook

の2つの利用形態があります。

IFTTTは、「if(もし) this(この状態) then(の場合は) that(それをする)」なので、
Synologyなどが、IFTTT処理の実行を開始させたい場合は、SynologyよりWebhookを実行します。(SynologyよりWebhookにURLアクセスします)

IFTTT処理でアクションさせたい処理がSynology側などにある場合は、WebhookよりSynologyへURLアクセスさせます。

トリガー(That)

外部よりWebhookにURLアクセスする必要があります。
その際のアクセスするURLや、アクセスに必要なアクセスキーは、Webhooksの「Documation」画面より入手可能です。
{event}はトリガーごとに設定するので、IFTTTでレシピを作成する際に指定します。

実際にThis部分を指定する画面は以下となります。
Event Nameを設定する部分があり、ここで、設定した文字列がURL部分{event}となります。

例:https://maker.ifttt.com/trigger/test/with/key/XXXXXXXXXXXXXXXXXXXXXX
トリガーアクセス時に変数を加える場合は、GETやPOSTで変数を与えます。

アクション(This)

 

Webhookより外部にURLアクセスを実施します。
その際のアクセスするURLや、自分がSynologyなどに準備したPHPファイルなどのWEBコンテンツとなります。
アクセスURLにWEBアクセス方法GETやPOSTなど、そしてコンテンツタイプおよびBodyに変数を指定します。
日本語を扱う場面も多いと思うので、URLエンコードされたコンテンツの送信をオススメします。

 

前提条件

  • Synologyのサーバの公開設定が終わっている
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからサーバーにアクセスできる

DDNS(Dynamic DNS)ダイナミックDNS/動的DNS

インターネットを利用する際に必要となる、パブリックIPアドレス(インターネットにおける世界で一意なアドレス)。
ドメイン(miki-ie.comなど)は、人にもわかりやすい表札や屋号のようなもの。
DNS(Domain Name Serivce)は、ドメインとIPアドレスの割り当てを行います。

DDNSとは、IPアドレスが頻繁に変わるホストに固定的にドメイン名を割り当て、アドレス変更に即座に追随してDNS情報を更新するシステム。 また、その仕組みを利用して提供される動的なDNSサービス。

企業向けなどには固定IPアドレスが利用され、DNS(Domain Name System)運用においてもIPアドレスとドメイン名を固定的に長期間結びつけた運用となる。
個人宅など、一般のインターネットプロバイダ(ISP)を利用した際は、インターネットプロバイダより、一時的なIPアドレスが割り当てられる。

よって、通常の自宅環境でドメインを運用した際は、利用するIPアドレスに合わせてDNSレコードを変更する必要があります。
www.miki-ie.com(不変に利用を続けたい) ⇔ Public IPアドレス(ISP接続毎に変わる)

独自ドメイン取得

DDNS向けに無料でドメインを貸してくれるWEBサービスもありますが、永続的な無料での利用などが約束されているわけでもなく、WEBサイトなどを運営する際は、独自ドメインを利用するのも悪くないと考えています。

VALUE-DOMAIN(バリュードメイン)

  • 500種類以上の独自ドメインを取り扱い。
  • 自動更新設定、一括ドメイン取得・更新など運用がしやすい
  • ネームサーバー/DNSレコード設定/Whois代行などドメイン運用の基本機能も標準装備
  • 「バリューサーバー」「コアサーバー」「XREA」などのホスティングとの連携が容易



VALUE-DOMAINでのDDNS利用時のIP更新方法

VALUE-DOMAINで本設定を行う際は、VALUE-DOMAINのポータルサイトよりIP更新時に用いるドメインのパスワードを取得する必要があります。
参考URL:https://www.value-domain.com/ddns.php?action=howto

ツールなどからのアクセス先(HTTP GET/POSTリクエスト)

https://dyn.value-domain.com/cgi-bin/dyn.fcg?d=ドメイン名&p=パスワード&h=ホスト名&i=IPアドレス

パラメータ説明
d更新するドメインを指定します。
例:value-domain.com
p更新するドメインのパスワードを指定します。
例: 1234
h更新するドメインのホスト名を指定します。DNSレコード編集画面のホスト名と全く同じ仕様です。
例: *(全ホスト)、www、指定なしはホスト名なし
i更新するドメインのIPアドレスを指定します。指定しない場合は、自動的に接続者のIPアドレスが設定されます。
aaaaレコードが存在し、IPアドレスがIPv6フォーマットの場合、aaaaレコードのホストがアップデートされます。

SynologyへVALUE-DOMAINのDDNS更新を設定

SynologyへVALUE-DOMAIN向けのプロバイダ登録を実施

「コントロールパネル」「外部アクセス」「DDNS」「カスタマイズ」よりDDNSプロバイダを新規登録します。
Query URLへは、以下を登録し、一部はSynologyの設定画面で設定する設定値を利用するために、準備されている変数を利用します。

  • ユーザー名:__USERNAME__ d=ドメイン名
  •  パスワード:__PASSWORD__ p=パスワード
  •  ホスト名:__HOSTNAME__ 利用しない
  • 外部アドレス:__MYIP__ i=IPアドレス

※ ホスト名(h=ホスト名)は、「 *(全ホスト)」を固定指定。

 

SynologyへVALUE-DOMAIN向けDDNS更新を設定

「コントロールパネル」「外部アクセス」「DDNS」「追加」より作成したサービス・プロバイダVALUE-DOMAINに必要な情報をINPUTします。
※ ホスト名は何を設定しても、実際には「*」となります。このフォームに「*」のしては不可能な仕様となっておりました。



API連携プラットフォーム概要(Overview)

ラズベリーパイ(Raspberry Pi)とNAS(Synology)の使い分け

記載済み記事

ネットワーク構成

SynologyのWEBサーバとRaspberry PiのWEB APIを外部公開にする必要があります。
SynologyとRaspberry Piの両方をWEBサーバーとして、外部公開します。
通常WEBサービスでは、ポート80(http://)と443(https://)が利用されます。
家庭向けの製品では、パケットの到着ポートで、アクセスURLを見て、パケット送付先を振り分けることは出来ないので、2台のWEBサーバを公開する際は、1台を別ポートで運用します。

NAT / Port Forward / Virtual Server設定

インターネット側IP+Port を ローカルネット側IP+Port の転送ルールを設定します。この技術や機能名がNAT、Port ForwardやVirtual Serverと呼ばれております。

パブリック側プライベート側
(グローバルIP)Port:80(Synology プライベートIP)Port:80
(グローバルIP)Port:443(Synology プライベートIP)Port:443
(グローバルIP)Port:8443(Raspberry PiプライベートIP)Port:443

この際に、グローバル側からのRaspberry Piへのアクセス方法は、「https://www.miki.-ie.com:8443」とポート番号を指定したアドレスとなります。

複数DOMAIN(ドメイン)の運用

複数の独自ドメインでWEBサーバを運用します。これは、WEBサーバのVirtual Server機能で実現します。Synologyでは、簡単に設定が可能ですので、設定方法などは割愛します。