From a9138dfa7c048bb8fc2a6086855459f95782ce43 Mon Sep 17 00:00:00 2001 From: troymc Date: Tue, 9 Aug 2016 17:30:30 +0200 Subject: [PATCH 1/5] docs: new docs about Chef Server setup: in general and on AWS --- docs/source/_static/chef_server_AMI.png | Bin 0 -> 38772 bytes docs/source/nodes/node-components.md | 4 +- docs/source/prod-node-setup-mgmt/index.rst | 6 +- .../prod-node-setup-mgmt/install-chef-dk.md | 6 +- docs/source/prod-node-setup-mgmt/overview.md | 19 ++++ .../setup-chef-server-aws.md | 87 ++++++++++++++++++ .../setup-chef-server-general.md | 18 ++++ 7 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 docs/source/_static/chef_server_AMI.png create mode 100644 docs/source/prod-node-setup-mgmt/overview.md create mode 100644 docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md create mode 100644 docs/source/prod-node-setup-mgmt/setup-chef-server-general.md diff --git a/docs/source/_static/chef_server_AMI.png b/docs/source/_static/chef_server_AMI.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0ee23be9e06d393ec049d143bdd139758706c3 GIT binary patch literal 38772 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 Q1O!~_Dq65gs8z(j0IU$1RsaA1 literal 0 HcmV?d00001 diff --git a/docs/source/nodes/node-components.md b/docs/source/nodes/node-components.md index a7b432ad..831c2583 100644 --- a/docs/source/nodes/node-components.md +++ b/docs/source/nodes/node-components.md @@ -12,6 +12,6 @@ In a production environment, a BigchainDB node can have several other components * nginx or similar, as a reverse proxy and/or load balancer for the web server * An NTP daemon running on all machines running BigchainDB code, and possibly other machines * A RethinkDB proxy server +* Scalable storage for RethinkDB (e.g. using RAID) * Monitoring software, to monitor all the machines in the node -* Maybe more, e.g. a configuration management server and agents on all machines - +* Maybe a configuration management (CM) server and CM agents on all machines diff --git a/docs/source/prod-node-setup-mgmt/index.rst b/docs/source/prod-node-setup-mgmt/index.rst index 63450bda..fc27dd1a 100644 --- a/docs/source/prod-node-setup-mgmt/index.rst +++ b/docs/source/prod-node-setup-mgmt/index.rst @@ -1,10 +1,10 @@ -.. You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - Production Node Setup & Management ================================== .. toctree:: :maxdepth: 1 + overview + setup-chef-server-general + setup-chef-server-aws install-chef-dk diff --git a/docs/source/prod-node-setup-mgmt/install-chef-dk.md b/docs/source/prod-node-setup-mgmt/install-chef-dk.md index 09ae44ae..190d5890 100644 --- a/docs/source/prod-node-setup-mgmt/install-chef-dk.md +++ b/docs/source/prod-node-setup-mgmt/install-chef-dk.md @@ -1,5 +1,7 @@ -# Install Chef Dev Kit +# Tips to Install the Chef Dev Kit -TODO +The Chef Development Kit (often written Chef DK or ChefDK) is something you install on the workstation that you intend to use for deploying and managing a BigchainDB production node. It can be installed on Windows, Mac OS X, and many Linux distributions. +The official Chef documentation has [a page about installing Chef DK](https://docs.chef.io/install_dk.html), so we recommend you follow that. +Coming soon: tips for instaling Chef DK on Ubuntu. diff --git a/docs/source/prod-node-setup-mgmt/overview.md b/docs/source/prod-node-setup-mgmt/overview.md new file mode 100644 index 00000000..682396eb --- /dev/null +++ b/docs/source/prod-node-setup-mgmt/overview.md @@ -0,0 +1,19 @@ +# Overview + +Deploying and managing a production BigchainDB node is much more involved than working with a dev/test node: + +* There are more components in a production node; see [the page about node components](../nodes/node-components.html) +* Production nodes need more security +* Production nodes need monitoring +* Production nodes need maintenance, e.g. software upgrades, scaling + +Thankfully, there are tools to help! + +[Chef](https://www.chef.io/chef/) is a tool to provision machines, install software on those machines, manage the state of those machines, and more. (When we say "machines," we mean bare-metal servers, virtual machines or containers.) +BigchainDB node operators can use Chef (and related tools) to set up and manage the machines associated with their nodes. + +A note about terminology: In the world of Chef, a "node" is what we call a machine. In other words, a "BigchainDB node" may contain several "Chef nodes." + +Before you can deploy a production node, you have to know where the machines will be hosted, e.g. AWS, Azure, Cloud Provider X, or your corporate datacenter. You will need an account with that host so that you can provision machines there. + +The next step is to provision a machine and install Chef server on it. diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md new file mode 100644 index 00000000..5afba073 --- /dev/null +++ b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md @@ -0,0 +1,87 @@ +# Set Up Chef Server on AWS + +First, you need to get set up on AWS. See [the page about AWS Setup in the Appendices](../appendices/aws-setup.html). + +Chef Software, Inc. provides an official Chef Server AMI (Amazon Machine Image) on the AWS Marketplace. They also wrote [documentation about it](https://docs.chef.io/aws_marketplace.html). + +![Screenshot of Chef Server AMI page on AWS Marketplace](../_static/chef_server_AMI.png) + +You may notice that the product page is titled "Chef Server (First 5 Nodes Free)". Chef Server [is open source (Apache v2)](https://github.com/chef/chef-server/blob/master/LICENSE), so you may wonder why it would ever be non-free. The answer, we think, is that the AMI's license includes a fast-response support channel and some premium (non-open-source) features such as Chef Analytics, Chef Management Console and Chef Reporting. For the full answer, see the End User License Agreement linked-to on the product page (in AWS Marketplace). You can leave the premium features disabled if you don't want to pay for them. + +Five "nodes" (Chef nodes, i.e. machines other than the one running Chef Server) will be enough to build a basic BigchainDB Node, so this may be a good option. + +If you prefer to provision your own EC2 instance and install Chef Server on that, then see the options listed on the page titled [Set Up Chef Server (General)](setup-chef-server-general.html). + +Note that not all AWS regions are supported. The region you choose should also be used to host all the other machines in your BigchainDB node. + +If you decide to subscribe for the official Chef Server AMI, then here are some steps and tips: + +1. Go to the product page for "Chef Server (First 5 Nodes Free)" on the AWS Marketplace. + +2. Click **Continue** + +3. Select the latest version of Chef Server from the drop-down menu. + +4. Click **Accept Software Terms** + +5. You may not get an email, but in the AWS Marketplace website, if you click **Your Account** and **Manage your software subscriptions**, then your new subscription should be listed. + +6. For the Chef Server product, click **Launch more software** + +7. Click **Continue** on the Chef Server product page. + +8. This time around, the **Launch with EC2 Console** buttons should not be greyed out. Click the one for the region where you want to launch your Chef Server. + +9. On the "Step 2: Choose an Instance Type" page, the t2.medium instance type should suffice, but you can choose something bigger if you like. (The [Chef Server requirements are listed in the Chef documentation](https://docs.chef.io/chef_system_requirements.html#chef-server-title-on-premises). Look under "standalone deployment." Note that if you want to use Chef Analytics, you'll need more RAM.) + +10. Click **Next: Configure Instance Details** + +11. On the "Step 3: Configure Instance Details" page, you'll notice a red box around **IAM role** because "The AMI you have selected... requires an IAM role." Click **Create new IAM role** + +12. Click **Create New Role**, name it `EC2_AWSMarketplaceFullAccess` (or whatever you like), click **Next Step**, select "Amazon EC2", enter `AWSMarketplaceFullAccess` into the search field, check the box beside AWSMarketplaceFullAccess, click **Next Step**, and click **Create Role** + +13. Beside "Auto-assign Public IP" select "Enable" + +14. Beside "Enable termination protection", check the box beside "Protect against accidental termination" + +15. You can probably leave the other things on that page at their default values for now, but be sure to read what they mean. We'll revisit these instrutions in the future. In particular, it may be worthwhile (e.g. more secure) to create a special VPC and/or subnet for your BigchainDB node. + +16. Click **Next: Add Storage** + +17. As mentioned earlier, the [Chef Server requirements are listed in the Chef documentation](https://docs.chef.io/chef_system_requirements.html#chef-server-title-on-premises). Look under "standalone deployment." Note that 5 GB of free disk space is needed in `/opt` and another 5 GB is needed in `/var`. The operating system also needs some storage space. To be safe, 12 GB should be enough. You can ask Google to convert that to GiB: just search for "12 GB in GiB". The answer is: 11 GiB (approximately). + +18. You can probably get away with "Magnetic" storage (under "Volume Type"), rather than "General Purpose SSD (GP2)" (which is more expensive), because this Chef Server will only be dealing with a handful of machines, but we'll leave that decision up to you. + +19. Uncheck the box below "Delete on Termination." It's unlikely that the instance will get terminated, but if it is, it would be handy to have the associated storage still around to make it easier to figure out what happened, and to provide a starting point for recovery. + +20. Click **Next: Tag Instance** + +21. Give your Chef Server instance (machine) a Name tag like `Chef-Server`. + +22. Click **Next: Configure Security Group** + +23. Create a **new** security group named `chef-server-1`, with an appropriate description, and the following rules: + + * SSH - TCP - 22 - Anywhere - 0.0.0.0/0 + * HTTPS - TCP - 443 - Anywhere - 0.0.0.0/0 + * Custom TCP Rule - TCP - 8443 - Anywhere - 0.0.0.0/0 + +24. Click **Review and Launch** + +25. Review everything. If you want to change something, you can: Just click the **Previous** button in the lower right corner. + +26. Click **Launch** + +27. Select an existing key pair or create a new key pair? Create a new key pair. Name it `chef-server-key`. + +28. Click **Download Key Pair** and save it somewhere you'll remember. + +29. Click **Launch Instances** + + + + + +There is some [official AWS documentation about installing Chef Server on the AWS cloud](https://docs.aws.amazon.com/quickstart/latest/chef-server/welcome.html), but it's a bit dated and links to some out-of-date AWS Marketplace products. Nevertheless, you may find it useful to browse through that documentation because it explains what gets deployed. + + diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md new file mode 100644 index 00000000..329f0dae --- /dev/null +++ b/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md @@ -0,0 +1,18 @@ +# Set Up Chef Server (General) + +Chef Software, Inc., the company behind Chef, offers managed hosting of Chef Server ("Hosted Chef"), but we advise against using that. A BigchainDB cluster is supposed to be decentralized, and it wouldn't be very decentralized if all the nodes used Hosted Chef. + +Below are some ways to set up Chef Server, starting with the easiest. + +* If you intend to host your node on AWS, then see [the page about setting up Chef Server on AWS](setup-chef-server-aws.html). + +* If your hosting provider has a marketplace of images/snapshots (akin to AWS Marketplace), then search for "Chef" there. + +* Do a web search for "Chef Server \" and see what comes up. + +* Bootstrap the installation of Chef Server using Chef-Solo and the chef-server cookbook. The instructions are in the "Install Methods" section of [the chef-server cookbook page in Chef Supermarket](https://supermarket.chef.io/cookbooks/chef-server). + +* Follow the official Chef tutorial: [Install and configure Chef server using your hardware or cloud provider](https://learn.chef.io/install-and-manage-your-own-chef-server/linux/install-chef-server/install-chef-server-using-your-hardware/). + + +When done, make sure your installation of Chef Server is consistent with the official Chef documentation titled [Install Chef Server](https://docs.chef.io/install_server.html). From 725b12a0874fd21782ba44b94bd1d2ecfeab6c2f Mon Sep 17 00:00:00 2001 From: troymc Date: Wed, 10 Aug 2016 09:53:45 +0200 Subject: [PATCH 2/5] docs: added note about AWS OpsWorks --- docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md index 5afba073..7bd01e8d 100644 --- a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md +++ b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md @@ -82,6 +82,12 @@ If you decide to subscribe for the official Chef Server AMI, then here are some -There is some [official AWS documentation about installing Chef Server on the AWS cloud](https://docs.aws.amazon.com/quickstart/latest/chef-server/welcome.html), but it's a bit dated and links to some out-of-date AWS Marketplace products. Nevertheless, you may find it useful to browse through that documentation because it explains what gets deployed. +There is some [official AWS documentation about installing Chef Server on the AWS cloud](https://docs.aws.amazon.com/quickstart/latest/chef-server/welcome.html), but it's a bit dated and links to some out-of-date AWS Marketplace products. Nevertheless, you may want to browse that documentation because it explains what gets deployed. +**About AWS OpsWorks** +You might be tempted to use [AWS OpsWorks](https://aws.amazon.com/opsworks/) instead of setting up your own Chef Server etc. It's somewhat like a managed hosted version of Chef; one even uses Chef recipes with it. There are at least three problems though: + +1. Once you start using AWS OpsWorks, you're effectively locked in to AWS, because it has features that you can't move to another cloud hosting provider (e.g. "stacks," "layers," and deep integrations with other AWS services). +2. AWS Opsworks doesn't integrate with _all_ AWS services. +3. The team behind BigchainDB wants to avoid maintaining and documenting specialized operations tooling for each cloud provider. There might be _some_, but it should be minimial. From f2cf0135e25abcdada40ac45599f265c2cbdc6f8 Mon Sep 17 00:00:00 2001 From: troymc Date: Wed, 10 Aug 2016 10:23:14 +0200 Subject: [PATCH 3/5] docs: fixed broken link to Configuration Settings page --- docs/source/drivers-clients/http-client-server-api.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/drivers-clients/http-client-server-api.rst b/docs/source/drivers-clients/http-client-server-api.rst index 536c2f3d..e0b55260 100644 --- a/docs/source/drivers-clients/http-client-server-api.rst +++ b/docs/source/drivers-clients/http-client-server-api.rst @@ -7,9 +7,9 @@ When you start Bigchaindb using `bigchaindb start`, an HTTP API is exposed at th `http://localhost:9984/api/v1/ `_ -but that address can be changed by changing the "API endpoint" configuration setting (e.g. in a local config file). There's more information about setting the API endpoint in :doc:`the section about Configuring a BigchainDB Node <../nodes/configuration>`. +but that address can be changed by changing the "API endpoint" configuration setting (e.g. in a local config file). There's more information about setting the API endpoint in :doc:`the section about BigchainDB Configuration Settings <../server-reference/configuration>`. -There are other configuration settings related to the web server (serving the HTTP API). In particular, the default is for the web server socket to bind to `localhost:9984` but that can be changed (e.g. to `0.0.0.0:9984`). For more details, see the "server" settings ("bind", "workers" and "threads") in :doc:`the section about Configuring a BigchainDB Node <../nodes/configuration>`. +There are other configuration settings related to the web server (serving the HTTP API). In particular, the default is for the web server socket to bind to `localhost:9984` but that can be changed (e.g. to `0.0.0.0:9984`). For more details, see the "server" settings ("bind", "workers" and "threads") in :doc:`the section about BigchainDB Configuration Settings <../server-reference/configuration>`. The HTTP API currently exposes two endpoints, one to get information about a specific transaction, and one to push a new transaction to the BigchainDB cluster. From 7050d6fc06f03b706d2be7190c48407954b8b627 Mon Sep 17 00:00:00 2001 From: troymc Date: Wed, 10 Aug 2016 10:25:10 +0200 Subject: [PATCH 4/5] docs: moved testing-cluster-specific AWS setup instructions from Appendices to the page about deploying a testing cluster on AWS --- docs/source/appendices/aws-setup.md | 38 +------------------ .../clusters-feds/aws-testing-cluster.md | 32 +++++++++++++++- .../setup-chef-server-aws.md | 2 +- 3 files changed, 33 insertions(+), 39 deletions(-) diff --git a/docs/source/appendices/aws-setup.md b/docs/source/appendices/aws-setup.md index caae7339..8b7dcd6c 100644 --- a/docs/source/appendices/aws-setup.md +++ b/docs/source/appendices/aws-setup.md @@ -1,6 +1,6 @@ -# AWS Setup +# Basic AWS Setup -Before you can deploy a BigchainDB node or cluster on AWS, you must do a few things. +Before you can deploy anything on AWS, you must do a few things. ## Get an AWS Account @@ -36,37 +36,3 @@ Default output format [None]: [Press Enter] ``` This writes two files: `~/.aws/credentials` and `~/.aws/config`. AWS tools and packages look for those files. - - -## Get Enough Amazon Elastic IP Addresses - -You can skip this if you're deploying a single node. - -Our AWS cluster deployment scripts use elastic IP addresses (although that may change in the future). By default, AWS accounts get five elastic IP addresses. If you want to deploy a cluster with more than five nodes, then you will need more than five elastic IP addresses; you may have to apply for those; see [the AWS documentation on elastic IP addresses](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html). - - -## Create an Amazon EC2 Key Pair - -Go to the AWS EC2 Console and select "Key Pairs" in the left sidebar. Click the "Create Key Pair" button. Give it the name `bigchaindb`. You should be prompted to save a file named `bigchaindb.pem`. That file contains the RSA private key. (You can get the public key from the private key, so there's no need to send it separately.) - -If you're deploying a cluster, save the file in `bigchaindb/deploy-cluster-aws/pem/bigchaindb.pem`. - -If you're deploying a single node, save the file in `bigchaindb/deploy-node-aws/pem/bigchaindb.pem`. - -**You should not share your private key.** - - -## Create an Amazon EC2 Security Group - -Go to the AWS EC2 Console and select "Security Groups" in the left sidebar. Click the "Create Security Group" button. If you're deploying a cluster, give it the name `bigchaindb`, otherwise you can name it whatever you like. The description probably doesn't matter but we also put `bigchaindb` for that. - -If you're deploying a test cluster, then add these rules for Inbound traffic: - -* Type = All TCP, Protocol = TCP, Port Range = 0-65535, Source = 0.0.0.0/0 -* Type = SSH, Protocol = SSH, Port Range = 22, Source = 0.0.0.0/0 -* Type = All UDP, Protocol = UDP, Port Range = 0-65535, Source = 0.0.0.0/0 -* Type = All ICMP, Protocol = ICMP, Port Range = 0-65535, Source = 0.0.0.0/0 - -**Note: These rules are extremely lax! They're meant to make testing easy.** For example, Source = 0.0.0.0/0 is [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) for "allow this traffic to come from _any_ IP address." - -If you're deploying a single node, then see [the BigchainDB Notes for Firewall Setup](firewall-notes.html) and [the AWS documentation about security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). diff --git a/docs/source/clusters-feds/aws-testing-cluster.md b/docs/source/clusters-feds/aws-testing-cluster.md index bfc4ddca..59277ac4 100644 --- a/docs/source/clusters-feds/aws-testing-cluster.md +++ b/docs/source/clusters-feds/aws-testing-cluster.md @@ -32,9 +32,37 @@ What did you just install? * [The aws-cli package](https://pypi.python.org/pypi/awscli), which is an AWS Command Line Interface (CLI). -## AWS Setup +## Basic AWS Setup -See the page about [AWS Setup](../appendices/aws-setup.html) in the Appendices. +See the page about [basic AWS Setup](../appendices/aws-setup.html) in the Appendices. + + +## Get Enough Amazon Elastic IP Addresses + +The AWS cluster deployment scripts use elastic IP addresses (although that may change in the future). By default, AWS accounts get five elastic IP addresses. If you want to deploy a cluster with more than five nodes, then you will need more than five elastic IP addresses; you may have to apply for those; see [the AWS documentation on elastic IP addresses](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html). + + +## Create an Amazon EC2 Key Pair + +Go to the AWS EC2 Console and select "Key Pairs" in the left sidebar. Click the "Create Key Pair" button. Give it the name `bigchaindb`. You should be prompted to save a file named `bigchaindb.pem`. That file contains the RSA private key. (You can get the public key from the private key, so there's no need to send it separately.) + +Save the file in `bigchaindb/deploy-cluster-aws/pem/bigchaindb.pem`. + +**You should not share your private key.** + + +## Create an Amazon EC2 Security Group + +Go to the AWS EC2 Console and select "Security Groups" in the left sidebar. Click the "Create Security Group" button. Name it `bigchaindb`. The description probably doesn't matter; you can also put `bigchaindb` for that. + +Add these rules for Inbound traffic: + +* Type = All TCP, Protocol = TCP, Port Range = 0-65535, Source = 0.0.0.0/0 +* Type = SSH, Protocol = SSH, Port Range = 22, Source = 0.0.0.0/0 +* Type = All UDP, Protocol = UDP, Port Range = 0-65535, Source = 0.0.0.0/0 +* Type = All ICMP, Protocol = ICMP, Port Range = 0-65535, Source = 0.0.0.0/0 + +**Note: These rules are extremely lax! They're meant to make testing easy.** For example, Source = 0.0.0.0/0 is [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) for "allow this traffic to come from _any_ IP address." ## Deploy a BigchainDB Monitor diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md index 7bd01e8d..498fbff4 100644 --- a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md +++ b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md @@ -1,6 +1,6 @@ # Set Up Chef Server on AWS -First, you need to get set up on AWS. See [the page about AWS Setup in the Appendices](../appendices/aws-setup.html). +First, you need to get set up on AWS. See the page about [basic AWS Setup](../appendices/aws-setup.html) in the Appendices. Chef Software, Inc. provides an official Chef Server AMI (Amazon Machine Image) on the AWS Marketplace. They also wrote [documentation about it](https://docs.chef.io/aws_marketplace.html). From 51f27269f5205de7fecad46d8765f4b87639792d Mon Sep 17 00:00:00 2001 From: troymc Date: Wed, 10 Aug 2016 15:06:29 +0200 Subject: [PATCH 5/5] docs: revised prod. node docs; moving away from Chef --- docs/source/_static/chef_server_AMI.png | Bin 38772 -> 0 bytes docs/source/prod-node-setup-mgmt/index.rst | 4 +- .../prod-node-setup-mgmt/install-chef-dk.md | 7 -- docs/source/prod-node-setup-mgmt/overview.md | 9 +- .../setup-chef-server-aws.md | 93 ------------------ .../setup-chef-server-general.md | 18 ---- 6 files changed, 2 insertions(+), 129 deletions(-) delete mode 100644 docs/source/_static/chef_server_AMI.png delete mode 100644 docs/source/prod-node-setup-mgmt/install-chef-dk.md delete mode 100644 docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md delete mode 100644 docs/source/prod-node-setup-mgmt/setup-chef-server-general.md diff --git a/docs/source/_static/chef_server_AMI.png b/docs/source/_static/chef_server_AMI.png deleted file mode 100644 index 7c0ee23be9e06d393ec049d143bdd139758706c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38772 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 Q1O!~_Dq65gs8z(j0IU$1RsaA1 diff --git a/docs/source/prod-node-setup-mgmt/index.rst b/docs/source/prod-node-setup-mgmt/index.rst index fc27dd1a..025b821e 100644 --- a/docs/source/prod-node-setup-mgmt/index.rst +++ b/docs/source/prod-node-setup-mgmt/index.rst @@ -5,6 +5,4 @@ Production Node Setup & Management :maxdepth: 1 overview - setup-chef-server-general - setup-chef-server-aws - install-chef-dk + diff --git a/docs/source/prod-node-setup-mgmt/install-chef-dk.md b/docs/source/prod-node-setup-mgmt/install-chef-dk.md deleted file mode 100644 index 190d5890..00000000 --- a/docs/source/prod-node-setup-mgmt/install-chef-dk.md +++ /dev/null @@ -1,7 +0,0 @@ -# Tips to Install the Chef Dev Kit - -The Chef Development Kit (often written Chef DK or ChefDK) is something you install on the workstation that you intend to use for deploying and managing a BigchainDB production node. It can be installed on Windows, Mac OS X, and many Linux distributions. - -The official Chef documentation has [a page about installing Chef DK](https://docs.chef.io/install_dk.html), so we recommend you follow that. - -Coming soon: tips for instaling Chef DK on Ubuntu. diff --git a/docs/source/prod-node-setup-mgmt/overview.md b/docs/source/prod-node-setup-mgmt/overview.md index 682396eb..d0376dce 100644 --- a/docs/source/prod-node-setup-mgmt/overview.md +++ b/docs/source/prod-node-setup-mgmt/overview.md @@ -9,11 +9,4 @@ Deploying and managing a production BigchainDB node is much more involved than w Thankfully, there are tools to help! -[Chef](https://www.chef.io/chef/) is a tool to provision machines, install software on those machines, manage the state of those machines, and more. (When we say "machines," we mean bare-metal servers, virtual machines or containers.) -BigchainDB node operators can use Chef (and related tools) to set up and manage the machines associated with their nodes. - -A note about terminology: In the world of Chef, a "node" is what we call a machine. In other words, a "BigchainDB node" may contain several "Chef nodes." - -Before you can deploy a production node, you have to know where the machines will be hosted, e.g. AWS, Azure, Cloud Provider X, or your corporate datacenter. You will need an account with that host so that you can provision machines there. - -The next step is to provision a machine and install Chef server on it. +This section explains how to use various tools to deploy and manage a production node. diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md deleted file mode 100644 index 498fbff4..00000000 --- a/docs/source/prod-node-setup-mgmt/setup-chef-server-aws.md +++ /dev/null @@ -1,93 +0,0 @@ -# Set Up Chef Server on AWS - -First, you need to get set up on AWS. See the page about [basic AWS Setup](../appendices/aws-setup.html) in the Appendices. - -Chef Software, Inc. provides an official Chef Server AMI (Amazon Machine Image) on the AWS Marketplace. They also wrote [documentation about it](https://docs.chef.io/aws_marketplace.html). - -![Screenshot of Chef Server AMI page on AWS Marketplace](../_static/chef_server_AMI.png) - -You may notice that the product page is titled "Chef Server (First 5 Nodes Free)". Chef Server [is open source (Apache v2)](https://github.com/chef/chef-server/blob/master/LICENSE), so you may wonder why it would ever be non-free. The answer, we think, is that the AMI's license includes a fast-response support channel and some premium (non-open-source) features such as Chef Analytics, Chef Management Console and Chef Reporting. For the full answer, see the End User License Agreement linked-to on the product page (in AWS Marketplace). You can leave the premium features disabled if you don't want to pay for them. - -Five "nodes" (Chef nodes, i.e. machines other than the one running Chef Server) will be enough to build a basic BigchainDB Node, so this may be a good option. - -If you prefer to provision your own EC2 instance and install Chef Server on that, then see the options listed on the page titled [Set Up Chef Server (General)](setup-chef-server-general.html). - -Note that not all AWS regions are supported. The region you choose should also be used to host all the other machines in your BigchainDB node. - -If you decide to subscribe for the official Chef Server AMI, then here are some steps and tips: - -1. Go to the product page for "Chef Server (First 5 Nodes Free)" on the AWS Marketplace. - -2. Click **Continue** - -3. Select the latest version of Chef Server from the drop-down menu. - -4. Click **Accept Software Terms** - -5. You may not get an email, but in the AWS Marketplace website, if you click **Your Account** and **Manage your software subscriptions**, then your new subscription should be listed. - -6. For the Chef Server product, click **Launch more software** - -7. Click **Continue** on the Chef Server product page. - -8. This time around, the **Launch with EC2 Console** buttons should not be greyed out. Click the one for the region where you want to launch your Chef Server. - -9. On the "Step 2: Choose an Instance Type" page, the t2.medium instance type should suffice, but you can choose something bigger if you like. (The [Chef Server requirements are listed in the Chef documentation](https://docs.chef.io/chef_system_requirements.html#chef-server-title-on-premises). Look under "standalone deployment." Note that if you want to use Chef Analytics, you'll need more RAM.) - -10. Click **Next: Configure Instance Details** - -11. On the "Step 3: Configure Instance Details" page, you'll notice a red box around **IAM role** because "The AMI you have selected... requires an IAM role." Click **Create new IAM role** - -12. Click **Create New Role**, name it `EC2_AWSMarketplaceFullAccess` (or whatever you like), click **Next Step**, select "Amazon EC2", enter `AWSMarketplaceFullAccess` into the search field, check the box beside AWSMarketplaceFullAccess, click **Next Step**, and click **Create Role** - -13. Beside "Auto-assign Public IP" select "Enable" - -14. Beside "Enable termination protection", check the box beside "Protect against accidental termination" - -15. You can probably leave the other things on that page at their default values for now, but be sure to read what they mean. We'll revisit these instrutions in the future. In particular, it may be worthwhile (e.g. more secure) to create a special VPC and/or subnet for your BigchainDB node. - -16. Click **Next: Add Storage** - -17. As mentioned earlier, the [Chef Server requirements are listed in the Chef documentation](https://docs.chef.io/chef_system_requirements.html#chef-server-title-on-premises). Look under "standalone deployment." Note that 5 GB of free disk space is needed in `/opt` and another 5 GB is needed in `/var`. The operating system also needs some storage space. To be safe, 12 GB should be enough. You can ask Google to convert that to GiB: just search for "12 GB in GiB". The answer is: 11 GiB (approximately). - -18. You can probably get away with "Magnetic" storage (under "Volume Type"), rather than "General Purpose SSD (GP2)" (which is more expensive), because this Chef Server will only be dealing with a handful of machines, but we'll leave that decision up to you. - -19. Uncheck the box below "Delete on Termination." It's unlikely that the instance will get terminated, but if it is, it would be handy to have the associated storage still around to make it easier to figure out what happened, and to provide a starting point for recovery. - -20. Click **Next: Tag Instance** - -21. Give your Chef Server instance (machine) a Name tag like `Chef-Server`. - -22. Click **Next: Configure Security Group** - -23. Create a **new** security group named `chef-server-1`, with an appropriate description, and the following rules: - - * SSH - TCP - 22 - Anywhere - 0.0.0.0/0 - * HTTPS - TCP - 443 - Anywhere - 0.0.0.0/0 - * Custom TCP Rule - TCP - 8443 - Anywhere - 0.0.0.0/0 - -24. Click **Review and Launch** - -25. Review everything. If you want to change something, you can: Just click the **Previous** button in the lower right corner. - -26. Click **Launch** - -27. Select an existing key pair or create a new key pair? Create a new key pair. Name it `chef-server-key`. - -28. Click **Download Key Pair** and save it somewhere you'll remember. - -29. Click **Launch Instances** - - - - - -There is some [official AWS documentation about installing Chef Server on the AWS cloud](https://docs.aws.amazon.com/quickstart/latest/chef-server/welcome.html), but it's a bit dated and links to some out-of-date AWS Marketplace products. Nevertheless, you may want to browse that documentation because it explains what gets deployed. - -**About AWS OpsWorks** - -You might be tempted to use [AWS OpsWorks](https://aws.amazon.com/opsworks/) instead of setting up your own Chef Server etc. It's somewhat like a managed hosted version of Chef; one even uses Chef recipes with it. There are at least three problems though: - -1. Once you start using AWS OpsWorks, you're effectively locked in to AWS, because it has features that you can't move to another cloud hosting provider (e.g. "stacks," "layers," and deep integrations with other AWS services). -2. AWS Opsworks doesn't integrate with _all_ AWS services. -3. The team behind BigchainDB wants to avoid maintaining and documenting specialized operations tooling for each cloud provider. There might be _some_, but it should be minimial. diff --git a/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md b/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md deleted file mode 100644 index 329f0dae..00000000 --- a/docs/source/prod-node-setup-mgmt/setup-chef-server-general.md +++ /dev/null @@ -1,18 +0,0 @@ -# Set Up Chef Server (General) - -Chef Software, Inc., the company behind Chef, offers managed hosting of Chef Server ("Hosted Chef"), but we advise against using that. A BigchainDB cluster is supposed to be decentralized, and it wouldn't be very decentralized if all the nodes used Hosted Chef. - -Below are some ways to set up Chef Server, starting with the easiest. - -* If you intend to host your node on AWS, then see [the page about setting up Chef Server on AWS](setup-chef-server-aws.html). - -* If your hosting provider has a marketplace of images/snapshots (akin to AWS Marketplace), then search for "Chef" there. - -* Do a web search for "Chef Server \" and see what comes up. - -* Bootstrap the installation of Chef Server using Chef-Solo and the chef-server cookbook. The instructions are in the "Install Methods" section of [the chef-server cookbook page in Chef Supermarket](https://supermarket.chef.io/cookbooks/chef-server). - -* Follow the official Chef tutorial: [Install and configure Chef server using your hardware or cloud provider](https://learn.chef.io/install-and-manage-your-own-chef-server/linux/install-chef-server/install-chef-server-using-your-hardware/). - - -When done, make sure your installation of Chef Server is consistent with the official Chef documentation titled [Install Chef Server](https://docs.chef.io/install_server.html).