本稿執筆の経緯と目的
自宅で動かしているクローリングシステムのリプレイスを行おうと考えました。
現環境
- 自宅Linux端末(hpのビジネス向け小型マシン、i5-4870Uみたいなモデル)
- 単一ディレクトリにPythonスクリプトやSQliteのDBをひとまとめにしてvenvかpyenvで仮想環境を都度立ち上げ・・・というのをシェルスクリプトにまとめてcronjobで起動時に実行するように設定(ダブって起動しないような監視含む)
現環境の問題点
- コードのCI/CDなんてあったものではない(もともと変更やアプデを前提にしていないが)
- なぜか最近、起動していると重くなる現象が発生→1時間に1回本体ごと再起動する強制措置で延命→情報の取りこぼしなどが発生
新環境
- 自宅Linux端末(nipogiとかいうよくある小型PC、中華ではまだ見る方、N100なのでTDPとスペック比は最高)←この端末がどうこう、という記事ではないです。今はTDP低くスペック(passmarkで6000↑)もLinux端末なら過剰くらいのものが安く買えていいぞ、という話です。(下手にケチって超型遅れでTDP爆熱みたいな端末にするくらいなら、ということ)
- Dockerは少なくとも導入(k8sは意味が薄いので見送り)
新環境で発生した問題
- コアとなるSelenium(Selenium-wire含む)を用いたPythonコンテナが動かない
基本的にChatGPTに聞きながら進めましたが、Selenium関連のビルドかupで毎回コケます。半ばあきらめかけましたが、ChatGPT完全依存も良くないので、検索性が著しく低下したGoogleで調べることに。
すると、逆にChatGPTの最新情報(2023年まで)では得られない情報が得られたり、結局Qiitaこちらの記事がヒット。
まずその記事のとおりに進めましたが、うまくいきません。
結果的には、追加で調べながら解決できたので、それを2024年6月最新版()として備忘録的に残しておきます。
追加で設定や注意が必要な項目
基本的には記事のとおりでOKです。
Appleシリコンの場合
M1などAppleシリコン端末の場合、Dockerfileの最上部をこのようにします。
FROM --platform=linux/amd64 python:3.9
本番環境(動作環境)のIntelCPU端末(私の新環境だとN100)でエラーになる場合、Dockerfileなどをどう切り替えるか、というのは逆にChatGPTの得意技なので聞いてみてください。(←書いてる時点でまだ本番環境では動かしてないので・・・)
参考にしたページ
requirements.txtの修正
blinkerがもう対応していないので、記述を追加し、このように古いバージョンを使うようにします。
selenium-wire
chromedriver-binary-auto
blinker<1.8.0
注意点
python:3.9-slim は使えないか、使えるかわからない追加設定が必要になります。ここがハマったポイントでした。ChatGPTは当初からpython:3.9-slimを使うように進言してきましたが、Seleniumコンテナにおいてはpython:3かpython:3.9、slimではないバージョンを使う必要があります。Appleシリコンの場合と合わせて注意が必要です。
まとめ
注意事項を修正すれば、ほぼ参考記事のとおり問題なく阿部寛のHPが開ける(ログに出る)と思います。