Pular para o conteúdo
Documentação: Instalar

Instalar o Ronne AI Marketplace

Rodar uma instância com Docker ou Node, como serviço, um domínio com HTTPS, o setup inicial, o root e a atualização.

A documentação que vem no Ronne AI Marketplace 0.3.0, traduzida do inglês.

Com Docker

Você precisa do Docker com o Compose 2.23.1 ou mais recente. No macOS ou no Linux, o script de instalação faz o resto, em um terminal.

curl -fsSL https://www.ronne.ai/marketplace/install.sh | sh

O endereço redireciona para o script do release mais recente no GitHub, que também funciona diretamente:

https://github.com/ronneai/ronne-marketplace/releases/latest/download/install.sh

Ele verifica se o Docker está rodando, pergunta se o Ronne vai rodar neste computador ou em um servidor com domínio (e então pede o domínio e, opcionalmente, um e-mail para avisos sobre o certificado) e verifica as portas: neste computador, se 7650 e 7651 estiverem ocupadas, ele usa o próximo par livre depois delas. Ele grava compose.yaml e .env em uma pasta ronne-marketplace na sua pasta pessoal, inicia o Ronne e o abre no navegador. Neste computador, o Ronne responde só neste computador (127.0.0.1), não na sua rede: para acessá-lo de outros dispositivos, depois do setup coloque RONNE_PORT=0.0.0.0:7650 e PUBLIC_URL com o endereço deste computador (http://192.168.1.20:7650, por exemplo) nesse .env (o script mantém os dois) e rode docker compose up -d nessa pasta. Ele instala o release de onde veio e nunca usa sudo. Rode-o de novo para atualizar: ele mantém as suas respostas e pergunta antes de passar para uma versão mais nova.

Para fazer à mão, você precisa de um só arquivo: o compose.yaml do repositório. Ele baixa a imagem ronneai/marketplace do Docker Hub, então não é preciso clonar nada. O SQLite não precisa de servidor; para PostgreSQL ou MySQL, um perfil sobe um servidor ao lado do Ronne.

mkdir ronne && cd ronne
curl -fsSLO https://raw.githubusercontent.com/ronneai/ronne-marketplace/main/compose.yaml
docker compose up -d                          # then open http://localhost:7650
docker compose --profile postgres up -d       # or --profile mysql, with RONNE_DB_PASSWORD set

Depois abra o endereço e siga o setup. Os seus dados (o arquivo SQLite, os itens armazenados e as configurações) ficam no volume ronne-data, montado em /app/data; faça backup desse volume.

Um pequeno proxy, o Caddy, roda ao lado do Ronne e é o único caminho de entrada: ele serve HTTP na porta 7650 e HTTPS na 7651, portas que nenhum programa comum usa. O Ronne em si escuta internamente na porta 3000, que não é publicada. As configurações ficam em um arquivo .env ao lado do compose.yaml; depois de mudá-lo, rode docker compose up -d de novo. RONNE_PORT=3000 mantém o endereço de uma instalação anterior ao proxy.

Um domínio e HTTPS

Dê um domínio ao Ronne e o proxy obtém e renova o certificado HTTPS dele no Let's Encrypt, e redireciona http:// para https://. Primeiro aponte o DNS do domínio (A, e AAAA para IPv6) para o servidor e abra as portas 80 e 443 no firewall dele. Depois, no .env:

RONNE_DOMAIN=ronne.example.com
RONNE_PORT=80
RONNE_HTTPS_PORT=443
[email protected]   # optional: expiry notices

A primeira visita a https://ronne.example.com leva alguns segundos enquanto o certificado é emitido. O PUBLIC_URL acompanha o domínio, a menos que você o defina.

ConfiguraçãoPadrãoO que faz
RONNE_PORT7650A porta HTTP no host. 80 com um domínio.
RONNE_HTTPS_PORT7651A porta HTTPS no host (TCP, e UDP para HTTP/3). 443 com um domínio.
RONNE_DOMAINemptyO nome a servir por HTTPS. Vazio: só HTTP, em qualquer nome.
RONNE_TLSautoCom um domínio: auto (Let's Encrypt), files (o seu próprio certificado) ou internal (a CA de teste do próprio proxy).
RONNE_ACME_EMAILemptyPara onde a autoridade certificadora manda os avisos de expiração.
RONNE_TRUSTED_PROXIESemptyQuais endereços podem definir X-Forwarded-For, como private_ranges. Só atrás do seu próprio proxy.
PUBLIC_URLhttps://RONNE_DOMAIN, or http://localhost:RONNE_PORTO endereço que as pessoas abrem. Defina-o quando os padrões estiverem errados.
  • O seu próprio certificado (uma rede privada, ou um certificado do seu time de TI): RONNE_TLS=files, com cert.pem (a cadeia completa) e key.pem em uma pasta certs ao lado do compose.yaml. Crie a pasta antes do primeiro docker compose up: no Linux, se ela não existir, o Docker a cria com o root como dono, e aí você precisa de sudo para gravar nela. Depois de substituir os arquivos, rode docker compose up -d --force-recreate proxy. RONNE_TLS=internal emite um certificado de teste em vez disso; os navegadores mostram um aviso até que a CA dele seja confiável, e o rmk precisa de NODE_EXTRA_CA_CERTS.
  • Atrás do seu próprio proxy (nginx, Apache, Traefik, um balanceador de carga): deixe RONNE_DOMAIN vazio, aponte o proxy para http://127.0.0.1:7650 e defina RONNE_PORT=127.0.0.1:7650, o PUBLIC_URL com o endereço https do proxy e RONNE_TRUSTED_PROXIES=private_ranges, para que o log de auditoria e os limites de login vejam o endereço do cliente pelo X-Forwarded-For do proxy (que precisa acrescentar o endereço a esse cabeçalho). O limite de tamanho do corpo da requisição no proxy precisa ser de pelo menos 28 MB, para rascunhos mandados com um token; o padrão do nginx é 1 MB (client_max_body_size 28m;).
  • Portas 80 ou 443 já em uso ("port is already allocated"): outro servidor web roda no host. Use-o como o seu próprio proxy, como acima.
  • Sem certificado: verifique se o DNS aponta para o servidor, se as portas 80 e 443 estão abertas e se RONNE_PORT e RONNE_HTTPS_PORT são 80 e 443. docker compose logs proxy diz o motivo.
  • Guarde os certificados: eles ficam no volume caddy-data. Nunca rode docker compose down -v, que apaga esse volume junto com os seus dados; o Let's Encrypt limita com que frequência um domínio pode pedir certificados novos.

Com apt ou dnf

No Debian 12, Ubuntu 22.04, Fedora, RHEL 9 e mais recentes (glibc 2.34 ou mais recente), o Ronne é instalado como um pacote com o Node.js embutido, sem precisar de Docker nem de Node.js. A instalação faz do Ronne um serviço, iniciado no boot e reiniciado se parar. Baixe o .deb ou o .rpm para o seu processador (amd64 ou arm64) do release mais recente no GitHub e depois:

sudo apt install ./rmk-server_X.Y.Z-1_amd64.deb     # or _arm64.deb
sudo dnf install ./rmk-server-X.Y.Z-1.x86_64.rpm    # or .aarch64.rpm

Depois abra http://localhost:7650 e siga o setup. Sem Docker, o script de instalação faz isso por você: ele oferece o pacote, confere-o com o checksums.txt do release e pergunta antes de rodar sudo.

  • Onde as coisas ficam: o programa em /opt/rmk-server (e /usr/bin/rmk-server), os dados em /var/lib/rmk-server, as configurações em /etc/rmk-server/env, o log em journalctl -u rmk-server. Ele é gerenciado com os comandos de Como serviço, inclusive --domain para HTTPS.
  • Atualizar: instale o pacote novo do mesmo jeito. O serviço reinicia com ele, com as opções que tinha, e as migrações rodam na inicialização.
  • Remover: sudo apt remove rmk-server (ou dnf remove) para e remove o serviço e mantém os dados e as configurações; apt purge e dnf remove mostram o comando que os apaga.
  • Sem systemd (um contêiner): o pacote é instalado e diz como iniciar o Ronne à mão.

Com Node.js

Com o Node.js 22.12 ou mais recente, um comando baixa e inicia o Ronne, sem clone, sem Docker e sem build. O comando dele é rmk-server.

npx @ronneai/marketplace                    # then open http://localhost:7650
npm install --global @ronneai/marketplace    # or keep it installed, then: rmk-server

Depois siga o setup; em um terminal, a primeira inicialização abre o navegador. rmk-server setup faz o setup no terminal em vez disso (--yes para scripts), rmk-server migrate aplica as migrações e rmk-server reset-root-password redefine a senha do root.

  • Rede: ele escuta em 127.0.0.1:7650, só nesta máquina. --host 0.0.0.0 (ou HOST) o torna acessível pela rede, e --port (ou PORT) muda a porta. Uma porta ocupada faz com que ele pare em vez de escolher outra, já que o endereço fica salvo nas configurações.
  • Os dados (as configurações, o banco de dados SQLite, os itens armazenados) ficam em RONNE_DATA_DIR ou, por padrão, em ~/Library/Application Support/RonneAI Marketplace no macOS, ~/.local/share/rmk-server no Linux (ou dentro de XDG_DATA_HOME) e %LOCALAPPDATA%\RonneAI\Marketplace no Windows.
  • Atualizar: npx @ronneai/marketplace@latest, ou npm install --global @ronneai/marketplace de novo. As migrações rodam na inicialização.

Está trabalhando no próprio Ronne? A partir de um clone, com pnpm: pnpm install, depois pnpm build && pnpm start (ou pnpm dev) em http://localhost:3000. Por padrão, as configurações vão para apps/web/.env e um banco de dados SQLite para apps/web/data/.

Como serviço

No macOS, no Linux e no Windows, o rmk-server pode rodar como serviço: em segundo plano, iniciado no boot e reiniciado se parar (systemd no Linux, launchd no macOS, WinSW no Windows). Primeiro instale o Node.js para a máquina toda: o serviço roda com uma conta própria, que não consegue ler um Node.js na sua pasta pessoal (nvm). Se o sudo rmk-server não for encontrado, mantenha o seu PATH: sudo env "PATH=$PATH" rmk-server service install.

npm install --global @ronneai/marketplace
sudo rmk-server service install      # then open http://localhost:7650 and finish the setup
ComandoO que faz
rmk-server service statusInstalado ou não, rodando ou não, a versão, o endereço, a conta, as pastas e o proxy. O único sem sudo.
sudo rmk-server service stop | start | restartPara, inicia ou reinicia o serviço. Reinicie depois de atualizar com npm.
sudo rmk-server service logsAcompanha o log do serviço.
sudo rmk-server service uninstallRemove o serviço e as contas que ele criou. Os dados e as configurações ficam, e uma nova instalação os usa; --delete-data também os apaga, depois que você digitar o nome da pasta de dados.
sudo rmk-server setupO setup no terminal, para os dados do serviço (migrate e reset-root-password também).
  • Onde as coisas ficam no Linux: os dados em /var/lib/rmk-server, as configurações em /etc/rmk-server/env, o log em journalctl -u rmk-server, rodando com a conta rmk-server. No macOS: os dados em /usr/local/var/rmk-server (com Homebrew, /opt/homebrew/var/rmk-server), as configurações em etc/rmk-server/env do mesmo prefixo, o log em /Library/Logs/rmk-server/server.log, rodando com _rmkserver, ou com o seu usuário se usar --user. O macOS pode mostrar uma notificação sobre um novo item em segundo plano: é o serviço.
  • Opções: --port (7650) e --host (127.0.0.1, só esta máquina; 0.0.0.0 abre o serviço para a rede por HTTP simples, então coloque-o atrás de HTTPS). Rodar install de novo com outras opções atualiza o serviço e mantém os dados.
  • Um domínio com HTTPS: sudo rmk-server service install --domain ronne.example.com adiciona um segundo serviço, rmk-server-proxy, que roda o Caddy nas portas 80 e 443 com as mesmas configurações do proxy do Docker. Ele precisa do Caddy 2.7 ou mais recente no PATH (o pacote do próprio Debian e do Ubuntu é antigo demais: use o repositório do Caddy, ou brew install caddy) e para se outro servidor web estiver ocupando a 80 ou a 443. --tls internal usa a autoridade do próprio Caddy; --tls files lê cert.pem e key.pem de /etc/rmk-server-proxy/certs (no macOS, etc/rmk-server-proxy/certs do prefixo; cópias, não links; copie-os de novo depois de cada renovação e reinicie); --email recebe os avisos de expiração.
  • No Windows, rode os mesmos comandos sem sudo, em um terminal aberto como administrador (clique com o botão direito no PowerShell ou no Terminal, Run as administrator, "Executar como administrador"); status funciona em qualquer terminal, com os detalhes para administradores. A conta do serviço não consegue ler o seu perfil, onde fica a pasta global do npm (%APPDATA%\npm), então o install recusa um rmk-server instalado ali. Use o arquivo compactado do Windows (rmk-server-X.Y.Z-win32-x64.zip, ou -arm64, com o Node.js incluído; anexado aos releases a partir do release seguinte ao 0.2.0): descompacte-o em C:\Program Files\RonneAI, renomeie a pasta dele para Marketplace e rode o bin\rmk-server.cmd dele. Ou, no mesmo terminal de administrador, instale com npm em uma pasta para a máquina toda e rode o rmk-server.cmd dela pelo caminho completo (essa pasta não está no PATH): os comandos estão abaixo. Os dados em C:\ProgramData\RonneAI\Marketplace\data, as configurações em …\Marketplace\.env, os logs em …\Marketplace\logs\rmk-server-service.out.log (e .err.log), rodando com NT SERVICE\rmk-server. Sem domínio, --host 0.0.0.0 também adiciona uma regra de firewall para a porta, em redes privadas. --domain precisa do Caddy para a máquina toda (winget install --id CaddyServer.Caddy --scope machine; um no seu perfil é recusado), adiciona uma regra de firewall para 80 e 443 em todas as redes, e --tls files lê …\Marketplace\proxy\certs. setup, migrate e reset-root-password trabalham nos dados do serviço, com o seu usuário.
  • Sem systemd (um contêiner, WSL 1, outro sistema de init): não há serviço para instalar. Rode rmk-server start --no-open com o seu próprio supervisor, ou use o Docker.

No Windows, em um terminal aberto como administrador:

# The Windows bundle, unzipped and renamed:
& "C:\Program Files\RonneAI\Marketplace\bin\rmk-server.cmd" service install

# Or npm, into a folder for the whole machine:
npm install --global --prefix "C:\Program Files\RonneAI\npm" @ronneai/marketplace
& "C:\Program Files\RonneAI\npm\rmk-server.cmd" service install

O setup

Até que a instância passe pelo setup, toda página abre o setup, e a API responde 503 setup_required. O setup pede:

  1. O banco de dados. SQLite (o padrão: um arquivo, nada mais para instalar), MySQL ou MariaDB, ou PostgreSQL, com o host, a porta, o nome, o usuário e a senha de um banco de dados existente e vazio. Test connection conecta, verifica a versão do servidor e, no MySQL, o conjunto de caracteres utf8mb4, e verifica se o usuário pode criar, gravar, ler e apagar tabelas (com uma tabela de teste que ele remove depois). Um problema é explicado em palavras simples, com a mensagem do driver.
  2. O endereço público: onde as pessoas abrem o Ronne AI Marketplace. Quando ele vem do ambiente (como o compose.yaml define o PUBLIC_URL), aparece só para leitura, já que o ambiente tem prioridade sobre o arquivo de configurações.
  3. A conta root: e-mail, nome de exibição e uma senha de 12 a 128 caracteres, digitada duas vezes.
  4. Install: as configurações são gravadas, as migrações aplicadas e a conta root criada, cada passo mostrado enquanto acontece. Uma falha volta para a pergunta a que ela se refere; Retry retoma a partir do passo que falhou. Depois, Sign in abre a página de login com o e-mail do root preenchido. Nada precisa ser reiniciado.

Um setup interrompido depois que as configurações foram gravadas é retomado em Install na próxima visita, mantendo o banco de dados. Qualquer pessoa que abra o endereço antes de você pode fazer o setup da instância, então abra-o logo depois de iniciá-la. Rodar o setup de novo nunca cria um root quando já existe um: outros roots são adicionados em Users.

Contas root

O setup cria a primeira conta root. Um root pode fazer tudo o que um moderador pode e, além disso, criar e gerenciar usuários, criar escopos, mudar as configurações da instância e ler o log de auditoria. Ninguém se cadastra: um root cria todas as outras contas.

Pode haver vários roots. Em Admin › Users, qualquer root pode tornar outra conta root (ao criá-la, ou com Change role) e mudar o papel de qualquer pessoa, inclusive de outros roots. Os roots gerenciam uns aos outros: um pode desativar outro ou redefinir a senha dele. Ninguém muda a própria conta ali; você muda a sua senha em Account, e outro root faz o resto. A instância sempre mantém pelo menos um root ativo: uma mudança que deixaria a instância sem nenhum é recusada.

Uma senha de root esquecida pode ser redefinida por outro root em Users. Se não houver outro root, redefina-a onde a instância está instalada: pnpm run reset-root-password (no Docker, docker compose exec web pnpm run reset-root-password). Com vários roots, o comando pergunta qual, ou aceita --email com --yes. Ele define uma senha nova, desconecta esse root de todos os lugares, revoga os tokens de acesso dele e reativa a conta se ela estava desativada.

Atualizar

docker compose pull && docker compose up -d         # Docker
npm install --global @ronneai/marketplace@latest     # npm
sudo rmk-server service restart                      # npm, as a service: then this
sudo apt install ./rmk-server_X.Y.Z-1_amd64.deb      # a package: the new one (or dnf install)
git pull && pnpm install && pnpm build && pnpm start   # a clone

As migrações pendentes do banco de dados rodam quando o servidor inicia. Se uma falhar, o servidor para em vez de servir um banco de dados migrado pela metade. Cada release recebe as tags X.Y.Z, X.Y e latest no Docker Hub; para fixar uma, defina RONNE_IMAGE=ronneai/marketplace:X.Y.Z ao lado do compose.yaml. A imagem e os pacotes npm compartilham a mesma versão.