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ção | Padrão | O que faz |
|---|---|---|
RONNE_PORT | 7650 | A porta HTTP no host. 80 com um domínio. |
RONNE_HTTPS_PORT | 7651 | A porta HTTPS no host (TCP, e UDP para HTTP/3). 443 com um domínio. |
RONNE_DOMAIN | empty | O nome a servir por HTTPS. Vazio: só HTTP, em qualquer nome. |
RONNE_TLS | auto | Com 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_EMAIL | empty | Para onde a autoridade certificadora manda os avisos de expiração. |
RONNE_TRUSTED_PROXIES | empty | Quais endereços podem definir X-Forwarded-For, como private_ranges. Só atrás do seu próprio proxy. |
PUBLIC_URL | https://RONNE_DOMAIN, or http://localhost:RONNE_PORT | O 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, comcert.pem(a cadeia completa) ekey.pemem uma pastacertsao lado docompose.yaml. Crie a pasta antes do primeirodocker compose up: no Linux, se ela não existir, o Docker a cria com o root como dono, e aí você precisa desudopara gravar nela. Depois de substituir os arquivos, rodedocker compose up -d --force-recreate proxy.RONNE_TLS=internalemite um certificado de teste em vez disso; os navegadores mostram um aviso até que a CA dele seja confiável, e ormkprecisa deNODE_EXTRA_CA_CERTS. - Atrás do seu próprio proxy (nginx, Apache, Traefik, um balanceador de carga): deixe
RONNE_DOMAINvazio, aponte o proxy parahttp://127.0.0.1:7650e definaRONNE_PORT=127.0.0.1:7650, oPUBLIC_URLcom o endereço https do proxy eRONNE_TRUSTED_PROXIES=private_ranges, para que o log de auditoria e os limites de login vejam o endereço do cliente peloX-Forwarded-Fordo 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_PORTeRONNE_HTTPS_PORTsão 80 e 443.docker compose logs proxydiz o motivo. - Guarde os certificados: eles ficam no volume
caddy-data. Nunca rodedocker 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 emjournalctl -u rmk-server. Ele é gerenciado com os comandos de Como serviço, inclusive--domainpara 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(oudnf remove) para e remove o serviço e mantém os dados e as configurações;apt purgeednf removemostram 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(ouHOST) o torna acessível pela rede, e--port(ouPORT) 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_DIRou, por padrão, em~/Library/Application Support/RonneAI Marketplaceno macOS,~/.local/share/rmk-serverno Linux (ou dentro deXDG_DATA_HOME) e%LOCALAPPDATA%\RonneAI\Marketplaceno Windows. - Atualizar:
npx @ronneai/marketplace@latest, ounpm install --global @ronneai/marketplacede 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
| Comando | O que faz |
|---|---|
rmk-server service status | Instalado 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 | restart | Para, inicia ou reinicia o serviço. Reinicie depois de atualizar com npm. |
sudo rmk-server service logs | Acompanha o log do serviço. |
sudo rmk-server service uninstall | Remove 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 setup | O 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 emjournalctl -u rmk-server, rodando com a contarmk-server. No macOS: os dados em/usr/local/var/rmk-server(com Homebrew,/opt/homebrew/var/rmk-server), as configurações emetc/rmk-server/envdo 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.0abre 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.comadiciona 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, oubrew install caddy) e para se outro servidor web estiver ocupando a 80 ou a 443.--tls internalusa a autoridade do próprio Caddy;--tls fileslêcert.pemekey.pemde/etc/rmk-server-proxy/certs(no macOS,etc/rmk-server-proxy/certsdo prefixo; cópias, não links; copie-os de novo depois de cada renovação e reinicie);--emailrecebe 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");statusfunciona 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 umrmk-serverinstalado 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 emC:\Program Files\RonneAI, renomeie a pasta dele paraMarketplacee rode obin\rmk-server.cmddele. Ou, no mesmo terminal de administrador, instale com npm em uma pasta para a máquina toda e rode ormk-server.cmddela pelo caminho completo (essa pasta não está no PATH): os comandos estão abaixo. Os dados emC:\ProgramData\, as configurações emRonneAI\ Marketplace\ data …\Marketplace\.env, os logs em…\Marketplace\logs\rmk-server-service.out.log(e.err.log), rodando comNT SERVICE\rmk-server. Sem domínio,--host 0.0.0.0também adiciona uma regra de firewall para a porta, em redes privadas.--domainprecisa 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 fileslê…\Marketplace\proxy\certs.setup,migrateereset-root-passwordtrabalham 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-opencom 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:
- 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. - O endereço público: onde as pessoas abrem o Ronne AI Marketplace. Quando ele vem do ambiente (como o
compose.yamldefine oPUBLIC_URL), aparece só para leitura, já que o ambiente tem prioridade sobre o arquivo de configurações. - A conta root: e-mail, nome de exibição e uma senha de 12 a 128 caracteres, digitada duas vezes.
- 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.