Как да хоствате леки приложения безплатно

С любезното съдействие на Луис Лерена

Когато търсите услуги за уеб хостинг, има много безплатни опции. Но няма много места, където можете да хоствате уеб приложения с пълен стек, които включват API, CGI или AJAX резервни заявки - особено ако искате да използвате нещо различно от PHP.

Тази статия е просто, но смислено ръководство за „разходка, преди да можете да стартирате“ за това как да започнете с хостинг на вашите скриптове на облачни сървъри.

Кога да използвате облачна платформа за приложения

Платформните приложения за облак работят добре в сценарии, при които се нуждаете от малко код, за да стартирате на сървър. Много от тези платформи предлагат серия от базирани на Linux контейнери за приложения (които изглеждат като виртуални машини), където разгръщате кода, който сте разработили на вашия локален компютър, с набор от ключови думи от командния ред.

Heroku е една такава услуга, която бихте могли да използвате, за да хоствате кода си (на различни езици) сравнително лесно. Той предлага модел на freemium, където ви позволяват да използвате около 500 часа изчислители безплатно (пълната им цена е тук).

От май 2017 г. езиците за програмиране, които можете да хоствате под Heroku

След като напишете кода си на местния десктоп, можете да изпълнявате команди, които разгръщат кода върху работно пространство в Heroku. След това кодът се изпълнява в зависимост от спусъка. Тригерите могат да бъдат планирана работа, уеб сървър, който се задейства чрез заявка на уеб страница или нещо, което работи постоянно и обработва данни - което може да струва доста скъпо.

Това, което наистина е хубаво е, че не е нужно да се притеснявате за операционната система (памет, съхранение, процесор, защитни кръпки), тъй като това се управлява за вас, но в същото време това означава, че имате ограничена гъвкавост, тъй като не можете разпределяйте ресурсите директно.

Няколко конкретни примера, при които Heroku може да работи добре за вас:

  • Хостинг на собствен уебсайт, където искате да напишете собствен уеб сървър
  • Периодично се бракуват данни от уебсайт и след това се съхраняват в база данни за анализ
  • Предлагане на API сървър за конкретна задача. Неща, като предлагане на метеорологични данни, съхраняване на данни от сензора в Интернет на нещата или повикване от уеб услуга за модел на машинно обучение
  • Услуга за база данни (въпреки че услуга като Firebase е възможно по-подходяща)

Heroku Архитектура

Heroku предоставя лека виртуална машина (VM), за да разгърнете кода си. Обърнете внимание, че при безплатната опция можете да разгърнете до 5 приложения, които се считат за 5 леки VM. За вашето действително приложение, имате предоставен отделен поддомен URL адрес под Heroku. Така че имената на вашите проекти трябва да бъдат уникални.

Тези работни пространства имат собствено пространство за компоненти като: кодови и ресурсни файлове (не динамични файлове с данни), база данни (Postgres) и лог файлове.

На вашия местен десктоп Heroku използва името на вашата директория, за да определи вашия проект, а също и Heroku да разбере вашия контекст. Така че можете да имате множество проекти в различни директории и когато стартирате командите Heroku - просто се уверете, че го правите в правилната папка.

Единственото ключово нещо, което трябва да сте наясно (което открих по трудния начин с часове на отстраняване на грешки - искам да обърна повече внимание на документацията) е, че всичко се управлява от паметта. Няма устойчиво съхранение. Ще го кажа отново - не можете да съхранявате никакви файлове на файловия сървър! За постоянство Heroku предлага SQL база данни след прогрес, където можете да добавяте записи, както се изисква.

Прост пример - откриване на промяна в уебсайта

Ето стъпка по стъпка ръководство за получаване на работещ пример за обикновена услуга, която ще ви изпрати имейл, ако уебсайтът се е променил - основно клон на www.changedetection.com. Ще има няколко основни компонента на това:

  1. База данни, която ще съхранява: (а) имейл адреса за уведомяване за променен уебсайт; (b) уебсайтът, който да проследявате; в) последното „копие“ на уебсайта
  2. Парче код, който ще провери даден уебсайт от базата данни в №1 (скрипт Python)
  3. Планировчик на задачи, който ще стартира програмата в # 2 (еквивалент на cron task)
  4. Уеб потребителски интерфейс, където можете да добавяте / изтривате уебсайтове, за да следите в базата данни, спомената в №1
  5. Механизъм за изпращане на имейли

Разбирането на тези компоненти ще ви въоръжи с уменията да правите вече много неща. Научих всички тези неща чрез множество източници, така че това действа като консолидиран пост.

Предположения

Следното ръководство прави следните предположения:

  • Имате акаунт в GitHub - ако нямате, моля, създайте го тук. Трябва също да прочетете това просто ръководство.
  • Вече имате профил в Heroku - ако не го създадете тук.
  • Работите с машина на Windows - ако не, добре е, инструкциите са доста сходни в други среди
  • Вече имате инсталиран Python - ако нямате, моля, отидете тук, за да го инсталирате
  • Вече можете да програмирате в Python - ако не, тогава бих препоръчал първо да научите някои от основните положения. Някои ръководства са тук.
  • Знаеш SQL - ако нямаш, моля, отиди тук.

Преглед на стъпките

Намирам, че преминаването през подхода „разходка, преди да можете да бягате“ помага при процеса на обучение. Той служи и като документация за вас как да решите всяко парче от по-големия процес. По този начин, ако нещо се счупи в бъдещото ви начинание, имате по-голям шанс да разберете къде се обърка.

Стъпка 1: Разработете уеб потребителския интерфейс - първо изградете Hello World

Стъпка 2: Устойчивост - създайте база данни

Стъпка 3: Проверете уебсайтовете за промени

Стъпка 4: Изпратете известие по имейл за промените

Стъпка 5: Списък на изхода на уеб страницата

Стъпка 6: Разгръщане

Стъпка 1: Разработете уеб потребителския интерфейс - първо изградете Hello World

Първо, нека да разгърнем проста програма на Heroku, за да започнем нещата. Тази програма ще бъде предшественик на уеб потребителския интерфейс (елемент № 4) в списъка с компоненти по-горе. За да обслужваме страница, можем просто да имаме HTML страница, но тогава ще трябва да имаме уеб сървър, който да сървър на този файл. С други думи, когато въвеждате URL адреса на уебсайта, програма трябва да интерпретира заявката, след което да предостави съдържанието на HTML файла. Можете да създадете свой собствен мини уеб сървър с библиотеката Flask Python, което ще направим ние.

  • Създайте папка, наречена webchecker и отидете в тази директория (това име на директория не трябва да е същото като името на приложението Heroku)
  • Инсталирайте библиотеката на колбата. Въведете командата: npm Колба
  • Създайте следната програма Python и я назовете showchecks.py:

Преди да внедрите в Heroku, проверете дали работи на вашия локален компютър. Можете да го тествате със следните стъпки:

  • Стартирайте програмата: python webchecker.com
  • Отворете браузъра си на локалния си компютър и отворете страницата: http: // localhost: 5000 / hello
Изпълнението на скрипта ще върне статична страница с изход „здравей свят“

След това нека го разгърнем в Heroku. Преди да можете да внедрите, трябва да има още няколко файла, които трябва да бъдат включени, за да помогнете на Heroku да знае повече за вашето приложение.

Първо, изискванията.txt

Второ, файлът, който да каже на Heroku какво да стартира, когато се направи заявка за уеб:

И накрая, използваната версия на Python (по подразбиране е 2.7, но искаме да уточним най-новата версия на Python):

Следователно, трябва да имате четири файла:

  1. showchecker.py, който е кодът
  2. изисквания.txt за списъка на нестандартните зависимости от библиотеката. Всеки път, когато имате нови библиотеки, които не са част от стандартната библиотека на Python - т.е. трябва да ги инсталирате с инструмент като „pip“ - добавете ги тук. Можете да намерите версията на инсталирана библиотека като Flask, като изпълните командата: pip покажете Flask в командния ред
  3. Профил, който е действителният скрипт на Python, който трябва да се стартира при извикване на уебсайта - не забравяйте да го актуализирате, ако промените файла Python
  4. runtime.txt, която е действителната версия на python за използване

Можете да разгърнете със следните стъпки от командния ред:

  1. heroku създаване webchecker01 - buildpack heroku / python
  2. git add *. * *
  3. git статус
  4. git commit -m „всички файлове“
  5. git push heroku master
След като стартирате „git push heroku master“, ще се покажат дневниците за внедряване, включително URL адреса, където е внедрен.

За командата № 1 (създаване на heroku ...) частта „webechecker01” е уникалното име, което ще трябва да посочите за името на приложението.

За команда №3 (състояние на git) това ще ви каже какви файлове са готови за внедряване. Уверете се, че всички файлове са там, ако не ги добавите с помощта на git add .

Сега можете да проверите вашия уебсайт: <име на приложение> .herokuapp.com / здравей

Световната програма здравей, работеща в мрежата

Нека също така да се уверим, че можем да видим регистрационните файлове, тъй като това е чудесен начин да видите какво се случва с вашия сървър на приложения. На вашия компютър и в директорията на уеб проверките, изпълнете командата: heroku logs

„Heroku logs“ е решаваща команда, която трябва да стартирате, за да видите какво се случва във вашия сървър на приложения

Ще видите последните стъпки за изпълнение. Ако нещата не работят както се очаква, това е първата ви спирка, за да разберете повече подробности.

Можете също да отидете на таблото на Heroku, за да видите потреблението си:

https://dashboard.heroku.com

Стъпка 2: Устойчивост - създайте база данни

За да направите по-полезни програми, ще трябва да имате своеобразно хранилище от данни. Това е мястото, където услугата база данни Postgres влиза в игра. Първо трябва да разгърнете услугата база данни Heroku, след това да създадете таблиците си и накрая да можете да се свържете с базата данни от вашия код локално (за тестване).

За да разгърнете услуга на база данни, първо я създайте, като използвате следната команда:

heroku addons: създаване heroku-postgresql: hobby-dev

След това, отворете базата данни от командния ред и създайте вашите таблици. Базата данни е създадена на облачната услуга Heroku, а не локално. Можете обаче да получите достъп до него чрез командния ред. За да влезете в базата данни чрез конзолата, изпълнете командата heroku pg: psql. Не забравяйте, че трябва да го направите в папката си за уеб проверки, така че Heroku да знае, че това е базата данни за уеб сайта за проверка.

За да видите списъка с таблици, въведете командата \ d

За да създадете таблица, трябва да използвате нормални SQL оператори. За нашата програма за уеб проверки нека създадем таблица със следните колони:

  • ИД - автоматично генериран идентификационен номер за всеки запис (това ще бъде първичен ключ). Това става с помощта на типа „сериен“
  • уебсайт - уебсайтът за наблюдение
  • emailaddress - имейл адресът за изпращане на известието, че е настъпила промяна
  • lasthashcode - няма да съхраняваме копие на цялата уеб страница, вместо това ще генерираме хеш на базата на HTML на страницата и ще сравняваме това всеки път. Това е по-ефективно за съхранение, но няма да ни каже какво всъщност се е променило
  • lastchangedate - датата, която мрежата е променила последния път. Следователно ние ще получим базата данни по подразбиране това с текущата дата

За да създадете тази таблица, въведете следната команда в конзолата на базата данни Heroku Postgres:

СЪЗДАВАНЕ НА ТАБЛИЦА webcheckerdb (сериен идентификатор, уебсайт varchar (250), имейл адрес varchar (250), последен код варчар (32), последно променена времева марка DEFAULT current_date);

(Уверете се, че сте включили запетайката в края!)

Създаване на базата данни, след това с помощта на \ d превключване, за да видите списъка с таблици и след това „\ d webecheckerdb“, за да видите колоните

На следващо място, нека вмъкнем един запис в базата данни, за да сме сигурни, че имаме какво да работим, преди да стартираме и работим нашия уеб интерфейс (можете да използвате собствения си имейл адрес, за да работи в бъдеще):

ВЪВЕДЕТЕ стойности на webcheckerdb (DEFAULT, 'news.google.com', 'email@me.com', '', DEFAULT);

(Уверете се, че сте включили запетайката в края!)

След това можете да направите оператор за избор (включете запетайката в края!), За да видите данните

Можете да прекратите с \ q.

Стъпка 3: Проверете уебсайтовете за промени

Първо, нека вземем част от кода, за да проверим дали може да бъде извлечен твърдо кодиран сайт (следвайки концепцията за ходене преди бягане).

Следователно, първата стъпка е да видим дали можем да извлечем уеб страница, да я хешираме и след това да я сравним с твърдо кодиран хеш. Създайте нов файл на Python, наречен checkwebsite.py. Код тук:

Ако се изпълни това, ще се получи следното:

Ако имате грешки с липсващи библиотеки, можете да ги добавите чрез: pip install от командния ред.

След това, нека се свържем с базата данни със следния код:

Когато се опитате да стартирате този код, вероятно ще получите грешка във формата KeyError: „DATABASE_URL“. Това е така, защото вашият Python код се опитва да намери уеб адреса на базата данни Postgres, хоствана в Heroku. Това автоматично се актуализира до променливата на околната среда DATABASE_URL в сървъра Heroku. Въпреки това, на вашия локален компютър ще трябва да направите това ръчно:

  1. heroku config
  2. set DATABASE_URL = <низът от базата данни, посочен от "heroku config">
Ако получите грешка DATABASE_URL, след това задайте променлива среда

Стъпка 4: Изпратете известие по имейл за промените

Последната стъпка е да изпратите имейл. За целта ще трябва да инсталирате Addon, който има възможност да изпраща имейли - можете да ги намерите чрез пазара на Heroku: https://elements.heroku.com/addons

Тук има аддон, наречен SendGrid: https://elements.heroku.com/addons/sendgrid

Можете да добавите SendGrid към приложението си в командния ред, като напишете:

heroku addons: създаване sendgrid: стартер

Когато отидете на таблото за управление, можете да видите новия Addon в секцията Resources:

SendGrid добавката, която може да позволи изпращане на имейли, ще бъде в долната част

Преди да го използвате, ще трябва да създадете ключ за API. Кликнете два пъти върху компонента SendGrid по-горе и влезте в Settings-> API Key-> Create Key (син бутон горе вдясно).

Кликнете върху бутона Създаване на ключ горе вдясно

След като създадете ключа, копирайте го и се върнете към командния ред и въведете:

конфигурация heroku: задайте SENDGRID_API_KEY = <ключ от API отгоре>

Това ще го регистрирате само на сървъра, трябва да го добавите локално към вашия работен плот с:

set SENDGRID_API_KEY = <Ключ на API отгоре отново>

След като сте готови, можете да тествате кода си в нов Python скрипт, наречен sendmail.py. Инсталирайте библиотеката чрез pp install sendgrid:

За да потвърдите, че имейлът е изпратен и доставен, можете да се върнете на таблото за изпращане на SendGrid и да проверите екрана за статистически преглед:

Когато проверявате имейла си, не забравяйте да проверите спама си.

След като работи, има само два реда код, които трябва да добавите към основния си скрипт checkwebsite.py. То е:

import sendmail #import подпрограма за изпращане на имейл, която сте написали по-горе
...
# извикайте подпрограмата след намиране на хеш-кода е променен
sendmail.sendemail (webrecord ['emailaddress'], 'Уебсайт е променен', webrecord ['уебсайт'] + 'променен')

Пълният код е тук:

Стъпка 5: Списък на изхода на уеб страницата и планиране на работата

Следващата стъпка е да изброите изхода на уеб страницата.

Това включва запитване към базата данни, а след това преместване и показване на данните на вашия екран. Следователно, той взема кода „Hello World“ по-горе и прави модификацията. Създадох и различен път за това, така че за да тествате това, ще трябва да отидете на URL: http: // localhost: 5000 / list

И ето изхода:

Стъпка 6: Разгръщане

Последната стъпка е да разгърнете всичко в Heroku и след това да насрочите работата така, че да проверява имейла.

Трябва да имате следните файлове:

  1. Procfile - файлът, който сочи showchecker.py
  2. needs.txt - файлът, който съдържа зависимости от библиотеката
  3. runtime.txt - версията на python
  4. showchecker.py - кода python, който показва изхода на базата данни в мрежата чрез <вашето име> .herokuapp.com / list
  5. checkwebsite.py - кодът на python, който проверява за промени в уебсайтовете

За изискванията.txt, ще трябва да направите изменения, за да добавите най-новите библиотеки:

Внедрете всички тези в Heroku:

  1. git add *. * *
  2. git commit -m „внедряване“
  3. git push heroku master

Тествайте всеки компонент:

  1. Отворете <името на приложението ви> .herokuapp.com / hello
  2. Отворете <името на приложението ви> .herokuapp.com / list

Ако има някакви грешки, тогава стартирайте журнали heroku в командния ред, за да видите какво се случва.

След това стартирайте checkwebsite.py директно на Heroku, за да се уверите, че няма проблеми. За да направите това, можете да въведете:

heroku тичам python checkwebsite.py

Това е чудесен начин да гарантирате, че кодът ви се изпълнява също така и в облака heroku, както и на местно ниво

И накрая, сега можете да насрочите работата си. Отново трябва да включите Addon, за да направите това.

heroku addons: създайте планировчик: стандарт

И вие трябва да можете да видите планировчика на страницата си с ресурси:

Включен е и добавката за планиране, която можете да щракнете двукратно

Можете просто да използвате командния ред, за да стартирате програмата, в нашия случай това е: python checkwebsite.py (това е същото като това, което тествахме по-горе с командата heroku run).

Можете да планирате това с няколко опции.

резюме

И това е ... първият път е малко сложен, но се надяваме горните стъпки да ви помогнат да разберете какво се случва под капака. Има много повече ресурси за Heroku, както и богата информация за Stack Overflow. Тези ресурси трябва да имат много по-голям смисъл, след като преминете по-горе.

Късмет!

Благодаря за четенето! Ако ви харесва това, което четете, натиснете бутона below по-долу, за да могат другите да намерят това (можете също да ме намерите в Twitter)