Skip to content

Implantar o Potato no AWS Lightsail

Coloque um estudo de anotação do Potato no AWS Lightsail por $12 ao mês com o potato deploy, da configuração das credenciais ao download das anotações no fim.

potato deploy up --provider aws coloca um estudo de anotação em uma única máquina virtual do AWS Lightsail por um valor fixo de $12 ao mês, com um endereço HTTPS para enviar aos seus anotadores. O Lightsail é o destino da AWS a usar, a menos que esteja desativado na sua conta. O preço inclui o endereço IPv4 e um disco de 60 GB que sobrevive a reinicializações, e o Potato precisa apenas das permissões lightsail:* e sts:GetCallerIdentity, então funciona sob uma função do IAM restrita. Esta página exige o Potato 2.10 ou posterior e uma configuração que você já executou com potato start.

Configurando as credenciais da AWS

O Potato lê as credenciais da AWS da mesma forma que a ferramenta de linha de comando aws: de AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY, depois de AWS_PROFILE e depois de ~/.aws/credentials e ~/.aws/config. Instale o extra da AWS, faça login com a AWS CLI e verifique se o Potato enxerga a conta que você espera:

bash
pip install 'potato-annotation[deploy-aws]'
aws configure                     # or: aws sso login --profile lab
potato deploy providers --verify

providers --verify pergunta a cada provedor a quem pertencem as suas credenciais e exibe a resposta. Se a sua instituição usa login único, passe o nome do perfil em cada implantação com --aws-profile lab, e o Potato o registra para que os comandos seguintes usem a mesma conta. O Potato nunca grava credenciais da AWS em disco.

Se o seu usuário ou a sua função do IAM for restrita, peça ao seu administrador lightsail:* e sts:GetCallerIdentity. Os outros dois destinos da AWS precisam de mais permissões do que essas. O destino EC2 (--provider aws-ec2, cerca de $18 ao mês) é para contas em que o Lightsail está desativado, e o destino ECS Express (--provider aws-ecs) executa um contêiner cujo disco não sobrevive a uma reinicialização.

Decidindo quem pode fazer login

potato deploy não altera as suas configurações de login, e um endereço do Lightsail é público. Se a configuração permite que qualquer pessoa se cadastre, a simulação abaixo informa o aviso D003, "Anyone who finds the URL can register and annotate." (Qualquer pessoa que encontrar a URL pode se cadastrar e anotar.) Em um estudo de crowdsourcing, o cadastro aberto costuma ser intencional, já que a plataforma envia os trabalhadores ao link. Para anotadores nominais, liste-os em user_config.users com allow_all_users: false (Gerenciamento de Senhas) ou faça com que entrem pelo Google, pelo GitHub ou pela sua instituição (Autenticação SSO e OAuth) antes de implantar.

Conferindo o plano

Uma simulação não precisa de conta na AWS e não cria nada. Ela exibe o relatório de verificação prévia, cada passo que a implantação daria e o custo estimado:

bash
potato deploy up myproject/config.yaml --provider aws --dry-run

Em uma implantação padrão, o plano cria uma instância com o nome da tarefa em us-east-1, usando o pacote small_3_0 de 2 GB e o Ubuntu 24.04. Ele associa um IP estático, para que o endereço e o certificado sobrevivam a uma parada e um reinício, e abre apenas as portas 22, 80 e 443. O Potato escuta na porta 8000 atrás do servidor web Caddy, e a implantação nunca abre a porta 8000. O Potato gera uma chave SSH de implantação para esta implantação e não usa as suas próprias chaves SSH.

Três opções mudam os padrões. --region aceita qualquer região do Lightsail. Como o Potato mantém o conjunto de itens em memória, um corpus grande demais para 2 GB precisa de --size medium_3_0, que oferece 4 GB por $24 ao mês. --volume-gb acrescenta um disco separado do Lightsail a $0.10 por GB ao mês e guarda nele os dados da tarefa.

Implantando

Execute o mesmo comando sem --dry-run. O Potato mostra o plano de novo e espera a sua confirmação:

bash
potato deploy up myproject/config.yaml --provider aws

A implantação leva vários minutos enquanto a instância inicializa e instala o Docker. Ao terminar, ela exibe a URL, um endereço https:// no IP estático, e o caminho do arquivo da chave de administrador, .potato/secrets.json, ao lado da sua configuração. A chave de administrador abre o painel do administrador em /admin. Executar up de novo depois de editar a configuração envia a nova versão e reinicia a tarefa na mesma instância.

Sem um nome de domínio, o Let's Encrypt emite o certificado para o endereço IP. Ele dura cerca de seis dias e é renovado automaticamente. potato deploy status myproject/config.yaml informa uma renovação que falha, então verifique-o a cada poucos dias se o estudo roda sem supervisão. Para usar o seu próprio domínio, aponte um registro DNS A para o IP estático e implante de novo com --domain annotate.example.edu.

Encerrando o estudo

As anotações ficam no disco da instância, que sobrevive a reinicializações, mas não ao destroy. Primeiro baixe-as para a sua máquina, confira-as e só então remova a instância:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull grava tudo o que a implantação coletou em um novo diretório potato-pull-<name>-<timestamp> e copia os bancos de dados com o comando de backup do SQLite. destroy não roda em uma implantação da qual nunca foi feito um pull. Ele libera o IP estático, porque o Lightsail cobra por um IP que não esteja associado a uma instância. Com --volume-gb, destroy --keep-data mantém o disco separado.

Solução de problemas

"AWS rejected the credentials" significa que a sessão de SSO expirou ou que AWS_PROFILE indica um perfil que não existe. Execute aws sso login e implante de novo.

"Lightsail does not sell bundle …" aparece quando a AWS renomeia os pacotes depois de uma mudança de preço. O erro lista os pacotes à venda no momento, e --size aceita um deles.

O HTTPS falha nos primeiros minutos porque o certificado é solicitado assim que a instância fica acessível. potato deploy status informa um erro de certificado separadamente de um servidor fora do ar.

Leitura adicional