3
Instalasi, Konfigurasi, dan Deployment
Guardian adalah CLI berbasis Python yang dapat dijalankan langsung dari virtualenv atau dari image Docker. Halaman ini memandu tiga jalur penyiapan: instalasi editable dengan pip install -e ., penyetelan config/guardian.yaml beserta berkas .env, dan penyalaan image lewat Dockerfile dan docker-compose.yml. Untuk daftar perintah beserta opsinya, lihat Referensi Perintah CLI. Untuk pemilihan provider dan kontrak plugin, lihat Provider AI dan Kontrak Plugin. Untuk guardrail scope dan sanitasi, lihat Keamanan, Scope, dan Sanitasi.
Bootstrap dari clone sampai workflow pertama
Prasyarat minimum adalah Python 3.11 atau lebih tinggi, satu API key provider AI, dan Git untuk clone repository README.md:123-1341. Setelah venv aktif, pip install -e . memasang paket dalam mode editable sehingga perubahan kode langsung terpakai tanpa instalasi ulang README.md:167-1902.
graph TD
clone["git clone guardian-cli"] --> venv["python -m venv venv"]
venv --> install["pip install -e ."]
install --> init["python -m cli.main init"]
init --> cfg["~/.guardian/guardian.yaml"]
init --> envf[".env + GOOGLE_API_KEY"]
cfg --> verify["python -m cli.main models"]
envf --> verify
verify --> run["workflow run --name recon"]
style install fill:#2d7d46,color:#fff
style run fill:#2d7d46,color:#fff
style cfg fill:#f59e0b,color:#000
style envf fill:#f59e0b,color:#000
style verify fill:#8b5cf6,color:#fff
%% fig: Urutan bootstrap dari clone sampai workflow pertama
%% desc: Clone diikuti venv dan instalasi editable, lalu init membuat guardian.yaml dan .env sebelum verifikasi provider dan workflow pertama.Dependensi inti yang ditarik oleh pip install -e . mencakup typer, rich, keluarga langchain, pyyaml, python-dotenv, pydantic, jinja2, aiofiles, dan asyncio pyproject.toml:27-403. Ada dua extra opsional: dev untuk pytest, black, dan ruff, serta litellm dengan batas versi >=1.80,<1.87; berkas yang sama juga mendaftarkan console script guardian = "cli.main:app" pyproject.toml:42-544. Di Windows, console script itu tidak selalu tersedia, jadi gunakan python -m cli.main atau launcher guardian.bat yang hanya meneruskan argumen ke modul tersebut guardian.bat:1-35 QUICKSTART.md:141-1466.
Langkah inisialisasi menjalankan python -m cli.main init atau .\guardian.bat init QUICKSTART.md:16-287. Perintah init menulis konfigurasi ke ~/.guardian secara default, dengan opsi --config-dir dan --force untuk menimpa berkas yang sudah ada cli/commands/init.py:15-268. Perintah itu menyalin template config/guardian.yaml, menanyakan API key Gemini secara tersembunyi lalu menulis GOOGLE_API_KEY ke .env, serta membuat direktori ./reports dan ./logs cli/commands/init.py:33-749. Alternatif tanpa interaksi adalah make setup, yang menyalin .env.example menjadi .env bila belum ada dan membuat reports serta logs Makefile:42-46.
Verifikasi instalasi dilakukan dengan python -m cli.main --help lalu python -m cli.main models README.md:243-25110. Perintah models mencetak tabel model per provider (Gemini, OpenAI, Claude, OpenRouter, Requesty) dan mengingatkan lima nama variabel API key cli/commands/models.py:11-5711. Workflow pertama yang lazim dipakai adalah python -m cli.main workflow run --name recon --target example.com QUICKSTART.md:56-5912. Bila satu parameter didefinisikan di beberapa tempat, urutan prioritasnya adalah parameter YAML workflow, lalu blok konfigurasi, lalu default tool README.md:297-30113.
Menyetel config/guardian.yaml
Ada dua lokasi konfigurasi yang perlu dibedakan. init menyalin template ke ~/.guardian/guardian.yaml cli/commands/init.py:33-749, sedangkan dokumentasi menganjurkan menyunting config/guardian.yaml di repository atau ~/.guardian/guardian.yaml QUICKSTART.md:124-13114. Subcommand workflow dan recon memakai config/guardian.yaml relatif terhadap direktori kerja sebagai default opsi --config/-c, jadi berkas di repository yang terbaca kecuali diarahkan lain cli/commands/workflow.py:22-2715 cli/commands/recon.py:32-3716.
Blok ai memilih provider aktif dan menyimpan kredensial per provider; nilai api_key: null berarti kunci diambil dari environment variable config/guardian.yaml:5-4517. Nilai bawaannya adalah provider: openai, temperature: 0.2, max_tokens: 8000, timeout: 60, dan rate_limit: 2 config/guardian.yaml:41-4518. Kunci konfigurasi yang paling sering disentuh:
| Kunci | Nilai default | Peran |
|---|---|---|
ai.provider | openai | provider aktif: gemini, openai, claude, openrouter, requesty, litellm |
ai.temperature | 0.2 | suhu sampling untuk semua provider |
ai.max_tokens | 8000 | batas token per panggilan |
ai.timeout | 60 | timeout request ke provider |
ai.rate_limit | 2 | batas request per detik per instance provider |
pentest.safe_mode | true | mencegah eksekusi perintah berisiko |
pentest.max_parallel_tools | 3 | jumlah tool paralel maksimum |
pentest.require_confirmation | true | konfirmasi sebelum menjalankan tool |
pentest.tool_timeout | 300 | timeout eksekusi tool dalam detik |
output.format | markdown | format laporan: markdown, html, json |
output.save_path | ./reports | direktori keluaran laporan |
output.verbosity | quiet | tingkat keluaran: quiet, normal, verbose, debug |
Nilai pada tabel diambil dari blok ai config/guardian.yaml:41-4518, blok pentest config/guardian.yaml:71-8719, dan blok output config/guardian.yaml:88-10020.
Blok ai.pricing memetakan nama model ke tarif prompt dan completion dalam USD per 1 juta token config/guardian.yaml:47-6821. Tabel ini dipakai untuk menghitung biaya per panggilan; model yang tidak terdaftar menghasilkan biaya 0.0 dan satu peringatan bahwa biaya akan dilaporkan sebagai $0.00 ai/providers/base_provider.py:39-5022. Bila provider baru dipakai, tambahkan entri harganya agar pelaporan biaya tidak kosong.
⚠️ Menyunting
config/guardian.yamldi repository tidak otomatis mengubah~/.guardian/guardian.yamlyang dibuatinit. Pilih satu lokasi, atau arahkan setiap perintah dengan--configcli/commands/workflow.py:22-2715.
Variabel lingkungan dan berkas .env
.env.example hanya mengaktifkan satu variabel, yaitu GOOGLE_API_KEY, sementara LANGCHAIN_TRACING_V2, LANGCHAIN_API_KEY, LANGCHAIN_PROJECT, GUARDIAN_CONFIG_PATH, dan GUARDIAN_REPORTS_DIR tersedia sebagai baris komentar yang harus dibuka sendiri .env.example:1-1723. Provider membaca api_key dari blok konfigurasi lebih dulu, lalu jatuh ke environment variable bila nilainya kosong, misalnya OPENAI_API_KEY untuk provider OpenAI ai/providers/openai_provider.py:26-3324.
| Variabel | Provider / fungsi | Status di .env.example |
|---|---|---|
GOOGLE_API_KEY | Gemini | aktif, perlu diisi |
OPENAI_API_KEY | OpenAI | tidak dicantumkan, disebut di README |
ANTHROPIC_API_KEY | Claude | tidak dicantumkan, disebut di README |
OPENROUTER_API_KEY | OpenRouter | tidak dicantumkan, disebut di README |
REQUESTY_API_KEY | Requesty | tidak dicantumkan, disebut di README |
LANGCHAIN_TRACING_V2 | LangSmith tracing | komentar |
LANGCHAIN_API_KEY | LangSmith tracing | komentar |
LANGCHAIN_PROJECT | nama proyek LangSmith | komentar |
GUARDIAN_CONFIG_PATH | path konfigurasi kustom | komentar |
GUARDIAN_REPORTS_DIR | direktori laporan kustom | komentar |
Sumber tabel adalah .env.example:1-1723, daftar variabel kunci pada README.md:228-24125, dan pengingat nama variabel di keluaran models cli/commands/models.py:11-57. README juga menampilkan bentuk blok YAML per provider di config/guardian.yaml sebagai alternatif environment variable README.md:192-226. Untuk provider lokal, OLLAMA_HOST dipakai sebagai penunjuk endpoint Ollama QUICKSTART.md:66-70.
Deployment dengan Docker
Image dibangun bertahap. Stage builder mengompilasi ffuf dari sumber dengan golang:alpine, lalu menarik biner resmi httpx, subfinder, nuclei, gobuster, amass, dan gitleaks dari image masing-masing Dockerfile:8-17. Stage runtime memakai python:3.11-alpine, menetapkan GUARDIAN_HOME=/guardian, dan menjadikannya working directory Dockerfile:22-35. Seluruh biner hasil stage sebelumnya disalin ke /usr/local/bin Dockerfile:78-85, lalu berkas aplikasi (cli/, core/, ai/, tools/, utils/, workflows/, config/, reports/) disalin dan dipasang dengan pip install --no-cache-dir -e . Dockerfile:111-124.
Container berjalan sebagai user non-root guardian dengan UID 1000, dan ENTRYPOINT-nya adalah python -m cli.main dengan CMD ["--help"] Dockerfile:130-143. Konsekuensinya, container tanpa argumen hanya mencetak bantuan lalu keluar, sehingga pola pakainya adalah docker compose run --rm guardian <perintah> bukan up -d docs/DOCKER.md:5-3728 Makefile:84-98.
graph LR
ctx["build context ."] --> image["guardian-cli:latest"]
image --> entry["ENTRYPOINT python -m cli.main"]
entry --> user["USER guardian UID 1000"]
envf[".env via env_file"] --> entry
cfgv["./config -> /guardian/config"] --> entry
rep["./reports -> /guardian/reports"] --> entry
style image fill:#8b5cf6,color:#fff
style envf fill:#f59e0b,color:#000
style cfgv fill:#f59e0b,color:#000
style rep fill:#336791,color:#fff
style user fill:#2d7d46,color:#fff
%% fig: Alur dari build context ke container yang berjalan sebagai non-root
%% desc: Build menghasilkan image, lalu env_file dan volume config serta reports disuntikkan ke container sebelum entrypoint dijalankan sebagai user guardian.docker-compose.yml mendefinisikan satu service guardian yang membaca .env lewat env_file docker-compose.yml:11-1329, lalu memasang empat volume: ./reports, ./logs, ./config, dan ./workflows ke direktori yang sesuai di dalam container docker-compose.yml:14-2730. Service memakai network_mode: bridge, restart: "no", stdin_open: true, dan tty: true sehingga tidak dimaksudkan sebagai daemon yang hidup terus docker-compose.yml:42-4731.
| Mount host | Path container | Isi |
|---|---|---|
./reports | /guardian/reports | laporan hasil scan |
./logs | /guardian/logs | log aplikasi |
./config | /guardian/config | konfigurasi kustom |
./workflows | /guardian/workflows | workflow kustom |
Empat mount tersebut berasal dari docker-compose.yml:14-2730 dan diulang sebagai contoh pada docs/DOCKER.md:84-9432. Untuk mengganti konfigurasi tanpa mengubah image, mount satu berkas guardian.yaml langsung ke /guardian/config/guardian.yaml docs/DOCKER.md:129-13433. Alternatif tanpa compose memakai docker build -t guardian-cli:latest . lalu docker run --rm dengan volume dan -e yang sama docs/DOCKER.md:51-6334.
Target Makefile membungkus perintah yang sama: docker-build menandai image dengan :latest dan versi dari pyproject.toml, docker-run menjalankannya interaktif, sedangkan compose-up dan compose-down mengurus daur hidup service Makefile:84-98. Untuk eksekusi CLI di dalam venv, make run ARGS="scan --target example.com" memanggil python -m cli.main dengan argumen tersebut Makefile:107-109.
⚠️ Berkas
.envdikecualikan dari build context.dockerignore, padahal compose mewajibkannya lewatenv_file. Salin.env.examplemenjadi.envlebih dulu, jika tidakdocker compose rungagal karena berkas tidak ada .dockerignore:49-52 docker-compose.yml:11-1329.
⚠️ Build image menuntut memori besar; dokumentasi menyarankan minimal 4GB pada Docker Desktop docs/DOCKER.md:222-22735. Perintah perbaikan izin
chmod 777 -R ./reports ./logsbersifat destruktif terhadap permission direktori lokal, jadi jalankan hanya bila mount benar-benar gagal docs/DOCKER.md:229-23436.
Untuk rahasia produksi, jangan menaruh kunci di .env yang ikut terbaca banyak pihak; dokumentasi menyarankan Docker secret dan memastikan container tetap berjalan sebagai non-root guardian docs/DOCKER.md:279-29737.