* Embed nginx inside Docker image so all services are reversed proxied behind port 80
* Use Varnish 3 from source tarball, newer and OS Varnish could not disable telnet authentication required by Carto * Remove sources of varnish, gdal, /cartodb/.git when no longer needed in order to make image smaller * Dropped Nokia and GMAP basemaps, they did not work * Dropped schema trigger installation, it is no longer needed * Configure Carto in Python and NodeJS * Build assets * Use self as asset_host, assets are hosted by nginx instead of rails
This commit is contained in:
parent
3397aed11d
commit
bbf2c54325
104
Dockerfile
104
Dockerfile
@ -38,6 +38,7 @@ RUN useradd -m -d /home/cartodb -s /bin/bash cartodb && \
|
||||
libproj-dev \
|
||||
gdal-bin \
|
||||
libgdal1-dev \
|
||||
libgdal-dev \
|
||||
postgresql-9.5 \
|
||||
postgresql-client-9.5 \
|
||||
postgresql-contrib-9.5 \
|
||||
@ -47,11 +48,11 @@ RUN useradd -m -d /home/cartodb -s /bin/bash cartodb && \
|
||||
postgresql-9.5-postgis-2.2 \
|
||||
postgresql-9.5-postgis-scripts \
|
||||
postgis \
|
||||
liblwgeom-2.2-5 \
|
||||
ca-certificates \
|
||||
redis-server \
|
||||
python2.7-dev \
|
||||
python-setuptools \
|
||||
varnish \
|
||||
imagemagick \
|
||||
libmapnik-dev \
|
||||
mapnik-utils \
|
||||
@ -59,6 +60,9 @@ RUN useradd -m -d /home/cartodb -s /bin/bash cartodb && \
|
||||
python-argparse \
|
||||
python-gdal \
|
||||
python-chardet \
|
||||
python-pip \
|
||||
python-all-dev \
|
||||
python-docutils \
|
||||
openssl \
|
||||
libreadline6 \
|
||||
zlib1g \
|
||||
@ -86,12 +90,26 @@ RUN useradd -m -d /home/cartodb -s /bin/bash cartodb && \
|
||||
libgif-dev \
|
||||
libgmp-dev \
|
||||
libicu-dev \
|
||||
wget \
|
||||
nginx-light \
|
||||
net-tools \
|
||||
--no-install-recommends && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN git config --global user.email you@example.com
|
||||
RUN git config --global user.name "Your Name"
|
||||
|
||||
# Varnish 3, Ubuntu:16.04 comes with Varnish 4.1 which can't be run with anonymous admin telnet
|
||||
RUN cd /opt && \
|
||||
wget https://repo.varnish-cache.org/source/varnish-3.0.7.tar.gz && \
|
||||
tar -zxf varnish-3.0.7.tar.gz && \
|
||||
cd varnish-3.0.7 && \
|
||||
./configure --prefix=/opt/varnish && \
|
||||
make && \
|
||||
make install &&
|
||||
cd /opt &&
|
||||
rm -rf varnish-3.0.7 varnish-3.0.7.tar.gz
|
||||
|
||||
# ogr2ogr2 static build, see https://github.com/CartoDB/cartodb/wiki/How-to-build-gdal-and-ogr2ogr2
|
||||
# using cartodb instruction got error https://trac.osgeo.org/gdal/ticket/6073
|
||||
# https://github.com/OSGeo/gdal/compare/trunk...CartoDB:ogr2ogr2 has no code changes, so just use latest gdal tarball
|
||||
@ -102,35 +120,34 @@ cd gdal-2.1.1 && \
|
||||
./configure --disable-shared && \
|
||||
make -j 4 && \
|
||||
cp apps/ogr2ogr /usr/bin/ogr2ogr2 && \
|
||||
rm -rf /opt/ogr2ogr2 /root/.gitconfig
|
||||
cd /opt && \
|
||||
rm -rf /opt/ogr2ogr2 /opt/gdal-2.1.1.tar.gz /root/.gitconfig /opt/gdal-2.1.1
|
||||
|
||||
# Install NodeJS
|
||||
RUN curl https://nodejs.org/download/release/v0.10.41/node-v0.10.41-linux-x64.tar.gz| tar -zxf - --strip-components=1 -C /usr
|
||||
RUN curl https://nodejs.org/download/release/v0.10.41/node-v0.10.41-linux-x64.tar.gz| tar -zxf - --strip-components=1 -C /usr && \
|
||||
npm install -g grunt-cli && \
|
||||
npm install -g npm@~2.14.0
|
||||
|
||||
# Install rvm
|
||||
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
|
||||
RUN curl -L https://get.rvm.io | bash -s stable --ruby
|
||||
RUN echo 'source /usr/local/rvm/scripts/rvm' >> /etc/bash.bashrc
|
||||
RUN /bin/bash -l -c rvm requirements
|
||||
ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
RUN echo rvm_max_time_flag=15 >> ~/.rvmrc
|
||||
RUN /bin/bash -l -c 'rvm install 2.2.3'
|
||||
RUN /bin/bash -l -c 'rvm use 2.2.3 --default'
|
||||
RUN /bin/bash -l -c 'gem install bundle archive-tar-minitar'
|
||||
|
||||
# Install bundler
|
||||
RUN /bin/bash -l -c 'gem install bundler --no-doc --no-ri'
|
||||
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 && \
|
||||
curl -L https://get.rvm.io | bash -s stable --ruby && \
|
||||
echo 'source /usr/local/rvm/scripts/rvm' >> /etc/bash.bashrc && \
|
||||
/bin/bash -l -c rvm requirements
|
||||
ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && \
|
||||
RUN echo rvm_max_time_flag=15 >> ~/.rvmrc && \
|
||||
/bin/bash -l -c 'rvm install 2.2.3' && \
|
||||
/bin/bash -l -c 'rvm use 2.2.3 --default' && \
|
||||
/bin/bash -l -c 'gem install bundle archive-tar-minitar' && \
|
||||
/bin/bash -l -c 'gem install bundler compass --no-doc --no-ri'
|
||||
|
||||
# Setting PostgreSQL
|
||||
RUN sed -i 's/\(peer\|md5\)/trust/' /etc/postgresql/9.5/main/pg_hba.conf
|
||||
RUN sed -i 's/\(peer\|md5\)/trust/' /etc/postgresql/9.5/main/pg_hba.conf && \
|
||||
service postgresql start && \
|
||||
createuser publicuser --no-createrole --no-createdb --no-superuser -U postgres && \
|
||||
createuser tileuser --no-createrole --no-createdb --no-superuser -U postgres && \
|
||||
service postgresql stop
|
||||
|
||||
# Install schema_triggers
|
||||
RUN git clone https://github.com/CartoDB/pg_schema_triggers.git && \
|
||||
cd pg_schema_triggers && \
|
||||
make all install && \
|
||||
sed -i \
|
||||
"/#shared_preload/a shared_preload_libraries = 'schema_triggers.so'" \
|
||||
/etc/postgresql/9.5/main/postgresql.conf
|
||||
# Initialize template postgis db
|
||||
ADD ./template_postgis.sh /tmp/template_postgis.sh
|
||||
RUN service postgresql start && /bin/su postgres -c \
|
||||
/tmp/template_postgis.sh && service postgresql stop
|
||||
@ -138,6 +155,7 @@ RUN service postgresql start && /bin/su postgres -c \
|
||||
# Install cartodb extension
|
||||
RUN git clone https://github.com/CartoDB/cartodb-postgresql && \
|
||||
cd cartodb-postgresql && \
|
||||
git checkout master && \
|
||||
PGUSER=postgres make install
|
||||
ADD ./cartodb_pgsql.sh /tmp/cartodb_pgsql.sh
|
||||
RUN service postgresql start && /bin/su postgres -c \
|
||||
@ -145,23 +163,22 @@ RUN service postgresql start && /bin/su postgres -c \
|
||||
|
||||
# Install CartoDB API
|
||||
RUN git clone git://github.com/CartoDB/CartoDB-SQL-API.git && \
|
||||
cd CartoDB-SQL-API && ./configure && npm install
|
||||
cd CartoDB-SQL-API && npm install
|
||||
|
||||
# Install Windshaft
|
||||
RUN git clone git://github.com/CartoDB/Windshaft-cartodb.git && \
|
||||
cd Windshaft-cartodb && ./configure && npm install && mkdir logs
|
||||
cd Windshaft-cartodb && git checkout master && npm install && mkdir logs
|
||||
|
||||
# Install CartoDB (with the bug correction on bundle install)
|
||||
RUN git clone git://github.com/CartoDB/cartodb.git && \
|
||||
# Install CartoDB
|
||||
RUN git clone --recursive git://github.com/CartoDB/cartodb.git && \
|
||||
cd cartodb && \
|
||||
perl -pi -e 's/jwt \(1\.5\.3\)/jwt (1.5.4)/' Gemfile.lock && \
|
||||
/bin/bash -l -c 'bundle install' || \
|
||||
/bin/bash -l -c "cd $(/bin/bash -l -c 'gem contents \
|
||||
debugger-ruby_core_source' | grep CHANGELOG | sed -e \
|
||||
's,CHANGELOG.md,,') && /bin/bash -l -c 'rake add_source \
|
||||
VERSION=$(/bin/bash -l -c 'ruby --version' | awk \
|
||||
'{print $2}' | sed -e 's,p55,-p55,' )' && cd /cartodb && \
|
||||
/bin/bash -l -c 'bundle install'"
|
||||
git checkout master && \
|
||||
npm install && \
|
||||
perl -pi -e 's/gdal==1\.10\.0/gdal==1.11.3/' python_requirements.txt && \
|
||||
pip install --no-use-wheel -r python_requirements.txt && \
|
||||
/bin/bash -l -c 'bundle install' && \
|
||||
/bin/bash -l -c 'bundle exec grunt --environment development' && \
|
||||
rm -rf .git
|
||||
|
||||
# Geocoder SQL client + server
|
||||
RUN git clone https://github.com/CartoDB/data-services && \
|
||||
@ -186,18 +203,19 @@ ADD ./config/app_config.yml /cartodb/config/app_config.yml
|
||||
ADD ./config/database.yml /cartodb/config/database.yml
|
||||
ADD ./create_dev_user /cartodb/script/create_dev_user
|
||||
ADD ./setup_organization.sh /cartodb/script/setup_organization.sh
|
||||
ADD ./config/cartodb.nginx.proxy.conf /etc/nginx/sites-enabled/default
|
||||
ADD ./config/varnish.vcl /etc/varnish.vcl
|
||||
ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
RUN mkdir -p /cartodb/log && touch /cartodb/log/users_modifications
|
||||
RUN service postgresql start && service redis-server start && \
|
||||
bash -l -c "cd /cartodb && bash script/create_dev_user || bash script/create_dev_user && bash script/setup_organization.sh" && \
|
||||
# Enable CARTO Builder
|
||||
# bundle exec rake cartodb:features:enable_feature_for_all_users['editor-3'] && \
|
||||
# bundle exec rake cartodb:features:enable_feature_for_all_users['explore_site']" && \
|
||||
RUN mkdir -p /cartodb/log && touch /cartodb/log/users_modifications && \
|
||||
/opt/varnish/sbin/varnishd -a :6081 -T localhost:6082 -s malloc,256m -f /etc/varnish.vcl && \
|
||||
service postgresql start && service redis-server start && \
|
||||
bash -l -c "cd /cartodb && bash script/create_dev_user || bash script/create_dev_user && \
|
||||
bash script/setup_organization.sh" && \
|
||||
service postgresql stop && service redis-server stop
|
||||
|
||||
EXPOSE 3000 8080 8181
|
||||
EXPOSE 80
|
||||
|
||||
ENV GDAL_DATA /usr/share/gdal/1.10
|
||||
ENV GDAL_DATA /usr/share/gdal/1.11
|
||||
|
||||
ADD ./startup.sh /opt/startup.sh
|
||||
|
||||
|
11
README.md
11
README.md
@ -20,22 +20,17 @@ How to build the container:
|
||||
|
||||
```
|
||||
git clone https://github.com/sverhoeven/docker-cartodb.git
|
||||
docker build -t="sverhoeven/cartodb" docker-cartodb/
|
||||
docker build -t=sverhoeven/cartodb docker-cartodb/
|
||||
```
|
||||
|
||||
How to run the container:
|
||||
-------------------------
|
||||
|
||||
```
|
||||
docker run -d -p 3000:3000 -p 8080:8080 -p 8181:8181 sverhoeven/cartodb
|
||||
docker run -d -p 80:80 sverhoeven/cartodb
|
||||
```
|
||||
|
||||
The ports the cartodb container publishes must be combined behind a single [NGINX](http://nginx.org/) web server.
|
||||
In the GitHub repo there is an [example NGINX config file (config/cartodb.nginx.proxy.conf)](https://github.com/sverhoeven/docker-cartodb/blob/master/config/cartodb.nginx.proxy.conf), which needs to be added to /etc/nginx/conf.d/ directory, after which the web server must be restarted.
|
||||
This will setup a reverse proxy for the CartoDB/imports (3000), SQL Api (8080) and Map api (8181) to default http port (80).
|
||||
Alternativly use instructions at https://hub.docker.com/r/spawnthink/cartodb-nginx/ to run NGINX as a docker container with the correct config file already in it.
|
||||
|
||||
The CartoDB instance has been configured with the hostname `cartodb.localhost`, this means the web browser and web server need to be able to resolve `cartodb.localhost` to the machine where the web server is running.
|
||||
The CartoDB instance has been configured with the hostname `cartodb.localhost`, this means the web browser and web server need to be able to resolve `cartodb.localhost` as the machine where the web server is running.
|
||||
This can be done by adding cartodb.localhost alias to your hosts file. For example
|
||||
```
|
||||
sudo sh -c 'echo 127.0.1.1 cartodb.localhost >> /etc/hosts'
|
||||
|
@ -68,6 +68,8 @@ defaults: &defaults
|
||||
app_keys:
|
||||
editor: ''
|
||||
embeds: ''
|
||||
#fullstory:
|
||||
#org: 'XXXXX'
|
||||
facebook:
|
||||
app_id: ''
|
||||
admins: ''
|
||||
@ -102,6 +104,15 @@ defaults: &defaults
|
||||
wizard: ''
|
||||
filter: ''
|
||||
query: ''
|
||||
applied_sql: ''
|
||||
applied_cartocss: ''
|
||||
modified_style_form: ''
|
||||
completed_connection: ''
|
||||
failed_connection: ''
|
||||
created_analysis: ''
|
||||
modified_analysis: ''
|
||||
published_map: ''
|
||||
exported_map: ''
|
||||
mailing_track:
|
||||
like_map: ''
|
||||
trending_map: ''
|
||||
@ -193,6 +204,7 @@ defaults: &defaults
|
||||
bucket_name: ''
|
||||
url_ttl: 7200
|
||||
async_long_uploads: false
|
||||
s3_endpoint: ''
|
||||
uploads_path: 'public/uploads' # including 'uploads' assumes public path. Absolute path example: /tmp/exports/downloads
|
||||
importer:
|
||||
blacklisted_ip_addr: []
|
||||
@ -209,6 +221,7 @@ defaults: &defaults
|
||||
async_long_uploads: false
|
||||
proxy_uri:
|
||||
use_ssl: True
|
||||
s3_endpoint: ''
|
||||
|
||||
unp_temporal_folder: '/tmp/imports/'
|
||||
# It must end in `/uploads` and be accessible via HTTP, if relative will default to Rails.Root/#{uploads_path}
|
||||
@ -265,12 +278,18 @@ defaults: &defaults
|
||||
assets:
|
||||
s3_bucket_name: "tests"
|
||||
max_file_size: 5242880 # 5.megabytes
|
||||
# Example for configuring organization assets.
|
||||
# If 'aws.s3' configuration exists, S3 is used for storing assets and 'assets.organization.bucket' value is required. If 'aws.s3' config is not present, assets will be stored locally.
|
||||
# organization:
|
||||
# bucket: "tests" # Required if 'aws.s3' config is present. Bucket must exist beforehand. If no 'aws.s3' config is present, organization assets will be stored locally and this line is not needed.
|
||||
# max_size_in_bytes: 1048576 # Optional, default is 1 MB
|
||||
# location: 'organization_assets' # Optional subdirectory for local assets, default is 'organization_assets'
|
||||
app_assets:
|
||||
asset_host: "//cartodb-libs.global.ssl.fastly.net/cartodbui"
|
||||
asset_host: "//cartodb.localhost"
|
||||
avatars:
|
||||
gravatar_enabled: true
|
||||
base_url: '//cartodb-libs.global.ssl.fastly.net/cartodbui/assets/unversioned/images/avatars'
|
||||
kinds: ['ghost', 'marker', 'mountain', 'pacman', 'planet', 'star']
|
||||
base_url: '/assets/unversioned/images/avatars'
|
||||
kinds: ['ghost', 'heart', 'marker', 'mountain', 'pacman', 'planet', 'star']
|
||||
colors: ['green', 'orange', 'red', 'yellow']
|
||||
dropbox_api_key: ""
|
||||
gdrive:
|
||||
@ -280,7 +299,7 @@ defaults: &defaults
|
||||
# Use your Olark api id to enable it. If you remove this entry or don't define an app key, it won't be activated.
|
||||
olark:
|
||||
app_id: ''
|
||||
enforce_non_empty_layer_css: true
|
||||
enforce_non_empty_layer_css: false
|
||||
users_dumps:
|
||||
service:
|
||||
port: 00000
|
||||
@ -347,36 +366,10 @@ defaults: &defaults
|
||||
ratelimit_concurrency: 3
|
||||
ratelimit_ttl: 4
|
||||
ratelimit_wait_secs: 0.1
|
||||
datasources:
|
||||
arcgis_enabled: false
|
||||
salesforce_enabled: false
|
||||
basemaps:
|
||||
Nokia:
|
||||
normal_day:
|
||||
url: 'https://maps.nlp.nokia.com/maptiler/v2/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?lg=eng&token=A7tBPacePg9Mj_zghvKt9Q&app_id=KuYppsdXZznpffJsKT24'
|
||||
minZoom: '0'
|
||||
maxZoom: '21'
|
||||
className: "nokia_normal_day"
|
||||
attribution: "©2012 Nokia <a href='http://here.net/services/terms' target='_blank'>Terms of use</a>"
|
||||
name: 'Nokia normal Day'
|
||||
terrain_day:
|
||||
url: 'https://maps.nlp.nokia.com/maptiler/v2/maptile/newest/terrain.day/{z}/{x}/{y}/256/png8?lg=eng&token=A7tBPacePg9Mj_zghvKt9Q&app_id=KuYppsdXZznpffJsKT24'
|
||||
minZoom: '0'
|
||||
maxZoom: '21'
|
||||
className: "nokia_terrain_day"
|
||||
attribution: "©2012 Nokia <a href='http://here.net/services/terms' target='_blank'>Terms of use</a>"
|
||||
name: 'Nokia Terrain Day'
|
||||
satellite_day:
|
||||
url: 'https://maps.nlp.nokia.com/maptiler/v2/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?lg=eng&token=A7tBPacePg9Mj_zghvKt9Q&app_id=KuYppsdXZznpffJsKT24'
|
||||
minZoom: '0'
|
||||
maxZoom: '21'
|
||||
className: "nokia_satellite_day"
|
||||
attribution: "©2012 Nokia <a href='http://here.net/services/terms' target='_blank'>Terms of use</a>"
|
||||
name: 'Nokia Satellite Day'
|
||||
hybrid_day:
|
||||
url: 'https://maps.nlp.nokia.com/maptiler/v2/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?lg=eng&token=A7tBPacePg9Mj_zghvKt9Q&app_id=KuYppsdXZznpffJsKT24'
|
||||
minZoom: '0'
|
||||
maxZoom: '21'
|
||||
className: "nokia_hybrid_day"
|
||||
attribution: "©2012 Nokia <a href='http://here.net/services/terms' target='_blank'>Terms of use</a>"
|
||||
name: 'Nokia hybrid Day'
|
||||
CARTO:
|
||||
positron_rainbow_labels:
|
||||
default: true
|
||||
@ -526,6 +519,30 @@ defaults: &defaults
|
||||
min_rows: 2000000
|
||||
statement_timeout: 1800000
|
||||
tolerance_px: 1.0
|
||||
connectors:
|
||||
odbc:
|
||||
enabled: false
|
||||
max_rows: nil
|
||||
mysql:
|
||||
enabled: true
|
||||
max_rows: 500000
|
||||
postgresql:
|
||||
enabled: true
|
||||
max_rows: 500000
|
||||
hive:
|
||||
enabled: false
|
||||
max_rows: 500000
|
||||
sqlserver:
|
||||
enabled: false
|
||||
max_rows: 500000
|
||||
dataservices:
|
||||
enabled:
|
||||
geocoder_internal: true
|
||||
hires_geocoder: false
|
||||
isolines: false
|
||||
routing: false
|
||||
data_observatory: true
|
||||
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
@ -538,7 +555,6 @@ development:
|
||||
url_purge_command: 'url.purge'
|
||||
retries: 5
|
||||
timeout: 5
|
||||
enforce_non_empty_layer_css: false
|
||||
|
||||
test:
|
||||
<<: *defaults
|
||||
|
@ -29,6 +29,10 @@ server {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
}
|
||||
|
||||
location ^~ /assets {
|
||||
root /cartodb/public;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
|
4
config/varnish.vcl
Normal file
4
config/varnish.vcl
Normal file
@ -0,0 +1,4 @@
|
||||
backend default {
|
||||
.host = "127.0.0.1";
|
||||
.port = "8080";
|
||||
}
|
@ -1,10 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
PORT=3000
|
||||
|
||||
service postgresql start
|
||||
service redis-server start
|
||||
service varnish start
|
||||
/opt/varnish/sbin/varnishd -a :6081 -T localhost:6082 -s malloc,256m -f /etc/varnish.vcl
|
||||
service nginx start
|
||||
|
||||
cd /Windshaft-cartodb
|
||||
node app.js development &
|
||||
@ -16,5 +15,4 @@ cd /cartodb
|
||||
source /usr/local/rvm/scripts/rvm
|
||||
bundle exec script/restore_redis
|
||||
bundle exec script/resque > resque.log 2>&1 &
|
||||
bundle exec rails s -p $PORT
|
||||
|
||||
bundle exec thin start --threaded -p 3000 --threadpool-size 5
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Init script for template postgis
|
||||
#
|
||||
|
||||
POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-2.1.2;
|
||||
POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-2.2;
|
||||
createdb -E UTF8 template_postgis;
|
||||
createlang -d template_postgis plpgsql;
|
||||
psql -d postgres -c "UPDATE pg_database SET datistemplate='true' \
|
||||
@ -13,4 +13,3 @@ psql -d template_postgis -c "CREATE EXTENSION postgis_topology;"
|
||||
psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
|
||||
psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
|
||||
psql -c "CREATE EXTENSION plpythonu;"
|
||||
psql -c "CREATE EXTENSION schema_triggers;"
|
||||
|
Loading…
Reference in New Issue
Block a user