This is web application allows viewing of InSAR displacement time-series, the automatic re-coloring of the InSAR data based on selected dates, and various other geological functions (USGS volcano feed, among others).
It is built using the Laravel PHP framework.
To run using docker, two convenience scripts have been provided.
Make sure Docker is installed and working: (https://www.youtube.com/watch?v=cqbh-RneBlk)
Run:
./init_docker.sh
Followed by:
./run_docker.sh ./docker/data localhost
Change ./docker/data/
to specify the directory you want to keep the postgresql data in
Change localhost
to the public IP address of the computer if you want to be able to access the website from over the internet, outside your local network
This script needs to be running while using the docker container. Consider using a tmux or screen session
The default username and password for the postgresql database are both insaradmin
The default username for the insarmaps server is insarmaps
, and the default password is insarmaps@insarmaps.com
The server can be found at localhost
Get the test data:
wget https://zenodo.org/records/13294290/files/testdata_Galapagos.tar.gz
tar xvzf testdata_Galapagos.tar.gz
cd testdata_Galapagos
Run the example (example is run from the same computer the image is running on):
json_mbtiles2insarmaps.py --num-workers 8 -u insaradmin -p insaradmin --host localhost -P insarmaps -U insarmaps@insarmaps.com --json_folder ./JSON/ --mbtiles_file ./JSON/S1_IW1_128_0596_0597_20160605_XXXXXXXX_S00887_S00783_W091208_W091105.mbtiles
If it is working you will see this velocity map.
On MacOS you may need to change in your ~/.docker/config.json
credsStore
from desktop
to osxkeychain
as suggested here.
Below are installation instructions to install the web app and all its prerequisites. This was tested on ubuntu 22.04, but should work on Windows/Mac/Other linux distributions by utilizing the equivalent commands in those systems.
Make sure packages are up to date:
sudo apt update
sudo apt upgrade
Install apache:
sudo apt install apache2
Clone site from git:
git clone https://github.com/geodesymiami/insarmaps.git
sudo mv insarmaps /var/www/html/
Edit the default .conf file to enable the site:
sudo vi /etc/apache2/sites-enabled/000-default.conf
.
Edit the file to contain this:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/insarmaps/public
<Directory /var/www/html/insarmaps>
AllowOverride All
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Install php 7.3 along with sqlite3:
sudo apt install software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install php7.3 libapache2-mod-php7.3 php7.3-common php7.3-curl php7.3-xml php7.3-zip php7.3-pgsql php7.3-cli sqlite3 php7.3-sqlite3
sudo a2enmod php7.3
sudo a2enmod rewrite
sudo service apache2 restart
Edit some php settings needed for the site to work properly:
sudo vi /etc/php/7.3/apache2/php.ini
Specifically, make sure the lines below have the following options. These are excessively large on purpose, but they can be tuned down as needed.
memory_limit = 128G
post_max_size = 80G
upload_max_filesize = 20G
Install composer:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
Install extra libraries/files needed by the site:
cd /var/www/html/insarmaps
sudo git checkout tileserverDevelopment # or master branch
cp .env.example .env
Then, run this (type yes when it warns about running as root):
sudo ./setup.sh
Create .htaccess file:
sudo vi public/.htaccess
Add this to the file:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Install postgresql and postgis. It must be postgresql version 9.6:
sudo apt install -y postgresql-common && yes '' | /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt update && sudo apt install postgresql-9.6 postgresql-contrib postgis
Create a new postgres user named insaradmin, answer yes to the user being superuser:
sudo -u postgres createuser --interactive
Create a new linux user named insaradmin:
sudo adduser insaradmin
Create the database:
sudo -u postgres psql
create database pgis;
\q
Edit the insaradmin user's postgres password:
sudo -u insaradmin psql pgis
alter user insaradmin password '<NEW PASSWORD>';
\q
Create all the necessary tables:
sudo -u insaradmin psql pgis < database/recreate_db/db_create.sql
Populate the users table with a temporary user on the website (username is insarmaps@insarmaps.com, password is insarmaps). This is needed as uploading files to the website requires authentication:
php artisan db:seed --class=UsersTableSeeder
Edit postgresql listen addresses:
sudo vi /etc/postgresql/<version>/main/postgresql.conf
Change listen_addresses =
to listen_addresses = '*'
and make sure the line is not commented with a leading #.
Enable postgres password authentication:
sudo vi /etc/postgresql/<version>/main/pg_hba.conf
Add this line to the top of the file (make sure it is not commented with a leading #):
host all all 0.0.0.0/0 md5
Then, restart the postgresql server:
sudo service postgresql restart
Install the mbtiles server:
git clone https://github.com/maptiler/tileserver-php.git
sudo mv tileserver-php /var/www/html/tileserver
sudo chown -R yourusername:www-data /var/www/html/tileserver
sudo chmod -R g+rw /var/www/html/tileserver
Change "yourusername" above with the username of the current logged in account.
Enable the tileserver in apache:
sudo vi /etc/apache2/sites-available/tileserver.conf
Add the following to that file:
<VirtualHost *:8888>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/tileserver
<Directory /var/www/html/tileserver>
AllowOverride All
</Directory>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
#ErrorLog ${APACHE_LOG_DIR}/error.log
#CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Enable tileserver .conf file in apache:
sudo a2ensite tileserver
Allow apache to listen on port 8888 (the mbtiles server port):
sudo vi /etc/apache2/ports.conf
Add this to that file:
Listen 8888
Then restart apache:
sudo service apache2 restart
Then, edit the .env file with the appropriate credentials:
sudo vi .env
Make sure to edit the DB_CONNECTION
line to say DB_CONNECTION=pgsql
Then, fill in these lines:
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
With the proper values corresopnding to the postgresql server.
Finally, add this line:
MBTILES_SERVER=
With the address of the mbtiles server. The address must end with a trailing /
.