Leo Lamprecht
696f8a20be
|
7 years ago | |
---|---|---|
download | 7 years ago | |
link | 7 years ago | |
scripts | 7 years ago | |
src | 7 years ago | |
test | 7 years ago | |
.flowconfig | 7 years ago | |
.gitignore | 7 years ago | |
.travis.yml | 7 years ago | |
.yarnrc | 7 years ago | |
license.md | 7 years ago | |
package.json | 7 years ago | |
readme.md | 7 years ago | |
webpack.config.js | 7 years ago | |
yarn.lock | 7 years ago |
readme.md
Usage
Now enables instant immutable deployments to any cloud provider with a simple API that's scalable, intuitive and optimized for collaboration.
This is all it takes to deploy, for example, a Node.js project:
cd my-project
cat server.js
require('http').createServer((req, res) => {
res.end('▲ Hello World')
}).listen(process.env.PORT)
and deploy!
now
The output of the now
command will be a unique url to the deployment. No need for git.
Features
- Single command deployment:
now
. - 100% OSS and licensed under Apache 2.0
- Serverless. Worry about code, not servers.
- Immutable. Every time you write
now
, a new deployment is provisioned. - Pluggable. Client can query any public and private cloud provider APIs
- Flexible. Interact with multiple clouds at once:
now gcp deploy && now aws deploy
- Single command setup:
now [provider] login
- Secure. All deployments are served over SSL
- Dynamic and Static. Deploy popular runtimes or static websites
- Remote fs support. Deploy any github project with
now project/repo
, gitlab withgitlab://
. PRs welcome!
Installation
To get the latest version, run this command:
npm install -g now
Note: while the API has been in production for over a year, the different providers are still under heavy development
Optionally, you can clone this repo and run npm run build
to
produce the pkg binaries.
Setup
Configuration of one or more providers via login
command is necessary.
Global configuration is stored as ~/.now/config.json
. Your default provider will be the first one you log in to. If you are logged into multiple providers and want to set default provider, run:
now config set defaultProvider gcp
Now.sh
now login
To skip the configuration steps and deploy to https://now.sh
execute now login
without any parameters, defaulting to the sh
provider (equivalent to: now sh login
).
Now.sh is free for open-source projects and static deployments. It supports Dockerfile
, package.json
and static sites out of the box. All builds are reproducible and executed in the cloud.
AWS Lambda (aws
)
Run:
now aws login
If you have already run aws configure
before, you will be offered
to synchronize your credentials.
Serverless deployments are provisioned by using:
- Lambda functions λ
- A proxy is automatically used to bridge the API between HTTP and lambda functions and retain a consistent interface
- Certificate Manager
- API Gateway
Google Cloud Platform (gcp
)
$ now gcp login
and follow the instructions!
Microsoft Azure (az
)
$ now az login
and follow the instructions!
Project Configuration
ℹ️ | We welcome feedback from the community! |
The v1 release of now.json
includes the following specification:
name
(optional, recommended)String
description
(optional, recommended)String
type
(optional, recommended). One of:String
an unique identifier for the project type. The following are recommended choices to be supported by every provider:docker
nodejs
static
Object
when it's necessary to specify a version or multiple interacting runtimes. It's a dictionary of runtime identifier and SemVer-compatible version. For example:{ "type": { "docker": "1.x.x" } }
provider
(optional) indicates affinity to a certain provider
target
(optional)String
- specifies a directory or file to deploy. If relative, it's resolved
to the project directory. This is useful when a certain
deployment type (like
static
) has an output target, like anout
ordist
directory.
- specifies a directory or file to deploy. If relative, it's resolved
to the project directory. This is useful when a certain
deployment type (like
env
(optional). One ofObject
a dictionary mapping the name of the environmental variable to expose to the deployment and its value. If the value begins with@
, it's considered aArray
a list of suggested environmental variables that the project might require to be deployed and function correctly
regions
-Array
ofString
- specifies one or more regition identifiers to deploy to. A wildcard can be used to signify deployment to all supported regions by the provider
files
-Array
ofString
- specifies a whitelist of what files have to be deployed
To supply provider-specific configuration, you can include an arbitrary Object
and use the provider identifier as the key.
Global Configuration
The client will initialize a .now
directory in the user's home
directory upon first running.
There, two files can be found:
config.json
auth.json
Implementation notes
Now is directly modeled after UNIX. It's useful to think of the primary subcommands deploy
, alias
and rm
as being the "cloud equivalents" of cp
, ln
and rm
.
The minimal set of commands that providers must supply are:
[] | deploy |
the default command to launch a deployment |
remove | rm |
remove a deployment identified by its unique URL |
Recommended, but not required, commands are:
alias | ln |
associates a URL with a permanent domain name |
secrets ls | rm | add |
manage deployment secrets |
domains ls | add | rm |
manage domains |
dns ls | add | rm |
manage dns records |
certs ls | add | rm |
manage certificates |
The build
step for serverless deployments is implemented locally and is compatible with projects configured with the type
nodejs
, and others are on the way!
Philosophy
Immutability
Each time you write now
a new deployment is provisioned. Whenever
possible, providers should strive to make deployments idempotent in the
absence of changes to:
- Originating source code
- Configuration
- Environment variables
Standards compliance
All projects expose a HTTP/1.1-compatible interface. A port is provided
via the standard process.env.PORT
.
Secure
Whenever possible, deployments are strongly encouraged to be served over SSL. The process of provisioning certificates should be transparent to the user.
Projects should require minimal JSON configuration
Whenever possible, projects should be deployable with minimal or no configuration.
Avoid manifest duplication
If the configuration or conventions imposed by a programming language or framework are present, attempt to provide sane defaults.
Examples of this is the presence of Dockerfile
or package.json
. When
publishing a project it's recommended that the type
is strictly
configured in now.json
to avoid
Contributions and Roadmap
Community
All feedback and suggestions are welcome!
- 💬 Chat: Join us on zeit.chat
#now-client
. - 📣 Stay up to date on new features and announcments on @zeithq.
- 🔐 Subscribe to our security mailing list to stay up-to-date on urgent security disclosures.
Please note: we adhere to the contributor coventant for all interactions in our community.
Contributions
To get started contributing, make sure you're running node
8.x.x
. Clone this repository:
git clone https://github.com/zeit/now-cli
To test the pkg
binary distribution, run:
npm run build
Ongoing development
- Support for
now <file>
, with support for:- Binaries as a first-class deployment type
- Static deployments as a fallback
- We are working on built-in support for provisioning Kubernetes replication controllers and pods, in a similar vein as the Draft project.
- A simple API to register custom providers and pluggable build systems externally, such as Travis, Circle CI, etc.
- A companion desktop app Now Desktop
is available, released under the MIT license.
Work is ongoing for pluggable providers to enable:
- Team collaboration
- One-click context switch
- Drag and drop deployments
- Adding interoperabity between objects that live in different providers
- Providing a Next.js and React powered dashboard that can be deployed anywhere
Why Ship a pkg
-ed Binary?
- Simpler installation for non-Node users like those deploying static files or Dockerfiles.
- Consistency across platforms and installation mechanisms (
npm
,brew
and manual scripts) - Parsing and evaluation optimizations lead to a faster bootup time
- Easier installation in automation environments (like CI systems)
- Increased safety by providing a unified signature mechanism for releases
- We're able to select our own Node version of choice and can take advantage of the latest features
Caught a Bug?
- Fork this repository to your own GitHub account and then clone it to your local device
- Link the package to the global module directory:
npm run link
(notnpm link
) - You can now start using
now
from the command line!
As always, you can use npm test
to run the tests and see if your changes have broken anything.
Authors
- Guillermo Rauch (@rauchg) - ▲ZEIT
- Leo Lamprecht (@notquiteleo) - ▲ZEIT
- Tony Kovanen (@TonyKovanen) - ▲ZEIT
- Olli Vanhoja (@OVanhoja) - ▲ZEIT
- Naoyuki Kanezawa (@nkzawa) - ▲ZEIT