コンテンツへスキップ

Let's EncryptSynologyのWEBサーバを用いると、管理画面より簡単に無料のSSL証明書が利用出来ます。3ヶ月有効な証明書を発行し、利用を継続している限り、自動更新してくれます。

前提条件

  • SynologyのWEBサーバがセットアップされている
  • SynologyのWEBサーバの公開設定が終わっている
    証明書発行時に、設定が完了していないと失敗します

    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからWEBサーバにアクセスできる

SSL証明書導入

企業サイトは、ほぼ100%SSL化(https://)でのWEBサイト公開になってきています。SSL証明書を導入することで、SSL / TLSで暗号化された通信が行われます。当然、セキュリティやプライバシー的に非常に重要な技術となります。
Google社の最近の取り組みを少し纏めておきます。SSL化されていないサイトには警告が出される時代となってきました。

Let's Encrypt導入(無料で利用可能なSSL証明書)

「Let's Encrypt」という、無料で利用できる SSL / TLS サーバー証明書があります。以前は、商用利用を前提とした証明書を利用するか、自分で個人的に発行する証明書(自己認証局)を利用するしかhttpsのウェブサイトは運営できませんでした。自宅サーバーなどでは、自己認証局の証明書を利用しておりましたが、ブラウザからは警告が出たりと通信は暗号化出来るが、スマートなWEB公開方法ではありませんでした。

「Let's Encrypt」が登場したのですが、コマンドラインを複数実行したり、WEBサーバーの設定を変更したりと、導入の敷居は低くはなかったです。
Synologyでは、このSSL証明書が複数の手順で簡単に利用可能となります。

Let's Encrypt 総合ポータル

Synologyでの無料SSL証明書(Let's Encrypt)導入方法

Synology画面の「コントロールパネル」「セキュリティ」を開きます。

証明書タブより新しい証明書を追加します。

新規証明書のタイプでLet's Encryptを選択します。

証明書情報を登録します。

サブドメインを利用する際は、サブジェクトの別名に登録します。残念ながら、記事掲載時点では、サブドメインすべて(*:アスタリスクには対応していませんでした)
「適用」ボタンを押すと、証明書の発行依頼、受領を実行してくれます。

発行した証明書のWEBサイトへ割り当て

証明書画面の「構成」ボタンを押し、WEBサイトに発行した証明書の割り当てを行います。複数のVirtual Hostを運用している際には、大変便利な機能になります。
この設定により、WEBサーバの設定も自動的に実施されるので、追加の設定などはありません。
記事の先頭にも記載しましたが、証明書は自動更新されるので、基本的にメンテナンスフリーで利用出来ます。

前提条件

  • SynologyのWEBサーバがセットアップされている(Apach HTTP Server)
    Wordpressリンク設定(パーマリンクの設定を.htaccessで設定する必要があり、NginxでなくApache HTTPを利用しました)
  • SynologyのDBサーバがセットアップされている(Maria DB)
  • SynologyのWEBサーバの公開設定が終わっている
    • DNSで名前解決ができる、固定IPやダイナミックDNSを利用
    • ルーターのNAT / Port Foward / Virtual Serverの設定が出来ており、インタネットからWEBサーバにアクセスできる

WordPressインストール

WEBサーバーの設定確認

Synologyの管理画面より「Web Station」「PHP」設定を確認します。
各種拡張機能がインストールされている(チェックボックスにチェックが入っている)を確認します。

WordPressをインストール

SynologyパッケージセンターよりWordpressをインストールします。
インストール後、「開く」ボタンよりWordpressへアクセスし、初期設定を行います。

SynologyからWordpressパッケージをインストール

Virtual Serverを設定

SynologyのWordpressインストールでは、/wordpressにインストールされます。

  • Synology内フォルダ「web/wordpress」にインストール
  • WEBアクセス時のURL「miki-ie.com/wordpress」となります

URLトップ(www.miki-ie.com)でアクセスさせたい場合は、SynologyのVirtual Server設定で、アクセスURLとSynology内フォルダ(ドキュメントルート)の設定を行います。
以下の例では、「miki-ie.com」「www.miki-ie.com」へアクセスした場合に、Wordpressがインスールされたドキュメントルートを指定します。

WordPressパーマリンク設定とApacheサーバー「.htaccess」修正

SynologyでWordpressをインストールすると、自動的にWordpressをインストールした際に「.htaccess」ファイルが作成されます。
Virtual Server設定でURLトップページでWordpressへアクセス出来るようにしたので、「.htaccess」ファイルの設定変更しなければ、Wordpressのパーマリンク設定が利用出来ません。
基本の?P=123でのURLアクセスのみページ表示されます。
検索エンジンの検索結果などで有利になるようには、パーマリンク設定が推奨されます。(SEO対策)
Wordpressパーマリンク

原因は、「/wordpress」のインストールフォルダに対して「/」のトップフォルダーアクセスに修正したことが原因であり、.htacessファイルを以下のように修正します。

@Synology:~$ cat /volume1/web/wordpress/.htaccess

# Synology PHP
AddHandler default-handler .htm .html .shtml
AddHandler php-fastcgi .php
AddType text/html .php
Action php-fastcgi /php56-fpm-handler.fcgi
# Synology PHP

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

 

前提条件

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールします。 参考ページ

@raspberrypi:~/google-home-notifier $ node -v
v10.16.0
@raspberrypi:~/google-home-notifier $ node npm -v
6.9.0

参考にさせていただいたページです。

GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます
Google Home に任意のテキストを喋らせる
GitHub-google-home-notifier
google-home-notifierで"Error: get key failed from google"とエラーが出る問題の対処法

google-home-notifierインストール

@raspberrypi $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
@raspberrypi$ sudo apt-get install nodejs
@raspberrypi $ sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
@raspberrypi$ git clone https://github.com/noelportugal/google-home-notifier
@raspberrypi $ cd google-home-notifier/
@raspberrypi $ npm install

GoogleTTSの仕様変更対応

GoogleTTSの新バージョンがリリースされており、このままでは、うまく動作しません。仕様変更により、今まで利用していたユーザーも利用できなくなり、関連する記事がWEBに複数出ておりました。
Error: get key failed from google
at /home/user/google-home-notifier/node_modules/google-tts-api/lib/key.js:23:23
at process._tickCallback (internal/process/next_tick.js:68:7)

package.jsonのバージョン情報を変更。(0.0.2から0.0.4に変更)

"keywords": [
"google home",
"notifications",
"notifier"
],
"license": "MIT",
"dependencies": {
"body-parser": "^1.15.2",
"castv2-client": "^1.1.2",
"express": "^4.14.0",
"google-tts-api": "0.0.4",// ここを0.0.4に書き換える
"mdns": "^2.3.3",
"ngrok": "^2.2.4"
},

pakage.jason変更後に、google-tts-apiのアップデートを実施。

@raspberrypi:~/google-home-notifier $ npm update google-tts-api

Webhook(WEBリクエスト)形式での運用準備

google-home-notifierフォルダにあるexample.jsを流用して、以下の形式でのリクエストによりGoogleホームより音声出力を実現します。以下のコマンドで、WEBアクセスの待ち状態となります。

node.js example.js

Endpoints:
http://192.168.xxx.xxx:9081/google-home-notifier
GET example:
curl -X GET http://192.168.xxx.xxx:9081/google-home-notifier?text=Hello+Google+Home
POST example:
curl -X POST -d "text=Hello Google Home" http://192.168.xxx.xxx:9081/google-home-notifier

起動時に以下のWARNINGが出るのですが、ほかの方もWARNINGが出たまま運用しているようです。(WARNINGを消す情報は見つけられませんでした)

*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/blog/projects/avahi-compat.html>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/blog/projects/avahi-compat.html>Endpoints:

それでは設定です。google-home-notifierフォルダにあるexample.jsの言語設定を2か所変更します。

var language = 'ja'; // default language code

後は、Google HomeのIPアドレスと、WEBアクセスを受けるポートをexample.jsに設定します。

今回は3台分のGoogle Home Miniを運用したいので、example.jsを3個コピーして、3個のスクリプトを起動する方式にしました。

  • Google-Home-1:192.168.xxx.81:ポート番号9081
    http://192.168.xxx.xxx:9081/google-home-notifier?text=Hello+Google+Home
  • Google-Home-2:192.168.xxx.82:ポート番号9082
    http://192.168.xxx.xxx:9082/google-home-notifier?text=Hello+Google+Home
  • Google-Home3:192.168.xxx.83:ポート番号9083
    http://192.168.xxx.xxx:9083/google-home-notifier?text=Hello+Google+Home

forever導入による常時起動化とサーバー再起動時の自動起動

【Node.js入門】foreverの使い方とデーモン化による永続化・自動起動まとめ!
Node.js製のアプリをforeverで永続化する

foreverモジュールの導入方法

@raspberrypi:~/google-home-notifier $ sudo npm install -g forever

起動時のコマンドは、以下となります。

/usr/local/bin/forever start /home/user/google-home-notifier/google-home-1.js

再起動時にスクリプトが自動起動するようにクーロン登録します。

@raspberrypi:~/google-home-notifier $ crontab -e

以下を登録します。

@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-1.js
@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-2.js
@reboot /usr/local/bin/forever start /home/user/google-home-notifier/google-home-3.js

以上、上手く行ったら良いですね。
時間があれば、HOYAのVoiceText Web APIを利用する方法へ変更する予定です。

【うまく動作しなかった際に、実行したコマンドです】

@raspberrypi:~ $ sudo npm install -g npm
@raspberrypi:~/google-home-notifier $ npm update

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールします。

利用環境

  • NOOBS:Offline and network install、Version:3.1.1、Release date:2019-06-24
  • Raspberry Pi 3 Model B+:1.4GHz 64-bit quad-core processor

インストール

@raspberrypi $ npm -v
-bash: npm: コマンドが見つかりません
@raspberrypi $ sudo apt-get update
@raspberrypi $ sudo apt-get install -y nodejs npm
@raspberrypi $ sudo npm cache clean
@raspberrypi $ sudo n stable
@raspberrypi $ sudo npm install npm n -g
@raspberrypi $ npm -v6.9.0

Google Home Notifier導入準備完了

「google-home-notifier」利用に向けて、Raspberry PiへNode.jsとnpmをインストールが完了しました。

ネットワーク概要図

V6プラス

「v6プラス」は、IPv6で次世代ネットワーク(NGN)に直結し、インターネットプロバイダへ接続し、インターネットプロバイダよりIPv6とIPv4のインターネット網に接続します。
IPv6経由でインターネットに接続するので、インターネットに出る際に、混み合っているIPv4網を回避できます。
現状、プロバイダがv6プラスや光プラスと呼ばれるサービスを提供している際は、通常のインターネットアクセスには、積極的にv6プラス接続を利用するのがベストです。
一方で、v6プラスを利用すると自宅のルータにIPv4のIPアドレスが割り当てられず、IPv4を前提としたNAT・バーチャルサーバ(Virtual Server)機能が利用出来ません。

V6プラスとPPoE接続の共存環境

そこで、ルーター2台構成を実現します。
V6プラス対応ルータと、通常のIPv4でのPPoEが可能なルータを準備します。
それぞれからインターネット接続を確立させます。
(利用するプラバイダにより利用可否が異なるかもしれません。利用したNIFTYでは、サポートからも技術的に問題ないと回答を頂きました)

また、2つのルーター間をローカルネットワーク内で接続し、双方同じネットワーク空間に配置します。
インターネットゲートウェイが2つある環境となります。

V6プラスとPPoE接続の共存時の運用

ネットワーク構成2

  • V6プラス対応ルータ経由(GW 192.168.1.1/24):スマートフォン、一般クライアントなど外部公開の必要ない機器
  • PPoE対応ルーター(GW 192.168.1.2/24):WEBサーバーなど(SynologyのNASおよびRaspberry Pi)

if(less(variables('ThisMonth'),4),'3Q',if(less(variables('ThisMonth'),7),'1Q',if(less(variables('ThisMonth'),10),'2Q','3Q')))

現在時刻取得

convertTimeZone(utcNow(),'GMT Standard Time','Tokyo Standard Time','u')
月Monthを取得 variables('ThisMonth')
variables('ThisMonth'):
   int(formatDateTime(convertTimeZone(utcNow(),'GMT Standard Time','Tokyo Standard Time','u'),'MM'))

日付フォーマット

タイムゾーン名、タイムゾーンID

  • GMT Standard Time
  • Tokyo Standard Time

Summary


The table below lists out the Microsoft Time Zone Index Values.

More Information


Index (hex)Name of Time ZoneTime
0Dateline Standard Time(GMT-12:00) International Date Line West
1Samoa Standard Time(GMT-11:00) Midway Island, Samoa
2Hawaiian Standard Time(GMT-10:00) Hawaii
3Alaskan Standard Time(GMT-09:00) Alaska
4Pacific Standard Time(GMT-08:00) Pacific Time (US and Canada); Tijuana
AMountain Standard Time(GMT-07:00) Mountain Time (US and Canada)
DMexico Standard Time 2(GMT-07:00) Chihuahua, La Paz, Mazatlan
FU.S. Mountain Standard Time(GMT-07:00) Arizona
14Central Standard Time(GMT-06:00) Central Time (US and Canada)
19Canada Central Standard Time(GMT-06:00) Saskatchewan
1EMexico Standard Time(GMT-06:00) Guadalajara, Mexico City, Monterrey
21Central America Standard Time(GMT-06:00) Central America
23Eastern Standard Time(GMT-05:00) Eastern Time (US and Canada)
28U.S. Eastern Standard Time(GMT-05:00) Indiana (East)
2DS.A. Pacific Standard Time(GMT-05:00) Bogota, Lima, Quito
32Atlantic Standard Time(GMT-04:00) Atlantic Time (Canada)
37S.A. Western Standard Time(GMT-04:00) Georgetown, La Paz, San Juan
38Pacific S.A. Standard Time(GMT-04:00) Santiago
3CNewfoundland and Labrador Standard Time(GMT-03:30) Newfoundland
41E. South America Standard Time(GMT-03:00) Brasilia
46S.A. Eastern Standard Time(GMT-03:00) Georgetown
49Greenland Standard Time(GMT-03:00) Greenland
4BMid-Atlantic Standard Time(GMT-02:00) Mid-Atlantic
50Azores Standard Time(GMT-01:00) Azores
53Cape Verde Standard Time(GMT-01:00) Cape Verde Islands
55GMT Standard Time(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London
5AGreenwich Standard Time(GMT) Monrovia, Reykjavik
5FCentral Europe Standard Time(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
64Central European Standard Time(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
69Romance Standard Time(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
6EW. Europe Standard Time(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
71W. Central Africa Standard Time(GMT+01:00) West Central Africa
73E. Europe Standard Time(GMT+02:00) Minsk
78Egypt Standard Time(GMT+02:00) Cairo
7DFLE Standard Time(GMT+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius
82GTB Standard Time(GMT+02:00) Athens, Bucharest, Istanbul
87Israel Standard Time(GMT+02:00) Jerusalem
8CSouth Africa Standard Time(GMT+02:00) Harare, Pretoria
91Russian Standard Time(GMT+03:00) Moscow, St. Petersburg, Volgograd
96Arab Standard Time(GMT+03:00) Kuwait, Riyadh
9BE. Africa Standard Time(GMT+03:00) Nairobi
9EArabic Standard Time(GMT+03:00) Baghdad
A0Iran Standard Time(GMT+03:30) Tehran
A5Arabian Standard Time(GMT+04:00) Abu Dhabi, Muscat
AACaucasus Standard Time(GMT+04:00) Baku, Tbilisi, Yerevan
AFTransitional Islamic State of Afghanistan Standard Time(GMT+04:30) Kabul
B4Ekaterinburg Standard Time(GMT+05:00) Ekaterinburg
B9West Asia Standard Time(GMT+05:00) Tashkent
BEIndia Standard Time(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
C1Nepal Standard Time(GMT+05:45) Kathmandu
C3Central Asia Standard Time(GMT+06:00) Astana, Dhaka
C8Sri Lanka Standard Time(GMT+06:00) Sri Jayawardenepura
C9N. Central Asia Standard Time(GMT+06:00) Almaty, Novosibirsk
CBMyanmar Standard Time(GMT+06:30) Yangon (Rangoon)
CDS.E. Asia Standard Time(GMT+07:00) Bangkok, Hanoi, Jakarta
CFNorth Asia Standard Time(GMT+07:00) Krasnoyarsk
D2China Standard Time(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
D7Singapore Standard Time(GMT+08:00) Kuala Lumpur, Singapore
DCTaipei Standard Time(GMT+08:00) Taipei
E1W. Australia Standard Time(GMT+08:00) Perth
E3North Asia East Standard Time(GMT+08:00) Irkutsk, Ulaanbaatar
E6Korea Standard Time(GMT+09:00) Seoul
EBTokyo Standard Time(GMT+09:00) Osaka, Sapporo, Tokyo
F0Yakutsk Standard Time(GMT+09:00) Yakutsk
F5A.U.S. Central Standard Time(GMT+09:30) Darwin
FACen. Australia Standard Time(GMT+09:30) Adelaide
FFA.U.S. Eastern Standard Time(GMT+10:00) Canberra, Melbourne, Sydney
104E. Australia Standard Time(GMT+10:00) Brisbane
109Tasmania Standard Time(GMT+10:00) Hobart
10EVladivostok Standard Time(GMT+10:00) Vladivostok
113West Pacific Standard Time(GMT+10:00) Guam, Port Moresby
118Central Pacific Standard Time(GMT+11:00) Magadan, Solomon Islands, New Caledonia
11DFiji Islands Standard Time(GMT+12:00) Fiji, Kamchatka, Marshall Is.
122New Zealand Standard Time(GMT+12:00) Auckland, Wellington
12CTonga Standard Time(GMT+13:00) Nuku'alofa
80000040Azerbaijan Standard Time(GMT-03:00) Buenos Aires
80000041Middle East Standard Time(GMT+02:00) Beirut
80000042Jordan Standard Time(GMT+02:00) Amman
80000043Central Standard Time (Mexico)(GMT-06:00) Guadalajara, Mexico City, Monterrey - New
80000044Mountain Standard Time (Mexico)(GMT-07:00) Chihuahua, La Paz, Mazatlan - New
80000045Pacific Standard Time (Mexico)(GMT-08:00) Tijuana, Baja California
80000046Namibia Standard Time(GMT+02:00) Windhoek
80000047Georgian Standard Time(GMT+03:00) Tbilisi
80000048Central Brazilian Standard Time(GMT-04:00) Manaus
80000049Montevideo Standard Time(GMT-03:00) Montevideo
8000004AArmenian Standard Time(GMT+04:00) Yerevan
8000004BVenezuela Standard Time(GMT-04:30) Caracas
8000004CArgentina Standard Time(GMT-03:00) Buenos Aires
8000004DMorocco Standard Time(GMT) Casablanca
8000004EPakistan Standard Time(GMT+05:00) Islamabad, Karachi
8000004FMauritius Standard Time(GMT+04:00) Port Louis
80000050UTC(GMT) Coordinated Universal Time
80000051Paraguay Standard Time(GMT-04:00) Asuncion
80000052Kamchatka Standard Time(GMT+12:00) Petropavlovsk-Kamchatsky

PowerBIやPower Queryでのカレンダー作成用のクエリー

カレンダー
=ADDCOLUMNS (CALENDAR ("2015/1/1", "2035/12/31"),
"年", YEAR([Date]),
"月", FORMAT ( [Date], "m月" ),
"年月", FORMAT ( [Date], "yyyy年mm月" ),
"月番号", MONTH([Date]),
"曜日番号", WEEKDAY ( [Date], 1),
"週番号", WEEKNUM([Date],1),
"曜日", SWITCH(WEEKDAY([Date],1), 1, "月", 2, "火", 3, "水", 4, "木", 5, "金", 6, "土", 7, "日",""),
"会計年度", IF(MONTH([Date])<4,YEAR([Date])-1,YEAR([Date])),
"四半期", IF(MONTH([Date])<4,"Q4",IF(MONTH([Date])<7,"Q1",IF(MONTH([Date])<10,"Q2","Q3"))),
"半期", IF(MONTH([Date])<4,"下期",IF(MONTH([Date])<10,"上期","下期")),
"半期番号", IF(MONTH([Date])<4,2,IF(MONTH([Date])<10,1,2)),
"日番号", DAY([Date]),"日", FORMAT([Date],"d日"),"YearMonth", FORMAT([Date],"yymm"))