Criando uma biblioteca online para ler em vários dispositivos

Eu sempre gostei de ler, e nunca tive problemas em ler e-books, seja no computador ou no Kindle. Aliás, eu sou um defensor ferrenho do Kindle, acho muito prático e a bateria dura eras. Indico principalmente para livros não-técnicos (se quiser sugestões do que ler, escrevi sobre). Para livros técnicos eu prefiro ler no computador, porque i) se o livro tiver muito código ou imagens fica confuso no Kindle e ii) eu consigo dividir a tela e digitar os comandos no terminal/editor de textos, caso eu queira. Mas eu tenho um problema que é ora ler no desktop, ora ler no notebook. Assim, sempre preciso lembrar ou anotar em qual página eu parei, pois nativamente os leitores do Google Drive ou do One Drive não fazem isso. Claro, eu poderia anotar em algum lugar, como no Obsidian, mas é enfadonho. Fui pesquisar, então, soluções para isso.

A primeira solução que eu pensei foi o Calibre. Já uso ele no Linux, e vi que ele tem uma opção para usar um “servidor” de armazenamento. Achei que poderia ser a minha solução. Porém, a menos que eu tenha feito algo errado, e de acordo com o pessoal do Reddit [1] [2], ele não guarda o estado da leitura, isto é, a página. Então achei esse outro projeto, chamado Komga. Ele foi feito para ler quadrinhos, mas funciona também com livros. Resolvi dar uma chance.

O Komga (ou A Komga? Não sei.) pode ser executado como uma imagem Docker. Eu já tenho uma VPS configurada para projetos pessoais, inclusive usando docker compose, então configurar o projeto foi muito simples. Na própria documentação eles mostram como fazer, mas eu vou colar aqui igual:

 

services:
  komga:
    image: gotson/komga
    container_name: komga
    volumes:
      - type: bind
        source: /path/to/config
        target: /config
      - type: bind
        source: /path/to/data
        target: /data
      - type: bind
        source: /etc/timezone #alternatively you can use a TZ environment variable, like TZ=Europe/London
        target: /etc/timezone
        read_only: true
    ports:
      - 25600:25600
    user: "1000:1000"
    # remove the whole environment section if you don't need it
    environment:
      - <ENV_VAR>=<extra configuration>
    restart: unless-stopped

As únicas alterações que eu fiz foi remover a sessão de environment and set the correct path (and permissions: chown 1000:1000 -R <path>. Na primeira vez que você se conectar, precisará configurar um usuário e senha (e fica a dica, se ainda não usa um gerenciador de senha, use! Eu uso 1password, e é muito bom). Depois disso, é só configurar sua biblioteca. O Komga aceita diversos formatos, como PDF e epub. Eu fiz o upload dos meus livros utilizando o bom e velho scp, e já pude começar a ler.

O leitor padrão (no navegador) é assim: 
 

Para utilizar em um domínio ou sub-domínio é bem simples. Na própria documentação os autores mostram como fazer isso com o Caddy, mas eu uso Nginx. Então segue o código, que é super simples (mesmo):

server {
    listen 80;
    server_name seu.dominio.com;

    location / {
        proxy_pass http://127.0.0.1:25600/;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

}

O código acima funciona somente com HTTP – sem o S. Para gerar um certificado válido, eu uso (e recomendo) o Let’s encrypt. Com ele, é possível gerar facilmente o certificado, e ele até mesmo edita o arquivo do nginx, para redirecionar todo o tráfego vindo da porta 80 para a porta 443. E é isso, simples assim.

A navegação pode ser tanto horizontal quanto vertical (por exemplo, caso eu fosse ler manga (essa palavra leva acento?), na vertical é mais cômodo). Porém, como eu disse anteriormente, o projeto surgiu como um leitor de manga/HG, então o navegador não possui ferramentas para marcar o texto, adicionar comentários ou nada do gênero. Isso me incomoda um pouco, mas de qualquer modo eu pretendo utilizar mais o Obsidian, então farei minhas anotações lá. Pelo menos agora eu consigo ler meus livros onde eu quiser. Caso vocês conheçam algum outro projeto nesse estilo, deixem nos comentários.