{
    "componentChunkName": "component---src-templates-issues-tsx",
    "path": "/issues/254",
    "result": {"data":{"issuesJson":{"id":"9b4669e8-e367-53d0-9a93-e0fcfb0d3bff","title":"dromara/Jpom: 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件","number":254,"bodyHTML":"<div align=\"center\" dir=\"auto\">\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a><br><br></p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"right\">Repos</th>\n<th align=\"left\"><a href=\"https://github.com/dromara/Jpom\">dromara/Jpom</a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"right\"><strong>Views</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/4e64a78e65ed9aa9d9684876b16065953de3972e880e7aebde07cdab062651fa/68747470733a2f2f76696577732e77686174696c656172656e65642e746f6461792f76696577732f6769746875622f64726f6d6172612f4a706f6d2e737667\" alt=\"views\" data-canonical-src=\"https://views.whatilearened.today/views/github/dromara/Jpom.svg\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Stars</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/495444d04fc9e2c3a5ac542a55c28805c9b628c03b8b05a3e0ce80cecd5c1226/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f64726f6d6172612f4a706f6d3f636f6c6f723d663266303864266c6f676f3d556e64657274616c65266c6f676f436f6c6f723d656234363330\" alt=\"stars\" data-canonical-src=\"https://img.shields.io/github/stars/dromara/Jpom?color=f2f08d&amp;logo=Undertale&amp;logoColor=eb4630\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Forks</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/cc48c4c3d9c18a28b81943987c07e279d3a7a7f96b33cc70493a976af045f0ea/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f64726f6d6172612f4a706f6d3f636f6c6f723d626138366562266c6f676f3d48616e647368616b65266c6f676f436f6c6f723d656136616136\" alt=\"forks\" data-canonical-src=\"https://img.shields.io/github/forks/dromara/Jpom?color=ba86eb&amp;logo=Handshake&amp;logoColor=ea6aa6\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>License</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/0c93ca71e73bb599dbfbd81eb5bbb82f63a427dc55ced5d8a7de2d4025f1f1c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c2d4e4f4e452d626c75653f6c6f676f3d756e6c6963656e7365\" alt=\"license\" data-canonical-src=\"https://img.shields.io/badge/L-NONE-blue?logo=unlicense\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>UpdatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/c07bbff0d59d8a9785f85fc967f7949d546d44b596645821e6219e716e62f912/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f64726f6d6172612f4a706f6d3f646973706c61795f74696d657374616d703d636f6d6d6974746572266c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d557064617465644174\" alt=\"last-commit\" data-canonical-src=\"https://img.shields.io/github/last-commit/dromara/Jpom?display_timestamp=committer&amp;logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=UpdatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>CreatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/781667d7159ac067b2e05c78c6b5597300820b91dc906d90585c250156e25137/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f637265617465642d61742f64726f6d6172612f4a706f6d3f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d437265617465644174\" alt=\"create-at\" data-canonical-src=\"https://img.shields.io/github/created-at/dromara/Jpom?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=CreatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<a href=\"https://github.com/opsre/awesome-ops\">\n</a><p dir=\"auto\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/b964a36ea4078c39f603d46a29436371c7541a2f26e0228d7b21b9d9805b43d3/68747470733a2f2f736f6369616c6966792e6769742e63692f6f707372652f617765736f6d652d6f70732f696d6167653f6465736372697074696f6e3d3126666f6e743d42697474657226666f726b733d31266973737565733d31266c616e67756167653d31266c6f676f3d6874747073253341253246253246617661746172732e67697468756275736572636f6e74656e742e636f6d25324675253246313838353638303230266e616d653d31266f776e65723d31267061747465726e3d436972637569742b426f6172642670756c6c733d31267374617267617a6572733d31267468656d653d4c69676874\" alt=\"\" data-canonical-src=\"https://socialify.git.ci/opsre/awesome-ops/image?description=1&amp;font=Bitter&amp;forks=1&amp;issues=1&amp;language=1&amp;logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F188568020&amp;name=1&amp;owner=1&amp;pattern=Circuit+Board&amp;pulls=1&amp;stargazers=1&amp;theme=Light\" style=\"max-width: 100%;\"></a></p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a>\n</div>\n<p align=\"center\" dir=\"auto\">\n\t<a href=\"https://jpom.top/\" rel=\"nofollow\">\n\t    <img src=\"https://camo.githubusercontent.com/93366605c37d0dee82f7775001db0933703e971166a7fd1b16e3030faecc7071/68747470733a2f2f6a706f6d2e746f702f696d616765732f6c6f676f2f6a706f6d5f6c6f676f2e737667\" width=\"400\" alt=\"logo\" data-canonical-src=\"https://jpom.top/images/logo/jpom_logo.svg\" style=\"max-width: 100%;\">\n\t</a>\n</p>\n<p align=\"center\" dir=\"auto\">\n\t<strong>【dromara】🚀简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件</strong>\n</p>\n<p align=\"center\" dir=\"auto\">\n   【<strong>更是一款原生 ops 软件</strong> / <a href=\"./README-en.md\">English</a>】\n</p>\n<p align=\"center\" dir=\"auto\">\n\t<a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">\n        <img src=\"https://camo.githubusercontent.com/fee0d14c288145c58b0354fc47ed509023d18c6cfba58203df09e7acac21d369/68747470733a2f2f67697465652e636f6d2f64726f6d6172612f4a706f6d2f62616467652f737461722e7376673f7468656d653d677670\" alt=\"gitee star\" data-canonical-src=\"https://gitee.com/dromara/Jpom/badge/star.svg?theme=gvp\" style=\"max-width: 100%;\">\n    </a>\n \t<a href=\"https://github.com/dromara/Jpom\">\n\t\t<img src=\"https://camo.githubusercontent.com/538f70e973891f4a997f93edd0986e3d7ac98df3e5cdeb4b2b7099885a162f62/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f64726f6d6172612f4a706f6d2e7376673f7374796c653d736f6369616c\" alt=\"github star\" data-canonical-src=\"https://img.shields.io/github/stars/dromara/Jpom.svg?style=social\" style=\"max-width: 100%;\">\n    </a>\n \t<a href=\"https://gitcode.com/dromara/Jpom\" rel=\"nofollow\">\n\t\t<img src=\"https://camo.githubusercontent.com/d5a102e879d5555efb94feca9ab2a1e7680942b2ee2e77b67137a1a9317670a3/68747470733a2f2f676974636f64652e636f6d2f64726f6d6172612f4a706f6d2f737461722f62616467652e737667\" alt=\"gitcode star\" data-canonical-src=\"https://gitcode.com/dromara/Jpom/star/badge.svg\" style=\"max-width: 100%;\">\n    </a>\n    <a href=\"https://license.coscl.org.cn/MulanPSL2\" rel=\"nofollow\">\n\t\t<img src=\"https://camo.githubusercontent.com/6f325e8208e590c8be3eb780dd07c3e3274bd29fe9aaecfd6f216f7de30d1eee/68747470733a2f2f696d672e736869656c64732e696f2f3a6c6963656e73652d4d756c616e50534c322d626c75652e737667\" alt=\"license\" data-canonical-src=\"https://img.shields.io/:license-MulanPSL2-blue.svg\" style=\"max-width: 100%;\">\n\t  </a>\n</p>\n<p align=\"center\" dir=\"auto\">\n  <a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">\n        <img src=\"https://camo.githubusercontent.com/27383a9cd6ce6cbd8f4b5fe7547990f1d93b1051e9d56d15e3df3473018000ba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a444b2d312e382e305f34302b2d677265656e2e737667\" alt=\"jdk\" data-canonical-src=\"https://img.shields.io/badge/JDK-1.8.0_40+-green.svg\" style=\"max-width: 100%;\">\n    </a>\n    <a 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\" rel=\"nofollow\">\n      <img src=\"https://camo.githubusercontent.com/a7fdc9541a9371237511d053b1e0d2c1dd87bbde010218e71d6542adc06d01e5/68747470733a2f2f6170702e636f646163792e636f6d2f70726f6a6563742f62616467652f47726164652f3834336239353366313434363434396339613037356534346561373738333336\" alt=\"codacy\" data-canonical-src=\"https://app.codacy.com/project/badge/Grade/843b953f1446449c9a075e44ea778336\" style=\"max-width: 100%;\">\n    </a>\n  <a href=\"https://jpom.top/pages/changelog/new/\" rel=\"nofollow\">\n\t\t<img src=\"https://camo.githubusercontent.com/9b1b2ed341e35fdcb15ff66346915d39e6661f5914188bd004844bb5f6db3d1d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f64726f6d6172612f4a706f6d2e737667\" alt=\"docker pull\" data-canonical-src=\"https://img.shields.io/github/v/release/dromara/Jpom.svg\" style=\"max-width: 100%;\">\n    </a>\n    <a href=\"https://hub.docker.com/repository/docker/jpomdocker/jpom\" rel=\"nofollow\">\n\t\t<img src=\"https://camo.githubusercontent.com/fe61eb66d3495392d6433852b159baf1ce3fc4d3e312007f82e6fe1c00b854cb/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6a706f6d646f636b65722f6a706f6d2e737667\" alt=\"docker pull\" data-canonical-src=\"https://img.shields.io/docker/pulls/jpomdocker/jpom.svg\" style=\"max-width: 100%;\">\n    </a>\n</p>\n<p align=\"center\" dir=\"auto\">\n\t👉 国际站：<a href=\"https://jpom.dromara.org\" rel=\"nofollow\">https://jpom.dromara.org</a>  👈\n</p>\n<p align=\"center\" dir=\"auto\">\n  👉 大陆站：<a href=\"https://jpom.top\" rel=\"nofollow\">https://jpom.top</a>  👈\n</p>\n<h2 dir=\"auto\">😭 日常开发中，您是否有以下痛点？</h2>\n<ul dir=\"auto\">\n<li><strong>团队中没有专业的运维，开发还要做运维的活</strong>，需要自己手动构建、部署项目。</li>\n<li>不同的项目有不同的构建、部署命令。</li>\n<li>有开发、测试、生产等多环境打包的需求。</li>\n<li>需要同时监控多个项目的运行状态。</li>\n<li>需要下载 SSH 工具远程连接服务器。</li>\n<li><em>需要下载 FTP 工具</em>传输文件到服务器。</li>\n<li>多台服务器时，在不同电脑之间账号密码同步不方便。</li>\n<li>想使用一些自动化工具，但是对服务器性能太高，搭建太麻烦。</li>\n<li><strong>对自动化工具有个性化的需求，想自己修改项目</strong>，但是市面上的工具太复杂了。</li>\n</ul>\n<blockquote>\n<p dir=\"auto\">如果是分布式的项目，以上步骤则更加繁琐。</p>\n<p dir=\"auto\">让 Jpom 来帮您解决这些痛点吧！然而，这些只是 Jpom 解决的最基础的功能。</p>\n</blockquote>\n<h3 dir=\"auto\">😁 使用 <a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">Jpom</a> 后</h3>\n<ul dir=\"auto\">\n<li>方便的用户管理\n<ol dir=\"auto\">\n<li>用户操作监控，监控指定用户指定操作以邮件形式通知</li>\n<li>多用户管理，用户项目权限独立（上传、删除权限可控制），完善的操作日志，使用工作空间隔离权限</li>\n<li>账号可以开启 <strong>MFA 两步验证</strong>提高账号安全性</li>\n</ol>\n</li>\n<li>界面形式实时查看项目运行状态、控制台日志、管理项目文件\n<ol dir=\"auto\">\n<li>在线修改项目文本文件</li>\n</ol>\n</li>\n<li>Docker 容器管理、Docker Swarm 集群管理（<strong>Docker UI</strong>）</li>\n<li><strong>在线 SSH 终端</strong>，让您在没有 PuTTY、Xshell、FinalShell 等软件也能轻松管理服务器\n<ol dir=\"auto\">\n<li>登录 Jpom 系统后不需要知道服务器密码</li>\n<li>能指定 SSH 禁止执行的命令，避免执行高风险命令，并且能自动执行命令日志</li>\n<li>设置文件目录，在线查看管理对应项目文件及配置文件</li>\n<li>SSH 命令模版在线执行脚本还能定时执行</li>\n<li>在线修改文本文件</li>\n<li><strong>轻量的实现了简单的\"堡垒机\"功能</strong></li>\n</ol>\n</li>\n<li>使用项目分发一键搞定集群项目多机部署</li>\n<li>在线构建不用手动更新升级项目\n<ol dir=\"auto\">\n<li>支持拉取 GIT、SVN 仓库</li>\n<li><strong>支持容器构建（docker）</strong></li>\n<li>支持 SSH 方式发布</li>\n<li>支持定时构建</li>\n<li>支持 WebHook 形式触发构建</li>\n</ol>\n</li>\n<li>支持在线编辑 nginx 配置文件并自动 reload 等操作\n<ol dir=\"auto\">\n<li>管理 nginx 状态，管理 SSL 证书</li>\n</ol>\n</li>\n<li>项目状态监控异常自动报警、自动尝试重启\n<ol dir=\"auto\">\n<li>支持邮件 + 钉钉群 + 微信群通知，主动感知项目运行状况</li>\n</ol>\n</li>\n<li>节点脚本模版+定时执行或者触发器，拓展更多功能</li>\n<li>重要路径授权配置，杜绝用户误操作系统文件</li>\n</ul>\n<h3 dir=\"auto\">🔔️ 特别提醒</h3>\n<blockquote>\n<ol dir=\"auto\">\n<li>在 Windows 服务器中可能有部分功能因为系统特性造成兼容性问题，建议在实际使用中充分测试。Linux 目前兼容性良好</li>\n<li>服务端和插件端请安装到不同目录中，切勿安装到同一目录中</li>\n<li>卸载 Jpom 插件端或者服务端，先停止对应服务，然后删除对应的程序文件、日志文件夹、数据目录文件夹即可</li>\n<li>本地构建依赖的是系统环境，如果构建命令需要使用 maven 或者 node<br>\n需要在构建项目的服务器安装好对应的环境。如果已经启动服务端再安装的对应环境需要通过命令行重启服务端后环境才会生效。</li>\n<li>在 Ubuntu/Debian 服务器作为插件端可能会添加失败，请在当前用户的根目录创建 .bash_profile 文件</li>\n<li>升级 2.7.x 后不建议降级操作，会涉及到数据不兼容的情况</li>\n<li>由于目前 2.x.x 版本插件端和服务端主要采用 http 协议通讯，插件端和服务端网络要求互通，在使用的时候请注意。</li>\n<li>Jpom 3.0 版本已经开始规划更新了，尽请期待新版本的诞生吧</li>\n</ol>\n</blockquote>\n<h3 dir=\"auto\">🗒️ <a href=\"https://gitee.com/dromara/Jpom/blob/master/CHANGELOG.md\" rel=\"nofollow\">版本更新日志</a></h3>\n<p dir=\"auto\">升级前必看：<a href=\"https://gitee.com/dromara/Jpom/blob/master/CHANGELOG.md\" rel=\"nofollow\">CHANGELOG.md</a></p>\n<h2 dir=\"auto\">📥 安装 Jpom</h2>\n<p dir=\"auto\">Jpom 支持多种安装方式，满足不同用户的个性化需求，您只需要选择一种方式安装即可。</p>\n<h3 dir=\"auto\">方式一：🚀（推荐） 一键安装（Linux）</h3>\n<h4 dir=\"auto\">一键安装服务端</h4>\n<blockquote>\n<p dir=\"auto\"><strong>注意：安装的目录位于执行命令的目录！</strong></p>\n<p dir=\"auto\"><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> 特别提醒：一键安装的时候注意执行命令不可在同一目录下，即 Server 端和 Agent 端不可安装在同一目录下！</p>\n<p dir=\"auto\">如果需要修改服务端数据、日志存储的路径请修改<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/server/src/main/resources/config_default/application.yml\" rel=\"nofollow\"><code class=\"notranslate\">application.yml</code></a><br>\n文件中 <code class=\"notranslate\">jpom.path</code> 配置属性。</p>\n</blockquote>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 一键默认安装\ncurl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default\n# 一键默认安装 + 自动配置开机自启服务\ncurl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default+service\n\n# 安装服务端和 jdk 环境\nyum install -y wget &amp;&amp; \\\nwget -O install.sh https://jpom.top/docs/install.sh &amp;&amp; \\\nbash install.sh Server jdk\n\n# 安装服务端和 jdk、maven 环境\nyum install -y wget &amp;&amp; \\\nwget -O install.sh https://jpom.top/docs/install.sh &amp;&amp; \\\nbash install.sh Server jdk+mvn\n\n# ubuntu\napt-get install -y wget &amp;&amp; \\\nwget -O install.sh https://jpom.top/docs/install.sh &amp;&amp; \\\nbash install.sh Server jdk\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 一键默认安装</span>\ncurl -fsSL https://jpom.top/docs/install.sh <span class=\"pl-k\">|</span> bash -s Server jdk+default\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 一键默认安装 + 自动配置开机自启服务</span>\ncurl -fsSL https://jpom.top/docs/install.sh <span class=\"pl-k\">|</span> bash -s Server jdk+default+service\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 安装服务端和 jdk 环境</span>\nyum install -y wget <span class=\"pl-k\">&amp;&amp;</span> \\\nwget -O install.sh https://jpom.top/docs/install.sh <span class=\"pl-k\">&amp;&amp;</span> \\\nbash install.sh Server jdk\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 安装服务端和 jdk、maven 环境</span>\nyum install -y wget <span class=\"pl-k\">&amp;&amp;</span> \\\nwget -O install.sh https://jpom.top/docs/install.sh <span class=\"pl-k\">&amp;&amp;</span> \\\nbash install.sh Server jdk+mvn\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> ubuntu</span>\napt-get install -y wget <span class=\"pl-k\">&amp;&amp;</span> \\\nwget -O install.sh https://jpom.top/docs/install.sh <span class=\"pl-k\">&amp;&amp;</span> \\\nbash install.sh Server jdk</pre></div>\n<p dir=\"auto\">启动成功后，服务端的端口为 <code class=\"notranslate\">2122</code>，可通过 <code class=\"notranslate\">http://127.0.0.1:2122/</code><br>\n访问管理页面（如果不是本机访问，需要把 127.0.0.1 换成您安装的服务器 IP 地址）。</p>\n<blockquote>\n<p dir=\"auto\">如无法访问管理系统，执行命令 <code class=\"notranslate\">systemctl status firewalld</code> 检查下是否开启了防火墙<br>\n，如状态栏看到绿色显示 <code class=\"notranslate\">Active: active (running)</code> 需要放行 <code class=\"notranslate\">2122</code> 端口。</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 放行管理系统的 2122 端口\nfirewall-cmd --add-port=2122/tcp --permanent\n# 重启防火墙才会生效\nfirewall-cmd --reload\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 放行管理系统的 2122 端口</span>\nfirewall-cmd --add-port=2122/tcp --permanent\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 重启防火墙才会生效</span>\nfirewall-cmd --reload</pre></div>\n<p dir=\"auto\">如果在操作系统上放行了端口仍无法访问，并且您使用的是云服务器，请到云服务器后台中检查安全组规则是否放行 2122 端口。</p>\n<p dir=\"auto\"><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> 注意： Linux 系统中有多种防火墙：Firewall、Iptables、SELinux 等，再检查防火墙配置时候需要都检查一下。</p>\n</blockquote>\n<h4 dir=\"auto\">一键安装插件端</h4>\n<blockquote>\n<p dir=\"auto\">如果安装服务端的服务器也需要被管理，在服务端上也需要安装插件端（同一个服务器中可以同时安装服务端和插件端）</p>\n<p dir=\"auto\"><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> 特别提醒：一键安装的时候注意执行命令不可在同一目录下，即 Server 端和 Agent 端不可安装在同一目录下！</p>\n<p dir=\"auto\">如果需要修改插件端数据、日志存储的路径请修改<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/agent/src/main/resources/config_default/application.yml\" rel=\"nofollow\"><code class=\"notranslate\">application.yml</code></a><br>\n文件中 <code class=\"notranslate\">jpom.path</code> 配置属性。</p>\n</blockquote>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 一键默认安装\ncurl -fsSL https://jpom.top/docs/install.sh | bash -s Agent jdk+default\n# 一键默认安装 + 自动配置开机自启服务\ncurl -fsSL https://jpom.top/docs/install.sh | bash -s Agent jdk+default+service\n\n# 安装插件端和 jdk 环境\nyum install -y wget &amp;&amp; \\\nwget -O install.sh https://jpom.top/docs/install.sh &amp;&amp; \\\nbash install.sh Agent jdk\n\n# ubuntu\napt-get install -y wget &amp;&amp; \\\nwget -O install.sh https://jpom.top/docs/install.sh &amp;&amp; \\\nbash install.sh Agent jdk\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 一键默认安装</span>\ncurl -fsSL https://jpom.top/docs/install.sh <span class=\"pl-k\">|</span> bash -s Agent jdk+default\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 一键默认安装 + 自动配置开机自启服务</span>\ncurl -fsSL https://jpom.top/docs/install.sh <span class=\"pl-k\">|</span> bash -s Agent jdk+default+service\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 安装插件端和 jdk 环境</span>\nyum install -y wget <span class=\"pl-k\">&amp;&amp;</span> \\\nwget -O install.sh https://jpom.top/docs/install.sh <span class=\"pl-k\">&amp;&amp;</span> \\\nbash install.sh Agent jdk\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> ubuntu</span>\napt-get install -y wget <span class=\"pl-k\">&amp;&amp;</span> \\\nwget -O install.sh https://jpom.top/docs/install.sh <span class=\"pl-k\">&amp;&amp;</span> \\\nbash install.sh Agent jdk</pre></div>\n<p dir=\"auto\">启动成功后，插件端的端口为 <code class=\"notranslate\">2123</code>，插件端提供给服务端使用。</p>\n<h3 dir=\"auto\">方式二：📦 容器化安装</h3>\n<blockquote>\n<p dir=\"auto\"><g-emoji class=\"g-emoji\" alias=\"warning\">⚠️</g-emoji> 注意：容器化安装方式需要先安装 docker，<a href=\"https://jpom.top/pages/b63dc5/\" rel=\"nofollow\">点击跳转docker安装文档</a></p>\n</blockquote>\n<h4 dir=\"auto\">一条命令安装</h4>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker run -p 2122:2122 --name jpom-server jpomdocker/jpom\"><pre class=\"notranslate\">docker run -p 2122:2122 --name jpom-server jpomdocker/jpom</pre></div>\n<h4 dir=\"auto\">使用挂载方式存储相关数据（在部分环境可能出现兼容性问题）</h4>\n<ol dir=\"auto\">\n<li>阿里仓库</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom\nmkdir -p /home/jpom-server/logs\nmkdir -p /home/jpom-server/data\nmkdir -p /home/jpom-server/conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v /home/jpom-server/logs:/usr/local/jpom-server/logs \\\n\t-v /home/jpom-server/data:/usr/local/jpom-server/data \\\n\t-v /home/jpom-server/conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom\"><pre class=\"notranslate\">docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom\nmkdir -p /home/jpom-server/logs\nmkdir -p /home/jpom-server/data\nmkdir -p /home/jpom-server/conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v /home/jpom-server/logs:/usr/local/jpom-server/logs \\\n\t-v /home/jpom-server/data:/usr/local/jpom-server/data \\\n\t-v /home/jpom-server/conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom</pre></div>\n<ol start=\"2\" dir=\"auto\">\n<li>dockerhub 仓库</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker pull jpomdocker/jpom\nmkdir -p /home/jpom-server/logs\nmkdir -p /home/jpom-server/data\nmkdir -p /home/jpom-server/conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v /home/jpom-server/logs:/usr/local/jpom-server/logs \\\n\t-v /home/jpom-server/data:/usr/local/jpom-server/data \\\n\t-v /home/jpom-server/conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom\"><pre class=\"notranslate\">docker pull jpomdocker/jpom\nmkdir -p /home/jpom-server/logs\nmkdir -p /home/jpom-server/data\nmkdir -p /home/jpom-server/conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v /home/jpom-server/logs:/usr/local/jpom-server/logs \\\n\t-v /home/jpom-server/data:/usr/local/jpom-server/data \\\n\t-v /home/jpom-server/conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom</pre></div>\n<h4 dir=\"auto\">使用容器卷方式存储相关数据</h4>\n<ol dir=\"auto\">\n<li>阿里仓库</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom\ndocker volume create jpom-server-data\ndocker volume create jpom-server-logs\ndocker volume create jpom-server-conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v jpom-server-data:/usr/local/jpom-server/data \\\n\t-v jpom-server-logs:/usr/local/jpom-server/logs \\\n\t-v jpom-server-conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom\"><pre class=\"notranslate\">docker pull registry.cn-chengdu.aliyuncs.com/jpomdocker/jpom\ndocker volume create jpom-server-data\ndocker volume create jpom-server-logs\ndocker volume create jpom-server-conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v jpom-server-data:/usr/local/jpom-server/data \\\n\t-v jpom-server-logs:/usr/local/jpom-server/logs \\\n\t-v jpom-server-conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom</pre></div>\n<ol start=\"2\" dir=\"auto\">\n<li>dockerhub 仓库</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"docker pull jpomdocker/jpom\ndocker volume create jpom-server-data\ndocker volume create jpom-server-logs\ndocker volume create jpom-server-conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v jpom-server-data:/usr/local/jpom-server/data \\\n\t-v jpom-server-logs:/usr/local/jpom-server/logs \\\n\t-v jpom-server-conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom\"><pre class=\"notranslate\">docker pull jpomdocker/jpom\ndocker volume create jpom-server-data\ndocker volume create jpom-server-logs\ndocker volume create jpom-server-conf\ndocker run -d -p 2122:2122 \\\n\t--name jpom-server \\\n\t-v jpom-server-data:/usr/local/jpom-server/data \\\n\t-v jpom-server-logs:/usr/local/jpom-server/logs \\\n\t-v jpom-server-conf:/usr/local/jpom-server/conf \\\n\tjpomdocker/jpom</pre></div>\n<blockquote>\n<p dir=\"auto\">容器化安装仅提供服务端版。由于容器和宿主机环境隔离，而导致插件端的很多功能无法正常使用，因此对插件端容器化意义不大。</p>\n<p dir=\"auto\">安装docker、配置镜像、自动启动、查找安装后所在目录等可参考文档<br>\n<a href=\"https://jpom.top/pages/b63dc5/\" rel=\"nofollow\">https://jpom.top/pages/b63dc5/</a></p>\n<p dir=\"auto\">在低版本 docker 中运行可能出现 <code class=\"notranslate\">ls: cannot access'/usr/local/jpom-server/lib/': Operation not permitted</code><br>\n错误，此时需要添加 <code class=\"notranslate\">--privileged</code> 参数<br>\n如：<code class=\"notranslate\">docker run -p 2122:2122 --name jpom-server jpomdocker/jpom --privileged</code></p>\n</blockquote>\n<h3 dir=\"auto\">方式三：💾 下载安装</h3>\n<ol dir=\"auto\">\n<li>下载安装包 <a href=\"https://jpom.top/pages/all-downloads/\" rel=\"nofollow\">https://jpom.top/pages/all-downloads/</a></li>\n<li>解压文件</li>\n<li>安装插件端\n<ol dir=\"auto\">\n<li><code class=\"notranslate\">agent-x.x.x-release</code> 目录为插件端的全部安装文件</li>\n<li>上传到对应服务器（整个目录）</li>\n<li>启动插件端，Windows 环境用 bat 脚本，Linux 环境用 sh 脚本。（如果出现乱码或者无法正常执行，请检查编码格式、换行符是否匹配。）</li>\n<li>插件端默认运行端口：<code class=\"notranslate\">2123</code></li>\n</ol>\n</li>\n<li>安装服务端\n<ol dir=\"auto\">\n<li><code class=\"notranslate\">server-x.x.x-release</code> 目录为服务端的全部安装文件</li>\n<li>上传到对应服务器（整个目录）</li>\n<li>启动服务端，Windows 环境用 bat 脚本，Linux 环境用 sh 脚本。（如果出现乱码或者无法正常执行，请检查编码格式、换行符是否匹配。）</li>\n<li>服务端默认运行端口：<code class=\"notranslate\">2122</code>，访问管理页面：<code class=\"notranslate\">http://127.0.0.1:2122/</code>（非本机访问把 <code class=\"notranslate\">127.0.0.1</code> 换成您的服务器 IP 地址）</li>\n</ol>\n</li>\n</ol>\n<h3 dir=\"auto\">方式四：⌨️ 编译安装</h3>\n<ol dir=\"auto\">\n<li>访问 <a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">Jpom</a> 的码云主页，拉取最新完整代码（建议使用 master 分支）</li>\n<li>切换到 <code class=\"notranslate\">web-vue</code> 目录，执行 <code class=\"notranslate\">npm install</code>（vue 环境需要提前搭建和安装依赖包详情可以查看 web-vue 目录下 README.md）</li>\n<li>执行 <code class=\"notranslate\">npm run build</code> 进行 vue 项目打包</li>\n<li>切换到项目根目录执行：<code class=\"notranslate\">mvn clean package</code></li>\n<li>安装插件端\n<ol dir=\"auto\">\n<li>查看插件端安装包 <code class=\"notranslate\">modules/agent/target/agent-x.x.x-release</code></li>\n<li>打包上传服务器运行（整个目录）</li>\n<li>启动插件端，Windows 环境用 bat 脚本，Linux 环境用 sh 脚本。（如果出现乱码或者无法正常执行，请检查编码格式、换行符是否匹配。）</li>\n<li>默认运行端口：<code class=\"notranslate\">2123</code></li>\n</ol>\n</li>\n<li>安装服务端\n<ol dir=\"auto\">\n<li>查看插件端安装包 <code class=\"notranslate\">modules/server/target/server-x.x.x-release</code></li>\n<li>打包上传服务器运行（整个目录）</li>\n<li>启动服务端，Windows 环境用 bat 脚本，Linux 环境用 sh 脚本。（如果出现乱码或者无法正常执行，请检查编码格式、换行符是否匹配。）</li>\n<li>服务端默认运行端口：<code class=\"notranslate\">2122</code>，访问管理页面：<code class=\"notranslate\">http://127.0.0.1:2122/</code>（非本机访问把 <code class=\"notranslate\">127.0.0.1</code> 换成您的服务器 IP 地址）</li>\n</ol>\n</li>\n</ol>\n<blockquote>\n<p dir=\"auto\">也可以使用 <code class=\"notranslate\">script/release.bat</code> 或 <code class=\"notranslate\">script/release.sh</code> 快速打包。</p>\n</blockquote>\n<h3 dir=\"auto\">方式五：📦 一键启动 docker-compose</h3>\n<ul dir=\"auto\">\n<li>无需安装任何环境,自动编译构建</li>\n</ul>\n<blockquote>\n<p dir=\"auto\">需要注意修改 <code class=\"notranslate\">.env</code> 文件中的 token 值</p>\n</blockquote>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"yum install -y git\ngit clone https://gitee.com/dromara/Jpom.git\ncd Jpom\ndocker-compose -f docker-compose.yml up\n# docker-compose -f docker-compose.yml up --build\n# docker-compose -f docker-compose.yml build --no-cache\n# docker-compose -f docker-compose-local.yml up\n# docker-compose -f docker-compose-local.yml build --build-arg TEMP_VERSION=.0\n# docker-compose -f docker-compose-cluster.yml up --build\"><pre class=\"notranslate\">yum install -y git\ngit clone https://gitee.com/dromara/Jpom.git\n<span class=\"pl-c1\">cd</span> Jpom\ndocker-compose -f docker-compose.yml up\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> docker-compose -f docker-compose.yml up --build</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> docker-compose -f docker-compose.yml build --no-cache</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> docker-compose -f docker-compose-local.yml up</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> docker-compose -f docker-compose-local.yml build --build-arg TEMP_VERSION=.0</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> docker-compose -f docker-compose-cluster.yml up --build</span></pre></div>\n<h3 dir=\"auto\">方式六：💻 编译运行</h3>\n<ol dir=\"auto\">\n<li>访问 <a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">Jpom</a> 的码云主页 拉取最新完整代码 （建议使用 master 分支，如果想体验新功能可以使用<br>\ndev 分支）</li>\n<li>运行插件端\n<ol dir=\"auto\">\n<li>运行 <code class=\"notranslate\">org.dromara.jpom.JpomAgentApplication</code></li>\n<li>留意控制台打印的默认账号密码信息</li>\n<li>插件端默认运行端口：<code class=\"notranslate\">2123</code></li>\n</ol>\n</li>\n<li>运行服务端\n<ol dir=\"auto\">\n<li>运行 <code class=\"notranslate\">org.dromara.jpom.JpomServerApplication</code></li>\n<li>服务端默认运行端口：<code class=\"notranslate\">2122</code></li>\n</ol>\n</li>\n<li>构建 vue 页面，切换到 <code class=\"notranslate\">web-vue</code> 目录（前提需要本地开发环境有 node、npm 环境）</li>\n<li>安装项目 vue 依赖，控制台执行 <code class=\"notranslate\">npm install</code></li>\n<li>启动开发模式，控制台执行 <code class=\"notranslate\">npm run dev</code></li>\n<li>根据控制台输出的地址访问前端页面：<code class=\"notranslate\">http://127.0.0.1:3000/</code>（非本机访问把 <code class=\"notranslate\">127.0.0.1</code> 换成您的服务器 IP 地址）</li>\n</ol>\n<h2 dir=\"auto\">管理 Jpom 命令</h2>\n<ol dir=\"auto\">\n<li>Windows 系统使用 bat 脚本文件。</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 服务端管理脚本 （命令行）\n./bin/Server.bat start   # 启动Jpom服务端\n./bin/Server.bat stop    # 停止Jpom服务端\n./bin/Server.bat restart # 重启Jpom服务端\n./bin/Server.bat status  # 查看Jpom服务端运行状态\n# 服务端管理脚本 （控制面板），按照面板提示输入操作\n./bin/Server.bat\n\n# 插件端管理脚本\n./bin/Agent.bat start   # 启动Jpom插件端\n./bin/Agent.bat stop    # 停止Jpom插件端\n./bin/Agent.bat restart # 重启Jpom插件端\n./bin/Agent.bat status  # 查看Jpom插件端运行状态\n# 插件端管理脚本（控制面板），按照面板提示输入操作\n./bin/Agent.bat\n\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 服务端管理脚本 （命令行）</span>\n./bin/Server.bat start   <span class=\"pl-c\"><span class=\"pl-c\">#</span> 启动Jpom服务端</span>\n./bin/Server.bat stop    <span class=\"pl-c\"><span class=\"pl-c\">#</span> 停止Jpom服务端</span>\n./bin/Server.bat restart <span class=\"pl-c\"><span class=\"pl-c\">#</span> 重启Jpom服务端</span>\n./bin/Server.bat status  <span class=\"pl-c\"><span class=\"pl-c\">#</span> 查看Jpom服务端运行状态</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 服务端管理脚本 （控制面板），按照面板提示输入操作</span>\n./bin/Server.bat\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 插件端管理脚本</span>\n./bin/Agent.bat start   <span class=\"pl-c\"><span class=\"pl-c\">#</span> 启动Jpom插件端</span>\n./bin/Agent.bat stop    <span class=\"pl-c\"><span class=\"pl-c\">#</span> 停止Jpom插件端</span>\n./bin/Agent.bat restart <span class=\"pl-c\"><span class=\"pl-c\">#</span> 重启Jpom插件端</span>\n./bin/Agent.bat status  <span class=\"pl-c\"><span class=\"pl-c\">#</span> 查看Jpom插件端运行状态</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 插件端管理脚本（控制面板），按照面板提示输入操作</span>\n./bin/Agent.bat\n</pre></div>\n<blockquote>\n<p dir=\"auto\">Windows 系统中执行启动后需要根据日志去跟进启动的状态，如果出现乱码请检查或者修改编码格式，Windows 系统中 bat<br>\n编码格式推荐为 <code class=\"notranslate\">GB2312</code></p>\n</blockquote>\n<ol start=\"2\" dir=\"auto\">\n<li>Linux 系统中使用 sh 脚本文件。</li>\n</ol>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 服务端\n./bin/Server.sh start     # 启动Jpom服务端\n./bin/Server.sh stop      # 停止Jpom服务端\n./bin/Server.sh restart   # 重启Jpom服务端\n./bin/Server.sh status    # 查看Jpom服务端运行状态\n./bin/Service.sh install  # 创建Jpom服务端的应用服务（jpom-server）\n\n# 插件端\n./bin/Agent.sh start     # 启动Jpom插件端\n./bin/Agent.sh stop      # 停止Jpom插件端\n./bin/Agent.sh restart   # 重启Jpom插件端\n./bin/Agent.sh status    # 查看Jpom插件端运行状态\n./bin/Service.sh install # 创建Jpom插件端的应用服务（jpom-agent）\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 服务端</span>\n./bin/Server.sh start     <span class=\"pl-c\"><span class=\"pl-c\">#</span> 启动Jpom服务端</span>\n./bin/Server.sh stop      <span class=\"pl-c\"><span class=\"pl-c\">#</span> 停止Jpom服务端</span>\n./bin/Server.sh restart   <span class=\"pl-c\"><span class=\"pl-c\">#</span> 重启Jpom服务端</span>\n./bin/Server.sh status    <span class=\"pl-c\"><span class=\"pl-c\">#</span> 查看Jpom服务端运行状态</span>\n./bin/Service.sh install  <span class=\"pl-c\"><span class=\"pl-c\">#</span> 创建Jpom服务端的应用服务（jpom-server）</span>\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 插件端</span>\n./bin/Agent.sh start     <span class=\"pl-c\"><span class=\"pl-c\">#</span> 启动Jpom插件端</span>\n./bin/Agent.sh stop      <span class=\"pl-c\"><span class=\"pl-c\">#</span> 停止Jpom插件端</span>\n./bin/Agent.sh restart   <span class=\"pl-c\"><span class=\"pl-c\">#</span> 重启Jpom插件端</span>\n./bin/Agent.sh status    <span class=\"pl-c\"><span class=\"pl-c\">#</span> 查看Jpom插件端运行状态</span>\n./bin/Service.sh install <span class=\"pl-c\"><span class=\"pl-c\">#</span> 创建Jpom插件端的应用服务（jpom-agent）</span></pre></div>\n<h2 dir=\"auto\">Linux 服务方式管理</h2>\n<blockquote>\n<p dir=\"auto\">这里安装服务仅供参考，实际中可以根据需求自定义配置</p>\n<p dir=\"auto\">在使用 <code class=\"notranslate\">./bin/Service.sh install</code> 成功后</p>\n<p dir=\"auto\">systemctl {status | start | stop | restart} jpom-server</p>\n<p dir=\"auto\">systemctl {status | start | stop | restart} jpom-agent</p>\n</blockquote>\n<h2 dir=\"auto\">⚙️ Jpom 的参数配置</h2>\n<p dir=\"auto\">在项目运行的根路径下的 ：</p>\n<h3 dir=\"auto\">程序配置  <code class=\"notranslate\">./conf/application.yml</code></h3>\n<ol dir=\"auto\">\n<li>插件端示例：<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/agent/src/main/resources/config_default/application.yml\" rel=\"nofollow\"><code class=\"notranslate\">application.yml</code></a></li>\n<li>服务端示例：<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/server/src/main/resources/config_default/application.yml\" rel=\"nofollow\"><code class=\"notranslate\">application.yml</code></a></li>\n</ol>\n<h3 dir=\"auto\">项目日志  <code class=\"notranslate\">./conf/logback.xml</code></h3>\n<ol dir=\"auto\">\n<li>插件端示例：<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/agent/src/main/resources/config_default/logback.xml\" rel=\"nofollow\"><code class=\"notranslate\">logback.xml</code></a></li>\n<li>服务端示例：<br>\n<a href=\"https://gitee.com/dromara/Jpom/blob/master/modules/server/src/main/resources/config_default/logback.xml\" rel=\"nofollow\"><code class=\"notranslate\">logback.xml</code></a></li>\n</ol>\n<h2 dir=\"auto\">📝 常见问题、操作说明</h2>\n<ul dir=\"auto\">\n<li><a href=\"https://jpom.top/\" rel=\"nofollow\">文档主页</a></li>\n<li><a href=\"https://jpom.top/pages/FQA/\" rel=\"nofollow\">FQA</a></li>\n<li><a href=\"https://jpom.top/pages/FQA/proper-noun/\" rel=\"nofollow\">名词解释</a></li>\n</ul>\n<h3 dir=\"auto\">实践案例</h3>\n<blockquote>\n<p dir=\"auto\">里面有部分图片加载可能比较慢</p>\n</blockquote>\n<ol dir=\"auto\">\n<li><a href=\"https://jpom.top/pages/practice/build-java-ssh-release/\" rel=\"nofollow\">本地构建 + SSH 发布 java 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/build-node-release/\" rel=\"nofollow\">本地构建 + 项目发布 node 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/build-node-ssh-release/\" rel=\"nofollow\">本地构建 + SSH 发布 node 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/project-dsl-python/\" rel=\"nofollow\">本地构建 + 自定义管理 python 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/project-dsl-java/\" rel=\"nofollow\">自定义管理 java 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/node-nginx/\" rel=\"nofollow\">管理编译安装的 nginx</a></li>\n<li><a href=\"https://jpom.top/pages/practice/docker-cli/\" rel=\"nofollow\">管理 docker</a></li>\n<li><a href=\"https://jpom.top/pages/practice/build-docker-java-node-release/\" rel=\"nofollow\">容器构建 + 项目发布 java 项目</a></li>\n<li><a href=\"https://jpom.top/pages/practice/\" rel=\"nofollow\">更新实践案例&gt;&gt;</a></li>\n</ol>\n<h2 dir=\"auto\">构建案例仓库代码</h2>\n<ol dir=\"auto\">\n<li><a href=\"https://gitee.com/keepbx/Jpom-demo-case/tree/master/jboot-test\" rel=\"nofollow\">Jboot 案例代码</a></li>\n<li><a href=\"https://gitee.com/keepbx/Jpom-demo-case/tree/master/springboot-test\" rel=\"nofollow\">SpringBoot 案例代码(ClassPath)</a></li>\n<li><a href=\"https://gitee.com/keepbx/Jpom-demo-case/tree/master/springboot-test-jar\" rel=\"nofollow\">SpringBoot 案例代码(Jar)</a></li>\n<li><a href=\"https://gitee.com/keepbx/Jpom-demo-case/tree/master/antdv\" rel=\"nofollow\">node vue 案例代码(antdv)</a></li>\n<li><a href=\"https://gitee.com/keepbx/Jpom-demo-case/tree/master/python\" rel=\"nofollow\">python 案例代码</a></li>\n</ol>\n<blockquote>\n<p dir=\"auto\">Node.js 编译指定目录：</p>\n</blockquote>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"yarn --cwd xxxx/ install\nyarn --cwd xxxx/ build\"><pre class=\"notranslate\">yarn --cwd xxxx/ install\nyarn --cwd xxxx/ build</pre></div>\n<blockquote>\n<p dir=\"auto\">Maven 编译指定目录：</p>\n</blockquote>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"mvn -f xxxx/pom.xml clean package\"><pre class=\"notranslate\">mvn -f xxxx/pom.xml clean package</pre></div>\n<h2 dir=\"auto\">🛠️ 整体架构</h2>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/c373627405520e461ee2acb973dd0c50faf0ba4f653bfdc8035b19ceeaf4416c/68747470733a2f2f6a706f6d2e746f702f696d616765732f6a706f6d2d66756e632d617263682e706e67\"><img src=\"https://camo.githubusercontent.com/c373627405520e461ee2acb973dd0c50faf0ba4f653bfdc8035b19ceeaf4416c/68747470733a2f2f6a706f6d2e746f702f696d616765732f6a706f6d2d66756e632d617263682e706e67\" alt=\"jpom-func-arch\" data-canonical-src=\"https://jpom.top/images/jpom-func-arch.png\" style=\"max-width: 100%;\"></a></p>\n<h2 dir=\"auto\">🐞 交流讨论 、反馈 BUG、提出建议等</h2>\n<ol dir=\"auto\">\n<li>快扫描下方左侧微信群二维码和我们一起交流讨论吧！（添加小助手：备注 Jpom 进群）</li>\n<li>开源项目离不开社区的支持，如果项目帮助到了您，并且想给我们加个餐。<br>\n欢迎扫描下方<a href=\"https://jpom.top/images/qrcode/praise-all.png\" rel=\"nofollow\">微信、支付宝收款码赞赏</a><br>\n或通过<a href=\"https://gitee.com/dromara/Jpom\" rel=\"nofollow\">码云赞赏</a><br>\n（在项目首页下方点击捐赠，支持微信和支付宝）。<a href=\"https://jpom.top/pages/praise/publicity/\" rel=\"nofollow\">赞赏记录</a></li>\n<li>购买开源周边商品：<a href=\"https://jpom.top/pages/shop/\" rel=\"nofollow\">周边介绍</a></li>\n<li>企业技术服务请单独与我们联系沟通服务方案</li>\n<li>反馈 BUG、提出建议，欢迎新建：<a href=\"https://gitee.com/dromara/Jpom/issues\" rel=\"nofollow\">issues</a>，开发人员会不定时查看回复。</li>\n<li>参与贡献，请查看<a href=\"#%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97\">贡献指南</a>。</li>\n</ol>\n<p dir=\"auto\">感谢所有赞赏以及参与贡献的小伙伴，您们的支持是我们不断更新前进的动力！</p>\n<p align=\"center\" dir=\"auto\">\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0f6b9606135a3c8fb7a131ce2ffb9ba0405d0c7cf05f3af92cd587f540ffc967/68747470733a2f2f6a706f6d2e746f702f696d616765732f7172636f64652f7072616973652d616c6c2e706e67\"><img src=\"https://camo.githubusercontent.com/0f6b9606135a3c8fb7a131ce2ffb9ba0405d0c7cf05f3af92cd587f540ffc967/68747470733a2f2f6a706f6d2e746f702f696d616765732f7172636f64652f7072616973652d616c6c2e706e67\" alt=\"praise img\" data-canonical-src=\"https://jpom.top/images/qrcode/praise-all.png\" style=\"max-width: 100%;\"></a>\n</p>\n<h2 dir=\"auto\">💖 周边商品</h2>\n<p dir=\"auto\">为了更好地维持开源项目，我们决定推出周边商品。</p>\n<p dir=\"auto\">购买支持我们这样您既获得了一份小商品我们也获得了您购买商品的利润（周边商品的价格会比市场价稍高，介意请勿下单）</p>\n<p align=\"center\" dir=\"auto\">\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0044eed562e4406d860ef5d806c2816ca377eeefb63913c24c7a04e198215469/68747470733a2f2f6a706f6d2e746f702f696d616765732f7172636f64652f77656978696e2d73686f702d6a706f6d36362e706e67\"><img src=\"https://camo.githubusercontent.com/0044eed562e4406d860ef5d806c2816ca377eeefb63913c24c7a04e198215469/68747470733a2f2f6a706f6d2e746f702f696d616765732f7172636f64652f77656978696e2d73686f702d6a706f6d36362e706e67\" alt=\"shop home\" data-canonical-src=\"https://jpom.top/images/qrcode/weixin-shop-jpom66.png\" style=\"max-width: 100%;\"></a>\n</p>\n<h2 dir=\"auto\">🔨贡献指南</h2>\n<blockquote>\n<p dir=\"auto\">提交贡献即认为签署了 <a href=\"https://gitee.com/dromara/Jpom/blob/master/CLA.md\" rel=\"nofollow\">CLA</a> 协议</p>\n</blockquote>\n<h3 dir=\"auto\">贡献须知</h3>\n<p dir=\"auto\">Jpom 作为开源项目，离不开社区的支持，欢迎任何人修改和提出建议。贡献无论大小，您的贡献会帮助背后成千上万的使用者以及开发者，您做出的贡献也会永远的保留在项目的贡献者名单中，这也是开源项目的意义所在！</p>\n<p dir=\"auto\">为了保证项目代码的质量与规范，以及帮助您更快的了解项目的结构，请在贡献之前阅读：</p>\n<ul dir=\"auto\">\n<li><a href=\"https://gitee.com/dromara/Jpom/blob/master/CODE_OF_CONDUCT.md\" rel=\"nofollow\">Jpom 贡献说明</a></li>\n<li><a href=\"https://gitee.com/dromara/Jpom/blob/dev/typography-specification.md\" rel=\"nofollow\">中英文排版规范</a></li>\n</ul>\n<h3 dir=\"auto\">贡献步骤</h3>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\">Fork 本仓库。</p>\n</li>\n<li>\n<p dir=\"auto\">Fork 后会在您的账号下多了一个和本仓库一模一样的仓库，把您账号的仓库 clone 到本地。</p>\n<p dir=\"auto\">注意替换掉链接中的<code class=\"notranslate\">分支名</code>和<code class=\"notranslate\">用户名</code>。</p>\n<p dir=\"auto\">如果是贡献代码，分支名填 <code class=\"notranslate\">dev</code>；如果是贡献文档，分支名填 <code class=\"notranslate\">docs</code></p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"git clone -b 分支名 https://gitee.com/用户名/Jpom.git\"><pre class=\"notranslate\">git clone -b 分支名 https://gitee.com/用户名/Jpom.git</pre></div>\n</li>\n<li>\n<p dir=\"auto\">修改代码/文档，修改后提交上来。</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 把修改的文件添加到暂存区\ngit add .\n# 提交到本地仓库，说明您具体做了什么修改\ngit commit -m '填写您做了什么修改'\n# 推送到远程仓库，分支名替换成 dev 或者 docs\ngit push origin 分支名\"><pre class=\"notranslate\"><span class=\"pl-c\"><span class=\"pl-c\">#</span> 把修改的文件添加到暂存区</span>\ngit add <span class=\"pl-c1\">.</span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 提交到本地仓库，说明您具体做了什么修改</span>\ngit commit -m <span class=\"pl-s\"><span class=\"pl-pds\">'</span>填写您做了什么修改<span class=\"pl-pds\">'</span></span>\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> 推送到远程仓库，分支名替换成 dev 或者 docs</span>\ngit push origin 分支名</pre></div>\n</li>\n<li>\n<p dir=\"auto\">登录您的仓库，然后会看到一条 PR 请求，点击请求合并，等待管理员把您的代码合并进来。</p>\n</li>\n</ol>\n<h3 dir=\"auto\">项目分支说明</h3>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th>分支</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>master</td>\n<td>主分支，受保护分支，此分支不接受 PR。在 beta 分支后经过测试没问题后会合并到此分支。</td>\n</tr>\n<tr>\n<td>beta</td>\n<td>beta 版本 分支，受保护分支，此分支不接受 PR。在 dev 分支后经过测试没问题后会合并到此分支。</td>\n</tr>\n<tr>\n<td>dev</td>\n<td>开发分支，接受 PR，PR 请提交到 dev 分支。</td>\n</tr>\n<tr>\n<td>docs</td>\n<td>项目文档分支，接受 PR，介绍项目功能、汇总常见问题等。</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<blockquote>\n<p dir=\"auto\">目前用到的主要是 dev 和 docs 分支，接受 PR 修改，其他的分支为归档分支，贡献者可以不用管。</p>\n</blockquote>\n<h3 dir=\"auto\">贡献者</h3>\n<a href=\"https://github.com/dromara/Jpom/graphs/contributors\">\n  <img src=\"https://camo.githubusercontent.com/bcb88289d00d6d4789b96d405be11ed6b16415a7376179534c5ea64ae8d9b411/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d64726f6d6172612f4a706f6d\" alt=\"contributors\" data-canonical-src=\"https://contrib.rocks/image?repo=dromara/Jpom\" style=\"max-width: 100%;\">\n</a>\n<p dir=\"auto\">Made with <a href=\"https://contrib.rocks\" rel=\"nofollow\">contrib.rocks</a>.</p>\n<h2 dir=\"auto\">🌍 知识星球</h2>\n<p align=\"center\" dir=\"auto\">\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/f3c57d85c2948e1c3cd08754f5157fff93e1421e243bdcf39162ce3b8b69b24c/68747470733a2f2f6a706f6d2e746f702f696d616765732f7a7378712e6a7067\"><img src=\"https://camo.githubusercontent.com/f3c57d85c2948e1c3cd08754f5157fff93e1421e243bdcf39162ce3b8b69b24c/68747470733a2f2f6a706f6d2e746f702f696d616765732f7a7378712e6a7067\" alt=\"扫码加入知识星球，了解学习更多知识\" data-canonical-src=\"https://jpom.top/images/zsxq.jpg\" style=\"max-width: 100%;\"></a>\n</p>\n<h2 dir=\"auto\">🔔 精品项目推荐</h2>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th>项目名称</th>\n<th>项目地址</th>\n<th>项目介绍</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>SpringBoot_v2</td>\n<td><a href=\"https://gitee.com/bdj/SpringBoot_v2\" rel=\"nofollow\">https://gitee.com/bdj/SpringBoot_v2</a></td>\n<td>基于springboot的一款纯净脚手架</td>\n</tr>\n<tr>\n<td>TLog GVP 项目</td>\n<td><a href=\"https://gitee.com/dromara/TLog\" rel=\"nofollow\">https://gitee.com/dromara/TLog</a></td>\n<td>一个轻量级的分布式日志标记追踪神器，10分钟即可接入，自动对日志打标签完成微服务的链路追踪</td>\n</tr>\n<tr>\n<td>Sa-Token</td>\n<td><a href=\"https://gitee.com/dromara/sa-token\" rel=\"nofollow\">https://gitee.com/dromara/sa-token</a></td>\n<td>这可能是史上功能最全的 Java 权限认证框架！</td>\n</tr>\n<tr>\n<td>Erupt</td>\n<td><a href=\"https://gitee.com/erupt/erupt\" rel=\"nofollow\">https://gitee.com/erupt/erupt</a></td>\n<td>零前端代码，纯注解开发 admin 管理后台</td>\n</tr>\n<tr>\n<td>hippo4j</td>\n<td><a href=\"https://gitee.com/magegoofy/hippo4j\" rel=\"nofollow\">https://gitee.com/magegoofy/hippo4j</a></td>\n<td>强大的动态线程池框架，附带监控报警功能。</td>\n</tr>\n<tr>\n<td>HertzBeat</td>\n<td><a href=\"https://gitee.com/dromara/hertzbeat\" rel=\"nofollow\">https://gitee.com/dromara/hertzbeat</a></td>\n<td>易用友好的云监控系统, 无需 Agent, 强大自定义监控能力。</td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<h2 dir=\"auto\">🤝 鸣谢</h2>\n<ul dir=\"auto\">\n<li>感谢 JetBrains 提供的免费开源 License：</li>\n</ul>\n<p dir=\"auto\">\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/29e65718ea9c6c6ef361ead089daa10220b0eb3820a655a1bff2a19ea6597b78/68747470733a2f2f6a706f6d2e746f702f696d616765732f667269656e64732f61642f6a6574627261696e732e706e67\"><img src=\"https://camo.githubusercontent.com/29e65718ea9c6c6ef361ead089daa10220b0eb3820a655a1bff2a19ea6597b78/68747470733a2f2f6a706f6d2e746f702f696d616765732f667269656e64732f61642f6a6574627261696e732e706e67\" alt=\"JetBrains\" data-canonical-src=\"https://jpom.top/images/friends/ad/jetbrains.png\" style=\"max-width: 100%;\"></a>\n</p>","updatedAt":"2025-05-21T16:03:43Z","upvoteCount":null,"author":{"login":"eryajf","avatarUrl":"https://avatars.githubusercontent.com/u/33259379?u=e4a4090a38ac2473aaed4ef9945233636776c6c3&v=4","url":"https://github.com/eryajf"},"category":null,"labels":{"edges":[{"node":{"name":"更多","color":"25B472"}},{"node":{"name":"CICD","color":"cd57f9"}},{"node":{"name":"dromara","color":"3a35a2"}}]},"comments":{"edges":[]}}},"pageContext":{"number":254,"previous":{"title":"joggle-cn/joggle: Joggle 是基于 Ngrok 二开的开源内网穿透项目，支持多节点、私有部署、云服务。","number":253},"next":{"title":"AykutSarac/jsoncrack.com: 将 JSON、YAML、XML、CSV 等各种数据格式转换为交互式图表的工具","number":255}}},
    "staticQueryHashes": ["151096407","2861350382"]}