From 6eec8d56bc83ea652a7c2d0484b7d6afa510dd78 Mon Sep 17 00:00:00 2001 From: David Dollar Date: Wed, 20 Nov 2019 19:45:34 -0500 Subject: [PATCH] move installers inside repo (#20) --- LICENSE | 174 ++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- README.md | 9 +++ install/.gitignore | 3 + install/README.md | 37 +++++++++ install/aws/README.md | 18 +++++ install/aws/main.tf | 41 ++++++++++ install/azure/README.md | 18 +++++ install/azure/main.tf | 40 +++++++++ install/do/README.md | 20 +++++ install/do/main.tf | 69 ++++++++++++++++ install/gcp/README.md | 28 +++++++ install/gcp/main.tf | 62 ++++++++++++++ 13 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 install/.gitignore create mode 100644 install/README.md create mode 100644 install/aws/README.md create mode 100644 install/aws/main.tf create mode 100644 install/azure/README.md create mode 100644 install/azure/main.tf create mode 100644 install/do/README.md create mode 100644 install/do/main.tf create mode 100644 install/gcp/README.md create mode 100644 install/gcp/main.tf diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..895657b --- /dev/null +++ b/LICENSE @@ -0,0 +1,174 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. \ No newline at end of file diff --git a/Makefile b/Makefile index d16099d..d35541f 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ package: release: test -n "$(VERSION)" # VERSION git tag $(VERSION) -m $(VERSION) - git push + git push origin refs/tags/$(VERSION) test: env TEST=true go test -covermode atomic -coverprofile coverage.txt -mod=vendor ./... diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5a6158 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# convox + +## Installation + +See the README in the [install](install) subdirectory for installation instructions. + +## License + +[Apache 2.0](LICENSE) \ No newline at end of file diff --git a/install/.gitignore b/install/.gitignore new file mode 100644 index 0000000..9fa2e71 --- /dev/null +++ b/install/.gitignore @@ -0,0 +1,3 @@ +.terraform +*.tfstate* +terraform.tfvars diff --git a/install/README.md b/install/README.md new file mode 100644 index 0000000..642bd97 --- /dev/null +++ b/install/README.md @@ -0,0 +1,37 @@ +# Convox Installer + +[Convox Rack](https://github.com/convox/convox) is an open-source PaaS based on Kubernetes. + +For more information you can check out the following resources: + +- [Homepage](https://convox.com) +- [Getting Started Guide](https://docs.convox.com/introduction/getting-started) +- [FAQ](https://docs.convox.com/introduction/faq) +- [Community Forums](https://community.convox.com/) + +## Installation + +Convox uses [Terraform](https://www.terraform.io/) for installation. + +Go into the relevant subdirectory of this repository and follow the instructions in the `README`: + +| Cloud Provider | Subdirectory | +|:--------------------|:-----------------| +| Amazon Web Services | [aws](aws) | +| Azure | [azure](azure) | +| Digital Ocean | [do](do) | +| Google Cloud | [gcp](gcp) | + +## Features + +* [Build and Release Management](https://docs.convox.com/deployment/builds) +* [Secrets Management](https://docs.convox.com/application/environment) +* [Resource Management](https://docs.convox.com/use-cases/resources) \(Postgres/Redis/etc..\) +* [Automated Rollbacks](https://docs.convox.com/deployment/rolling-back) +* [Autoscaling](https://docs.convox.com/deployment/scaling) +* [Timers/Cron Jobs](https://docs.convox.com/application/timers) +* [One-off Commands](https://docs.convox.com/management/one-off-commands) + +## License + +Apache 2.0 diff --git a/install/aws/README.md b/install/aws/README.md new file mode 100644 index 0000000..cfb2558 --- /dev/null +++ b/install/aws/README.md @@ -0,0 +1,18 @@ +# Convox Rack on AWS + +## Initial Setup + +- [Install the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) +- [Configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) + +## Install Convox + +- Clone this repository and switch to the directory containing this `README` +- Run `terraform init` +- Run `terraform apply` + +## Convox CLI Setup + +- [Install the Convox CLI](https://docs.convox.com/introduction/installation) +- Run `export RACK_URL=$(terraform output rack_url)` +- Run `convox rack` to ensure that your CLI is connected to your new Rack \ No newline at end of file diff --git a/install/aws/main.tf b/install/aws/main.tf new file mode 100644 index 0000000..467567a --- /dev/null +++ b/install/aws/main.tf @@ -0,0 +1,41 @@ +variable "name" { + description = "rack name" + default = "convox" +} + +variable "node_type" { + description = "machine type of the cluster nodes" + default = "t3.small" +} + +variable "release" { + description = "convox release version to install" + default = "" +} + +variable "region" { + description = "aws region in which to install the rack" + default = "us-east-1" +} + +provider "aws" { + version = "~> 2.22" + + region = var.region +} + +module "system" { + source = "../../terraform/system/aws" + + name = var.name + node_type = var.node_type + release = var.release + + providers = { + aws = aws + } +} + +output "rack_url" { + value = module.system.api +} diff --git a/install/azure/README.md b/install/azure/README.md new file mode 100644 index 0000000..be5bede --- /dev/null +++ b/install/azure/README.md @@ -0,0 +1,18 @@ +# Convox Rack on Azure + +## Initial Setup + +- [Install the Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest) +- Run `az login` + +## Install Convox + +- Clone this repository and switch to the directory containing this `README` +- Run `terraform init` +- Run `terraform apply` + +## Convox CLI Setup + +- [Install the Convox CLI](https://docs.convox.com/introduction/installation) +- Run `export RACK_URL=$(terraform output rack_url)` +- Run `convox rack` to ensure that your CLI is connected to your new Rack diff --git a/install/azure/main.tf b/install/azure/main.tf new file mode 100644 index 0000000..cb27648 --- /dev/null +++ b/install/azure/main.tf @@ -0,0 +1,40 @@ +variable "name" { + description = "rack name" + default = "convox" +} + +variable "node_type" { + description = "machine type of the cluster nodes" + default = "Standard_D1_v2" +} + +variable "release" { + description = "convox release version to install" + default = "" +} + +variable "region" { + description = "region in which to install the rack" + default = "nyc3" +} + +provider "azurerm" { + version = "~> 1.36" +} + +module "system" { + source = "../../terraform/system/azure" + + providers = { + azurerm = azurerm + } + + name = var.name + node_type = var.node_type + release = var.release + region = var.region +} + +output "rack_url" { + value = module.system.api +} diff --git a/install/do/README.md b/install/do/README.md new file mode 100644 index 0000000..5ba35be --- /dev/null +++ b/install/do/README.md @@ -0,0 +1,20 @@ +# Convox Rack on Digital Ocean + +## Initial Setup + +- Log in to your Digital Ocean Dashboard +- Go to https://cloud.digitalocean.com/account/api/tokens +- Generate a new **Personal Access Token** and **Spaces Access Key** +- Note these credentials + +## Install Convox + +- Clone this repository and switch to the directory containing this `README` +- Run `terraform init` +- Run `terraform apply` + +## Convox CLI Setup + +- [Install the Convox CLI](https://docs.convox.com/introduction/installation) +- Run `export RACK_URL=$(terraform output rack_url)` +- Run `convox rack` to ensure that your CLI is connected to your new Rack diff --git a/install/do/main.tf b/install/do/main.tf new file mode 100644 index 0000000..d256520 --- /dev/null +++ b/install/do/main.tf @@ -0,0 +1,69 @@ +variable "access_id" { + description = "spaces access id" + type = "string" +} + +variable "name" { + description = "rack name" + default = "convox" +} + +variable "node_type" { + description = "machine type of the cluster nodes" + default = "s-1vcpu-2gb" +} + +variable "release" { + description = "convox release version to install" + default = "" +} + +variable "region" { + description = "region in which to install the rack" + default = "nyc3" +} + +variable "registry_disk" { + description = "size of the registry disk volume" + default = "50Gi" +} + +variable "secret_key" { + description = "spaces secret key" + type = "string" +} + +variable "token" { + description = "digital ocean api token" + type = "string" +} + +provider "digitalocean" { + version = "~> 1.9" + + token = var.token + + spaces_access_id = var.access_id + spaces_secret_key = var.secret_key +} + +module "system" { + source = "../../terraform/system/do" + + access_id = var.access_id + name = var.name + node_type = var.node_type + release = var.release + region = var.region + registry_disk = var.registry_disk + secret_key = var.secret_key + token = var.token + + providers = { + digitalocean = digitalocean + } +} + +output "rack_url" { + value = module.system.api +} diff --git a/install/gcp/README.md b/install/gcp/README.md new file mode 100644 index 0000000..606bca8 --- /dev/null +++ b/install/gcp/README.md @@ -0,0 +1,28 @@ +# Convox Rack on GCP + +## Initial Setup + +- Go to your GCP Dashboard +- Create a new project +- Note the ID of the project +- Go to https://console.cloud.google.com/apis/credentials/serviceaccountkey +- Ensure you have your new project selected from the dropdown +- Select **New Service Account** +- Give it a name like `terraform` +- Give it the **Project Owner** role +- Select key type **JSON** +- Click **Create** +- Download the credential file to `~/.config/gcloud/terraform.json` + +## Install Convox + +- Clone this repository and switch to the directory containing this `README` +- Run `terraform init` +- Run `terraform apply -target module.system.module.project` to enable necessary services in your project +- Run `terraform apply` + +## Convox CLI Setup + +- [Install the Convox CLI](https://docs.convox.com/introduction/installation) +- Run `export RACK_URL=$(terraform output rack_url)` +- Run `convox rack` to ensure that your CLI is connected to your new Rack diff --git a/install/gcp/main.tf b/install/gcp/main.tf new file mode 100644 index 0000000..86a42e0 --- /dev/null +++ b/install/gcp/main.tf @@ -0,0 +1,62 @@ +variable "credentials" { + description = "path to credentials, create at https://console.cloud.google.com/apis/credentials/serviceaccountkey" + default = "~/.config/gcloud/terraform.json" +} + +variable "name" { + description = "rack name" + default = "convox" +} + +variable "node_type" { + description = "machine type of the cluster nodes" + default = "n1-standard-1" +} + +variable "project" { + description = "id of gcp project in which to install the rack" + type = "string" +} + +variable "release" { + description = "convox release version to install" + default = "" +} + +variable "region" { + description = "gcp region in which to install the rack" + default = "us-east1" +} + +provider "google" { + version = "~> 2.19" + + credentials = pathexpand(var.credentials) + project = var.project + region = var.region +} + +provider "google-beta" { + version = "~> 2.19" + + credentials = pathexpand(var.credentials) + project = var.project + region = var.region +} + +module "system" { + source = "../../terraform/system/gcp" + + name = var.name + node_type = var.node_type + release = var.release + + providers = { + google = google + google-beta = google-beta + } +} + +output "rack_url" { + value = module.system.api +}