diff --git a/README.md b/README.md index ec689d0..5b67ad0 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,84 @@ -# greenlock-cli (letsencrypt-cli for node.js) +![Greenlock Logo](https://git.coolaj86.com/coolaj86/greenlock.js/raw/branch/master/logo/greenlock-1063x250.png "Greenlock Logo") -| [greenlock (library)](https://git.coolaj86.com/coolaj86/greenlock.js) -| **greenlock-cli** -| [greenlock-express](https://git.coolaj86.com/coolaj86/greenlock-express.js) -| [greenlock-koa](https://git.coolaj86.com/coolaj86/greenlock-koa.js) -| [greenlock-hapi](https://git.coolaj86.com/coolaj86/greenlock-hapi.js) -| +# Greenlock™ for Web Servers -CLI for node-greenlock modeled after the official client. +A server-friendly commandline tool for Free SSL, Free Wildcard SSL, and Fully Automated HTTPS +certificates issued by Let's Encrypt v2 via ACME -* Free SSL Certificates -* 90-day certificate lifetime -* One-off standalone registration / renewal -* On-the-fly registration / renewal via webroot +Greenlock is also available +[for Browsers](https://git.coolaj86.com/coolaj86/greenlock.html), +[for node.js](https://git.coolaj86.com/coolaj86/greenlock-express.js), +and [for API integrations](https://git.coolaj86.com/coolaj86/greenlock.js) -## Install Node +Features +======== -For **Windows**: + - [x] Automatic HTTPS + - [x] Free SSL + - [x] Free Wildcard SSL + - [x] Multiple domain support (up to 100 altnames per SAN) + - [x] Virtual Hosting (vhost) + - [x] Automatical renewal (10 to 14 days before expiration) + - [x] Let's Encrypt v2 ACME API + - [x] Extensible via Plugins + - [x] HTTP Challenge Plugins - AWS S3, Azure, Consul, etcd + - [x] DNS Challenge Plugins - AWS Route53, CloudFlare, Digital Ocean + - [x] Account & Certificate Storage Plugins - AWS S3, Redis + - [x] HTTPS for Web Servers + - [x] node.js + - [x] Apache + - [x] Nginx + - [x] HAProxy + - [x] manual -Choose **Stable** from +Demo +==== -For Linux and **OS X**: - -``` -curl -L bit.ly/nodejs-min | bash -``` - -# Install Greenlock +Run as a webserver: ```bash -npm install -g greenlock-cli@2.x +sudo greenlock --daemon --root /srv/www/example.com --domains example.com,www.example.com ``` -## Usage +Fetch certificates for Apache, Nginx, or HAProxy: + +```bash +greenlock --domains example.com,www.example.com \ + --webroot-path /srv/www/example.com \ + --privkey-path /etc/ssl/privkey.pem \ + --fullchain-path /etc/ssl/fullchain.pem +``` + +See explanations below in the **Usage** section. + +Install +======= + +Windows +------- + +1. Install node.js +2. Open `Node.js cmd.exe` +2. Run the command `npm install -g greenlock-cli` + +Mac +--- + +Open Terminal + +```bash +curl -fsS https://get.greenlock.app/ | bash +``` + +Linux +----- + +```bash +curl -fsS https://get.greenlock.app/ | bash +``` + +Usage +===== These commands are shown using the **testing server**. diff --git a/installer/get.sh b/installer/get.sh new file mode 100644 index 0000000..be2dd94 --- /dev/null +++ b/installer/get.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# This is a 3 step process +# 1. First we need to figure out whether to use wget or curl for fetching remote files +# 2. Next we need to figure out whether to use unzip or tar for downloading releases +# 3. We need to actually install the stuff + +set -e +set -u + +############################### +# # +# http_get # +# boilerplate for curl / wget # +# # +############################### + +# See https://git.coolaj86.com/coolaj86/snippets/blob/master/bash/http-get.sh + +_my_http_get="" +_my_http_opts="" +_my_http_out="" + +detect_http_get() +{ + set +e + if type -p curl >/dev/null 2>&1; then + _my_http_get="curl" + _my_http_opts="-fsSL" + _my_http_out="-o" + elif type -p wget >/dev/null 2>&1; then + _my_http_get="wget" + _my_http_opts="--quiet" + _my_http_out="-O" + else + echo "Aborted, could not find curl or wget" + return 7 + fi + set -e +} + +http_get() +{ + $_my_http_get $_my_http_opts $_my_http_out "$2" "$1" + touch "$2" +} + +http_bash() +{ + _http_url=$1 + my_args=${2:-} + rm -rf my-tmp-runner.sh + $_my_http_get $_my_http_opts $_my_http_out my-tmp-runner.sh "$_http_url"; bash my-tmp-runner.sh $my_args; rm my-tmp-runner.sh +} + +detect_http_get + +############################### +## END HTTP_GET ## +############################### + +echo "" +echo "" + +if [ -z "${GREENLOCK_PATH:-}" ]; then + echo 'GREENLOCK_PATH="'${GREENLOCK_PATH:-}'"' + GREENLOCK_PATH=/opt/greenlock +fi + +echo "Installing Greenlock to '$GREENLOCK_PATH'" +echo "" + +# until node v10.x gets fix for ursa we have no advantage to switching from 8.x +export NODEJS_VER=v8.11.1 +export NODE_PATH="$GREENLOCK_PATH/lib/node_modules" +export NPM_CONFIG_PREFIX="$GREENLOCK_PATH" +export PATH="$GREENLOCK_PATH/bin:$PATH" +sleep 1 +http_bash https://git.coolaj86.com/coolaj86/node-installer.sh/raw/branch/master/install.sh --no-dev-deps + +my_tree="master" +my_node="$GREENLOCK_PATH/bin/node" +my_npm="$my_node $GREENLOCK_PATH/bin/npm" +my_tmp="$GREENLOCK_PATH/tmp" +mkdir -p $my_tmp + +echo "blah" +set +e +my_unzip=$(type -p unzip) +my_tar=$(type -p tar) +if [ -n "$my_unzip" ]; then + rm -f $my_tmp/greenlock-$my_tree.zip + http_get https://git.coolaj86.com/coolaj86/greenlock-cli.js/archive/$my_tree.zip $my_tmp/greenlock-$my_tree.zip + # -j is the same as --strip 1, it nixes the top-level directory + $my_unzip -j $my_tmp/greenlock-$my_tree.zip -d $GREENLOCK_PATH/ +elif [ -n "$my_tar" ]; then + rm -f $my_tmp/greenlock-$my_tree.tar.gz + http_get https://git.coolaj86.com/coolaj86/greenlock-cli.js/archive/$my_tree.tar.gz $my_tmp/greenlock-$my_tree.tar.gz + ls -lah $my_tmp/greenlock-$my_tree.tar.gz + $my_tar -xzf $my_tmp/greenlock-$my_tree.tar.gz --strip 1 -C $GREENLOCK_PATH/ +else + echo "Neither tar nor unzip found. Abort." + exit 13 +fi +set -e + +pushd $GREENLOCK_PATH + $my_npm install +popd + +#https://git.coolaj86.com/coolaj86/greenlock-cli.js.git +#https://git.coolaj86.com/coolaj86/greenlock-cli.js/archive/:tree:.tar.gz +#https://git.coolaj86.com/coolaj86/greenlock-cli.js/archive/:tree:.zip