View post on imgur.com
同じシリーズのGen 6に乗り換えて不要になったPCを活用していく。
Headless ThinkPad
冷却を考慮すると不要になるディスプレイユニット外したほうが良いんじゃね?って思って調べてこれを見る限り簡単そうだしそのつもりになっていたのだが、
よく考えてみると自宅サーバーで冷却気にしないと行けないほどCPUヘビーなことやらせないなと思ったのでやめた。
準備
BIOSのConfigからDisplay > UMA Frame buffer Size: 512MとPower > Lid Sensor: Disabledを設定した。
OSにはDebianを選択しインストールとセットアップの後に蓋の開閉が問題ないかやCPUに負荷をかけてちゃんとファンが回るかを確認した。
トラブル
Debianのインストール自体は正常終了するがブートメニューにDebianが無いしGRUBの再インストールなども効果が無くて困り果てていたが、
BIOSのStartup > Boot Order Lockが原因でこれをDisabledに戻したら解決した。
これは以前Windows 10で使っていた頃に突然再起動してWindowsを見失うという不安過ぎる挙動を起こしたときにEnabledにしたやつだった。
雑感
自宅サーバーとしてはRaspberry Pi 4(2.5インチ SSD, 6010ファン)のものが5年以上稼働中でこれでことは足りているので過剰性能ではある。
T14 Gen 1は右方排熱なのでそっちを手前にすれば本棚みたいなものにも入れやすいのが良い。
セットアップログ
echo "Defaults timestamp_timeout=120" | sudo tee -a /etc/sudoers sudo apt install bat curl fd-find fzf git git-delta gpg libarchive-tools lsd ripgrep starship tmux vim xh zoxide # [bat](https://github.com/sharkdp/bat) sudo ln -s $(which batcat) /usr/local/bin/bat # [fd](https://github.com/sharkdp/fd) sudo ln -s $(which fdfind) /usr/local/bin/fd # [fish](https://fishshell.com/) echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/4/Debian_13/ /' | sudo tee /etc/apt/sources.list.d/shells:fish:release:4.list curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:4/Debian_13/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/shells_fish_release_4.gpg > /dev/null sudo apt update sudo apt install fish # [ghq](https://github.com/x-motemen/ghq) curl -fLSs https://github.com/x-motemen/ghq/releases/latest/download/ghq_linux_amd64.zip | bsdtar xvf - sudo cp ghq_linux_amd64/ghq /usr/local/bin/ && sudo chmod 755 /usr/local/bin/ghq # [dotfiles](https://github.com/ebith/dotfiles) ghq get ebith/dotfiles cd ghq/github.com/ebith/dotfiles ./create_link.py .config .gitconfig .tmux.conf .vim mkdir -p ~/.vimlocal/{backup,swap,undo} chsh -s $(which fish) exec fish rm .bash* .profile curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher fisher update # sudoedit sudo update-alternatives --config editor # ntp echo "NTP=ntp.nict.jp" | sudo tee -a /etc/systemd/timesyncd.conf # sshd mkdir ~/.ssh curl -s https://github.com/ebith.keys | tee -a ~/.ssh/authorized_keys echo "PasswordAuthentication no" | sudo tee -a /etc/ssh/sshd_config sudo systemctl reload sshd # network echo " interface enp5s0 static ip_address=192.168.0.111/24 static routers=192.168.0.1 static domain_name_servers=1.1.1.1 1.0.0.1 " | sudo tee -a /etc/dhcpcd.conf
その他
Tailscale
DNSのAレコードをTailscaleで割り振られる100.x.y.zに向けつつTraefikをリバースプロキシとして動かすことで、わかりやすいドメインで自宅サーバーで動いてるアプリ類にアクセスできて良い。
出先からアクセスするため大昔は沢山ポートを開けていたが今は外部に公開したいやつだけCloudflare Tunnel経由で受け入れる運用にしている。
Docker
なんでもDocker Composeで管理しておくと楽でありがたい。
ほぼ全部Bind Mountしてきたのだが設定ファイル類以外はNamed VolumeでDockerに任せておくのが良いというのを今更知った。
Traefik
設定が複雑というか公式のドキュメントがとっ散らかっててわかりにくいが、機能としてはやはり優れているしDocker Composeを活用してるなら便利。
設定の書き方自体はTraefik 3.x Quick Start Exampleを参考にしたりAIに頼った。
Kopia
シングルバイナリだけど他のものにあわせてdocker composeで管理しておく。
バックアップ対象の設定とかスケジュールの管理とか全部これだけに任せておけるところが良い。
ただバックアップのポリシーの設定にだいぶクセがあって特定のファイルだけのバックアップ頻度を下げるみたいなのはできないのが惜しい。
Fastladder
Fastladderが今もメンテされてるの本当にありがたい。
livedoor Reader, Live Dwango Reader, Inoreader, Feedeenと使ってきてその後はCommaFeedをしばらく使っていたがそもそもLDR/Fastladderが求めているフィードリーダーなのでセルフホストすべきはこれであった。
OPMLのインポートに失敗するのでRACK_QUERY_PARSER_PARAMS_LIMITを設定したり、それでもなんか一部しか登録されないので繰り返しインポートしたりする必要があったり、また登録済みフィードの管理の挙動も怪しかったが、
一度DB初期化してインポートするXMLを分割したり死んでるフィードを削除したりして整理したやつをインポートしたら問題なかった。
Grafana, Prometheus(Node exporter, cAdvisor), InfluxDB
この辺もそこそこややこしい、特にInfluxDBがマジでアレなんだが公式とRedditとAIを行ったり来たりすることでなんとかなった。
LibreHardwareMonitorにPrometheusサポートが入ったのありがたい。
Grafana Dashboard
Rybbit
かなり新し目のアクセス解析でセルフホスト向けのガイドも充実してて良い。
Cloudflare Tunnelsで/と^/apiを別々に公開しつつ、Zero Trust(Cloudflare One)のAccess ControlでAPIはBypassしてDashboardはAllowで認証かけるってのをやった。
これでCloudflareが提供する防御を経由してからのアクセスだけが/apiに届くしアクセス解析自体もCloudflareの認証を突破してからでないとアクセスできない。
n8n
スクリプト書いたりするのでも良いんだけど書いた後の管理の方が面倒なのでこういうので済ませておきたい。
わかりやすいdocker-compose.yml用意してくれてるのも楽で良い。
Navidrome
昔ほど音楽も聞かなくなったがこの機会にデスクトップのHDDに入ってるのをサーバーに移してどこからでも再生できるようにした。
rep2
プレイ人口の少ないゲームとかの情報はまだ5chが現役というかどこが代わりになるのか知らない。
追記
ノートPC本体のディスプレイ付けっぱなこと忘れてたので対策した
sudoedit /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=600"
sudo update-grub
バッテリー充電率の制限
sudoedit /etc/systemd/system/battery-charge-limit.service # [Unit] # Description=Set Battery Charge Limit to 60% # After=multi-user.target # [Service] # Type=oneshot # ExecStart=/bin/sh -c 'echo 50 > /sys/class/power_supply/BAT0/charge_control_start_threshold' # ExecStart=/bin/sh -c 'echo 60 > /sys/class/power_supply/BAT0/charge_control_end_threshold' # RemainAfterExit=yes # [Install] # WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable --now battery-charge-limit.service