mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Support for advertised host, port, scheme for Websockets (#1703)
* Support for advertised host, port, scheme for Websockets * Update docs * Add a docstring * Set env vars in Dockerfile-dev too
This commit is contained in:
parent
74b4628b75
commit
3ec4153375
@ -14,5 +14,9 @@ ENV BIGCHAINDB_CONFIG_PATH /data/.bigchaindb
|
|||||||
ENV BIGCHAINDB_SERVER_BIND 0.0.0.0:9984
|
ENV BIGCHAINDB_SERVER_BIND 0.0.0.0:9984
|
||||||
ENV BIGCHAINDB_WSSERVER_HOST 0.0.0.0
|
ENV BIGCHAINDB_WSSERVER_HOST 0.0.0.0
|
||||||
ENV BIGCHAINDB_WSSERVER_SCHEME ws
|
ENV BIGCHAINDB_WSSERVER_SCHEME ws
|
||||||
|
|
||||||
|
ENV BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME ws
|
||||||
|
ENV BIGCHAINDB_WSSERVER_ADVERTISED_HOST 0.0.0.0
|
||||||
|
ENV BIGCHAINDB_WSSERVER_ADVERTISED_PORT 9985
|
||||||
ENTRYPOINT ["bigchaindb"]
|
ENTRYPOINT ["bigchaindb"]
|
||||||
CMD ["start"]
|
CMD ["start"]
|
||||||
|
@ -12,6 +12,9 @@ ENV BIGCHAINDB_SERVER_BIND 0.0.0.0:9984
|
|||||||
ENV BIGCHAINDB_WSSERVER_HOST 0.0.0.0
|
ENV BIGCHAINDB_WSSERVER_HOST 0.0.0.0
|
||||||
ENV BIGCHAINDB_WSSERVER_SCHEME ws
|
ENV BIGCHAINDB_WSSERVER_SCHEME ws
|
||||||
|
|
||||||
|
ENV BIGCHAINDB_WSSERVER_ADVERTISED_HOST 0.0.0.0
|
||||||
|
ENV BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME ws
|
||||||
|
|
||||||
ARG backend
|
ARG backend
|
||||||
|
|
||||||
RUN mkdir -p /usr/src/app
|
RUN mkdir -p /usr/src/app
|
||||||
|
@ -72,6 +72,9 @@ config = {
|
|||||||
'scheme': os.environ.get('BIGCHAINDB_WSSERVER_SCHEME') or 'ws',
|
'scheme': os.environ.get('BIGCHAINDB_WSSERVER_SCHEME') or 'ws',
|
||||||
'host': os.environ.get('BIGCHAINDB_WSSERVER_HOST') or 'localhost',
|
'host': os.environ.get('BIGCHAINDB_WSSERVER_HOST') or 'localhost',
|
||||||
'port': int(os.environ.get('BIGCHAINDB_WSSERVER_PORT', 9985)),
|
'port': int(os.environ.get('BIGCHAINDB_WSSERVER_PORT', 9985)),
|
||||||
|
'advertised_scheme': os.environ.get('BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME') or 'ws',
|
||||||
|
'advertised_host': os.environ.get('BIGCHAINDB_WSSERVER_ADVERTISED_HOST') or 'localhost',
|
||||||
|
'advertised_port': int(os.environ.get('BIGCHAINDB_WSSERVER_ADVERTISED_PORT', 9985)),
|
||||||
},
|
},
|
||||||
'database': _database_map[
|
'database': _database_map[
|
||||||
os.environ.get('BIGCHAINDB_DATABASE_BACKEND', 'rethinkdb')
|
os.environ.get('BIGCHAINDB_DATABASE_BACKEND', 'rethinkdb')
|
||||||
|
@ -27,8 +27,13 @@ def make_error(status_code, message=None):
|
|||||||
|
|
||||||
|
|
||||||
def base_ws_uri():
|
def base_ws_uri():
|
||||||
"""Base websocket uri."""
|
"""Base websocket URL that is advertised to external clients.
|
||||||
scheme = config['wsserver']['scheme']
|
|
||||||
host = config['wsserver']['host']
|
Useful when the websocket URL advertised to the clients needs to be
|
||||||
port = config['wsserver']['port']
|
customized (typically when running behind NAT, firewall, etc.)
|
||||||
|
"""
|
||||||
|
|
||||||
|
scheme = config['wsserver']['advertised_scheme']
|
||||||
|
host = config['wsserver']['advertised_host']
|
||||||
|
port = config['wsserver']['advertised_port']
|
||||||
return '{}://{}:{}'.format(scheme, host, port)
|
return '{}://{}:{}'.format(scheme, host, port)
|
||||||
|
@ -24,6 +24,9 @@ For convenience, here's a list of all the relevant environment variables (docume
|
|||||||
`BIGCHAINDB_WSSERVER_SCHEME`<br>
|
`BIGCHAINDB_WSSERVER_SCHEME`<br>
|
||||||
`BIGCHAINDB_WSSERVER_HOST`<br>
|
`BIGCHAINDB_WSSERVER_HOST`<br>
|
||||||
`BIGCHAINDB_WSSERVER_PORT`<br>
|
`BIGCHAINDB_WSSERVER_PORT`<br>
|
||||||
|
`BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME`<br>
|
||||||
|
`BIGCHAINDB_WSSERVER_ADVERTISED_HOST`<br>
|
||||||
|
`BIGCHAINDB_WSSERVER_ADVERTISED_PORT`<br>
|
||||||
`BIGCHAINDB_CONFIG_PATH`<br>
|
`BIGCHAINDB_CONFIG_PATH`<br>
|
||||||
`BIGCHAINDB_BACKLOG_REASSIGN_DELAY`<br>
|
`BIGCHAINDB_BACKLOG_REASSIGN_DELAY`<br>
|
||||||
`BIGCHAINDB_LOG`<br>
|
`BIGCHAINDB_LOG`<br>
|
||||||
@ -248,6 +251,38 @@ export BIGCHAINDB_WSSERVER_PORT=9985
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## wsserver.advertised_scheme, wsserver.advertised_host and wsserver.advertised_port
|
||||||
|
|
||||||
|
These settings are for the advertising the Websocket URL to external clients in
|
||||||
|
the root API endpoint. These configurations might be useful if your deployment
|
||||||
|
is hosted behind a firewall, NAT, etc. where the exposed public IP or domain is
|
||||||
|
different from where BigchainDB is running.
|
||||||
|
|
||||||
|
**Example using environment variables**
|
||||||
|
```text
|
||||||
|
export BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME=wss
|
||||||
|
export BIGCHAINDB_WSSERVER_ADVERTISED_HOST=mybigchaindb.com
|
||||||
|
export BIGCHAINDB_WSSERVER_ADVERTISED_PORT=443
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example config file snippet**
|
||||||
|
```js
|
||||||
|
"wsserver": {
|
||||||
|
"advertised_scheme": "wss",
|
||||||
|
"advertised_host": "mybigchaindb.com",
|
||||||
|
"advertised_port": 443
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Default values (from a config file)**
|
||||||
|
```js
|
||||||
|
"wsserver": {
|
||||||
|
"advertised_scheme": "ws",
|
||||||
|
"advertised_host": "localhost",
|
||||||
|
"advertised_port": 9985
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## backlog_reassign_delay
|
## backlog_reassign_delay
|
||||||
|
|
||||||
Specifies how long, in seconds, transactions can remain in the backlog before being reassigned. Long-waiting transactions must be reassigned because the assigned node may no longer be responsive. The default duration is 120 seconds.
|
Specifies how long, in seconds, transactions can remain in the backlog before being reassigned. Long-waiting transactions must be reassigned because the assigned node may no longer be responsive. The default duration is 120 seconds.
|
||||||
|
@ -490,17 +490,17 @@ def wsserver_config():
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def wsserver_scheme(wsserver_config):
|
def wsserver_scheme(wsserver_config):
|
||||||
return wsserver_config['scheme']
|
return wsserver_config['advertised_scheme']
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def wsserver_host(wsserver_config):
|
def wsserver_host(wsserver_config):
|
||||||
return wsserver_config['host']
|
return wsserver_config['advertised_host']
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def wsserver_port(wsserver_config):
|
def wsserver_port(wsserver_config):
|
||||||
return wsserver_config['port']
|
return wsserver_config['advertised_port']
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -150,6 +150,9 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request, certs_d
|
|||||||
WSSERVER_SCHEME = 'ws'
|
WSSERVER_SCHEME = 'ws'
|
||||||
WSSERVER_HOST = '1.2.3.4'
|
WSSERVER_HOST = '1.2.3.4'
|
||||||
WSSERVER_PORT = 57
|
WSSERVER_PORT = 57
|
||||||
|
WSSERVER_ADVERTISED_SCHEME = 'wss'
|
||||||
|
WSSERVER_ADVERTISED_HOST = 'a.b.c.d'
|
||||||
|
WSSERVER_ADVERTISED_PORT = 89
|
||||||
KEYRING = 'pubkey_0:pubkey_1:pubkey_2'
|
KEYRING = 'pubkey_0:pubkey_1:pubkey_2'
|
||||||
LOG_FILE = '/somewhere/something.log'
|
LOG_FILE = '/somewhere/something.log'
|
||||||
|
|
||||||
@ -173,6 +176,9 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request, certs_d
|
|||||||
'BIGCHAINDB_WSSERVER_SCHEME': WSSERVER_SCHEME,
|
'BIGCHAINDB_WSSERVER_SCHEME': WSSERVER_SCHEME,
|
||||||
'BIGCHAINDB_WSSERVER_HOST': WSSERVER_HOST,
|
'BIGCHAINDB_WSSERVER_HOST': WSSERVER_HOST,
|
||||||
'BIGCHAINDB_WSSERVER_PORT': WSSERVER_PORT,
|
'BIGCHAINDB_WSSERVER_PORT': WSSERVER_PORT,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME': WSSERVER_ADVERTISED_SCHEME,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_HOST': WSSERVER_ADVERTISED_HOST,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_PORT': WSSERVER_ADVERTISED_PORT,
|
||||||
'BIGCHAINDB_KEYRING': KEYRING,
|
'BIGCHAINDB_KEYRING': KEYRING,
|
||||||
'BIGCHAINDB_LOG_FILE': LOG_FILE,
|
'BIGCHAINDB_LOG_FILE': LOG_FILE,
|
||||||
'BIGCHAINDB_DATABASE_CA_CERT': certs_dir + '/ca.crt',
|
'BIGCHAINDB_DATABASE_CA_CERT': certs_dir + '/ca.crt',
|
||||||
@ -188,6 +194,9 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request, certs_d
|
|||||||
'BIGCHAINDB_WSSERVER_SCHEME': WSSERVER_SCHEME,
|
'BIGCHAINDB_WSSERVER_SCHEME': WSSERVER_SCHEME,
|
||||||
'BIGCHAINDB_WSSERVER_HOST': WSSERVER_HOST,
|
'BIGCHAINDB_WSSERVER_HOST': WSSERVER_HOST,
|
||||||
'BIGCHAINDB_WSSERVER_PORT': WSSERVER_PORT,
|
'BIGCHAINDB_WSSERVER_PORT': WSSERVER_PORT,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_SCHEME': WSSERVER_ADVERTISED_SCHEME,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_HOST': WSSERVER_ADVERTISED_HOST,
|
||||||
|
'BIGCHAINDB_WSSERVER_ADVERTISED_PORT': WSSERVER_ADVERTISED_PORT,
|
||||||
'BIGCHAINDB_KEYRING': KEYRING,
|
'BIGCHAINDB_KEYRING': KEYRING,
|
||||||
'BIGCHAINDB_LOG_FILE': LOG_FILE})
|
'BIGCHAINDB_LOG_FILE': LOG_FILE})
|
||||||
|
|
||||||
@ -261,6 +270,9 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request, certs_d
|
|||||||
'scheme': WSSERVER_SCHEME,
|
'scheme': WSSERVER_SCHEME,
|
||||||
'host': WSSERVER_HOST,
|
'host': WSSERVER_HOST,
|
||||||
'port': WSSERVER_PORT,
|
'port': WSSERVER_PORT,
|
||||||
|
'advertised_scheme': WSSERVER_ADVERTISED_SCHEME,
|
||||||
|
'advertised_host': WSSERVER_ADVERTISED_HOST,
|
||||||
|
'advertised_port': WSSERVER_ADVERTISED_PORT,
|
||||||
},
|
},
|
||||||
'database': database,
|
'database': database,
|
||||||
'keypair': {
|
'keypair': {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user