├── .gitignore ├── LICENSE ├── README.md ├── antora.yml └── documentation ├── development ├── deployer.md ├── nuv-projects.png ├── overview.md └── static-publishing.md ├── installation.md └── installation ├── how-to-install-on-aws-ec2.md ├── how-to-install-on-aws-ec2 ├── install_aws_ec2.png ├── install_aws_ec2_getip.png └── install_aws_ec2_shell.png ├── how-to-install-on-aws-eks.md ├── how-to-install-on-docker-desktop.md ├── how-to-install-on-docker-desktop └── install_docker_desktop.png ├── how-to-install-on-hetzner-cloud.md ├── how-to-install-on-hetzner-cloud └── install_hetzner_cloud.png ├── how-to-install-on-kubernetes.md ├── how-to-install-on-minikube.md ├── how-to-install-on-ubuntu.md ├── set-on-windows.md ├── set-on-windows ├── system.cmd └── user.cmd └── troubleshooting.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .git-hooks 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nuvolaris Documentation 2 | 3 | Nuvolaris is a distribution of [Apache OpenWhisk](https://openwhisk.apache.org) that aims to be portable to every Kubernetes and to include a set of integrated services to make an awesome developer experiences. 4 | 5 | It includes `nuv`, an [all-in-one CLI](https://github.com/nuvolaris/nuvolaris/releases) that manages both installation on Kubernetes and development. 6 | 7 | ## Learn More 8 | 9 | - Learn [how to install Nuvolaris](documentation/installation.md). 10 | - Learn [how to develop with Nuvolaris](https://openwhisk.apache.org/documentation.html) using OpenWhisk documentation. 11 | - Read [a book on Apache OpenWhisk](https://www.amazon.com/Learning-Apache-OpenWhisk-Developing-Serverless-ebook/dp/B07TYSXWNN) written by one of the authors of OpenWhisk and Nuvolaris. 12 | 13 | **NOTE**: the Apache OpenWhisk documentation used the `wsk` tool, that is embedded as a subcommand in the `nuv` tool. If you use Nuvolaris, whenever you see `wsk` you should use `nuv wsk` instead. 14 | 15 | In alternative you can add to your `.bashrc` the following: 16 | 17 | ``` 18 | alias wsk='nuv wsk' 19 | ``` 20 | 21 | So when you type `wsk` it will use `nuv wsk`. 22 | 23 | ## How to get help 24 | 25 | If you have problems you can: 26 | 27 | - Discuss with us in the [Nuvolaris Forum](https://nuvolaris.discourse.group) 28 | - Check our [YouTube Channel](https://www.youtube.com/channel/UCPt5hk7qcOkESjB7kii1byw) for more training videos. 29 | - Open an issue in the CLI [Issue Tracker](https://github.com/nuvolaris/nuvolaris-cli/issues) 30 | -------------------------------------------------------------------------------- /antora.yml: -------------------------------------------------------------------------------- 1 | name: nuvolaris 2 | title: Nuvolaris 3 | version: 3.0.0 4 | #start_page: index.adoc 5 | #prerelease: beta 6 | nav: 7 | - modules/ROOT/nav.adoc 8 | - modules/installation/nav.adoc 9 | - modules/tutorial/nav.adoc 10 | - modules/development/nav.adoc 11 | 12 | -------------------------------------------------------------------------------- /documentation/development/deployer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Deployer 3 | --- 4 | 5 | # The Deployer 6 | 7 | You can use `nuv` to scan a folder and build a manifest file to deploy the project contained within, using `nuv -scan`. 8 | It will scan the current folder (or the given path) looking for the folders named `packages` and `web`. 9 | 10 | ## The packages folder 11 | 12 | If the `packages` folder is found, `nuv` will proceed to build a manifest file where each sub-folder of `packages` is translated to a package creation command (1 package for each subfolder) and each files in this level is considered 13 | to create a Single File Action under the `default` package which is pre-created in every Nuvolaris deployment. 14 | 15 | In every sub-folder, if it finds files it will generate a command to create [single file actions](#single-file-actions) 16 | in the package corresponding to the sub-folder's name. If it finds sub-folders, it will generate commands to create [multi file actions](#multi-file-actions). There can be the special `web` sub-folder which will be used to deploy a static frontend under the relative package name, so in this case it is not a MFA. 17 | 18 | ### Single File Actions 19 | 20 | `nuv` generates an `action create` command for each single file actions, with the flag `--kind nodejs:default`, `--kind python:default`, `--kind go:default` and `--kind java:default` depending on the relative runtime. 21 | 22 | The possible runtimes are described by `runtime.json` that can be downloaded from the configured api host. 23 | 24 | If the extension is in format: `..`, the command will have `--kind :`. 25 | 26 | ### Multi File Actions 27 | 28 | `nuv` implements some heuristics to decide the correct type of the file to build. 29 | 30 | Currently: 31 | 32 | - if there is a `package.json` or any `js` field in the folder then it is `.js` and it builds with `npm install ; npm build` 33 | - if there is a `requirements.txt` or any `.py` file then it is python and it builds creating a virtual env as described in the python runtime documentation 34 | - if there is `pom.xml` then it builds using `mvn install` 35 | - if there is a `go.mod` then it builds using `go build` 36 | 37 | The command that `nuv` will generate consists of i) zip the folder ii) create the action with the zip archive and the correct type of the runtime. 38 | -------------------------------------------------------------------------------- /documentation/development/nuv-projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/development/nuv-projects.png -------------------------------------------------------------------------------- /documentation/development/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Overview 3 | --- 4 | 5 | # A Nuvolaris Project 6 | 7 | A project represents a logical unit of functionality whose boundaries are up to you. Your app can contain one or more projects. The folder structure of a project determines how the deployer finds and labels packages and actions, how it deploys static web content, and what it ignores. 8 | 9 | You can detect and load entire projects into Nuvolaris with a single command using the `nuv` CLI tool. 10 | 11 | # Project Detection 12 | 13 | A project has a root folder, within which there can be 2 folders with special names: 14 | 15 | - A `packages` folder: containes sub-folders which are treated as packages and are assumed to contain actions in the form of either files or folders, which we refer to as Single File Actions (SFA) and Multi File Actions (MFA). 16 | - A `web` folder: contains folders and files with static web content. 17 | 18 | Anything else is ignored. This lets you store things in the root folder that are not meant to be deployed on Nuvolaris (such as build folders and project documentation). 19 | 20 | ### Single File Actions 21 | 22 | A single file actions is simply a file with an extension (the supported ones: `.js` `.py` `.go` `.java`) 23 | 24 | ### Multi File Actions 25 | 26 | A multi file action is a folder containing a `main` file and dependencies. The folder is bundled into a zip file and deployed as an action. 27 | 28 | 29 | ![img](nuv-projects.png) 30 | -------------------------------------------------------------------------------- /documentation/development/static-publishing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Projects 3 | --- 4 | 5 | # Static frontend 6 | 7 | The `web` folder in the root of a project is used to deploy static frontends. A static front-end is a collection of static asset under a given folder that will be published in a web server under a path. 8 | 9 | The path that will serve the a static asset is determined by: 10 | - Hostname 11 | - Location of the asset 12 | 13 | ## Hostname 14 | 15 | In general, for each namespace there will be a `https://.` website where to publish the resources. For the local deployment there will be a website `http://127.0.0.1:8080` where the resources are published, with the namespace and the domain ignored. 16 | 17 | ## Path detection 18 | 19 | The path where the assets are published depends on the path in the `web` hierarchy. 20 | 21 | The sub-folder `web` is published as "/". 22 | 23 | Any subfolder `web` under `packages//web` is published under `//`. 24 | 25 | Any subfolder `web` under `packages/default/\web` is published as `/`. 26 | 27 | Any subfolder `web` under `packages///web` is published as `//` 28 | 29 | What is published (files collected) and how it is built is defined by the next paragraph. 30 | 31 | ## Building and Collecting 32 | 33 | In every folder `web` it will check if there is a `nuvolaris.json` 34 | 35 | If there is not a `nuvolaris.json` and not a `package.json` it will assume this base `nuvolaris.json`: 36 | 37 | ``` 38 | { 39 | "collect": ".", 40 | "install": "echo nothing to install", 41 | "build": "echo nothing to build" 42 | } 43 | ``` 44 | 45 | If instead there is `packages.json`, it will assume this base `nuvolaris.json`: 46 | 47 | ``` 48 | { 49 | "collect": "public", 50 | "install": "npm install", 51 | "build": "npm run build" 52 | } 53 | ``` 54 | 55 | The it will read the `nuvolaris.json` replacing the keys in it with the default ones. 56 | 57 | The generated taskfile will execute at deployment step: 58 | 59 | - the command defined by `install` only if there is not a `node_modules` 60 | - the command defined by `build` always 61 | - then it will collect for publishing (creating a crd instance) the files in the folder defined by `collect` 62 | 63 | It is recommended that `nuv scan` does not execute directy the command but instead it delegates to another command like `nuv build` and in turn the creation of `crd` to another `nuv crd` subcommand, after changing to the corresponding sudfolder. All those commands should work by default in current folder. 64 | 65 | 66 | # The Complete Mapping 67 | 68 | To summarize, the mapping for packages is: 69 | 70 | | Folder Name | Nuvolaris Package | Type | 71 | | --- | --- | --- | 72 | | Root directory | | | 73 | | packages | | | 74 | | packages/<package_name> | <package_name> | Nuvolaris Package | 75 | | <file_name> | default | Single File Action | 76 | | packages/<package_name>/<file_name> | <package_name> | Single File Action | 77 | | packages/<package_name>/<subfolder_name> | <package_name> | Multi File Action | 78 | 79 | And the mapping for web folders is: 80 | 81 | | Folder Name | Endpoint | 82 | | --- | --- | 83 | | Root directory | | 84 | | web | `/` | 85 | | packages/<package_name>/web | `//` | 86 | | packages/<default>/<action_name>/web | `packages/default/\web` | 87 | | packages/<package_name>/<action_name>web | `//` | -------------------------------------------------------------------------------- /documentation/installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | --- 4 | 5 | # Installation 6 | 7 | [Nuvolaris](https://www.nuvolaris.io) is an easy to use and portable serverless environment. 8 | 9 | You can install it in the following supported environments: 10 | 11 | - [Install on Docker Desktop](installation/how-to-install-on-docker-desktop.md). 12 | - [Install on a single instance on AWS EC2 Instance](installation/how-to-install-on-aws-ec2.md). 13 | - [Install on a single instance on Hetzner Cloud](installation/how-to-install-on-hetzner-cloud.md). 14 | - [Install on an AWS EKS Cluster](installation/how-to-install-on-aws-eks.md). 15 | - [Install on a generic Ubuntu Instance](installation/how-to-install-on-ubuntu.md), tested on AWS and Hetzner 16 | - [Install on a Kubernetes Cluster](installation/how-to-install-on-kubernetes.md), tested on EKS, AKS and GKE 17 | 18 | It may work on other Docker/Kubernetes environment but it has not been tested elsewhere yet, so you mileage may vary. 19 | 20 | More environments are on the roadmap. 21 | 22 | If something goes wrong, here is [what to do to report problems](installation/troubleshooting.md). 23 | 24 | 25 | ## TL;DR 26 | 27 | If you are in a hurry, in a nutshell the instructions to install Nuvolaris in a generic Kubernetes environment that supports a load balancer and block storage (EKS, AKS, GKE) are: 28 | 29 | - Get the name of the `` of the Kubernetes cluster you want to use with `kubectl config get-contexts` 30 | - [Download](https://github.com/nuvolaris/nuvolaris/releases) the Nuvolaris installer and unpack it 31 | - Install it with `./nuv setup --context= --apihost=auto` 32 | - Use `nuv wsk property get` to show the current values of apihost and auth key 33 | - Use your server from elsewhere configuring access with `nuv wskprops --apihost= --auth=`using the values show in the previous step. 34 | - Read about [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html) to learn development, remembering to use `nuv wsk` when you see `wsk` 35 | 36 | # Contributions 37 | 38 | Some contributed documentation: 39 | 40 | - [Set a NUV variable on Window](installation/set-on-windows.md) 41 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-aws-ec2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on AWS EC2 3 | --- 4 | 5 | # Install on an AWS EC2 Instance 6 | 7 | You can install Nuvolaris on a single EC2 Instance. 8 | 9 | You need at least 4GB, 30GB disk space and 2 VCPU. 10 | 11 | As a prerequisite, you need to get access to the AWS Console by registering to Amazon Web Services. 12 | 13 | Once you got access to the console, use the following instructions to lauch a suitable virtual machine: 14 | 15 | ## Launch the EC2 Virtual Machine 16 | 17 | ![](how-to-install-on-aws-ec2/install_aws_ec2.png) 18 | 19 | 1. Click on the Services icon. 20 | 2. Type `EC2` to find the EC2 service and click on the EC2 link. 21 | 3. Find the `Launch Instance` pull down, open it and click on `Launch Instances`. Then fill the form that shows up as follows. 22 | 4. Specify the name of the instance. 23 | 5. Select Ubuntu as the Image type to launch. 24 | 6. Select Ubuntu Server, at least 22.x or 20.x. We recommend you pick AMD64 as an architecture, for now. 25 | 7. Select an instance with at least 4GB of memory and 2VCPU. Suggested choice is `t2.medium`. Larger VM types are ok, smaller are not. 26 | 8. Specify the key pair you want to use. This step is required to be able to access the instance. If you do not have one, click on `Create new key pair` and follow instructions to create a new key pair and download the key file. 27 | 9. Here you need to allow traffic for SSH, HTTP and HTTPS. 28 | 10. Here you need at least 30Gb of disk space. 29 | 11. If you filled all the previous fields, you are ready and you can click here to Launch the instance. 30 | 31 | 32 | Once the instance is up and running, the following screen will pop up: 33 | 34 | ![](how-to-install-on-aws-ec2/install_aws_ec2_getip.png) 35 | 36 | Follow the link, open the instance details, find out the `, and copy it. 37 | 38 | Now you can access the instance using an SSH client. You need to use the `` corresponding to the selected Key Pair name in step 8. 39 | 40 | You can access the virtual machine with: 41 | 42 | ``` 43 | ssh -i ubuntu@ 44 | ``` 45 | 46 | ## Install Nuvolaris 47 | 48 | Once you are connected to the virtual machine with ssh, you can install Nuvolaris executing: 49 | 50 | ``` 51 | curl -s https://www.nuvolaris.io/scripts/ubuntu-ec2.sh | sudo bash 52 | ``` 53 | 54 | The script will take a while to install Kubernetes and Nuvolaris. 55 | 56 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 57 | 58 | At the end it will show a command like this: 59 | 60 | ``` 61 | nuv wskprops --apihost= --auth= 62 | ``` 63 | 64 | where `` is the DNS name of your virtual machine and `` is the authorization key. 65 | 66 | Take note of this command. You will need it to configure access to your serverless environemnt from anywhere using this command. 67 | 68 | You can then install the `nuv` command in your favorite client machine, [downloading](https://github.com/nuvolaris/nuvolaris/releases) the correct version and use the command before to connect to your instance. 69 | 70 | Once the installation is completed, proceed reading [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html), remembering to use `nuv wsk` when you see `wsk`. 71 | 72 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2.png -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2_getip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2_getip.png -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2_shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/installation/how-to-install-on-aws-ec2/install_aws_ec2_shell.png -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-aws-eks.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on AWS EKS 3 | --- 4 | 5 | # Install in an AWS EKS Cluster 6 | 7 | Before starting this guide you need an account in AWS and [configure CLI access](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 8 | 9 | ## Create an AWS EKS cluster 10 | 11 | If you do not have already an EKS cluster for installing Nuvolaris, you need to create one. There are many ways to create an EKS cluster. In this guide we recommend using the [`eksctl`](httsp://eksctl.io) tool. 12 | 13 | Start [following this guide](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html) to install it. 14 | 15 | Once you have it installed, you need to launch an instance with at least one worker node with at least 4GB of memory. 16 | 17 | Also the cluster needs to have the EBS block storage plugin enabled. 18 | 19 | You can adapt this `eksctl` configuration file to create a suitable cluster for Nuvolaris: 20 | 21 | ``` 22 | apiVersion: eksctl.io/v1alpha5 23 | kind: ClusterConfig 24 | 25 | metadata: 26 | name: nuvolaris-cluster 27 | region: eu-central-1 28 | 29 | iam: 30 | withOIDC: true 31 | 32 | nodeGroups: 33 | - name: ng-1 34 | instanceType: m5.large 35 | desiredCapacity: 1 36 | volumeSize: 80 37 | ssh: 38 | publicKeyPath: id_rsa.pub 39 | iam: 40 | withAddonPolicies: 41 | ebs: true 42 | addons: 43 | - name: aws-ebs-csi-driver 44 | ``` 45 | 46 | Note it is using here (and you should adapt to your needs): 47 | 48 | - the region `eu-central-1`, you can pick one closer to you 49 | - instances of type `m5.large`, you can pick a different type 50 | - the `desideredCapacity` is of only 1 worker node, you can add more 51 | - the `volumeSize` is of 80 GB, pick your size 52 | 53 | Copy and edit the configuration file as `eks-cluster.yaml`. 54 | 55 | Then you launch the actual cluster creation with: 56 | 57 | ``` 58 | eksctl create cluster -f eks-cluster.yml 59 | ``` 60 | 61 | It will take a while. Once the cluster is created you can retrieve the configuration to access it and check if the access works with: 62 | 63 | ``` 64 | eksctl utils write-kubeconfig --cluster=nuvolaris-cluster 65 | kubectl get nodes 66 | ``` 67 | 68 | You should see something like this: 69 | 70 | ``` 71 | NAME STATUS ROLES AGE VERSION 72 | ip-192-168-42-140.eu-central-1.compute.internal Ready 34d v1.22.6-eks-7d68063 73 | ``` 74 | 75 | ## Retrieve your Kubernetes context 76 | 77 | If you installed Kubernetes following the instructions of your cloud provider, it will be accessible with the `kubectl` tool. 78 | 79 | You can generally have more contexts to access multiple Kubernetes at the same time. Each Kubernetes is a different context. You can see the available contexts with the command `kubectl config get-contexts`. 80 | 81 | Pick the name of the `` corresponding to the cluster you want to install Nuvolaris. 82 | 83 | ## Installing Nuvolaris with `nuv` 84 | 85 | Now you are ready to install Nuvolaris. 86 | 87 | Copy the `` of the latest version of the installer [from this page](https://github.com/nuvolaris/nuvolaris/releases). 88 | 89 | Then download and unpack it (replace `` with the actual URL address): 90 | 91 | ``` 92 | curl -sL | tar xzvf - 93 | install nuv /usr/local/bin/nuv 94 | nuv -v 95 | ``` 96 | 97 | If the download went ok, you should see the version number of the installer. 98 | 99 | 100 | ``` 101 | nuv setup --context= --apihost=auto 102 | ``` 103 | 104 | The installation can take a few minutes to complete, mostly because a number of large Docker images must be downloaded. If you are curious, you can check what is happening on the Kubernetes cluster running (in another terminal) the command `watch kubectl get po,svc`. 105 | 106 | ### Accessing the serverless environment remotely 107 | 108 | Now that your serverless environemnt is ready you can access it from anywhere, using the configured `apihost` and `auth` key. 109 | 110 | Type `nuv wsk property get`. It will show something like this: 111 | 112 | ``` 113 | whisk API host 114 | whisk auth 115 | whisk namespace nuvolaris 116 | whisk API version v1 117 | whisk CLI version v0.2.0-trinity.22061015 118 | whisk API build 2021-12-29T12:28:02+0000 119 | whisk API build number 67b3e50 120 | ``` 121 | 122 | Take note of the values `` and `` as you wil need it to access your serverless environment remotely. 123 | 124 | Now you can [download](https://github.com/nuvolaris/nuvolaris/releases) the `nuv` tool elsewhere, and connect to your serverless environment with: 125 | 126 | ``` 127 | nuv wskprops --apihost= --auth= 128 | ``` 129 | 130 | Once the installation is completed, proceed reading [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html), remembering to use `nuv wsk` when you see `wsk`. 131 | 132 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 133 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-docker-desktop.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on Docker Desktop 3 | --- 4 | 5 | # Install on Docker Desktop 6 | 7 | If you have already installed [Docker Desktop](https://www.docker.com/products/docker-desktop/), installing a local Nuvolaris development cluster is very easy. 8 | 9 | ## Memory prerequisites 10 | 11 | You need a machine with at least 12 GB of memory. *8GB are not enough*. 12 | 13 | On Mac, you need also to reserve al least 6GB of memory to Docker Desktop, since the default is not enough. This is a required step for Mac, but not on Windows and Mac. 14 | 15 | ![](how-to-install-on-docker-desktop/install_docker_desktop.png) 16 | 17 | On Mac you should: 18 | - click on the Docker Desktop icon 19 | - select Preferences 20 | - click on Resources 21 | - *increase the memory up to 6GB* 22 | - click on `Apply & Restart` 23 | 24 | ## Download `nuv` on Mac and Linux 25 | 26 | Copy the `` of the latest version of the installer [from this page](https://github.com/nuvolaris/nuvolaris/releases) for your platform (Darwin (Mac), or Linux) and architecture (Intel (AMD64) or ARM (ARM64)). 27 | 28 | Download and unpack it (replace `` with the actual URL address): 29 | 30 | ``` 31 | curl -sL | tar xzvf - 32 | sudo cp nuv /usr/local/bin/nuv 33 | nuv -v 34 | ``` 35 | 36 | If the download went ok, you should see the version number of the installer. 37 | 38 | ## Download `nuv` on Windows 39 | 40 | 41 | Copy in the clipboard the `` of the latest version of the installer [from this page](https://github.com/nuvolaris/nuvolaris/releases) for Windows. 42 | 43 | Open as *administrative* PowerShell: search for "powershell" on search bar, left click on it and select "Run As Administator". 44 | Then execute (replace `` with the actual URL address): 45 | 46 | 47 | ``` 48 | Invoke-WebRequest -out nuv.zip -Uri 49 | Expand-Archive nuv.zip 50 | Copy nuv\nuv.exe C:|Windows 51 | nuv --version 52 | ``` 53 | 54 | If the download went ok, you should see the version number of the installer. 55 | 56 | *NOTE*: if you do not want to run as an administator, do not copy it in `C:\Windows\`. In this case the installer it will be not available everywhere but only when you are in current director, amd you can invoke it as `nuv\nuv`. 57 | 58 | 59 | ## Installing Nuvolaris 60 | 61 | Now you can install Nuvolaris on Docker Desktop either with: 62 | 63 | ``` 64 | nuv setup --devcluster 65 | ``` 66 | 67 | The installation can take a few minutes to complete, mostly because a number of large Docker images must be downloaded. 68 | 69 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 70 | 71 | Once the installation is completed, proceed reading [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html), remembering to use `nuv wsk` when you see `wsk`. 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-docker-desktop/install_docker_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/installation/how-to-install-on-docker-desktop/install_docker_desktop.png -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-hetzner-cloud.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on Hetzner Cloud 3 | --- 4 | 5 | # Install on an Hetzner Cloud single instance 6 | 7 | You can install Nuvolaris on a single Hetzner Cloud instance. 8 | 9 | You need at least 4GB, 30GB disk space and 2 VCPU. 10 | 11 | As a prerequisite, you need to get access to the [Hetzner Cloud Console](https://console.hetzner.cloud/projects) by registering to Hetzner. 12 | 13 | Before starting you need also to: 14 | 15 | - create a new project 16 | - enter in the project and create an ssh key 17 | 18 | Once you got access to the console and performed the steps before, use the following instructions to lauch a suitable virtual machine and install Nuvolaris in it. 19 | 20 | ## Launch an Hetzner Virtual Machine 21 | 22 | ![](how-to-install-on-hetzner-cloud/install_hetzner_cloud.png) 23 | 24 | 1. Select your preferred location. 25 | 2. Select Ubuntu 20+ as a distribution. 26 | 3. Select standard or Dedicated for better performance 27 | 4. Use the default. 28 | 5. Use the default. 29 | 6. Use the default. 30 | 7. Use the default. 31 | 8. Select your ssh key here and download it. 32 | 9. Give it a name, for example `nuvolaris`` 33 | 34 | You are ready. Click on *Create and Buy Now*. 35 | 36 | After the creation it will show the `` of your machine. 37 | 38 | Access the machine with: 39 | 40 | ``` 41 | ssh -i root@ 42 | ``` 43 | 44 | ## Install Nuvolaris 45 | 46 | Once you are connected to the virtual machine with ssh, you can install Nuvolaris executing: 47 | 48 | ``` 49 | curl -s https://www.nuvolaris.io/scripts/ubuntu.sh | bash 50 | ``` 51 | 52 | The script will take a while to install Kubernetes and Nuvolaris. 53 | 54 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 55 | 56 | At the end it will show a command like this: 57 | 58 | ``` 59 | nuv wskprops --apihost= --auth= 60 | ``` 61 | 62 | where `` is the DNS name of your virtual machine and `` is the authorization key. 63 | 64 | Take note of this command. You will need it to configure access to your serverless environemnt from anywhere using this command. 65 | 66 | You can then install the `nuv` command in your favorite client machine, [downloading](https://github.com/nuvolaris/nuvolaris/releases) the correct version and use the command before to connect to your instance. 67 | 68 | Once the installation is completed, proceed reading [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html), remembering to use `nuv wsk` when you see `wsk`. 69 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-hetzner-cloud/install_hetzner_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/71937020da5519955852abd86c929c1c9deb3af4/documentation/installation/how-to-install-on-hetzner-cloud/install_hetzner_cloud.png -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-kubernetes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on Kubernetes 3 | --- 4 | 5 | # Installing Nuvolaris on a Kubernetes cluster 6 | 7 | You can install Nuvolaris on any Kubernetes that provides at least: 8 | 9 | - 4GB of memory and 30GB of disk space 10 | - a block storeage class, configured as default 11 | - either an ingress or a load balancer 12 | 13 | If you do not have a Load Balancer (like in self-provisioned Kubernetes clusters in a single instance) you also need to know the `` where the Kubernetes cluster is listening. 14 | 15 | ## Download `nuv` 16 | 17 | Now you are ready to install Nuvolaris. 18 | 19 | Copy the `` of the latest version of the installer [from this page](download.nuvolaris.io). 20 | 21 | Then download and unpack it (replace `` with the actual URL address): 22 | 23 | ``` 24 | curl -sL | tar xzvf - 25 | ./nuv -v 26 | ``` 27 | 28 | If the download went ok, you should see the version number of the installer and you can proceed installing Nuvolaris 29 | 30 | ## Retrieve the Kubernetes context name 31 | 32 | If you want to install Nuvolaris in the current Kubernetes context, use `./nuv setup` and it will tell the name of the current context and you can use it as `` in the next step. 33 | 34 | In general you can have access to multiple Kubernetes at the same time. Each Kubernetes has a different context name. You can see the available contexts with the command `kubectl config get-contexts`. 35 | 36 | Pick the name of the `` corresponding to the cluster you want to install Nuvolaris as you need to install Nuvolaris in that cluster. 37 | 38 | ### Installing Nuvolaris with a Load Balancer 39 | 40 | If you are using a Kubernetes provided by a cloud provider, like AWS, Azure or Gcloud, you have a load balancer and you do not have to provide a DNS name as it is automatically allocated. 41 | 42 | You can then use the following command to install Nuvolaris: 43 | 44 | ``` 45 | ./nuv setup --context= --apihost=auto 46 | ``` 47 | 48 | The installation can take a few minutes to complete, mostly because a number of large Docker images must be downloaded. If you are curious, you can check what is happening on the Kubernetes cluster running (in another terminal) the command `watch kubectl get po,svc`. 49 | 50 | 51 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 52 | 53 | ### Installing Nuvolaris with an Ingress 54 | 55 | If your Kubernetes does not have a load balancer, for example when you installed a Kubernetes cluster in a single VM instance, you need to provide the `` of the instance. It is generally the same name you used to access the instance itself. 56 | 57 | If you only know the IP address, for example `1.2.3.4` of your virtual machine, you can get a DNS name with the suffix `.nip.io`: `1.2.3.4.nip.io`. 58 | 59 | Once you know your `` install with: 60 | 61 | ``` 62 | ./nuv setup --context= --apihost= 63 | ``` 64 | 65 | The installation can take a few minutes to complete, mostly because a number of large Docker images must be downloaded. 66 | 67 | If you are curious to know what is happening on the Kubernetes cluster, you can execute (in another terminal connected to the same host) the command `watch kubectl get po,svc`. 68 | 69 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 70 | 71 | ### Accessing the serverless environment remotely 72 | 73 | Now that your serverless environemnt is ready you can access it from anywhere, using the configured `apihost` and `auth` key. 74 | 75 | Type `nuv wsk property get`. It will show something like this: 76 | 77 | ``` 78 | whisk API host 79 | whisk auth 80 | whisk namespace nuvolaris 81 | whisk API version v1 82 | whisk CLI version v0.2.0-trinity.22061015 83 | whisk API build 2021-12-29T12:28:02+0000 84 | whisk API build number 67b3e50 85 | ``` 86 | 87 | Take note of the values `` and `` as you wil need it to access your serverless environment remotely. 88 | 89 | Now you can [download](download.nuvolaris.io) the `nuv` tool elsewhere, and connect to your serverless environment with: 90 | 91 | ``` 92 | nuv wskprops --apihost= --auth= 93 | ``` 94 | 95 | Once the installation is completed, proceed reading [Apache OpenWhisk documentation](https://openwhisk.apache.org/documentation.html), remembering to use `nuv wsk` when you see `wsk`. 96 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-minikube.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on Minikube 3 | --- 4 | 5 | WORK IN PROGRESS - UNFINISHED 6 | 7 | # Installing on Minikube 8 | 9 | 1. start minikube with at least 4gb and 30gb disk 10 | 11 | ``` 12 | minikube start --memory=4g --disk-size=30g 13 | ``` 14 | 15 | 2. label the nodes to indicate the nodeport 16 | 17 | ``` 18 | minikube kubectl -- label nodes minikube nuvolaris.io/apihost=localhost nuvolaris.io/apiport=3233 nuvolaris.io/protocol=http 19 | ``` 20 | 21 | 3. install with `apihost=auto` 22 | 23 | ``` 24 | nuv setup --context=minikube --apihost=auto 25 | ``` 26 | -------------------------------------------------------------------------------- /documentation/installation/how-to-install-on-ubuntu.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install on Ubuntu 3 | --- 4 | 5 | # Installing Nuvolaris in an Ubuntu instance 6 | 7 | As a prerequisite you need: 8 | 9 | - an Ubuntu Instance, at least version 20 (with snap pre-installed) 10 | - at least 4GB of memory, 30 gb of disk space 11 | - ssh and sudo access to the instance 12 | - firewall opened for port 80 and 443 13 | - the `` of the instance, or at least a public IP address 14 | 15 | **NOTE** if you do not have a public DNS name for your virtual machine but only an IP address, you can use `nip.io` to get one. If you IP address is `1.2.3.4` then you can use `1-2-3-4.nip.io` as a ``. 16 | 17 | Use ssh to log into the instance, according the instructions of your cloud provider. 18 | 19 | ## Install MicroK8s 20 | 21 | First, let's install `microk8s` with `snap` and give access to our user to `microk8s: 22 | 23 | ``` 24 | sudo snap install microk8s --classic 25 | sudo microk8s enable hostpath-storage ingress dns 26 | sudo usermod -a -G microk8s ubuntu 27 | newgrp microk8s 28 | ``` 29 | 30 | Now get the `kubectl` tool and and the configuration: 31 | 32 | ``` 33 | mkdir ~/.kube 34 | microk8s kubectl config >~/.kube/config 35 | microk8s kubectl get nodes 36 | ``` 37 | 38 | You should get an output like this (versions and names can be different): 39 | 40 | ``` 41 | NAME STATUS ROLES AGE VERSION 42 | ip-172-31-21-189 Ready 70m v1.24.0-2+59bbb3530b6769 43 | ``` 44 | 45 | If you see `NotReady` wait a bit and try again until the node is `Ready`, it can take up to one minute. 46 | 47 | ## Installing Nuvolaris 48 | 49 | Now you are ready to install Nuvolaris. 50 | 51 | Copy the `` of the latest version of the installer [from this page](https://www.nuvolaris.io/download). 52 | 53 | Then download and unpack it (replace `` with the actual URL address): 54 | 55 | ``` 56 | curl -sL | tar xzvf - 57 | sudo install nuv /usr/local/bin/nuv 58 | nuv -v 59 | ``` 60 | 61 | If the download and the installation went ok, you should see the version number of the installer. 62 | 63 | Now you can install Nuvolaris. 64 | 65 | For Microk8s instances you do not have generally a load balancer configured so you need to provide the `` of the instance. It is generally the same you used to access the instance itself. 66 | 67 | Also you need the name of the `` to use. You can have more contexts to access multiple Kubernetes at the same time. With Microk8s there should have be only one and it is named `microk8s`. 68 | 69 | You can see the available contexts with the command `kubectl config get-contexts`. 70 | 71 | Once you collected the informations you need you can install it with: 72 | 73 | ``` 74 | nuv setup --context= --apihost= 75 | ``` 76 | 77 | The installation can take a few minutes to complete, mostly because a number of large Docker images must be downloaded. 78 | 79 | If you ware curious, you can check what is happening on the Kubernetes cluster running (in another terminal) the command `watch kubectl -n nuvolaris get po,svc`. 80 | 81 | If something goes wrong, please check the [troubleshooting](troubleshooting.md) page. 82 | 83 | ### Accessing the serverless environment remotely 84 | 85 | Now that your serverless environemnt is ready you can access it from anywhere, using the configured `apihost` and `auth` key. 86 | 87 | Type `nuv wsk proerty get`. It will show something like this: 88 | 89 | ``` 90 | whisk API host 91 | whisk auth 92 | whisk namespace nuvolaris 93 | whisk API version v1 94 | whisk CLI version v0.2.0-trinity.22061015 95 | whisk API build 2021-12-29T12:28:02+0000 96 | whisk API build number 67b3e50 97 | ``` 98 | 99 | Take note of the values `` and `` as you wil need it to access your serverless environment remotely. 100 | 101 | Now you can [download](https://www.nuvolaris.io/download) the `nuv` tool elsewhere, and connect to your serverless environment with: 102 | 103 | ``` 104 | nuv wskprops --apihost= --auth= 105 | ``` 106 | -------------------------------------------------------------------------------- /documentation/installation/set-on-windows.md: -------------------------------------------------------------------------------- 1 | # Set Nuvolaris Environment Variable in Windows 2 | 3 | - Extract the Nuvolaris archive, to the directory you wish to install the `nuv` command. 4 | 5 | 6 | - Open the directory `command`: 7 | 8 | - To set the `nuv` command as a user environment variable [download this script](https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/main/documentation/installation/set-on-windows/user.cmd) and double click `user.cmd`. 9 | - To set the `nuv` command as a system environment variable [download this script](https://raw.githubusercontent.com/nuvolaris/nuvolaris-documentation/main/documentation/installation/set-on-windows/system.cmd) and double click `system.cmd`. 10 | 11 | - Note: if you change the location of your Nuvolaris root folder you need to run the scripts again. 12 | -------------------------------------------------------------------------------- /documentation/installation/set-on-windows/system.cmd: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | REM usage: create nuvolaris Command "NUV" 3 | net.exe session 1>NUL 2>NUL || (Echo This script requires elevated rights, try with Admin Rights && Pause>nul && Exit) 4 | 5 | SET DIRECTORY=%~dp0 6 | FOR %%a IN ("%DIRECTORY:~0,-1%") DO SET NUV=%%~dpa% 7 | SET NUV=%NUV:~0,-1% 8 | 9 | SET KEY="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 10 | FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %KEY% /v PATH`) DO Set CURRENT_PATH=%%B 11 | 12 | ECHO %CURRENT_PATH% > %DIRECTORY%/%COMPUTERNAME%_enviroment_variables.txt 13 | 14 | SETX NUV %NUV%> nul 2> nul /M 15 | find /c "NUV" %DIRECTORY%/%COMPUTERNAME%_enviroment_variables.txt > nul || ( SETX /M PATH "%CURRENT_PATH%%%NUV%%;"> nul 2> nul ) 16 | 17 | if %errorlevel% == 0 ( 18 | 19 | ECHO The NUV Command was SUCCESFULLY setted to %NUV% 20 | ECHO: 21 | 22 | ECHO A backup of your system enviroment variables can now be found at %COMPUTERNAME%_enviroment_variables.txt 23 | ECHO: 24 | 25 | ECHO You now can use NUV command anywhere in the entire system, enjoy! Try tiping nuv --help to start. 26 | ECHO: 27 | ) else ( 28 | 29 | ECHO: 30 | ECHO NUV command could not be setted. 31 | ECHO: 32 | ) 33 | 34 | PAUSE>nul -------------------------------------------------------------------------------- /documentation/installation/set-on-windows/user.cmd: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | REM usage: create nuvolaris Command "NUV" 3 | 4 | SET DIRECTORY=%~dp0 5 | FOR %%a IN ("%DIRECTORY:~0,-1%") DO SET NUV=%%~dpa% 6 | SET NUV=%NUV:~0,-1% 7 | 8 | SET KEY="HKCU\Environment" 9 | FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %KEY% /v PATH`) DO Set CURRENT_PATH=%%B 10 | 11 | ECHO %CURRENT_PATH% > %DIRECTORY%/%USERNAME%_enviroment_variables.txt 12 | 13 | SETX NUV %NUV% > nul 14 | find /c "NUV" %DIRECTORY%/%USERNAME%_enviroment_variables.txt > nul || ( SETX PATH "%CURRENT_PATH%%%NUV%%;"> nul ) 15 | 16 | if %errorlevel% == 0 ( 17 | 18 | ECHO The NUV Command was SUCCESFULLY setted to %NUV% 19 | ECHO: 20 | 21 | ECHO %USERNAME%, a backup of your user's enviroment variables can now be found at %USERNAME%_enviroment_variables.txt 22 | ECHO: 23 | 24 | ECHO You now can use NUV command anywhere, enjoy. Try tiping nuv --help to start. 25 | ECHO: 26 | ) else ( 27 | 28 | ECHO: 29 | ECHO NUV command could not be setted, try with Admin Rights. 30 | ECHO: 31 | ) 32 | 33 | PAUSE > nul -------------------------------------------------------------------------------- /documentation/installation/troubleshooting.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Troubleshooting 3 | --- 4 | 5 | # Troubleshooting 6 | 7 | If the installation fails or never ends, here a few things to check. 8 | 9 | ## Cannot execute the `nuv` executable on Mac OSX 10 | 11 | On Mac, downloaded binaries from third party developerse are sometimes quarantined. 12 | 13 | To allow execution of the `nuv` binary after unpacking execute: 14 | 15 | ``` 16 | xattr -d com.apple.quarantine nuv 17 | ``` 18 | 19 | ## Check the status of the installation 20 | 21 | Run `kubectl -n nuvolaris get po`, you should see something like this: 22 | 23 | ``` 24 | NAME READY STATUS RESTARTS AGE 25 | nuvolaris-operator 1/1 Running 0 7h39m 26 | controller-66c6b48bcb-vk6fv 1/1 Running 0 7h38m 27 | wsk-prewarm-nodejs14 0/1 Completed 0 7h38m 28 | wsk-prewarm-python37 0/1 Completed 0 7h38m 29 | couchdb-0 1/1 Running 0 7h38m 30 | redis-0 1/1 Running 0 7h38m 31 | couchdb-init-dv664 0/1 Completed 0 7h38m 32 | wsk0-48-prewarm-nodejs14 1/1 Running 0 7m28s 33 | ``` 34 | 35 | If you are using an Ubuntu image, use `sudo microk8s kubectl` instead of `kubectl` 36 | 37 | ## Check the API host has been return properly 38 | 39 | Run `kubectl -n nuvolaris get cm/config -o yaml`, you should see something like this: 40 | 41 | ``` 42 | apiVersion: v1 43 | kind: ConfigMap 44 | metadata: 45 | annotations: 46 | apihost: https://ec2-18-191-242-88.us-east-2.compute.amazonaws.com 47 | kubectl.kubernetes.io/last-applied-configuration: | 48 | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"name":"config","namespace":"nuvolaris"}} 49 | name: config 50 | namespace: nuvolaris 51 | ``` 52 | 53 | ## Check you have a `.nuvolaris/.wskpros` in your home directory 54 | 55 | This is the file used to access to Nuvolaris. 56 | 57 | It should look like this: 58 | 59 | ``` 60 | AUTH=8c059563-be75-4b39-a725-769304701a6f:CoIM5TNkbX35dTiLLJnrBb72XT7vDHSSAp1GY1PfpMkUGlSxaEnPFHNacF8HJLBn 61 | APIHOST=http://ec2-19-181-212-78.us-east-2.compute.amazonaws.com 62 | ``` 63 | 64 | ## If there is only the operator running 65 | 66 | Check the logs of the operator with: 67 | 68 | ``` 69 | kubectl -n nuvolaris logs pod/nuvolaris-operator 70 | ``` 71 | 72 | Then [open an issue reporting the logs](https://github.com/nuvolaris/nuvolaris-cli) 73 | 74 | ## Uninstall 75 | 76 | You can uninstall Nuvolaris with: 77 | 78 | ``` 79 | ./nuv setup --uninstall= 80 | ``` 81 | 82 | Remember also to remove the `~/.nuvolaris` folder from your home directory or it will retry the same parameters. 83 | --------------------------------------------------------------------------------