MCPcopy Index your code
hub / github.com/dromara/Jpom

github.com/dromara/Jpom @v2.11.12

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.11.12 ↗ · + Follow
4,439 symbols 18,327 edges 715 files 1,874 documented · 42%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<a href="https://jpom.top/"  target="_blank">
    <img src="https://jpom.top/images/logo/jpom_logo.svg" width="400" alt="logo">
</a>






<strong>【dromara】🚀Simple and lightweight low-invasive online build, automated deployment, daily operations, and project monitoring software.</strong>

It is also a native ops software / 中文

<a target="_blank" href="https://gitee.com/dromara/Jpom">
    <img src='https://gitee.com/dromara/Jpom/badge/star.svg?theme=gvp' alt='gitee star'/>
</a>
<a target="_blank" href="https://github.com/dromara/Jpom">
    <img src="https://img.shields.io/github/stars/dromara/Jpom.svg?style=social" alt="github star"/>
</a>
<a target="_blank" href="https://license.coscl.org.cn/MulanPSL2">
    <img src="https://img.shields.io/:license-MulanPSL2-blue.svg" alt="license"/>
  </a>
<a target="_blank" href="https://gitee.com/dromara/Jpom">
    <img src='https://img.shields.io/badge/JDK-1.8.0_40+-green.svg' alt='jdk'/>
</a>







<a target="_blank" href="https://www.codacy.com/gh/dromara/Jpom/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=dromara/Jpom&amp;utm_campaign=Badge_Grade">
  <img src="https://app.codacy.com/project/badge/Grade/843b953f1446449c9a075e44ea778336" alt="codacy"/>
</a>

docker pull docker pull

👉 International Station:<a target="_blank" href="https://jpom.dromara.org">https://jpom.dromara.org</a>  👈






👉Mainland Station:<a target="_blank" href="https://jpom.top">https://jpom.top/</a>  👈

😭 Do you experience these pain points in your daily development?

  • No dedicated operations team, so developers have to handle operations tasks, including manual project building and deployment.
  • Different projects require different build and deployment commands.
  • Need to package for various environments like development, testing, and production.
  • Need to monitor the status of multiple projects simultaneously.
  • Need to download SSH tools to remotely connect to servers.
  • Need to download FTP tools to transfer files to servers.
  • Syncing account passwords across multiple servers and computers is inconvenient.
  • Want to use automation tools, but they are high-demanding on server performance and too complicated to set up.
  • Have specific needs for automation tools and want to modify the project, but existing tools are too complex.

For distributed projects, these steps are even more cumbersome.

Let Jpom help you solve these pain points! And these are just the basic features that Jpom offers.

😁 After using Jpom

  • Convenient User Management
  • User activity monitoring, with email notifications for specific user actions
  • Multi-user management with independent project permissions (control over upload and delete rights), comprehensive operation logs, and workspace-based permission isolation
  • Accounts can enable MFA (Multi-Factor Authentication) for security
  • Real-time interface to view project status, console logs, and manage project files
    1. Edit project text files online
  • Docker container management and Docker Swarm cluster management(Docker UI
  • Online SSH Terminal, allowing easy server management without using PuTTY, Xshell, FinalShell, etc.
    1. No need to know server passwords after logging into the Jpom system
    2. Specify forbidden SSH commands to prevent high-risk operations and automatically log command execution
    3. Set file directories to manage project files and configuration files online
    4. Execute SSH command templates and schedule scripts online
    5. Edit text files online
    6. Lightweight implementation of basic"bastion host"functionality
  • One-click cluster project deployment using project distribution
  • Online build process eliminates the need for manual project updates and upgrades
  • Supports pulling from GIT and SVN repositories
  • Supports container builds (docker)
    1. Supports SSH-based deployment
  • Supports scheduled builds
    1. Supports WebHook-triggered builds
  • Supports online editing of nginx configuration files and automatic reload operations
    1. Manage nginx status and SSL certificates
  • Automatic alerts and restart attempts for abnormal project status
    1. Supports notifications via email, DingTalk groups, and WeChat groups, actively monitoring project status
  • Node script templates with scheduling or triggers for expanded functionality
  • Configurable authorization for important paths to prevent user errors with system files

🔔️ Special Reminders

  1. On Windows servers, some features may have compatibility issues due to system characteristics. It is recommended to thoroughly test in practical use. Linux currently has good compatibility.
  2. Install the server and plugin components in different directories; do not install them in the same directory.
  3. To uninstall Jpom plugin or server components, first stop the corresponding service, then delete the related program files, log folders, and data directories.
  4. Local builds depend on the system environment. If build commands require Maven or Node.js, ensure the corresponding environment is installed on the build server. If the environment is installed after the server is started, restart the server via the command line for the environment to take effect.
  5. On Ubuntu/Debian servers, the plugin component may fail to add. Please create a .bash_profile file in the root directory of the current user.
  6. After upgrading to version 2.7.x, downgrading is not recommended due to potential data incompatibility issues.
  7. Currently, version 2.x.x uses HTTP for communication between the plugin and server components, so ensure network connectivity between them during use.
  8. Jpom version 3.0 is already being planned. Stay tuned for the new release!

🗒️ Changelog

Must-read before upgrading: CHANGELOG.md

📥 Installing Jpom

Jpom supports various installation methods to meet different user needs. Just choose one method to install.

Method 1: 🚀(Recommended) One-click Installation (Linux)

One-click Server Installation

Note: The installation directory is the current directory where the command is executed!

⚠️ Special Reminder: When using the one-click installation, ensure the command is executed in different directories. The Server and Agent cannot be installed in the same directory!

To change the data and log storage paths of the server, modify the jpom.path configuration property in the file application.yml

# Default one-click installation
curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default
# Default one-click installation and automatic startup service configuration
curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default+service

# Install server and jdk environment
yum install -y wget && \
wget -O install.sh https://jpom.top/docs/install.sh && \
bash install.sh Server jdk

# Install server and jdk, maven environment
yum install -y wget && \
wget -O install.sh https://jpom.top/docs/install.sh && \
bash install.sh Server jdk+mvn

# ubuntu
apt-get install -y wget && \
wget -O install.sh https://jpom.top/docs/install.sh && \
bash install.sh Server jdk

After a successful startup, the server port is 2122. You can access the management page via http://127.0.0.1:2122/ (if not accessing from the local machine, replace 127.0.0.1 with the IP address of the installed server).

If you cannot access the management system, run the command systemctl status firewalld to check if the firewall is enabled. If you see Active: active (running) in green in the status bar, you need to allow port 2122.

```bash

Allow port 2122 for the management system

firewall-cmd --add-port=2122/tcp --permanent

Reload the firewall to take effect

firewall-cmd --reload ```

If you have allowed the port in the operating system but still cannot access it, and you are using a cloud server, check the security group rules in the cloud server's control panel to see if port 2122 is allowed.

⚠️ Note: There are multiple firewalls in Linux systems: Firewall, Iptables, SELinux, etc. When checking firewall configurations, make sure to check all of them.

One-Click Agent Installation

If the server where the server side is installed also needs to be managed, you need to install the agent on the server side as well (both the server and agent can be installed on the same server but in different directories).

⚠️ Special reminder: Do not execute the one-click installation command in the same directory for both the Server and Agent!

If you need to modify the agent data and log storage paths, update the jpom.path configuration property in the file application.yml

# Default one-click installation
curl -fsSL https://jpom.top/docs/install.sh | bash -s Agent jdk+default
# Default one-click installation and auto-configure startup service
curl -fsSL https://jpom.top/docs/install.sh | bash -s Agent jdk+default+service

# Install agent and JDK environment
yum install -y wget && \
wget -O install.sh https://jpom.top/docs/install.sh && \
bash install.sh Agent jdk

# ubuntu
apt-get install -y wget && \
wget -O install.sh https://jpom.top/docs/install.sh && \
bash install.sh Agent jdk

After a successful startup, the agent port is 2123, which is used by the server.

Method 2: 📦 Container Installation

⚠️ Note: Container installation requires Docker to be installed first. Click here for Docker installation documentation

One-Command Installation

docker run -p 2122:2122 --name jpom-server jpomdocker/jpom

Using Mount to Store Data (may have compatibility issues in some environments)

  1. Alibaba Cloud Repository
docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom
mkdir -p /home/jpom-server/logs
mkdir -p /home/jpom-server/data
mkdir -p /home/jpom-server/conf
docker run -d -p 2122:2122 \
    --name jpom-server \
    -v /home/jpom-server/logs:/usr/local/jpom-server/logs \
    -v /home/jpom-server/data:/usr/local/jpom-server/data \
    -v /home/jpom-server/conf:/usr/local/jpom-server/conf \
    jpomdocker/jpom
  1. Docker Hub Repository
docker pull jpomdocker/jpom
mkdir -p /home/jpom-server/logs
mkdir -p /home/jpom-server/data
mkdir -p /home/jpom-server/conf
docker run -d -p 2122:2122 \
    --name jpom-server \
    -v /home/jpom-server/logs:/usr/local/jpom-server/logs \
    -v /home/jpom-server/data:/usr/local/jpom-server/data \
    -v /home/jpom-server/conf:/usr/local/jpom-server/conf \
    jpomdocker/jpom

Using Docker Volumes to Store Data

  1. Alibaba Cloud Repository
docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom
docker volume create jpom-server-data
docker volume create jpom-server-logs
docker volume create jpom-server-conf
docker run -d -p 2122:2122 \
    --name jpom-server \
    -v jpom-server-data:/usr/local/jpom-server/data \
    -v jpom-server-logs:/usr/local/jpom-server/logs \
    -v jpom-server-conf:/usr/local/jpom-server/conf \
    jpomdocker/jpom
  1. Docker Hub Repository
docker pull jpomdocker/jpom
docker volume create jpom-server-data
docker volume create jpom-server-logs
docker volume create jpom-server-conf
docker run -d -p 2122:2122 \
    --name jpom-server \
    -v jpom-server-data:/usr/local/jpom-server/data \
    -v jpom-server-logs:/usr/local/jpom-server/logs \
    -v jpom-server-conf:/usr/local/jpom-server/conf \
    jpomdocker/jpom

Container installation only provides the server version. Due to isolation between the container and the host environment, many functionalities of the agent cannot be used properly. Therefore, containerization of the agent is not very meaningful.

For more information on installing Docker, configuring images, auto-start, and locating the installation directory, refer to the documentation https://jpom.top/pages/b63dc5/

In lower versions of Docker, you may encounter the error ls: cannot access'/usr/local/jpom-server/lib/': Operation not permitted In this case, add the --privileged parameter Example: docker run -p 2122:2122 --name jpom-server jpomdocker/jpom --privileged

Method 3: 💾 Download and Install

  1. Download the installation package from https://jpom.top/pages/all-downloads/
  2. Extract the files
  3. Install the agent:
    1. The agent-x.x.x-release directory contains all the installation files for the agent
    2. Upload the entire directory to the corresponding server
    3. Start the agent. Use the bat script on Windows and the sh script on Linux (if there are garbled characters or execution issues, check the encoding format and line endings)
    4. The default running port for the agent is 2123
  4. Install the server:
    1. The server-x.x.x-release directory contains all the installation files for the server
    2. Upload the entire directory to the corresponding server
    3. Start the server. Use the bat script on Windows and the sh script on Linux (if there are garbled characters o

Extension points exported contracts — how you extend this code

IMode (Interface)
@author bwcx_jzy @since 2023/1/5 [8 implementers]
modules/storage-module/storage-module-common/src/main/java/org/dromara/jpom/db/IMode.java
Encryptor (Interface)
@author loyal.f @since 2023/3/9 [6 implementers]
modules/sub-plugin/encrypt/src/main/java/org/dromara/jpom/encrypt/Encryptor.java
II18nMessageUtil (Interface)
@author bwcx_jzy1 @since 2024/6/11 [19 implementers]
modules/agent-transport/agent-transport-common/src/main/java/org/dromara/jpom/transport/i18n/II18nMessageUtil.java
StartupCommand (Interface)
启动命令接口 @author bwcx_jzy @since 2024/12/08 [6 implementers]
modules/server/src/main/java/org/dromara/jpom/startup/StartupCommand.java
IDefaultPlugin (Interface)
插件模块接口 @author bwcx_jzy @since 2021/12/22 [6 implementers]
modules/common/src/main/java/org/dromara/jpom/plugin/IDefaultPlugin.java
ProjectCommander (Interface)
@author bwcx_jzy @since 23/12/29 029 [2 implementers]
modules/agent/src/main/java/org/dromara/jpom/common/commander/ProjectCommander.java
StorageObjectType (Interface)
(no doc)
web-vue/src/components/customTable/utils/StorageService.ts
IStorageSqlBuilderService (Interface)
@author bwcx_jzy @since 2023/1/5 [7 implementers]
modules/storage-module/storage-module-common/src/main/java/org/dromara/jpom/db/IStorageSqlBuilderService.java

Core symbols most depended-on inside this repo

get
called by 2025
modules/common/src/main/java/org/dromara/jpom/common/i18n/I18nMessageUtil.java
put
called by 730
modules/server/src/main/java/org/dromara/jpom/oauth2/Oauth2Factory.java
get
called by 689
modules/agent-transport/agent-transport-common/src/main/java/org/dromara/jpom/transport/i18n/II18nMessageUtil.java
append
called by 512
modules/server/src/main/java/org/dromara/jpom/socket/handler/SshHandler.java
println
called by 468
modules/sub-plugin/git-clone/src/main/java/org/dromara/jpom/plugin/JGitUtil.java
success
called by 449
modules/server/src/main/java/org/dromara/jpom/func/user/server/UserLoginLogServer.java
getId
called by 405
modules/server/src/main/java/org/dromara/jpom/func/files/model/IFileStorage.java
getName
called by 316
modules/server/src/main/java/org/dromara/jpom/func/files/model/IFileStorage.java

Shape

Method 3,203
Class 629
Function 536
Interface 45
Enum 26

Languages

Java87%
TypeScript13%

Modules by API surface

modules/server/src/main/java/org/dromara/jpom/service/h2db/BaseDbService.java36 symbols
modules/common/src/main/java/org/dromara/jpom/common/JpomManifest.java34 symbols
web-vue/src/api/node-project.ts32 symbols
modules/sub-plugin/docker-cli/src/main/java/org/dromara/jpom/DefaultDockerPluginImpl.java32 symbols
web-vue/src/api/user/user.ts31 symbols
web-vue/src/api/docker-api.ts31 symbols
modules/agent/src/main/java/org/dromara/jpom/common/commander/AbstractProjectCommander.java27 symbols
web-vue/src/api/system.ts26 symbols
modules/sub-plugin/docker-cli/src/main/java/org/dromara/jpom/DockerBuild.java25 symbols
modules/server/src/main/java/org/dromara/jpom/func/files/service/StaticFileStorageService.java25 symbols
web-vue/src/utils/const.ts23 symbols
web-vue/src/api/node.ts23 symbols

Datastores touched

(mysql)Database · 1 repos
jpomDatabase · 1 repos
jpomDatabase · 1 repos

For agents

$ claude mcp add Jpom \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact