Membangun AI Stack Ringan di Raspberry Pi: 9router, Hermes, dan Claude dalam Satu Container Docker
Menjalankan ekosistem AI yang mumpuni di perangkat dengan sumber daya terbatas seperti Raspberry Pi 4 menghadirkan tantangan tersendiri. Pada artikel ini, kita akan membahas cara mengintegrasikan 9router (sebagai local API gateway), Hermes Agent (sebagai bot Telegram), dan Claude Code (untuk tugas berbasis CLI) ke dalam satu wadah container Docker yang sangat ringan. Masalah utama yang sering dihadapi dalam skenario ini adalah manajemen ruang penyimpanan yang membengkak serta aplikasi berbasis Terminal User Interface (TUI) yang sering kali crash saat dipaksa berjalan di latar belakang (background). Solusi di bawah ini menggunakan basis OS slim, teknik mode headless dan gateway, serta mekanisme auto-restart agar sistem berjalan sepenuhnya otonom.
Langkah 1: Persiapan Direktori Host dan Penyimpanan Permanen
Sebelum mengonfigurasi Docker, kita perlu menyiapkan struktur direktori di sistem host (Raspberry Pi) agar semua data, log, dan konfigurasi tetap aman meskipun container dihapus atau di-restart. Direktori ini akan kita petakan (mount) ke dalam container.
# Membuat direktori kerja untuk project Docker
mkdir -p ~/ai-stack
cd ~/ai-stack
# Membuat direktori penyimpanan data persisten
mkdir -p /home/admin/DATA/9router
mkdir -p /home/admin/DATA/claude
mkdir -p /home/admin/DATA/hermes
Langkah 2: Menyusun Dockerfile Teroptimasi
Untuk menghemat ruang disk, kita menghindari penggunaan OS berukuran besar seperti Ubuntu standar. Sebagai gantinya, kita menggunakan node:20-bookworm-slim. Pada tahap ini, kita juga menyuntikkan Environment Variables agar lalu lintas API dari Hermes dan Claude otomatis dirutekan melalui 9router (127.0.0.1:20128).
# File: ~/ai-stack/Dockerfile
FROM node:20-bookworm-slim
ENV DEBIAN_FRONTEND=noninteractive
# Konfigurasi Rute Internal ke 9router lokal
ENV OPENAI_BASE_URL="[http://127.0.0.1:20128/v1](http://127.0.0.1:20128/v1)"
ENV OPENAI_API_KEY="sk-9router-dummy-key"
ENV ANTHROPIC_BASE_URL="[http://127.0.0.1:20128](http://127.0.0.1:20128)"
ENV ANTHROPIC_API_KEY="sk-9router-dummy-key"
# ENV INITIAL_PASSWORD="PasswordKuatAnda123" # Opsional: Password Dasbor 9router
# Instalasi dependensi minimalis
RUN apt-get update && apt-get install -y --no-install-recommends \
curl git python3 python3-pip python3-venv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Instal 9router & Claude Code, lalu bersihkan cache instalasi
RUN npm install -g 9router @anthropic-ai/claude-code \
&& npm cache clean --force
# Instal Hermes Agent
RUN curl -fsSL [https://hermes-agent.nousresearch.com/install.sh](https://hermes-agent.nousresearch.com/install.sh) | bash
# Buat folder internal dan symlink ke direktori persisten
RUN mkdir -p /data/9router /data/claude /data/hermes && \
ln -s /data/9router /root/.9router && \
ln -s /data/claude /root/.claude && \
ln -s /data/hermes /root/.hermes
COPY start.sh /start.sh
RUN chmod +x /start.sh
EXPOSE 20128
ENTRYPOINT ["/start.sh"]
Langkah 3: Mengonfigurasi Script Startup (Headless & Gateway Mode)
Karena 9router dan Hermes dirancang sebagai aplikasi interaktif (TUI), mereka akan mengalami crash (fd=0) jika dieksekusi menggunakan nohup standar. Solusinya adalah menjalankan 9router dengan parameter --headless dan Hermes menggunakan perintah gateway untuk keperluan long-polling Telegram Bot.
# File: ~/ai-stack/start.sh
#!/bin/bash
# Membuka akses jaringan keluar container
export HOSTNAME=0.0.0.0
export HOST=0.0.0.0
echo "Memulai 9router di mode headless..."
nohup $(which 9router) --headless > /data/9router.log 2>&1 &
echo "Memulai Hermes Gateway untuk Telegram Bot..."
nohup $(which hermes) gateway > /data/hermes.log 2>&1 &
echo "Sistem otonom aktif. Menahan proses agar container tetap hidup..."
tail -f /dev/null