Windshaft-cartodb/README.md

147 lines
5.8 KiB
Markdown
Raw Normal View History

2019-11-29 19:44:31 +08:00
# Windshaft-CartoDB [![Build Status](https://travis-ci.org/CartoDB/Windshaft-cartodb.svg?branch=master)](https://travis-ci.org/CartoDB/Windshaft-cartodb)
2019-12-30 19:43:00 +08:00
The [`CARTO Maps API`](https://carto.com/developers/maps-api/) tiler. It extends [`Windshaft`](https://github.com/CartoDB/Windshaft) and exposes a web service with extra functionality:
2019-11-29 19:27:15 +08:00
* Instantiate [`Anonymous Maps`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/03-anonymous-maps.md) through CARTO's map configuration ([`MapConfig`](https://github.com/CartoDB/Windshaft/blob/master/doc/MapConfig-specification.md)).
2019-11-29 22:55:41 +08:00
* Create [`Named Maps`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/04-named-maps.md) based on customizable templates.
2019-11-29 18:18:25 +08:00
* Get map previews through [`Static Maps`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/05-static-maps-API.md) API.
2019-11-29 22:55:41 +08:00
* Render maps with a large amount of data faster using [`Tile Aggregation`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/06-tile-aggregation.md).
2019-11-29 18:18:25 +08:00
* Build advanced maps with enriched data through [`Analyses Extension`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/09-MapConfig-analyses-extension.md).
* Fetch tabular data from analysis nodes with [`Dataviews`](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docs/guides/10-MapConfig-dataviews-extension.md)
2019-11-29 19:48:00 +08:00
## Build
2015-11-19 19:50:34 +08:00
2019-11-29 19:51:12 +08:00
Requirements:
2020-12-16 23:32:32 +08:00
* [`Node 12.x `](https://nodejs.org/dist/latest-v10.x/)
* [`PostgreSQL >= 11.0`](https://www.postgresql.org/download/)
2019-11-29 20:11:19 +08:00
* [`PostGIS >= 2.4`](https://postgis.net/install/)
* [`CARTO Postgres Extension >= 0.24.1`](https://github.com/CartoDB/cartodb-postgresql)
* [`Redis >= 4`](https://redis.io/download)
2019-11-29 20:13:31 +08:00
* `libcairo2-dev`, `libpango1.0-dev`, `libjpeg8-dev` and `libgif-dev` for server side canvas support
* `C++11` to build internal dependencies. When there's no pre-built binaries for your OS/architecture distribution.
2019-11-29 19:51:12 +08:00
Optional:
2019-11-29 19:27:15 +08:00
* [`Varnish`](http://www.varnish-cache.org)
2019-11-29 19:51:12 +08:00
* [`Statsd`](https://github.com/statsd/statsd)
2015-06-30 17:00:32 +08:00
2019-11-29 18:18:25 +08:00
### PostGIS setup
2015-06-30 17:00:32 +08:00
2019-11-29 18:18:25 +08:00
A `template_postgis` database is expected. One can be set up with
```shell
2019-11-29 19:27:15 +08:00
$ createdb --owner postgres --template template0 template_postgis
$ psql -d template_postgis -c 'CREATE EXTENSION postgis;'
2015-06-30 17:00:32 +08:00
```
2019-01-02 18:33:23 +08:00
2019-11-29 19:48:00 +08:00
### Install
2019-11-29 18:18:25 +08:00
To fetch and build all node-based dependencies, run:
```shell
2019-11-29 20:51:09 +08:00
$ npm install
```
2019-11-29 18:18:25 +08:00
### Run
2020-12-16 23:32:32 +08:00
You can inject the configuration through environment variables at run time. Check the file `./config/environments/config.js` to see the ones you have available.
While the migration to the new environment based configuration, you can still use the old method of copying a config file. To enabled the one with environment variables you need to pass `CARTO_WINDSHAFT_ENV_BASED_CONF=true`. You can use the docker image to run it.
Old way:
2019-11-29 18:18:25 +08:00
```shell
2019-11-29 19:27:15 +08:00
$ node app.js <env>
```
2019-11-29 18:18:25 +08:00
Where `<env>` is the name of a configuration file under `./config/environments/`.
2019-11-29 20:19:47 +08:00
### Test
2020-12-16 23:32:32 +08:00
You can easily run the tests against the dependencies from the `dev-env`. To do so, you need to build the test docker image:
```shell
$ docker-compose build
```
Then you can run the tests like:
```shell
$ docker-compose run windshaft-tests
```
It will mount your code inside a volume. In case you want to play and run `npm test` or something else you can do:
2019-11-29 20:19:47 +08:00
```shell
2020-12-16 23:32:32 +08:00
$ docker-compose run --entrypoint bash windshaft-tests
2019-11-29 20:19:47 +08:00
```
2020-12-16 23:32:32 +08:00
So you will have a bash shell inside the test container, with the code from your host.
2019-11-29 20:19:47 +08:00
### Coverage
```shell
$ npm run cover
```
2019-11-29 20:24:12 +08:00
Open `./coverage/lcov-report/index.html`.
2019-11-29 22:55:41 +08:00
### Docker support
We provide docker images just for testing and continuous integration purposes:
* [`nodejs-xenial-pg1121`](https://hub.docker.com/r/carto/nodejs-xenial-pg1121/tags)
* [`nodejs-xenial-pg101`](https://hub.docker.com/r/carto/nodejs-xenial-pg101/tags)
2019-11-29 23:30:48 +08:00
You can find instructions to install Docker, download, and update images [here](https://github.com/CartoDB/Windshaft-cartodb/blob/master/docker/reference.md).
2019-11-29 22:55:41 +08:00
2019-11-29 23:30:48 +08:00
### Useful `npm` scripts
Run test in a docker image with a specific Node.js version:
2019-11-29 22:55:41 +08:00
```shell
2019-11-29 23:30:48 +08:00
$ DOCKER_IMAGE=<docker-image-tag> NODE_VERSION=<nodejs-version> npm run test:docker
2019-11-29 22:55:41 +08:00
```
2019-11-29 23:30:48 +08:00
Where:
* `<docker-image-tag>`: the tag of required docker image, e.g. `carto/nodejs-xenial-pg1121:latest`
* `<nodejs-version>`: the Node.js version, e.g. `10.15.1`
In case you need to debug:
2019-11-29 22:55:41 +08:00
```shell
2019-11-29 23:30:48 +08:00
$ DOCKER_IMAGE=<docker-image-tag> npm run docker:bash
2019-11-29 22:55:41 +08:00
```
2019-11-29 18:18:25 +08:00
## Documentation
2019-11-29 22:55:41 +08:00
You can find an overview, guides, full reference, and support in [`CARTO's developer center`](https://carto.com/developers/maps-api/). The [docs directory](https://github.com/CartoDB/Windshaft-cartodb/tree/master/docs) contains different documentation resources, from a higher level to more detailed ones.
2019-11-29 19:58:16 +08:00
2019-11-29 18:18:25 +08:00
## Contributing
2011-10-08 01:31:45 +08:00
2019-11-29 19:30:56 +08:00
* The issue tracker: [`Github`](https://github.com/CartoDB/Windshaft-cartodb/issues).
2019-11-29 22:55:41 +08:00
* We love Pull Requests from everyone, see [contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/#contributing).
* You'll need to sign a Contributor License Agreement (CLA) before submitting a Pull Request. [Learn more here](https://carto.com/contributions).
2019-11-29 20:47:38 +08:00
## Developing with a custom `Windshaft` version
2019-11-29 22:55:41 +08:00
If you plan or want to use a custom / not released yet version of windshaft (or any other dependency), the best option is to use `npm link`. You can read more about it at `npm-link`: [symlink a package folder](https://docs.npmjs.com/cli/link.html).
2019-01-02 18:33:23 +08:00
```shell
2019-11-29 18:27:11 +08:00
$ cd /path/to/Windshaft
$ npm install
$ npm link
$ cd /path/to/Windshaft-cartodb
$ npm link windshaft
2019-01-02 18:33:23 +08:00
```
2019-11-29 19:44:31 +08:00
## Versioning
2019-12-30 19:43:00 +08:00
We follow [`SemVer`](http://semver.org/) for versioning. For available versions, see the [tags on this repository](https://github.com/CartoDB/Windshaft-cartodb/tags).
2019-11-29 19:44:31 +08:00
## License
2019-11-29 22:55:41 +08:00
This project is licensed under the BSD 3-clause "New" or "Revised" License. See the [LICENSE](LICENSE) file for details.