From 5bf213d873d639708f332f0b5b111209f90c5379 Mon Sep 17 00:00:00 2001 From: troymc Date: Tue, 15 Nov 2016 16:20:18 +0100 Subject: [PATCH 1/2] Removed api_endpoint from HTTP API docs & wrote how API Root URL is truly determined --- .../http-client-server-api.rst | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/server/source/drivers-clients/http-client-server-api.rst b/docs/server/source/drivers-clients/http-client-server-api.rst index f50b4f98..d5c2d872 100644 --- a/docs/server/source/drivers-clients/http-client-server-api.rst +++ b/docs/server/source/drivers-clients/http-client-server-api.rst @@ -26,17 +26,18 @@ details, see the "server" settings ("bind", "workers" and "threads") in <../server-reference/configuration>`. -API Root --------- +API Root URL +------------ -If you send an HTTP GET request to e.g. ``http://localhost:9984`` (with no -``/api/v1/`` on the end), then you should get an HTTP response with something -like the following in the body: +If you send an HTTP GET request to e.g. ``http://localhost:9984`` +or ``http://apihosting4u.net:9984`` +(with no ``/api/v1/`` on the end), +then you should get an HTTP response +with something like the following in the body: .. code-block:: json { - "api_endpoint": "http://localhost:9984/api/v1", "keyring": [ "6qHyZew94NMmUTYyHnkZsB8cxJYuRNEiEpXHe1ih9QX3", "AdDuyrTyjrDt935YnFu4VBCVDhHtY2Y6rcy7x2TFeiRi" @@ -46,6 +47,25 @@ like the following in the body: "version": "0.6.0" } +If the API endpoint is publicly-accessible, +then the public API Root URL is determined as follows: + +- The public IP address (like 12.34.56.78) + is the public IP address of the machine exposing + the HTTP API to the public internet (e.g. either the machine hosting + Gunicorn or the machine running the reverse proxy such as Nginx). + It's determined by AWS, Azure, Rackspace, or whoever is hosting the machine. + +- The DNS hostname (like apihosting4u.net) is determined by DNS records, + such as an "A Record" associating apihosting4u.net with 12.34.56.78 + +- The port (like 9984) is determined by the ``server.bind`` setting + if Gunicorn is exposed directly to the public Internet. + If a reverse proxy (like Nginx) is exposed directly to the public Internet + instead, then it could expose the HTTP API on whatever port it wants to. + (It should expose the HTTP API on port 9984, but it's not bound to do + that by anything other than convention.) + POST /transactions/ ------------------- From 29d783425ded487aec66d3a4f77c878735b4a2d2 Mon Sep 17 00:00:00 2001 From: troymc Date: Tue, 15 Nov 2016 17:05:09 +0100 Subject: [PATCH 2/2] Remove or comment-out the api_endpoint setting everywhere --- Dockerfile | 4 +++- bigchaindb/__init__.py | 1 - bigchaindb/web/views/info.py | 3 +-- deploy-cluster-aws/awsdeploy.sh | 4 +--- deploy-cluster-aws/clusterize_confiles.py | 3 --- docker-compose.yml | 4 +++- .../source/dev-and-test/setup-run-node.md | 1 - docs/server/source/nodes/setup-run-node.md | 1 - .../source/server-reference/configuration.md | 21 ------------------- tests/test_config_utils.py | 2 -- tests/web/test_info.py | 2 +- 11 files changed, 9 insertions(+), 37 deletions(-) diff --git a/Dockerfile b/Dockerfile index fafa42ae..c4c30789 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,9 @@ WORKDIR /data ENV BIGCHAINDB_CONFIG_PATH /data/.bigchaindb ENV BIGCHAINDB_SERVER_BIND 0.0.0.0:9984 -ENV BIGCHAINDB_API_ENDPOINT http://bigchaindb:9984/api/v1 +# BigchainDB Server doesn't need BIGCHAINDB_API_ENDPOINT any more +# but maybe our Docker or Docker Compose stuff does? +# ENV BIGCHAINDB_API_ENDPOINT http://bigchaindb:9984/api/v1 ENTRYPOINT ["bigchaindb", "--dev-start-rethinkdb", "--dev-allow-temp-keypair"] diff --git a/bigchaindb/__init__.py b/bigchaindb/__init__.py index dc31b148..5055a5d6 100644 --- a/bigchaindb/__init__.py +++ b/bigchaindb/__init__.py @@ -29,7 +29,6 @@ config = { 'port': 8125, 'rate': 0.01, }, - 'api_endpoint': os.environ.get('BIGCHAINDB_API_ENDPOINT') or 'http://localhost:9984/api/v1', 'backlog_reassign_delay': 30 } diff --git a/bigchaindb/web/views/info.py b/bigchaindb/web/views/info.py index 1ff6d30c..874f899d 100644 --- a/bigchaindb/web/views/info.py +++ b/bigchaindb/web/views/info.py @@ -20,6 +20,5 @@ def home(): 'software': 'BigchainDB', 'version': version.__version__, 'public_key': bigchaindb.config['keypair']['public'], - 'keyring': bigchaindb.config['keyring'], - 'api_endpoint': bigchaindb.config['api_endpoint'] + 'keyring': bigchaindb.config['keyring'] }) diff --git a/deploy-cluster-aws/awsdeploy.sh b/deploy-cluster-aws/awsdeploy.sh index caed6c9c..f7345e1c 100755 --- a/deploy-cluster-aws/awsdeploy.sh +++ b/deploy-cluster-aws/awsdeploy.sh @@ -155,7 +155,7 @@ if [ "$WHAT_TO_DEPLOY" == "servers" ]; then # bigchaindb installed, so bigchaindb configure can't be called) # Transform the config files in the confiles directory - # to have proper keyrings, api_endpoint values, etc. + # to have proper keyrings etc. if [ "$USE_KEYPAIRS_FILE" == "True" ]; then python clusterize_confiles.py -k confiles $NUM_NODES else @@ -179,8 +179,6 @@ if [ "$WHAT_TO_DEPLOY" == "servers" ]; then echo "To start BigchainDB on all the nodes, do: fab start_bigchaindb" else # Deploying clients - # The only thing to configure on clients is the api_endpoint - # It should be the public DNS name of a BigchainDB server fab send_client_confile:client_confile # Start sending load from the clients to the servers diff --git a/deploy-cluster-aws/clusterize_confiles.py b/deploy-cluster-aws/clusterize_confiles.py index f266fe75..fbbf0dd6 100644 --- a/deploy-cluster-aws/clusterize_confiles.py +++ b/deploy-cluster-aws/clusterize_confiles.py @@ -98,9 +98,6 @@ for i, filename in enumerate(conf_files): # Allow incoming server traffic from any IP address # to port 9984 conf_dict['server']['bind'] = '0.0.0.0:9984' - # Set the api_endpoint - conf_dict['api_endpoint'] = 'http://' + public_dns_names[i] + \ - ':9984/api/v1' # Delete the config file os.remove(file_path) diff --git a/docker-compose.yml b/docker-compose.yml index c30b69b4..2b38a64e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,9 @@ services: - ./pytest.ini:/usr/src/app/pytest.ini environment: BIGCHAINDB_DATABASE_HOST: rdb - BIGCHAINDB_API_ENDPOINT: http://bdb:9984/api/v1 +# BigchainDB Server doesn't need BIGCHAINDB_API_ENDPOINT any more +# but maybe our Docker or Docker Compose stuff does? +# BIGCHAINDB_API_ENDPOINT: http://bdb:9984/api/v1 BIGCHAINDB_SERVER_BIND: 0.0.0.0:9984 ports: - "9984" diff --git a/docs/server/source/dev-and-test/setup-run-node.md b/docs/server/source/dev-and-test/setup-run-node.md index 0b55d543..e577a755 100644 --- a/docs/server/source/dev-and-test/setup-run-node.md +++ b/docs/server/source/dev-and-test/setup-run-node.md @@ -91,7 +91,6 @@ should give you something like: ```bash { - "api_endpoint": "http://bdb:9984/api/v1", "keyring": [], "public_key": "Brx8g4DdtEhccsENzNNV6yvQHR8s9ebhKyXPFkWUXh5e", "software": "BigchainDB", diff --git a/docs/server/source/nodes/setup-run-node.md b/docs/server/source/nodes/setup-run-node.md index 443f5ec9..6b8a29b7 100644 --- a/docs/server/source/nodes/setup-run-node.md +++ b/docs/server/source/nodes/setup-run-node.md @@ -167,7 +167,6 @@ Edit the created config file: * Open `$HOME/.bigchaindb` (the created config file) in your text editor. * Change `"server": {"bind": "localhost:9984", ... }` to `"server": {"bind": "0.0.0.0:9984", ... }`. This makes it so traffic can come from any IP address to port 9984 (the HTTP Client-Server API port). -* Change `"api_endpoint": "http://localhost:9984/api/v1"` to `"api_endpoint": "http://your_api_hostname:9984/api/v1"` * Change `"keyring": []` to `"keyring": ["public_key_of_other_node_A", "public_key_of_other_node_B", "..."]` i.e. a list of the public keys of all the other nodes in the federation. The keyring should _not_ include your node's public key. For more information about the BigchainDB config file, see [Configuring a BigchainDB Node](configuration.html). diff --git a/docs/server/source/server-reference/configuration.md b/docs/server/source/server-reference/configuration.md index 41b0c2ca..57f5f4ed 100644 --- a/docs/server/source/server-reference/configuration.md +++ b/docs/server/source/server-reference/configuration.md @@ -17,7 +17,6 @@ For convenience, here's a list of all the relevant environment variables (docume `BIGCHAINDB_SERVER_BIND`
`BIGCHAINDB_SERVER_WORKERS`
`BIGCHAINDB_SERVER_THREADS`
-`BIGCHAINDB_API_ENDPOINT`
`BIGCHAINDB_STATSD_HOST`
`BIGCHAINDB_STATSD_PORT`
`BIGCHAINDB_STATSD_RATE`
@@ -140,26 +139,6 @@ export BIGCHAINDB_SERVER_THREADS=5 ``` -## api_endpoint - -`api_endpoint` is the URL where a BigchainDB client can get access to the HTTP client-server API. - -**Example using an environment variable** -```text -export BIGCHAINDB_API_ENDPOINT="http://localhost:9984/api/v1" -``` - -**Example config file snippet** -```js -"api_endpoint": "http://webserver.blocks587.net:9984/api/v1" -``` - -**Default value (from a config file)** -```js -"api_endpoint": "http://localhost:9984/api/v1" -``` - - ## statsd.host, statsd.port & statsd.rate These settings are used to configure where, and how often, [StatsD](https://github.com/etsy/statsd) should send data for [cluster monitoring](../clusters-feds/monitoring.html) purposes. `statsd.host` is the hostname of the monitoring server, where StatsD should send its data. `stats.port` is the port. `statsd.rate` is the fraction of transaction operations that should be sampled. It's a float between 0.0 and 1.0. diff --git a/tests/test_config_utils.py b/tests/test_config_utils.py index ea0a0528..ac972b4c 100644 --- a/tests/test_config_utils.py +++ b/tests/test_config_utils.py @@ -121,7 +121,6 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch): monkeypatch.setattr('bigchaindb.config_utils.file_config', lambda *args, **kwargs: file_config) monkeypatch.setattr('os.environ', {'BIGCHAINDB_DATABASE_NAME': 'test-dbname', 'BIGCHAINDB_DATABASE_PORT': '4242', - 'BIGCHAINDB_API_ENDPOINT': 'api://ipa', 'BIGCHAINDB_SERVER_BIND': '1.2.3.4:56', 'BIGCHAINDB_KEYRING': 'pubkey_0:pubkey_1:pubkey_2'}) @@ -151,7 +150,6 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch): 'port': 8125, 'rate': 0.01, }, - 'api_endpoint': 'api://ipa', 'backlog_reassign_delay': 5 } diff --git a/tests/web/test_info.py b/tests/web/test_info.py index 759600c5..4956bd29 100644 --- a/tests/web/test_info.py +++ b/tests/web/test_info.py @@ -1,4 +1,4 @@ -def test_api_endpoint_shows_basic_info(client): +def test_api_root_url_shows_basic_info(client): from bigchaindb import version res = client.get('/') assert res.json['software'] == 'BigchainDB'