- https://www.hostg.xyz/SHJHL
- Cupom:
OTAVIOMIRANDA(10% de desconto)
Documentar, em ordem, todo o processo de configuração do VPS para rodar o Paperclip.
- Provedor: Hostinger
- Plano: KVM 2
- Projeto: Paperclip
- Na página de gerenciamento do VPS, clicar em
Terminalno canto superior direito. - Isso abre o terminal do VPS no navegador.
- Atualizar a lista de pacotes e instalar as atualizações disponíveis do sistema.
- Criar o usuário
luizotaviocom diretório home e shellbash. - Adicionar o usuário
luizotavioao gruposudo. - Adicionar o usuário
luizotavioao grupodocker. - Definir a senha do usuário
luizotavio. - No computador local, gerar uma chave SSH
ed25519dedicada para esse acesso. - Adicionar o host
inprod.cloudao arquivoknown_hosts. - Copiar a chave pública para o servidor usando o usuário
luizotavio. - Conectar ao VPS por SSH usando o usuário
luizotavio. - Definir o
vimcomo editor padrão no servidor. - Liberar
sudosem solicitar senha para o usuárioluizotaviotemporariamente. - Instalar o
nvmusando o script oficial do projeto. - Carregar o
nvmna sessão atual sem reiniciar o shell. - Instalar o Node.js
24usandonvm. - Verificar a versão instalada do Node.js.
- Verificar a versão instalada do
npm. - Instalar globalmente os CLIs de IA que serão usados no servidor.
- Instalar o Claude Code usando o script oficial.
- Escolher a IA que será usada no servidor.
- Para essa escolha, evitar modelos
mini,spark,flashehaiku. - Usar um modelo mais parrudo para essa etapa.
- A IA escolhida para essa etapa foi o Codex/OpenAI.
- Abrir o Codex CLI para iniciar a autenticação.
- Na tela de login do Codex, escolher a forma de autenticação.
- Após autenticar no Codex, pedir para ele aplicar o hardening do VPS usando
como base o
DEV_GUIDE.mddo repositóriovps_deploy_template. - Permitir o uso de
sudodiretamente e solicitar um relatório final do que foi feito. - Autenticar o GitHub CLI no servidor com a conta que controlará o repositório.
- Expandir os escopos do
ghpara permitir operações amplas de automação. - Configurar o
gitpara usar o GitHub CLI comocredential helper. - Verificar o estado final da autenticação com
gh auth status.
apt update && apt upgrade -y
useradd -m -s /bin/bash luizotavio
usermod -aG sudo luizotavio
usermod -aG docker luizotavio
passwd luizotaviossh-keygen -t ed25519 -a 100 -f ~/.ssh/id_hostinger -C "luizotavio"
ssh-keyscan inprod.cloud >> ~/.ssh/known_hosts
ssh-copy-id -i ~/.ssh/id_hostinger.pub luizotavio@inprod.cloud
ssh luizotavio@inprod.cloud# VIM Padrão
sudo update-alternatives --set editor /usr/bin/vim.basic
# Sudoers para permitir que o modelo faça hardening do VPS (Lembre-se de remover depois)
echo "luizotavio ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/luizotavio
# NVM + NodeJS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
\. "$HOME/.nvm/nvm.sh"
nvm install 24
node -v
npm -v
# Gemini, Codex e Pi
npm install -g @google/gemini-cli @openai/codex @mariozechner/pi-coding-agent @anthropic-ai/claude-code
# Claude
# curl -fsSL https://claude.ai/install.sh | bash
# Faça login no CLI que for usar, vou usar o codex para este comando
echo "Use the link provided as a base to apply the VPS hardening. https://raw.githubusercontent.com/luizomf/vps_deploy_template/refs/heads/main/DEV_GUIDE.md. You can use sudo directly. Report-me what you did." | codex -c model_reasoning_effort=xhigh -m gpt-5.4 --yolo exec
# Isso é para o container, criei uma conta no GH especificamente para os agentes
gh auth login --web --git-protocol https
gh auth refresh --scopes workflow,project,delete_repo,admin:public_key,admin:org,admin:org_hook
gh auth setup-git
gh auth statusEscrito por Codex GPT 5.4 xhigh
O fluxo acima parte do login padrão do GitHub CLI e depois adiciona escopos extras para ampliar o controle disponível no servidor:
workflowprojectdelete_repoadmin:public_keyadmin:orgadmin:org_hook
Os escopos mínimos (repo, read:org e gist) já fazem parte do fluxo padrão
do gh.
Do container do paperclip (da Hostinger).
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND="${DEBIAN_FRONTEND:-noninteractive}"
RUN_APT_UPGRADE="${RUN_APT_UPGRADE:-0}"
log() {
printf '\n==> %s\n' "$*"
}
have() {
command -v "$1" >/dev/null 2>&1
}
APT_PACKAGES=(
sudo
gh
ca-certificates
locales
tzdata
bash
zsh
openssl
curl
wget
git
openssh-client
openssh-server
file
less
bubblewrap
procps
build-essential
vim
make
pkg-config
pkgconf
llvm
cmake
ninja-build
autoconf
automake
libtool
libtool-bin
gettext
zlib1g-dev
libbz2-dev
liblzma-dev
lzma
libreadline-dev
libssl-dev
libffi-dev
libgdbm-dev
ncurses-term
python3
python3-dev
python3-venv
pipx
libsqlite3-dev
sqlite3
nano
bat
ripgrep
fd-find
jq
watch
htop
tree
inotify-tools
p7zip
unzip
ffmpeg
iputils-ping
dnsutils
traceroute
iproute2
net-tools
aria2
shellcheck
)
log "Updating apt indexes"
sudo apt-get update
if [[ "$RUN_APT_UPGRADE" == "1" ]]; then
log "Upgrading system packages (RUN_APT_UPGRADE=1)"
sudo apt-get upgrade -y
else
log "Skipping full apt upgrade (set RUN_APT_UPGRADE=1 to enable)"
fi
log "Installing apt packages"
sudo apt-get install -y "${APT_PACKAGES[@]}"
log "Installing/updating global npm CLIs"
sudo npm install -g @mariozechner/pi-coding-agent @google/gemini-cli @openai/codex
if ! have hermes; then
log "Installing Hermes"
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash -s -- --skip-setup
else
log "Hermes already installed"
fi
if ! have claude; then
log "Installing Claude CLI"
curl -fsSL https://claude.ai/install.sh | bash
else
log "Claude CLI already installed"
fi
log "Configuring git globals"
git config --global user.name "Otávio Miranda"
git config --global user.email "otaviomirandabr19@gmail.com"
git config --global init.defaultBranch main
git config --global core.autocrlf input
git config --global core.eol lf
log "Bootstrap complete"
# ADICIONAR AO EDITOR DO compose.yaml na Hostinger
# PATH: "/paperclip/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"- Atualização do índice do
apt. apt upgradeopcional comRUN_APT_UPGRADE=1.- Instalação do conjunto base de pacotes do sistema.
- Instalação ou atualização global dos CLIs
pi-coding-agent,gemini-cliecodex. - Instalação condicional do Hermes e do Claude CLI.
- Configuração global inicial do Git.
- Criação do usuário
luizotavio. - Inclusão do usuário nos grupos
sudoedocker. - Configuração de senha e acesso SSH.
- Liberação temporária de
sudosem senha. - Instalação do
nvme do Node.js24. - Autenticação no Codex CLI.
- Autenticação do GitHub CLI no servidor e expansão dos escopos.
- Execução do hardening baseado no
DEV_GUIDE.md.
- A liberação de
sudosem senha paraluizotaviofoi marcada como temporária. - O
nvmfoi usado para instalar o Node.js. - Na etapa de escolha da IA, a orientação foi evitar modelos
mini,spark,flashehaiku, priorizando um modelo mais forte. - A IA escolhida foi o Codex/OpenAI.
- Para executar o hardening do VPS com o Codex, foi usado o modelo
gpt-5.4commodel_reasoning_effort=xhigh.
Instale e configure o RTK neste servidor.
Referência:
https://github.com/rtk-ai/rtk
Objetivo:
- instalar o binário do RTK
- deixá-lo acessível no PATH
- executar o init do RTK para todos os ambientes compatíveis disponíveis aqui
- tornar obrigatório o uso de `rtk` como prefixo de comandos shell nos `AGENTS.md` dos agentes do Paperclip, incluindo o seu
Contexto:
- você está rodando em Pi
- também podem existir no container: `codex`, `gemini`, `claude` e `hermes`
- o RTK reduz trechos desnecessários da saída dos comandos para economizar tokens
Faça:
1. Verifique se o RTK já está instalado; se não estiver, instale.
2. Confirme com `which rtk` e `rtk --version`.
3. Detecte quais destes ambientes são compatíveis com RTK: Pi, Codex CLI, Gemini CLI, Claude CLI e Hermes.
4. Execute o init/configuração do RTK em todos os ambientes compatíveis.
5. Não invente integração. Se algum ambiente não for compatível, documente claramente no relatório final.
6. Atualize os `AGENTS.md` relevantes para impor a regra rígida:
`Sempre prefixe comandos shell com rtk, exceto quando houver incompatibilidade técnica explícita.`
7. Inclua essa mesma regra no seu próprio `AGENTS.md`.
8. Valide a configuração com testes mínimos e não destrutivos.
Entregue no final:
- funcionou?
- onde o RTK foi instalado
- quais ambientes foram configurados
- quais ambientes não puderam ser configurados
- quais arquivos `AGENTS.md` foram alterados
- como validar depois que tudo continua funcionando