Автор оригинала: Matt Thommes.
Со старым Mac, который у меня валяется дома, и бесплатными веб-сервисами, я настроил простое приложение, которое извлекает некоторые данные из внешней службы ( YNAB ), чтобы выполнить некоторые ежедневные расчеты бюджета, которые я долгое время вычислял вручную. Вывод моего приложения затем отправляется обратно на мой телефон в течение нескольких секунд, чтобы я мог запустить его из любого места. Я хотел поделиться подходом, который я использую который мне ничего не стоил .
Это (очевидно) не тот подход, который следует использовать для крупномасштабных приложений или чего-либо, кроме домашних проектов. Я просто хотел подчеркнуть, насколько простым может быть использование существующих бесплатных инструментов. Существует множество недорогих, готовых к производству и масштабируемых вариантов (например, AWS Lambda ), если вы предпочитаете начинать с этого подхода.
Мое приложение написано на Python и подается через Flask в локальную конечную точку (http://localhost:5000) на что указывает нгрок . Затем у меня есть IFTTT webhook , нажав на URL-адрес Ngrok после нажатия виджета кнопки IFTTT с моего телефона. Приложение в конечном итоге транслирует вывод на мою учетную запись Slack, поэтому я получаю push-уведомление на свой телефон, содержащее вывод приложения в течение нескольких секунд после нажатия кнопки:
Опять же, все бесплатные инструменты (Flask, ngrok, IFTTT и Slack), и я использую девятилетний Mac, который я использую только для легкого просмотра веб-страниц, потоковой передачи и базовых программных проектов. Таким образом, я смог использовать существующее оборудование.
Краткая схема всего потока:
Виджет кнопки IFTTT
Вот кнопка, которую я нажимаю на главном экране своего iPhone, чтобы запустить приложение:
В iOS виджет кнопки IFTTT очень прост в настройке. Я только что вставил URL-адрес ngrok, настроенный на моем локальном компьютере для запуска приложения:
Нгрок
На моем Mac я включаю ngrok, запустив:
./ngrok http 5000
Это предоставляет мне URL-адрес, который мне нужно использовать с IFTTT. Просто имейте в виду, что если вы не находитесь на платном плане ngrok, каждый раз, когда вы перезагружаете компьютер (или просто выходите и снова запускаете ngrok), у вас будет новый URL-адрес для вставки в IFTTT. Это может быть раздражающей вещью через некоторое время, но ключ здесь бесплатный .
Колба
Запустить Flask так же просто, как указать локальную конечную точку, которую вы хотите запустить в приложении:
@app.route('/ynab-balances') def run(): runYnabAccountBalanceCheck() return "Done"
Затем в терминале вы можете запустить приложение, чтобы оно ожидало запросов:
$ python3 my_ynab_balances.py * Serving Flask app "my_ynab_balances" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Слабина
Мой скрипт Python использует клиент Slack API для трансляции всего, что я хочу, в свою учетную запись Slack:
def send_to_slack(self, output): self.slackClient.chat_postMessage(channel='@Matt', text=output)
Я настроил его для отправки выходных данных приложения на мое собственное имя пользователя Slack, которое заканчивается как личное сообщение для меня.
Развертывание Новых Изменений Кода
Когда я делаю обновления для приложения, я нажимаю на Github, а затем вручную запускаю git pull
на своем Mac, чтобы получить последние изменения. Это требует, чтобы я либо физически находился перед моим Mac, либо использовал приложение VNC (например, Screens ) для удаленного управления моим Mac. В любом случае это утомительно. Мой следующий план состоит в том, чтобы создать простое задание cron, которое периодически извлекает последний код.