プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

RAID1 に Windows 10 をインストール

先日、いきなりPCのSSDがお亡くなりになりました。 SSD は予兆なく亡くなるとは聞いていましたが、まさか体験するとは思いもよりませんでした。

普段から作業は NAS かサーバーのリポジトリにアップするんですが、たまたまローカルに残したままでした。 ちょうど、納品前ということもあり1日分の作業がなくなってしまい大騒ぎです。あーあ。

とりあえず、亡くなったSSDを取り出して、SATA<->USB 変換器を通してつないでみても、反応ありません。コントローラがいったかな?完全にダメなようです。 取り急ぎ、家に余っていたHDDをつないで、OSを再セットアップして、急場を乗り切りました。

ちょっと時間ができたので、改めて、OSを再セットアップしました。今度はシステム部分も RAID1 にしますよ! 古いマザーなんで需要あるかわかりませんが、一応メモに残しておきます。

ちなみに壊れたSSDは、 Samsung SSD 840 250GB 2.5インチ MZ-7TD250B/IT というやつでした。

Samsung SSD840ベーシックキット 250GB 2.5インチ 日本サムスン正規品 3年保証 MZ-7TD250B/IT

Samsung SSD840ベーシックキット 250GB 2.5インチ 日本サムスン正規品 3年保証 MZ-7TD250B/IT

使い始めて6年ちょっとというところですね。初SSDだったので、こんなもんなのかどうかが見えないですが、どうなんでしょうかね?

オンボードRAID

いま使っているPCは BTO で サイコム で買ったものです。ずいぶん古いものですが、調べてみるとこのマザーボード(ASROCK Z77 Pro4-M)のチップセットにはオンボードRAIDコントローラが乗っているとのことです。

www.asrock.com

一気にPC全体をリニューアルしようかとも考えたのですが、まだ十分使えるので、このRAIDコントローラにSSDをつないで、RAID1で運用することにします。

SSD の購入

最初にPCが壊れた際に、近所の電気屋さんと近郊の電気屋さんに電話かけまくったのですが、内蔵用のSSD売ってるところなんて、一軒もなかったです。 そりゃ、田舎ほど Amazon 頼りますわね。

で、選んだSSDは Crucial MX500 250GB です。選定理由は特になく、価格が手ごろだったのと、壊れた Samsug 以外というだけでした。

一緒に SATA ケーブルと 2.5インチ-> 3.5 インチ変換アダプタも買いました。

SSDの取り付け

ASROCK Z77 Pro4-M のRAID取扱説明書(PDFです)を見ると、ユーザーガイド(PDFです)を見ろ、とあります。で、ユーザーガイドを見ると、p.38 2.13 節に

オンボードRAIDを使うなら、SATA3_0 番と SATA3_1 番のコネクタにつないでくれ

といった旨の記述がありました(かなり意訳)。

ということで、当該するSATAのコネクタを調べて取り付けます。

UEFI のセットアップ

いまはもう BIOS ではなく、UEFIでセットアップします。 PCの電源を入れて、F2 キーを押してセットアップ画面に入ります。

Advanced を選んで、 Storage Configuration を選び、 SATA mode Selection で RAID を選んで、SATAモードを RAID にします。

f:id:junichim:20181016165614j:plain

で、保存してUEFIを終了です。

RAID 設定

UEFI の設定が終わり、再度PCが起動すると、Ctrl+Iを押して、RAID設定画面に入ります。 ここでは、ディスク全体を使って、RAID 1(ミラーリング)で構成します。 設定自体は難しくないので、すぐに終わりです。

Windows 10 のインストール

別のPCを使って、USBにWindowsのインストールメディアを焼いておきます。 これを、セットアップしたいPCにつないで、起動するとおもむろにインストーラが立ち上がります。 あとは、画面の指示に従って、毎度おなじみのインストール作業を行えばOKです。

起動してみましょう。 やっぱり、HDDに比べると格段に速いですね。

Intel Rapid Storage ドライバのインストール

Windows がインストールできれば、このまま使っても問題ないのですが、せっかくなので、 Intel Rapid Storage のドライバを入れてみます。 マザーボードが昔のやつのため、最新のドライバではすでにサポートされていませんでした。

こちらにある、 14.8.16.1063 のやつがサポートしているドライバの最後のもののようでしたので、これをインストールしておきます。

これがあると、Windows から RAID の状態を見ることができるので、

f:id:junichim:20181016171431p:plain

なにかと便利かなと思ってます。

余談

まあ、RAIDとはいえ、セットアップ自体は(時間はかかりますが)別段難しいところはありません(筐体のドライブベイ外すほうがよっぽど手間かかりました)。

今回は、 UEFI で SATA モードを RAID に変更しましたが、Windows のインストール後にここを変更しても、RAIDドライバがインストールされないということです。 RAID モードだけでなく、 IDE -> AHCI に変更したような場合も同様です。Windows のインストール時に入れられるそうです。

このため、最初に臨時で使ったHDDの中身をSSDにクローンして、Windowsのインストールを飛ばして、RAID にしようと思ったんですが、断念しました。 まあ、今回はHDDからクローンするといっても、ほぼインストール直後に近い状態だったので、そんなに痛手ではなかったんですけどね。

ちなみに世の中には、Windowsインストール後にRAID設定を行った方々もいるようなので、興味があれば試してみると面白いかもしれませんね。

AHCI→RAID設定と、Intel RSTドライバーいれてみた(ふたたび) | ぽぽづれ。

試してないので、うまくいくかわかりませんが・・・

くれぐれも故障にはお気を付けください。

ルータを NVR510 に買い換えました

先日、台風24号がやってきた際、自宅のあるあたりも停電になりました。夜の8時頃に停電になりましたが、幸い、翌朝7時頃には復旧しました。 『やれやれ。でも朝から仕事できるな』と思って、PCやサーバー類の動作確認を始めると何か変です。よくよく見てみると、PCやNASは問題なく起動しているのですが、インターネットにつながっていません.

なんだ?WAN側(NTTのフレッツ光)に障害でもあるのか?と思いつつ、自宅回線が使えないので、スマホで調べてみるけど、特に問題ないようです。 ますます不振に思って、ハブでも壊れたかと調べていき、一度、ルーターを再起動してつなぎなおさせるか、とやってみても問題が解消しません。

ん?なんか本格的に変だぞ?と思いつつ、あれこれ調べてみると、どうもルーターが怪しいです。一度電源を切り、入れなおしても状況が変わらず。ログインしようとしてもブラウザでつながらず。というよりも、ルータにあるDHCPサーバーからIPアドレスの割り当てができていないようです。

ちなみに、このルータは マイクロリサーチ研究所の MR-GL1000 です。

仕方ないな、とあきらめて工場設定にリセットしてみました。が、何も変わらず。 いよいよ、仕方ないなと思い、メーカーに電話してみました。症状を伝えると『ステータスランプの4番はどうなってますか?』とのこと。

f:id:junichim:20181008173809j:plain

こんな感じに消えていたので『消えてますよ』と伝えると、『それはルータの故障ですね。ステータスランプの4番は常に何なんらかの形(点灯、点滅、etc)で点いているので、消えっぱなしというのは故障です』という回答が返ってきました。

まじですか!?

購入後7年以上使っている旨伝えたら、いつ壊れてもおかしくないですよ、といのこと・・・。 残念ながら、停電のショック?でお亡くなりになったようです。

とはいえ、ネットにつながらないと仕事にならないので、急遽ルータを買い替えることになりました。 (壊れたルータは、修理するか否か迷ってます。別用途で必要になりそうなので、多分直して使うことになりそうです)

台風21号の停電の時にはなんともなかったのに、実に残念だ。 まあ、レアケースだと思うので、ルータの買い替えのあれこれを記念にメモっときます。

機種選定

ということで、急ぎでルータの機種選定をします。とはいうものの、実は、数か月後に事務所の引っ越しを考えており、一度 YAMAHA のルータを使いたいな、でも今のも動いてるしな、というのをモヤモヤ思っていたところでした。なので、渡りに船とばかりに、YAMAHA のルータを買うことにしました。

自分の環境で良さそうなのが、 NVR510RTX830 です。 どちらにしようか迷ったのですが、多分 RTX830 だと過剰かな?と思ったのと、後述するようにポートベースVLANがなくても良い状況になるので、ここはまずお手軽に NVR 510 を使ってみることにしました。

MR-GL1000 を購入した動機が、自宅で仕事をしていたため仕事用のネットワークと家の(プライベートの)ネットワークを分けたかったというものでした。この機種は、安価なのに、ポートベースVLANがあるので、ぴったりでした。 ですが、近々仕事場を自宅から外に出す予定のため、ポートベースVLANのない NVR510 でもいいかな?となりました。

ちなみに、 RTX830 だとポートベースVLANN(LAN分割)機能があります。仕事場環境が今のまま自宅と一緒なら、きっとこっちを選んだでしょうね。

購入

機種が決まれば購入です。余談ですが、初めてamazonのお急ぎ便で購入しました。頼んだ翌日にはルータが到着!

いや、これはくせになりそうですね。しかし、とはいえ、こんなに便利になっていいんだろうか?と気になってしまう小心者です。

で、ついでに開封式。

f:id:junichim:20181008174026j:plain

f:id:junichim:20181008174857j:plain

前面と背面はこんな感じでした。

f:id:junichim:20181008174925j:plain

f:id:junichim:20181008174941j:plain

コンソールポートがついてたり、ログを外部メディア(SDカードやUSBメモリ)に保存したり、設定ファイルをメディアに保存してそれから起動出来たりと、こういう機能が充実しているのはうれしいですね。

設定

設定は附属のマニュアルを見つつ進めるとごくごく簡単にできました。なので、わざわざブログに書くほどでもないですが、何点か詰まったところだけ、書いておきます。

ユーザー追加

マニュアルの手順の最初のほうに、『(管理者)パスワードを設定する』とあるのですが、この機種は初期設定でユーザー名・パスワードともになしでログインできます。なので、ここの説明を読んだときに、ユーザー名を設定しないのにパスワードだけ設定するのか?と思い、ちょっと調べてから設定しようと思って後回しにしました。

調べてみると、ユーザーを追加できることが分かったので、ユーザーを追加してこの追加したユーザーを管理者にして、既存のユーザー(ユーザー名なしのユーザー)を無効にすればいいや、と考えました。

ということで、ユーザーを追加して『管理ユーザーへの昇格』にチェックを入れて、ユーザーを作成します。

これで、ログアウトして、再度ログインすれば管理者になるはず、と思いきや、このユーザーでログインしたら、ユーザー名の下に『一般ユーザー』と表示されます。おまけに今まで設定処理で使えていた機能が使えません。

f:id:junichim:20181008172028p:plain

なんか変だぞ、と思い調べてみると、その理由がわかることを書いている記事がありました。

分かりにくいYAMAHAのルーター: 赤カブのケンのブログ

どうも、YAMAHA のルーターは、個別のユーザーに対して、管理者パスワードを入力すると管理者権限をもらえるという形のようです。 ログインユーザーでログイン後に管理者パスワードを入れるのではなく、ログイン時に管理者パスワードを入力する、というのが分かりにくい要因のようです。 もちろん、個別のユーザーに対して『管理ユーザーへの昇格』の許可がなければ、管理者パスワードを入力しても管理者になれません。

なるほど、だから、設定マニュアルではユーザー名にはふれないで、管理者パスワードを設定しましょう、とだけ書いてあったんですね。

ユーザー設定

上記のような仕組み、ということを理解したら、ユーザー設定を次のようにします。

  • 管理者パスワード:設定します
  • ユーザー名なしのユーザー:『管理ユーザーに昇格』オプションを無効にします
  • 管理者となるユーザー:ユーザー名を指定し、『管理ユーザーに昇格』オプションを有効にします

こうすることで、ユーザー名なしのユーザーでは管理者にログインできなくなり、所定のユーザー名と管理者パスワードを使わないと管理者権限が得られないようになります。

あ、もし試すなら、作ったユーザー名で管理者になれることを確認してから、ユーザー名なしのユーザーの『管理ユーザーに昇格』を許可しないように変更してください。 一気に変更してしまい、パスワードのタイプミスなどで管理者ユーザーになれないなんてなったら、ひどい目にあいますよ。

ちなみに下記のマニュアルにはちゃんと載ってました。マニュアル読め、ってことですね。

Web GUI マニュアル

サーバー公開

NVR510のサーバー公開の方法が、最初ちょっとわかりにくかったです。 ですが、こちらもマニュアルをよく読むと設定例が載っています。

Web GUI マニュアル

これのとおり設定すると何の問題もなく設定できました。 参考までにここで使っている NAT ディスクプリターの説明へのリンクも載せておきます。

NATディスクリプター機能 概要

(参考) その他にもいくつか記事がありました。最初はちょっと分かりにくいようですね。

move0tofu.hatenablog.jp

tabikumo.com

ブザー設定

もう一つは余談みたいなもんです。最初に『かんたん設定』の『プロバイダー接続』から、プロバイダ情報を入力して接続しようとしました。

ですが、入力ミスのため接続できませんでした。だけならいいのですが、ブザーがずっとなりっぱなしになります。 焦りますね、これ。特に夜中に設定作業していたもんだから・・・

要は、初期状態だと接続失敗時にブザーがなる設定になっていたためでした。 ブザーがなるのはいいんですが、音を止める方法がよくわからなかったので、この点はなんとかしてほしいものです。

(結局、正しいアカウント情報を入力して、接続できたら、鳴りやみました)

まとめ

当面、これで運用してみて、問題なさそうなら新しい事務所でもこのルータを使っていこうと思います。

台風の影響がこんなところにも出るんだなとしみじみ実感した日々でした。

OpenStreetMap のタイルサーバーの公開

さて、せっかくいろいろと設定して立ち上げたタイルサーバーですので、公開してみたいと思います。 自宅サーバーの公開なんて、滅多にやらないので、問題なさそうな範囲でやったことまとめておきます。

IP アドレスを固定化

IPアドレスはDHCPで割り振っているので、まずこれを固定IPアドレス(LAN内なのでプライベートアドレス)にします。

/etc/network/interface を編集すればOK。変更前はこんな感じ

mor@map:/etc/network$ cat interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp2s0
iface enp2s0 inet dhcp

mor@map:/etc/network$ 

dhcpの部分をstaticにして、IPアドレスなどの設定を追加します。

# The primary network interface
auto enp2s0
# Change a method getting IP address
# from DHCP to static setting.
#
# 2018/8/31, Junichi MORI
#iface enp2s0 inet dhcp
iface enp2s0 inet static
address 192.168.xxx.yyy
netmask zzz.zzz.zzz.zzz
gateway デフォルトゲートウェイのIPアドレス
dns-nameservers DNSサーバーのIPアドレス

mor@map:/etc/network$ 

設定出来たら、再起動して、 ifconfig で確認しておきます。

mor@map:~$ ifconfig
enp2s0    Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx  
          inetアドレス:192.168.xxx.yyy  ブロードキャスト:192.168.xxx.255  マスク:zzz.zzz.zzz.zzz
          (略)
mor@map:~$ 

問題なさそうですね。

Web サーバー関連の設定

Web サーバーのポート番号変更

このタイルサーバーですが、特定の(自分で作った)アプリケーションからのみアクセスすることを想定しているので、ポート番号を変えておきます。

apache2 が Listen するポートを変更します。

/etc/apache2/ports.conf

mor@map:/etc/apache2$ cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

#Listen 80
Listen xxxx


        Listen 443



        Listen 443


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
mor@map:/etc/apache2$ 

バーチャルホスト設定も併せて変更します。

/etc/apache2/sites-available/000-default.conf

mor@map:/etc/apache2/sites-available$ cat 000-default.conf
<VirtualHost *:xxxx>
        # The ServerName directive sets the request scheme, hostname and port that
        (略)
</VirtualHost>

設定ができたら、apache2 を再起動します。

mor@map:~$ sudo service apache2 restart
参考

ubuntu + apache2 で8080ポートも併用する場合 - プログラミング備忘録

Ubuntu14.04 でApache2 設定ファイルの場所(ポート番号変更) - Name Not Found

Apache バーチャルホスト説明書 - Apache HTTP サーバ バージョン 2.4

サーバー情報が出るのを抑える

存在しないページを表示した際、エラーページが表示されますが、そこにサーバーのバージョン番号等が載っています。

f:id:junichim:20180831222648p:plain

なので、これを非表示にします。/etc/apache2/conf-available/security.conf を開いて

#ServerSignature On
ServerSignature Off

ServerSignature を Offにしておきます。

同じく、レスポンスヘッダにもサーバーのバージョンが載っています。

f:id:junichim:20180831222953p:plain

これも Apache のようにソフトウェア名だけにしておきます。 同じく、 /etc/apache2/conf-available/security.conf を開いて

#ServerTokens OS
ServerTokens Prod

ServerTokens を Prod に変更します。

設定変更を保存後、

mor@map:/etc/apache2/conf-available$ sudo /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.
mor@map:/etc/apache2/conf-available$ 

で設定ファイルを反映して、さきほどと同じく存在しないページを表示すると

f:id:junichim:20180831223345p:plain

f:id:junichim:20180831223355p:plain

のようにバージョン番号を表示しなくなりました。

ssh の設定を変更

公開前に、 ssh 接続を見直します。主な設定内容としては、

  • ポート番号を変更
  • パスワード認証を禁止
  • 公開鍵認証のみを許可
  • 接続可能ユーザーを限定(ルートはもちろん禁止)

sshd_config の変更箇所は下記のような感じになりました。

mor@map:/etc/ssh$ diff sshd_config.org sshd_config
5c5,6
< Port 22
---
> #Port 22
> Port xxxxx
25a27,29
> # user restriction
> AllowUsers ユーザー名
> 
28c32,33
< PermitRootLogin prohibit-password
---
> #PermitRootLogin prohibit-password
> PermitRootLogin no
52a58
> PasswordAuthentication no
mor@map:/etc/ssh$ 

設定変更後は、

mor@map:/etc/ssh$ sudo sshd -t

設定ファイルのテストをして問題なければ、

mor@map:~$ sudo systemctl restart ssh

でsshdを再起動します。

なお、パスワード認証を無効にする前に、別途公開鍵を作り、一度、クライアントから接続して公開鍵でログイン出来ることを確認しておきます。 そのあとで、パスワード認証を無効にします(設定ミスでログインできなくなる、というのを避けたいためです)。

参考

Ubuntu 16.04 LTS : SSHサーバー : SSH 鍵認証 : Server World

sshd_config&PAMの設定 | OpenGroove

ファイアウォールを設定

自宅のLAN内で使っている分には、ファイアウォールとかもそんなに気にしなくてよかったのですが、公開するのでちゃんと設定してみます。 Ubuntu は iptables で設定ができるそうです。でも、直接 iptables コマンドで操作しなくても ufw というツール経由で設定するのが楽とのことなので、これで試してみます。

mor@map:/etc/ufw$ sudo ufw status
状態: 非アクティブ
mor@map:/etc/ufw$ sudo ufw default DENY
デフォルトの incoming ポリシーは 'deny' に変更しました
(適用したい内容に基づいて必ずルールを更新してください)
mor@map:/etc/ufw$ sudo ufw allow "Apache for Public"
ルールをアップデートしました
ルールをアップデートしました(v6)
mor@map:/etc/ufw$ sudo ufw allow "OpenSSH for Public"
ルールをアップデートしました
ルールをアップデートしました(v6)
mor@map:/etc/ufw$ sudo ufw limit "OpenSSH for Public"
ルールをアップデートしました
ルールをアップデートしました(v6)
mor@map:/etc/ufw$ sudo ufw status
状態: 非アクティブ
mor@map:/etc/ufw$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? 
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
mor@map:/etc/ufw$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
Apache for Public          ALLOW       Anywhere
OpenSSH for Public         LIMIT       Anywhere
Apache for Public (v6)     ALLOW       Anywhere (v6)
OpenSSH for Public (v6)    LIMIT       Anywhere (v6)

mor@map:/etc/ufw$ 

limit を使うと30秒間に6回以上の接続が合った場合に制限がかかります。ブルートフォースアタック対策ですね。

この時点で、一度、再起動して、設定を有効にします。 WebサーバーとSSHが問題なくつながりますね。

application について

上記の設定はポート番号を直接指定するのではなく、"Apache for Public" とか "OpenSSH for Public" とかのアプリケーション名で指定しています。 これらは、/etc/ufw/application.d 以下にアプリケーション定義を作成して、その名前使って設定しているものになります。

例えば、 "OpenSSH for Public" というアプリケーション名は、/etc/ufw/application.d/openssh-server-for-public というファイル(ファイル名は任意っぽい)を作成して、そこで定義しています。 ちなみにその中身は、

mor@map:/etc/ufw/applications.d$ cat openssh-server-for-public 
[OpenSSH for Public]
title=Secure shell server, an rshd replacement
description=OpenSSH is a free implementation of the Secure Shell protocol.
ports=xxxxxx/tcp
mor@map:/etc/ufw/applications.d$ 

という感じです。 "Apache For Public" も同じですね。

あと、若干微調整しておきます。

IPv6 の削除

/dev/default/ufw を編集して、IPv6を無効にします。

mor@map:/etc/default$ cat ufw
# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
#IPV6=yes
IPV6=no
SSH の接続元を限定

SSH 接続はローカルLANからのみ認めるものとします。また、ローカルLANからの接続もLIMITをつけておきます。

mor@map:/etc/default$ sudo ufw limit from 192.168.xxx.yyy/zzz to any app "OpenSSH for Public"
ルールを追加しました
mor@map:/etc/default$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
Apache for Public          ALLOW       Anywhere
OpenSSH for Public         LIMIT       Anywhere
OpenSSH for Public         LIMIT       192.168.xxx.yyy/zzz

mor@map:/etc/default$ sudo ufw status numbered
状態: アクティブ

     To                         Action      From
     --                         ------      ----
[ 1] Apache for Public          ALLOW IN    Anywhere
[ 2] OpenSSH for Public         LIMIT IN    Anywhere
[ 3] OpenSSH for Public         LIMIT IN    192.168.xxx.yyy/zzz

mor@map:/etc/default$ sudo ufw delete 2
削除:
 limit 'OpenSSH for Public'
操作を続けますか (y|n)? y
ルールを削除しました
mor@map:/etc/default$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
Apache for Public          ALLOW       Anywhere
OpenSSH for Public         LIMIT       192.168.xxx.yyy/zzz

mor@map:/etc/default$ 
参考

第76回 Ubuntuのソフトウェアファイアウォール:UFWの利用(1):Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

第77回 Ubuntuのソフトウェアファイアウォール:ufwの利用(2):Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

iptablesについて

ファイアウォールiptablesを簡単解説~初心者でもよくわかる!VPSによるWebサーバー運用講座(4) | さくらのナレッジ

ルータの設定(静的IPマスカレードの設定)

ここまで設定が終わったら、外部からのアクセスを受け付けるために、ルータのIPマスカレードを設定します。 ルータの特定のポートに来たものを、このタイルサーバーに投げるという設定です。

下記のマニュアルを見て設定しました。

NetGenesis GigaLink1000 ユーザーズマニュアル 第4版

動作確認

ここまでできれば、最後は動作確認を行います。 Leaflet を使って地図を表示する際に、

    sample.mymap = L.map('map').setView([34.5007, 136.7058], 13);
    var tile_layer = L.tileLayer('http://タイルサーバーのIPアドレス:ポート番号/{z}/{x}/{y}.png', {
        attribution: '© OpenStreetMap contributors',
        maxZoom: 20
    });
    tile_layer.addTo(sample.mymap);

のように、公開したタイルサーバーを指定します。

ブラウザ表示させると、無事に地図が表示されています。 めでたしめでたし、でした。

あとは、おいおい様子を見ていきたいと思います。