Развёртывание Potato на AWS Lightsail
Как разместить исследование с разметкой в Potato на AWS Lightsail за $12 в месяц через potato deploy, от настройки учётных данных до выгрузки разметки в конце.
potato deploy up --provider aws размещает исследование с разметкой на одной виртуальной машине AWS Lightsail по фиксированной цене $12 в месяц и выдаёт адрес с HTTPS, который можно отправить разметчикам. Из целей AWS берите Lightsail, если он не отключён в вашем аккаунте. В цену входят IPv4-адрес и диск на 60 GB, который переживает перезапуски, а Potato нужны только права lightsail:* и sts:GetCallerIdentity, так что он работает и под ограниченной ролью IAM. Для этой страницы нужен Potato 2.10 или новее и конфигурация, которую вы уже запускали через potato start.
Настройка учётных данных AWS
Potato читает учётные данные AWS так же, как консольная утилита aws: из AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, затем из AWS_PROFILE, затем из ~/.aws/credentials и ~/.aws/config. Установите дополнение для AWS, войдите через AWS CLI и проверьте, что Potato видит нужный аккаунт:
pip install 'potato-annotation[deploy-aws]'
aws configure # or: aws sso login --profile lab
potato deploy providers --verifyproviders --verify спрашивает у каждого провайдера, кому принадлежат ваши учётные данные, и печатает ответ. Если ваш институт использует единый вход, передавайте имя профиля при каждом развёртывании через --aws-profile lab. Potato запоминает его, чтобы следующие команды работали с тем же аккаунтом. Учётные данные AWS Potato никогда не записывает на диск.
Если ваш пользователь или роль IAM ограничены, попросите администратора выдать lightsail:* и sts:GetCallerIdentity. Двум другим целям AWS нужно больше прав. Цель EC2 (--provider aws-ec2, около $18 в месяц) предназначена для аккаунтов, где Lightsail отключён, а цель ECS Express (--provider aws-ecs) запускает контейнер, диск которого не переживает перезапуск.
Кто сможет войти
potato deploy не меняет настройки входа, а адрес Lightsail публичен. Если конфигурация позволяет регистрироваться кому угодно, пробный запуск ниже выдаст предупреждение D003: «Anyone who finds the URL can register and annotate.» («Любой, кто найдёт URL, может зарегистрироваться и размечать».) В краудсорсинговом исследовании открытая регистрация обычно нужна, потому что платформа сама отправляет исполнителей по ссылке. Если разметчики известны поимённо, до развёртывания перечислите их в user_config.users с allow_all_users: false (управление паролями) или настройте вход через Google, GitHub или ваш институт (SSO и OAuth).
Проверка плана
Пробный запуск не требует аккаунта AWS и ничего не создаёт. Он печатает отчёт предварительной проверки, каждый шаг, который выполнит развёртывание, и оценку стоимости:
potato deploy up myproject/config.yaml --provider aws --dry-runПри развёртывании по умолчанию план создаёт в us-east-1 один экземпляр, названный по имени задачи, с пакетом small_3_0 на 2 GB и Ubuntu 24.04. К нему привязывается статический IP, чтобы адрес и его сертификат пережили остановку и запуск, и открываются только порты 22, 80 и 443. Potato слушает порт 8000 за веб-сервером Caddy, и развёртывание никогда не открывает порт 8000. Для этого развёртывания Potato генерирует отдельный SSH-ключ и ваши собственные SSH-ключи не использует.
Значения по умолчанию меняют три флага. --region принимает любой регион Lightsail. Potato держит набор объектов в памяти, поэтому корпусу, которому мало 2 GB, нужен --size medium_3_0 с 4 GB за $24 в месяц. --volume-gb добавляет отдельный диск Lightsail по $0.10 за GB в месяц и хранит данные задачи на нём.
Развёртывание
Запустите ту же команду без --dry-run. Potato снова покажет план и дождётся подтверждения:
potato deploy up myproject/config.yaml --provider awsРазвёртывание занимает несколько минут, пока экземпляр загружается и устанавливает Docker. В конце печатаются URL, адрес https:// на статическом IP, и путь к файлу с ключом администратора, .potato/secrets.json рядом с конфигурацией. Ключ администратора открывает админ-панель по адресу /admin. Если после правки конфигурации снова запустить up, новая версия загрузится и задача перезапустится на том же экземпляре.
Без доменного имени Let's Encrypt выдаёт сертификат на IP-адрес. Он действует около шести дней и продлевается автоматически. potato deploy status myproject/config.yaml сообщает о неудачном продлении, поэтому, если исследование идёт без присмотра, проверяйте его раз в несколько дней. Чтобы использовать свой домен, направьте DNS-запись A на статический IP и разверните задачу заново с --domain annotate.example.edu.
Завершение исследования
Разметка лежит на диске экземпляра, который переживает перезапуски и перезагрузки, но не destroy. Сначала выгрузите её на свою машину, проверьте и только потом удалите экземпляр:
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yamlpull записывает всё, что собрало развёртывание, в новый каталог potato-pull-<name>-<timestamp> и копирует базы данных собственной командой резервного копирования SQLite. destroy не запустится для развёртывания, которое ни разу не выгружали. Команда освобождает статический IP, потому что Lightsail берёт плату за IP, не привязанный к экземпляру. С --volume-gb команда destroy --keep-data сохраняет отдельный диск.
Устранение неполадок
«AWS rejected the credentials» означает, что сессия SSO истекла или AWS_PROFILE указывает на несуществующий профиль. Выполните aws sso login и разверните заново.
«Lightsail does not sell bundle …» появляется, когда AWS переименовывает пакеты после изменения цен. В ошибке перечислены пакеты, которые продаются сейчас, и --size принимает любой из них.
HTTPS не работает первые несколько минут, потому что сертификат запрашивается, когда экземпляр становится доступен. potato deploy status сообщает об ошибке сертификата отдельно от неработающего сервера.
Что почитать дальше
- Запуск Potato локально или в облаке: другие облачные цели и флаги резервного копирования
- Развёртывание сервера разметки: как выбрать хостинг
- Справка по развёртыванию на AWS с точным списком действий IAM для каждой цели AWS