Install CODE & DRAW locally to run with the Community
The steps in this tutorial will allow you to:
- code and run your own bricks locally
- run Service Apps as back-ends
Prerequisites for installing Olympe
You will need to have the following installed:
- Node.js 14.13.1 or greater
- Note: while npm is also needed, it comes directly whenever Node.js is installed
- Your favorite IDE e.g. Visual Studio Code
Install Olympe
- Linux & macOS
- Windows
Open a Terminal window and run the following command in a folder of your choice. It will create an "olympe" folder there and install Olympe inside it
/bin/bash -c "$(curl -fsSl https://support-dev.olympe.ch/olympe_install.sh)"
Then navigate to the newly created "olympe" folder
cd olympe
Finally launch DRAW
npm run serve
To stop the server, press Ctrl-C.
Closing the terminal window, will also stop the process.
Restart it with the "npm run serve" command.
Open a PowerShell window Make sure that you have the rights to execute scripts by executing the following command
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
Execute the script
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://support-dev.olympe.ch/olympe_install.ps1'))
Navigate to the newly created "olympe" folder
cd olympe
Launch DRAW
npm run serve
If asked, allow access to Node.js
To stop the server
- Hit CTRL+C 2 times
- Confirm you want to end the process by pressing the Y key
- If it does not work, open a new PowerShell window and run the following command
taskkill /F /IM node.exe
Start composing with DRAW
- In your browser, open this url http://localhost:8888/
- Authenticate with your Community credentials
- See that your Community projects are present
That's all!
You can now take a look at our guides and tutorials, and start building a first app and add a first coded function.
Also, take a look at the README.md
file for more details on the local commands.
Launch a Service App as a back-end service
If you have a Service App and want to run it as an actual node.js back-end process, these are the steps to follow:
Short version
Get the tag (the Olympe unique identifier) of the Service App from the context menu of the Service App:
Then use it as a parameter in the following command:
npm run serve:node -- bus.host=rabbitmq.eks-prod.olympe.io bus.allowGuest=true sc.app=<tag of the Service App>
For example:
npm run serve:node -- bus.host=rabbitmq.eks-prod.olympe.io bus.allowGuest=true sc.app=0186e4bc463ef958ff46
Using configuration files
The sc.app
, bus.host
and bus.allowGuest
parameters above can also be specified within a configuration file. You can have multiple configuration files to define the configuration of multiple back-end services using different API keys, etc. When doing so, it is advisable to have two different configuration files: one for DRAW and front-end apps, and another one for each back-end app. The steps are as follows:
Make a copy of the res/oConfig.json
, for example in res/oConfigNode.json
cp res/oConfig.json res/oConfigNode.json
Edit res/oConfigNode.json
and set the sc.app
, bus.host
and bus.allowGuest
parameters:
...
"bus": {
"host": "rabbitmq.eks-prod.olympe.io",
"path": "/mqtt",
"ssl": true,
"port": 443,
"vhost": "community",
"allowGuest": true
},
"sc.app": "0186e4bc463ef958ff46"
}
Olympe uses webpack to build apps. The provided configuration (webpack.config.js
) builds packages into a dist
folder. The targets are already preconfigured, but we need to tell it which configuration file to use in which context:
- When building DRAW using
npm run serve
, copyoConfig.json
intodist/draw/oConfig.json
- When building the node app using
npm run serve:node
, copyoConfigNode.json
intodist/node/oConfig.json
To do so, edit the webpack.config.js
as follows:
Comment or remove the copy of the res
directory:
//{from: 'res'}, // Comment or remove this line
Then add the following rules at the end of the webpack.config.js
:
const drawConfig = {
name: 'draw',
plugins: [
new Copy({
patterns: [
{from: 'res/oConfig.json', to:'oConfig.json'},
]
})
]
};
const nodeConfig = {
name: 'node',
plugins: [
new Copy({
patterns: [
{from: 'res/oConfigNode.json', to:'oConfig.json'},
]
})
]
};
// Add drawConfig and nodeConfig to the module.exports
module.exports = [merge(common, server, draw, drawConfig), merge(common, server, web), merge(common, node, nodeConfig)];
How it works
A full Olympe runtime has multiple components. The installation above only sets up the minimal set of components locally. When building and running coded bricks or a Service App locally, the Olympe runtime is are started locally, and it then connects to an event bus and to the Olympe Orchestrator running in the Olympe Cloud. The runtime then retrieves the app composition from the Community environment and then starts running the application.
You can therefore collaborate freely with other Community DRAW users. Updates done in DRAW will be distributed in realtime to all users just like if you were logged into the DRAW Community cloud instance, and vice versa. Your coded bricks though, will remain local.
This is a summary of what runs where:
When running locally | When connected to https://community.olympe.io | |
---|---|---|
Web server | Runs locally (webpack server) | Runs in the cloud |
DRAW | Runs locally | Runs in the cloud |
CODE | Runs locally | New code cannot be deployed on the community. Get in touch to get a dedicated instance. |
Olympe Orchestrator | Runs in the cloud | Runs in the cloud |
RabbitMQ | Runs in the cloud | Runs in the cloud |
Database | Runs in the cloud | Runs in the cloud |
Updating your setup after a new Olympe release
When a new release occurs, your package.json
file also needs to be updated.
The goal is to have you local setup properly in synch with the online Community.
For instance, when release 2.3.2 was out, the following changes had to be made to update the olympe dependencies in the setup's package.json file:
@olympeio/draw: 2.3.2,
@olympeio/runtime-web: 9.3.1,
@olympeio/runtime-node: 9.3.1,
@olympeio/dev-tools:2.3.0
@olympeio/core: 2.3.7
Fetch these package.json dependencies info automatically
- Simply generate a new project from scratch inside a different folder using this same tutorial mentioned above
- Copy-paste the
package.json
to get the lastest versions of the dependencies. - Then, don't forget to
run npm install
in your project.