Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

ProjectForge - project management solution

ProjectForge is a web-based solution for project management including time tracking, team calendar, gantt-charting, financial administration, issue management, controlling and managing work-break-down-structures (e. g. together with JIRA as issue management system).

Building a local image with the helper script

docker/build-local.sh is the fastest way to get a self-contained instance, e. g. for handing a test or pentest system over to somebody else. It detects docker/podman, finds the boot jar built by Gradle (the version string doesn’t have to be known), copies it into the build context and cleans up afterwards.

  1. ./gradlew :projectforge-application:bootJar

  2. docker/build-local.sh --save (see --help for all options)

Options worth knowing: --platform linux/amd64 (cross build via buildx, needed if the recipient isn’t on arm64), --save (writes build/docker/projectforge-pentest.tar for handing the image over), --run (starts the container right away), --tag, --dir, --base-image.

Test/pentest instance with the embedded HSQLDB

The single container supports the embedded HSQLDB: docker/entrypoint.sh starts with -Ddocker=single by default, and only -Ddocker=stack (docker compose) or -Dprojectforge.setup=postgres removes the embedded option from the setup wizard. No PostgreSQL, no compose stack needed.

Preparing the image (your side)

./gradlew :projectforge-application:bootJar
docker/build-local.sh --save

This writes build/docker/projectforge-pentest.tar, roughly 700 MB. Note that the image is built for your native architecture. If the recipient isn’t on arm64 too, build with docker/build-local.sh --platform linux/amd64 --save.

Setting the instance up (recipient’s side)

Requirement: docker or podman. All docker commands below work with podman as well.

  1. Load the image:
    docker load -i projectforge-pentest.tar

  2. Prepare the configuration. Pre-seeding projectforge.properties skips the interactive console setup wizard, so the entrypoint does a "Normal start" right away:

    mkdir -p ~/ProjectForgePentest
    cat > ~/ProjectForgePentest/projectforge.properties <<'EOF'
    server.address=0.0.0.0
    server.port=8080
    projectforge.domain=http://localhost:8080
    # Activate all plugins, instead of clicking them in administration -> plugins:
    projectforge.plugins.active=all
    projectforge.currencySymbol=€
    projectforge.currency=EUR
    projectforge.defaultLocale=en
    projectforge.defaultTimeNotation=H24
    projectforge.defaultFirstDayOfWeek=MONDAY
    EOF

    server.address=0.0.0.0 is mandatory, otherwise the server binds to localhost inside the container only and the port isn’t reachable from the host.

  3. Start the container:

    docker run -d -p 127.0.0.1:8080:8080 \
      -v ~/ProjectForgePentest:/ProjectForge \
      --name projectforge-pentest projectforge:pentest

    The first start takes about a minute, Flyway creates the HSQLDB schema. Follow it with docker logs -f projectforge-pentest and wait for ProjectForge is now available (up and running).

  4. Initialize the database: open http://localhost:8080 and complete the setup page. Choose target Test system for a database filled with test data (Productive system gives an empty one), set an admin account with a password and pick a time zone.

  5. Restart once, recommended for full plugin functionality:
    docker restart projectforge-pentest

Afterwards log in with the admin account. All plugins are active (banking, data transfer, Merlin, marketing, skill matrix, to-do, memo, IHK, liquidity planning, license management).

Alternatively skip step 2 and run the container with -t -i instead of -d: without /ProjectForge/projectforge.properties the entrypoint runs the console setup wizard in the foreground. The embedded database is the default there, the base directory selection is skipped in docker mode.

Resetting, and useful commands

Reset the instance (the embedded database lives in ~/ProjectForgePentest/database), then continue at step 2 again:

docker rm -f projectforge-pentest && rm -rf ~/ProjectForgePentest
  • Log file: tail -f ~/ProjectForgePentest/logs/ProjectForge.log

  • Shell inside the container: docker exec -it projectforge-pentest bash

  • JVM memory settings: ~/ProjectForgePentest/environment.sh, e. g. export JAVA_OPTS="-Xmx2g", followed by a restart

  • More verbose logging while testing: projectforge.development.mode=true in projectforge.properties

The port is published on 127.0.0.1 only. To reach the instance from another machine, use -p 8080:8080 and adjust projectforge.domain accordingly.

Building and testing docker image locally (manually)

  1. docker login

  2. export PF_VERSION=8.0

  3. Build docker test image:

    1. docker buildx build --platform linux/arm64 --build-arg JAR_FILE=projectforge-application-$PF_VERSION.jar -t projectforge:latest-arm64-test \--load ., or

    2. 'docker buildx build --platform linux/amd64 --build-arg JAR_FILE=projectforge-application-$PF_VERSION.jar -t projectforge:latest-amd64-test \--load .'

  4. Run: docker run -t -i -p 127.0.0.1:8080:8080 -v ~/ProjectForgeDocker:/ProjectForge --name projectforge projectforge:latest-arm64-test

  5. Enter docker: docker exec -it projectforge bash

  6. Restart: docker start -ai projectforge

Edit memory settings etc. in ProjectForge/environment.sh.

Deleting test container: 1. docker stop projectforge 2. docker rm projectforge 3. docker images 4. docker rmi <image-id>

With external PostgreSQL

tbd.

Putting all together (ProjectForge, Nginx and PostgreSQL)

  1. Go to sub-directory
    cd compose

tbd.

Deploying docker images

Please refer /doc/deployment.adoc for detailed information.

FAQ

  • Can’t access port 8080?
    The built-in main application.properties defines server.address=localhost, therefore this port can’t be exported to the host system. In docker mode ProjectForge forces server.address=0.0.0.0 (see LantSetupWizard), so the setup wizard writes this value into /ProjectForge/projectforge.properties. When seeding that file manually, set server.address=0.0.0.0 yourself.
    Through the docker run option -p 8080:8080 the port is exported to the host.