Saudações.
Nesse tutorial vou ensinar como criar um servidor OpenCode 2 para o usuário root, com poderes totais e ilimitados, um tipo de instalação que eu uso em servidores de desenvolvimento e pesquisa mas que deve ser evitada em servidores críticos de produção.
Esse método é o mais simples de todos e o opencode roda como root em um serviço persistente gerido pelo systemd.
Instalando
Instalar o OpenCode no servidor dentro da pasta /root
# Instalar o OpenCode 2 (o instalador deixa o binario em /root/.opencode/bin)
curl -fsSL https://opencode.ai/v2/install | bash;
# Copiar (nao linkar!)
install -m 755 /root/.opencode/bin/opencode /usr/local/bin/opencode;
Unit no SystemD
Crie a unit do serviço “opencode“:
# Servico OpenCode raiz (root)
(
echo '[Unit]';
echo 'Description=OpenCode Root';
echo 'After=network-online.target';
echo 'Wants=network-online.target';
echo;
echo '[Service]';
echo 'User=root';
echo 'Group=root';
echo 'WorkingDirectory=/root';
echo 'Environment=HOME=/root';
echo 'EnvironmentFile=/root/.opencode/env';
echo 'ExecStart=/root/.opencode/bin/opencode serve --service --hostname 127.0.0.1';
echo 'Restart=always';
echo 'RestartSec=3';
echo 'KillMode=mixed';
echo 'TimeoutStopSec=20';
echo;
echo '[Install]';
echo 'WantedBy=multi-user.target';
echo;
) > /etc/systemd/system/opencode.service;
Variáveis de ambiente particulares
Deixarei o arquivo /root/.opencode/env disponível para registro de variáveis de ambiente específicas para o processo do OpenCode.
# Configuracao do provedor/roteador (LiteLLM Proxy, OmniRouter, Manifest, Thinker)
[ -f /root/.thinker-url ] || \
echo 'https://thinker.dominio.com' > /root/.thinker-url;
[ -f /root/.thinker-key ] || \
echo 'thk_xxxxxxxx' > /root/.thinker-key;
[ -f /root/.thinker-model ] || \
echo 'auto' > /root/.thinker-model;
# Arquivo para variaveis de ambiente do OpenCode root
if [ -f ~/.opencode/env ]; then
echo "# ENV ja existe: ~/.opencode/env";
else
# Ambiente root
(
echo 'HOME=/root';
echo;
echo 'OPENCODE_PASSWORD=senha-aqui';
echo;
echo "THINKER_URL=$(head -1 /root/.thinker-url)";
echo "THINKER_KEY=$(head -1 /root/.thinker-key)";
echo "THINKER_MODEL=$(head -1 /root/.thinker-model)";
echo;
) > ~/.opencode/env;
fi;
Personalização de tema TUI
Configuração opcional, apenas para já iniciar com o tema colorido de sua preferência.
# Personalizacoes visuais em Borg (laranja)
if [ -f ~/.config/opencode/cli.json ]; then
echo "# CLI ja existe: ~/.config/opencode/cli.json";
else
(
echo '{';
echo ' "$schema": "https://opencode.ai/v2/cli.json",';
echo ' "theme": {';
echo ' "name": "luent-orng",';
echo ' "mode": "dark"';
echo ' }';
echo '}';
) > ~/.config/opencode/cli.json;
fi;
Configuração principal
Configuração inicial para liberar o agente a trabalhar livremente (perigoso mais proveitoso).
# Configuracoes ROOT (nao pergunta nada, poder ilimitado)
mkdir -p ~/.opencode/config;
if [ -f /root/.opencode/config/opencode.json ]; then
echo "# Configuracao ja existe: ~/.opencode/config/opencode.json";
else
(
echo '{';
echo ' "$schema": "https://opencode.ai/config.json",';
echo ' "permissions": [';
echo ' { "action": "*", "resource": "*", "effect": "allow" }';
echo ' ]';
echo '}';
) > ~/.opencode/config/opencode.json;
fi;
Ativando o serviço OpenCode do root
Agora vamos ativar e colocar o comando no PATH natural.
# Parar instancia iniciada pelo modo cliente
opencode service stop;
# Registrar novos servicos
systemctl daemon-reload;
# Ativar servico
systemctl enable opencode;
# Parar servico
systemctl stop opencode;
# Limpar status anterior
systemctl reset-failed opencode;
# Colocar pra rodar
systemctl start opencode;
# Conferir status
systemctl status opencode;
Inspecionar serviço
Comandos para analisar se o serviço está rodando e saudável:
# Analise dos servicos
systemctl status opencode --no-pager -l;
# Analise mais especifica (exemplo watson)
journalctl -u opencode -n 100 --no-pager
journalctl -u opencode -f;
systemd-analyze verify /etc/systemd/system/opencode.service;
# Conferir processos
ps aux | grep opencode;
# Analise da API
opencode api get /api/info | head -c 200;
Atualizar opencode root
Procedimento/script para atualizar o binário e reiniciar o serviço:
# Parar o servico
systemctl stop opencode;
killall opencode;
# Upgrade
# - Para ultima versao (versao estavel)
/root/.opencode/bin/opencode upgrade;
# - Ou, para pinar em uma versao especifica
# garante pinagem em versao escolhida
#-/root/.opencode/bin/opencode upgrade v2.1.1;
# Republicar para todos os usuarios
install -m 755 \
/root/.opencode/bin/opencode \
/usr/local/bin/opencode;
# Iniciar servico atualizado
systemctl start opencode;
TUI via SSH
Acesso remoto OpenCode por meio de canal SSH com TTY (requer -t para TUI funcionar bem):
# Abrindo TUI remoto no terminal local (tudo roda 100% no lado servidor)
ssh -t -p 22 root@45.255.128.2 'opencode --auto';
.
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
“Quem tem poder e hesita em usá-lo demonstra
fraqueza perante seus adversários.“
Autor desconhecido
