すいっちぼっと温湿度計でもっと遊ぶ
はじめに
宅内や外に置かれているスイッチボット温湿度計さんたち。
彼らのデータはアプリを介してでしか確認してきませんでした。
理由は、楽だったから。
最近はちゃんとデータとして蓄積したいなあという思いが強くなったので、やってみることにしました!
今日中にうまくいくといいな。GW最終日だから。
構成はこんな感じ。
| 項目 | 詳細 |
|---|---|
| 取得先 | Switch bot API |
| 取得ツール | Python |
| DB | Influxdb |
| 表示 | Grafana、自作画面 |
DBはよく使ってるPostgresqlでもいいんだけど、映えがないのでInflxdbを使ってみることにしました。
各種アプリはProxmoxサーバ内に適当に立てます。
pythonの開発環境はDockerで適当に準備。DBと表示は開発も本番もあまりないのでまあいいか精神で。
参考文献
Switch bit APIは触ったことないので、とりあえずでやってみることにしました。
公式のgithubにやり方書いてありそうなのでまずはそこから。イントロから読んでいきましょ。
github.com
Getting Startedに書いてあることからトークンゲット。
コンテナ作って実行しようとしたらエラー。なるほどね。Dockerfileのパスを指定するためにピリオドを入れるのね。
PS C:\Users\***> docker build ERROR: docker: 'docker buildx build' requires 1 argument Usage: docker buildx build [OPTIONS] PATH | URL | - Run 'docker buildx build --help' for more information
というか、dockerをちゃんとわかってなかったので調べる。 docs.docker.jp zenn.dev zenn.dev
あれやこれややって無事起動。
公式のgithubにあるサンプルコードはgetするところまでなかったので他を探します。
qiita.com
zenn.dev
tannyさんのものを参考にちょちょいとやりやすいように改造。
デバイスリストは一括取得できそうだけど、デバイスのステータスは一括取得できないか。まあそりゃそうか。
1日10,000回まで呼び出しできるようなので、10000/24/60=6.94->6台までなら1分単位でデータの蓄積ができそう。
status = bot.get_device_status(d)
ここの引数はd.get("deviceId")にしないとjsonが全部入ってっちゃっておかしくなってた。
正しい内容はgithub見ないとだね。
あとは、不思議なエラーに見舞われたけど、先人の知恵があって助かった。 jskangaroo.hatenablog.com
influxdbはちょっと前にLXCで作ってたので、そこにswitchbotバケットを作って突っ込んでみる。
scaduleでタスク実行させるときに、関数の引数でうまく動いてなかったっぽいけど先人の知恵で解決。
di-acc2.com
いろんなところで書いてあるsleep(1)がおまじないすぎてそこもちょっと気持ち悪い。
あとは、VM立てたときにこの記事も役に立った。先人の知恵ありがとう。 nanchovy.com
ただしVSCodeからRemote SSHしたとき,この設定を上書きすることがある. 僕の場合,普通にSSHしたときは/bin/bashが起動するのに,VSCodeのRemote SSHからターミナルを起動したときだけ/bin/shが起動してしまうようになっていた. この対策としてはVSCodeの基本設定の中でリモートの「Terminal › Integrated › Default Profile」で起動したいシェルを指定すればよい.
完走した感想
こんな感じでデータが見えるようになりましたとさ!
数年データを集めてからが面白くなりそうなんだよなあ

webサイトの作成をしてみた
はじめに
自分のwebサイトを作りたくなったのでやってみます!
いい感じのテンプレをgithubにあげてくださっているのを見つけたのでそれをベースにします。
テンプレはsvelteを使っているようなので、その環境づくりも併せてやります。
dockerにするかローカルにするかめちゃ悩んでローカル構築からやってみることにしました。
ローカルが汚れて微妙ならdockerに移行でいいかな~ぐらいの軽い気持ち。
(2025.5.6 0時更新)
更新箇所まで飛ぶのが面倒な人用。以下のサイトにアクセスできるようになりました。
tetaro.jp
gallery.tetaro.jp
参考文献
まずはnodejsの環境づくりから。公式でnvm-windowsが推されているようなので、疑い無しにいきますかね。
調べている人もいるみたい。メモがてら、ペタリ。 qiita.com
インストール完了後、npmのバージョンチェックしようとしたらPSスクリプトが実行できないエラー発生。
PS C:\Users\***> nvm use 22.15.0
Now using node v22.15.0 (64-bit)
PS C:\Users\***> npm --version
npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\nvm4w\nodejs\npm.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ npm --version
+ ~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\***> Get-ExecutionPolicy
Restricted
調査している人曰く、デフォルトはRemoteSinedだと言っている。 使っているマシンはwin11Proのインストールからだから、そこは違うなあと感じた。サンプル出力は確かにそうだけど、インストール直後のデフォルトはちがうんじゃないかなあと。 zenn.dev 公式もペタリ。 learn.microsoft.com
まあ、ポリシー変えてやりますかねえ。公式に記載のとおり、カレントユーザのポリシーをRemoteSignedに。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
ポリシーが変わったことを確認しつつ、npmコマンド(実態はPSスクリプト)が実行できることを確認。
PS C:\Users\***> Get-ExecutionPolicy -Scope CurrentUser RemoteSigned PS C:\Users\***> npm --version 10.9.2
テンプレはこの人のものをいただきます。ありがとう。 github.com
yarnを使う必要がありそうなので、npmからインストール。公式にかいてありました。教えてくれた先人の記事、ありがとう。 zenn.dev classic.yarnpkg.com
1回やって、勝手にたくさんダウンロードされた。 npmの設定であるpackage.jsonをいい感じに自分用へ編集しておいたほうがよさそう。
PS C:\Users\***> npm install --global yarn added 1 package in 661ms PS C:\Users\***> yarn --version 1.22.22 PS C:\Users\***> npm list terminal@0.0.1 C:\Users\*** +-- UNMET DEPENDENCY @sveltejs/vite-plugin-svelte@^3.1.1 +-- UNMET DEPENDENCY @tsconfig/svelte@^5.0.4 +-- UNMET DEPENDENCY autoprefixer@^10.4.20 +-- UNMET DEPENDENCY postcss@^8.4.41 +-- UNMET DEPENDENCY svelte-check@^3.8.5 +-- UNMET DEPENDENCY svelte@^4.2.19 +-- UNMET DEPENDENCY tailwindcss@^3.4.10 +-- UNMET DEPENDENCY tslib@^2.6.3 +-- UNMET DEPENDENCY typescript@^5.5.4 `-- UNMET DEPENDENCY vite@^5.4.12 npm error code ELSPROBLEMS npm error missing: @sveltejs/vite-plugin-svelte@^3.1.1, required by terminal@0.0.1 npm error missing: @tsconfig/svelte@^5.0.4, required by terminal@0.0.1 npm error missing: autoprefixer@^10.4.20, required by terminal@0.0.1 npm error missing: postcss@^8.4.41, required by terminal@0.0.1 npm error missing: svelte-check@^3.8.5, required by terminal@0.0.1 npm error missing: svelte@^4.2.19, required by terminal@0.0.1 npm error missing: tailwindcss@^3.4.10, required by terminal@0.0.1 npm error missing: tslib@^2.6.3, required by terminal@0.0.1 npm error missing: typescript@^5.5.4, required by terminal@0.0.1 npm error missing: vite@^5.4.12, required by terminal@0.0.1 npm error A complete log of this run can be found in: C:\Users\***-debug-0.log PS C:\Users\***> yarn --version 1.22.22 PS C:\Users\***> npm install yarn npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. npm warn deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported added 178 packages, and audited 179 packages in 28s 35 packages are looking for funding run `npm fund` for details 2 moderate severity vulnerabilities To address all issues, run: npm audit fix Run `npm audit` for details. npm notice npm notice New major version of npm available! 10.9.2 -> 11.3.0 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0 npm notice To update run: npm install -g npm@11.3.0 npm notice npm notice npm notice New major version of npm available! 10.9.2 -> 11.3.0 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0 npm notice To update run: npm install -g npm@11.3.0 npm notice
んで、次のコマンドでうごきましたとさ
PS C:\Users\***> yarn dev yarn run v1.22.22 $ vite Forced re-optimization of dependencies VITE v5.4.12 ready in 5673 ms ➜ Local: http://localhost:3000/ ➜ Network: use --host to expose ➜ press h + enter to show help Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest Why you should do it regularly: https://github.com/browserslist/update-db#readme
あとは、自分なりに改造。この人が結構すごい感じに改造してるので参考にさせてもらいました。ありがたや。 yoshisaur.hatenablog.jp github.com
svelteでdangerouslySetInnerHTML()をやりたくて調べたら出てきてくれました。ありがたや~。
zenn.dev
History.svelteのwhitespace-preクラスの{output}を{@html output}にすればいい感じだね。簡単!
F12でタグ見てどこの機能が出力しているのかチェックするという力業で見つけたのは内緒。中身ちゃんとわかってないのがばれますな~。
リンクを新規タブで開いてほしいなあと思って調べたときにいろいろ出てきたのでペタリ。 www.freecodecamp.org zenn.dev cinci.jp
タブナビングは初めて聞いた qiita.com
最近はやらなくても大丈夫っぽい?古いバージョンのブラウザを使っていることを想定してnoopenerだけ明示的に指定しておくのがいいかな?
ロゴは次のサイトつかってつくりまんた。jpは入れなくてええやろ~ってとこ。 patorjk.com
静的サイトにしてホスティングサービスにポイ置きできたらいいな~ってことで作成。 svelte.jp
使い方
npm i -D @sveltejs/adapter-staticを実行してインストールし、svelte.config.jsにこのadapterを追加します: …そして prerender オプションを最上位のレイアウト(root layout)に追加します:
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
// default options are shown. On some platforms
// these options are set automatically — see below
pages: 'build',
assets: 'build',
fallback: undefined,
precompress: false,
strict: true
})
}
};
// This can be false if you're using a fallback (i.e. SPA mode) export const prerender = true;
とのことですのでやってみましょう。
PS C:\Users\***> npm i -D @sveltejs/adapter-static added 12 packages, and audited 191 packages in 16s 36 packages are looking for funding run `npm fund` for details 5 vulnerabilities (3 low, 2 moderate) To address issues that do not require attention, run: npm audit fix To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. PS C:\Users\***> npm run build > terminal@0.0.1 build > vite build vite v5.4.12 building for production... transforming (1) index.htmlBrowserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest Why you should do it regularly: https://github.com/browserslist/update-db#readme ✓ 42 modules transformed. dist/index.html 0.63 kB │ gzip: 0.40 kB dist/assets/index-CZDSACtd.css 6.03 kB │ gzip: 1.84 kB dist/assets/index-_KnM6OvQ.js 101.35 kB │ gzip: 28.12 kB ✓ built in 462ms
ということでできました~。
途中遭遇したエラー。
入力ファイルを上書きすることになるため、ファイル +layout.js を書き込めません。
「入力ファイルを上書きすることになるため、ファイル 'XXX.js' を書き込めません。」の対応方法 typescriptのコンパイルオプションで、出力先を指定できるのだが、それを指定してないとエラー判定される。 自分のところは、webpackにて出力していたので、挙動的には問題ないのだが、エラーとして判定されるのが癪なので、以下の対応をする。 { "compilerOptions": { "outDir": "dist" } } outDirさえあれば、とりあえず回避可能。
ローカルストレージにアクセスしたくなったので、この辺つかってみる。 developer.mozilla.org
別タブを裏で開くのってできるのかな・・?調べた形跡をぺたり。 developer.mozilla.org サファリはopenメソッドを許可しないのね。要注意か。
closeもさせたいよね。 developer.mozilla.org
一応google analyticsもつけてみようと思います。問題起こったら抜きましょうね。
優劣がわからんな・・・
joyofcode.xyz
tamrazyan.com
www.mindevice.net
自動生成をそのまま使うか、svelteでちょろっとコンポーネント書くかって感じ?
アナリティクスで自動生成させたときのコメントに従いましょうかね。
以下は、このアカウントの Google タグです。このタグをコピーして、ウェブサイトのすべてのページのコード(
要素の直後)に貼り付けます。各ページに複数の Google タグを実装することはできません。
DNSレコードにとりあえず入れたらなんかうまくページが表示されないし、StaticではサーバURLの変更ができない。
aレコードに登録されているipアドレスが指定のものではありません。
ってStaticから怒られる。
構成は次のとおり。
DNS:Xserver Domain
他のサービスでも使っているのでDNSレコードあり
ホスティング:Xserver Static
DNSサービス⇒NSはStaticの指定に変更したらStaticの設定は通った。けどもアクセスがちゃんとできない。独自ドメインの設定に時間がかかってるっぽいか?
とりあえず待ち状態。
(2025.5.6 0時更新)
どうやら独自ドメインの設定が反映された模様。
メインサイトとギャラリーサイトの両方にアクセスできるようになりました。
ただ、メインサイト側はSSLの設定ができないので、もうしばらく様子見は続きそう。
tetaro.jp
gallery.tetaro.jp
おおむね完走した感想
(2025.5.6 0時更新) SSLの設定ももう少し時間がかかるものかもしれないということで待ってみる。エラーしまくって時間BANされているとかあるのかな。
lxcでお試しwireguard in alpine
はじめに
この記事は、↓の続きになってます。 tetita.hateblo.jp
ローカルマシン内でwireguardのネットワークを組んで他からアクセスできるようになってるのかチェックできればOK!
参考文献
www.wireguard.com やっぱ、公式ドキュメントを読むに限るね!
apk add -U wireguard-tools
とりあえずこれを実行すればよいらしい
qiita.com apkのオプションがよくわからんのでその辺もチェック。
Maximum AGE (in minutes) for index in cache before it's refreshed
キャッシュ内のインデックスが更新されるまでの最大保存期間(分)
つまるとこ、-Uオプションは最新で更新してくれるって・・こと・・?
実行したところ、使えないと帰ってきてしもた。
lxc-nginx-test:~# apk add -U wireguard-tools ERROR: unable to select packages: wireguard-tools (no such package): required by: world[wireguard-tools]
zenn.dev 十中八九、見ているリポジトリにないんだろうなあということで検索! pkgs.alpinelinux.org いやでもある気がするんだが・・・ mirrors.alpinelinux.org qiita.com リポジトリのリスト見てロケーションが日本のやつに変更。
https://ap.edge.kernel.org/alpine/v3.21/main
https://ap.edge.kernel.org/alpine/v3.21/community
今度はちゃんとできた!
lxc-nginx-test:~# apk add wireguard-tools (1/15) Installing wireguard-tools-wg (1.0.20210914-r4) (2/15) Installing ifupdown-ng-wireguard (0.12.1-r6) (3/15) Installing libelf (0.191-r0) (4/15) Installing libmnl (1.0.5-r2) (5/15) Installing iproute2-minimal (6.11.0-r0) (6/15) Installing ifupdown-ng-iproute2 (0.12.1-r6) (7/15) Installing libxtables (1.8.11-r1) (8/15) Installing iproute2-tc (6.11.0-r0) (9/15) Installing iproute2-ss (6.11.0-r0) (10/15) Installing iproute2 (6.11.0-r0) Executing iproute2-6.11.0-r0.post-install (11/15) Installing openresolv (3.13.2-r1) (12/15) Installing wireguard-tools-wg-quick (1.0.20210914-r4) (13/15) Installing ifupdown-ng-wireguard-quick (0.12.1-r6) (14/15) Installing wireguard-tools (1.0.20210914-r4) (15/15) Installing wireguard-tools-openrc (1.0.20210914-r4) Executing wireguard-tools-openrc-1.0.20210914-r4.post-install * * To use the WireGuard OpenRC script, you need to create a symbolic link to it with the configuration name: * ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 * And then call it instead: * rc-service wg-quick.wg0 start * Executing busybox-1.37.0-r12.trigger OK: 26 MiB in 71 packages
wiki.alpinelinux.org alpineの公式にはちょっと違うこと書いてあるけど、まあいいでしょう。 iptablesも入れておきましょ。
lxc-nginx-test:~# apk add iptables (1/3) Installing libnftnl (1.2.8-r0) (2/3) Installing iptables (1.8.11-r1) (3/3) Installing iptables-openrc (1.8.11-r1) Executing busybox-1.37.0-r12.trigger OK: 28 MiB in 74 packages
いい感じの場所にtouchでファイル作って、confを作成
lxc-nginx-test:/etc/wireguard# pwd /etc/wireguard lxc-nginx-test:/etc/wireguard# ls wg0.conf
設定後に言われたシンボリックリンクを作って、スタートしてみる。
lxc-nginx-test:/etc/wireguard# ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0 lxc-nginx-test:/etc/wireguard# rc-service wg-quick.wg0 start * Caching service dependencies ... [ ok ] * Starting WireGuard via wg-quick(8) for wg0 ...[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add XXX.XXX.XXX.XXX dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a wg0 -m 0 -x [#] ip -4 route add XXX.XXX.XXX.XXX/XX dev wg0 [ ok ] lxc-nginx-test:/etc/wireguard# ping XXX.XXX.XXX.XXX PING XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX): 56 data bytes 64 bytes from XXX.XXX.XXX.XXX: seq=0 ttl=64 time=1.206 ms 64 bytes from XXX.XXX.XXX.XXX: seq=1 ttl=64 time=0.547 ms ^C --- XXX.XXX.XXX.XXX ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.547/0.876/1.206 ms
いったん、つながっている雰囲気はあり。
wireguard-server の側からつながっているかチェック。 サーバ側ごにょごにょしたらつながった気配あり(本当か??)
root@fce3484104e4:/# curl XXX.XXX.XXX.XXX hello world alpine LXC nano index.html !
と思ったらまたつながらなくなったので、何かが悪い。
間にNATがいるのでそのテーブルが保持できなくなっていると想定。
クライアント側にPersistentKeepAlive = 25の設定を追加。単位は秒。
公式のクイックスタートに書いてあった。やっぱちゃんと読んでないのがいけないね。
www.wireguard.com
NAT and Firewall Traversal Persistence By default, WireGuard tries to be as silent as possible when not being used; it is not a chatty protocol. For the most part, it only transmits data when a peer wishes to send packets. When it's not being asked to send packets, it stops sending packets until it is asked again. In the majority of configurations, this works well. However, when a peer is behind NAT or a firewall, it might wish to be able to receive incoming packets even when it is not sending any packets. Because NAT and stateful firewalls keep track of "connections", if a peer behind NAT or a firewall wishes to receive incoming packets, he must keep the NAT/firewall mapping valid, by periodically sending keepalive packets. This is called persistent keepalives. When this option is enabled, a keepalive packet is sent to the server endpoint once every interval seconds. A sensible interval that works with a wide variety of firewalls is 25 seconds. Setting it to 0 turns the feature off, which is the default, since most users will not need this, and it makes WireGuard slightly more chatty. This feature may be specified by adding the PersistentKeepalive = field to a peer in the configuration file, or setting persistent-keepalive at the command line. If you don't need this feature, don't enable it. But if you're behind NAT or a firewall and you want to receive incoming connections long after network traffic has gone silent, this option will keep the "connection" open in the eyes of NAT.
NATおよびファイアウォールトラバーサルの持続性 WireGuardは、デフォルトでは使用されていないときは可能な限り静かに動作するように努めます。これは、通信量の多いプロトコルではありません。ほとんどの場合、ピアがパケットを送信したい場合にのみデータを送信します。パケットの送信を要求されていない場合は、再度要求されるまでパケットの送信を停止します。ほとんどの構成では、この方法は問題なく動作します。しかし、ピアがNATまたはファイアウォールの背後にある場合、パケットを送信していない場合でも着信パケットを受信できるようにしたい場合があります。NATおよびステートフルファイアウォールは「接続」を追跡するため、NATまたはファイアウォールの背後にあるピアが着信パケットを受信するには、定期的にキープアライブパケットを送信して、NAT/ファイアウォールマッピングを有効に保つ必要があります。これはパーシステントキープアライブと呼ばれます。このオプションを有効にすると、キープアライブパケットがinterval秒ごとにサーバーエンドポイントに送信されます。様々なファイアウォールで動作する適切な間隔は25秒です。 0に設定すると、この機能はデフォルトでオフになります。ほとんどのユーザーはこの機能を必要としないため、WireGuardの通信頻度が若干高くなります。この機能は、設定ファイルでピアに PersistentKeepalive = フィールドを追加するか、コマンドラインで persistent-keepalive を設定することで指定できます。この機能が不要な場合は、有効にしないでください。ただし、NATまたはファイアウォールの背後で、ネットワークトラフィックが停止した後も長時間接続を受信したい場合は、このオプションによりNAT側で「接続」が開いた状態になります。
というわけで、キープアライブを設定したらうまくいきました。
完走した感想
ローカル環境でうまくいったようなので、本番環境に投入していきましょう~
全部うまくいったら切り出しでQiitaに載せていこうかな。
それではまた。
lxcでお試しnginx in alpine
はじめに
とりあえず動作確認をしたくてlxcのalpineを準備。
動作確認まで進めるにあたってやったことをまとめておく。
次やるときはシェルにでもしたら高速化間違いない(やらない)。
環境
lxc-nginx-test:~# cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.21.3 PRETTY_NAME="Alpine Linux v3.21"
参考文献
このままrc-statusと打ってもエラーが出てしまうので以下の設定をします。
このまま打ってエラーは出なかった。
というか、最初から入ってた感あるな。
実行結果はこんな感じ。
lxc-nginx-test:~# apk add openrc OK: 17 MiB in 42 packages lxc-nginx-test:~# rc-status Runlevel: default crond [ started ] sshd [ started ] networking [ started ] Dynamic Runlevel: hotplugged Dynamic Runlevel: needed/wanted localmount [ started ] Dynamic Runlevel: manual
nginxをインストールしようとしたらエラー発生
lxc-nginx-test:~# apk add nginx (1/3) Installing pcre (8.45-r3) ERROR: pcre-8.45-r3: temporary error (try again later) (2/3) Installing nginx (1.26.3-r0) Executing nginx-1.26.3-r0.pre-install Executing nginx-1.26.3-r0.post-install (3/3) Installing nginx-openrc (1.26.3-r0) Executing busybox-1.37.0-r12.trigger 1 error; 22 MiB in 53 packages
でもなんかインストールされてるぽい。
lxc-nginx-test:~# apk add pcre OK: 24 MiB in 56 packages lxc-nginx-test:~# apk list|grep pcre pcre-8.45-r3 x86_64 {pcre} (BSD-3-Clause) [installed]
とりあえず起動させて動作確認
lxc-nginx-test:~# rc-service nginx start * Caching service dependencies ... [ ok ] * Starting nginx ... [ ok ] lxc-nginx-test:~# rc-status Runlevel: default crond [ started ] sshd [ started ] networking [ started ] Dynamic Runlevel: hotplugged Dynamic Runlevel: needed/wanted localmount [ started ] Dynamic Runlevel: manual nginx [ started ] lxc-nginx-test:~# curl localhost <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx</center> </body> </html> lxc-nginx-test:~#
404エラーになってるね。
あちらこちら見た結果、default.confが常に404返すようになっていたからだった。 ファイル名変えて、nginx.confにserverブロック追加したら動いた。 echoコマンドの実行にしくじってるのはご愛嬌!
lxc-nginx-test:/var/www/html# echo "hello world alpine LXC !!!" > index.html echo "hello world alpine LXC nano index.html !" > index.html lxc-nginx-test:/var/www/html# mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf_bk lxc-nginx-test:/var/www/html# rc-service nginx restart * Stopping nginx ... [ ok ] * Starting nginx ... [ ok ] lxc-nginx-test:/var/www/html# curl localhost hello world alpine LXC nano index.html !
server {
# 80番ポート(http)でリクエストを受け付ける
listen 80;
# ドメイン名の指定
server_name localhost;
location / {
# リクエストされた際にドキュメントがある場所を指定
root /usr/share/nginx/html;
# リクエストを受けた際に提供するファイル名
index index.html index.htm;
}
}
実行したコマンドの一部はこちら。
setup-alpine
apk update
apk upgrade
apk add sudo nano openrc curl
apk add nginx
rc-service nginx start
rc-status
curl localhost
セットアップメモ
lxc-nginx-test:~# setup-alpine ALPINE LINUX INSTALL ---------------------- Interface ----------- Available interfaces are: eth0. Enter '?' for help on bridges, bonding and vlans. Which one do you want to initialize? (or '?' or 'done') [eth0] done /usr/sbin/setup-interfaces: .: line 514: can't open './*.conf': No such file or directory Root Password --------------- Changing password for root New password: Retype password: passwd: password for root changed by root Timezone ---------- Africa/ Egypt Iran Poland America/ Eire Israel Portugal Antarctica/ Etc/ Jamaica ROC Arctic/ Europe/ Japan ROK Asia/ Factory Kwajalein Singapore Atlantic/ GB Libya Turkey Australia/ GB-Eire MET UCT Brazil/ GMT MST US/ CET GMT+0 MST7MDT UTC CST6CDT GMT-0 Mexico/ Universal Canada/ GMT0 NZ W-SU Chile/ Greenwich NZ-CHAT WET Cuba HST Navajo Zulu EET Hongkong PRC leap-seconds.list EST Iceland PST8PDT posixrules EST5EDT Indian/ Pacific/ Which timezone are you in? (or '?' or 'none') [UTC] Japan * Caching service dependencies ... [ ok ] * Stopping busybox crond ... [ ok ] * Caching service dependencies ... [ ok ] * Starting busybox crond ... [ ok ] Proxy ------- HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] none APK Mirror ------------ (f) Find and use fastest mirror (s) Show mirrorlist (r) Use random mirror (e) Edit /etc/apk/repositories with text editor (c) Community repo enable (skip) Skip setting up apk repositories Enter mirror number or URL: [1] 1 Added mirror dl-cdn.alpinelinux.org Updating repository indexes... done. User ------ Setup a user? (enter a lower-case loginname, or 'no') [no] no Which ssh server? ('openssh', 'dropbear' or 'none') [openssh] openssh Allow root ssh login? ('?' for help) [prohibit-password] ? Valid options are: yes root will be able to login with password or ssh key no root will not be allowed to login with ssh prohibit-password root will be able to login with ssh key but not with password Allow root ssh login? ('?' for help) [prohibit-password] no * service sshd added to runlevel default * Caching service dependencies ... [ ok ] ssh-keygen: generating new host keys: RSA ECDSA ED25519 * Starting sshd ... [ ok ]
完走した感想
とりあえず動いたのでヨシ!
次はwireguardインストールして違うセグメントにいるサーバからアクセスしてみよう。
いろいろチャレンジしているけども記事にできていない件について
はじめに
最近ブログ更新できていないですが、訳があるということを記載しておきたい。
前から悩んでいたが、投稿しながらやると1日で進められるペースが落ちるのでどうしたものかと思っていたのだ。
結果、ある程度形になってから投稿することに決めた。
(2025.5.2 追記)
ある程度形になってからだと時間がかかりすぎるので、出して更新する方針に変更。
ゲームのDLCと同じパターンだね。
完走した感想
壮大な計画(盛りすぎ)が走っているので、こうご期待!!!
もうちょい(もうちょいではない)すればまとめて投稿できるかも。
HackRF Oneが届いたのでSoftware Defined Radioをとにかく動かしてみる件
はじめに
最近ずっとHackRF Oneが欲しくてほしくてたまらなかったのですが、ついに手に入れました。中華品をアリエクで購入しています。1か月かかりました。
開封報告等は後で記事にしようと思いますが、とにかく動かしてみようという回です。
参考文献
上記を参考に内部クロック精度を上げるためのTCXOをアドオンしています。
SDR Consoleというのを試しました。
完走した感想
うまく聞けました☺
よっしゃーうまくいった!!!SDRでFM放送を聞くことができた!!!すんばらぴー pic.twitter.com/eyGE7SsScq
— てちた/TeTiTa (@TeTaRo_tw) 2022年1月6日
招待制の投稿サイトを作ってみたくなった件
はじめに
先日、某友人と技術について熱い(?)議論をさせていただいたときに、思いついたサービスです。とあるアプリに向けたデータを投稿するサイトになります。
まあまずは技術的にどんな感じでできるのか試しにやってみようというところです。
ひとまず、Wordpress を使ってみようと思います。
本番はレンタルサーバでやればよいと思いますが、ひとまず家に転がっていたラズパイをつかって、dockerでサクッと構築できたらいいなってところです。

参考文献
初期構築は以下がおすすめ。
docker-composeまでインストールできたら、次のサイトを参考にdocker-compose.ymlを作ってdocker-compose upすれば出来上がり。
私の場合、準備したのがラズパイ3B+だったのが影響したのか、DBがうまく起動しませんでした。そのため、dbをlinuxserver/mariadb:latestからjsurf/rpi-mariadb:latestに変更しました。あとは外部向けのportも少しいじっています。
参考:ラズパイのカーネル
Linux raspberrypi 5.10.78-v7+ #1484 SMP Thu Nov 11 16:34:56 GMT 2021 armv7l
画面のイメージは次のサイトを参考に変更してみました。
Wordpressはテーマを変更。他はいじってません。
宅内ルータにポート転送の設定を追加。
とりあえずWordpress外部公開までできた pic.twitter.com/eDnumGyaAA
— てちた/TeTiTa (@TeTaRo_tw) 2021年11月14日
あとはBootstrapを使うとよりモダンなデザインになりそう??
WordpressはAPIに対応しているので、コマンドで叩けばアプリ等から投稿とかもできそう。
完走した感想
ひとまずWordpressをつかって招待制の投稿サイトはつくれそうな感じがしました。
今日イチ時間かかったのが、DB起動しなかったところは内緒!!
無料レンタルサーバ借りたら多分すぐにできたんだろうなあ(白目)
無料レンタルサーバ借りると広告出ちゃうんだけどね。