From 8aaac9229df6f367cc3ebd0a78f342336cba8121 Mon Sep 17 00:00:00 2001 From: "Vipul Gupta (@vipulgupta2048)" Date: Tue, 8 Nov 2022 03:37:47 +0530 Subject: [PATCH 1/3] minor: Add openbalena documentation Signed-off-by: Vipul Gupta (@vipulgupta2048) --- README.md | 2 +- docs/docs/getting-started.md | 371 ++++++++++++++++++ docs/static/img/favicon.ico | Bin 0 -> 114703 bytes docs/static/img/logo.png | Bin 0 -> 5037 bytes .../img/openabalena-logo.svg} | 0 5 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 docs/docs/getting-started.md create mode 100644 docs/static/img/favicon.ico create mode 100644 docs/static/img/logo.png rename docs/{assets/openbalena-logo.svg => static/img/openabalena-logo.svg} (100%) diff --git a/README.md b/README.md index b399ef1..e811aab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -openBalena +openBalena --- diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md new file mode 100644 index 0000000..19ef59e --- /dev/null +++ b/docs/docs/getting-started.md @@ -0,0 +1,371 @@ +--- +description: Getting started for openbalena +slug: / +--- + +# Openbalena Getting Started Guide + +This guide will walk you through the steps of deploying an openBalena server, +that together with the balena CLI, will enable you to create and manage a fleet +of devices running on your own infrastructure, on premises or in the cloud. The +openBalena servers must be reachable by the devices, which is easiest to achieve +with cloud providers like AWS, Google Cloud, Digital Ocean and others. + +This guide assumes a setup with two separate machines: + +- The openBalena _server_, running Linux. These instructions were tested with an + Ubuntu 18.04 x64 server. +- The _local machine_, running Linux, Windows or macOS where the balena CLI runs + (as a client to the openBalena server). The local machine should also have a + working installation of [Docker](https://docs.docker.com/get-docker/) so that + application images can be built and deployed to your devices, although it is + also possible to use balenaEngine on a balenaOS device instead of Docker. + +### Preparing a server for openBalena + +Login to the server via SSH and run the following commands. + +1. First, install or update essential software: + + ```bash + apt-get update && apt-get install -y build-essential git docker.io libssl-dev nodejs npm + ``` + +2. Install docker-compose: + + ```bash + curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + ``` + + Test your docker-compose installation with `$ docker-compose --version`. + +3. Create a new user, assign admin permissions and add to `docker` group: + + ```bash + adduser balena + usermod -aG sudo balena + usermod -aG docker balena + ``` + +#### Install openBalena on the server + +1. On the server still, login as the new user and change into the home directory: + + ```bash + su balena + cd ~ + ``` + +2. Clone the openBalena repository and change into the new directory: + + ```bash + git clone https://github.com/balena-io/open-balena.git + cd open-balena/ + ``` + +3. Run the `quickstart` script as below. This will create a new `config` + directory and generate appropriate SSL certificates and configuration for the + server. The provided email and password will be used to automatically create + the user account for interacting with the server and will be needed later on + for logging in via the balena CLI. Replace the domain name for the `-d` + argument appropriately. + + ```bash + ./scripts/quickstart -U -P -d mydomain.com + ``` + + For more available options, see the script's help: + + ```bash + ./scripts/quickstart -h + ``` + +4. At this point, the openBalena server can be started with: + + ```bash + systemctl start docker + ./scripts/compose up -d + ``` + + The `-d` argument spawns the containers as background services. + +5. Tail the logs of the containers with: + + ```bash + ./scripts/compose exec journalctl -fn100 + ``` + + Replace `` with the name of any one of the services defined + in `compose/services.yml`; eg. `api` or `registry`. + +6. The server can be stopped with: + + ```bash + ./scripts/compose stop + ``` + +When updating openBalena to a new version, the steps are: + +```bash +./scripts/compose down +git pull +./scripts/compose build +./scripts/compose up -d +``` + +#### Domain Configuration + +The following CNAME records must be configured to point to the openBalena server: + +```text +api.mydomain.com +registry.mydomain.com +vpn.mydomain.com +s3.mydomain.com +tunnel.mydomain.com +``` + +Check with your internet domain name registrar for instructions on how to +configure CNAME records. + +#### Test the openBalena server + +To confirm that everything is running correctly, try a simple request from the +local machine to the server: + +```bash +curl -k https://api.mydomain.com/ping +OK +``` + +Congratulations! The openBalena server is up and running. The next step is to +setup the local machine to use the server, provision a device and deploy a +small project. + +### Install self-signed certificates on the local machine + +The installation of the openBalena server produces a few self-signed certificates +that must be installed on the local machine, so that it can securely communicate +with the server. + +The root certificate is found at `config/certs/root/ca.crt` on the server. Copy +it to some folder on the local machine and keep a note the path -- it will be +used later during the CLI installation. Follow the steps below for the specific +platform of the local machine. + +#### Linux: + +```bash +sudo cp ca.crt /usr/local/share/ca-certificates/ca.crt +sudo update-ca-certificates +sudo systemctl restart docker +``` + +#### macOS: + +```bash +sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt +osascript -e 'quit app "Docker"' && open -a Docker +``` + +#### Windows: + +```bash +certutil -addstore -f "ROOT" ca.crt +``` + +The Docker daemon on the local machine must then be restarted for Docker to +pick up the new certificate. + +### Install the balena CLI on the local machine + +Follow the [balena CLI installation +instructions](https://github.com/balena-io/balena-cli/blob/master/INSTALL.md) +to install the balena CLI on the local machine. + +By default, the CLI targets the balenaCloud servers at `balena-cloud.com`, and +needs to be configured to target the openBalena server instead. Add the following +line to the CLI's configuration file, replacing `"mydomain.com"` with the domain +name of the openBalena server: + +```yaml +balenaUrl: 'mydomain.com' +``` + +The CLI configuration file can be found at: + +- On Linux or macOS: `~/.balenarc.yml` +- On Windows: `%UserProfile%\_balenarc.yml` + +If the file does not already exist, just create it. + +Wrapping up the CLI installation, set an environment variable that points to the +root certificate copied previously on the local machine. This step is to ensure +the CLI can securely interact with the openBalena server. + +| Shell | Command | +| ------------------ | ---------------------------------------------- | +| bash | `export NODE_EXTRA_CA_CERTS='/path/to/ca.crt'` | +| Windows cmd.exe | `set NODE_EXTRA_CA_CERTS=C:\path\to\ca.crt` | +| Windows PowerShell | `$Env:NODE_EXTRA_CA_CERTS="C:\path\to\ca.crt"` | + +### Deploy an application + +The commands below should be run on a terminal on the local machine (where the +balena CLI is installed). Ensure that the `NODE_EXTRA_CA_CERTS` environment +variable is set, as discussed above. + +#### Login to openBalena + +Run `balena login`, select `Credentials` and use the email and password +specified during quickstart to login to the openBalena server. At any time, the +`balena whoami` command may be used to check which server the CLI is logged in to. + +#### Create an application + +Create a new application with `balena app create myApp`. Select the application's +default device type with the interactive prompt. The examples in this guide assume +a Raspberry Pi 3. + +An application contains devices that share the same architecture (such as ARM +or Intel i386), and also contains code releases that are deployed to the devices. +When a device is provisioned, it is added to an application, but can be migrated +to another application at any time. There is no limit to the number of applications +that can be created or to the number of devices that can be provisioned. + +At any time, the server can be queried for all the applications it knows about +with the following command: + +```bash +balena apps +ID APP NAME DEVICE TYPE ONLINE DEVICES DEVICE COUNT +1 myApp raspberrypi3 +``` + +#### Provision a new device + +Once we have an application, it’s time to start provisioning devices. To do this, +first download a balenaOS image from [balena.io](https://balena.io/os/#download). +Pick the development image that is appropriate for your device. + +Unzip the downloaded image and use the balena CLI to configure it: + +```bash +balena os configure ~/Downloads/balena-cloud-raspberrypi3-2.58.3+rev1-dev-v11.14.0.img --app myApp +``` + +Flash the configured image to an SD card using [Etcher](https://balena.io/etcher). +Insert the SD card into the device and power it on. The device will register with +the openBalena server and after about two minutes will be inspectable: + +```bash +balena devices +ID UUID DEVICE NAME DEVICE TYPE APPLICATION NAME STATUS IS ONLINE SUPERVISOR VERSION OS VERSION +4 59d7700 winter-tree raspberrypi3 myApp Idle true 11.14.0 balenaOS 2.58.3+rev1 + +balena device 59d7700 +== WINTER TREE +ID: 4 +DEVICE TYPE: raspberrypi3 +STATUS: online +IS ONLINE: true +IP ADDRESS: 192.168.43.247 +APPLICATION NAME: myApp +UUID: 59d7700755ec5de06783eda8034c9d3d +SUPERVISOR VERSION: 11.14.0 +OS VERSION: balenaOS 2.58.3+rev1 +``` + +It's time to deploy code to the device. + +#### Deploy a project + +Application release images are built on the local machine using the balena CLI. +Ensure the root certificate has been correctly installed on the local machine, +as discussed above. + +Let's create a trivial project that logs "Idling...". On an empty directory, +create a new file named `Dockerfile.template` with the following contents: + +```dockerfile +FROM balenalib/%%BALENA_MACHINE_NAME%%-alpine + +CMD [ "balena-idle" ] +``` + +Then build and deploy the project with: + +```bash +balena deploy myApp --logs +``` + +The project will have been successfully built when a friendly unicorn appears in +the terminal: + +```bash +[Info] Compose file detected +... +[Info] Creating release... +[Info] Pushing images to registry... +[Info] Saving release... +[Success] Deploy succeeded! +[Success] Release: f62a74c220b92949ec78761c74366046 + + \ + \ + \\ + \\ + >\/7 + _.-(6' \ + (=___._/` \ + ) \ | + / / | + / > / + j < _\ + _.-' : ``. + \ r=._\ `. + <`\\_ \ .`-. + \ r-7 `-. ._ ' . `\ + \`, `-.`7 7) ) + \/ \| \' / `-._ + || .' + \\ ( + >\ > + ,.-' >.' + <.'_.'' + <' +``` + +This command packages up the local directory, creates a new Docker image from +it and pushes it to the openBalena server. In turn, the server will deploy it to +all provisioned devices and within a couple of minutes, they will all run the +new release. Logs can be viewed with: + +```bash +balena logs 59d7700 --tail +[Logs] [10/28/2020, 11:40:16 AM] Supervisor starting +[Logs] [10/28/2020, 11:40:50 AM] Creating network 'default' +[Logs] [10/28/2020, 11:42:38 AM] Creating volume 'resin-data' +[Logs] [10/28/2020, 11:42:40 AM] Downloading image … +… +[Logs] [10/28/2020, 11:44:00 AM] [main] Idling... +``` + +Enjoy Balenafying All the Things! + +## Next steps + +- Try out [local mode](https://www.balena.io/docs/learn/develop/local-mode), + which allows you to build and sync code to your device locally for rapid + development. +- Develop an application with [multiple containers](https://www.balena.io/docs/learn/develop/multicontainer) + to provide a more modular approach to application management. +- Manage your device fleet with the use of [configuration](https://www.balena.io/docs/learn/manage/configuration/) + and [environment](https://www.balena.io/docs/learn/manage/serv-vars/) variables. +- Explore our [example projects](https://balena.io/blog/tags/etcher-featured/) + to give you an idea of more things you can do with balena. +- If you find yourself stuck or confused, help is just [a click away](https://www.balena.io/support). +- Pin selected devices to selected code releases using + [sample scripts](https://github.com/balena-io-examples/staged-releases). +- To change the superuser password after setting the credentials, follow this [forum post](https://forums.balena.io/t/upate-superuser-password/4738/6). diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5597b280006dcb24893221ecb36f39a385dbf09f GIT binary patch literal 114703 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/logo.png b/docs/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdb57505b3166e7ba96f69a90cb16daa1b66a95 GIT binary patch literal 5037 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 Date: Mon, 14 Nov 2022 15:07:23 +0530 Subject: [PATCH 2/3] Build docusaurus docs website Signed-off-by: Vipul Gupta (@vipulgupta2048) --- .github/workflows/flowzone.yml | 6 ++++-- README.md | 2 +- docs/{docs => }/getting-started.md | 5 ----- docs/{static/img => images}/openabalena-logo.svg | 0 docs/static/img/favicon.ico => favicon.ico | Bin docs/static/img/logo.png => logo.png | Bin 6 files changed, 5 insertions(+), 8 deletions(-) rename docs/{docs => }/getting-started.md (99%) rename docs/{static/img => images}/openabalena-logo.svg (100%) rename docs/static/img/favicon.ico => favicon.ico (100%) rename docs/static/img/logo.png => logo.png (100%) diff --git a/.github/workflows/flowzone.yml b/.github/workflows/flowzone.yml index 9128ae5..30d87ee 100644 --- a/.github/workflows/flowzone.yml +++ b/.github/workflows/flowzone.yml @@ -10,5 +10,7 @@ on: jobs: flowzone: name: Flowzone - uses: product-os/flowzone/.github/workflows/flowzone.yml@master - secrets: inherit \ No newline at end of file + uses: product-os/flowzone/.github/workflows/flowzone.yml@add-website-type + secrets: inherit + with: + cloudflare_website: "open-balena" \ No newline at end of file diff --git a/README.md b/README.md index e811aab..d8abba5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -openBalena +openBalena --- diff --git a/docs/docs/getting-started.md b/docs/getting-started.md similarity index 99% rename from docs/docs/getting-started.md rename to docs/getting-started.md index 19ef59e..098d0fd 100644 --- a/docs/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,8 +1,3 @@ ---- -description: Getting started for openbalena -slug: / ---- - # Openbalena Getting Started Guide This guide will walk you through the steps of deploying an openBalena server, diff --git a/docs/static/img/openabalena-logo.svg b/docs/images/openabalena-logo.svg similarity index 100% rename from docs/static/img/openabalena-logo.svg rename to docs/images/openabalena-logo.svg diff --git a/docs/static/img/favicon.ico b/favicon.ico similarity index 100% rename from docs/static/img/favicon.ico rename to favicon.ico diff --git a/docs/static/img/logo.png b/logo.png similarity index 100% rename from docs/static/img/logo.png rename to logo.png From 2696db2bde3d86bb72546c6f46c15fd955204955 Mon Sep 17 00:00:00 2001 From: "Vipul Gupta (@vipulgupta2048)" Date: Tue, 6 Dec 2022 19:38:14 +0530 Subject: [PATCH 3/3] Add cloudflare website Signed-off-by: Vipul Gupta (@vipulgupta2048) --- .github/workflows/flowzone.yml | 2 +- README.md | 9 +++------ .../images/{openabalena-logo.svg => openbalena-logo.svg} | 0 3 files changed, 4 insertions(+), 7 deletions(-) rename docs/images/{openabalena-logo.svg => openbalena-logo.svg} (100%) diff --git a/.github/workflows/flowzone.yml b/.github/workflows/flowzone.yml index 30d87ee..1f34f77 100644 --- a/.github/workflows/flowzone.yml +++ b/.github/workflows/flowzone.yml @@ -10,7 +10,7 @@ on: jobs: flowzone: name: Flowzone - uses: product-os/flowzone/.github/workflows/flowzone.yml@add-website-type + uses: product-os/flowzone/.github/workflows/flowzone.yml@master secrets: inherit with: cloudflare_website: "open-balena" \ No newline at end of file diff --git a/README.md b/README.md index d8abba5..3adffdd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -openBalena - ---- +![](./docs/images/openbalena-logo.svg) OpenBalena is a platform to deploy and manage connected devices. Devices run [balenaOS][balena-os-website], a host operating system designed for running @@ -17,7 +15,7 @@ To learn more about openBalena, visit [balena.io/open][open-balena-website]. ## Features -- **Simple provisioning**: Adding devices to your fleet is a breeze +- **Simple provisioning**: Adding deviceu to your fleet is a breeze - **Easy updates**: Remotely update the software on your devices with a single command - **Container-based**: Benefit from the power of virtualization, optimized for the edge - **Scalable**: Deploy and manage one device, or one million @@ -124,7 +122,7 @@ Additionally, refer back to the [roadmap](#roadmap) above for planned but not ye ## License -OpenBalena is licensed under the terms of AGPL v3. See [LICENSE](LICENSE) for details. +OpenBalena is licensed under the terms of AGPL v3. See [LICENSE](https://github.com/balena-io/open-balena/blob/master/LICENSE) for details. [balena-cli]: https://github.com/balena-io/balena-cli @@ -163,4 +161,3 @@ Technically “yes”, but in a supported or balena-recommended fashion, “no Yes! Here are a few: - [open-balena-admin / open-balena-ui](https://github.com/dcaputo-harmoni/open-balena-admin) by user [dcaputo-harmoni](https://github.com/dcaputo-harmoni) who first posted about [here](https://forums.balena.io/t/open-balena-admin-an-admin-interface-for-openbalena/355324) in our Forums :) - [open-balena-dashboard](https://github.com/Razikus/open-balena-dashboard) by user [Razikus](https://github.com/Razikus) - diff --git a/docs/images/openabalena-logo.svg b/docs/images/openbalena-logo.svg similarity index 100% rename from docs/images/openabalena-logo.svg rename to docs/images/openbalena-logo.svg