Put cartodb db services behind nginx.

Updated configs to master branch of Cartodb repos.
This commit is contained in:
Stefan Verhoeven 2015-05-16 13:01:49 +02:00
parent 0da3b53207
commit d7ab8b6dac
6 changed files with 166 additions and 46 deletions

View File

@ -27,5 +27,12 @@ How to run the container:
docker run -t -i -p 3000:3000 -p 8080:8080 -p 8181:8181 fleu42/docker-cartodb
```
You might need to add cartodb.localhost, dev.cartodb.localhost and example.cartodb.localhost to your hosts file.
You need to add `config/cartodb.nginx.proxy.conf` to /etc/nginx/conf.d/.
This will setup a reverse proxy for the CartoDB/imports (3000), SQL Api (8080) and Map api (8181).
You need to add cartodb.localhost, dev.cartodb.localhost and example.cartodb.localhost to your hosts file.
Visit http://dev.cartodb.localhost or http://example.cartodb.localhost
Any organization member you create should also be added to your hosts file.

View File

@ -1,4 +1,6 @@
module.exports.base_url = '/api/:version';
// In case the base_url has a :user param the username will be the one specified in the URL,
// otherwise it will fallback to extract the username from the host header.
module.exports.base_url = '(?:/api/:version|/user/:user/api/:version)';
// If useProfiler is true every response will be served with an
// X-SQLAPI-Profile header containing elapsed timing for various
// steps taken for producing the response.
@ -34,6 +36,17 @@ module.exports.db_pool_size = 500;
module.exports.db_pool_idleTimeout = 30000;
// Milliseconds between idle client checking
module.exports.db_pool_reapInterval = 1000;
// max number of bytes for a row, when exceeded the query will throw an error
//module.exports.db_max_row_size = 10 * 1024 * 1024;
// allows to use an object to connect with node-postgres instead of a connection string
//module.exports.db_use_config_object = true;
// requires enabling db_use_config_object=true
// allows to enable/disable keep alive for database connections
// by default is not enabled
//module.exports.db_keep_alive = {
// enabled: true,
// initialDelay: 5000
//};
module.exports.redis_host = '127.0.0.1';
module.exports.redis_port = 6379;
module.exports.redisPool = 50;

View File

@ -14,13 +14,11 @@ var config = {
// Base url for the Templated Maps API
// "/api/v1/map/named" is the new API,
// "/tiles/template" is for compatibility with versions up to 1.6.x
,base_url_templated: '(?:/api/v1/map/named|/tiles/template)'
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
// Base url for the Detached Maps API
// "maps" is the the new API,
// "tiles/layergroup" is for compatibility with versions up to 1.6.x
,base_url_detached: '(?:/api/v1/map|/tiles/layergroup)'
// Base url for the Inline Maps and Table Maps API
,base_url_legacy: '/tiles/:table'
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
// Maximum number of connections for one process
// 128 is a good value with a limit of 1024 open file descriptors
@ -86,9 +84,63 @@ var config = {
,renderer: {
// Milliseconds since last access before renderer cache item expires
cache_ttl: 60000,
metatile: 4,
bufferSize: 64,
statsInterval: 5000 // milliseconds between each report to statsd about number of renderers and mapnik pool status
statsInterval: 5000, // milliseconds between each report to statsd about number of renderers and mapnik pool status
mapnik: {
// The size of the pool of internal mapnik renderers
// Check the configuration of uv_threadpool_size to use suitable value
poolSize: 8,
// Metatile is the number of tiles-per-side that are going
// to be rendered at once. If all of them will be requested
// we'd have saved time. If only one will be used, we'd have
// wasted time.
metatile: 2,
// Buffer size is the tickness in pixel of a buffer
// around the rendered (meta?)tile.
//
// This is important for labels and other marker that overlap tile boundaries.
// Setting to 128 ensures no render artifacts.
// 64 may have artifacts but is faster.
// Less important if we can turn metatiling on.
bufferSize: 64,
// SQL queries will be wrapped with ST_SnapToGrid
// Snapping all points of the geometry to a regular grid
snapToGrid: false,
// SQL queries will be wrapped with ST_ClipByBox2D
// Returning the portion of a geometry falling within a rectangle
// It will only work if snapToGrid is enabled
clipByBox2d: false, // this requires postgis >=2.2 and geos >=3.5
limits: {
// Time in milliseconds a render request can take before it fails, some notes:
// - 0 means no render limit
// - it considers metatiling, naive implementation: (render timeout) * (number of tiles in metatile)
render: 0,
// As the render request will finish even if timed out, whether it should be placed in the internal
// cache or it should be fully discarded. When placed in the internal cache another attempt to retrieve
// the same tile will result in an immediate response, however that will use a lot of more application
// memory. If we want to enforce this behaviour we have to implement a cache eviction policy for the
// internal cache.
cacheOnTimeout: true
}
},
http: {
timeout: 2000, // the timeout in ms for a http tile request
proxy: undefined, // the url for a proxy server
whitelist: [ // the whitelist of urlTemplates that can be used
'.*', // will enable any URL
'http://{s}.example.com/{z}/{x}/{y}.png'
],
// image to use as placeholder when urlTemplate is not in the whitelist
// if provided the http renderer will use it instead of throw an error
fallbackImage: {
type: 'fs', // 'fs' and 'url' supported
src: __dirname + '/../../assets/default-placeholder.png'
}
}
}
,millstone: {
// Needs to be writable by server user
@ -120,37 +172,45 @@ var config = {
statusInterval: 5000 // time, in ms, between each status report is emitted from the pool, status is sent to statsd
}
}
,sqlapi: {
protocol: 'http',
// If "host" is given, it will be used
// to connect to the SQL-API without a
// DNS lookup
host: '127.0.0.1',
port: 8080,
// The "domain" part will be appended to
// the cartodb username and passed to
// SQL-API requests in the Host HTTP header
domain: 'cartodb.localhost',
version: 'v1',
// Maximum lenght of SQL query for GET
// requests. Longer queries will be sent
// using POST. Defaults to 2048
max_get_sql_length: 2048,
// Maximum time to wait for a response,
// in milliseconds. Defaults to 100.
timeout: 100
}
,varnish: {
host: 'localhost',
port: 6082,
port: 6082, // the por for the telnet interface where varnish is listening to
http_port: 6081, // the port for the HTTP interface where varnish is listening to
purge_enabled: false, // whether the purge/invalidation mechanism is enabled in varnish or not
secret: 'xxx',
ttl: 86400,
layergroupTtl: 86400 // the max-age for cache-control header in layergroup responses
}
// this [OPTIONAL] configuration enables invalidating by surrogate key in fastly
,fastly: {
// whether the invalidation is enabled or not
enabled: false,
// the fastly api key
apiKey: 'wadus_api_key',
// the service that will get surrogate key invalidation
serviceId: 'wadus_service_id'
}
// If useProfiler is true every response will be served with an
// X-Tiler-Profile header containing elapsed timing for various
// steps taken for producing the response.
,useProfiler:true
// Settings for the health check available at /health
,health: {
enabled: false,
username: 'localhost',
z: 0,
x: 0,
y: 0
}
,disabled_file: 'pids/disabled'
// Use this as a feature flags enabling/disabling mechanism
,enabledFeatures: {
// whether it should intercept tile render errors an act based on them, enabled by default.
onTileErrorStrategy: true,
// whether the affected tables for a given SQL must query directly postgresql or use the SQL API
cdbQueryTablesFromPostgres: true
}
};
module.exports = config;

View File

@ -5,9 +5,14 @@ defaults: &defaults
debug_assets: true
mandatory_keys: [layer_opts, sql_api, varnish_management, redis, session_domain]
session_domain: '.cartodb.localhost'
# If activated, urls will use usernames in format //SESSION_DOMAIN/user/USERNAME and ignore subdomains if present
subdomainless_urls: false
http_port: # 3000 # nil|integer. HTTP port to use when building urls. Leave empty to use default (80)
https_port: # nil|integer. HTTPS port to use when building urls. Leave empty to use default (443)
secret_token: '71c2b25921b84a1cb21c71503ab8fb23'
account_host: 'cartodb.localhost:3000'
account_path: '/account'
disable_file: '~/disable'
watcher:
ttl: 60
tiler:
@ -49,18 +54,20 @@ defaults: &defaults
tumblr:
api_key: ''
trackjs:
enabled: false
customer: ''
app_keys:
editor: ''
embeds: ''
hubspot: ''
common_data:
protocol: 'https'
username: ''
host: ''
api_key: ''
format: 'shp'
generate_every: 86400
s3_bucket_name: ''
common_data:
protocol: 'https'
username: 'common-data'
host: 'cartodb.com'
format: 'shp'
generate_every: 86400
explore-api:
username: ''
api_key: ''
varnish_management:
critical: false
host: '127.0.0.1'
@ -121,10 +128,10 @@ defaults: &defaults
host: ""
port:
layer_opts:
public_opts: ["type", "active", "query", "opacity", "auto_bound",
"interactivity", "debug", "visible", "tiler_domain",
"tiler_port", "tiler_protocol", "sql_domain", "sql_port",
"sql_protocol", "extra_params", "cdn_url", "table_name",
public_opts: ["type", "active", "query", "opacity", "auto_bound",
"interactivity", "debug", "visible", "tiler_domain",
"tiler_port", "tiler_protocol", "sql_domain", "sql_port",
"sql_protocol", "extra_params", "cdn_url", "table_name",
"user_name", "style_version", "tile_style", "query_wrapper"]
default_tile_styles:
point: "{\n marker-fill: #FF6600;\n marker-opacity: 0.9;\n marker-width: 12;\n marker-line-color: white;\n marker-line-width: 3;\n marker-line-opacity: 0.9;\n marker-placement: point;\n marker-type: ellipse;\n marker-allow-overlap: true;\n}"
@ -178,7 +185,7 @@ defaults: &defaults
secret_access_key: "test"
assets:
s3_bucket_name: "tests"
max_file_size: 5242880 # 5.megabytes
max_file_size: 5242880 # 5.megabytes
app_assets:
asset_host: "//cartodb-libs.global.ssl.fastly.net/cartodbui"
avatars:
@ -186,7 +193,7 @@ defaults: &defaults
kinds: ['ghost', 'marker', 'mountain', 'pacman', 'planet', 'stars']
colors: ['green', 'orange', 'red', 'yellow']
dropbox_api_key: ""
gdrive:
gdrive:
api_key: ""
app_id: ""
# This enables a support chat within editor
@ -287,6 +294,7 @@ defaults: &defaults
name: 'Nokia hybrid Day'
CartoDB:
positron_rainbow:
default: true
url: 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png'
subdomains: 'abcd'
minZoom: '0'
@ -394,6 +402,7 @@ defaults: &defaults
development:
<<: *defaults
#http_port: 3000
varnish_management:
critical: false
host: '127.0.0.1'
@ -406,6 +415,7 @@ development:
test:
<<: *defaults
http_port: 53716
redis:
host: '127.0.0.1'
port: 6335

View File

@ -0,0 +1,30 @@
server {
server_name cartodb.localhost *.cartodb.localhost;
location /api/v1/map/named {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8181;
}
location /api/v1/sql {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:3000;
}
error_log /var/log/nginx/cartodb_error.log;
access_log /var/log/nginx/cartodb_access.log;
}

View File

@ -15,6 +15,6 @@ node app.js development &
cd /cartodb
source /usr/local/rvm/scripts/rvm
bundle exec script/restore_redis
bundle exec script/resque &
bundle exec script/resque > resque.log 2>&1 &
bundle exec rails s -p $PORT