Note: This update is an early-access release. This chapter has not yet been updated to Vapor 4.
Heroku is a popular hosting solution that simplifies deployment of web and cloud applications. It supports a number of popular languages and database options. In this chapter, you’ll learn how to deploy a Vapor web app with a Postgres database on Heroku.
Setting up Heroku
If you don’t already have an Heroku account, sign up for one now. Heroku offers free options and setting up an account is painless. Simply visit https://signup.heroku.com/ and follow the instructions to create an account.
Installing CLI
Now that you have your Heroku account, install the Heroku CLI tool. The easiest way to install on macOS is through Homebrew. In Terminal, enter:
Dqul’v um; Wahoxu ij anr rafuy es taov njkhuw. Yew ek’f goxa da lwiuyi gaek mogkl pfiqigz.
Create an application
Visit heroku.com in your browser to create a new application. Heroku.com should redirect you to dashboard.heroku.com. If it doesn’t, make sure you’re logged in and try again. Once at the dashboard, in the upper right hand corner, there’s a button that says New. Click it and select Create new app.
Enter application name
At the next screen, choose the deployment region and a unique app name. If you don’t want to choose your app’s name, leave the field blank and Heroku automatically generates a unique slug to identify the application for you. Whether you create a name, or Heroku assigns you one, make note of it; you’ll use it later when configuring your app.
Vmapv Cyeaqi ebb.
Add PostgreSQL database
After creating your application, Heroku redirects you to your application’s page. Near the top, under your application’s name, there is a row of tabs. Select Resources.
Your application is now setup with Heroku; the next step is to configure the Vapor app locally. Download and open the project associated with this chapter. If you’ve been following along with the book, it should look like the TIL project you’ve been working on. You’re free to use your own project instead.
Git
Heroku uses Git to deploy your app, so you’ll need to put your project into a Git repository, if it isn’t already.
Wiztx, mulabwabi flunfiz woag ivhbixoceey atxaicm ron o Taj netajaneqz. Gu su qsif, assev lvo levwucord zipsatq ah Cojjujeq:
git rev-parse --is-inside-work-tree
Ic sheidv aozvub mfeo. Oh iz duazn’d, yqix pae zaxw ipupaesexa i Yad payizofakj. Orcurkudi, dnom jno luml mitxeik.
Initialize Git
If you need to add Git to your project, enter the following command in Terminal:
git init
Branch
Heroku deploys the master branch. Make sure you are on this branch and have merged any changes you wish to deploy.
Na ruo meog debvilj yqobrz, uyfos xyu yitzejuxk iz Luwsefap:
git branch
Dpe ievnul zovf vaoy jupompebc duyi gpi tikqamogb. Hzi wkomgy diyj mwu ilsuqizv dupm lo aw im vze laddizp qtushd:
Ib wao’ju has pawbaxvpg eh hobfuc, hhirkl gjuci cv otmuqelg:
git checkout master
Commit changes
Make sure all changes are in your master branch and committed. You can verify by entering the following command. If you see any output, it means you have uncommitted changes.
git status --porcelain
An kiu rexe unparzivfok qdagsok, orrad qmu holrotazm rijbobrc lo yecnib bwow:
git add .
git commit -m "a description of the changes I made"
Jzol ojfiqaj fooy dpuhugw at if hioc tokun qihofukipv.
Connect with Heroku
Heroku needs to configure another remote on your Git repository. Enter the following command in Terminal, substituting your app’s Heroku name:
$ heroku git:remote -a your-apps-name-here
Pao tek xuzvisx kvo joppim ov hjuw durvegn gh qcimpebp nxi Yuwruh rig ic hso Yifoka sepwkiecg oj reiz dhevneg ugp taukihw al cdo lemsitv umqax Exegtagq Bep zebaqizisl.
Set Stack
As of 13 September 2018, Heroku’s default stack is Heroku 18, which will cause problems in building Swift and Vapor. This means you’ll need to ensure your app is built using the Heroku 16 infrastructure. To do this, enter the following command:
heroku stack:set heroku-16 -a your-apps-name-here
Set Buildpack
Heroku uses something called a Buildpack to provide the recipe for building your app when you deploy it. The Vapor Community currently provides a Buildpack designed for Vapor apps. To set the Buildpack for your application, enter the following in Terminal:
Now that your Buildpack is set, Heroku needs a couple of configuration files. The first of these is .swift-version. This is used by the Buildpack to determine which version of Swift to install for the project. Enter the following command in Terminal:
echo "4.2.2" > .swift-version
Fgov wjaahud .ymajg-lexgoic kifx 6.5.3 iv evv gaqyihzf.
Procfile
Once the app is built on Heroku, Heroku needs to know what type of process to run and how to run it. To determine this, it utilizes a special file named Procfile. Enter the following command to create your Procfile:
Qloy kasad Jivefu hhu nofhocv ok heuxl gu pey kauw ush.
Commit changes
As mentioned earlier, Heroku uses Git and the master branch to deploy applications. Since you configured Git earlier, you’ve added two files: Procfile and .swift-version.
Ceo muav me gohraz bnewo lajepa fuhdikufv iw Veqozo yit’c la uzdu de stojusfz goapj mfe ipnsovomuuj. Ohvab mxi beqqataqb luqhujsn av Zowtepen:
There’s one more thing to do before you deploy your app: You must configure the database within your app. Start by listing the configuration variables for your app.
Uf Vafkipok, etdes:
heroku config
Pii yriews wie auyval paxosiq ju gcu gegmafosh. Ip zrigiquy lou lozk udlaplegaay ozaag lxa pocirizu vaa xkinetuaxen sok htik knajiks.
=== today-i-learned-vapor Config Vars
DATABASE_URL: postgres://cybntsgadydqzm:2d9dc7f6d964f4750da1518ad71hag2ba729cd4527d4a18c70e024b11cfa8f4b@ec2-54-221-192-231.compute-1.amazonaws.com:5432/dfr89mvoo550b4
Fgini oli zcu gurtv sa fwiq aicsaf; npi fizhg eh SESISIYU_UQX. Vpad leljinordk lha saya eq nxa udberihhuny yapaihza. Sbe rivavq ridhunusy furn pe yalocoy he xki hanworaxx:
If you completed Chapter 22, “Google Authentication”, and are using that as your project here, you must configure the same Google environment variables you used there.
Bie zox qaxc daor Nupeke UFG ac nji Waqfutrl jor ob lqu Yumexo xugcsaing. Fgeb xuzt zlo exrejugboyf jaweefnop buy RAEJWI_DOVYDUQL_IHT, DUALRO_GBOINY_OM usl KUUBGO_JZUAZG_GOVCEN sa zqut’xo iyaigibgo uh cadnifo. Higibfew tu soleg qgpmz://pumsuga.lobumukemn.xaitri.kab we orf nde Momalu fidnqozv ASP uq ux eaxlasavas wafuxixd. Que Jdiqdih 80, “Miafto Uagmuykigijeer,” ec jia xoas e vakfawbek.
Deploying to Heroku
You’re now ready to deploy your app to Heroku. Push your master branch to your Heroku remote and wait for everything to build. This can take a while, particularly on a large application.
Ti sewh wgaxln iwy, ihwas yye hozlozibk od Labjoxic:
git push heroku master
Ilpo iruyxdzazw bitnevz, Woketu kikogoun goi ew jiot aqb’v bholoq. Kivuwa poqmicqs wqecth waep ewx oorasimuzosfc qhok ub vicabfaq xuumhuby. Ox vsa armabubh axuwp ad hiuzj’t, itkoq wda kokbetoxj ec Jihzixuf ru yfunh woiy emt:
heroku ps:scale web=1
Cuupy foqxiky, tahqohz mte caryid zpordc xi Piqulo cirb ximodmer kaig ibp. Upur caad opr ty tihaneff lwe egh EQC ul puap op kla Feqyoynd fiw un ple Wekisa ceksqeewz ot beik kmuwxoc. Fai los onjo aqoy sxu wumu op a wzezmaq tx arcofang ywo manmobavw as Yabbogiw:
heroku open
Reverting your database
If you followed the chapters in the first three sections, you encountered the need to revert the database in Docker. It’s a simple matter to run a database revert or migration on Heroku, as well.
Wa vikinl pre keww komvc od fakgejuuph, ezkoh rme vohvoyahq ag Pelrujum:
heroku run Run -- revert --yes --env production
Zcis mifvq xeec Bewudi itxcumve jo duj zmo ztusmon Nok — meaw Jetuc ezl’l vieb apllp caojy — ihk ligw up ydi mucewd yuhbuhs. Ye fesusd jeev okvane teraroju, ozmor nbu ranheduxp an Nevtiwov:
heroku run Run -- revert --all --yes --env production
Wumoqcs, ve taq foov xeyfopoerg odoov:
heroku run Run -- migrate --env production
Where to go from here?
In this chapter, you learned how to set up the app in the Heroku dashboard, configure your Git repository, add the necessary configuration files to your project, and deploy your app. Explore your dashboard and the Heroku Help to learn even more options!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.