diff --git a/README.md b/README.md index f3a4a520..f4a044cb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ Poor man's function as a service. - [Introduction](#introduction) - [Installation](#installation) - [Usage](#usage) -- [Manage Infrastructure](#manage-infrastructure) - [Contribute](#contribute) @@ -81,10 +80,9 @@ USAGE: fx [global options] command [command options] [arguments...] VERSION: - 0.8.7 + 0.9.32 COMMANDS: - infra manage infrastructure up deploy a function down destroy a service list, ls list deployed services @@ -98,22 +96,40 @@ GLOBAL OPTIONS: --version, -v print the version ``` -### Deploy your function to Docker +### Deploy function + +* Local Docker environment + +By default, function will be deployed on localhost. ``` -$ fx up --name hello-fx ./examples/functions/JavaScript/func.js +$ fx up --name hello ./examples/functions/JavaScript/func.js +------------------------------------------------------------------+-----------+---------------+ | ID | NAME | ENDPOINT | +------------------------------------------------------------------+-----------+---------------+ -| 5b24d36608ee392c937a61a530805f74551ddec304aea3aca2ffa0fabcf98cf3 | /hello-fx | 0.0.0.0:58328 | +| 5b24d36608ee392c937a61a530805f74551ddec304aea3aca2ffa0fabcf98cf3 | /hello | 0.0.0.0:58328 | +------------------------------------------------------------------+-----------+---------------+ ``` -### Deploy your function to Kubernetes +* Remote host + +Use `--host` to specify the target host for your function, + +```shell +$ fx up --host roo@ --name hello ./examples/functions/JavaScript/func.js + ++------------------------------------------------------------------+-----------+---------------+ +| ID | NAME | ENDPOINT | ++------------------------------------------------------------------+-----------+---------------+ +| 5b24d36608ee392c937a61a530805f74551ddec304aea3aca2ffa0fabcf98cf3 | /hello | 0.0.0.0:58345 | ++------------------------------------------------------------------+-----------+---------------+ +``` + +* Kubernetes ``` -$ KUBECONFIG=~/.kube/config ./build/fx up examples/functions/JavaScript/func.js --name hello-fx +$ FX_KUBECONF=~/.kube/config fx up examples/functions/JavaScript/func.js --name hello +-------------------------------+------+----------------+ | ID | NAME | ENDPOINT | @@ -122,7 +138,7 @@ $ KUBECONFIG=~/.kube/config ./build/fx up examples/functions/JavaScript/func.js +------------------------+-------------+----------------+ ``` -### Test your service +### Test service then you can test your service: @@ -149,31 +165,6 @@ hello world ``` -## Manage Infrastructure - -**fx** is originally designed to turn a function into a runnable Docker container in a easiest way, on a host with Docker running, you can just deploy your function with `fx up` command, and now **fx** supports deploy function to be a service onto Kubernetes cluster infrasture, and we encourage you to do that other than on bare Docker environment, there are lots of advantage to run your function on Kubernetes like self-healing, load balancing, easy horizontal scaling, etc. It's pretty simple to deploy your function onto Kubernetes with **fx**, you just set KUBECONFIG in your enviroment. - -By default. **fx** use localhost as target infrastructure to run your service, and you can also setup your remote virtual machines as **fx**'s infrastructure and deploy your functions onto it. - -### `fx infra create` - -You can create types (docker and k8s) of infrastructures for **fx** to deploy functions - -```shell -$ fx infra create --name infra_us --type docker --host @ ## create docker type infrasture on -$ fx infra create --name infra_bj --type k8s --master @ --agents '@,@' ## create k8s type infrasture use as master node, and and as agents nodes -``` - -### `fx infra use` - -To use a infrastructure, you can use `fx infra use` command to activate it. - -```shell -fx infra use -``` - -and you can list your infrastructure with `fx infra list` - ## Use Public Cloud Kubernetes Service as infrastructure to run your functions * Azure Kubernetes Service (AKS) @@ -198,7 +189,7 @@ aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8 Since AKS's config will be merged into `~/.kube/config` and set to be current context after you run `az aks get-credentials` command, so you can just set KUBECONFIG to default config also, ```shell -$ export KUBECONFIG=~/.kube/config # then fx will take the config to deloy function +$ export FX_KUBECONF=~/.kube/config # then fx will take the config to deloy function ``` But we would suggest you run `kubectl config current-context` to check if the current context is what you want. @@ -224,7 +215,7 @@ $ kubectl config current-context Then you can deploy your function onto GKE cluster with, ```shell -$ KUBECONFIG=~/.kube/config fx up examples/functions/JavaScript/func.js --name hellojs +$ FX_KUBECONF=~/.kube/config fx up examples/functions/JavaScript/func.js --name hellojs ``` * Setup your own Kubernetes cluster diff --git a/docs/ubuntu.md b/docs/ubuntu.md index 9451476b..410eeb34 100644 --- a/docs/ubuntu.md +++ b/docs/ubuntu.md @@ -36,11 +36,26 @@ $ curl 127.0.0.1:2000 ## Deploy a function onto remote host -* make sure your instance can be ssh login +* make sure you can ssh login to target host with root + +Update `/etc/ssh/sshd_config` to allow login with root. + +``` +PermitRootLogin yes +``` + +Then restart sshd with, + +```shell +$ sudo service sshd restart +``` + * make sure your instance accept port 8866 +[FYI](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/understanding-firewall-and-port-mappings-in-amazon-lightsail) + then you can deploy function to remote host ```shell -DOCKER_REMOTE_HOST_ADDR= DOCKER_REMOTE_HOST_USER= DOCKER_REMOTE_HOST_PASSWORD= fx up -p 2000 test/functions/func.js +fx up --host root@ test/functions/func.js ``` diff --git a/fx.go b/fx.go index ea605531..a8a112ab 100644 --- a/fx.go +++ b/fx.go @@ -19,7 +19,7 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" ) -const version = "0.9.31" +const version = "0.9.32" func init() { go checkForUpdate() diff --git a/go.mod b/go.mod index e002dd21..f5d1f65b 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/gorilla/mux v1.7.3 // indirect github.com/imdario/mergo v0.3.7 // indirect github.com/logrusorgru/aurora v0.0.0-20191017060258-dc85c304c434 - github.com/metrue/go-ssh-client v0.0.0-20200317035802-7c3bc0c87929 + github.com/metrue/go-ssh-client v0.0.0-20200317072149-19d54050aefd github.com/mholt/archiver v3.1.1+incompatible github.com/mitchellh/go-homedir v1.1.0 github.com/morikuni/aec v1.0.0 // indirect diff --git a/go.sum b/go.sum index 5ae184be..191236fe 100644 --- a/go.sum +++ b/go.sum @@ -227,6 +227,8 @@ github.com/metrue/go-ssh-client v0.0.0-20200317034720-e3f45ef1916d h1:vLJfcEJfji github.com/metrue/go-ssh-client v0.0.0-20200317034720-e3f45ef1916d/go.mod h1:aPG/JtXTyLliKDDlkv+nzHbSbz2p2CBMAjNJRK4uhzY= github.com/metrue/go-ssh-client v0.0.0-20200317035802-7c3bc0c87929 h1:Z/+UhJcqXfrTgosjU8s91ASl8JOqh29/YJh8Tu26hw8= github.com/metrue/go-ssh-client v0.0.0-20200317035802-7c3bc0c87929/go.mod h1:aPG/JtXTyLliKDDlkv+nzHbSbz2p2CBMAjNJRK4uhzY= +github.com/metrue/go-ssh-client v0.0.0-20200317072149-19d54050aefd h1:HoDa3tI6njhpyhu7aIcIfib8QugB66ILgYRLc5IuP6s= +github.com/metrue/go-ssh-client v0.0.0-20200317072149-19d54050aefd/go.mod h1:mgU+XR/ItF6PaQGpx0MthaaMP2dgGuck0IiXcrF3zMw= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=