Skip to content

Commit 6c81ecc

Browse files
committed
Merge branch 'develop', prepare 3.1.0 release
2 parents 53989a4 + 5a5ee87 commit 6c81ecc

File tree

15 files changed

+2049
-1330
lines changed

15 files changed

+2049
-1330
lines changed

README.md

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,20 @@ Exoframe is a self-hosted tool that allows simple one-command deployments using
1111

1212
## Features
1313

14-
* One-command project deployment
15-
* SSH key based auth
16-
* Rolling updates
17-
* Deploy tokens (e.g. to deploy from CI)
18-
* Automated HTTPS setup via letsencrypt \*
19-
* Automated gzip compression \*
20-
* Simple access to the logs of deployments
21-
* Docker-compose support
22-
* Multiple deployment endpoints and multi-user support
23-
* Simple update procedure for client, server and Traefik
24-
* Optional automatic subdomain assignment (i.e. every deployment gets its own subdomain)
25-
* Swarm mode deployments
26-
* Complex recipes support (i.e. deploy complex systems in one command)
14+
- One-command project deployment
15+
- SSH key based auth
16+
- Rolling updates
17+
- Deploy tokens (e.g. to deploy from CI)
18+
- Automated HTTPS setup via letsencrypt \*
19+
- Automated gzip compression \*
20+
- Rate-limit support \*
21+
- Simple access to the logs of deployments
22+
- Docker-compose support
23+
- Multiple deployment endpoints and multi-user support
24+
- Simple update procedure for client, server and Traefik
25+
- Optional automatic subdomain assignment (i.e. every deployment gets its own subdomain)
26+
- Swarm mode deployments
27+
- Complex recipes support (i.e. deploy complex systems in one command)
2728

2829
\* Feature provided by [Traefik](https://traefik.io/)
2930

@@ -64,20 +65,21 @@ You can find a list of all commands and options in the [docs](./docs/README.md).
6465

6566
## Docs
6667

67-
* [Basics](docs/Basics.md)
68-
* [FAQ](docs/FAQ.md)
69-
* [Contribution Guideline](docs/Contributing.md)
70-
* [Templates guide](docs/TemplatesGuide.md)
71-
* [Recipes guide](docs/RecipesGuide.md)
72-
* [Using nightly versions](docs/Nightly.md)
73-
* [Tutorials, articles, video and related links](docs/Links.md)
74-
* [Change Log](CHANGELOG.md)
68+
- [Basics](docs/Basics.md)
69+
- [Advanced topics](docs/Advanced.md)
70+
- [FAQ](docs/FAQ.md)
71+
- [Contribution Guideline](docs/Contributing.md)
72+
- [Templates guide](docs/TemplatesGuide.md)
73+
- [Recipes guide](docs/RecipesGuide.md)
74+
- [Using nightly versions](docs/Nightly.md)
75+
- [Tutorials, articles, video and related links](docs/Links.md)
76+
- [Change Log](CHANGELOG.md)
7577

7678
## Special thanks
7779

7880
Thanks to:
7981

80-
* [Ivan Semenov](https://www.behance.net/ivan_semenov) for making [an awesome logo](./logo/README.md)
82+
- [Ivan Semenov](https://www.behance.net/ivan_semenov) for making [an awesome logo](./logo/README.md)
8183

8284
## License
8385

docs/Advanced.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Advanced topics
2+
3+
## Routing requests to specific path
4+
5+
Since Traefik supports routing requests to specific path, you can also do that with Exoframe.
6+
By default, Exoframe generates the following frontend string:
7+
8+
```js
9+
Labels['traefik.frontend.rule'] = `Host:${config.domain}`; // where config is project config json
10+
```
11+
12+
You can route requests to path instead by using Traefik [frontend matchers](https://docs.traefik.io/basics/#matchers) and appending them to `domain` field in config.
13+
For example, you can route requests from `http://bots.domain.com/myhook` to your service.
14+
To achieve this, you will need to simply set `domain` field in the config file to `bots.domain.com;Path:/myhook`.
15+
This will route all requests from `bots.domain.com/myhook` to `your.service.host/myhook`.
16+
17+
Here's a few examples of basic use cases:
18+
19+
| Domain string | Routed path | Notes |
20+
| --------------------------------- | ------------------- | ----------------------------------------------------------------------- |
21+
| `domain.com;Path:/products/` | `service/products/` | Match exact path |
22+
| `domain.com;PathStrip:/products/` | `service/` | Match exact path and strip off the path prior to forwarding the request |
23+
24+
For more info and options see the aforementioned [Traefik frontend matchers](https://docs.traefik.io/basics/#matchers) docs.
25+
26+
## Rate limiting
27+
28+
Exoframe allows you to enable basic IP-based rate-limiting integrated into Traefik.
29+
To do that, simply specify the following fields in the project config file:
30+
31+
```json
32+
{
33+
// adding this object will enable IP-based rate-limiting
34+
"rate-limit": {
35+
// time period to be considered for request limits
36+
// defaults to "1s" if not specified
37+
"period": "3s",
38+
// average request rate over given time period
39+
// defaults to 1 if not specified
40+
"average": 5,
41+
// maximal burst request rate over given time period
42+
// defaults to 5 if not specified
43+
"burst": 10
44+
}
45+
}
46+
```
47+
48+
This will define how many requests (`average`) over given time (`period`) can be performed from one IP address.
49+
For the example above - an average of 5 requests every 3 seconds is allowed with busts of up to 10 requests.
50+
51+
For more information, see [Traefik rate-limiting docs](https://docs.traefik.io/configuration/commons/#rate-limiting).

docs/Basics.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
## Concepts
44

5-
* **Project** - one or more deployments grouped together (e.g. started via docker-compose)
6-
* **Deployment** - one and only one deployed service
5+
- **Project** - one or more deployments grouped together (e.g. started via docker-compose)
6+
- **Deployment** - one and only one deployed service
77

88
## Requirements
99

@@ -12,8 +12,8 @@ Most intensive task from CLI side is packaging the project and streaming that to
1212

1313
Running Exoframe server on its own also doesn't require too much resources:
1414

15-
* Exoframe Server consumes ~50mb of RAM
16-
* Traefik started along with server consumes ~60mb of RAM
15+
- Exoframe Server consumes ~50mb of RAM
16+
- Traefik started along with server consumes ~60mb of RAM
1717

1818
Be aware though - execution of deployments will result in (1) new Docker images being built and (2) new Docker containers being started.
1919
Depending on your project's complexity, this might require significant amount of resources during both steps resulting in failed deployments (note: if Docker goes out-of-memory during build, you will not get any specific error - just a failed deployment).
@@ -98,6 +98,16 @@ Config file has the following structure:
9898
"labels": {
9999
"my.custom.label": "value"
100100
},
101+
// rate-limit config
102+
// see "advanced topics" for more info
103+
"rate-limit": {
104+
// rate-limit time period
105+
"period": "1s",
106+
// request rate over given time period
107+
"average": 1,
108+
// max burst request rate over given time period
109+
"burst": 5,
110+
},
101111
// template to be used for project deployment
102112
// undefined by default, detected by server based on file structure
103113
"template": "my-template"

docs/Contributing.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ If you want to add new feature or implement a significant change that hasn't bee
55

66
## How to send pull requests
77

8-
1. Fork this repository to your own GitHub account
9-
2. Create new branch that is named accordingly to the issue you are working on (e.g. `feature/new-thing` or `fix/bug-name`)
10-
3. Make sure tests are passing (if you are adding new feature - add tests to cover basics of that feature)
11-
4. Make sure your branch is up to date with `develop` branch
12-
5. Open pull request towards `develop` branch
13-
6. Wait for feedback
8+
1. Fork this repository to your own GitHub account
9+
2. Create new branch that is named accordingly to the issue you are working on (e.g. `feature/new-thing` or `fix/bug-name`)
10+
3. Make sure tests are passing (if you are adding new feature - add tests to cover basics of that feature)
11+
4. Make sure your branch is up to date with `develop` branch
12+
5. Open pull request towards `develop` branch
13+
6. Wait for feedback
1414

1515
## How to run Exoframe CLI locally
1616

17-
1. Fork this repository to your own GitHub account and then clone it to your local device.
18-
2. Uninstall exoframe if it's already installed: `npm uninstall exoframe -g`
19-
3. Link it to the global module directory: `npm link`
17+
1. Fork this repository to your own GitHub account and then clone it to your local device.
18+
2. Uninstall exoframe if it's already installed: `npm uninstall exoframe -g`
19+
3. Link it to the global module directory: `npm link`
2020

2121
Now can use the `exoframe` command everywhere.

docs/Links.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
## Tutorials
44

5-
* [Tutorial: Deploy to AWS-based Swarm cluster with Exoframe](./TutorialSwarmAWS.md)
5+
- [Tutorial: Deploy to AWS-based Swarm cluster with Exoframe](./TutorialSwarmAWS.md)
66

77
## Articles
88

9-
* [Introducing Exoframe (beta) — self-hosted alternative to Now.sh](https://hackernoon.com/introducing-exoframe-beta-self-hosted-alternative-to-now-sh-80643f96b84b)
10-
* [Continuous deployment for your Node.js projects in 10 minutes with Exoframe](https://hackernoon.com/continuous-deployment-for-your-node-js-projects-in-10-minutes-with-exoframe-bdf48340c1be)
11-
* [Simplifying Docker management with Exoframe](https://hackernoon.com/simplifying-docker-management-with-exoframe-9275e92c7406)
9+
- [Introducing Exoframe (beta) — self-hosted alternative to Now.sh](https://hackernoon.com/introducing-exoframe-beta-self-hosted-alternative-to-now-sh-80643f96b84b)
10+
- [Continuous deployment for your Node.js projects in 10 minutes with Exoframe](https://hackernoon.com/continuous-deployment-for-your-node-js-projects-in-10-minutes-with-exoframe-bdf48340c1be)
11+
- [Simplifying Docker management with Exoframe](https://hackernoon.com/simplifying-docker-management-with-exoframe-9275e92c7406)
1212

1313
## Videos
1414

15-
* [Introducing Exoframe - self-hosted Now.sh alternative](https://www.youtube.com/watch?v=VZnYKIoh5oA)
16-
* [Continuous Deployment for Node.js projects in 10 mins using Exoframe](https://www.youtube.com/watch?v=AEwLt5hmKYo)
15+
- [Introducing Exoframe - self-hosted Now.sh alternative](https://www.youtube.com/watch?v=VZnYKIoh5oA)
16+
- [Continuous Deployment for Node.js projects in 10 mins using Exoframe](https://www.youtube.com/watch?v=AEwLt5hmKYo)

docs/README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
## Table of Contents
22

3-
* [Basics](Basics.md)
4-
* [FAQ](FAQ.md)
5-
* [Templates guide](TemplatesGuide.md)
6-
* [Using nightly versions](Nightly.md)
7-
* [Articles, video and related links](Links.md)
8-
* [Change Log](../CHANGELOG.md)
3+
- [Basics](Basics.md)
4+
- [Advanced topics](Advanced.md)
5+
- [FAQ](FAQ.md)
6+
- [Templates guide](TemplatesGuide.md)
7+
- [Using nightly versions](Nightly.md)
8+
- [Articles, video and related links](Links.md)
9+
- [Change Log](../CHANGELOG.md)

docs/RecipesGuide.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,5 +265,5 @@ exports.runSetup = async ({answers, serverConfig, username, docker, util}) => {
265265

266266
## Examples
267267

268-
* [Wordpress recipe](https://github.com/exoframejs/exoframe-recipe-wordpress) (incl. Wordpress, MariaDB and PHPMyAdmin)
269-
* [HOBBIT project recipe](https://github.com/hobbit-project/exoframe-recipe-hobbit) (very complex recipe incl. volumes with configs, pre-setup scripts, etc.)
268+
- [Wordpress recipe](https://github.com/exoframejs/exoframe-recipe-wordpress) (incl. Wordpress, MariaDB and PHPMyAdmin)
269+
- [HOBBIT project recipe](https://github.com/hobbit-project/exoframe-recipe-hobbit) (very complex recipe incl. volumes with configs, pre-setup scripts, etc.)

docs/TemplatesGuide.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ exports.executeTemplate = async ({username, tempDockerDir, resultStream, util, d
159159

160160
## Examples
161161

162-
* [Core templates](https://github.com/exoframejs/exoframe-server/tree/master/src/docker/templates) (incl. node, nginx, dockerfile and docker-compose)
163-
* [Maven template](https://github.com/exoframejs/exoframe-template-maven)
164-
* [Java template](https://github.com/exoframejs/exoframe-template-java)
165-
* [Tomcat template](https://github.com/exoframejs/exoframe-template-tomcat)
162+
- [Core templates](https://github.com/exoframejs/exoframe-server/tree/master/src/docker/templates) (incl. node, nginx, dockerfile and docker-compose)
163+
- [Maven template](https://github.com/exoframejs/exoframe-template-maven)
164+
- [Java template](https://github.com/exoframejs/exoframe-template-java)
165+
- [Tomcat template](https://github.com/exoframejs/exoframe-template-tomcat)

docs/TutorialSwarmAWS.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ This tutorial will guide you through setup of Exoframe on basic AWS Docker Swarm
66

77
This tutorial assumes you have the following things installed on your machine:
88

9-
* [Docker](https://docs.docker.com/install/)
10-
* [Docker-machine](https://docs.docker.com/machine/install-machine/)
11-
* [AWS cli](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)
9+
- [Docker](https://docs.docker.com/install/)
10+
- [Docker-machine](https://docs.docker.com/machine/install-machine/)
11+
- [AWS cli](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)
1212

1313
## Step 1: Get AWS account & access key and secret
1414

package.json

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "exoframe",
3-
"version": "3.0.1",
3+
"version": "3.1.0",
44
"description": "Exoframe is a self-hosted tool that allows simple one-command deployments using Docker",
55
"main": "index.js",
66
"repository": "[email protected]:exoframejs/exoframe.git",
@@ -12,30 +12,33 @@
1212
"scripts": {
1313
"test": "TZ=Greenland NODE_ENV=testing jest --coverage --silent --maxWorkers=2 --ci",
1414
"coveralls": "cat ./coverage/lcov.info | coveralls",
15-
"package": "pkg --targets node8.9.0-linux-x64,node8.9.0-win-x64,node8.9.0-macos-x64 -o exoframe index.js"
15+
"package": "pkg --targets node8.11.3-linux-x64,node8.11.3-win-x64,node8.11.3-macos-x64 -o exoframe index.js"
1616
},
1717
"dependencies": {
18-
"boxen": "^1.2.2",
18+
"boxen": "^2.0.0",
1919
"chalk": "^2.4.1",
2020
"cli-table": "^0.3.1",
21-
"got": "^8.3.1",
21+
"got": "^9.2.2",
2222
"highland": "^2.13.0",
23-
"ignore": "^3.3.8",
24-
"inquirer": "^5.2.0",
25-
"js-yaml": "^3.11.0",
26-
"jsonwebtoken": "^8.2.1",
27-
"lodash": "^4.17.10",
23+
"inquirer": "^6.2.0",
24+
"js-yaml": "^3.12.0",
25+
"jsonwebtoken": "^8.3.0",
26+
"lodash": "^4.17.11",
27+
"multimatch": "^2.1.0",
2828
"opn": "^5.3.0",
29-
"ora": "^2.1.0",
30-
"tar-fs": "^1.16.2",
29+
"ora": "^3.0.0",
30+
"tar-fs": "^1.16.3",
3131
"update-notifier": "^2.5.0",
32-
"yargs": "^11.0.0"
32+
"yargs": "^12.0.2"
3333
},
3434
"devDependencies": {
35-
"coveralls": "^3.0.1",
36-
"jest": "^22.4.4",
37-
"nock": "^9.2.6",
38-
"pkg": "^4.3.1",
39-
"sinon": "^5.0.7"
35+
"coveralls": "^3.0.2",
36+
"jest": "^23.6.0",
37+
"nock": "^10.0.0",
38+
"pkg": "^4.3.4",
39+
"sinon": "^6.3.3"
40+
},
41+
"jest": {
42+
"testEnvironment": "node"
4043
}
4144
}

0 commit comments

Comments
 (0)