2020/11,未分類,江端さんの技術メモ

以下、自分用のメモのみ

AWS  Lightsailにdockerのインストールまで成功

PostgreSQLのインストールも成功したと思う

が、ここから嵌り始める。

ca_sim=# create extension postgis;

^C^CCancel request sent
Cancel request sent
ERROR: canceling statement due to user request
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!>

が出てきて、

サーバ側に
2020-11-04 12:52:16.858 UTC [51] ERROR: canceling statement due to user request
2020-11-04 12:52:16.858 UTC [51] STATEMENT: create extension postgis;
2020-11-04 12:53:53.365 UTC [1] LOG: server process (PID 51) was terminated by signal 9: Killed
2020-11-04 12:53:53.365 UTC [1] DETAIL: Failed process was running: create extension postgis;
2020-11-04 12:53:53.365 UTC [1] LOG: terminating any other active server processes
2020-11-04 12:53:53.367 UTC [25] WARNING: terminating connection because of crash of another server process
2020-11-04 12:53:53.367 UTC [25] DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2020-11-04 12:53:53.367 UTC [25] HINT: In a moment you should be able to reconnect to the database and repeat your command.
2020-11-04 12:53:53.371 UTC [53] WARNING: terminating connection because of crash of another server process
2020-11-04 12:53:53.371 UTC [53] DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2020-11-04 12:53:53.371 UTC [53] HINT: In a moment you should be able to reconnect to the database and repeat your command.
2020-11-04 12:53:53.372 UTC [56] WARNING: terminating connection because of crash of another server process
2020-11-04 12:53:53.372 UTC [56] DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2020-11-04 12:53:53.372 UTC [56] HINT: In a moment you should be able to reconnect to the database and repeat your command.
2020-11-04 12:53:53.516 UTC [1] LOG: all server processes terminated; reinitializing
2020-11-04 12:53:53.535 UTC [58] FATAL: the database system is in recovery mode
2020-11-04 12:53:53.538 UTC [57] LOG: database system was interrupted; last known up at 2020-11-04 12:47:18 UTC
2020-11-04 12:53:53.607 UTC [57] LOG: database system was not properly shut down; automatic recovery in progress
2020-11-04 12:53:53.613 UTC [57] LOG: redo starts at 0/216DCD0
2020-11-04 12:53:53.712 UTC [57] LOG: invalid record length at 0/24F2310: wanted 24, got 0
2020-11-04 12:53:53.712 UTC [57] LOG: redo done at 0/24F22D8
2020-11-04 12:53:53.741 UTC [1] LOG: database system is ready to accept connections

そこで、

コンテナの外に出て、

sudo apt-get clean
sudo apt-get install postgis
sudo apt-get update

■全部のDockerを止める
C:\Users\ebata>docker ps -aq | xargs docker stop
C:\Users\ebata>docker ps -aq | xargs docker rm (これやると、これまでの設定も全滅するので注意)

もう一度、imageから作り直して ・・(30分経過)・・ううむ、それでもダメか。

今日はここで一旦引き上げ

2020/11,江端さんの技術メモ

正直手続忘れてしまったけど、一応historyからメモを作成しておきます。
https://docs.docker.com/engine/install/ubuntu/

$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

ここからコケ始めました。

$ apt-cache madison docker-ce

の後、

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

を入力したら、予想通り失敗しました。

(ちょっと一息)

$ apt-cache madison docker-ce

を入力した時、一番最初に表示された"5:19.03.13~3-0~ubuntu-focal" を訳も分からずに、置き換えしました。

$sudo apt-get install docker-ce=5:19.03.13~3-0~ubuntu-focal docker-ce-cli=5:19.03.13~3-0~ubuntu-focal containerd.io

でもって、

$ sudo docker run hello-world

をして、コメントに出てくる通りに、

$ docker run -it ubuntu bash

を実施しても"Got permission denied....." とか言われて、dockerのコンテナの中に入ることができませんでした。

$ docker ps

Got permission denied while trying to connect to the Docker daemon
socket at unix:///var/run/docker.sock:
Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json:
dial unix /var/run/docker.sock: connect: permission denied

てなエラーが出てくるので、このエラーメッセージで検索したところ、

# dockerグループへユーザを追加
$ sudo gpasswd -a ubuntu docker

# グループの追加ができたことを確認
$ id ubuntu

と入力して、(ここ大事)

# 一回ログアウトして再ログインする
$ exit

して、再度

$ sudo docker run hello-world
$ docker run -it ubuntu bash

をしたら、今度はコンテナの中に入ることができました。

ubuntu@ip-172-26-13-137:~$ docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6a5697faee43: Pull complete
ba13d3bc422b: Pull complete
a254829d9e55: Pull complete
Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1
Status: Downloaded newer image for ubuntu:latest
root@e9ff5fa891d0:/# ;s
bash: syntax error near unexpected token `;'
root@e9ff5fa891d0:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

よく分からんけど、これで、Amazon Lightsailの中にDockerをインストールすることができたんだろう・・・と思っています。

2020/11,江端さんの忘備録

こちらのコラムで、私が、実家の見守りシステムを作る際に、自分のWebサイトのVPSの利用に「失敗した」という話を書いています。

In this column, I wrote that I "failed" to use the VPS on my website when creating a home watching system.

でもって、ラズパイを使った自宅サーバの方に、開発方向をシフトさせるに至りました ―― まあ、そのおかげで、この連載の記事が執筆できたのですが。

Therefore, we have shifted the development direction to the home server that uses Raspberry Pi. Well, thanks to that, I was able to write an article in this series.

ここ一年の間、Amazon Web Service(AWS)の、Amazon Elastic Compute Cloud(EC2)とLBS(ロードバランサ)を使ったシステムを使って、色々やってきたのですが、先日、1年間の無料使用期間が終了して、有料モードに突入してしまいました。

For the past year, I've been using Amazon Web Services (AWS), a system that uses Amazon Elastic Compute Cloud (EC2) and LBS (load balancer). The other day, the one-year free usage period has expired and I have entered the billing phase.

実は、それに気が付かずに、3~4ヶ月くらい5000円/月の課金を喰らっていたことを知って、先日あわててアカウントを抹消しました。

Actually, I didn't notice it and learned that I was charged 5,000 yen / month for about 3-4 months, so I hurriedly deleted my account the other day.

練習用に使っていただけなのに、結構な損金になりました。

Though I only used it for practice, it was a considerable loss.

-----

そもそも、私、"AWS"というものが苦手です。

In the first place, I'm not good at "AWS".

"AWS"というのは、「ビルデイングブロック」で作るサーバです ―― イメージ的に言えば、「電子ブロック」のような感じです。

"AWS" is a server created by "building blocks". In other words, it feels like an "electronic block".

「電子ブロック」は、よく(便利に)使われるメタファですが、これが現実世界で運用するとなると、悪夢のような状態になるのです。

An "electronic block" is a metaphor that is often (conveniently) used, but when it comes to operation in the real world, it becomes a nightmare.

―― ブロックがたった一つでも動かないと、サーバシステム全体が動かない

"The entire server system will not work unless even one block works"

"TLS認証"で、"ロードバンサー"で、"ドメイン登録"で、私がどれほど「動かないサーバ」に恐怖しながら、闘ってきたかは、これまでも、たびたびお話ししたと思います。

I've often talked about how scared I was of "non-working servers" with "TLS authentication", "road bangsar", and "domain registration".

-----

『てやんでい! サーバ構築なんてもんはなぁ、コンソールのシェルが2つ、3つ立ち上がっていればいいんでい!』

"Shut up! I only need two or three console shells up to build a server"

という、1980年代のコマンドインターフェース型のUNIXサーバ構築の技だけで生き残っているロートルには、"AWS"のようなサーバ構築手法は、本当に"辛い"のです。

In this way, for the elderly who survived only with the command interface type UNIX server construction technique of the 1980s, the methods like "AWS" are really "hard".

まあ、とは言え、こういうセリフを語り出した時から、人間はジジイ化する訳で ――

However, if I start talking about these lines, I become "old farts"

『ジジイ化を自分に許してしまったエンジニア』は、そこで『試合終了』となります。

"the engineer who allowed himself to become old farts" is going 'game over'.

『試合終了』が嫌なのであれば、週末でも、大型連休でも、就業後の深夜でも、エンジニアは、闘い続けなければなりません。

If I don't like the 'game over', then engineers have to keep fighting, even when it's a weekend, a major holiday, or late at night after work.

(続く)

(To be continued)

2020/11,江端さんの忘備録

これは、先日の私の誕生日の、長女との会話です。

This is a conversation I had with my senior daughter on my birthday.

長女:「パパ。誕生日おめでとう。さて、誕生日に際して、今後の抱負を一言」

"Daddy. Happy birthday. Now, on the occasion of your birthday, what are your future aspirations?"

江端:「ふむ、抱負か・・・『自分が自分の意識と体をコントロールできる時間内での、苦痛ゼロの死』―― この一択だな」

"Hmm, an aspiration... 'Death with zero pain, in a time when I can control my own consciousness and body' - Just this one option"

-----

ちなみに、嫁さんも、私と同じこと言っています。

My wife also says the same thing.

まあ、皆さんも、いずれ介護のフロントに立てば分かります。

Well, you all will understand when you eventually get on the care front.

ええ、介護者になろうが、被介護者になろうが ―― 全員、例外なく。

Yes, whether you become a caregivera or a care recipient, without exception.

2020/11,江端さんの技術メモ

イプシムのSIM(IPアドレス付きで、一番安いやつ)が、ラズパイに差さったままで使っていなかったので、iPadで使えるようにした。必要に応じて、またラズパイに戻せばいいし。

  1. SIM取り出し用の機具の準備

  2. イプシムのSIMカード情報の確認(画像は偽造しています)

  3. SIMカード番号の確認 (上記のICCIDと同じであるかを確認(画像は偽造しています))

3. iPadのスロットに挿入する

4. iPadから、https://ipsim.net/support.html にアクセスし、APN構成プロファイルをダウンロードする

これをダウンロードするのだが、これがインストールできているどうかが、確認できずに困った(インストールボタンが見あたらなかったから)。この場合は、「設定」で調べる。

ちなみに、以下の情報が必要なのかは分からないが一応セットしておいた。

 

5. iPadから、https://ipsim.net/support.html にアクセスし、APN構成プロファイルをダウンロードする(画像は偽造しています)

上記の赤い囲みに数字が出てくれば、インストールできている(と思う)。

7.右上にこの表示が出てくれば、SIMカードは稼動している(最初のうち、ブラウザが表示されなかったりするが時間が経過すると見えるようになる(ことがあるみたい)。表示されずに、なんども、手順をやりなおしていたが、"放置"が正解だったような気がする)

以上

2020/11,江端さんの忘備録

「沈黙する人工知能 ~なぜAIは米大統領選の予測に使われなかったのか」

"Silent Artificial Intelligence - Why was not AI used to predict US presidential election ?"

を読み返してます。

I'm rereading it.

―― あれから4年かぁ・・・

"It's been four years since then"

と思うと、「疾く」がごとき時間の速さに、感に入っております。

I am impressed by the speed of time, "fast".

-----

ところで、まだ誰も指摘されていないようですが、私は、

By the way, I don't think anyone has pointed this out yet. However, I'm worried about

―― アメリカ合衆国の内戦

"Civil War in the United States"

を心配しています。

-----

シナリオはこんな感じでしょうか。

Here's an example of a scenario.

(Step 1) 直接投票ではトランプ候補が勝利するものの、その後の郵便投票の結果でバイデン候補が逆転する。

(Step 1) Candidate Trump wins the direct ballot, but the results of the subsequent mail-in ballot upset candidate Biden.

(Step 2) トランプ候補が、大統領令で郵便投票の無効を宣言し、一方的に勝利宣言を発表。

(Step 2) Candidate Trump declares the mail-in ballot invalid by presidential decree and unilaterally issues a victory declaration.

(Step 3)最初にカリフォルニア州(民主党勢力)が独立を宣言、それを受けてテキサス州(共和党勢力)も独立を宣言。

(Step 3) California (the Democratic state) is the first to declare its independence, and Texas (the Republican state) follows suit.

(Step 4)各州が、州兵を州境に配置。各州知事が、カリフォルニア国、テキサス国への参入を表明

(Step 4) Each state places the National Guard on the border. Each state governor announces entry into the State of California or the State of Texas.

(Step 5)トランプ候補が合衆国内で国内で限定核(威力を限定的(?)にした核兵器)の使用を言及し、最悪、使用してしまう

(Step 5) Candidate Trump mentions the use of limited nuclear weapons (nuclear weapons with limited power (?)) in the United States, and in the worst case, he uses it.

でもって、中国とロシアが、上記の二大州のバックアップに付いたら、間違いなく人類最後の世界大戦になるでしょう。

So, if China and Russia back up the above two major states, it will absolutely be the last world war for humankind.

-----

4年前の私は、こんな発想すらできませんでした。

Four years ago, I couldn't even think like this.

-----

今の私の願いは、どっちが大統領選挙に勝利しても構わないので

My wish now is that I don't care who wins the presidential election, however,

―― 有無を言わせないほどの圧倒的多数で、勝敗が決して欲しい

"I'd like to see an overwhelming majority to win or lose."

ただ、それだけです。

That's just it.

2020/10,江端さんの忘備録

子どもの自殺が倍増 ―― という話を聞いて、青冷めています。

I've heard that child suicides have doubled -- and I'm pale.

ちょっと調べてみたら、ちょっと違うようです。

I did a little research and it looks a little different.

■小学生から高校生までの8月の自殺者数は59人と前年の28人から倍増

- The number of suicides among elementary through high school students doubled to 59 in August from 28 in the previous year.

■外出自粛が広がった4-6月は、全国で約13%減少していた(但し、子どものデータだけではない)。

- In April-June, when the refrain from going out was widespread, it was down about 13% nationally (but not just the data for children).

「登校禁止によって、自殺者は減るだろう」という私の予想は外れていないようでした。

My prediction that the school ban would reduce the number of child suicides, was almost correct.

しかし、「8月の自殺者倍増」というのは、予想外でした。

However, the "doubling of suicides in August" was unexpected.

もっとも、子どもの自殺者は、大人の自殺者に比べれは非常に比率が小さく、変動が大きくなりがちなので、拙速な判断には慎重になるべきではあります。

However, the proportion of child suicides is very small compared to adult suicides and tends to fluctuate widely, so we should be cautious about making poor decisions.

しかし、「今回のコロナ禍」と無関係でない ―― とは、思っています。

But I think that it's not unrelated to the "corona disaster"

-----

緊急事態宣言の発令前から、「自殺者の増加」は予見されていました。

Even before the declaration of the state of emergency, it was predicted that the number of suicides would increase.

しかし、それはもっぱら「失業問題」だろうと思っており、私は「子ども」への関連性は、あまり考えていませんでした。

But I thought it would be solely an "unemployment problem" and I hadn't really thought about the relevance to "children".

「完全に裏をかかれた」という感じがしています。

I feel like I've been "totally outsmarted.

コロナ禍の子どもの自殺について、色々なメディアを調べてみたのですが、あまり明確な理由は分かっていないようです。

I've looked at various media outlets about the suicide of children with corona disasters, but I don't seem to have a very clear reason for it.

従来の理由に加えて、「コロナ禍による家庭内不和」「芸能人自殺による連鎖」あるいは「『9月1日問題』のシフト」など挙げられています。

In addition to the traditional reasons, they cite "domestic discord due to the Corona scourge," "a chain of celebrity suicides," or "a shift in the 'September 1 issue'" among others.

しかし、それらの根っこは、いずれも

However, those roots are, I think,

―― 生活様式の急激な変動

"Rapid lifestyle changes"

だろうと思っています。

登校禁止、親との長時間の同居、友達との交友(会話等)の制限などは、これまでのライフスタイルを、

Prohibition of going to school, living with parents for long periods of time, and restrictions on friendships (conversations, etc.), are typical "rapid lifestyle changes" and quite shocks, like

―― いきなり「ブチッ」と切れるような音とともに切断されて、別の回線に、突然に、繋き換えられるような

"being cut off with a sudden "snapping" sound, and then being abruptly reconnected to another line"

そういう衝撃だったろうと思います。

そういうことは、ライフスタイルの変更を何度となく強いられている大人でも、キツいものです。

That's a tough one, even for adults who have been forced to make lifestyle changes many times over.

ましてや、子どもをや、です。

And more importantly, they are children.

-----

だからといって、私に、具体的な解決策がある訳ではありませんが ―― なんとなく、イヤな予感がしています。

That's not to say that I have a concrete solution, but I have somehow bad feeling about it.

『あの時、こうしていれば良かった』と、将来、後悔するような「巨大な何か」が、現在、進行中のような気がして、気持ちが悪いです。

I feel bad to think 'something huge' that I will regret in the future, with saying 'I should have done that at that time', is going now.

私の杞憂であれば良いのですが。

I hope I'm wrong.

未分類

江端家では、時々ネットで鮮魚を取り寄せて、食しているのですが、なぜか私が料理をさせられることが多いようです ―― 私の誕生日に、私が料理させられるのです。

旬の地物鮮魚詰合せ(C)

大切なのは、ここです。

下処理した魚が送られてくるので、魚を鍋かグリルに放り込むだけで魚料理が完成します(刺身とかを作るときは、3枚に卸すなどが必要ですが)。

今日、送られてきた魚一覧です。

  • 的たい

    まあ、これは3枚にしてあるから、刺身で決定。

  • うすばはぎ

    これは煮つけで確定。
  • ぐじ

    塩焼か煮つけか?
  • 天然真鯛

    なんか、凄いのきた。塩焼で食べたいかな。上手く刺身にする自信がない
  • 白そい八目

    ネットで見ると、刺身が多いみたいだが、ちょっと面倒そう
  • のどくろ

    塩焼が良い、との記載がある。煮付けなら簡単だが、どうしよう。

まあ、今の私達には、「めんつゆ」という強力な武器があるから、「煮付け」はについては、昔ほど面倒じゃないですけど。

めんつゆで簡単♪魚の煮付け

塩焼は、こちらを参考にしたけど、塩が薄かったようです。

2020/10,江端さんの技術メモ

昨夜、らくがきのように綴った

Let’s encrypt を試してみた件(整理は明日)

を、まとめておきます。

昨日の実験で、Amazon lightsail でも、自前の公開暗号鍵(Let’s encrypt)を使えることが分かって、昨夜から気分の良い私です ―― これで、3.5ドル/月の、個人AWS練習用サーバの目処が立った。

どうも、私、"Let’s encrypt"を含めて、どうも私は公開暗号鍵の取扱いを、色々勘違いしていたようです。

たとえば、こちら、とか、こちら、で、AWSのロードバランサー(ELB: Amazon Elastic Load Balancing)に、"Let’s encrypt"で作った公開暗号鍵を関連付ける作業について記載しています。

しかし、AWSの供与をして頂いた部署が、IAMの設定を理解しておらず(もちろん、私も理解していませんでしたが)、 公開暗号鍵がロードバランサに紐付かずに、この時は、地獄を見ました

"Let’s encrypt"を使った認証鍵と暗号鍵を生成する時に、引数に、httpサーバの起動状態やら、鍵の置き場所などを指定するものだから、私は上位の認証局が、下々(私)の認証鍵と暗号鍵を見張っていると思っていました。

しかし、昨夜のGolandのコーディングで、認証鍵と暗号鍵は、有効期限付きのただのファイルである、ということを理解しました。

公開鍵証明書の認証局(CA: Certificate Authority)は、「下々のもの(私)に頼まれて、上位認証局(お上)が、鍵(ファイル)を作っているだけ」 ―― とりあえずは、この理解で十分であることが分かりました。

# というか ―― 巷(ちまた)の説明、難しすぎる。

まあ、それはさておき。

今回試みた、Let’s encryptでの鍵作りについて説明します(前提は、こちらを読んでおいて下さい)。

Let’s encryptでの鍵作りのパラメータは、省略することができるようです

$sudo certbot certonly --webroot -w /var/www/html -d sea-anemone.tech -d www.sea-anemone.tech

$sudo certbot certonly  -w /home/ubuntu/go_template/server_test -d sea-anemone.tech

  • "--webroot"は、webサーバの稼動している状況で扱う(しかもhttp://(×https://)が通らないとダメだめらしい)
  • "-w"以下は、golangのサーバを動かしている(サーバプログラムのある)ディレクトリを記載するらしい
  • "-d"以下は、SSLで使うドメイン名を入力("www.sea-anemone.tech"は、なんか知らんけど拒否された。理由は不明だけど、まあ、今は使っていないので無視する)

てな感じで、「とにかく鍵作ってくれ!」と頼むと、

How would you like to authenticate with the ACME CA? 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1: Spin up a temporary webserver(standalone)  (一時的なWebサーバを単独で起動する) 
2: Place files in webroot directory (webroot)ファイルを webroot ディレクトリに配置 する(webroot) 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

となっていて、少なくとも、nginxなどのwebサーバ上げていない状態だから、少くとも"2"ではなく、"1"でを押下したら、

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/sea-anemone.tech/privkey.pem

という場所に鍵を作ってくれた様子。

ところが、この鍵、普通のmoreやlessでは見えずに、sudo more などとしないと見えないし、privkey.pemについては、それすらも見えない、という慎重さです。

とにかく、golangのサーバを動かしている(サーバプログラムのある)ディレクトリにコピーしました。

ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/fullchain.pem . 
ubuntu@ip-172-26-13-137:~/go_template/server_test$ sudo cp /etc/letsencrypt/live/sea-anemone.tech/privkey.pem .

そんでもって、privkey.pemの権限が厳しいので、危ないけど >chmod +777 privkey.pem をやって、golangからアクセスして貰えるようにしておきました(権限のモードを忘れた)。こうしないと、go run serverXX.goをやると「privkey.pemが読めん」と文句を言われます。

で、serverXX.goの中を書き換え

/*
                log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
        */

        /*
        var httpErr error
        if _, err := os.Stat("./algo.crt"); err == nil {
                fmt.Println("file ", "algo.crt found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./algo.crt", "./algo.key", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }
        */

        var httpErr error
        if _, err := os.Stat("./fullchain.pem"); err == nil {
                fmt.Println("file ", "fullchain.pem found switching to https")
                if httpErr = http.ListenAndServeTLS(*addr, "./fullchain.pem", "./privkey.pem", nil); httpErr != nil {
                        log.Fatal("The process exited with https error: ", httpErr.Error())
                }
        } else {
                httpErr = http.ListenAndServe(*addr, nil)
                if httpErr != nil {
                        log.Fatal("The process exited with http error: ", httpErr.Error())
                }
        }

としたら、iPadで

https://sea-anemone.tech:8080
https://sea-anemone.tech:8080/smartphone

も、問題なく出力されるようになりました。

とりあえず、PruneMobileを雲の上に上げるメドが付き、ようやく一安心です。