{"id":13587650,"url":"https://github.com/jamf/jamfpro","last_synced_at":"2025-07-05T06:02:19.877Z","repository":{"id":33689324,"uuid":"159532757","full_name":"jamf/jamfpro","owner":"jamf","description":"JamfPro Docker image","archived":false,"fork":false,"pushed_at":"2024-02-21T12:44:43.000Z","size":44,"stargazers_count":66,"open_issues_count":0,"forks_count":13,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-02-21T13:48:35.264Z","etag":null,"topics":["docker","docker-image","jamf","jamf-pro","jamfpro"],"latest_commit_sha":null,"homepage":"https://www.jamf.com","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-28T16:35:06.000Z","updated_at":"2024-08-01T16:33:41.027Z","dependencies_parsed_at":"2023-12-14T17:47:16.642Z","dependency_job_id":"3160d410-643a-42cd-9048-6eb53238afa6","html_url":"https://github.com/jamf/jamfpro","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamf%2Fjamfpro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamf%2Fjamfpro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamf%2Fjamfpro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamf%2Fjamfpro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamf","download_url":"https://codeload.github.com/jamf/jamfpro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228030028,"owners_count":17858432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-image","jamf","jamf-pro","jamfpro"],"created_at":"2024-08-01T15:06:18.162Z","updated_at":"2024-12-04T02:12:21.937Z","avatar_url":"https://github.com/jamf.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"# JamfPro Tomcat Docker Image\n\n## Please Note ##\nThe Dockerhub image has moved to the Jamf namespace and tags will pushed here:\n[Dockerhub Tags](https://hub.docker.com/r/jamf/jamfpro/tags/)\n\n\n## Description\nBasic example Docker image based upon upstream Tomcat image to run a manually downloaded JamfPro ROOT.war from JamfNation.\n\n## Note\nThis repository is provided as an example of how to construct a very basic Docker image to run a JamfPro server.\nPlease refer to this JamfNation post - [Apache Tomcat Versions Installed by the Jamf Pro Installer](https://www.jamf.com/jamf-nation/articles/380/apache-tomcat-versions-installed-by-the-jamf-pro-installer) - to determine which Tomcat versions are explictly supported for a particular version of JamfPro.\n\n## Features\n* Creates and runs Tomcat as user:group tomcat (non-root)\n* Correct pathing for JamfPro file logs\n* Logs to stdout of JamfPro logs in addition to catalina logs\n* JMX connection information\n* Remote database connection in DataBase.xml\n\n## Docker Build Options\nOverride the version of Tomcat used:\n```\ndocker build --build-arg \"TOMCAT_VERSION=8.5.85-jdk11\" -t jamfpro .\n```\nReplace the `server.template` file prior to building to override the server.xml Tomcat file.\n\n## Environment Variable Options\n```\nSTDOUT_LOGGING [ true ] / false\n\nDATABASE_HOST [ localhost ]\nDATABASE_NAME [ jamfsoftware ]\nDATABASE_USERNAME [ jamfsoftware ]\nDATABASE_PASSWORD [ jamfsw03 ]\nDATABASE_PORT [ 3306 ]\nJDBC_PARAMETERS [ ]\n\nJMXREMOTE true / [ false ]\nJMXREMOTE_PORT\nJMXREMOTE_RMI_PORT\nJMXREMOTE_SSL\nJMXREMOTE_AUTHENTICATE\nRMI_SERVER_HOSTNAME\nJMXREMOTE_PASSWORD_FILE\n\nCATALINA_OPTS\nJAVA_OPTS [ -Djava.awt.headless=true ]\n\nPRIMARY_NODE_NAME -- Enable clustering\n  This MUST be the ip address of the primary as recognized by Tomcat\n  There is no direct JamfPro primary \u003c--\u003e secondary communication so the ip need not be reachable by the secondary directly\n\nPOD_NAME -- Enable Kubernetes clustering via downward API\nPOD_IP -- Enable Kubernetes clustering via downward API\n\nMEMCACHED_HOST -- Enable Memcached caching, assumes port 11211 by default\n\nserver.xml template overrides:\n\ntomcat_executor_max_threads - 150\ntomcat_executor_min_threads - 4\ntomcat_connector_port - 8080\ntomcat_connection_timeout - 61000\ntomcat_connector_proxy_port - 443\ntomcat_connector_server - Jamf\ntomcat_connector_max_parameter_count - 300000\ntomcat_host_app_base - webapps\ntomcat_host_unpack_wars - true\ntomcat_host_auto_deploy - true\ntomcat_host_start_stop_threads - 4\ntomcat_host_stuck_threads_threshold - 600\n\n```\n\n## Data Persistence\nThis image requires that either a `/data/ROOT.war` be bind-mounted and exist, or the `/usr/bin/tomcat/webapps/ROOT` directory exist.\nA ROOT.war will be auto-unpacked and configured based upon the above environment variables, or if the ROOT directory already exists, nothing will be unpacked but logging paths, database information, JMX, and Java opts will be set.\n\n## File Override Config\nThe `DataBase.xml` file can be optionally mounted into the container's `/config` directory, this will override any environment variables set.\n\n## Example\nRun a basic JamfPro instance with port 8080 exposed locally on port 8080, setup remote database, bind-mounted ROOT.war, and bind-mounted webapps directory.\n\n```\ndocker run -p 8080:8080 -d \\\n-e DATABASE_USERNAME=root \\\n-e DATABASE_PASSWORD=jamfsw03 \\\n-e DATABASE_HOST=host.docker.internal \\\n-v $(pwd)/ROOT.war:/data/ROOT.war \\\n-v $(pwd)/webapps:/usr/local/tomcat/webapps \\\njamf/jamfpro:0.0.18\n```\nValid image tags can be found on  [Dockerhub Tags](https://hub.docker.com/r/jamf/jamfpro/tags/) or [Github Releases](https://github.com/jamf/jamfpro/releases).\n\n\n## Kubernetes Deployment\nWhen enabling clustering the Tomcat manifest should include both `POD_NAME` and `POD_IP` environment variables which can be accessed via the Kubernetes downward API.  The environment variable `PRIMARY_NODE_NAME` should be set to whichever pod will become the primary node.  An example of utilizing the downward API in a manifest:\n```\n- name: POD_NAME\nvalueFrom:\n  fieldRef:\n    fieldPath: metadata.name\n- name: POD_IP\nvalueFrom:\n  fieldRef:\n    fieldPath: status.podIP\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamf%2Fjamfpro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamf%2Fjamfpro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamf%2Fjamfpro/lists"}