{"id":1808,"date":"2026-10-07T07:53:15","date_gmt":"2026-10-07T10:53:15","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=1808"},"modified":"2026-10-07T07:53:15","modified_gmt":"2026-10-07T10:53:15","slug":"rustfs-no-linux-instalacao-por-binario-e-docker","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/10\/rustfs-no-linux-instalacao-por-binario-e-docker\/","title":{"rendered":"RustFS on Linux: install via binary and Docker"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/rustfs-linux-binario-docker-capa-v1.webp\" alt=\"Mascote LinuxPro e c\u00e3o caramelo ciborgue instalando RustFS em um servidor, com refer\u00eancia ao Docker\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Precisar de uma API compat\u00edvel com S3 n\u00e3o significa precisar hospedar os dados na AWS. O <strong>RustFS<\/strong> \u00e9 um servidor de armazenamento de objetos escrito em Rust: recebe requisi\u00e7\u00f5es de aplica\u00e7\u00f5es e clientes S3, guarda objetos em discos sob seu controle e oferece console de administra\u00e7\u00e3o. Neste guia, vamos instalar por <strong>bin\u00e1rio com systemd<\/strong> ou <strong>Docker com Compose<\/strong>, proteger as credenciais e validar o caminho completo: criar bucket, enviar, baixar e conferir um arquivo.<\/p>\n<p><strong>Refer\u00eancia da revis\u00e3o: 7 de outubro de 2026.<\/strong> Os exemplos fixam RustFS <code>1.0.1<\/code>, release est\u00e1vel publicada em 3 de outubro de 2026. Isso n\u00e3o \u00e9 promessa de \u201c\u00faltima vers\u00e3o\u201d permanente. Consulte as <a href=\"https:\/\/github.com\/rustfs\/rustfs\/releases\/tag\/1.0.1\">notas da release<\/a> antes de instalar ou atualizar.<\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Escopo:<\/strong> os dois caminhos abaixo criam uma inst\u00e2ncia nova, de um n\u00f3 e um diret\u00f3rio de dados, inicialmente acess\u00edvel s\u00f3 pelo loopback. N\u00e3o oferecem alta disponibilidade. A receita foi conferida nas fontes oficiais; a execu\u00e7\u00e3o completa dos servi\u00e7os n\u00e3o foi realizada nesta revis\u00e3o. Homologue em uma VM descart\u00e1vel antes de usar dados importantes.<\/div>\n<h2>O que \u00e9 o RustFS \u2014 e o que ele n\u00e3o \u00e9<\/h2>\n<p>Apesar do nome, n\u00e3o \u00e9 um sistema de arquivos para formatar uma parti\u00e7\u00e3o e montar no lugar do ext4 ou XFS. A interface principal deste artigo \u00e9 uma API de objetos: cada objeto tem conte\u00fado, chave e metadados e pertence a um bucket. Um nome como <code>backups\/servidor1\/arquivo.tar<\/code> \u00e9 uma chave com prefixos; n\u00e3o cria, por si s\u00f3, as mesmas opera\u00e7\u00f5es e garantias de um diret\u00f3rio POSIX.<\/p>\n<p>\u00c9 \u00fatil para aplica\u00e7\u00f5es que j\u00e1 falam S3, ambientes de desenvolvimento, reposit\u00f3rios de artefatos, armazenamento de dados anal\u00edticos e destinos de backup compat\u00edveis. N\u00e3o substitua uma pasta compartilhada ou o disco de um banco de dados por um bucket sem verificar o modelo de acesso exigido pela aplica\u00e7\u00e3o.<\/p>\n<p>O c\u00f3digo do servidor usa a <a href=\"https:\/\/github.com\/rustfs\/rustfs\/blob\/1.0.1\/LICENSE\">licen\u00e7a Apache 2.0<\/a>. Hospedagem pr\u00f3pria significa que capacidade, atualiza\u00e7\u00e3o, acesso, monitoramento e recupera\u00e7\u00e3o ficam sob responsabilidade do operador. A linguagem Rust \u00e9 uma caracter\u00edstica da implementa\u00e7\u00e3o, n\u00e3o uma garantia de invulnerabilidade ou de desempenho no seu hardware.<\/p>\n<h2>Compatibilidade S3: teste a aplica\u00e7\u00e3o, n\u00e3o apenas o logotipo<\/h2>\n<p>\u201cS3-compatible\u201d n\u00e3o equivale a reproduzir todos os servi\u00e7os e comportamentos da AWS. Consulte a <a href=\"https:\/\/github.com\/rustfs\/rustfs\/blob\/main\/docs\/architecture\/s3-compatibility-matrix.md\">matriz de compatibilidade<\/a> e valide as opera\u00e7\u00f5es que sua aplica\u00e7\u00e3o realmente usa: multipart upload, URLs assinadas, metadados, checksums, versionamento, pol\u00edticas e exclus\u00e3o.<\/p>\n<p>O reposit\u00f3rio apresenta recursos como versionamento, Object Lock, lifecycle, replica\u00e7\u00e3o, IAM e criptografia. A disponibilidade de um recurso n\u00e3o configura automaticamente uma pol\u00edtica segura: cada um precisa de escopo, credenciais e teste de falha. Funcionalidades marcadas como preview n\u00e3o devem ser tratadas como contrato de produ\u00e7\u00e3o. <a href=\"https:\/\/github.com\/rustfs\/rustfs\">Veja a tabela de recursos do projeto<\/a>.<\/p>\n<p><strong>Aten\u00e7\u00e3o ao MinIO:<\/strong> compatibilidade de API e compatibilidade do formato em disco s\u00e3o assuntos diferentes. O README consultado ainda classifica a interoperabilidade on-disk como preview, condicionada \u00e0 feature <code>rio-v2<\/code>, fora do build padr\u00e3o, e informa limita\u00e7\u00f5es com objetos criptografados pelo MinIO. N\u00e3o aponte RustFS para os \u00fanicos discos de produ\u00e7\u00e3o do MinIO como se fosse apenas trocar o execut\u00e1vel.<\/p>\n<h2>Arquitetura: API, console e persist\u00eancia<\/h2>\n<p>Nos exemplos, a API S3 atende em <code>127.0.0.1:9000<\/code> e o console em <code>127.0.0.1:9001<\/code>. Aplica\u00e7\u00f5es usam a API; administradores usam o console. O armazenamento precisa sobreviver \u00e0 substitui\u00e7\u00e3o do execut\u00e1vel ou container. O backup deve estar em outro dom\u00ednio de falha, n\u00e3o em outra pasta do mesmo disco.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/rustfs-single-node.webp\" alt=\"Clientes S3 e navegador administrativo acessam API e console RustFS, com armazenamento persistente e backup separado\" width=\"1200\" height=\"638\" \/><\/p>\n<table>\n<thead>\n<tr>\n<th>Topologia<\/th>\n<th>Como funciona<\/th>\n<th>Limite principal<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SNSD<\/td>\n<td>Um n\u00f3, um disco\/caminho local.<\/td>\n<td>Sem redund\u00e2ncia entre discos; falha do armazenamento exige recupera\u00e7\u00e3o.<\/td>\n<\/tr>\n<tr>\n<td>SNMD<\/td>\n<td>Um n\u00f3, v\u00e1rios discos, com erasure coding.<\/td>\n<td>A m\u00e1quina continua sendo um ponto \u00fanico de falha.<\/td>\n<\/tr>\n<tr>\n<td>MNMD<\/td>\n<td>V\u00e1rios n\u00f3s e discos, com distribui\u00e7\u00e3o dos dados.<\/td>\n<td>Exige planejamento de quorum, rede, dom\u00ednios de falha e opera\u00e7\u00e3o.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Este tutorial fica em SNSD. Criar v\u00e1rias pastas no mesmo disco n\u00e3o cria redund\u00e2ncia f\u00edsica. O projeto tamb\u00e9m alerta que SNSD n\u00e3o cresce diretamente para um pool multidisco: planeje outra implanta\u00e7\u00e3o e migra\u00e7\u00e3o pela API S3. Consulte a <a href=\"https:\/\/docs.rustfs.com\/en\/installation\">sele\u00e7\u00e3o de topologia<\/a> e o <a href=\"https:\/\/github.com\/rustfs\/rustfs#quickstart\">aviso sobre expans\u00e3o<\/a>.<\/p>\n<h2>Antes de instalar<\/h2>\n<ul>\n<li>Use um host de teste Ubuntu ou Debian com systemd, sudo, Bash e arquitetura x86_64 ou ARM64.<\/li>\n<li>Reserve armazenamento persistente e espa\u00e7o para objetos, vers\u00f5es antigas, uploads incompletos e logs.<\/li>\n<li>Confira a sincroniza\u00e7\u00e3o do rel\u00f3gio: autentica\u00e7\u00e3o assinada depende de hor\u00e1rio correto.<\/li>\n<li>Mantenha firewall ativo. Neste primeiro est\u00e1gio, n\u00e3o abra 9000\/9001 para a internet.<\/li>\n<li>Escolha <strong>um<\/strong> dos caminhos. N\u00e3o rode bin\u00e1rio e Docker nas mesmas portas nem com o mesmo diret\u00f3rio de dados.<\/li>\n<\/ul>\n<p>O guia oficial recomenda XFS e discos apresentados individualmente ao sistema para suas implanta\u00e7\u00f5es de armazenamento; NFS n\u00e3o \u00e9 indicado como backend. A pasta local usada aqui simplifica o laborat\u00f3rio, n\u00e3o representa um layout de produ\u00e7\u00e3o. N\u00e3o h\u00e1 comando de formata\u00e7\u00e3o neste artigo: identificar o disco errado pode destruir dados. Para hardware e cluster, siga os <a href=\"https:\/\/docs.rustfs.com\/en\/installation\/linux\/prerequisites-and-service\">pr\u00e9-requisitos oficiais<\/a>.<\/p>\n<pre><code class=\"language-bash\">uname -m\ntimedatectl status\ndf -hT\nsudo ss -lntp | grep -E &#x27;:(9000|9001)\\b&#x27; || true\nsudo apt update\nsudo apt install -y ca-certificates curl unzip openssl<\/code><\/pre>\n<h2>Op\u00e7\u00e3o A: instalar pelo bin\u00e1rio oficial<\/h2>\n<h3>1. Baixar uma vers\u00e3o fixa e validar o SHA-256<\/h3>\n<p>O bloco abaixo seleciona o pacote musl da release <code>1.0.1<\/code> para x86_64 ou ARM64. Os SHA-256 foram conferidos nos <a href=\"https:\/\/github.com\/rustfs\/rustfs\/releases\/expanded_assets\/1.0.1\">artefatos oficiais dessa release<\/a>. Ao mudar a vers\u00e3o, atualize tamb\u00e9m nome, URL e hash; n\u00e3o remova a valida\u00e7\u00e3o.<\/p>\n<p>Execute o bloco inteiro em Bash. Ele trabalha em uma pasta tempor\u00e1ria exclusiva e instala o bin\u00e1rio versionado somente se o checksum corresponder.<\/p>\n<pre><code class=\"language-bash\">(\nset -euo pipefail\nVERSION=1.0.1\ncase &quot;$(uname -m)&quot; in\n  x86_64)\n    ARCH=x86_64\n    SHA256=a834096dafa1f1a55825a2cdaf49d006a193978d344f2d508c2be475133738a3\n    ;;\n  aarch64|arm64)\n    ARCH=aarch64\n    SHA256=d2533e293204597416cb8d30790ea35df14cb4521633fa3574c64333141bafdf\n    ;;\n  *) echo &quot;Arquitetura n\u00e3o coberta por esta receita&quot;; exit 1 ;;\nesac\nWORK=$(mktemp -d)\ntrap &#x27;rm -rf -- &quot;$WORK&quot;&#x27; EXIT\ncd &quot;$WORK&quot;\nFILE=&quot;rustfs-linux-${ARCH}-musl-v${VERSION}.zip&quot;\ncurl --fail --location --retry 3 --output &quot;$FILE&quot; \\\n  &quot;https:\/\/github.com\/rustfs\/rustfs\/releases\/download\/${VERSION}\/${FILE}&quot;\nprintf &#x27;%s  %s\\n&#x27; &quot;$SHA256&quot; &quot;$FILE&quot; | sha256sum --check -\nunzip -q &quot;$FILE&quot; -d unpack\nBIN=$(find unpack -type f -name rustfs -print)\ntest -n &quot;$BIN&quot; &amp;&amp; test -f &quot;$BIN&quot;\nsudo install -d -m 0755 \/usr\/local\/lib\/rustfs\nsudo install -o root -g root -m 0755 &quot;$BIN&quot; \\\n  &quot;\/usr\/local\/lib\/rustfs\/rustfs-${VERSION}&quot;\nsudo ln -sfn &quot;\/usr\/local\/lib\/rustfs\/rustfs-${VERSION}&quot; \/usr\/local\/bin\/rustfs\n\/usr\/local\/bin\/rustfs --version\n)<\/code><\/pre>\n<p>Se o download, checksum ou localiza\u00e7\u00e3o do execut\u00e1vel falhar, o bloco para. N\u00e3o calcule um hash novo do arquivo baixado para \u201ccorrigir\u201d a diverg\u00eancia. Confira arquitetura, release e origem. O execut\u00e1vel permanece sob controle de root; quem grava objetos n\u00e3o precisa poder substitu\u00ed-lo.<\/p>\n<h3>2. Criar usu\u00e1rio e diret\u00f3rios<\/h3>\n<p>Em um host novo, crie uma conta dedicada. Se ela j\u00e1 existir, inspecione a instala\u00e7\u00e3o anterior em vez de repetir a receita \u00e0s cegas.<\/p>\n<pre><code class=\"language-bash\">sudo adduser --system --group --home \/var\/lib\/rustfs \\\n  --shell \/usr\/sbin\/nologin rustfs\nsudo install -d -o rustfs -g rustfs -m 0750 \/var\/lib\/rustfs\nsudo install -d -o rustfs -g rustfs -m 0750 \/var\/lib\/rustfs\/data\nsudo install -d -o rustfs -g rustfs -m 0750 \/var\/log\/rustfs<\/code><\/pre>\n<p>Se os dados estiverem em um volume dedicado, monte-o antes de criar o diret\u00f3rio final, confira com <code>findmnt<\/code> e acrescente \u00e0 unidade uma depend\u00eancia do ponto de montagem. Caso contr\u00e1rio, o servi\u00e7o pode gravar no disco raiz quando a montagem falhar. N\u00e3o execute <code>chown -R<\/code> sobre uma \u00e1rvore que contenha dados de outros servi\u00e7os.<\/p>\n<h3>3. Gerar credenciais sem senha padr\u00e3o<\/h3>\n<p>Os nomes documentados s\u00e3o <code>RUSTFS_ACCESS_KEY<\/code> e <code>RUSTFS_SECRET_KEY<\/code>. N\u00e3o confunda com uma conta IAM da AWS: essas credenciais pertencem ao seu RustFS. O valor padr\u00e3o p\u00fablico <code>rustfsadmin<\/code> n\u00e3o deve ser usado. A access key abaixo usa hexadecimal mai\u00fasculo; n\u00e3o cont\u00e9m a barra que quebraria o escopo de assinatura SigV4. <a href=\"https:\/\/docs.rustfs.com\/en\/operations\/credentials\">Refer\u00eancia de credenciais<\/a>.<\/p>\n<p>Este comando falha se o arquivo j\u00e1 existir, para n\u00e3o substituir silenciosamente as chaves de uma instala\u00e7\u00e3o anterior:<\/p>\n<pre><code class=\"language-bash\">sudo bash -euo pipefail &lt;&lt;&#x27;ROOT&#x27;\ntest ! -e \/etc\/default\/rustfs\numask 077\n{\n  printf &#x27;RUSTFS_ACCESS_KEY=%s\\n&#x27; &quot;$(openssl rand -hex 10 | tr &#x27;a-f&#x27; &#x27;A-F&#x27;)&quot;\n  printf &#x27;RUSTFS_SECRET_KEY=%s\\n&#x27; &quot;$(openssl rand -hex 32)&quot;\n  cat &lt;&lt;&#x27;ENV&#x27;\nRUSTFS_ADDRESS=127.0.0.1:9000\nRUSTFS_CONSOLE_ADDRESS=127.0.0.1:9001\nRUSTFS_CONSOLE_ENABLE=true\nRUSTFS_OBS_LOGGER_LEVEL=info\nRUSTFS_OBS_LOG_DIRECTORY=\/var\/log\/rustfs\nENV\n} &gt; \/etc\/default\/rustfs\nchmod 600 \/etc\/default\/rustfs\nROOT<\/code><\/pre>\n<p>Abra com <code>sudoedit \/etc\/default\/rustfs<\/code> e guarde as credenciais no cofre da equipe. N\u00e3o publique o arquivo nem copie sua sa\u00edda para tickets. Nesta unidade, o systemd l\u00ea o arquivo protegido e entrega o ambiente ao processo; o usu\u00e1rio do servi\u00e7o n\u00e3o precisa ler diretamente um arquivo root-only.<\/p>\n<h3>4. Criar o servi\u00e7o systemd<\/h3>\n<p>A unidade abaixo \u00e9 uma adapta\u00e7\u00e3o para n\u00f3 \u00fanico, usu\u00e1rio n\u00e3o root e diret\u00f3rios expl\u00edcitos. <code>Type=simple<\/code> indica in\u00edcio do processo, n\u00e3o prontid\u00e3o da API; a prontid\u00e3o ser\u00e1 verificada separadamente. Para uma introdu\u00e7\u00e3o \u00e0s unidades e logs, veja <a href=\"\/2026\/09\/dominando-o-systemd-comandos-essenciais\/\">nosso guia de systemd<\/a>.<\/p>\n<pre><code class=\"language-bash\">sudo tee \/etc\/systemd\/system\/rustfs.service &gt; \/dev\/null &lt;&lt;&#x27;EOF&#x27;\n[Unit]\nDescription=RustFS Object Storage\nDocumentation=https:\/\/docs.rustfs.com\/en\/\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nType=simple\nUser=rustfs\nGroup=rustfs\nWorkingDirectory=\/var\/lib\/rustfs\nEnvironmentFile=\/etc\/default\/rustfs\nExecStart=\/usr\/local\/bin\/rustfs \/var\/lib\/rustfs\/data\nRestart=on-failure\nRestartSec=5\nTimeoutStopSec=120\nLimitNOFILE=1048576\nUMask=0027\nNoNewPrivileges=true\nPrivateTmp=true\nProtectHome=true\nProtectSystem=full\nStandardOutput=journal\nStandardError=journal\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemd-analyze verify \/etc\/systemd\/system\/rustfs.service\nsudo systemctl daemon-reload\nsudo systemctl enable --now rustfs\nsudo systemctl status rustfs --no-pager\nsudo journalctl -u rustfs -n 80 --no-pager<\/code><\/pre>\n<p>Al\u00e9m do journal, a configura\u00e7\u00e3o direciona logs do aplicativo a <code>\/var\/log\/rustfs<\/code>; inclua esse caminho na pol\u00edtica de reten\u00e7\u00e3o de logs. Se a unidade reiniciar repetidamente, pare-a e corrija o erro: rein\u00edcio autom\u00e1tico n\u00e3o resolve permiss\u00e3o negada, porta ocupada ou volume ausente.<\/p>\n<h2>Op\u00e7\u00e3o B: instalar com Docker e Compose<\/h2>\n<p>Este \u00e9 um caminho alternativo, n\u00e3o uma continua\u00e7\u00e3o da op\u00e7\u00e3o A. Use Docker Engine atualizado e o plugin Compose. Confirme <code>docker version<\/code> e <code>docker compose version<\/code>; se faltarem, siga a <a href=\"https:\/\/docs.docker.com\/engine\/install\/\">instala\u00e7\u00e3o oficial<\/a>. O usu\u00e1rio precisa de acesso ao daemon, privil\u00e9gio que deve ser tratado como administrativo.<\/p>\n<p>O exemplo fixa a tag <code>rustfs\/rustfs:1.0.1<\/code>, persiste dados e logs em volumes nomeados e publica s\u00f3 em loopback. No container, o processo precisa escutar na interface interna, n\u00e3o em <code>127.0.0.1<\/code>: quem restringe o acesso no host \u00e9 o mapeamento das portas.<\/p>\n<h3>1. Criar o projeto e o arquivo de credenciais<\/h3>\n<pre><code class=\"language-bash\">umask 077\nPROJECT=$(mktemp -d &quot;$HOME\/rustfs-lab.XXXXXX&quot;)\ncd &quot;$PROJECT&quot;\nprintf &#x27;%s\\n&#x27; &quot;Projeto criado em: $PROJECT&quot;\n{\n  printf &#x27;RUSTFS_ACCESS_KEY=%s\\n&#x27; &quot;$(openssl rand -hex 10 | tr &#x27;a-f&#x27; &#x27;A-F&#x27;)&quot;\n  printf &#x27;RUSTFS_SECRET_KEY=%s\\n&#x27; &quot;$(openssl rand -hex 32)&quot;\n} &gt; rustfs.env\nchmod 600 rustfs.env\nprintf &#x27;%s\\n&#x27; &#x27;rustfs.env&#x27; &#x27;.env&#x27; &gt; .gitignore<\/code><\/pre>\n<p>Guarde esse caminho: os comandos de Compose precisam ser executados nele. Abra <code>rustfs.env<\/code> localmente para cadastrar as credenciais no cofre. Arquivo de ambiente n\u00e3o \u00e9 criptografia; usu\u00e1rios com acesso ao daemon podem inspecionar o ambiente do container. Em uma opera\u00e7\u00e3o mais sens\u00edvel, avalie a inje\u00e7\u00e3o por arquivos <code>RUSTFS_ACCESS_KEY_FILE<\/code> e <code>RUSTFS_SECRET_KEY_FILE<\/code>, com permiss\u00f5es adequadas.<\/p>\n<h3>2. Salvar o Compose<\/h3>\n<p>Crie o arquivo <code>compose.yaml<\/code> com este conte\u00fado:<\/p>\n<pre><code class=\"language-yaml\">name: linuxpro-rustfs-lab\nservices:\n  rustfs:\n    image: rustfs\/rustfs:1.0.1\n    restart: unless-stopped\n    env_file:\n      - .\/rustfs.env\n    environment:\n      RUSTFS_ADDRESS: &quot;:9000&quot;\n      RUSTFS_CONSOLE_ADDRESS: &quot;:9001&quot;\n      RUSTFS_CONSOLE_ENABLE: &quot;true&quot;\n      RUSTFS_OBS_LOGGER_LEVEL: &quot;info&quot;\n      RUSTFS_OBS_LOG_DIRECTORY: &quot;\/logs&quot;\n    command: [&quot;\/data&quot;]\n    ports:\n      - &quot;127.0.0.1:9000:9000&quot;\n      - &quot;127.0.0.1:9001:9001&quot;\n    volumes:\n      - rustfs-data:\/data\n      - rustfs-logs:\/logs\n    security_opt:\n      - no-new-privileges:true\n    cap_drop:\n      - ALL\n    stop_grace_period: 2m\n    healthcheck:\n      test: [&quot;CMD&quot;, &quot;curl&quot;, &quot;-fsS&quot;, &quot;http:\/\/127.0.0.1:9000\/health\/ready&quot;]\n      interval: 30s\n      timeout: 5s\n      retries: 5\n      start_period: 60s\n    logging:\n      driver: json-file\n      options:\n        max-size: &quot;10m&quot;\n        max-file: &quot;3&quot;\nvolumes:\n  rustfs-data:\n  rustfs-logs:<\/code><\/pre>\n<p>Os intervalos, limite de logs do Docker e tempo de parada s\u00e3o escolhas deste laborat\u00f3rio, n\u00e3o garantias de dimensionamento. A rota\u00e7\u00e3o acima limita stdout\/stderr do Docker; n\u00e3o limita automaticamente os arquivos gravados em <code>\/logs<\/code>. Nomeie outro projeto se <code>linuxpro-rustfs-lab<\/code> j\u00e1 existir, para n\u00e3o reutilizar volumes por acidente.<\/p>\n<h3>3. Subir e conferir a imagem<\/h3>\n<pre><code class=\"language-bash\">docker compose config --quiet\ndocker compose pull\ndocker image inspect rustfs\/rustfs:1.0.1 --format &#x27;{{index .RepoDigests 0}}&#x27;\ndocker compose up -d\ndocker compose ps\ndocker compose logs --tail=80 rustfs<\/code><\/pre>\n<p>Use <code>config --quiet<\/code> para validar sem imprimir credenciais resolvidas. Registre o digest e, se precisar reproduzir exatamente a implanta\u00e7\u00e3o, substitua a refer\u00eancia de imagem pelo digest homologado. Um healthcheck unhealthy n\u00e3o faz o Docker reiniciar automaticamente um processo que continua rodando: precisa haver monitoramento e uma a\u00e7\u00e3o definida.<\/p>\n<p>O <a href=\"https:\/\/raw.githubusercontent.com\/rustfs\/rustfs\/1.0.1\/Dockerfile\">Dockerfile da vers\u00e3o<\/a> usa UID\/GID <code>10001<\/code>, cria os diret\u00f3rios e inclui curl. Volumes nomeados novos herdam a prepara\u00e7\u00e3o da imagem; se preferir bind mounts, prepare apenas os diret\u00f3rios dedicados:<\/p>\n<pre><code class=\"language-bash\">sudo install -d -o 10001 -g 10001 -m 0750 \/srv\/rustfs-lab\/data\nsudo install -d -o 10001 -g 10001 -m 0750 \/srv\/rustfs-lab\/logs<\/code><\/pre>\n<p>Nesse caso, substitua as origens dos volumes no Compose por esses caminhos. N\u00e3o misture os dois modelos numa instala\u00e7\u00e3o com dados sem plano de migra\u00e7\u00e3o. Em Docker rootless, user namespaces ou SELinux, a correspond\u00eancia de UID e r\u00f3tulos exige adapta\u00e7\u00e3o; n\u00e3o resolva com <code>chmod 777<\/code>. Refer\u00eancia: <a href=\"https:\/\/docs.rustfs.com\/en\/installation\/container\/docker\">RustFS com Docker<\/a>.<\/p>\n<h2>Validar a API, o console e o acesso remoto<\/h2>\n<p>A partir do pr\u00f3prio host, use os endpoints documentados:<\/p>\n<pre><code class=\"language-bash\">curl --fail --silent --show-error http:\/\/127.0.0.1:9000\/health\/live\ncurl --fail --silent --show-error http:\/\/127.0.0.1:9000\/health\/ready\ncurl --fail --silent --show-error http:\/\/127.0.0.1:9001\/rustfs\/console\/health\nsudo ss -lntp | grep -E &#x27;:(9000|9001)\\b&#x27;<\/code><\/pre>\n<p>Liveness verifica o processo; readiness verifica depend\u00eancias necess\u00e1rias e pode retornar 503. Nenhum dos dois comprova que seu usu\u00e1rio consegue gravar um objeto. Abra <code>http:\/\/127.0.0.1:9001\/rustfs\/console\/<\/code> e entre com as credenciais geradas. A API S3 usa 9000; enviar um cliente S3 para 9001 \u00e9 um erro de endpoint. <a href=\"https:\/\/docs.rustfs.com\/en\/operations\/status-check\">Refer\u00eancia de portas e health checks<\/a>.<\/p>\n<p>Se o servidor for remoto, mantenha as portas fechadas e abra um t\u00fanel a partir do seu computador, substituindo usu\u00e1rio e host. As portas locais precisam estar livres:<\/p>\n<pre><code class=\"language-bash\">ssh -N -o ExitOnForwardFailure=yes \\\n  -L 127.0.0.1:9000:127.0.0.1:9000 \\\n  -L 127.0.0.1:9001:127.0.0.1:9001 usuario@servidor<\/code><\/pre>\n<p>Com o t\u00fanel aberto, navegador e cliente S3 no seu computador usam os mesmos endere\u00e7os locais. Isso \u00e9 adequado \u00e0 administra\u00e7\u00e3o e homologa\u00e7\u00e3o, n\u00e3o substitui o endpoint HTTPS que aplica\u00e7\u00f5es remotas precisar\u00e3o usar. Para Docker, tamb\u00e9m confira <code>docker compose ps<\/code> e os mapeamentos publicados: nem todo modo de rede aparece como um processo ouvinte em <code>ss<\/code>.<\/p>\n<h2>Teste S3: criar bucket, enviar e conferir o download<\/h2>\n<p>Instale a AWS CLI v2 pelo <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/getting-started-install.html\">procedimento oficial<\/a> e confira <code>aws --version<\/code>. Us\u00e1-la como cliente do RustFS n\u00e3o exige criar uma conta AWS. Para n\u00e3o misturar credenciais com perfis existentes, abra um terminal novo e use arquivos de configura\u00e7\u00e3o isolados:<\/p>\n<pre><code class=\"language-bash\">umask 077\nCLIENT_DIR=$(mktemp -d &quot;$HOME\/rustfs-client.XXXXXX&quot;)\nexport AWS_CONFIG_FILE=&quot;$CLIENT_DIR\/config&quot;\nexport AWS_SHARED_CREDENTIALS_FILE=&quot;$CLIENT_DIR\/credentials&quot;\nunset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_PROFILE\nunset AWS_DEFAULT_PROFILE AWS_ENDPOINT_URL AWS_ENDPOINT_URL_S3\nunset AWS_ROLE_ARN AWS_WEB_IDENTITY_TOKEN_FILE\naws configure --profile rustfs-lab\naws configure set s3.addressing_style path --profile rustfs-lab<\/code><\/pre>\n<p>Informe a access key e secret key do RustFS nos prompts, regi\u00e3o <code>us-east-1<\/code> e formato <code>json<\/code>. O endpoint expl\u00edcito abaixo aponta ao RustFS local, n\u00e3o \u00e0 AWS. Use a credencial administrativa apenas neste bootstrap controlado; para a aplica\u00e7\u00e3o real, crie uma identidade limitada conforme a pr\u00f3xima se\u00e7\u00e3o. <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-configure-files.html\">Arquivos e perfis da AWS CLI<\/a>.<\/p>\n<pre><code class=\"language-bash\">cd &quot;$CLIENT_DIR&quot;\nexport AWS_PAGER=&quot;&quot;\nENDPOINT=http:\/\/127.0.0.1:9000\nBUCKET=&quot;linuxpro-lab-$(date +%s)&quot;\nprintf &#x27;Teste RustFS LinuxPro\\n&#x27; &gt; original.txt\n\naws --profile rustfs-lab --endpoint-url &quot;$ENDPOINT&quot; s3api create-bucket \\\n  --bucket &quot;$BUCKET&quot;\naws --profile rustfs-lab --endpoint-url &quot;$ENDPOINT&quot; s3api put-object \\\n  --bucket &quot;$BUCKET&quot; --key teste\/original.txt --body original.txt\naws --profile rustfs-lab --endpoint-url &quot;$ENDPOINT&quot; s3api get-object \\\n  --bucket &quot;$BUCKET&quot; --key teste\/original.txt recebido.txt\nsha256sum original.txt recebido.txt\ncmp original.txt recebido.txt &amp;&amp; echo &quot;Conte\u00fado id\u00eantico&quot;<\/code><\/pre>\n<p>O resultado esperado \u00e9 a mensagem <code>Conte\u00fado id\u00eantico<\/code> e hashes iguais. Isso comprova o conte\u00fado desse objeto no fluxo testado, n\u00e3o a compatibilidade completa do servidor. N\u00e3o use ETag como sin\u00f4nimo universal de MD5: multipart e criptografia podem mudar sua interpreta\u00e7\u00e3o. Refer\u00eancias: <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/reference\/s3api\/create-bucket.html\">create-bucket<\/a>, <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/reference\/s3api\/put-object.html\">put-object<\/a> e <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/reference\/s3api\/get-object.html\">get-object<\/a>.<\/p>\n<p>Reinicie apenas a instala\u00e7\u00e3o escolhida: <code>sudo systemctl restart rustfs<\/code> ou, na pasta do projeto, <code>docker compose restart rustfs<\/code>. Aguarde readiness e repita o GET e o cmp. Para validar persist\u00eancia de container, execute depois uma recria\u00e7\u00e3o controlada com <code>docker compose up -d --force-recreate<\/code>, preservando os volumes, e repita a leitura.<\/p>\n<p>Quando terminar, remova somente o objeto e bucket deste teste, que n\u00e3o habilitou versionamento:<\/p>\n<pre><code class=\"language-bash\">aws --profile rustfs-lab --endpoint-url &quot;$ENDPOINT&quot; s3api delete-object \\\n  --bucket &quot;$BUCKET&quot; --key teste\/original.txt\naws --profile rustfs-lab --endpoint-url &quot;$ENDPOINT&quot; s3api delete-bucket \\\n  --bucket &quot;$BUCKET&quot;<\/code><\/pre>\n<p>Feche o terminal de teste para descartar as vari\u00e1veis. Os arquivos de credenciais permanecem no diret\u00f3rio impresso\/criado; remova-os deliberadamente quando n\u00e3o forem mais necess\u00e1rios e revogue as credenciais de teste. Nunca fa\u00e7a uma limpeza recursiva de um bucket real para reproduzir o exemplo.<\/p>\n<h2>N\u00e3o use a credencial root na aplica\u00e7\u00e3o<\/h2>\n<p>No console, crie um usu\u00e1rio dedicado, uma pol\u00edtica e, quando adequado, uma service account. A pol\u00edtica de exemplo abaixo permite listar e manipular objetos somente no bucket <code>linuxpro-app<\/code>. Crie esse bucket administrativamente antes. O nome do recurso \u00e9 ilustrativo e precisa coincidir com o bucket real.<\/p>\n<pre><code class=\"language-json\">{\n  &quot;Version&quot;: &quot;2012-10-17&quot;,\n  &quot;Statement&quot;: [\n    {\n      &quot;Effect&quot;: &quot;Allow&quot;,\n      &quot;Action&quot;: [&quot;s3:ListBucket&quot;, &quot;s3:GetBucketLocation&quot;],\n      &quot;Resource&quot;: [&quot;arn:aws:s3:::linuxpro-app&quot;]\n    },\n    {\n      &quot;Effect&quot;: &quot;Allow&quot;,\n      &quot;Action&quot;: [&quot;s3:GetObject&quot;, &quot;s3:PutObject&quot;, &quot;s3:DeleteObject&quot;],\n      &quot;Resource&quot;: [&quot;arn:aws:s3:::linuxpro-app\/*&quot;]\n    }\n  ]\n}<\/code><\/pre>\n<p>\u00c9 um ponto de partida para opera\u00e7\u00f5es simples, n\u00e3o uma pol\u00edtica universal: multipart, versionamento ou outras funcionalidades podem exigir a\u00e7\u00f5es adicionais. Retire exclus\u00e3o se a aplica\u00e7\u00e3o n\u00e3o precisar dela. Anexe a pol\u00edtica ao usu\u00e1rio apropriado e teste tamb\u00e9m uma opera\u00e7\u00e3o proibida, como ler outro bucket. Policies de service accounts restringem a identidade pai; n\u00e3o concedem automaticamente privil\u00e9gios que o pai n\u00e3o tem. <a href=\"https:\/\/docs.rustfs.com\/en\/security-compliance\/iam\">IAM<\/a> e <a href=\"https:\/\/docs.rustfs.com\/en\/security-compliance\/iam\/policies\">pol\u00edticas do RustFS<\/a>.<\/p>\n<h2>TLS antes de abrir a API \u00e0 rede<\/h2>\n<p>HTTP no loopback atende ao laborat\u00f3rio; aplica\u00e7\u00f5es remotas devem usar HTTPS. O RustFS documenta TLS nativo com <code>RUSTFS_TLS_PATH<\/code> e dois arquivos PEM chamados <code>rustfs_cert.pem<\/code> e <code>rustfs_key.pem<\/code>. O certificado precisa ser v\u00e1lido para o DNS usado pelos clientes, com cadeia confi\u00e1vel. N\u00e3o use <code>--no-verify-ssl<\/code> como solu\u00e7\u00e3o permanente. <a href=\"https:\/\/docs.rustfs.com\/en\/integration\/tls-configured\">Configura\u00e7\u00e3o TLS oficial<\/a>.<\/p>\n<p>Para o bin\u00e1rio, obtenha primeiro o certificado conforme a pol\u00edtica da organiza\u00e7\u00e3o. Copie-o para um diret\u00f3rio dedicado, com a chave leg\u00edvel pelo servi\u00e7o e n\u00e3o por todos os usu\u00e1rios:<\/p>\n<pre><code class=\"language-bash\">sudo install -d -o root -g rustfs -m 0750 \/etc\/rustfs\/tls\nsudo install -o root -g rustfs -m 0640 \/CAMINHO\/fullchain.pem \\\n  \/etc\/rustfs\/tls\/rustfs_cert.pem\nsudo install -o root -g rustfs -m 0640 \/CAMINHO\/privkey.pem \\\n  \/etc\/rustfs\/tls\/rustfs_key.pem\nsudoedit \/etc\/default\/rustfs<\/code><\/pre>\n<p>Substitua <code>\/CAMINHO<\/code> pelos arquivos reais. Acrescente <code>RUSTFS_TLS_PATH=\/etc\/rustfs\/tls<\/code>. Se clientes remotos forem necess\u00e1rios, altere o bind da API para o IP da interface privada escolhida e libere essa porta apenas para as redes autorizadas. O console pode permanecer no loopback. Reinicie e teste HTTPS com o hostname do certificado. A renova\u00e7\u00e3o precisa atualizar os arquivos copiados e incluir rein\u00edcio controlado; renovar o certificado original n\u00e3o atualiza automaticamente essa c\u00f3pia.<\/p>\n<p>No Docker, monte o diret\u00f3rio de certificados como somente leitura e configure <code>RUSTFS_TLS_PATH<\/code> para o caminho interno. Garanta leitura ao UID\/GID 10001 sem tornar a chave p\u00fablica. O TLS nativo afeta ambos os listeners: altere tamb\u00e9m URLs de clientes e o healthcheck para HTTPS, usando hostname compat\u00edvel com o certificado e a CA correta. N\u00e3o mantenha o healthcheck HTTP mostrado no laborat\u00f3rio depois de habilitar TLS.<\/p>\n<p>Se preferir proxy reverso, use um hostname dedicado \u00e0 API e preserve Host, caminho e par\u00e2metros assinados. N\u00e3o acrescente um prefixo arbitr\u00e1rio como <code>\/s3\/<\/code>: isso pode invalidar assinaturas. Limites de upload, timeouts e streaming precisam ser homologados com objetos reais, inclusive multipart. Console e API t\u00eam pol\u00edticas de exposi\u00e7\u00e3o distintas.<\/p>\n<h2>Versionamento, reten\u00e7\u00e3o e backup s\u00e3o camadas diferentes<\/h2>\n<ul>\n<li><strong>Versionamento:<\/strong> ajuda a recuperar vers\u00f5es anteriores, mas aumenta consumo e exige pol\u00edtica para vers\u00f5es antigas.<\/li>\n<li><strong>Lifecycle:<\/strong> automatiza expira\u00e7\u00e3o ou transi\u00e7\u00e3o; uma regra errada tamb\u00e9m automatiza exclus\u00e3o indesejada.<\/li>\n<li><strong>Object Lock:<\/strong> acrescenta restri\u00e7\u00f5es de reten\u00e7\u00e3o; planeje cuidadosamente antes de aplicar a dados que depois precisar\u00e3o ser removidos.<\/li>\n<li><strong>Replica\u00e7\u00e3o:<\/strong> pode copiar tamb\u00e9m erros l\u00f3gicos, dependendo da configura\u00e7\u00e3o. N\u00e3o a trate automaticamente como backup independente.<\/li>\n<li><strong>Backup:<\/strong> precisa de destino separado, credenciais protegidas e restaura\u00e7\u00e3o ensaiada, incluindo configura\u00e7\u00f5es e chaves necess\u00e1rias \u00e0 leitura.<\/li>\n<\/ul>\n<p>N\u00e3o copie apenas arquivos vis\u00edveis do diret\u00f3rio interno com o servi\u00e7o escrevendo e suponha que isso forma um snapshot consistente. Para portabilidade, use ferramentas S3 e verifique o que elas preservam: vers\u00f5es, delete markers, pol\u00edticas, reten\u00e7\u00e3o e metadados n\u00e3o acompanham necessariamente uma simples c\u00f3pia de objetos.<\/p>\n<p>O <a href=\"\/2026\/09\/rclone-no-linux-sync-backup-criptografado-mount-e-serve-em-qualquer-nuvem\/\">guia de rclone<\/a> ajuda no planejamento. Fa\u00e7a primeiro invent\u00e1rio e c\u00f3pia n\u00e3o destrutiva; <code>sync<\/code> pode apagar o que s\u00f3 existe no destino. Para migra\u00e7\u00e3o, mantenha a origem intacta at\u00e9 validar a aplica\u00e7\u00e3o, a contagem, o conte\u00fado e o procedimento de retorno.<\/p>\n<h2>Opera\u00e7\u00e3o: sa\u00fade, capacidade e atualiza\u00e7\u00e3o<\/h2>\n<p>Monitore o armazenamento como um servi\u00e7o de dados: espa\u00e7o livre, crescimento, erros de I\/O, lat\u00eancia e erros da API, falhas de autentica\u00e7\u00e3o, uploads incompletos e validade do certificado. Em cluster, acrescente quorum, discos indispon\u00edveis, healing e replica\u00e7\u00e3o. Sa\u00fade do processo n\u00e3o \u00e9 sin\u00f4nimo de capacidade de grava\u00e7\u00e3o. O <a href=\"https:\/\/docs.rustfs.com\/en\/operations\/rc\">cliente oficial rc<\/a> complementa console e APIs para inspe\u00e7\u00e3o administrativa.<\/p>\n<p>Para telemetria centralizada, veja <a href=\"\/2026\/09\/openobserve-observabilidade-logs-metricas-traces\/\">OpenObserve: logs, m\u00e9tricas e traces<\/a>. Se o objetivo for usar RustFS como armazenamento do OpenObserve, consulte o <a href=\"\/2026\/09\/openobserve-ubuntu-servidor-dedicado-s3-gcs-minio\/\">guia do servidor dedicado<\/a>. S\u00e3o pap\u00e9is diferentes: RustFS guarda objetos; OpenObserve interpreta e consulta telemetria.<\/p>\n<p>Antes de atualizar, leia a release, registre vers\u00e3o e digest, fa\u00e7a backup e teste restaura\u00e7\u00e3o. Na op\u00e7\u00e3o bin\u00e1rio, instale o execut\u00e1vel novo ao lado do anterior, pare o servi\u00e7o, troque o link e valide readiness e um teste S3. Na op\u00e7\u00e3o Docker, altere a imagem no Compose, fa\u00e7a pull e recrie preservando volumes. Um n\u00f3 \u00fanico ter\u00e1 interrup\u00e7\u00e3o de servi\u00e7o.<\/p>\n<p><strong>Rollback n\u00e3o \u00e9 s\u00f3 guardar o execut\u00e1vel anterior.<\/strong> Se a atualiza\u00e7\u00e3o mudar estado persistido, voltar o bin\u00e1rio pode n\u00e3o ser suportado. Confirme compatibilidade nas notas e mantenha um caminho de restaura\u00e7\u00e3o. N\u00e3o improvise atualiza\u00e7\u00e3o rolling em cluster sem compreender quorum e esperar cada n\u00f3 voltar pronto. <a href=\"https:\/\/docs.rustfs.com\/en\/operations\/upgrade\">Procedimentos oficiais de atualiza\u00e7\u00e3o<\/a>.<\/p>\n<h2>Problemas comuns e como investigar<\/h2>\n<table>\n<thead>\n<tr>\n<th>Sintoma<\/th>\n<th>O que conferir<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Permission denied<\/td>\n<td>Propriet\u00e1rio do diret\u00f3rio, UID 10001 no container, montagem e permiss\u00e3o da chave TLS. N\u00e3o use 777.<\/td>\n<\/tr>\n<tr>\n<td>Porta ocupada<\/td>\n<td>Outra inst\u00e2ncia ou outro servi\u00e7o em 9000\/9001. Escolha um m\u00e9todo e revise o mapeamento.<\/td>\n<\/tr>\n<tr>\n<td>Health live OK, ready 503<\/td>\n<td>Depend\u00eancias ainda n\u00e3o prontas, storage\/IAM e, em cluster, peers e quorum. Leia o corpo da resposta e os logs.<\/td>\n<\/tr>\n<tr>\n<td>SignatureDoesNotMatch<\/td>\n<td>Chave, segredo, regi\u00e3o, rel\u00f3gio, endpoint e altera\u00e7\u00f5es de Host\/caminho no proxy.<\/td>\n<\/tr>\n<tr>\n<td>403 AccessDenied<\/td>\n<td>Pol\u00edtica da identidade, bucket e opera\u00e7\u00e3o requerida. N\u00e3o conceda administrador como corre\u00e7\u00e3o gen\u00e9rica.<\/td>\n<\/tr>\n<tr>\n<td>Console abre, cliente S3 falha<\/td>\n<td>Cliente na API 9000, n\u00e3o no console 9001; URL, TLS e path-style conforme a configura\u00e7\u00e3o.<\/td>\n<\/tr>\n<tr>\n<td>Dados \u201csumiram\u201d ap\u00f3s recria\u00e7\u00e3o<\/td>\n<td>Volume realmente usado, nome do projeto Compose e destino da montagem. N\u00e3o crie buckets novos antes de identificar o volume anterior.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Se houver erro de integridade, pare de fazer mudan\u00e7as explorat\u00f3rias nos discos e preserve logs e c\u00f3pias de recupera\u00e7\u00e3o. Apagar metadados internos para \u201cfor\u00e7ar o start\u201d pode piorar o problema.<\/p>\n<h2>Parar o laborat\u00f3rio sem destruir os objetos<\/h2>\n<p>Na op\u00e7\u00e3o bin\u00e1rio, <code>sudo systemctl stop rustfs<\/code> para o processo e preserva dados e configura\u00e7\u00e3o. Na op\u00e7\u00e3o Docker, entre na pasta do projeto e execute:<\/p>\n<pre><code class=\"language-bash\">docker compose down<\/code><\/pre>\n<p>Sem <code>-v<\/code>, os volumes nomeados permanecem. N\u00e3o use <code>docker compose down -v<\/code>, <code>docker volume prune<\/code> ou exclus\u00e3o do diret\u00f3rio como rotina de atualiza\u00e7\u00e3o. Essas opera\u00e7\u00f5es podem destruir a persist\u00eancia. O cleanup de dados s\u00f3 deve ocorrer ap\u00f3s conferir o ambiente e decidir explicitamente que ele \u00e9 descart\u00e1vel.<\/p>\n<h2>Checklist antes de pensar em produ\u00e7\u00e3o<\/h2>\n<ul>\n<li>Vers\u00e3o e checksum\/digest registrados; processo sem root.<\/li>\n<li>Credenciais padr\u00e3o removidas e identidade de aplica\u00e7\u00e3o restrita.<\/li>\n<li>API e console com exposi\u00e7\u00e3o deliberada; TLS validado sem bypass.<\/li>\n<li>Discos e volumes persistentes identificados e monitorados.<\/li>\n<li>Upload, download, checksum e leitura ap\u00f3s rein\u00edcio aprovados.<\/li>\n<li>Backup independente e restaura\u00e7\u00e3o ensaiada.<\/li>\n<li>Reten\u00e7\u00e3o, vers\u00f5es antigas, multipart e capacidade contabilizados.<\/li>\n<li>Limites de compatibilidade testados com a aplica\u00e7\u00e3o real.<\/li>\n<li>Topologia compat\u00edvel com os requisitos de disponibilidade.<\/li>\n<\/ul>\n<p>O melhor come\u00e7o \u00e9 pequeno, mas verific\u00e1vel: uma vers\u00e3o fixa, um bucket, um objeto conferido e uma recupera\u00e7\u00e3o que funciona. Depois amplie a carga e a arquitetura com evid\u00eancias \u2014 n\u00e3o porque \u201cS3-compatible\u201d ou \u201cescrito em Rust\u201d substitui planejamento.<\/p>\n<h2>Fontes oficiais<\/h2>\n<ul>\n<li><a href=\"https:\/\/rustfs.com\/\">RustFS: projeto e proposta<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rustfs\/rustfs\">C\u00f3digo, recursos e limites conhecidos<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\">Documenta\u00e7\u00e3o<\/a> e <a href=\"https:\/\/docs.rustfs.com\/en\/installation\">instala\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rustfs\/rustfs\/releases\/tag\/1.0.1\">Release 1.0.1<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\/installation\/linux\/single-node-single-disk\">Instala\u00e7\u00e3o SNSD<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\/installation\/container\/docker\">Docker<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\/operations\/status-check\">Status e health checks<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\/integration\/tls-configured\">TLS<\/a><\/li>\n<li><a href=\"https:\/\/docs.rustfs.com\/en\/operations\/upgrade\">Atualiza\u00e7\u00f5es<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Install RustFS on Linux with binary and systemd or Docker Compose: S3 API, persistence, TLS, IAM, upload and download tests, backup and operation.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46,2,120],"tags":[531,410,47,156,158,530,460],"class_list":["post-1808","post","type-post","status-publish","format-standard","hentry","category-devops","category-linux","category-servidores","tag-armazenamento","tag-backup","tag-devops","tag-docker","tag-rust","tag-rustfs","tag-s3"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=1808"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1808\/revisions"}],"predecessor-version":[{"id":1815,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1808\/revisions\/1815"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=1808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=1808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=1808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}