Giter Site home page Giter Site logo

now's Introduction

now

How it works

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 with gitlab://. PRs welcome!

Installation

To install the latest version:

npm install -g now@beta

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. If no logins are active and now

Global configuration is stored as ~/.now/config.json. Your default provider will be the first one you log in to.

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 an out or dist directory.
  • env (optional). One of
    • Object 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 a
    • Array a list of suggested environmental variables that the project might require to be deployed and function correctly
  • regions - Array of String
    • 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 of String
    • 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
  • credentials.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:

logs | ln associates a URL with a permanent domain name
secrets ls rm add associates a URL with a permanent domain name
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

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

License

Now is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

now's People

Contributors

rauchg avatar xxzefgh avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.