GitHub Readme.md
Sample car sales and service application. Pulsar is a fictitious electric car manufacturer company. This application helps Pulsar to sell cars on-site, and through their customer-facing website. Event-driven patterns allow to build loosely coupled integrations using multiple programming languages and systems. Regardless of the industry you work in, this app demonstrates how to build rich and immersive user experiences with the connected compute and runtime capabilities of the Salesforce Platform.
You will need the following to deploy this sample app.
git
(download here)node
>= v12 and < v19 (download here)sfdx
CLI >= 7.11.0 (download here)heroku
CLI (download here)Disclaimer: You'll need to have a paid Heroku Account and be subscribed to the Heroku Eco and Heroku Postgres Mini plans, for more information visit the Heroku Pricing page.
This project consists of multiple "apps" consolidated into one monorepo so that they are easier to deploy. The simplest way to configure and deploy all the apps is to run the following commands. The scripts/ecarsDeploy.js
file is what automates all the deploys and integrates them with various configuration values.
The ecarsDeploy.js
script will create and deploy code to a Salesforce scratch org and then deploy four Heroku apps along with some Postgres databases.
$ sf org login web -d -a DevHub # Authenticate using your Dev Hub org credentials
$ heroku login # Login with your Heroku account (or create one)
$ git clone https://github.com/trailheadapps/ecars.git
$ cd ecars/scripts
$ npm install
$ cd ..
$ node scripts/ecarsDeploy.js
If instead you want to perform all the deploy and configuration steps manually, see the Manual Deploy section below.
When the deploy is finished follow the last few instructions provided by the script, and then go to Demo Highlights below.
If you'd like to perform all the steps in the deploy script manually, you can follow the instructions below.
The below steps do everything the Automated Deploy does. It's recommended that you use the Automated Deploy to make the deploy easier for you and reduce the chance of error. If at any time, you are having a problem with the below steps and would like to start over, follow the steps in the Teardown section below.
Authenticate with the sfdx
and heroku
CLI commands and get the eCars code onto your computer.
$ sf org login web -d -a DevHub # Authenticate using your Dev Hub org credentials
$ heroku login # Login with your Heroku account (or create one)
$ git clone https://github.com/trailheadapps/ecars.git
Create a scratch org
$ sf org create scratch -d -f config/project-scratch-def.json -a ecars -v DevHub
Generate a password for the scratch org user. Save both the username and password for later.
$ sf org generate password -o ecars
Generate a Security Token for the scratch org user. Run the following command and then click Reset Security Token. You will receive the security token in an email. This will be used later for the SF_TOKEN
config var in the Heroku apps.
$ sf org open -o ecars -p /lightning/settings/personal/ResetApiToken/home
(Optional) Activate the Pulsar_Bold
theme on the Themes and Branding
page by running the following command:
$ sf org open -o ecars -p /lightning/setup/ThemingAndBranding/home
Deploy and configure the Heroku MQTT application
Deploy and configure the Heroku Streaming application
Click the Heroku Deploy Button to deploy the streaming data application to Heroku. Provide a unique application name to be used as [STREAMING APP NAME] below. Leave all other inputs as the defaults.
Create a Heroku Postgres database and attach it to the application
$ heroku addons:create heroku-postgresql:mini --app=[STREAMING APP NAME] --wait
Provision the Heroku Postgres database
$ heroku run 'cd packages/ecars-db && npx sequelize db:migrate' --app=[STREAMING APP NAME]
Scale the application's dynos
$ heroku ps:scale web=1:eco sensor-simulator=1:eco sensor-persistence=0:eco --app=[STREAMING APP NAME]
Link with the Heroku MQTT app
$ heroku config:set MQTT_BROKER_URL=[MQTT APP URL] --app=[STREAMING APP NAME]
Note: Make sure this URL has the Secure WebSockets Protocol wss://
instead of https://
. eg: wss://example.herokuapp.com
Deploy and configure the Heroku Progressive Web Application (PWA)
Click the Heroku Deploy Button to deploy the progressive web application to Heroku. Provide a unique application name to be used as [PWA NAME] below. Leave all other inputs as the defaults.
Create a Heroku Postgres database and attach it to the application
$ heroku addons:create heroku-postgresql:mini --app=[PWA APP NAME] --wait
Initialize database tables
$ heroku run node scripts/createPostgresTable.js --app=[PWA APP NAME]
Generate VAPID public and private keys for web push notifications. Save them for the next command and also the next Heroku application deploy.
$ npx web-push generate-vapid-keys
Set config vars
$ heroku config:set VAPID_PUBLIC_KEY=[VAPID PUBLIC KEY] VAPID_PRIVATE_KEY=[VAPID PRIVATE KEY] SF_USERNAME=[ORG USERNAME] SF_PASSWORD=[ORG USER'S PASSWORD] SF_LOGIN_URL=[ORG LOGIN URL] SF_TOKEN=[ORG USER'S TOKEN] --app=[PWA NAME]
Deploy and configure the Heroku Microservices Application
Click the Heroku Deploy Button to deploy the microservices application to Heroku. Provide a unique application name to be used as [MICROSERVICES APP NAME] below. Leave all other inputs as the defaults.
Attach [STREAMING APP NAME]'s Heroku Postgres database to the Microservices application.
$ heroku addons:attach [STREAMING APP NAME]::DATABASE --as=DATABASE --app=[MICROSERVICES APP NAME]
Set config vars
$ heroku config:set VAPID_PUBLIC_KEY=[VAPID PUBLIC KEY] VAPID_PRIVATE_KEY=[VAPID PRIVATE KEY] SF_USERNAME=[ORG USERNAME] SF_PASSWORD=[ORG USER'S PASSWORD] SF_TOKEN=[ORG USER'S TOKEN] SF_LOGIN_URL=[ORG LOGIN URL] --app=[MICROSERVICES APP NAME]
Deploy source to the Saleforce scratch org
Update the Salesforce source in the following files, replacing example.herokuapp.com
with the domain of the Heroku apps you created in the previous steps.
force-app/main/default/cspTrustedSites/WebSockets.cspTrustedSite-meta.xml
force-app/main/default/lwc/liveData/liveData.js
force-app/main/default/namedCredentials/Heroku_App.namedCredential-meta.xml
From the ecars root directory, push the source to the scratch org
$ sf project deploy start
Assign permissionsets to the scratch org user
$ sf org assign permset -n ecars
$ sf org assign permset -n Walkthroughs
Load sample data into the scratch org
$ sf data tree import -p ./data/data-plan.json
Now go to Demo Highlights to learn about what you just deployed and why it's interesting!
To delete everything created by the automated script or manual deploy instructions, run the following commands.
$ sf org delete scratch -p -o ecars
$ heroku apps:destroy --app=[MQTT APP NAME]
$ heroku apps:destroy --app=[STREAMING APP NAME]
$ heroku apps:destroy --app=[PWA NAME]
$ heroku apps:destroy --app=[MICROSERVICES APP NAME]
Looking at real-time car diagnostic data is useful, but often it's useful to be able to look at historical data. You can persist this data to a Postgres database by enabling the sensor-persistence
process type.
Note that we have not enabled this by default because it will quickly consume the maximum 10,000 rows allowed in the mini
Heroku Postgres plan. If you enable the sensor-persistence
process type for more than a few hours, you should use a larger Heroku Postgres plan.
Please see CONTRIBUTION.md