前回に引き続き、browser-use関連です。自宅にGPUもあるんだしせっかくならbrowser-useをローカルLLMで試してみます。browser-use-webuiを利用する例は、ググればたくさんでてくるのですが、逆にbrowser-use-webuiを使わないパターンはなさそうだったので、トライすることにしてみました。また今回はコンテナ上で起動しているZabbixをbrowser-useを使って操作しています。
環境イメージ
前回構成した環境をそのまま利用していますので、まずは下記記事をご確認ください。
前提
OS:Ubuntu 22.04.5 LTS
Docker version: 27.3.1, build ce12230
Docker Compose version: v2.29.7
GPU: GEFORCE RTX 4090
NVIDIA-SMI: 560.35.03
Driver Version: 560.35.03
CUDA Version: 12.6
nvidia-container-toolkit:1.17.2
LLM:qwen2.5:32b-instruct-q4_K_M
Zabbix:7.2.3
1. Zabbixサーバ用コンテナ作成
任意のディレクトリにdocker-compose.ymlを作成します。
services:
mysql:
image: mysql:8.0
container_name: zabbix-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
volumes:
- mysql_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- zabbix-net
zabbix-server:
image: zabbix/zabbix-server-mysql:latest
container_name: zabbix-server
restart: always
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
depends_on:
- mysql
ports:
- "10051:10051"
networks:
- zabbix-net
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
restart: always
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_password
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: "Asia/Tokyo"
depends_on:
- mysql
- zabbix-server
ports:
- "8080:8080"
networks:
- zabbix-net
zabbix-agent:
image: zabbix/zabbix-agent:latest
container_name: zabbix-agent
restart: always
environment:
ZBX_HOSTNAME: "zabbix-agent"
ZBX_SERVER_HOST: "zabbix-server"
depends_on:
- zabbix-server
networks:
- zabbix-net
networks:
zabbix-net:
driver: bridge
volumes:
mysql_data:
Zabbix関連のコンテナを起動します。
docker-compose up -d
このままではZabbix-serverが起動しない為、必要なデータを公式サイトからダウンロードし、zabbix-mysqlコンテナに転送します。
wget https://cdn.zabbix.com/zabbix/sources/stable/7.2/zabbix-7.2.3.tar.gz
tar zxvf zabbix-7.2.3.tar.gz
cd zabbix-7.2.3/database/mysql/
docker cp images.sql zabbix-mysql:/tmp/
docker cp data.sql zabbix-mysql:/tmp/
zabbix-mysqlコンテナにログインして、転送したsqlを適用します。(パスワードはzabbix_password)
docker exec -it zabbix-mysql /bin/bash
mysql -u root -p zabbix < /tmp/images.sql
mysql -u root -p zabbix < /tmp/data.sql
exit
Zabbix関連のコンテナステータスがすべてUPとなっていることを確認します。
root@docker001:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13927cb8f1c2 ollama/ollama "/bin/ollama serve" 54 minutes ago Up 50 minutes 0.0.0.0:11434->11434/tcp, :::11434->11434/tcp ollama
96bbad4fb83e zabbix/zabbix-web-nginx-mysql:latest "docker-entrypoint.sh" 20 hours ago Up 20 hours (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 8443/tcp zabbix-web
57975519b94f zabbix/zabbix-agent:latest "/usr/bin/docker-ent…" 20 hours ago Up 20 hours 10050/tcp zabbix-agent
50a7e97e17e4 zabbix/zabbix-server-mysql:latest "/usr/bin/docker-ent…" 20 hours ago Up 20 hours 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-server
557f7db4b1f1 mysql:8.0 "docker-entrypoint.s…" 20 hours ago Up 20 hours 3306/tcp, 33060/tcp zabbix-mysql
2. ollama用コンテナ作成
次にローカルLLMを利用するためにollamaコンテナを作成します。
docker run -d --runtime=nvidia --gpus=all --ulimit memlock=-1:-1 -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
コンテナ作成の次はモデルをダウンロードします。(qwen2.5:32b-instruct-q4_K_Mは19GBあります)
docker exec -it ollama /bin/bash
ollama pull qwen2.5:32b-instruct-q4_K_M
ollama listコマンドでモデル一覧からqwen2.5:32b-instruct-q4_K_Mが存在していることを確認します。
ollama list
NAME ID SIZE MODIFIED
qwen2.5:32b-instruct-q4_K_M 9f13ba1299af 19 GB 4 seconds ago
3. Browser_UseでZabbix画面を操作
Zabbixおよびollamaが準備できましたので、Browser_Useを実行するコンテナにログインしましょう。
docker exec -it ubuntu-rdp-desktop /bin/bash
cd ~
source browser_use/bin/activate
BrowserUse実行用コードを作成します。Taskに日本語を設定すると失敗するため、指示は英語にしました。
import asyncio
import certifi
import os
from browser_use import Agent
from browser_use.agent.views import AgentHistoryList
from langchain_ollama import ChatOllama
os.environ['REQUESTS_CA_BUNDLE'] = './myCA.pem' # Proxy CA
os.environ['http_proxy'] = 'http://10.x.x.x:8080' # Proxyアドレス
os.environ['https_proxy'] = 'http://10.x.x.x:8080' # Proxyアドレス
os.environ['NO_PROXY'] = 'localhost,127.0.0.1,10.x.x.x' # ローカルアドレスをProxy経由にさせない
certifi.where = lambda: '/etc/ssl/certs/ca-certificates.crt'
async def run_search() -> AgentHistoryList:
agent = Agent(
task=(
"Please access 'http://10.x.x.x:8080/' and log in with Username: Admin, Password: zabbix to obtain the site title."
),
llm=ChatOllama(
model='qwen2.5:32b-instruct-q4_K_M',
base_url="http://10.x.x.x:11434", # Dockerホストのアドレス
num_ctx=32000,
),
)
await agent.run()
if __name__ == '__main__':
asyncio.run(run_search())
ではDesktop上で実行しましょう
python3 ollama_zabbix.py
Zabbixログインページが表示されます。
タスク指示にあるとおり、サイトのタイトルを取得していることがわかります。
ollamaコンテナのログをモニタリングした結果は以下の通りでした。
[GIN] 2025/02/12 - 21:53:20 | 200 | 33.282570628s | 172.17.0.1 | POST "/api/chat"
[GIN] 2025/02/12 - 21:53:58 | 200 | 36.270584965s | 172.17.0.1 | POST "/api/chat"
[GIN] 2025/02/12 - 21:54:50 | 200 | 44.702575504s | 172.17.0.1 | POST "/api/chat"