Guia de Implantação e Solução de Problemas do Anki Sync Server

Visão Geral da Arquitetura

O Anki Sync Server é uma implementação de backend de código aberto desenvolvida em Python. Ele permite que os usuários hospedem sua própria infraestrutura de sincronização para o aplicativo de flashcards Anki, substituindo a dependência do serviço oficial AnkiWeb. Isso garante maior privacidade e controle sobre os dados de repetição espaçada.

Desafios Comuns na Implantação e suas Respectivas Soluções

1. Provisionamento e Inicialização do Ambeinte

A instalação requer a configuração de um ambiente isolado para gerenciar as dependências do Python e a inicialização do banco de dados de usuários.

Procedimento de Instalação:

# Clonar o repositório e acessar o diretório raiz
git clone https://github.com/ankicommunity/anki-sync-server.git repositorio_anki
cd repositorio_anki/src

# Criar e ativar um ambiente virtual para isolamento de pacotes
python3 -m venv ambiente_venv
source ambiente_venv/bin/activate

# Instalar as bibliotecas necessárias
pip install --upgrade pip
pip install -r requirements.txt

# Preparar o arquivo de configuração local
cp ankisyncd.conf.example configuracao_local.conf

# Registrar um novo usuário no banco de dados do servidor
python -m ankisyncd_cli adduser admin_sistema

2. Segurança de Transporte (TLS) e Proxy Reverso

Para proteger os dados em trânsito, é fundamental encapsular o tráfego do servidor (que opera na porta 27701 por padrão) através de um proxy reverso com certificados SSL válidos.

Emissão de Certificado via Let's Encrypt:

sudo certbot certonly --webroot -w /var/www/certbot -d sync.meudominio.com

Configuração do Nginx como Proxy Reverso:

upstream cluster_anki {
    server 127.0.0.1:27701 fail_timeout=0;
}

server {
    listen 443 ssl http2;
    server_name sync.meudominio.com;

    ssl_certificate /etc/letsencrypt/live/sync.meudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sync.meudominio.com/privkey.pem;
    
    # Otimizações de SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://cluster_anki;
        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;
        
        # Ajustes de buffer e timeout para sincronização de pacotes grandes
        client_max_body_size 100M;
        proxy_read_timeout 300s;
    }
}

3. Tratamento da Exceção de Incompatibilidade de Protocolo

Ao tentar sincronizar, o cliente pode exibir a mensagem de erro: "This project is incompatible with Anki Desktop >=2.1.57".

Diagnóstico e Resolução:

  1. Causa Raiz: A partir da versão 2.1.57, o cliente desktop do Anki introduziu um novo protocolo de sincronização reescrito em Rust, descontinuando o suporte ao protocolo legado utilizado por esta implementação em Python.
  2. Mitigação Imediata: Verifique as notas de lançamento (Release Notes) do repositório. Se a compatibilidade ainda não foi implementada, será necessário fazer o downgrade do cliente Anki para uma versão anterior (ex: 2.1.56) ou desativar o novo protocolo de sincronização nas configurações do cliente, caso a opção esteja disponível.
  3. Alternativa de Arquitetura: Para usuários que exigem as versões mais recentes do Anki Desktop, recomenda-se a migração para o servidor de sincronização oficial escrito em Rust (disponível no repositório principal do Anki), que suporta nativamente o protocolo moderno.

Tags: anki Python nginx lets-encrypt reverse-proxy

Publicado em 6-18 16:14