Sign inSign up

npullar/sola-community-server

By npullar

Updated 2 months ago

Server image of Community Server solution

Image
0

2.7K

npullar/sola-community-server repository overview

DockerFile Implementation

This DockerFile implementation should be used in combination with the sola-community-db image. To run this SOLA Community Serverimage, first run the sola-community-db image then this image using the following commands on a computer running Docker Desktop:

  • docker run -p 5432:5432 --name cs-db -e POSTGRES_PASSWORD=sola -d npullar/sola-community-db

  • docker run --name cs-pgadmin -p 81:80 -e "PGADMIN_DEFAULT_EMAIL=[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=your-password" -d dpage/pgadmin4

  • docker run --name cs-portainer -p 9000:80 -d portainer/portainer

  • docker run -p 4848:4848 -p 8080:8080 -p 8181:8181 --name cs-server --link cs-db:database -d npullar/sola-community-server

  • docker run --name cs-geoserver -p 8085:8080 -d oscarfonts/geoserver

  • docker run --name cs-jasperserver -p 8090:8080 -e "DB_TYPE=postgresql" -e "DB_HOST=localhost" -e "DB_PORT=5432" -e "DB_USER=postgres" -e "DB_PASSWORD=sola" -d retriever/jasperserver

  • docker run --name cs-db-backups -e "POSTGRES_DB=sola" -e "POSTGRES_HOST=localhost" -e "DB_PORT=5432" -e "POSTGRES_USER=postgres" -e "POSTGRES_PASSWORD=sola" -e "POSTGRES_EXTRA_OPTS=-Z9 -e "SCHEDULE=@daily" -e "BACKUP_KEEP_DAYS=7" -e "BACKUP_KEEP_WEEKS=4" -e "BACKUP_KEEP_MONTHS=6" -e "HEALTHCHECK_PORT=85" -d prodrigestivill/postgres-backup-local

The command to run sola-community-db should be run on one shell/powershell session. Once complete, the other docker commands (listed above) can be run on a new, separate shell/powershell session. On the first run of the cs-server service the SOLA Community application is deployed into the Payara application server. Allow up to 2 minutes for the container to completely initialize.

To access the Payara Admin console, go to http://localhost:4848. The credentials to login to Payara are username=admin and password=admin.

To access the PGadmin console , go to http://localhost:81. The credentials to login to PGadmin are what you entered in the pgadmin4 Docker command above.

To access the Geoserver Admin console, go to http://localhost:8085/geoserver. The credentials to login to Geoserver are username=admin and password=geoserver.

To access the Portainer console, go to http://localhost:9000. The credentials to login to Portainer are username=admin and password=portainer.

To access the JasperServer Admin console, go to http://localhost:8090. The credentials to login to JasperServer are username=jasperadmin and password=jasperadmin.

To access the SOLA Community Server web application, go to http://localhost:8080 (or https://localhost:8181). Note that SOLA does support Java 8. The username and password to login into SOLA Community Server is username=test and password=test.

To access the SOLA Web Admin app, go to https://localhost:8181/admin. The test/test credentials can also be used to login to the SOLA Web Admin app.

With both SOLA web applications, if you are shown an error page after you login, check the hostname in the URL is still set to localhost. If not, update the URL and refresh the page.

The output from the run command is a docker container called cs-server (instance of the sola-community-server image). To stop or restart this container use the following commands:

  • docker stop cs-server
  • docker start cs-server

This image can be rebuilt using the Docker files located at https://github.com/OpenTenure/docker

Docker Compose

Includes the complete SOLA Community Server solution including Geoserver, JasperReports, PGadmin, Portainer, Traefik (reverser proxy) and automated PostgreSQL backups. The Docker-compose yml file can be used to start multiple containers supporting the SOLA Community Server solution. Relevant docker-compose commands are:

  • docker-compose up -d (to install)

  • docker-compose stop (to shutdown all services or individual docker-compose services individuals using names as in yml file)

  • docker-compose start (to start all services or individual services by yml service names

  • docker-compose down -v --rmi all --remove-orphans (to uninstall and remove all docker containers & images associated with this SOLA Community Server Docker setup)

  • docker system prune

It will take up to 5 minutes to complete the Jasper Reports install and before all the SOLA Community Server (and Open Tenure) services can be accessed. These services are:

For the Traefik reverse-proxy arrangements (under development) you need to run this Docker command before the docker-compose up -d command

  • docker network create t1_proxy

docker-compose.yml

  version: "3.7"
  networks:
      t1_proxy:
       external:
          name: t1_proxy
  services:
    traefik:
      image: traefik:maroilles
     container_name: traefik
     restart: unless-stopped
    networks:
      - sola-cs
      - t1_proxy
   ports:
     - "80:80"
     - "443:443"
#     - "$TRAEFIK_PORT:8080"
   domainname: $DOMAINNAME
   dns:
      - 1.1.1.1
   volumes:
     - /var/run/docker.sock:/var/run/docker.sock:ro
     - $USERDIR/docker/traefik1:/etc/traefik
     - $USERDIR/docker/shared:/shared
   environment:
     CF_API_EMAIL: $CLOUDFLARE_EMAIL
     CF_API_KEY: $CLOUDFLARE_API_KEY
   labels:
     traefik.enable: "true"
     traefik.backend: traefik
     traefik.protocol: http
     traefik.port: 8080
#      traefik.frontend.rule: Host:traefik.$DOMAINNAME
     traefik.frontend.rule: Host:$DOMAINNAME;PathPrefixStrip:/traefik
     traefik.docker.network: t1_proxy
#      traefik.frontend.passHostHeader: "true"
     traefik.frontend.headers.SSLForceHost: "true"
     traefik.frontend.headers.SSLRedirect: "true"
     traefik.frontend.headers.browserXSSFilter: "true"
     traefik.frontend.headers.contentTypeNosniff: "true"
     traefik.frontend.headers.forceSTSHeader: "true"
     traefik.frontend.headers.STSSeconds: 315360000
     traefik.frontend.headers.STSIncludeSubdomains: "true"
     traefik.frontend.headers.STSPreload: "true"
     traefik.frontend.headers.customResponseHeaders: X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex
#      traefik.frontend.headers.frameDeny: "true" #customFrameOptionsValue overrides this
     traefik.frontend.headers.customFrameOptionsValue: 'allow-from https:$DOMAINNAME'
#      traefik.frontend.auth.basic.users: '$HTTP_USERNAME:$HTTP_PASSWORD'

# Portainer - Container Management
# Needs trailing / in the URL if using PathPrefixStrip
    cs-portainer:
      image: portainer/portainer:latest
     container_name: cs-portainer
     restart: unless-stopped
     networks:
       - t1_proxy
#    ports:
#      - "$PORTAINER_PORT:9000"
     command: -H unix:///var/run/docker.sock
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock
       - $USERDIR/docker/portainer/data:/data
     environment:
     TZ: $TZ
     labels:
       traefik.enable: "true"
       traefik.backend: cs-portainer
       traefik.protocol: http
       traefik.port: 9000
#      traefik.frontend.rule: Host:portainer.$DOMAINNAME
       traefik.frontend.rule: Host:$DOMAINNAME;PathPrefixStrip:/portainer
       traefik.docker.network: t1_proxy
#      traefik.frontend.passHostHeader: "true"
       traefik.frontend.headers.SSLForceHost: "true"
       traefik.frontend.headers.SSLRedirect: "true"
       traefik.frontend.headers.browserXSSFilter: "true"
       traefik.frontend.headers.contentTypeNosniff: "true"
       traefik.frontend.headers.forceSTSHeader: "true"
       traefik.frontend.headers.STSSeconds: 315360000
       traefik.frontend.headers.STSIncludeSubdomains: "true"
       traefik.frontend.headers.STSPreload: "true"
       traefik.frontend.headers.customResponseHeaders: X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex
       traefik.frontend.headers.customFrameOptionsValue: 'allow-from https:$DOMAINNAME'
#   For external authentication (see www.portainer.io support for more details)
#     traefik.frontend.auth.forward.address: "http://oauth:4181"
#      traefik.frontend.auth.forward.authResponseHeaders: X-Forwarded-User
#      traefik.frontend.auth.forward.trustForwardHeader: "true"

# An instance of Postgres with the CS SOLA database
   cs-db:
     container_name: cs-db
     image: npullar/sola-community-db
     restart: unless-stopped
     networks:
       sola-cs:
         aliases:
           - database
#    ports:
#      - "$PG_PORT:5432"
     environment:
       POSTGRES_PASSWORD: $PG_PASSWORD
       CREATE_SOLA_DB: $CREATE_SOLA_DB
       SOLA_LOAD_DATA: $SOLA_LOAD_DATA
       TZ: $TZ
     volumes:
       - $USERDIR/docker/postgres/data:/var/lib/postgresql/data
     labels:
       traefik.enable: "false"

    # Container that deploys pgAdmin4 to allow administration of the SOLA database. Accessible from
    # http:domain.name/pgadmin with [email protected] and passwd=sola

   cs-pgadmin:
       image: dpage/pgadmin4
       container_name: cs-pgadmin
       restart: unless-stopped
 #      ports:
 #        - "$PGADMIN_PORT:80"
       volumes:
         - $USERDIR/docker/backups/adhoc:/backups
       environment:
          PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL
          PGADMIN_DEFAULT_PASSWORD: $PGADMIN_DEFAULT_PASSWORD
          SCRIPT_NAME: $PGADMIN_SCRIPT
          TZ: $TZ
       networks:
         - sola-cs
       labels:
         traefik.enable: "true"
         traefik.backend: cs-pgadmin
         traefik.frontend.rule: Host:$DOMAINNAME;PathPrefix:/pgadmin
     #      traefik.frontend.rule: Host:pgadmin.${DOMAINNAME}
         traefik.frontend.headers.SSLRedirect: "true"
         traefik.frontend.headers.STSSeconds: 315360000
         traefik.frontend.headers.browserXSSFilter: "true"
         traefik.frontend.headers.contentTypeNosniff: "true"
         traefik.frontend.headers.forceSTSHeader: "true"
         traefik.frontend.headers.SSLHost: $DOMAINNAME
         traefik.frontend.headers.STSIncludeSubdomain: "true"
         traefik.frontend.headers.STSPreload: "true"
     #      traefik.frontend.headers.frameDeny: "true" #customFrameOptionsValue overrides this
         traefik.frontend.headers.customFrameOptionsValue: allow-from https:$DOMAINNAME

   cs-server:
       image: npullar/sola-community-server:prerelease
       container_name: cs-server
       restart: unless-stopped
       ports:
        - "$PAYARA_ADMIN_PORT:4848"
        - "$SOLA_SRV_PORT:8080"
        - "$WEB_ADMIN_PORT:8181"
       depends_on:
        - cs-jasperserver
       environment:
         WAIT_TIME: 180
         TZ: $TZ
       networks:
           - t1_proxy
           - sola-cs
       labels:
         traefik.enable: "true"
         traefik.docker.network: t1_proxy
         traefik.backend: cs-server
         traefik.cs.port: 8080
         traefik.cs.protocol: http
         traefik.cs.frontend.rule: Host:$DOMAINNAME
         traefik.payara.port: 4848
         traefik.payara.protocol: http
         traefik.payara.frontend.rule: Host:$DOMAINNAME;PathPrefix:/payara
         traefik.frontend.headers.SSLRedirect: "true"
         traefik.frontend.headers.STSSeconds: 315360000
         traefik.frontend.headers.browserXSSFilter: true
         traefik.frontend.headers.contentTypeNosniff: "true"
         traefik.frontend.headers.forceSTSHeader: "true"
         traefik.frontend.headers.SSLHost: $DOMAINNAME
         traefik.frontend.headers.STSIncludeSubdomains: "false"
         traefik.frontend.headers.STSPreload: "true"
 #        traefik.cs.frontend.headers.frameDeny: "true" #customFrameOptionsValue overrides this
         traefik.frontend.headers.customFrameOptionsValue: allow-from https:$DOMAINNAME

   cs-jasperserver:
     image: retriever/jasperserver
     container_name: cs-jasperserver
     restart: unless-stopped
     ports:
       - "$JASPER_PORT:8080"
     depends_on:
       - cs-db
     environment:
       DB_TYPE: $DB_TYPE
       DB_HOST: $PG_HOST
       DB_PORT: $PG_PORT
       DB_USER: $PG_USER
       DB_PASSWORD: $PG_PASSWORD
       DB_NAME_SOLA: $PG_DB
       TZ: $TZ
     networks:
       - sola-cs
     volumes:
       - $USERDIR/docker/jasperserver-import:/jasperserver-import

   cs-db-backups:
       image: prodrigestivill/postgres-backup-local
       container_name: cs-db-backups
       restart: unless-stopped
       volumes:
           - $USERDIR/docker/backups/pg-cs:/backups
       links:
           - cs-db
       depends_on:
           - cs-db
       environment:
           POSTGRES_HOST: $PG_HOST
           POSTGRES_DB: $PG_DB
           POSTGRES_USER: $PG_USER
           POSTGRES_PASSWORD: $PG_PASSWORD
        #  POSTGRES_PASSWORD_FILE=/run/secrets/db_password <-- alternative for POSTGRES_PASSWORD (to use with docker secrets)
           POSTGRES_EXTRA_OPTS: $POSTGRES_EXTRA_OPTS
           SCHEDULE: $SCHEDULE
           BACKUP_KEEP_DAYS: $BACKUP_KEEP_DAYS
           BACKUP_KEEP_WEEKS: $BACKUP_KEEP_WEEKS
           BACKUP_KEEP_MONTHS: $BACKUP_KEEP_MONTHS
           HEALTHCHECK_PORT: $HEALTHCHECK_PORT
           TZ: $TZ
       networks:
         - sola-cs

 # Uses https://hub.docker.com/r/oscarfonts/geoserver. Exposes Geoserver on port 8085
 # IMPORTANT: Replace /C//Work/Lidar_Imagery with the location of your data_dir on your local computer.  The path needs to use
 #            unix style path names so if using Windows, need to use /C// instead of c:\
   cs-geoserver:
       image: oscarfonts/geoserver
       container_name: cs-geoserver
       restart: unless-stopped
       ports:
         - "$GEOSERVER_PORT:8080"
       depends_on:
         - cs-db
       volumes:
 #          - /C//$USERDIR/docker/geoserver_data:/var/local/geoserver  # Windows
         - $USERDIR/docker/geoserver_data:/var/local/geoserver  #Linux and Mac
       environment:
         TZ: $TZ
       networks:
         - sola-cs
         - t1_proxy
       labels:
         traefik.enable: "true"
         traefik.docker.network: t1_proxy
         traefik.backend: cs-geoserver
         traefik.port: 8080
         traefik.protocol: http
         traefik.frontend.rule: Host:${DOMAINNAME};PathPrefix:/geoserver
   #      traefik.frontend.rule=Host:geoserver.$DOMAINNAME
         traefik.frontend.headers.SSLRedirect: "true"
         traefik.frontend.headers.STSSeconds: 15360000
         traefik.frontend.headers.browserXSSFilter: "true"
         traefik.frontend.headers.contentTypeNosniff: "true"
         traefik.frontend.headers.forceSTSHeader: "true"
         traefik.frontend.headers.SSLHost: $DOMAINNAME
         traefik.frontend.headers.STSIncludeSubdomains: "false"
         traefik.frontend.headers.STSPreload: "true"
 #        traefik.frontend.headers.frameDeny: true" #customFrameOptionsValue overrides this
         traefik.frontend.headers.customFrameOptionsValue: allow-from https:$DOMAINNAME

Tag summary

Content type

Image

Digest

sha256:9ed2ab725

Size

579.8 MB

Last updated

2 months ago

docker pull npullar/sola-community-server:2026-07-18