Deploy Saleor e-commerce at Heroku

Posted by Toguko on Wed 13 September 2017

Keep going with my idea to use Saleor with my wife's e-commerce, I need to deploy the app at Heroku. The Saleor Docs is not the best one, but it give me a path to reach it. After many tries I ended with the steps of how to deploy Saleor at Heroku.

First, I removed the git remote from Saleor:

$git remote -v
output
...
origin  https://github.com/mirumee/saleor.git (fetch)
origin  https://github.com/mirumee/saleor.git (push)
...
$git remote remove origin

Now, the git remote server doesn't exist anymore. So let's create a Heroku app and add the git from this app for future deploys.

If you don't have the Heroku CLI, check how to install to your platform here Heroku CLI.

$heroku apps:create MYAPP_NAME
Creating ⬢ MYAPP_NAME... done
https://MYAPP_NAME.herokuapp.com/ | https://git.heroku.com/MYAPP_NAME.git

If you check with git remote -v, you'll see that the above command created the app and add the git to your current directory.

Now follow the commands bellow to deploy to Heroku:

Setting the Buildpacks at heroku to deploy the App, first the nodejs buildpack

$heroku buildpacks:add --index 1 heroku/nodejs
Buildpack added. Next release on feltro-store will use heroku/nodejs.
Run git push heroku master to create a new release using this buildpack.

And now the python buildpack

$heroku buildpacks:add --index 2 https://github.com/heroku/heroku-buildpack-python.git
Buildpack added. Next release on MYAPP_NAME will use https://github.com/heroku/heroku-buildpack-python.git.
Run git push heroku master to create a new release using this buildpack.

Check with heroku buildpacks to see the buildpacks that will be uses by Heroku in the deploys.

Install Postgres Database

$heroku addons:create heroku-postgresql
Creating heroku-postgresql on ⬢ MYAPP_NAME... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-adjacent-10925 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation

Install Redis - A in-memory data structure store, cache and message broker...

$heroku addons:create heroku-redis
reating heroku-redis on ⬢ MYAPP_NAME... free
Your add-on should be available in a few minutes.
! WARNING: Data stored in hobby plans on Heroku Redis are not persisted.
redis-tapered-60545 is being created in the background. The app will restart when complete...

Install Bonsai Elasticsearch for fast search in your site:

$heroku addons:create bonsai:sandbox-10
Creating bonsai:sandbox-10 on ⬢ MYAPP_NAME... free
Thanks for adding Bonsai! Please log in to the Bonsai dashboard to finalize your account setup.
Use `heroku addons:open bonsai` to view the dashboard.
Created bonsai-tetrahedral-23283 as BONSAI_URL
Use heroku addons:docs bonsai to view documentation

Install SendGrid - Email Delivery. Simplified.

$heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ MYAPP_NAME... free
Created sendgrid-octagonal-79001 as SENDGRID_PASSWORD, SENDGRID_USERNAME
Use heroku addons:docs sendgrid to view documentation

Set the SECRET_KEY at Heroku

$heroku config:set SECRET_KEY='COPY_YOUR SECRET FROM SETTINGS.PY'
Setting SECRET_KEY and restarting ⬢ MYAPP_NAME... done, v7

Set the ALLOWED_HOSTS at Heroku (is not a good idea to set a * at this, but we will correct this later.)

$heroku config:set ALLOWED_HOSTS='*'
Setting ALLOWED_HOSTS and restarting ⬢ MYAPP_NAME... done, v9
ALLOWED_HOSTS: *

Setting Debug = True at this time, because if something goes wrong we'll see the log. Don't forget to set this to False later when we finish the deployment.

$heroku config:set DEBUG=True
Setting DEBUG and restarting ⬢ MYAPP_NAME... done, v8

Setting some variable to deploy without errors:

$heroku config:set DEFAULT_FROM_EMAIL='noreply@example.com'
$heroku config:set DJANGO_SETTINGS_MODULE='saleor.settings'
$heroku config:set NODE_ENV='test'
$heroku config:set NPM_CONFIG_PRODUCTION='false'

Now hold your breath and let's try the Deploy

$git push heroku master

If everything was ok, let's prepare the database for the first time.

$heroku run python manage.py makemigrations
$heroku run python manage.py migrate
$heroku run python manage.py createsuperuser

In the next posts I'll explain how to customize your e-commerce. Things like Logo, Language, Categories...