Initial commit
This commit is contained in:
commit
e3639cc94c
18 changed files with 680 additions and 0 deletions
126
README.md
Normal file
126
README.md
Normal file
|
@ -0,0 +1,126 @@
|
|||
**Important : this playbook is quick'n dirty and work in progress. Carefully review before using it.**
|
||||
|
||||
This Ansible playbook aims at setting a MapServer tile server on a
|
||||
Debian 10 Buster, inspired by
|
||||
https://github.com/mapserver/mapserver/wiki/Rendering-OSM-data-on-Ubuntu-12.04
|
||||
and https://github.com/mapserver/basemaps.
|
||||
|
||||
Here is a rough view of what will be set up (note: even with the following little import, be sure to have 3-4GB of available storage):
|
||||
|
||||
```
|
||||
# Install PostgreSQL + PostGIS, Apache, the MapServer CGI, imposm
|
||||
apt install postgis apache2 mapserver-bin cgi-mapserver libapache2-mod-mapcache imposm
|
||||
# ...and some dev tools for the basemap
|
||||
apt install make unzip wget git
|
||||
|
||||
# Create a dedicated database user with its own database
|
||||
# (you can harden the password but remember to edit the basemap's Makefile)
|
||||
# (unfortunately, I didn't manage to configure all the tools to use the unix socket. Ping me if you succeeded!)
|
||||
su -c 'psql -c "CREATE USER osm WITH PASSWORD '"'"'osm'"'"';"' postgres
|
||||
su -c "psql -c 'CREATE DATABASE osm WITH OWNER osm;'" postgres
|
||||
su -c "psql -c 'CREATE EXTENSION postgis;' osm" postgres
|
||||
|
||||
# Download or clone an OSM basemap
|
||||
# (in case of trouble, this tuto was tested with the commit 0c21924a1b1d20cea3acf35fc46256d019877338)
|
||||
mkdir -p /srv/osm
|
||||
cd /srv/osm
|
||||
git clone "https://github.com/mapserver/basemaps"
|
||||
|
||||
# Initial (only needed once) download of worldwide shapefiles (~750MB)
|
||||
# (the two zip files can be copied on following hosts to avoid the download)
|
||||
cd basemaps/data
|
||||
make
|
||||
|
||||
# Generation
|
||||
# (here, you can customize the Makefile. For example the style (default, google, bing) and the database connection)
|
||||
cd ..
|
||||
make
|
||||
|
||||
# Finally, import data...
|
||||
mkdir /srv/osm/imposm
|
||||
cd /srv/osm/imposm
|
||||
|
||||
# Manually download some small .pbf files as a test
|
||||
wget https://download.geofabrik.de/australia-oceania/new-caledonia-latest.osm.pbf
|
||||
wget https://download.geofabrik.de/europe/iceland-latest.osm.pbf
|
||||
# ...and import in PostGIS
|
||||
imposm --mapping-file=/srv/osm/basemaps/imposm-mapping.py --proj=EPSG:3857 --read new-caledonia-latest.osm.pbf
|
||||
imposm --mapping-file=/srv/osm/basemaps/imposm-mapping.py --proj=EPSG:3857 --read --merge-cache iceland-latest.osm.pbf
|
||||
imposm --mapping-file=/srv/osm/basemaps/imposm-mapping.py --proj=EPSG:3857 --connection=postgis://osm:osm@localhost:5432/osm --write
|
||||
imposm --mapping-file=/srv/osm/basemaps/imposm-mapping.py --proj=EPSG:3857 --connection=postgis://osm:osm@localhost:5432/osm --optimize
|
||||
imposm --mapping-file=/srv/osm/basemaps/imposm-mapping.py --proj=EPSG:3857 --connection=postgis://osm:osm@localhost:5432/osm --deploy-production-tables
|
||||
|
||||
# Configure Apache, MapServer and MapCache
|
||||
mkdir /srv/osm/mapcache
|
||||
cp -i /usr/share/doc/libapache2-mod-mapcache/examples/mapcache.xml /srv/osm/mapcache/
|
||||
# Change layer to 'default' and add a <MAP> pointer to the basemap, in mapcache > source > getmap > params
|
||||
# Remember to adapt 'osm-default.map' if you changed the style in the basemap's Makefile (google, bing)
|
||||
sed -i 's#^\([[:space:]]\+\)<LAYERS>.*</LAYERS>#\1<LAYERS>default</LAYERS>\n\1<MAP>/srv/osm/basemaps/osm-default.map</MAP>#' mapcache.xml
|
||||
# Modify the url to point to the local CGI
|
||||
sed -i 's#<url>.*#<url>http://localhost/cgi-bin/mapserv?</url>#' /srv/osm/mapcache/mapcache.xml
|
||||
# And configure Apache
|
||||
cd /etc/apache2
|
||||
a2enmod cgi
|
||||
a2disconf serve-cgi-bin.conf
|
||||
sed -i 's/Require all granted/Require local/' conf-available/serve-cgi-bin.conf
|
||||
sed -i 's%#Include conf-available/serve-cgi-bin.conf%Include conf-available/serve-cgi-bin.conf\n\tMapCacheAlias /mapcache "/srv/osm/mapcache/mapcache.xml"%' sites-available/000-default.conf
|
||||
apache2ctl configtest
|
||||
service apache2 restart
|
||||
```
|
||||
|
||||
You can test it at http://your.server.name.tld/mapcache/demo/
|
||||
|
||||
## Back to Ansible
|
||||
|
||||
Most of the configuration should be available in the inventory.
|
||||
|
||||
It is launched usually like this : `ansible-playbook site.yml`
|
||||
|
||||
If you want to override the passwords within a vault :
|
||||
```
|
||||
ansible-vault create vault.yml
|
||||
# vault.yml example (take variables' names from inventory, vars, ...) :
|
||||
# ---
|
||||
# password: mypass
|
||||
ansible-playbook -e @vault.yml --ask-vault-pass site.yml
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### Prerequisites for the hosts
|
||||
Hosts should be accessible via SSH as the root user (else, add the usual
|
||||
`remote_user`/`become` instructions in ansible.cfg) and with the Python
|
||||
prerequisite of Ansible (usually `python-minimal`).
|
||||
|
||||
Only tested on Debian 10 amd64 so far, with Ansible 2.7.7.
|
||||
|
||||
Note : to test or to limit to one particular host :
|
||||
```
|
||||
ansible foo.bar.com -m ping
|
||||
ansible-playbook -l foo.bar.com -v -C -D site.yml
|
||||
```
|
||||
|
||||
## Directory layout
|
||||
|
||||
We follow (more or less) the recommendations of
|
||||
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html
|
||||
with :
|
||||
- `site.yml` : master playbook
|
||||
- `ansible.cfg` and `inventory.yml` : the first one set up some default configurations and introduce the second one : the inventory.
|
||||
- `roles/common/`, `roles/fooapp/` : the roles with their tree `tasks/main.yml`, `files/`, `handlers/main.yml`, ...
|
||||
- `group_vars/group1.yml` and `host_vars/hostname1.yml` : variables dedicated to a group or a host respectively.
|
||||
|
||||
Note : contrary to some recommendations, I prefer to set some variables in
|
||||
the inventory instead of `host_vars` and `group_vars`. For a small playbook
|
||||
like this one, it seems acceptable and it makes it easier to look where to
|
||||
adapt.
|
||||
|
||||
## TODO
|
||||
|
||||
- better cross-platform compatibility
|
||||
- use osmosis ? Said to be better than imposm (warning: heavy Java dependencies...)
|
||||
- check disk space ?
|
||||
|
||||
## License
|
||||
|
||||
[CC-0](https://creativecommons.org/publicdomain/zero/1.0/)
|
Loading…
Add table
Add a link
Reference in a new issue