Install ======= QuartzMap is installed using the included installation scripts. The script will attempt to provision an SSL certificate using Certbot. .. warning:: Ensure that your hostname is properly set. If not set the hostname using 'hostnamectl set-hostname domain.com' Basic Install ------------ Clone the repository:: git clone https://git.acugis.com/AcuGIS/GeoSync.git Change to the quartz directory:: cd quartz Execute the scripts in order:: $ ./installer/postgres.sh $ ./installer/app-install.sh Upon completion, you should see the message below:: Backend installation is finished. Complete setup by navigating to https://domain.com/admin.setup.php to complete the installation. .. image:: images/installer-2.png Populate the required fields with whatever values you want to use. Manual Installation on Ubuntu 22 -------------------------------- Follow below to customize your installation. Install PostgreSQL with PostGIS ------------------------------------------ QuartzMap requires PostgreSQL with PostGIS. If you do not already have it installed, install it now. .. code-block:: bash #!/bin/bash -e apt install postgresql postgresql-contrib Install Prerequisties ------------------------------------------ For Community Edition: .. code-block:: bash apt-get -y install apache2 libapache2-mod-php php-{pgsql,zip,gd,simplexml} proftpd postfix python3-certbot-apache For Commerical Edition: .. code-block:: bash apt-get -y install apache2 libapache2-mod-php php-{pgsql,zip,gd,simplexml} proftpd libapache2-mod-fcgid postfix python3-certbot-apache install_qgis_server Create the PostGIS Database -------------------------------- .. code-block:: sql CREATE USER quartz with password 'SuperSecret'; CREATE DATABASE quartz with OWNER quartz; Create the Database Objects -------------------------------- .. code-block:: sql CREATE TYPE public.userlevel AS ENUM ('Admin', 'User'); CREATE TABLE public.user ( id SERIAL PRIMARY KEY, name character varying(250), email character varying(250), password character varying(255), ftp_user character varying(250), accesslevel public.userlevel, owner_id integer NOT NULL REFERENCES public.user(id), UNIQUE(email) ); CREATE TABLE public.access_groups ( id SERIAL PRIMARY KEY, name character varying(255) NOT NULL, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.user_access ( id SERIAL PRIMARY KEY, user_id integer NOT NULL REFERENCES public.user(id), access_group_id integer NOT NULL REFERENCES public.access_groups(id), UNIQUE(user_id, access_group_id) ); CREATE TABLE public.map ( id SERIAL PRIMARY KEY, name character varying(50) NOT NULL, description character varying(50) NOT NULL, is_public BOOLEAN DEFAULT false, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.map_access ( id SERIAL PRIMARY KEY, map_id integer NOT NULL REFERENCES public.map(id), access_group_id integer NOT NULL REFERENCES public.access_groups(id), UNIQUE(map_id, access_group_id) ); CREATE TABLE public.permalink ( id SERIAL PRIMARY KEY, description character varying(255), query character varying(255), map_id integer NOT NULL REFERENCES public.map(id), created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, expires TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + interval '1 hour', visits integer NOT NULL DEFAULT 0, visits_limit integer NOT NULL DEFAULT 1, hash character varying(36) NOT NULL, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.signup ( id SERIAL PRIMARY KEY, name character varying(250), email character varying(250), password character varying(250), verify character varying(250), UNIQUE(email) ); Configure ProFTPD ---------------------------- .. code-block:: bash sed -i.save ' s/#DefaultRoot~/DefaultRoot ~/ s/# RequireValidShelloff/RequireValidShell off/' /etc/proftpd/proftpd.conf systemctl enable proftpd systemctl restart proftpd Configure Apache ---------------------------- .. code-block:: bash a2enmod ssl headers expires fcgid cgi cp installer/apache2.conf /etc/apache2/sites-available/default-ssl.conf # Below is required for Certbot to provision SSL for f in 000-default default-ssl; do sed -i.save "s/#ServerName example.com/#ServerName ${HNAME}/" /etc/apache2/sites-available/${f}.conf done a2ensite 000-default default-ssl systemctl reload apache2 certbot --apache --agree-tos --email hostmaster@${HNAME} --no-eff-email -d ${HNAME} Create Data and Cache Directories ---------------------------- .. code-block:: bash mkdir -p "${APPS_DIR}" mkdir -p "${CACHE_DIR}" mkdir -p "${DATA_DIR}" Grant Apache permissions ---------------------------- .. code-block:: bash chown -R www-data:www-data "${APPS_DIR}" chown -R www-data:www-data "${CACHE_DIR}" chown -R www-data:www-data "${DATA_DIR}" cp -r . /var/www/html/ chown -R www-data:www-data /var/www/html rm -rf /var/www/html/installer systemctl restart apache2 Create Groups and Permissions ---------------------------- .. code-block:: bash # create group for all FTP users groupadd qatusers create_ftp_user # install ftp user creation script for f in update; do cp installer/${f}_ftp_user.sh /usr/local/bin/ chown www-data:www-data /usr/local/bin/${f}_ftp_user.sh chmod 0550 /usr/local/bin/${f}_ftp_user.sh done cat >/etc/sudoers.d/q2w <admin/incl/const.php < CAT_EOF