Firecrawl 自動起動 (NixOS)
🤖
🔐 概要
Firecrawl を ~/firecrawl/ で自ホスト(Docker Compose)
Docker デーモン設定は NixOS の virtualisation.docker.enable = true で起動時自動起動済み
/etc/nixos/configuration.nixで設定される
5つのサービスで構成:
api
playwright-service
redis
rabbitmq
nuq-postgres
📁 設定手順
docker-compose.yaml に全5サービスへ restart: unless-stopped を追加
これだけでは初回起動時にコンテナが存在しないため、OS再起動後に自動起動しない
🔖 systemd user service
code:~/.config/systemd/user/firecrawl.service`
Description=Firecrawl Docker Compose
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=%h/firecrawl
Environment=PATH=/run/current-system/sw/bin:/usr/bin:/usr/local/bin
ExecStart=/run/current-system/sw/bin/docker compose up -d --wait --wait-timeout 90
ExecStop=/run/current-system/sw/bin/docker compose down
TimeoutStartSec=120
WantedBy=default.target
loginctl enable-linger でユーザーサービスがログイン前から実行可能に
systemctl --user enable firecrawl.service でログイン時に自動起動
🔍 ハマりポイント
依存関係に docker.service を書けない(docker.service はシステムレベル、user service からは参照不可)→ After/Requires は省略。ユーザーログイン時には Docker は起動済みなので問題ない
rabbitmq のヘルスチェックが完了する前に api が依存関係で起動失敗する → --wait --wait-timeout 90 で全コンテナのヘルスチェック完了を待ってから exit 0 を返す
普通の docker compose up -d だと rabbitmq のヘルスチェック待ち中に依存エラーで exit 1 になる
初回は docker compose up -d でコンテナを作る必要がある(restart: unless-stopped は既存コンテナにしか効かない)→ systemd user service でログイン時に自動起動 → Docker 再起動時は restart policy でカバー
📋 確認コマンド
docker ps --format "table {{.Names}}\t{{.Status}}" | grep firecrawl