Alojar FreshRSS num VPS gerido: os seus feeds RSS no seu servidor

Alojar FreshRSS num VPS gerido é ler os seus feeds RSS, sozinho ou com a sua equipa, a partir de uma máquina sua, que as nossas equipas mantêm atualizada e supervisionam dia e noite. O FreshRSS é um software livre sob licença AGPL-3.0. Este guia segue a sua documentação oficial: a instalação com o Docker Compose, o HTTPS, a atualização dos feeds, as contas e o início de sessão, a API para as aplicações móveis, a base de dados, as cópias de segurança e as atualizações.

Simon Vasconcelos Lee Por Publicado a 11 de novembro de 2026Leitura: 13 minutos

Todos os guias

O essencial

  1. A licença AGPL-3.0 permite fazer correr o FreshRSS livremente, numa empresa como em qualquer outro lado; se o modificar, propõe o código-fonte da sua versão a quem a utiliza.
  2. Instale-o com o Docker Compose: uma imagem, uma porta publicada em local e dois volumes, data e extensions, atrás de um proxy inverso em HTTPS.
  3. A variável CRON_MIN atualiza os feeds sozinha: o projeto recomenda cerca de duas execuções por hora.
  4. As inscrições estão fechadas por predefinição. Para as aplicações móveis, ative a API e cada utilizador define depois uma palavra-passe de API.
  5. Faça a cópia do volume data e, com o PostgreSQL ou o MySQL, da base de dados, e atualize depois com docker compose pull.

O que faz o FreshRSS

O FreshRSS é um agregador de feeds RSS autoalojado, escrito em PHP. O seu README descreve-o como leve, simples de utilizar, potente e personalizável, traduzido em mais de vinte línguas. É uma aplicação multiutilizador, com um modo de leitura anónima e etiquetas personalizadas.

O FreshRSS é desenvolvido pela sua comunidade no GitHub, e o seu site oficial é editado pela comunidade FreshRSS. As extensões vivem num repositório separado, e a documentação dirige-se aos utilizadores, aos administradores e aos programadores.

O que permite a licença AGPL-3.0

O FreshRSS é publicado sob a GNU Affero General Public License, versão 3: o seu manifesto composer.json declara-a como AGPL-3.0, e o seu README remete para o texto da licença. Esse texto afirma uma permissão ilimitada de fazer correr o programa não modificado. Pode, portanto, utilizar a imagem publicada pelo projeto para a sua empresa e a sua equipa, sem licença para comprar.

O artigo 13 acrescenta uma condição própria da AGPL: se modificar o programa, a sua versão tem de oferecer a todos os que a utilizam à distância, pela rede, o meio de obter gratuitamente o seu código-fonte. Uma extensão de terceiros acrescentada ao volume extensions segue a sua própria licença.

A instalação com o Docker Compose

O projeto publica as suas imagens oficiais no Docker Hub, com o nome freshrss/freshrss, bem como um ficheiro Compose de exemplo. Num servidor com o Docker instalado, crie uma pasta freshrss e coloque nela este compose.yaml, tirado desse ficheiro e do README Docker:

compose.yaml
volumes:
  data:
  extensions:

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    hostname: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - data:/var/www/FreshRSS/data
      - extensions:/var/www/FreshRSS/extensions
    ports:
      - 127.0.0.1:8080:80
    environment:
      TZ: UTC
      CRON_MIN: '3,33'
      TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16
    healthcheck:
      test: ["CMD", "cli/health.php"]
      timeout: 10s
      start_period: 60s
      start_interval: 11s
      interval: 75s
      retries: 3
Terminal, na pasta freshrss
docker compose up -d

A etiqueta latest, a predefinida, acompanha a última versão numerada; edge acompanha a versão contínua; uma etiqueta como 1.30.4 fixa uma versão, e o sufixo -alpine dá o mesmo numa base Alpine em vez de Debian. A secção das atualizações volta a esta escolha.

Concluir a instalação

Com o proxy inverso instalado, abra o seu endereço HTTPS: o assistente de instalação pede a língua, verifica o servidor, propõe a escolha da base de dados e cria depois a conta de administrador, com a sua palavra-passe e o método de início de sessão. O SQLite funciona sem nada para preparar. A instalação faz-se também na linha de comandos, com cli/do-install.php e cli/create-user.php, executados através de docker exec --user www-data freshrss.

Quanto aos recursos, o README pede um servidor ligeiro, em Linux ou Windows, e assinala que o FreshRSS funciona até num Raspberry Pi 1, com tempos de resposta inferiores a um segundo, com 150 feeds e 22 000 artigos. O tamanho depende do número de utilizadores, de feeds e de artigos conservados. Num VPS gerido, descreva-nos a sua utilização e recomendamos-lhe o tamanho adequado.

HTTPS: o proxy inverso

Para a produção, o README Docker aconselha um proxy inverso no servidor anfitrião, que fornece o HTTPS. Escolha primeiro um nome de domínio ou um subdomínio, como rss.example.com, que aponte para o servidor com registos A e AAAA. O projeto recomenda o Traefik e publica para ele um ficheiro Compose completo, com os certificados Let's Encrypt e o redirecionamento de HTTP para HTTPS; dá também exemplos para o Apache, o Nginx e o Caddy.

Com o Caddy

O Caddy obtém o certificado e ativa o HTTPS por si próprio. Este bloco retoma o exemplo da documentação para um subdomínio, apontado aqui para a porta publicada em local:

Caddyfile
rss.example.com {
  reverse_proxy 127.0.0.1:8080
}

Com o Nginx e o Certbot

Este bloco retoma o exemplo Nginx do README Docker para a raiz de um domínio, reduzido à porta 80 para deixar o Certbot instalar o HTTPS. As duas últimas linhas transmitem o cabeçalho Authorization, de que a API Google Reader precisa:

Bloco Nginx
upstream freshrss {
  server 127.0.0.1:8080;
  keepalive 64;
}

server {
  listen 80;
  listen [::]:80;
  server_name rss.example.com;

  location / {
    proxy_pass http://freshrss/;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_read_timeout 90;

    proxy_set_header Authorization $http_authorization;
    proxy_pass_header Authorization;
  }
}

O Certbot instala depois o certificado e encarrega-se de o renovar:

Terminal
sudo certbot --nginx

O endereço público: base_url

O FreshRSS guarda o seu endereço público em base_url, no ficheiro data/config.php. A API e o WebSub dependem dele: verifique que contém o seu endereço em https. O README Docker mostra onde encontrar este ficheiro no volume:

Terminal
docker volume inspect freshrss_data
sudo nano /var/lib/docker/volumes/freshrss_data/_data/config.php
docker compose restart freshrss
data/config.php
'base_url' => 'https://rss.example.com/',

A atualização dos feeds: CRON_MIN

O FreshRSS vai buscar os novos artigos com o seu script app/actualize_script.php. A imagem Docker inclui uma tarefa agendada que o executa nos minutos indicados em CRON_MIN. Sem esta variável, ou com um valor vazio, a tarefa fica desativada e os feeds deixam de se atualizar sozinhos.

Outro método documentado: uma tarefa agendada no servidor anfitrião, que chama o script dentro do contentor. Nesse caso, retire CRON_MIN do compose.yaml, para manter um único método:

/etc/cron.d/FreshRSS
7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1

Desde a versão 1.30.0, o FreshRSS recusa por predefinição os endereços da rede local, como 127.0.0.1, para se proteger da falsificação de pedidos do lado do servidor. Um serviço vizinho que produza feeds, como o RSS-Bridge, é autorizado através da variável INTERNAL_HOST_ALLOWLIST, na forma rss-bridge:80, ou na configuração do sistema. O valor * retira qualquer verificação, e a documentação considera-o inseguro.

As contas e o início de sessão

Na instalação, o FreshRSS propõe o início de sessão por formulário, que exige o JavaScript. É o método predefinido, e convém à maioria das instâncias. A documentação descreve outros:

MétodoO que fazOnde se define
FormulárioUm nome de utilizador e uma palavra-passe próprios do FreshRSSO assistente de instalação
Autenticação HTTPO servidor web controla o acesso, e os novos utilizadores são criados no primeiro início de sessãoUm ficheiro p/i/.htaccess montado no contentor, com o seu .htpasswd
Autenticação externaO proxy transmite o utilizador ligado no cabeçalho Remote-User ou X-WebAuth-UserTRUSTED_PROXY, que enumera os proxies de confiança
OpenID ConnectO início de sessão passa pelo seu fornecedor de identidade, através do módulo Apache mod_auth_openidcOIDC_ENABLED e as variáveis OIDC_*, na imagem Debian em x86_64

A documentação avisa que o FreshRSS confia em qualquer endereço indicado em TRUSTED_PROXY: um proxy mal protegido permitiria a um atacante definir o cabeçalho e obter o acesso de administrador. Aqui, a porta só escuta em 127.0.0.1, o que a reserva ao proxy do próprio servidor. A documentação desaconselha também qualquer instância sem autenticação, logo que o servidor seja acessível a partir do exterior da sua rede.

As inscrições e os utilizadores

Para uma instância partilhada por várias pessoas, a documentação aconselha a abrir as contas a pessoas de confiança e a manter a instância atrás de um proxy ou de uma firewall que bloqueie o acesso aos intervalos de endereços internos.

As aplicações móveis: as API Google Reader e Fever

O FreshRSS funciona no navegador, em ecrãs grandes e pequenos, e em aplicações para Android, iOS, Linux, Windows e macOS. Estas aplicações utilizam uma das suas duas API: a Google Reader, que o README considera a melhor, e a Fever, com funcionalidades mais limitadas, menos eficiente e menos segura.

  1. Como administrador, na secção Autenticação, ative a opção que autoriza o acesso pela API.
  2. Cada utilizador define uma palavra-passe de API no seu perfil. É distinta da palavra-passe principal, dá acesso a menos coisas e destina-se às situações menos seguras.
  3. Na aplicação, introduza o endereço https://rss.example.com/api/greader.php, ou https://rss.example.com/api/fever.php para a Fever, com o nome de utilizador e essa palavra-passe de API.

Para verificar, a ligação apresentada ao lado da palavra-passe de API, no perfil, abre uma página de teste: PASS na verificação completa confirma que tudo funciona. A imagem Docker já configura o Apache para aceitar as barras codificadas, de que algumas aplicações precisam; com o Nginx à frente, mantenha a transmissão do cabeçalho Authorization.

O README mantém uma tabela das aplicações compatíveis, com a sua plataforma, a sua API e as suas funcionalidades: o Capy Reader e o Readrops no Android, o FeedFlow no telemóvel e no computador, o RSS Guard e o NewsFlash no computador, o ReadKit e o Reeder Classic no iOS e no macOS, entre outras.

SQLite, PostgreSQL, MySQL ou MariaDB

O FreshRSS integra o SQLite, que o README Docker descreve como a opção mais simples, com bom desempenho. A página dos requisitos recomenda o PostgreSQL 10 ou posterior, e aceita também o MariaDB 10.6 e o MySQL 8.0 ou posterior. A escolha faz-se no assistente de instalação.

Base de dadosConfiguraçãoCópia de segurança
SQLiteNenhuma: um ficheiro por utilizador, data/users/<user>/db.sqliteO volume data
PostgreSQLUm serviço postgres no mesmo compose.yamlpg_dump, ou cli/db-backup.php
MySQL ou MariaDBO seu servidor de base de dados, e o respetivo nome de anfitrião no assistentemysqldump, ou cli/db-backup.php

Para o PostgreSQL, acrescente este serviço ao compose.yaml, tirado do ficheiro docker-compose-db.yml do projeto, e o volume db à lista dos volumes. A palavra-passe fica num ficheiro .env, ao lado do compose.yaml:

compose.yaml, em services
  freshrss-db:
    image: postgres:18
    container_name: freshrss-db
    hostname: freshrss-db
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - db:/var/lib/postgresql
    environment:
      POSTGRES_DB: freshrss
      POSTGRES_USER: freshrss
      POSTGRES_PASSWORD: ${DB_PASSWORD}
.env
DB_PASSWORD='a-long-unique-password'

No assistente, escolha o PostgreSQL e indique freshrss-db como anfitrião, com o utilizador, a palavra-passe e a base de dados freshrss.

Pode rever esta escolha mais tarde. A documentação descreve a passagem de uma base de dados para outra, do MySQL para o PostgreSQL, por exemplo, ou para uma versão principal mais recente do PostgreSQL: cli/db-backup.php copia a base de dados de cada utilizador para um ficheiro SQLite, e cli/db-restore.php carrega-a depois na nova base de dados.

As cópias de segurança

O README indica que o FreshRSS é fornecido sem qualquer garantia: são as suas cópias de segurança que guardam as suas subscrições, os seus artigos e as suas definições. Eis o que a documentação pede para copiar:

ElementoO que guardaA copiar
data/A configuração, as contas, os registos e, com o SQLite, as bases de dadosObrigatório; cache/ pode ficar de fora, o FreshRSS reconstrói-a
extensions/As extensões de terceirosRecomendado, se as utilizar
A base de dados externaCom o PostgreSQL, o MySQL ou o MariaDB, os dados dos utilizadoresObrigatório, à parte

Os volumes, com o serviço parado

A documentação considera mais seguro parar o serviço durante as operações de manutenção. Os volumes Docker copiam-se com um contentor temporário, o método descrito na documentação do Docker:

Terminal, na pasta freshrss
docker compose stop freshrss
docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -czf /backup/freshrss-$(date +%F).tgz --exclude=data/cache -C /var/www/FreshRSS data extensions
docker compose start freshrss

As bases de dados, com o serviço a funcionar

Desde a versão 1.29.1, o FreshRSS sabe exportar ele próprio a base de dados de cada utilizador para um ficheiro SQLite, seja qual for a base de dados utilizada, e conservar apenas as mais recentes. Ative esta exportação no data/config.php:

data/config.php
'auto_sqlite_export' => [
    'enabled' => true,
    'retention' => 7,
],

Agende depois o comando no servidor, aqui todas as noites. Cada execução escreve data/users/<user>/sqlite-backups/<date>.sqlite e elimina os ficheiros para além dos sete últimos:

/etc/cron.d/freshrss-export
20 2 * * * root docker exec --user www-data freshrss cli/export-sqlite-auto.php --quiet

Com o PostgreSQL, acrescente uma exportação com a ferramenta da própria base de dados, como no README Docker. A opção -T retira o terminal, de que uma tarefa agendada não precisa:

Terminal, na pasta freshrss
docker compose exec -T freshrss-db pg_dump -U freshrss freshrss | gzip -9 > freshrss-postgres-$(date +%F).sql.gz

A exportação OPML, a partir da interface, guarda a sua lista de feeds, sem algumas definições próprias do FreshRSS, como os acessos ou as regras de recolha das páginas. Para uma cópia completa, guarde as exportações SQLite: colocadas no disco do servidor, entram também nas suas cópias de segurança noturnas.

Restaurar

  1. Pare o FreshRSS com docker compose stop freshrss.
  2. Volte a carregar o arquivo nos volumes: docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.
  3. Com uma base de dados externa, restaure-a a partir da sua exportação, ou a partir dos ficheiros SQLite com cli/db-restore.php --delete-backup --force-overwrite.
  4. Reinicie com docker compose start freshrss e verifique depois que os seus feeds e os seus artigos estão lá.

Repita este exercício de vez em quando, numa cópia: é assim que verifica que uma cópia de segurança funciona.

As atualizações

O README Docker dá dois comandos, a partir da pasta do compose.yaml. Os volumes mantêm-se no lugar:

Terminal
docker compose pull
docker compose up -d

O FreshRSS publica em dois canais. As versões numeradas, etiqueta latest, saem algumas vezes por ano, sem calendário fixo, e as suas correções não são transpostas para as versões antigas. A versão contínua, etiqueta edge, recebe as novidades e as correções à medida que chegam: desde a versão 1.30.0, o projeto recomenda-a para obter mais depressa as correções de segurança.

Para acompanhar as novas versões, o projeto publica um feed Atom das suas versões: subscreva-o na sua própria instância FreshRSS.

Quem faz o quê num VPS gerido

O autoalojamento exige cuidar do servidor para além da aplicação. Num VPS gerido, as nossas equipas assumem o servidor e acompanham a sua instância de forma proativa; o FreshRSS continua a ser o seu software, com as suas definições e os seus dados.

AssuntoAs nossas equipasVocê
O servidorAtualizações do sistema e de segurança, intervenções no servidor incluídasO momento que convém à sua atividade
A supervisãoServidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar pela sua chamadaA leitura dos registos da sua instância
FreshRSSAcompanhamento proativo: erros, lentidão e espaço em disco identificados, correção recomendadaA sua instalação, as suas atualizações e as suas definições, que aplica diretamente ou com o seu assistente de IA
As contas e os feedsO servidor que os suporta, vigiado e com cópias de segurançaOs utilizadores, as subscrições, as extensões e as palavras-passe de API
As cópias de segurançaTodas as noites, cifradas e guardadas fora da máquina; restauro incluídoAs exportações próprias do FreshRSS e o pedido de restauro, quando precisar
A migraçãoO seu servidor atual migrado, oferecidoO momento da mudança

Se preferir que as nossas equipas intervenham na própria aplicação, este serviço é faturado à hora ou por pacote, com um orçamento comunicado antes da intervenção.

O FreshRSS, num servidor mantido por si

Com um VPS gerido da Simafri, as nossas equipas mantêm atualizado o servidor da sua instância FreshRSS, vigiam-no dia e noite e intervêm sem esperar pela sua chamada; acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica diretamente ou com o seu assistente de IA. As cópias de segurança são cifradas todas as noites e guardadas fora da máquina, o seu restauro está incluído, e a migração do seu servidor atual é oferecida.

Descobrir os VPS geridos

Perguntas frequentes

O FreshRSS é gratuito para uma empresa?

Sim. O FreshRSS está sob licença AGPL-3.0: pode fazê-lo correr numa empresa sem licença para comprar. Se o modificar, a sua versão tem de oferecer o código-fonte a quem a utiliza pela rede. Resta o custo do servidor que o faz funcionar.

Como instalar o FreshRSS com o Docker Compose?

Crie um compose.yaml com a imagem freshrss/freshrss, os volumes data e extensions e a porta publicada em 127.0.0.1 e execute docker compose up -d. Coloque depois um proxy inverso em HTTPS à frente, abra o seu endereço e siga o assistente de instalação.

Como atualizar os feeds automaticamente no FreshRSS?

Com a imagem Docker, indique em CRON_MIN os minutos de execução, por exemplo 13,43: o projeto recomenda cerca de duas execuções por hora. Sem CRON_MIN, a tarefa integrada fica desativada. Uma tarefa agendada no servidor que execute app/actualize_script.php dentro do contentor faz o mesmo trabalho.

Que base de dados escolher para o FreshRSS?

O SQLite vem integrado e não exige nenhuma preparação; o README Docker descreve-o como o mais simples, com bom desempenho. A página dos requisitos recomenda o PostgreSQL 10 ou posterior, e aceita o MariaDB 10.6 e o MySQL 8.0. Os comandos db-backup e db-restore permitem mudar de base de dados mais tarde.

Como ler o FreshRSS no telemóvel?

Ative o acesso pela API na secção Autenticação e defina depois uma palavra-passe de API no seu perfil. Numa aplicação compatível, introduza o endereço api/greader.php da sua instância, sendo a API Google Reader a melhor segundo o README, ou api/fever.php.

As inscrições estão abertas no FreshRSS?

Não por predefinição: a configuração limita as contas à do administrador. Cria as outras em Administração, Gestão dos utilizadores, ou aumenta o número de contas na configuração do sistema para mostrar o formulário de inscrição.

Como fazer a cópia de segurança do FreshRSS?

Copie os volumes data e extensions com o serviço parado. Ative também auto_sqlite_export e agende cli/export-sqlite-auto.php, que exporta todas as noites a base de dados de cada utilizador para SQLite. Com o PostgreSQL, acrescente um pg_dump. Teste regularmente o restauro.

Um VPS gerido cobre o FreshRSS?

Um VPS gerido cobre o servidor: sistema, segurança, supervisão e cópias de segurança. As nossas equipas acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica. Uma intervenção na aplicação é faturada à hora ou por pacote.

Fontes e documentação oficial

Contacte-nos