Skip to content

Desplegar Potato en AWS Lightsail

Lleva un estudio de anotación con Potato a AWS Lightsail por $12 al mes con potato deploy, desde las credenciales hasta descargar las anotaciones al final.

potato deploy up --provider aws pone un estudio de anotación en una sola máquina virtual de AWS Lightsail por una tarifa fija de $12 al mes, con una dirección HTTPS que puedes enviar a tus anotadores. Lightsail es el destino de AWS que conviene usar, salvo que esté desactivado en tu cuenta. El precio incluye la dirección IPv4 y un disco de 60 GB que sobrevive a los reinicios, y Potato solo necesita los permisos lightsail:* y sts:GetCallerIdentity, así que funciona con un rol de IAM restringido. Esta página requiere Potato 2.10 o posterior y una configuración que ya hayas ejecutado con potato start.

Configurar las credenciales de AWS

Potato lee las credenciales de AWS igual que la herramienta de línea de comandos aws: primero de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, después de AWS_PROFILE y después de ~/.aws/credentials y ~/.aws/config. Instala el extra de AWS, inicia sesión con la AWS CLI y comprueba que Potato ve la cuenta que esperas:

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

providers --verify pregunta a cada proveedor a quién pertenecen tus credenciales y muestra la respuesta. Si tu institución usa inicio de sesión único, pasa el nombre del perfil en cada despliegue con --aws-profile lab, y Potato lo guarda para que los comandos posteriores usen la misma cuenta. Potato nunca escribe credenciales de AWS en el disco.

Si tu usuario o rol de IAM está restringido, pide a tu administrador lightsail:* y sts:GetCallerIdentity. Los otros dos destinos de AWS necesitan más permisos que estos. El destino EC2 (--provider aws-ec2, unos $18 al mes) es para cuentas en las que Lightsail está desactivado, y el destino ECS Express (--provider aws-ecs) ejecuta un contenedor cuyo disco no sobrevive a un reinicio.

Decidir quién puede iniciar sesión

potato deploy no cambia tus ajustes de inicio de sesión, y una dirección de Lightsail es pública. Si la configuración permite que cualquiera se registre, la ejecución de prueba de abajo muestra el aviso D003, «Anyone who finds the URL can register and annotate.» (Cualquiera que encuentre la URL puede registrarse y anotar.) En un estudio de crowdsourcing, el registro abierto suele ser intencionado, ya que la plataforma envía a los trabajadores al enlace. Para anotadores con nombre, inclúyelos en user_config.users con allow_all_users: false (Gestión de contraseñas) o haz que inicien sesión con Google, GitHub o tu institución (SSO y OAuth) antes de desplegar.

Revisar el plan

Una ejecución de prueba no necesita cuenta de AWS y no crea nada. Muestra el informe de comprobación previa, cada paso que daría el despliegue y el coste estimado:

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

En un despliegue por defecto, el plan crea en us-east-1 una instancia con el nombre de la tarea, con el bundle small_3_0 de 2 GB y Ubuntu 24.04. Le asigna una IP estática, para que la dirección y su certificado sobrevivan a una parada y un arranque, y abre solo los puertos 22, 80 y 443. Potato escucha en el puerto 8000 detrás del servidor web Caddy, y el despliegue nunca abre el puerto 8000. Potato genera una clave de despliegue SSH para este despliegue y no usa tus propias claves SSH.

Tres opciones cambian los valores por defecto. --region acepta cualquier región de Lightsail. Como Potato guarda en memoria el conjunto de ítems, un corpus demasiado grande para 2 GB necesita --size medium_3_0, que ofrece 4 GB por $24 al mes. --volume-gb añade un disco de Lightsail independiente a $0.10 por GB al mes y guarda en él los datos de la tarea.

Desplegar

Ejecuta el mismo comando sin --dry-run. Potato vuelve a mostrar el plan y espera a que confirmes:

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

El despliegue tarda varios minutos mientras la instancia arranca e instala Docker. Al terminar muestra la URL, una dirección https:// sobre la IP estática, y la ruta del archivo de la clave de administración, .potato/secrets.json, junto a tu configuración. La clave de administración abre el panel de administración en /admin. Si vuelves a ejecutar up después de editar la configuración, sube la nueva versión y reinicia la tarea en la misma instancia.

Sin nombre de dominio, Let's Encrypt emite el certificado para la dirección IP. Dura unos seis días y se renueva automáticamente. potato deploy status myproject/config.yaml informa de una renovación fallida, así que compruébalo cada pocos días si el estudio funciona sin supervisión. Para usar tu propio dominio, apunta un registro DNS A a la IP estática y vuelve a desplegar con --domain annotate.example.edu.

Terminar el estudio

Las anotaciones están en el disco de la instancia, que sobrevive a reinicios y rearranques, pero no a destroy. Descárgalas primero a tu máquina, compruébalas y después elimina la instancia:

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

pull escribe todo lo que ha recogido el despliegue en un directorio nuevo potato-pull-<name>-<timestamp> y copia las bases de datos con el comando de copia de seguridad de SQLite. destroy no se ejecuta en un despliegue cuyos datos nunca se han descargado. Libera la IP estática, porque Lightsail cobra por una IP que no está asignada a ninguna instancia. Con --volume-gb, destroy --keep-data conserva el disco independiente.

Solución de problemas

«AWS rejected the credentials» significa que la sesión de SSO ha caducado o que AWS_PROFILE nombra un perfil que no existe. Ejecuta aws sso login y vuelve a desplegar.

«Lightsail does not sell bundle …» aparece cuando AWS cambia el nombre de los bundles tras un cambio de precios. El error enumera los bundles que se venden actualmente, y --size acepta cualquiera de ellos.

HTTPS falla durante los primeros minutos porque el certificado se solicita cuando la instancia ya es accesible. potato deploy status informa de un error de certificado por separado de un servidor caído.

Lecturas adicionales