Compare commits

...

6258 Commits

Author SHA1 Message Date
Mr Chen
2f912b4ddd Merge pull request #796 from midoks/dev
update
2025-08-18 22:41:37 +08:00
0931cb9f9c update 2025-08-18 22:41:08 +08:00
bc98a80de6 Update mw.tpl 2025-08-18 22:40:32 +08:00
9e3ad237b5 Update mw.tpl 2025-08-18 22:07:38 +08:00
Mr Chen
40a6ce7aa7 Merge pull request #795 from midoks/dev
国内安装支持多个代理选择
2025-08-18 21:59:21 +08:00
85bedbf56b update 2025-08-18 21:48:27 +08:00
5575710d7e Update update_dev.sh 2025-08-18 21:25:31 +08:00
df442f7fff update 2025-08-18 21:24:45 +08:00
89e665b369 Update mw.tpl 2025-08-18 21:22:43 +08:00
42f845a7e2 Update mw.tpl 2025-08-18 21:21:17 +08:00
a226bc9fbb update 2025-08-18 21:10:20 +08:00
b2f9935abb Update mw.tpl 2025-08-18 20:57:56 +08:00
d8a22ba5ee update 2025-08-18 20:36:17 +08:00
be09821778 Update mw.tpl 2025-08-18 20:35:33 +08:00
4f0f440f2c update 2025-08-18 20:26:06 +08:00
9cd46a7f9f Update update_dev.sh 2025-08-18 20:22:49 +08:00
66c875584f Update update_dev.sh 2025-08-18 20:13:35 +08:00
f14d2fddc7 Update mw.tpl 2025-08-18 20:10:19 +08:00
fa2dda6ee4 Update README.md 2025-08-18 20:08:43 +08:00
73c8117a67 Update README.md 2025-08-18 20:07:31 +08:00
5f42e94da7 Update README.md 2025-08-18 20:05:56 +08:00
c31a95dd4b Update README.md 2025-08-18 20:03:30 +08:00
19ec0ddcb9 Update mw.tpl 2025-08-18 20:00:41 +08:00
5e24086476 Delete t.sh 2025-08-18 19:58:04 +08:00
72934000b0 Update mw.tpl 2025-08-18 19:56:48 +08:00
8a240e2c9c Update mw.tpl 2025-08-18 19:55:45 +08:00
9f081359b0 Update mw.tpl 2025-08-18 19:54:17 +08:00
679a1f0d05 Update mw.tpl 2025-08-18 19:53:43 +08:00
4533e87bef Update mw.tpl 2025-08-18 19:50:29 +08:00
47a60b41a8 up 2025-08-18 19:30:17 +08:00
b06100d0dc Update README.md 2025-08-18 19:07:07 +08:00
e5591cc59e Update install_dev.sh 2025-08-18 18:08:17 +08:00
9831216ca4 Update install_dev.sh 2025-08-18 18:03:43 +08:00
57e36c5fdb Update mw.tpl 2025-08-18 17:45:02 +08:00
35904bd79d Update install_dev.sh 2025-08-18 17:41:12 +08:00
f16a2a7fec update 2025-08-18 17:37:33 +08:00
0b4b8a62aa Update install_dev.sh 2025-08-18 17:16:29 +08:00
ca4fa30cdb Update install_dev.sh 2025-08-18 17:11:40 +08:00
90c024dfe5 Update install_dev.sh 2025-08-18 17:05:35 +08:00
e634c44797 Update install_dev.sh 2025-08-18 17:04:58 +08:00
8eea4072f6 Update install_dev.sh 2025-08-18 17:03:19 +08:00
a0886e1a3d Update install_dev.sh 2025-08-18 17:01:11 +08:00
b93d77c907 Update install_dev.sh 2025-08-18 16:35:00 +08:00
a148e27211 Update install_dev.sh 2025-08-18 16:33:57 +08:00
3cd9b52d2a Update install_dev.sh 2025-08-18 16:30:13 +08:00
37206916e4 Update install_dev.sh 2025-08-18 16:29:49 +08:00
d36d2fa4b4 Update install_dev.sh 2025-08-18 16:29:07 +08:00
4591c9006b Update install_dev.sh 2025-08-18 16:28:23 +08:00
5b4ceb49df Update install_dev.sh 2025-08-18 16:27:54 +08:00
ba937c1e77 update 2025-08-18 16:25:54 +08:00
2b77254322 Update install_dev.sh 2025-08-18 16:22:57 +08:00
b27cb78f62 Update install_dev.sh 2025-08-18 16:21:26 +08:00
106af5b177 Update install_dev.sh 2025-08-18 16:21:14 +08:00
4b31160670 Update install_dev.sh 2025-08-18 16:19:48 +08:00
0593be9928 Update install_dev.sh 2025-08-18 16:18:18 +08:00
6602119ee7 Update install_dev.sh 2025-08-18 16:15:57 +08:00
2943d1f1b7 Update install_dev.sh 2025-08-18 16:14:53 +08:00
485ab6793c Update install_dev.sh 2025-08-18 16:13:35 +08:00
164a450784 update 2025-08-18 16:10:14 +08:00
f12db7e55f Update install_dev.sh 2025-08-18 16:03:31 +08:00
23e000afb3 Update install_dev.sh 2025-08-18 15:57:38 +08:00
5c77dd91e7 Update nosql_mongodb.py 2025-08-17 17:25:34 +08:00
1c4140daec Update nginx.conf 2025-08-11 17:48:18 +08:00
ad1035547d Update nginx.conf 2025-08-11 17:48:01 +08:00
e61be60f71 Update linux.conf 2025-08-11 17:11:38 +08:00
9d6db1e847 Update nginx.conf 2025-08-11 17:06:29 +08:00
Mr Chen
76a417fee7 Merge pull request #794 from midoks/dev
数据展示插件及修复计划任务列表
2025-08-03 11:48:32 +08:00
9e836148bb Update crontab.js 2025-08-03 11:44:35 +08:00
8d32e404e7 Update crontab.js 2025-08-03 11:28:46 +08:00
fb3b0f0ae6 Update crontab.js 2025-08-03 11:21:50 +08:00
6ad415fa5a Update index.py 2025-08-02 19:48:28 +08:00
79d2cc26b0 Update index.py 2025-08-02 19:47:36 +08:00
df0ad48348 Update prometheus.js 2025-08-02 19:45:50 +08:00
b1024d1da1 Update index.html 2025-08-02 19:45:15 +08:00
5db1ad1535 Update index.py 2025-08-02 19:44:26 +08:00
b45fef8b0b Update prometheus.service.tpl 2025-08-02 19:42:44 +08:00
22d4a9a809 update 2025-08-02 19:37:00 +08:00
0478356ea5 pdate 2025-08-02 19:34:25 +08:00
45e35c4396 Update linux.sh 2025-08-02 19:27:59 +08:00
eb5079a5ef Update linux.sh 2025-08-02 19:26:38 +08:00
a62e01e02e Update install.sh 2025-08-02 19:24:35 +08:00
c58db08e5f update 2025-08-02 19:23:00 +08:00
6476fe1d2c Update linux.sh 2025-08-02 19:22:30 +08:00
8ea34d5736 prometheus 2025-08-02 19:22:14 +08:00
4d4f43fa93 Update info.json 2025-08-02 19:07:39 +08:00
3e7b2ee6c1 Update promtail-config.yaml 2025-08-02 17:02:52 +08:00
0d16d3abf1 Update loki-config.yaml 2025-08-02 16:35:42 +08:00
3923ea9dd6 Update promtail-config.yaml 2025-08-02 15:19:37 +08:00
e1292620c7 update 2025-08-02 15:08:50 +08:00
4e2b2e1f54 Update promtail-config.yaml 2025-08-02 15:02:00 +08:00
fcf75b652c update 2025-08-02 14:57:53 +08:00
9765b51969 Update linux.sh 2025-08-02 14:52:48 +08:00
0769183f61 Update linux.sh 2025-08-02 14:52:39 +08:00
845cc1a2ef Update linux.sh 2025-08-02 14:49:03 +08:00
16a95c12b4 Update linux.sh 2025-08-02 14:45:04 +08:00
0516aeb94f Update linux.sh 2025-08-02 14:43:19 +08:00
6b92ecebf9 Update linux.sh 2025-08-02 14:37:48 +08:00
9010c71051 Update linux.sh 2025-08-02 14:35:53 +08:00
fcca331224 Update index.py 2025-08-02 14:32:26 +08:00
e3a2f76f78 Update promtail.service.tpl 2025-08-02 14:25:27 +08:00
7e221454a3 update 2025-08-02 14:24:40 +08:00
ebecffca03 Update linux.sh 2025-08-02 14:14:07 +08:00
42f99fd7a2 update 2025-08-02 14:05:46 +08:00
b31ab0ae16 update 2025-08-02 13:56:29 +08:00
bec041aa01 Update linux.sh 2025-08-02 13:53:37 +08:00
8ded811295 Update linux.sh 2025-08-02 13:51:17 +08:00
f1c0b9f1ed update 2025-08-02 13:49:07 +08:00
d32a371b3a Create loki-config.bak.yaml 2025-08-02 13:45:15 +08:00
c0860cd275 update 2025-08-02 13:34:50 +08:00
bfd125fc4f Update loki.service.tpl 2025-08-02 13:30:02 +08:00
a115ab28ba Update loki-config.yaml 2025-08-02 13:29:42 +08:00
d21b126401 update 2025-08-02 13:24:10 +08:00
410bf03682 Update loki.service.tpl 2025-08-02 13:21:35 +08:00
0a9f3de5c3 Update index.py 2025-08-02 13:18:47 +08:00
0ecadb918b Update index.py 2025-08-02 13:16:43 +08:00
e90b055f12 Update loki.service.tpl 2025-08-02 13:14:13 +08:00
02877dc23c Update index.py 2025-08-02 12:40:08 +08:00
e22439af4c update 2025-08-02 12:33:11 +08:00
298c777971 update 2025-08-02 12:31:35 +08:00
39cf12f51a Update linux.sh 2025-08-02 11:30:40 +08:00
276bc480cf Update install.sh 2025-08-02 11:10:43 +08:00
f0b2820034 Update linux.sh 2025-08-02 11:08:32 +08:00
ba65103df4 Update index.py 2025-08-02 11:07:08 +08:00
ae64b70f10 Update linux.sh 2025-08-02 11:04:01 +08:00
56ea2dd6f4 Update linux.sh 2025-08-02 11:02:31 +08:00
1633b9fca7 Update install.sh 2025-08-02 00:04:26 +08:00
cb7a79953f update 2025-08-01 23:33:43 +08:00
5c12d9d6a6 Update install.sh 2025-08-01 19:30:28 +08:00
244ae40969 update 2025-08-01 19:27:48 +08:00
e2b7fec286 Update install.sh 2025-08-01 19:20:39 +08:00
4cc2bc16c0 Update grafana.js 2025-08-01 19:19:29 +08:00
24a4872058 Update index.py 2025-08-01 19:18:20 +08:00
91a9788706 update 2025-08-01 19:17:14 +08:00
2a6ef8853d update 2025-08-01 19:10:26 +08:00
56358508c8 Update index.py 2025-08-01 18:57:27 +08:00
976b94464e Update index.py 2025-08-01 18:57:05 +08:00
d166a0ccfb Update index.html 2025-08-01 18:55:32 +08:00
7c5c389629 update 2025-08-01 18:54:20 +08:00
f447b527eb update 2025-08-01 18:52:52 +08:00
a251714989 Update install.sh 2025-08-01 18:50:28 +08:00
ea27f817e3 Update grafana.service.tpl 2025-08-01 18:48:58 +08:00
b6fb47fc16 update 2025-08-01 18:44:34 +08:00
fa540d516d Update install.sh 2025-08-01 18:37:17 +08:00
4b068d2a52 Update grafana.service.tpl 2025-08-01 18:34:35 +08:00
50f5289e2e Update grafana.service.tpl 2025-08-01 18:26:02 +08:00
1ba20a4ea7 Update grafana.service.tpl 2025-08-01 18:20:55 +08:00
e18067b2f0 Update index.py 2025-08-01 18:18:04 +08:00
025f19728f up 2025-08-01 18:14:54 +08:00
248496021a up 2025-08-01 18:12:07 +08:00
d56a73f0f7 Update linux.sh 2025-08-01 17:50:09 +08:00
a2b68ebce1 Update grafana.js 2025-08-01 17:27:00 +08:00
93b92f2b17 Update index.py 2025-08-01 17:26:02 +08:00
f5219bf79b Update index.py 2025-08-01 17:21:51 +08:00
cc1d99d9c9 Update index.py 2025-08-01 17:20:33 +08:00
f7101db942 Update linux.sh 2025-08-01 17:10:14 +08:00
97ae9d17bf Update linux.sh 2025-08-01 17:08:06 +08:00
a5624e7e3c Update linux.sh 2025-08-01 17:04:34 +08:00
0be42900c1 Update install.sh 2025-08-01 17:02:51 +08:00
9722e1ca64 update 2025-08-01 17:02:31 +08:00
63a20506a0 Update info.json 2025-08-01 16:58:28 +08:00
9b334e416f update 2025-08-01 16:55:54 +08:00
7805956cdf update 2025-07-30 15:33:03 +08:00
04ffd0ad45 Update install.sh 2025-07-30 15:30:51 +08:00
f6e7055c2b Update info.json 2025-07-30 13:23:05 +08:00
77167655e8 update 2025-07-30 13:22:42 +08:00
Mr Chen
24e2d0a3db Merge pull request #791 from midoks/dev
mysql强制修改密码
2025-07-27 17:20:18 +08:00
29795074fe Update index.py 2025-07-27 17:17:17 +08:00
e017675b4d Update index.py 2025-07-27 17:14:19 +08:00
74a9897deb Update index.py 2025-07-27 17:03:02 +08:00
f593e77d35 Update mysql.js 2025-07-27 17:01:36 +08:00
8b9ab7f0b8 Update mysql.js 2025-07-27 17:00:45 +08:00
02951833cc Update mysql.js 2025-07-27 16:58:53 +08:00
08e300d065 Update index.py 2025-07-27 16:56:56 +08:00
776e4c2418 Update index.py 2025-07-27 16:53:42 +08:00
cbe439815d Update index.py 2025-07-27 16:50:42 +08:00
5c43222e4f Update index.py 2025-07-27 16:49:54 +08:00
a6fe7e2fe3 Update index.py 2025-07-27 16:49:17 +08:00
6f6523836d Update index.py 2025-07-27 16:48:44 +08:00
650a57350c Update index.py 2025-07-27 16:48:25 +08:00
736b34e834 Update index.py 2025-07-27 16:45:55 +08:00
d29682fd19 Update index.py 2025-07-27 16:44:09 +08:00
59c9058426 Update index.py 2025-07-27 16:43:26 +08:00
dbd32201c5 Update index.py 2025-07-27 16:40:56 +08:00
55158a67fc Update index.py 2025-07-27 16:40:27 +08:00
49dfe99a14 Update index.py 2025-07-27 16:23:53 +08:00
165672f9fd Update index.py 2025-07-27 16:22:51 +08:00
3bf03aa0b2 Update index.py 2025-07-27 16:20:49 +08:00
8ccbe8e7a6 Update index.py 2025-07-27 16:17:02 +08:00
1d54f90c95 Update index.py 2025-07-27 16:11:56 +08:00
000de62093 Update index.py 2025-07-27 16:09:05 +08:00
7ed82a796a Update install.sh 2025-07-27 16:07:50 +08:00
4ad7e4c3f3 Update index.py 2025-07-27 16:07:41 +08:00
e1c17d8926 update 2025-07-27 15:58:59 +08:00
47cc40d0dd Update index.py 2025-07-27 15:56:34 +08:00
1a66d91885 Update mysql.js 2025-07-27 15:56:27 +08:00
01fbe11831 Update orm.py 2025-07-27 15:41:28 +08:00
d834965d79 Update orm.py 2025-07-27 15:37:30 +08:00
b6eeb79500 Update README.md 2025-07-25 11:56:51 +08:00
460d6c4e02 Update manticore.conf 2025-07-23 12:47:27 +08:00
c6089bd480 Update sphinx_make.py 2025-07-23 12:44:12 +08:00
3d18d4bc6f Update manticore.conf 2025-07-23 12:41:07 +08:00
61954b820f Update manticore.conf 2025-07-23 12:40:18 +08:00
dee67c6ea2 Update index.py 2025-07-23 12:31:19 +08:00
2fdaf1d482 update 2025-07-23 12:30:24 +08:00
8af986a4c5 Update sphinx_make.py 2025-07-23 12:18:29 +08:00
c3a13b66e6 Update index.py 2025-07-23 12:13:20 +08:00
Mr Chen
78111fd408 Merge pull request #788 from midoks/dev
manticoresearch插件配置优化
2025-07-23 12:05:04 +08:00
efeaa3f0b5 Update sphinx_make.py 2025-07-23 12:04:29 +08:00
aed5e1aa63 Update index.py 2025-07-23 11:58:35 +08:00
44211065a0 Update index.py 2025-07-23 11:55:05 +08:00
364d38cc05 Update install_dev.sh 2025-07-23 11:47:53 +08:00
b38bfd7ada Update index.py 2025-07-23 11:32:48 +08:00
f05efd1693 Update mw.tpl 2025-07-22 18:06:15 +08:00
c64b03135c Update alpine.sh 2025-07-22 17:56:07 +08:00
860a50f025 Update update.sh 2025-07-22 17:54:47 +08:00
5e9706ca23 Update install.sh 2025-07-22 17:54:35 +08:00
d3d23fe7b9 Update alpine.sh 2025-07-22 17:54:10 +08:00
af2aa2e083 Update alpine.sh 2025-07-22 17:44:34 +08:00
bb52b17a12 Update alpine.sh 2025-07-22 17:37:01 +08:00
17c68cb9b7 Update alpine.sh 2025-07-22 17:36:31 +08:00
5c3fe16e9c Update install_dev.sh 2025-07-22 17:30:21 +08:00
81ce4e3445 Update alpine.sh 2025-07-22 17:27:45 +08:00
9aaa5174bb Update update_dev.sh 2025-07-22 17:23:55 +08:00
8d9c89d281 update 2025-07-22 17:20:56 +08:00
Mr Chen
62fa42f1ba Merge pull request #787 from midoks/dev
manticoresearch状态修复
2025-07-22 00:35:59 +08:00
502cb1595f Update index.py 2025-07-22 00:33:13 +08:00
c1e358e9fd Update index.py 2025-07-22 00:33:01 +08:00
7600ef1b30 Update index.html 2025-07-22 00:14:54 +08:00
b9057da526 Update index.py 2025-07-22 00:14:05 +08:00
99e143b686 up 2025-07-22 00:10:10 +08:00
Mr Chen
0414f1f4de Merge pull request #786 from midoks/dev
增加插件manticoresearch
2025-07-21 21:28:24 +08:00
80f651d17a Update index.py 2025-07-21 21:03:19 +08:00
1a373eb876 Update install.sh 2025-07-21 21:01:09 +08:00
5882b6b58e Update index.py 2025-07-21 20:49:12 +08:00
f876e56a2d Update install.sh 2025-07-21 20:34:21 +08:00
ac98ec92e4 Update tool_cron.py 2025-07-21 20:32:25 +08:00
6cf6445c01 Update index.py 2025-07-21 20:31:00 +08:00
062a6def14 Update tool_cron.py 2025-07-21 20:30:42 +08:00
282a5451f8 Update index.py 2025-07-21 20:02:08 +08:00
b410f782e6 Update sphinx_make.py 2025-07-21 19:50:36 +08:00
f4d997957c Update index.py 2025-07-21 19:46:02 +08:00
5551c7d341 Update discuz.conf 2025-07-21 19:43:28 +08:00
642e028fca Update discuz.conf 2025-07-21 19:42:54 +08:00
ffe5cd21e5 Update index.py 2025-07-21 19:41:02 +08:00
93679924f4 up 2025-07-21 19:25:59 +08:00
212e3c1066 Update sphinx_make.py 2025-07-21 19:23:18 +08:00
ebd4baa6ff Update sphinx_make.py 2025-07-21 19:23:05 +08:00
6d846144dc Update sphinx_make.py 2025-07-21 19:20:52 +08:00
e9767ee6c7 Update sphinx_make.py 2025-07-21 19:19:09 +08:00
b4a77f25f9 Update sphinx_make.py 2025-07-21 19:18:03 +08:00
08098f48a0 Update sphinx_make.py 2025-07-21 19:17:11 +08:00
478ebe95f0 Update discuz.conf 2025-07-21 19:14:27 +08:00
bc48b85478 up 2025-07-21 19:09:44 +08:00
a5f7610230 Update index.py 2025-07-21 19:06:31 +08:00
98157bbc8b Update index.py 2025-07-21 19:05:34 +08:00
4e0792b139 Update discuz.conf 2025-07-21 18:51:19 +08:00
a171970c96 Update index.py 2025-07-21 18:46:39 +08:00
38490fd462 Create discuz.conf 2025-07-21 18:45:23 +08:00
b9726cc23f Update install.sh 2025-07-21 18:16:38 +08:00
e047696fba Update info.json 2025-07-21 18:13:24 +08:00
bea5a0896a Update install.sh 2025-07-21 18:12:18 +08:00
c15ddb64e8 Update install.sh 2025-07-21 18:07:18 +08:00
e4e3cbd68e update 2025-07-21 18:04:27 +08:00
fd8b27d3f1 Update install.sh 2025-07-21 17:58:53 +08:00
497a1632c0 Update install.sh 2025-07-21 17:58:43 +08:00
5e991a9708 Update manticore.conf 2025-07-21 17:55:46 +08:00
0e49874d38 update 2025-07-21 17:55:36 +08:00
a93b99bca7 Update install.sh 2025-07-21 17:38:33 +08:00
4d541c175c Update install.sh 2025-07-21 17:37:56 +08:00
588de95004 Update install.sh 2025-07-21 17:34:06 +08:00
8850d73ea3 Update install.sh 2025-07-21 17:33:38 +08:00
feca7c7d7c Update manticore.conf 2025-07-21 17:32:22 +08:00
1507368ea7 Update index.py 2025-07-21 17:20:34 +08:00
ce74ec97fb Update index.py 2025-07-21 17:20:12 +08:00
1fd5e2c3f6 update 2025-07-21 17:19:20 +08:00
79e23fe0c7 Update index.py 2025-07-21 17:12:44 +08:00
ab0c62c73a Update index.py 2025-07-21 17:07:27 +08:00
e72de994ad up 2025-07-21 17:01:16 +08:00
364a84cc6d Update manticoresearch.js 2025-07-21 16:58:56 +08:00
40072c6423 Update index.py 2025-07-21 16:55:51 +08:00
2d56f71588 Update index.py 2025-07-21 16:55:03 +08:00
d7a8b87473 Update index.py 2025-07-21 16:51:53 +08:00
7c8c2c655c Update index.py 2025-07-21 16:50:31 +08:00
8ea870b2a7 Update index.py 2025-07-21 16:49:59 +08:00
7e1317a400 Update index.py 2025-07-21 16:49:26 +08:00
6569a4af3b Update index.py 2025-07-21 16:47:40 +08:00
31ee85a523 Update index.py 2025-07-21 16:44:48 +08:00
acf6384318 Update index.py 2025-07-21 16:44:29 +08:00
539426d585 update 2025-07-21 16:43:51 +08:00
f8401414d3 update 2025-07-21 16:41:00 +08:00
e3cbdb9420 Update index.py 2025-07-21 16:35:23 +08:00
823126dad6 update 2025-07-21 16:34:29 +08:00
6d3c8d6679 Update install.sh 2025-07-21 16:33:13 +08:00
da2ee9c6f4 update 2025-07-21 16:32:02 +08:00
0b4299d6c3 Update install.sh 2025-07-21 16:29:19 +08:00
0830419658 Update install.sh 2025-07-21 16:28:51 +08:00
85bfcd7447 manticoresearch初始化 2025-07-21 16:13:34 +08:00
729b7e0bcc Update index.py 2025-07-21 16:08:23 +08:00
4dbaf5d0f8 Update site.py 2025-07-20 23:19:38 +08:00
Mr Chen
cbad208be6 Merge pull request #785 from midoks/dev
更友好的顶级域名识别
2025-07-20 22:16:11 +08:00
f7992d8eae Update site.py 2025-07-20 22:04:02 +08:00
8c7c344ea9 update 2025-07-20 21:52:24 +08:00
Mr Chen
2a52aa61c1 Merge pull request #783 from midoks/dev
php版本更新
2025-07-20 17:05:30 +08:00
8d06bd94b8 Update xdebug.sh 2025-07-20 17:02:27 +08:00
8f53747515 Update swoole.sh 2025-07-20 17:02:16 +08:00
d7a997052d Update xhprof.sh 2025-07-20 16:30:42 +08:00
324e98b639 Update xdebug.sh 2025-07-20 16:15:20 +08:00
7aebb728f8 Update xdebug.sh 2025-07-20 16:13:04 +08:00
c386a2a57a Update xdebug.sh 2025-07-20 16:12:19 +08:00
6e5c4917d9 Update event.sh 2025-07-20 16:07:37 +08:00
d5d9ae51c5 Update all_test.sh 2025-07-20 16:04:38 +08:00
ca39f0da3a Update all_test.sh 2025-07-20 15:59:53 +08:00
41cdbb43fc Update swoole.sh 2025-07-20 15:53:41 +08:00
6f3897886e Update swoole.sh 2025-07-20 15:50:55 +08:00
6b1bfdfeca Update solr.sh 2025-07-20 15:48:49 +08:00
a07a37f256 Update solr.sh 2025-07-20 15:30:07 +08:00
896512cf3e Update imagemagick.sh 2025-07-20 15:25:30 +08:00
60602e68f5 Update mcrypt.sh 2025-07-20 15:19:47 +08:00
7066eb2632 Update memcached.sh 2025-07-20 14:35:29 +08:00
ddfdebced2 up 2025-07-20 13:52:29 +08:00
4913cc9ed6 update 2025-07-20 13:31:18 +08:00
6427bb794d Update swoole.sh 2025-07-20 12:51:15 +08:00
77bc7c85f8 Update swoole.sh 2025-07-20 12:50:46 +08:00
54a90a2e99 Update swoole.sh 2025-07-20 12:46:17 +08:00
e4a9c32caa Update all_mac.sh 2025-07-20 12:28:37 +08:00
13b9711d4a Update phplib.conf 2025-07-20 12:25:38 +08:00
af15d6a592 Update all_test.sh 2025-07-20 12:23:19 +08:00
132580ea6c Update phplib.conf 2025-07-20 12:18:45 +08:00
262ab0ab73 Update phplib.conf 2025-07-20 12:15:56 +08:00
1e19d70fa1 Update phplib.conf 2025-07-20 12:13:07 +08:00
48b8d530ca Update all_test.sh 2025-07-20 11:35:41 +08:00
1f35c5b8fa Update install.sh 2025-07-20 11:26:12 +08:00
574b87f5b5 update 2025-07-20 11:20:11 +08:00
88be69ffc7 update 2025-07-20 11:19:14 +08:00
Mr Chen
87e49e3244 Merge pull request #782 from midoks/dev
mysql 配置回退
2025-07-20 11:06:02 +08:00
4a392126cd update 2025-07-20 11:05:24 +08:00
c0489ebb44 Update info.json 2025-07-19 19:02:29 +08:00
ed65f63a37 Update index.py 2025-07-17 20:12:16 +08:00
Mr Chen
2b4ff60de0 Merge pull request #781 from midoks/dev
版本更新及细节优化
2025-07-17 18:04:06 +08:00
8069bf51ab update 2025-07-17 17:37:57 +08:00
369b53e2fd update 2025-07-17 11:19:33 +08:00
1cf0c1636b update 2025-07-17 11:15:34 +08:00
060fe39331 update 2025-07-17 11:13:19 +08:00
8bec4058e2 Update info.json 2025-07-17 11:11:13 +08:00
Mr Chen
61d30d6f77 Merge pull request #780 from midoks/dev
Update index.py
2025-07-16 15:48:56 +08:00
7daae8a129 Update index.py 2025-07-16 15:47:01 +08:00
Mr Chen
ab2c9e450e Merge pull request #779 from midoks/dev
Dev
2025-07-16 15:34:06 +08:00
24c269bf4c Update install.sh 2025-07-16 15:29:54 +08:00
8f0c8fd800 Update install.sh 2025-07-16 15:29:21 +08:00
Mr Chen
a0e29a2bc2 Merge pull request #778 from midoks/dev
0.18.2
2025-07-16 15:22:03 +08:00
94cab2e71a update 2025-07-16 15:20:50 +08:00
266b9fa5c2 up 2025-07-16 11:47:23 +08:00
Mr Chen
31de8edc4a Merge pull request #777 from midoks/dev
Update site_reflect.py
2025-07-15 18:30:26 +08:00
1e59eda9a9 Update site_reflect.py 2025-07-15 18:23:40 +08:00
Mr Chen
36c3fcb395 Merge pull request #776 from midoks/dev
计划任务兼容性问题
2025-07-13 22:06:52 +08:00
ea8f0523d5 Update crontab.py 2025-07-13 21:34:46 +08:00
71625b7c0e Update init_cron.py 2025-07-13 21:19:30 +08:00
408a62c755 update 2025-07-13 10:58:05 +08:00
Mr Chen
da4a61b716 Merge pull request #775 from midoks/dev
0.18.1
2025-07-12 20:57:46 +08:00
996c4474ec Update version.py 2025-07-12 20:55:05 +08:00
cdc05d8d98 update 2025-07-12 20:44:37 +08:00
52892ef5df Update crontab.js 2025-07-12 20:34:50 +08:00
ce0340689b Update crontab.py 2025-07-12 20:34:06 +08:00
58cdb0db95 Update crontab.py 2025-07-12 20:28:40 +08:00
c2c49d09e9 Update crontab.py 2025-07-12 20:25:14 +08:00
c9a2997cea Update backup.py 2025-07-12 20:23:43 +08:00
94aba71ae4 Update backup.py 2025-07-12 20:17:16 +08:00
b80c7bdc23 Update backup.py 2025-07-12 20:12:31 +08:00
279231c08c update 2025-07-12 20:12:17 +08:00
ef47b839ad Update crontab.py 2025-07-12 19:54:24 +08:00
ffc8ae7d04 update 2025-07-12 17:43:45 +08:00
7d8269832f up 2025-07-12 16:42:10 +08:00
6ba516f66e Update default.sql 2025-07-12 14:26:09 +08:00
53d4fcbd6d update 2025-07-12 14:21:04 +08:00
237ef10545 update 2025-07-12 14:19:01 +08:00
23650aa800 update 2025-07-12 14:13:47 +08:00
9998691524 update 2025-07-12 13:59:05 +08:00
bd61a953ad Update public.js 2025-07-12 12:45:59 +08:00
f53379829c Update public.js 2025-07-12 01:35:49 +08:00
Mr Chen
04a4faba22 Merge pull request #774 from midoks/dev
编辑细节优化
2025-07-12 01:14:08 +08:00
65d4369306 Update public.js 2025-07-12 01:10:42 +08:00
6ab650d498 Update public.js 2025-07-12 00:20:17 +08:00
Mr Chen
2a06c108ac Merge pull request #773 from midoks/dev
Update public.js
2025-07-12 00:15:29 +08:00
3bd31c55fd Update public.js 2025-07-12 00:14:03 +08:00
Mr Chen
ea2fb6d4cd Merge pull request #772 from midoks/dev
编辑文件优化
2025-07-11 23:57:12 +08:00
d4dccc8016 Update public.js 2025-07-11 23:52:50 +08:00
3cdc78af1f Update push_ad.py 2025-07-11 15:37:26 +08:00
7784f0c929 Update push_notice_msg.py 2025-07-11 15:34:42 +08:00
a399d3d04a Update push_notice_msg.py 2025-07-11 15:33:39 +08:00
d261dd8fb4 Update push_notice_msg.py 2025-07-11 15:28:57 +08:00
273f475732 up 2025-07-04 08:40:56 +08:00
Mr Chen
35cce62b9b Merge pull request #769 from midoks/dev
修复mysql8+正确关闭二进制日志
2025-07-02 23:12:34 +08:00
7b5d2820ca up 2025-07-02 23:05:45 +08:00
46374cfb2d update 2025-07-02 23:00:48 +08:00
020bfb2abc Update index.py 2025-07-02 22:58:07 +08:00
d3ab317b34 Update index.py 2025-07-02 22:57:15 +08:00
da3dd52484 Update index.py 2025-07-02 22:54:38 +08:00
9514cd9cce Update my9.0.cnf 2025-07-02 22:52:34 +08:00
654a66062a Update my9.0.cnf 2025-07-02 22:52:18 +08:00
5ac5b13f9d update 2025-06-30 12:13:21 +08:00
Mr Chen
7f39bf5c6e Merge pull request #767 from midoks/dev
Update crontab.py
2025-06-26 17:30:00 +08:00
0e07a10dcf Update crontab.py 2025-06-26 15:45:03 +08:00
Mr Chen
8cbedd00b8 Merge pull request #766 from midoks/dev
acme.sh 定时每7天强制更新
2025-06-25 23:07:56 +08:00
d9d3d3fdb4 Update init_cron.py 2025-06-25 23:06:09 +08:00
364c142f0a Update init_cron.py 2025-06-25 23:04:07 +08:00
92c0177c44 Update init_cron.py 2025-06-25 22:59:42 +08:00
6bdca8c37e Update init_cron.py 2025-06-25 22:58:43 +08:00
fcb51e727a Update __init__.py 2025-06-25 22:57:34 +08:00
4523a10898 Update __init__.py 2025-06-25 22:56:39 +08:00
4e155c8039 Update init_cron.py 2025-06-25 22:55:40 +08:00
8b9f861f30 Update init_cron.py 2025-06-25 22:54:45 +08:00
Mr Chen
3595ae6066 Merge pull request #765 from midoks/dev
mysql 9.0 兼容优化
2025-06-25 18:55:27 +08:00
351d4a0ad6 Update index.py 2025-06-25 17:26:17 +08:00
c6e6771839 Update index.py 2025-06-25 17:21:18 +08:00
fb51e0fcd1 Update index.py 2025-06-25 17:05:09 +08:00
4fbf9c345d update 2025-06-25 17:03:45 +08:00
f3557e9acf update 2025-06-25 17:01:24 +08:00
cb7367264b Update index.py 2025-06-25 16:53:15 +08:00
2fb722edbf Update index.py 2025-06-25 16:50:22 +08:00
fce1608403 Update index.py 2025-06-25 16:46:38 +08:00
c6117cb599 update 2025-06-25 16:46:21 +08:00
c68e056267 Update index.py 2025-06-25 16:44:55 +08:00
4c9924580a Update index.py 2025-06-25 16:38:37 +08:00
058b3b8d62 Update index.py 2025-06-25 16:36:27 +08:00
1eb29acf7c Update index.py 2025-06-25 16:35:16 +08:00
48ac052de8 Update index.py 2025-06-25 16:35:03 +08:00
4863ff2a19 update 2025-06-25 16:32:59 +08:00
0b0fd8ea67 Update index.py 2025-06-25 16:25:48 +08:00
Mr Chen
b8f4ed2767 Merge pull request #759 from midoks/dev
Update file.py
2025-06-16 18:44:21 +08:00
732eba7d7d Update file.py 2025-06-16 18:43:19 +08:00
Mr Chen
8b676f3c1b Merge pull request #758 from midoks/dev
Update file.py
2025-06-12 15:40:50 +08:00
960ca4deca Update file.py 2025-06-12 15:37:14 +08:00
Mr Chen
63ecec4edb Merge pull request #757 from midoks/dev
bug! 根目录解压引起所有目录权限发生变化-限制
2025-06-12 15:18:40 +08:00
c6f04aa26f Update file.py 2025-06-12 15:18:22 +08:00
8f29df66d5 Update file.py 2025-06-12 15:11:12 +08:00
2d9e62aedb Update file.py 2025-06-12 15:10:25 +08:00
eba511add2 Update file.py 2025-06-12 15:09:42 +08:00
Mr Chen
e9e38d5224 Merge pull request #756 from midoks/dev
Update setting.py
2025-06-12 13:18:59 +08:00
b131ba8b93 Update setting.py 2025-06-12 13:17:44 +08:00
Mr Chen
a12046fe93 Merge pull request #755 from midoks/dev
简单优化
2025-06-12 08:11:46 +08:00
769f065bdf update 2025-06-12 08:10:42 +08:00
81f9ee5eca Update git.tpl 2025-06-09 23:03:14 +08:00
42fb44dd15 Update backup.py 2025-06-09 19:09:50 +08:00
600bb8b516 Update site.py 2025-06-04 15:58:34 +08:00
Mr Chen
8831d91cbe Merge pull request #753 from midoks/dev
PHP GD优化
2025-06-04 15:48:29 +08:00
d7d734565c Update gd_old.sh 2025-06-04 15:45:06 +08:00
791e9bf156 Update gd_old.sh 2025-06-04 15:43:20 +08:00
284812b4e3 Update gd_old.sh 2025-06-04 15:43:05 +08:00
505d59bc77 Update install.sh 2025-06-04 12:47:52 +08:00
Mr Chen
02eda25aaf Merge pull request #751 from midoks/dev
优化
2025-05-29 19:11:46 +08:00
d19521810e Update __init__.py 2025-05-29 19:10:41 +08:00
f8d17724f9 update 2025-05-29 19:07:51 +08:00
Mr Chen
6548125747 Merge pull request #750 from midoks/dev
常规优化
2025-05-29 18:51:51 +08:00
ef375619b6 php 默认的 mysql 连接配置,可支持localhost连接 2025-05-29 18:49:17 +08:00
fe89ae1846 Update index.py 2025-05-29 18:45:55 +08:00
4ccf142917 Update push_ad.py 2025-05-27 16:38:50 +08:00
Mr Chen
89fbeb85a2 Merge pull request #749 from midoks/dev
debian ufw 规则识别有优化
2025-05-27 11:09:07 +08:00
62b3d15991 Update firewall.py 2025-05-27 11:04:38 +08:00
52a305f5cd Update firewall.py 2025-05-27 11:01:21 +08:00
Mr Chen
658305ef28 Merge pull request #748 from midoks/dev
ACME泛域名SSL申请 第二次优化
2025-05-25 20:38:09 +08:00
19295e2832 Update common.js 2025-05-25 20:37:22 +08:00
719e8165f1 Update common.js 2025-05-25 20:20:10 +08:00
Mr Chen
d5ba280654 Merge pull request #747 from midoks/dev
ACME泛域名SSL - 插件优化
2025-05-25 20:14:53 +08:00
00dc48b439 Update index.py 2025-05-25 20:11:06 +08:00
8cc87ba7a0 Update acme.sql 2025-05-25 20:04:59 +08:00
8b2f7ee188 Update common.js 2025-05-25 20:03:18 +08:00
167c551b89 Update common.js 2025-05-25 20:02:42 +08:00
b57968d106 Update common.js 2025-05-25 19:57:26 +08:00
68514b8eae Update index.py 2025-05-25 19:27:54 +08:00
88a8e35793 Update tool_cron.py 2025-05-25 19:21:34 +08:00
ec4dcb2720 Update tool_cron.py 2025-05-25 19:20:15 +08:00
f01b64edd5 Update goedge.py 2025-05-25 19:05:10 +08:00
ef0b2af84b Update tool_cron.py 2025-05-25 19:04:55 +08:00
90af2e0c3c Update install.sh 2025-05-25 01:59:46 +08:00
344393244e Update info.json 2025-05-25 01:54:21 +08:00
96c75eb2d3 php优化 2025-05-25 00:14:07 +08:00
5594cbd1a8 php优化 2025-05-25 00:09:40 +08:00
Mr Chen
cb87abf19a Merge pull request #746 from midoks/dev
Update __init__.py
2025-05-24 23:06:48 +08:00
bf21399113 Update __init__.py 2025-05-24 23:06:24 +08:00
Mr Chen
f0fc8a644b Merge pull request #745 from midoks/dev
放开子目录绑定
2025-05-24 19:32:18 +08:00
a668234f2a Update site.py 2025-05-24 19:31:35 +08:00
6e80450e37 Update __init__.py 2025-05-24 18:54:20 +08:00
5639be6713 Update monitor.py 2025-05-24 18:48:57 +08:00
d36da3dc59 Update init.py 2025-05-24 18:45:59 +08:00
e83c743908 Update __init__.py 2025-05-24 18:45:41 +08:00
3410103859 Update default.sql 2025-05-24 18:45:36 +08:00
2685d9ebec Update .gitignore 2025-05-24 18:40:56 +08:00
c5574b3d93 Update site.js 2025-05-24 15:41:30 +08:00
832d65bac8 Update default.sql 2025-05-24 15:10:00 +08:00
8394f43b3f Update default.sql 2025-05-24 15:09:46 +08:00
Mr Chen
c77ab16f3b Merge pull request #744 from midoks/dev
ssh连接优化
2025-05-24 01:16:31 +08:00
2d10a3a69e Update ssh_local.py 2025-05-24 01:05:41 +08:00
90714961eb Update ssh_local.py 2025-05-24 01:04:26 +08:00
b2586adda0 Update ssh_local.py 2025-05-24 01:03:31 +08:00
d11dbbccb7 Update ssh_local.py 2025-05-24 01:03:08 +08:00
1390afae0e Update ssh_local.py 2025-05-24 01:00:59 +08:00
3ec2d5e757 Update ssh_terminal.py 2025-05-24 00:56:16 +08:00
cc0d0407af Update ssh_terminal.py 2025-05-24 00:56:05 +08:00
1e9e437b1c update 2025-05-24 00:54:02 +08:00
eae75e24f9 Update ssh_terminal.py 2025-05-24 00:53:34 +08:00
045d672d68 Update ssh_local.py 2025-05-24 00:51:38 +08:00
caeff7de55 Update ssh_local.py 2025-05-24 00:51:29 +08:00
b2785070bc Update ssh_terminal.py 2025-05-24 00:46:53 +08:00
545dbeecca 先尝试默认端口 2025-05-24 00:44:49 +08:00
b4fa69642c Update index.py 2025-05-23 23:44:08 +08:00
f84fcc035c Update git.tpl 2025-05-23 23:43:04 +08:00
f556eb9607 Update git.tpl 2025-05-23 23:41:32 +08:00
b8aa2ffc38 Update index.py 2025-05-23 23:36:46 +08:00
2be79ead78 Update index.py 2025-05-23 23:36:12 +08:00
c900048329 update 2025-05-23 23:35:02 +08:00
b7850eaa29 Update index.py 2025-05-23 23:22:27 +08:00
ec5a5c8d15 Update index.py 2025-05-23 23:21:20 +08:00
94c51196cf Update requirements.txt 2025-05-23 23:07:23 +08:00
35c18c807f Update requirements.txt 2025-05-23 23:02:48 +08:00
da3d44fc2a Update requirements.txt 2025-05-23 23:00:34 +08:00
Mr Chen
b9b9ab9006 Merge pull request #743 from midoks/dev
mariadb数据库备份问题
2025-05-23 17:18:16 +08:00
5df23c79e7 Update backup.py 2025-05-23 15:08:00 +08:00
Mr Chen
ee4d49752d Merge pull request #741 from midoks/dev
简单优化
2025-05-19 03:18:05 +08:00
d26bf25359 Update mw.py 2025-05-19 02:40:33 +08:00
b1edc7b2fb Update site.py 2025-05-18 16:14:01 +08:00
459fb086d0 update 2025-05-18 14:12:01 +08:00
Mr Chen
7872391c54 Merge pull request #740 from midoks/dev
webhook优化
2025-05-18 11:09:20 +08:00
c2f4171ee9 update 2025-05-18 11:04:56 +08:00
9fdfa1c22f Update git.tpl 2025-05-18 10:23:23 +08:00
8ad3018fe7 Update git.tpl 2025-05-18 10:22:33 +08:00
64883aa424 update 2025-05-18 10:20:03 +08:00
6a41f68289 update 2025-05-18 09:40:10 +08:00
ffd96b03e5 Update commit.tpl 2025-05-17 21:17:50 +08:00
961dd5a56e Update index.py 2025-05-17 21:07:59 +08:00
Mr Chen
f5cb8ba23d Merge pull request #739 from midoks/dev
简单的优化
2025-05-16 23:57:46 +08:00
6bfe9ea2af Update info.json 2025-05-16 23:48:35 +08:00
134b9ce2f2 php最新版本 2025-05-16 23:44:57 +08:00
54582fb676 mysql配置优化 2025-05-16 23:31:08 +08:00
Mr Chen
2e9864be2a Merge pull request #738 from midoks/dev
面板关联优化
2025-05-16 19:08:50 +08:00
73f01522ed Update public.js 2025-05-16 19:06:48 +08:00
Mr Chen
73a67ebdd6 Merge pull request #736 from midoks/dev
文件管理-右键菜单优化
2025-05-16 04:19:14 +08:00
92c000f63e 右键菜单优化 2025-05-16 04:15:24 +08:00
665d278b52 Update index.py 2025-05-16 02:56:35 +08:00
9393775e90 Update index.py 2025-05-16 02:55:28 +08:00
Mr Chen
fe441c7afe Merge pull request #735 from midoks/dev
mysql9的同步优化
2025-05-16 02:51:06 +08:00
c865ff433b Update index.py 2025-05-16 02:49:16 +08:00
7eb729e809 Update index.py 2025-05-16 02:41:41 +08:00
Mr Chen
f667fbff55 Merge pull request #734 from midoks/dev
细节调优
2025-05-16 02:06:31 +08:00
7c6b5bb200 Update file.py 2025-05-16 02:03:52 +08:00
d00ee1a35a Update file.py 2025-05-16 02:02:20 +08:00
Mr Chen
7364e19051 Merge pull request #733 from midoks/dev
优化
2025-05-16 01:56:29 +08:00
97263ba55d Update files.js 2025-05-16 01:55:42 +08:00
a9cccbb85f Update files.js 2025-05-16 01:55:35 +08:00
Mr Chen
732bdd5a1c Merge pull request #732 from midoks/dev
支持多种压缩和解压
2025-05-16 01:48:53 +08:00
2934d8fd7d 支持多种压缩和解压
7z,tgz,zip,rar
2025-05-16 01:47:31 +08:00
992555e80e Update cmd.md 2025-05-10 14:51:54 +08:00
4a1348403a Update app.sh 2025-05-06 15:42:15 +08:00
Mr Chen
6353a4dc58 Merge pull request #731 from midoks/dev
redis/memcached版本更新
2025-05-03 10:35:45 +08:00
9e45f493c6 update 2025-05-03 10:34:03 +08:00
66fc8c43db Update info.json 2025-05-03 10:31:26 +08:00
e4761d52bc Update info.json 2025-05-03 10:29:30 +08:00
Mr Chen
893eccfa07 Merge pull request #730 from midoks/dev
PHP最新版本
2025-05-01 23:05:58 +08:00
fc3dc8276a update 2025-05-01 21:01:05 +08:00
Mr Chen
9ab5e3354d Merge pull request #729 from midoks/dev
基本优化
2025-05-01 15:32:53 +08:00
ec607798b5 Update index.py 2025-05-01 15:31:13 +08:00
b01a2d15de Update index.py 2025-05-01 15:29:14 +08:00
7e3f40cb20 系统优化加入hosts修改 2025-05-01 15:22:50 +08:00
7a38224198 Update install.sh 2025-05-01 11:56:32 +08:00
5a4f1c3cce update ad 2025-05-01 09:46:23 +08:00
f5287e42ca update 2025-05-01 09:45:57 +08:00
Mr Chen
3ec02b8ead Merge pull request #728 from midoks/dev
0.17.0升级0.18.0升级后,站点修复
2025-04-26 18:15:41 +08:00
d25e4b3093 0.17.0升级0.18.0升级后,站点修复 2025-04-26 18:14:29 +08:00
0b81a1402e Update site_reflect.py 2025-04-26 17:54:05 +08:00
891ba787e1 Update site_reflect.py 2025-04-26 17:53:40 +08:00
85a85a83e4 Update site_reflect.py 2025-04-26 02:51:09 +08:00
449b4e6882 Update site_reflect.py 2025-04-26 01:43:59 +08:00
fba98f5ed6 up 2025-04-26 00:32:43 +08:00
fda19b6103 update 2025-04-18 19:51:49 +08:00
Mr Chen
d6d2325506 Merge pull request #727 from midoks/dev
OP防火墙修复
2025-04-16 00:54:01 +08:00
d4354f1a65 update 2025-04-16 00:49:45 +08:00
7ebe82cf9c Update install.sh 2025-04-16 00:34:08 +08:00
3029f8d263 update 2025-04-15 23:49:42 +08:00
Mr Chen
00d3aaeb22 Merge pull request #726 from midoks/dev
修复mysql问题
2025-04-14 16:59:13 +08:00
a8bd5cbbeb Update index.py 2025-04-14 16:57:05 +08:00
48bcf77deb Create mysql9.2.service.tpl 2025-04-14 16:54:00 +08:00
Mr Chen
a24f3b72bd Merge pull request #725 from midoks/dev
mysql优化
2025-04-14 16:39:53 +08:00
e916e134dc update 2025-04-14 16:22:51 +08:00
b9b18b063c Update index.py 2025-04-14 16:00:22 +08:00
753460c594 Update index.py 2025-04-14 15:59:52 +08:00
e6f8e3e6e3 Update index.py 2025-04-14 15:49:30 +08:00
952c6da41c Update push_notice_msg.py 2025-04-14 15:27:19 +08:00
adb1d0b26d update 2025-04-14 15:24:30 +08:00
Mr Chen
15efadfa9e Merge pull request #723 from midoks/dev
网站统计安装优化
2025-04-13 16:05:48 +08:00
f09cc4996b Update install.sh 2025-04-13 16:04:55 +08:00
01a81156cc Create install.old.sh 2025-04-13 15:58:27 +08:00
89ee88d734 Update logs.py 2025-04-12 14:20:28 +08:00
Mr Chen
23880fdb91 Merge pull request #721 from midoks/dev
简单优化
2025-04-12 14:09:38 +08:00
10628d1c69 Update logs.py 2025-04-12 13:56:38 +08:00
897e54cb86 Update pg.py 2025-04-09 11:41:01 +08:00
85da840688 update 2025-04-08 18:21:53 +08:00
10348168eb Update install_dev.sh 2025-04-08 17:58:35 +08:00
4a2570f96a Update install.sh 2025-04-08 17:57:38 +08:00
Mr Chen
65a4635b09 Merge pull request #720 from midoks/dev
Update files.js
2025-04-05 18:29:31 +08:00
3a5264b783 Update files.js 2025-04-03 00:22:46 +08:00
Mr Chen
b5866f2a90 Merge pull request #719 from midoks/dev
mysql9.0优化
2025-04-02 16:22:02 +08:00
a35913ab78 update 2025-04-02 16:21:16 +08:00
cc27602454 Update index.py 2025-04-02 16:18:44 +08:00
8920a1132c Update index.py 2025-04-02 16:07:40 +08:00
536c76b000 Update index.py 2025-04-02 15:42:06 +08:00
d054f7f9cd Update index.py 2025-04-02 15:39:59 +08:00
Mr Chen
16bab8f0fa Merge pull request #718 from midoks/dev
mysql9.0相关优化
2025-04-02 13:01:39 +08:00
b7aa774eb7 Update index.py 2025-04-02 12:53:11 +08:00
cef521390a Update index.py 2025-04-02 12:50:50 +08:00
f4cda4ec36 Update index.py 2025-04-02 12:48:38 +08:00
628b65a569 update 2025-04-02 12:48:06 +08:00
142f0fc6c9 Update install.sh 2025-04-02 11:06:47 +08:00
fe0f3f63a2 Update index.py 2025-04-01 22:02:42 +08:00
Mr Chen
dd3f5fdb0c Merge pull request #716 from midoks/dev
修复bug(crontab)
2025-03-29 14:09:38 +08:00
Mr Chen
b7dd2fa05d Merge pull request #715 from moonlightwatch/fix/crontab_echo_name_error
fix: rename cron_name to cron_shell
2025-03-29 14:08:16 +08:00
moonlightwatch
1cf471704c fix: rename cron_name to cron_shell 2025-03-29 14:04:21 +08:00
54f8fdeec2 Update my9.2.cnf 2025-03-26 01:20:21 +08:00
7ea45e4c0a Update my9.2.cnf 2025-03-26 01:17:27 +08:00
5b93e616dc Update my9.2.cnf 2025-03-26 01:13:14 +08:00
2c4176de32 Update index.py 2025-03-26 01:07:25 +08:00
114dcea023 update 2025-03-26 00:57:45 +08:00
3c6b5f3573 update 2025-03-25 12:53:08 +08:00
Mr Chen
258b9b610f Merge pull request #713 from midoks/dev
mysql关闭/开启 二进制日志优化
2025-03-25 12:49:22 +08:00
717d2b1ad0 mariadb更新 2025-03-25 12:48:32 +08:00
3cdd7027d6 Update index.py 2025-03-25 12:45:42 +08:00
c5dc755cb6 Update index.py 2025-03-25 12:45:00 +08:00
89d13494c0 Update index.py 2025-03-25 12:43:24 +08:00
6fe6f55df8 Update info.json 2025-03-25 12:26:05 +08:00
2f38ecf505 update 2025-03-25 12:21:18 +08:00
c4ba4b4702 Create my9.2.cnf 2025-03-25 12:19:43 +08:00
eab13531d4 Update index.py 2025-03-25 12:06:48 +08:00
62d78dbed8 update 2025-03-25 11:55:05 +08:00
f5a4f1b275 ad 2025-03-24 23:40:11 +08:00
ebe761b1cf Update linux.conf 2025-03-24 11:18:01 +08:00
6e754f2f7b Update __init__.py 2025-03-24 10:38:37 +08:00
39cd3d1f4d Update init_cron.py 2025-03-24 00:06:42 +08:00
778d595e6e Update crontab.py 2025-03-23 18:24:41 +08:00
5f4622fdcd Update init_cron.py 2025-03-23 17:27:43 +08:00
9664609bbd Update init_cron.py 2025-03-23 17:14:49 +08:00
aa92699562 Update requirements.txt 2025-03-23 17:14:23 +08:00
edc45d5d3b Update mw.tpl 2025-03-23 17:03:31 +08:00
ed732232f2 Update mw.tpl 2025-03-23 16:52:14 +08:00
db04b3f98a update 2025-03-23 16:50:30 +08:00
fb7c5d9d47 update 2025-03-20 11:48:12 +08:00
7d7df74500 Update .gitignore 2025-03-20 00:14:55 +08:00
909ba46f66 Update index.py 2025-03-10 17:55:03 +08:00
df84ad25d6 Update info.json 2025-03-10 17:47:42 +08:00
178cfb17f3 Update index.py 2025-03-10 17:43:02 +08:00
fcef7ec3ca Update index.py 2025-03-08 14:47:35 +08:00
c1e758c9df Revert "Update index.py"
This reverts commit f40cfb7d25.
2025-03-08 14:46:29 +08:00
a06c98d52f Revert "Update index.py"
This reverts commit bf49153973.
2025-03-08 14:46:22 +08:00
bf49153973 Update index.py 2025-03-08 14:43:55 +08:00
dami
f40cfb7d25 Update index.py 2025-03-08 14:37:05 +08:00
dcd4527c75 update 2025-03-06 20:34:57 +08:00
Mr Chen
225ea91f43 Merge pull request #712 from midoks/dev
简单优化
2025-03-01 22:18:31 +08:00
172ca05efa Update install.sh 2025-03-01 22:17:31 +08:00
b3e2c8d9df Update index.py 2025-02-25 20:22:41 +08:00
934327052d up 2025-02-23 22:33:02 +08:00
24a94b4965 Update info.json 2025-02-23 21:59:01 +08:00
c5385541a7 Update tamper_proof_service.py 2025-02-22 10:29:16 +08:00
5be2d5eb22 Update tamper_proof_service.py 2025-02-22 10:27:23 +08:00
3688cf6145 Update tamper_proof_service.py 2025-02-22 10:18:45 +08:00
Mr Chen
1328699da0 Merge pull request #710 from jd82k/master
fix bugs
2025-02-21 17:01:13 +08:00
jd82k
1b0e42c79e Update site.py
fix bugs
2025-02-20 22:40:07 -08:00
jd82k
6ca80e3d8c Update site.js
fix bugs
2025-02-20 22:38:37 -08:00
Mr Chen
d992541a78 Merge pull request #709 from midoks/dev
openresty1.17.1安装时http3参数缺少
2025-02-19 23:43:24 +08:00
d13adc707e Update install.sh 2025-02-19 23:15:18 +08:00
90d00d0d9a Update install.sh 2025-02-19 23:11:07 +08:00
Mr Chen
fbc9685b3c Merge pull request #708 from midoks/dev
php版本升级
2025-02-18 16:13:34 +08:00
5507cfdb7b Update install.sh 2025-02-18 16:12:50 +08:00
2c8de3e7be Create imagemagick.sh 2025-02-16 10:03:47 +08:00
cbba4adb19 Update imagemagick.sh 2025-02-16 09:48:07 +08:00
b1e36d8a71 Update imagemagick.sh 2025-02-16 09:43:42 +08:00
af6403d752 Update imagemagick.sh 2025-02-16 09:42:16 +08:00
232db27a15 update 2025-02-16 09:15:45 +08:00
e04fc75be0 Update index.py 2025-02-15 22:41:49 +08:00
5fd4c84a18 Update ubuntu.sh 2025-02-15 22:26:08 +08:00
ce65fb9234 Update imagemagick.sh 2025-02-15 22:21:34 +08:00
d8d8c630a5 update 2025-02-15 22:13:39 +08:00
08558b1581 Update imagemagick.sh 2025-02-15 21:14:41 +08:00
21637f170f up 2025-02-14 23:23:58 +08:00
Mr Chen
5013ffd38d Merge pull request #707 from midoks/dev
更新说明
2025-02-13 16:40:20 +08:00
f471368d21 Update README.md 2025-02-13 16:39:51 +08:00
Mr Chen
8ddf0168fd Merge pull request #706 from midoks/dev
webhook插件修复
2025-02-12 12:46:30 +08:00
5a4ba1297f Update dashboard.py 2025-02-12 12:44:53 +08:00
0608c531ed Update dashboard.py 2025-02-12 12:41:31 +08:00
5d242de4e2 update 2025-02-12 12:12:33 +08:00
b7efc0394b update 2025-02-11 01:17:13 +08:00
Mr Chen
16681d0193 Merge pull request #704 from midoks/dev
修复插件安装版本判断
2025-02-10 17:26:53 +08:00
31ea0865d1 Update plugin.py 2025-02-10 17:23:52 +08:00
602ad3390c Update README.md 2025-02-06 15:27:41 +08:00
Mr Chen
d8891a1767 Merge pull request #702 from midoks/dev
计划任务修复
2025-02-06 00:36:56 +08:00
2400a0b353 计划任务修复 2025-02-06 00:34:24 +08:00
Mr Chen
de0248d59a Merge pull request #701 from midoks/dev
解决ufw识别问题
2025-02-05 19:31:46 +08:00
3eb72d23f8 Update firewall.py 2025-02-05 19:21:37 +08:00
c0606112b2 update 2025-02-05 19:15:10 +08:00
5decb77f1e Update ubuntu.sh 2025-02-05 18:49:38 +08:00
a04b9487f1 update 2025-02-03 03:55:05 +08:00
8835cd4ab5 Update index.py 2025-02-03 03:31:43 +08:00
b17452a949 Update index.py 2025-02-03 03:30:09 +08:00
2072eee3a4 Update index.py 2025-02-03 03:24:34 +08:00
4321c0e6b3 up 2025-02-03 03:19:31 +08:00
f1f98b2624 Update index.py 2025-02-03 03:15:26 +08:00
ec37cee26c Update index.py 2025-02-03 03:11:00 +08:00
a8adaf7e5a Update index.py 2025-02-03 03:09:21 +08:00
84c763c39e Update phplib.conf 2025-02-03 03:06:43 +08:00
33e86c4f79 Update phplib.conf 2025-02-03 03:03:51 +08:00
c00f93a1d3 Update phplib.conf 2025-02-03 03:03:43 +08:00
81100f21b4 Update index.py 2025-02-03 02:48:30 +08:00
b8a720919f Update index.py 2025-02-03 02:41:32 +08:00
cba37ae2fc Update lam.js 2025-02-03 02:34:52 +08:00
5d15cbd4ea Update index.py 2025-02-03 02:29:45 +08:00
5f87606cf7 Create config.php 2025-02-03 02:29:21 +08:00
9b22efe3d4 Update index.py 2025-02-03 02:28:13 +08:00
675c3b27aa Update info.json 2025-02-03 02:26:40 +08:00
ddd9e70d05 Update install.sh 2025-02-03 02:24:24 +08:00
30ed2049e4 Update info.json 2025-02-03 02:21:19 +08:00
b8092ed6dd Update info.json 2025-02-03 02:19:38 +08:00
c80c0962dd Update info.json 2025-02-03 02:14:16 +08:00
63c223b237 Update install.sh 2025-02-03 02:13:02 +08:00
07aa49accc Update install.sh 2025-02-03 02:12:51 +08:00
c595c541fb lam 2025-02-03 02:09:45 +08:00
e6ec8b65ce Update index.py 2025-02-03 01:41:52 +08:00
bc8c455094 Update index.py 2025-02-03 01:39:51 +08:00
507820d25e Update index.py 2025-02-03 01:31:31 +08:00
35e08295ce Update install.sh 2025-02-03 01:28:16 +08:00
9e581d8608 update 2025-02-03 01:25:59 +08:00
dcb8e69aac Create install_debian.sh 2025-01-29 01:15:38 +08:00
617b354d03 update 2025-01-28 23:41:26 +08:00
76b095b344 Update config.php 2025-01-28 23:25:36 +08:00
Mr Chen
5ff05e8025 Merge pull request #700 from midoks/dev
网站防串改优化
2025-01-28 22:18:07 +08:00
b973a16247 Update tamper_proof_service.py 2025-01-28 22:06:29 +08:00
0cb5d7507f Update tamper_proof_py.service.tpl 2025-01-28 22:03:11 +08:00
2851ebf126 Update tamper_proof_service.py 2025-01-28 22:01:28 +08:00
2f5b1bb205 update 2025-01-28 22:01:05 +08:00
5528336698 Update tamper_proof_service.py 2025-01-28 21:52:13 +08:00
4eda80baa8 Update tamper_proof_service.py 2025-01-28 21:47:48 +08:00
02918d4bcd Update install.sh 2025-01-28 21:39:22 +08:00
8315e3ea96 Update phplib.conf 2025-01-28 17:12:43 +08:00
cae4a2ee13 update 2025-01-28 17:09:49 +08:00
26762eee73 Update phpldapadmin.js 2025-01-28 17:09:03 +08:00
2f05fb12a0 Update ico.png 2025-01-28 17:06:15 +08:00
befdf2e1d3 Update info.json 2025-01-28 16:58:42 +08:00
aac7b98913 Update phplib.conf 2025-01-28 16:55:15 +08:00
baa9b5e6bb Update phplib.conf 2025-01-28 16:52:09 +08:00
99c919811a Update phplib.conf 2025-01-28 16:51:03 +08:00
ac7a4e739e Create ldap.sh 2025-01-28 16:49:26 +08:00
f8936aa7bc Update install.sh 2025-01-28 16:44:36 +08:00
6933c44571 Update index.py 2025-01-28 16:40:20 +08:00
dfb2f4b3af Update index.py 2025-01-28 16:38:19 +08:00
6601aebddf Update index.py 2025-01-28 16:36:04 +08:00
4d2ca9587d update 2025-01-28 16:35:10 +08:00
694a5ceab2 Update index.py 2025-01-28 16:25:53 +08:00
e522093f6c update 2025-01-28 16:25:04 +08:00
feefa2e90a Update install.sh 2025-01-28 16:19:13 +08:00
3709569cd8 Update install.sh 2025-01-28 16:18:51 +08:00
052b4870bf Update install.sh 2025-01-28 16:17:35 +08:00
5cb413a911 Update install.sh 2025-01-28 16:13:36 +08:00
80e77dda3f update 2025-01-28 16:12:32 +08:00
7a3d554d6c Update index.py 2025-01-28 16:09:59 +08:00
ab0fb063cf update 2025-01-28 16:08:01 +08:00
caec558bea Update install.sh 2025-01-28 15:52:04 +08:00
2d44b62fef Update install.sh 2025-01-28 15:50:54 +08:00
f9cc72ba4a update 2025-01-28 15:48:26 +08:00
f8544d0600 update 2025-01-28 15:47:37 +08:00
c96d361b4d Update install.sh 2025-01-28 15:43:27 +08:00
fa5305f332 up 2025-01-28 15:42:56 +08:00
b996bdea93 update 2025-01-28 15:37:08 +08:00
1bae6538f7 Update index.html 2025-01-28 15:36:30 +08:00
5673964de4 Update index.py 2025-01-28 15:33:41 +08:00
25623170bb update 2025-01-28 15:33:14 +08:00
2aa5739cd8 update 2025-01-28 15:31:34 +08:00
bdff56843f Update index.py 2025-01-28 15:23:45 +08:00
6e563e6d74 Update index.py 2025-01-28 15:23:30 +08:00
334a3fb6fe update 2025-01-28 15:20:20 +08:00
a1d130a674 up 2025-01-28 15:02:06 +08:00
e14f2ea247 Update index.py 2025-01-28 14:59:57 +08:00
3f478eef8e Update install.sh 2025-01-28 14:55:42 +08:00
e929274b51 up 2025-01-28 14:47:07 +08:00
526c0301f6 Update tamper_proof_service.py 2025-01-28 12:54:53 +08:00
7e7a19829d Update ubuntu.sh 2025-01-24 17:05:44 +08:00
bc3854b4c4 Update debian.sh 2025-01-24 17:05:31 +08:00
193bf20a3e Update nginx.conf 2025-01-24 16:01:40 +08:00
Mr Chen
4cc5194939 Merge pull request #698 from midoks/dev
openresty配置优化
2025-01-24 15:49:23 +08:00
46a525ae09 Update index.py 2025-01-24 15:42:51 +08:00
6d006a357e Update nginx.conf 2025-01-24 14:28:10 +08:00
fad73b0922 Update push_notice_msg.py 2025-01-17 23:06:40 +08:00
d2d2d4658e update 2025-01-14 18:39:36 +08:00
84e6ce2b48 ad 2025-01-14 18:37:58 +08:00
b91a9963e2 update 2025-01-14 15:49:03 +08:00
Mr Chen
25fcf93185 Merge pull request #697 from midoks/dev
PHP国内安装优化
2025-01-13 00:07:12 +08:00
Mr Chen
26bb2005c1 Merge pull request #696 from jyeric/patch-1
Fix: Unable to move
2025-01-12 23:58:01 +08:00
jyeric
ee58805ae9 Fix: Unable to move 2025-01-12 03:49:32 +08:00
1bfc02a892 Update install.sh 2025-01-10 23:15:01 +08:00
0c7dc4dbee up 2025-01-10 23:14:18 +08:00
42e9859ccb Update install.sh 2025-01-10 23:13:23 +08:00
bf9b6b6046 up 2025-01-10 23:12:56 +08:00
Mr Chen
c10eac5190 Merge pull request #694 from midoks/dev
rsyncd优化
2025-01-10 12:13:07 +08:00
d01ccf1208 Update rsyncd.js 2025-01-10 12:10:06 +08:00
703b9be83e Update rsyncd.js 2025-01-10 12:07:03 +08:00
e0fea93983 update 2025-01-10 12:04:30 +08:00
84ceef47cb Update index.py 2025-01-10 11:48:20 +08:00
255ed5944f Update file.py 2025-01-10 11:36:54 +08:00
Mr Chen
0dc2b635ae Merge pull request #693 from midoks/dev
rsyncd同步-接收优化2
2025-01-08 19:46:41 +08:00
ebd1cfe203 Update index.py 2025-01-08 19:45:32 +08:00
Mr Chen
43b9297476 Merge pull request #692 from midoks/dev
冲突解决
2025-01-08 15:18:39 +08:00
aa2f4a0167 Merge branch 'master' into dev 2025-01-08 15:17:30 +08:00
Mr Chen
ad31d046d4 Merge pull request #691 from midoks/dev
rsyncd同步-接收优化
2025-01-08 15:10:57 +08:00
a67ad5a7db Update rsyncd.js 2025-01-08 15:07:49 +08:00
90d4fb245a Update rsyncd.js 2025-01-08 15:06:16 +08:00
19f55fde6e Update rsyncd.js 2025-01-08 15:03:16 +08:00
227be5258e up 2025-01-08 15:01:48 +08:00
Mr Chen
913190bfeb Merge pull request #690 from midoks/dev
细节优化
2025-01-08 13:05:46 +08:00
0b0097f367 Update mw.py 2025-01-08 13:03:13 +08:00
Mr Chen
97ac8264f2 Merge pull request #689 from midoks/dev
Update monitor.html
2025-01-08 00:31:54 +08:00
d9cca6ccc9 Update monitor.html 2025-01-07 23:53:38 +08:00
Mr Chen
28d0b1fd25 Merge pull request #688 from midoks/dev
修复-错误账户登录不能反应的问题2
2025-01-07 18:52:22 +08:00
cbcfe4cb9d Update login.py 2025-01-07 18:51:03 +08:00
Mr Chen
70c14d3369 Merge pull request #687 from midoks/dev
修复-错误账户登录不能反应的问题
2025-01-07 18:44:22 +08:00
0bcf7edab5 Update login.py 2025-01-07 18:43:39 +08:00
0f410c29f7 Update login.py 2025-01-07 18:37:57 +08:00
b451a6da25 错误登录判断 2025-01-07 18:37:24 +08:00
Mr Chen
e6c7bc1544 Merge pull request #686 from midoks/dev
php openssl编译优化
2025-01-07 17:10:58 +08:00
d1ff8f1cac update 2025-01-07 17:06:45 +08:00
d967100c14 update 2025-01-07 16:25:52 +08:00
8461c20e40 update 2025-01-07 16:24:39 +08:00
Mr Chen
52924f06d2 Merge pull request #684 from midoks/dev
增加命令-修改面板ip
2025-01-07 01:38:47 +08:00
fad4e7bd7d update 2025-01-07 01:36:17 +08:00
Mr Chen
666ee1a083 Merge pull request #683 from midoks/dev
修复计划任务-每星期修改
2025-01-06 22:00:20 +08:00
8f05e47363 修复计划任务-每星期修改 2025-01-06 21:58:31 +08:00
Mr Chen
67d8abf7bf Merge pull request #682 from midoks/dev
反向代理优化
2025-01-06 11:39:43 +08:00
30842a6659 Update site.py 2025-01-06 11:34:56 +08:00
3ee500d339 Update alist.tpl 2025-01-05 21:57:31 +08:00
Mr Chen
c5ade905b0 Merge pull request #681 from midoks/dev
php mysql_xdevapi 在debian下载安装优化
2025-01-04 16:13:45 +08:00
8e6784bf21 update 2025-01-04 16:10:44 +08:00
4eacbca674 update 2025-01-04 16:09:04 +08:00
Mr Chen
149fe72324 Merge pull request #680 from midoks/dev
关于phpmyadmin无法连接高级版本的问题【已解决】
2025-01-04 13:18:37 +08:00
43f752afbc update 2025-01-04 13:01:57 +08:00
19efde1fda update 2025-01-04 13:00:43 +08:00
98f267057b Update app_start.php 2025-01-04 12:59:22 +08:00
4f98894ce4 Update app_start.php 2025-01-04 12:56:24 +08:00
8cb225779e Update app_start.php 2025-01-04 12:55:45 +08:00
57ff303c39 Update phplib.conf 2025-01-04 12:50:55 +08:00
29cae6ae6c Update phplib.conf 2025-01-04 12:50:45 +08:00
e0c761bdf0 Update index.py 2025-01-04 12:46:07 +08:00
6ee1a8dc52 Update mw.py 2025-01-04 12:41:57 +08:00
db69532dde Update openssl.sh 2025-01-04 12:12:23 +08:00
d4c47c16e4 Update all_test.sh 2025-01-04 11:56:03 +08:00
a28733521b update 2025-01-04 11:54:00 +08:00
b957595944 update 2025-01-04 11:53:20 +08:00
b985d42336 update 2025-01-04 11:48:08 +08:00
9d467a13bb Update index_php.py 2025-01-04 05:33:40 +08:00
4629d39980 Update index_php.py 2025-01-04 05:23:14 +08:00
11d245dadf Update index_php.py 2025-01-04 05:22:19 +08:00
bb72b53f19 Update openssl.sh 2025-01-04 04:57:54 +08:00
3bef89d625 update 2025-01-04 04:39:37 +08:00
792b1348c1 Update openssl.sh 2025-01-04 04:06:12 +08:00
7399cd7d45 Update install.sh 2025-01-04 03:39:54 +08:00
d6347f6d4a update 2025-01-04 03:24:04 +08:00
3b5585193f update 2025-01-04 03:22:56 +08:00
5efa218247 Update install.sh 2025-01-04 03:20:18 +08:00
e5d312dbf9 Update install.sh 2025-01-04 03:19:49 +08:00
38e1c07e0b Update install.sh 2025-01-04 02:50:14 +08:00
809c9ea237 update 2025-01-04 02:37:28 +08:00
08a41f039b Update install.sh 2025-01-04 02:27:18 +08:00
3dd14307d0 Update install.sh 2025-01-04 02:25:30 +08:00
4122c11372 Update my8.0.cnf 2025-01-04 02:02:24 +08:00
9360a9cd68 Update my8.0.cnf 2025-01-04 01:48:01 +08:00
24746dab08 update 2025-01-04 01:37:10 +08:00
8879cba15d Update install.sh 2025-01-04 01:17:39 +08:00
Mr Chen
1b38c60f57 Merge pull request #679 from midoks/dev
时区接口与phpmyadmin/mysql[Tar]优化
2025-01-04 00:35:56 +08:00
7c944b27dd update 2025-01-04 00:26:31 +08:00
523e54eeb2 Update index.py 2025-01-03 23:54:04 +08:00
7b08a3f1bc Update mysql-community.js 2025-01-03 23:49:22 +08:00
018826e1a3 Update phpmyadmin.js 2025-01-03 23:47:02 +08:00
Mr Chen
a36b0b78b3 Merge pull request #678 from midoks/dev
修复phpmysqladmin插件
2025-01-03 22:42:44 +08:00
19964d39c1 Update phpmyadmin.js 2025-01-03 22:35:36 +08:00
31fd04456b update 2025-01-03 22:21:02 +08:00
76cf2e8fa5 update 2025-01-03 22:15:01 +08:00
f6b61c935e Update index.py 2025-01-03 22:12:47 +08:00
c736a04b4f Update debian.sh 2024-12-31 00:34:08 +08:00
14432fd6f9 Update install.sh 2024-12-27 17:40:13 +08:00
Mr Chen
047d84acb5 Merge pull request #676 from midoks/dev
面板修改用户名修复
2024-12-26 19:55:51 +08:00
8de4e6a0ee Update user.py 2024-12-26 19:54:37 +08:00
90fbb0e9ac Update requirements.txt 2024-12-26 19:07:19 +08:00
041f36ba00 Update requirements.txt 2024-12-26 19:04:48 +08:00
9e6cc873cb Update update.sh 2024-12-26 18:06:46 +08:00
20a6ced7b5 Update update.sh 2024-12-26 18:04:28 +08:00
34d9682cc1 Update update.sh 2024-12-26 18:02:38 +08:00
4ac797406a Update update.sh 2024-12-26 18:00:42 +08:00
bb3cdb5d85 Update update.sh 2024-12-26 17:56:43 +08:00
Mr Chen
245923d825 Merge pull request #675 from midoks/dev
兼容问题
2024-12-25 21:25:07 +08:00
41c048594e Update files.js 2024-12-25 21:21:54 +08:00
1360d2d066 Update files.js 2024-12-25 21:19:53 +08:00
Mr Chen
6286f03432 Merge pull request #674 from midoks/dev
网站目录 选择优化
2024-12-25 16:50:45 +08:00
c7a99cc61b Update files.py 2024-12-25 16:49:31 +08:00
e4aae5147c Update files.py 2024-12-25 16:35:35 +08:00
2a2e37ca97 Update public.js 2024-12-25 16:32:40 +08:00
a1489959d1 Update site.py 2024-12-25 16:02:41 +08:00
4561e37167 Update site.py 2024-12-25 15:58:52 +08:00
9fa04c9a90 Update site.py 2024-12-25 15:58:07 +08:00
aa4951b7fc Update site.py 2024-12-25 15:53:46 +08:00
53d08c261c Update site.py 2024-12-25 15:53:30 +08:00
74058243c6 Update site.py 2024-12-25 15:40:24 +08:00
62223d53be Update php.py 2024-12-25 15:29:35 +08:00
Mr Chen
06d33758eb Merge pull request #673 from midoks/dev
低版本兼容
2024-12-25 15:04:10 +08:00
af85245b06 Update site.js 2024-12-25 14:56:40 +08:00
01d8ebbd40 update 2024-12-25 14:52:57 +08:00
1c1cd1f434 Update site.js 2024-12-25 14:51:18 +08:00
Mr Chen
aaa801964c Merge pull request #672 from midoks/dev
创建站点兼容问题
2024-12-25 13:00:32 +08:00
01b490dff1 update 2024-12-25 12:52:41 +08:00
Mr Chen
1be1441352 Merge pull request #671 from midoks/dev
防火墙ssh修改端口修复
2024-12-24 23:08:09 +08:00
0b47b56fb5 Update firewall.py 2024-12-24 23:05:46 +08:00
0a1251ad0b Update firewall.py 2024-12-24 23:05:27 +08:00
Mr Chen
a506bebc94 Merge pull request #670 from midoks/dev
防火墙添加优化
2024-12-24 22:31:27 +08:00
26147acfa0 Update firewall.html 2024-12-24 22:27:10 +08:00
Mr Chen
f1d0be9f61 Merge pull request #669 from midoks/dev
兼容问题
2024-12-24 19:54:58 +08:00
45c1e9d28c Update r3.7.txt 2024-12-24 19:52:23 +08:00
Mr Chen
df3db9e632 Merge pull request #667 from midoks/dev
修复反向代理设置问题
2024-12-24 02:45:39 +08:00
8c1e672da7 Update site.py 2024-12-24 02:44:41 +08:00
Mr Chen
4bf5e68a9d Merge pull request #666 from midoks/dev
php版本更新及备份优化
2024-12-24 02:16:49 +08:00
0d4b157b1b Update backup.py 2024-12-24 02:14:20 +08:00
5fd207c84c Update backup.py 2024-12-24 02:14:01 +08:00
6829baba67 Update install.sh 2024-12-23 21:43:22 +08:00
b9983929fc update 2024-12-23 21:42:52 +08:00
Mr Chen
d540e7497b Merge pull request #664 from midoks/dev
站点页面和计划页面登录检查
2024-12-22 18:51:31 +08:00
0e0cc248fa 站点页面和计划页面登录检查 2024-12-22 18:50:58 +08:00
bcf6808e49 Update site.py 2024-12-22 01:33:19 +08:00
e2e27765ee Update site.py 2024-12-22 01:33:08 +08:00
f3b07bda65 Update site.py 2024-12-22 01:03:56 +08:00
Mr Chen
f555f1084f Merge pull request #663 from midoks/dev
@ramondelee 专用功能
2024-12-22 00:37:20 +08:00
212be88efe Update site.js 2024-12-22 00:36:29 +08:00
c131f0ecda Update site.js 2024-12-21 23:12:03 +08:00
Mr Chen
e3afb4b481 Merge pull request #662 from midoks/dev
acme手动验证
2024-12-21 20:32:05 +08:00
ca61f70d37 gorse便捷功能 2024-12-21 20:27:51 +08:00
90850ebfa3 Update site.js 2024-12-21 18:59:46 +08:00
771a6d6e08 Update site.js 2024-12-21 18:59:06 +08:00
55a6d17bc8 Update site.py 2024-12-21 18:35:01 +08:00
649990f2e1 update 2024-12-21 18:19:58 +08:00
48468a1c2d 右键解压方法缺失 2024-12-21 17:06:08 +08:00
dd685b664d acme手动申请ssl 2024-12-21 15:10:39 +08:00
36898e3e11 update 2024-12-21 14:19:53 +08:00
737450ba6e Update ssl_acme.py 2024-12-21 14:15:35 +08:00
0f63145319 Update rhel.sh 2024-12-21 00:50:29 +08:00
6a942db113 Update ubuntu.sh 2024-12-21 00:41:42 +08:00
6119adbe2d Update debian.sh 2024-12-21 00:41:39 +08:00
c31af5cbf4 Update mw.tpl 2024-12-21 00:21:52 +08:00
784629f11b Update cli.sh 2024-12-21 00:17:28 +08:00
Mr Chen
a581b7cdef Merge pull request #659 from midoks/dev
文件大小功能优化
2024-12-20 00:02:37 +08:00
d6918621fa Update files.py 2024-12-19 23:55:16 +08:00
dc54ec241e update 2024-12-19 23:49:57 +08:00
2f94674479 Update index.py 2024-12-19 23:28:22 +08:00
10b94514a7 update 2024-12-19 23:10:55 +08:00
Mr Chen
f5eacd6016 Merge pull request #658 from midoks/dev
插件优化
2024-12-19 17:28:03 +08:00
7383317f0b Merge branch 'master' into dev 2024-12-19 17:27:20 +08:00
26fa9378f5 Update README.md 2024-12-19 17:26:57 +08:00
9f37033e5c Update plugin.py 2024-12-19 17:24:34 +08:00
dc4ff9b694 Update info.json 2024-12-19 17:12:49 +08:00
3c9dc0a127 Update info.json 2024-12-19 17:09:48 +08:00
2afbe1c6fd Merge branch 'master' into dev 2024-12-19 16:38:36 +08:00
Mr Chen
309b5b9563 Merge pull request #657 from midoks/dev
插件位置调整
2024-12-19 16:38:22 +08:00
f64f0ebf4e Update info.json 2024-12-19 16:36:55 +08:00
dd646a155b Update info.json 2024-12-19 16:36:09 +08:00
6db38826d8 update 2024-12-19 16:34:14 +08:00
a18fd9b05c Update info.json 2024-12-19 16:32:27 +08:00
611c7b7b21 update 2024-12-19 16:32:06 +08:00
3961e95a5f update 2024-12-19 16:29:44 +08:00
d6e6a53301 update 2024-12-19 16:26:32 +08:00
e500026017 Update info.json 2024-12-19 16:25:03 +08:00
84632b6296 Update info.json 2024-12-19 16:24:44 +08:00
9b79e93967 Update info.json 2024-12-19 16:22:27 +08:00
Mr Chen
88e7ad0411 Merge pull request #656 from midoks/dev
mysql 快速安装 针对ubuntu24进行优化
2024-12-19 16:15:24 +08:00
d0e96eab91 Update install.sh 2024-12-19 16:13:13 +08:00
6ac78d9eb6 Update install.sh 2024-12-19 16:06:51 +08:00
5d830ae2f8 Update install.sh 2024-12-19 16:01:52 +08:00
178f844420 Update install.sh 2024-12-19 16:01:32 +08:00
adf3df510e Update install.sh 2024-12-19 16:01:12 +08:00
f58c03c429 Update install.sh 2024-12-19 16:00:05 +08:00
15f9edc5c7 Update install.sh 2024-12-19 15:59:22 +08:00
07f77024ab update 2024-12-19 15:57:26 +08:00
5b8ff7e612 Update ubuntu.sh 2024-12-19 15:30:57 +08:00
Mr Chen
1182e7405e Merge pull request #655 from midoks/dev
mw命令添加
2024-12-19 15:25:34 +08:00
9c6d8ef8e6 Update mw.tpl 2024-12-19 15:24:05 +08:00
eb807fb205 Update mw.tpl 2024-12-19 15:22:37 +08:00
Mr Chen
0602fb5569 Merge pull request #654 from midoks/dev
代理优化2
2024-12-19 15:14:41 +08:00
1dd78c3ea1 Update site.py 2024-12-19 15:11:56 +08:00
3175de4576 Update version.py 2024-12-19 15:11:00 +08:00
dfd1f172bb Update site.py 2024-12-19 15:09:42 +08:00
Mr Chen
0f6cf01fd3 Merge pull request #653 from midoks/dev
代理配置优化
2024-12-19 15:05:36 +08:00
3e9e7922b4 Update site.py 2024-12-19 15:01:19 +08:00
eb480c8838 update 2024-12-19 14:43:59 +08:00
a9bc4fe914 Update site.py 2024-12-19 14:21:39 +08:00
3bf1573e36 Update site.py 2024-12-19 14:20:39 +08:00
de6fd60f41 Update site.py 2024-12-19 14:19:17 +08:00
cf72ebdfd8 Update site.py 2024-12-19 14:17:22 +08:00
6e44452807 Update site.py 2024-12-19 14:17:12 +08:00
88c6abb53c Update site.py 2024-12-19 14:14:13 +08:00
27fd93f590 Update site.py 2024-12-19 14:09:25 +08:00
8b391f03c2 Update site.py 2024-12-19 14:08:59 +08:00
ea3033e22a Update site.py 2024-12-19 14:07:29 +08:00
Mr Chen
c88dff350e Merge pull request #652 from midoks/dev
站点代理+跨域设置
2024-12-18 19:36:08 +03:00
73e1a312b5 Update version.py 2024-12-19 00:31:08 +08:00
28c2b6dc77 Update site.py 2024-12-19 00:29:49 +08:00
0348cc55c6 update 2024-12-19 00:13:22 +08:00
e439918e05 Update site.js 2024-12-18 23:18:25 +08:00
Mr Chen
a5a7f405b3 Merge pull request #651 from midoks/dev
代理/重定向功能修复
2024-12-18 18:03:34 +03:00
4cd620fe2b update 2024-12-18 23:01:38 +08:00
b1826a60d2 Update proxy.py 2024-12-18 22:54:46 +08:00
50ec1c59d2 设置手动代理配置 2024-12-18 22:53:02 +08:00
36d604ec49 Update site.py 2024-12-18 22:47:21 +08:00
Mr Chen
7d6407afcf Merge pull request #650 from midoks/dev
Update README.md
2024-12-18 17:43:34 +08:00
92358db548 Update README.md 2024-12-18 17:34:37 +08:00
Mr Chen
161c6a69b1 Merge pull request #649 from midoks/dev
gdrive优化
2024-12-18 16:15:07 +08:00
215e053b6d update 2024-12-18 16:10:08 +08:00
e8a99af37f Update install.sh 2024-12-18 15:50:07 +08:00
de258a2568 Update install.sh 2024-12-18 15:49:40 +08:00
728db39ab7 update 2024-12-18 14:54:35 +08:00
Mr Chen
d885870302 Merge pull request #648 from midoks/dev
监控开启设置修复
2024-12-18 14:35:25 +08:00
2c87079686 Update system.py 2024-12-18 14:34:28 +08:00
e89785c1d2 Update mw.tpl 2024-12-18 14:13:28 +08:00
38f8eff1c5 Update mw.tpl 2024-12-18 14:12:07 +08:00
077394ec99 Update mw.tpl 2024-12-18 14:11:30 +08:00
7c23f85f75 Update mw.tpl 2024-12-18 14:09:24 +08:00
Mr Chen
20c1ceab92 Merge pull request #647 from midoks/dev
valkey命令加入
2024-12-18 12:21:13 +08:00
e5585caa09 Update version.py 2024-12-18 12:20:42 +08:00
a11b49befe update 2024-12-18 12:17:36 +08:00
Mr Chen
58027e4607 Merge pull request #646 from midoks/dev
valkey插件,redis的平替
2024-12-18 02:14:54 +08:00
1285641746 Update index.py 2024-12-18 02:02:51 +08:00
843ac18d2d Update valkey.conf 2024-12-18 01:56:03 +08:00
4383a202f2 update 2024-12-18 01:55:29 +08:00
cda412f6a9 update 2024-12-18 01:39:54 +08:00
f26b84c799 Update index.py 2024-12-18 01:39:07 +08:00
2fc3fd3ef1 update 2024-12-18 01:38:22 +08:00
57d04de8a5 Update redis.js 2024-12-18 01:38:14 +08:00
3e43c22a42 valkey,redis的平替 2024-12-18 01:33:46 +08:00
ea643b58d8 update 2024-12-18 01:21:14 +08:00
d366490fe5 update 2024-12-18 01:18:45 +08:00
83093f4c85 Update plugin.py 2024-12-18 01:15:33 +08:00
Mr Chen
99fcfa5223 Merge pull request #645 from midoks/dev
面板安装脚本优化
2024-12-18 00:30:35 +08:00
f6786b367b Update sql_mysql.py 2024-12-18 00:20:40 +08:00
eb373af6ed update 2024-12-18 00:18:18 +08:00
037e7e907b Update README.md 2024-12-18 00:09:08 +08:00
80844562e9 Update README.md 2024-12-18 00:07:06 +08:00
2a935845bf Update README.md 2024-12-17 23:54:44 +08:00
Mr Chen
3acbad4606 Merge pull request #644 from midoks/dev
更改/合并mysql快速安装方式
2024-12-17 23:35:13 +08:00
1973f6a2b0 删除冗余mysql插件 2024-12-17 23:33:46 +08:00
85e6a678dd Update sql_mysql.py 2024-12-17 23:20:48 +08:00
798c52f23d Update sql_mysql.py 2024-12-17 23:18:56 +08:00
aee405f9e2 update 2024-12-17 22:49:01 +08:00
f82ff2d482 Update rhel.sh 2024-12-17 22:46:00 +08:00
d9d9721249 Update index.py 2024-12-17 22:38:37 +08:00
8ef84763c6 Update index.py 2024-12-17 22:34:35 +08:00
c4f6db4431 update 2024-12-17 22:32:12 +08:00
60a7e7f885 Update mw.tpl 2024-12-17 22:30:50 +08:00
7e3c36cd27 Update version.py 2024-12-17 22:25:48 +08:00
5304abcd00 Update my5.7.cnf 2024-12-17 22:25:00 +08:00
19d94893cb Update index.py 2024-12-17 22:10:45 +08:00
485424b5c9 Update version.py 2024-12-17 21:43:17 +08:00
a8af7bed62 Update public.js 2024-12-17 21:42:55 +08:00
f63e7df28d Update public.js 2024-12-17 21:41:58 +08:00
7e81da6741 Update version.py 2024-12-17 21:37:25 +08:00
0c8e69c252 Update public.js 2024-12-17 21:36:54 +08:00
da8881dd1e Update version.py 2024-12-17 21:25:47 +08:00
d10c0a2fb9 update 2024-12-17 21:22:40 +08:00
34ed4b2f25 Update public.js 2024-12-17 21:20:32 +08:00
a109b148f6 Update install_generic.sh 2024-12-17 21:03:11 +08:00
65c7eeb9c9 update 2024-12-17 20:58:26 +08:00
e45b9b4101 mysql极速办版优化 2024-12-17 20:48:23 +08:00
8c9bfd7e2d update 2024-12-17 18:03:18 +08:00
208e418bba Update index_mysql_apt.py 2024-12-17 17:41:59 +08:00
05278bdacb Update install_generic.sh 2024-12-17 17:38:01 +08:00
5b11b35d5d Update install_generic.sh 2024-12-17 17:31:21 +08:00
9f5844c4de Update install_generic.sh 2024-12-17 17:29:31 +08:00
ae888e6d48 Update install_generic.sh 2024-12-17 17:22:16 +08:00
f5b4af6e38 Update install_generic.sh 2024-12-17 17:20:32 +08:00
84035e0cb1 Update install_generic.sh 2024-12-17 17:18:55 +08:00
6d5c3e81c8 Update install_generic.sh 2024-12-17 17:17:48 +08:00
16db84793d update 2024-12-17 17:15:27 +08:00
8b8a63c352 update 2024-12-17 17:04:50 +08:00
698cf0d263 update 2024-12-17 17:03:45 +08:00
6385d49eeb Update install_generic.sh 2024-12-17 17:00:49 +08:00
43e69909cd update 2024-12-17 16:59:35 +08:00
aeb0f866c8 Update mysql8.4.service.tpl 2024-12-17 16:39:32 +08:00
3e5c005f25 update_dev 2024-12-17 15:50:31 +08:00
bde27382b7 Update install.sh 2024-12-17 15:40:52 +08:00
Mr Chen
c17df789de Merge pull request #643 from midoks/dev
FTP存储空间 插件 修复
2024-12-17 14:12:48 +08:00
ca6a84fec4 Update index.py 2024-12-17 13:54:26 +08:00
1c952ca4cd update 2024-12-15 04:52:14 +08:00
c2c7073cd9 Create install_debian.sh 2024-12-15 04:44:51 +08:00
Mr Chen
6c84be1a82 Merge pull request #642 from midoks/dev
相关更新
2024-12-15 04:27:12 +08:00
16c90290f9 Update index.py 2024-12-15 04:22:07 +08:00
cf707df5e0 Update install.sh 2024-12-15 04:20:40 +08:00
078f1b763b Update install.sh 2024-12-15 04:18:10 +08:00
6060faa3ac Update install.sh 2024-12-15 04:16:36 +08:00
5059157515 update 2024-12-15 04:11:42 +08:00
49924c6b2b update 2024-12-15 04:08:59 +08:00
6ff1781372 update 2024-12-15 04:01:57 +08:00
29fd4d5220 Create my9.1.cnf 2024-12-15 03:42:32 +08:00
484dc13977 Update mw.tpl 2024-12-15 03:40:59 +08:00
59fc82c788 Create mysql9.1.service.tpl 2024-12-15 03:05:47 +08:00
9a4c9154f1 update 2024-12-15 03:01:57 +08:00
9949bb2493 u 2024-12-15 02:22:12 +08:00
07fc6ac8c4 openssl 2024-12-15 02:18:32 +08:00
6a93c3e90f Update openssl_10.sh 2024-12-15 02:16:31 +08:00
7bd88335c4 Update openssl_30.sh 2024-12-15 02:02:14 +08:00
9893e3bac2 Update index.py 2024-12-15 02:00:51 +08:00
946e886799 update 2024-12-15 02:00:38 +08:00
b84301debc Update openssl_30.sh 2024-12-15 01:56:43 +08:00
cb5c95ce03 Update index.py 2024-12-15 01:49:06 +08:00
c0a7e1ddba uppdate 2024-12-15 01:42:30 +08:00
220af054bb Update index.py 2024-12-15 01:33:29 +08:00
a9634f0249 Update index.py 2024-12-15 01:32:43 +08:00
fd77048d4b Update index.py 2024-12-15 01:30:09 +08:00
40cb632c80 Create my9.1.cnf 2024-12-15 01:23:01 +08:00
2313af825e update 2024-12-15 01:21:44 +08:00
762efdaa9a Update install.sh 2024-12-15 01:19:55 +08:00
b58cafb47a Update install.sh 2024-12-15 01:18:22 +08:00
308d909e72 Update install.sh 2024-12-15 01:17:45 +08:00
c88eb37b1a Update install.sh 2024-12-14 22:16:51 +08:00
e3189d39f4 Update install.sh 2024-12-14 21:55:57 +08:00
Mr Chen
de351c7473 Merge pull request #641 from midoks/dev
修复站点备份目录未指定默认值
2024-12-14 18:40:44 +08:00
9d08b7de34 Update mw.py 2024-12-14 18:35:26 +08:00
5cf0745da0 Update file.py 2024-12-14 18:26:55 +08:00
10009b65be Update file.py 2024-12-14 18:19:31 +08:00
Mr Chen
80c1c0b8b4 Merge pull request #640 from midoks/dev
修复站点根目录未指定默认值
2024-12-14 18:08:19 +08:00
9169d8899f Update mw.py 2024-12-14 18:06:18 +08:00
5166e05dbe 修复未指定默认值 2024-12-14 18:04:47 +08:00
e6e9dcb48c update 2024-12-14 17:15:20 +08:00
Mr Chen
712550cec8 Merge pull request #639 from midoks/dev
广告变价
2024-12-14 17:13:30 +08:00
f9061088fe update 2024-12-14 17:11:46 +08:00
Mr Chen
c53390d038 Merge pull request #638 from midoks/dev
常见优化
2024-12-14 17:04:57 +08:00
6fb93b19c9 Update info.json 2024-12-14 16:50:36 +08:00
e07e8391e1 Update gdrive.js 2024-12-14 16:05:49 +08:00
ccd8c056b1 Update install.sh 2024-12-14 15:12:17 +08:00
32ee0cf14c Update install.sh 2024-12-14 15:10:54 +08:00
9a6c02dd9a Update install.sh 2024-12-14 15:10:31 +08:00
3dd77715d8 update 2024-12-14 15:09:51 +08:00
0f99cdb115 Create install.sh 2024-12-14 15:06:45 +08:00
aecd0726e5 Update info.json 2024-12-14 15:05:33 +08:00
258b3495a1 Update install.sh 2024-12-14 14:56:40 +08:00
eb52d1a79a Update install.sh 2024-12-14 14:54:22 +08:00
1ad16b2b94 Create install.sh 2024-12-14 14:51:37 +08:00
fc28136936 Update panel_tools.py 2024-12-14 13:01:31 +08:00
575f3c9ce4 update 2024-12-14 12:47:20 +08:00
7c9ca83b46 Update install.sh 2024-12-14 12:22:50 +08:00
0d6c4010ff update 2024-12-14 05:14:12 +08:00
cb6d9762d5 Update setting.py 2024-12-14 05:01:43 +08:00
a4414d2083 Update sql_mysql.py 2024-12-14 04:52:14 +08:00
5bcae1b00c Update sql_mysql.py 2024-12-14 04:51:09 +08:00
5c01f36fe7 Update sql_mysql.py 2024-12-14 04:49:44 +08:00
84b7d1123e Update sql_mysql.py 2024-12-14 04:49:21 +08:00
Mr Chen
b819f345cf Merge pull request #637 from midoks/dev
xhprof|安全入口|面板端口命令修复
2024-12-14 02:52:48 +08:00
5278116f49 update 2024-12-14 02:47:59 +08:00
af36366a89 Update panel_tools.py 2024-12-14 02:41:39 +08:00
cabba7e2d2 Update panel_tools.py 2024-12-14 02:41:29 +08:00
ef6cc77dc2 update 2024-12-14 02:40:12 +08:00
4b6de5cd9f Update panel_tools.py 2024-12-14 02:34:07 +08:00
403e35c6c5 Update app_start.php 2024-12-14 02:21:31 +08:00
e1dbdc5886 Update index.py 2024-12-14 01:02:47 +08:00
9e0a64a51f Update index.py 2024-12-14 01:01:47 +08:00
971cc3a42a Update index.py 2024-12-14 00:24:59 +08:00
1c109ee86f Update index.py 2024-12-14 00:24:36 +08:00
b84106ae70 Update index.py 2024-12-14 00:24:23 +08:00
05881be9b9 Update index.py 2024-12-14 00:23:54 +08:00
06a7b3da19 Update index.py 2024-12-14 00:20:14 +08:00
9d77f66e47 update 2024-12-14 00:19:32 +08:00
85afff4848 Update app_start.php 2024-12-13 23:36:16 +08:00
8498eaa16d Update app_start.php 2024-12-13 23:28:48 +08:00
1e78341559 Update index.py 2024-12-13 23:21:05 +08:00
e4ed5a1d19 Update app_start.php 2024-12-13 23:19:00 +08:00
7b247d1e6f Update index.py 2024-12-13 23:13:46 +08:00
f98a7298c5 update 2024-12-13 23:10:04 +08:00
8e4e9ddf62 Update index.py 2024-12-13 23:05:31 +08:00
aea7fbe385 Update public.js 2024-12-13 23:05:26 +08:00
Mr Chen
392442b7b7 Merge pull request #636 from midoks/dev
js 兼容mac文件保存命令
2024-12-13 22:29:23 +08:00
cce3102beb Update public.js 2024-12-13 22:25:35 +08:00
fdf2e3854e Update public.js 2024-12-13 22:18:20 +08:00
Mr Chen
95011544c1 Merge pull request #635 from midoks/dev
修复监控设置不生效问题
2024-12-13 21:28:59 +08:00
fc97eb1c14 Update panel_task.py 2024-12-13 20:50:03 +08:00
fc6ec859fe Update panel_task.py 2024-12-13 20:44:50 +08:00
582ea54ed5 Update panel_task.py 2024-12-13 20:34:36 +08:00
Mr Chen
6caedb5b06 Merge pull request #634 from midoks/dev
gorse安装检测
2024-12-13 03:16:47 +08:00
307135d495 Update index.py 2024-12-13 03:14:28 +08:00
f786be41e7 Update index.py 2024-12-13 03:13:13 +08:00
e18ae543ee Update index.py 2024-12-13 03:07:26 +08:00
ab606e0629 Update index.py 2024-12-13 02:32:45 +08:00
b6cda24231 Update install.sh 2024-12-13 02:20:25 +08:00
ad4714418d Update install.sh 2024-12-13 02:19:11 +08:00
Mr Chen
a77e37ac65 Merge pull request #633 from midoks/dev
Update site.py
2024-12-13 01:16:03 +08:00
296b1cfe86 Update site.py 2024-12-13 01:14:25 +08:00
Mr Chen
c225570c00 Merge pull request #632 from midoks/dev
0.18.0
2024-12-12 23:29:56 +08:00
4b1db3d02f 0.18.0
### 版本更新 0.18.0

- 重新架构面板。
- PHP84正式版。
- 加入alist插件。
- 数据管理-常用命令。
- 插件读取优化(加入缓存+定时检查状态)。
- 恢复面板书签。
- 常规更新。
2024-12-12 23:28:49 +08:00
c358954e6d Update version.py 2024-12-12 23:27:19 +08:00
cfea5d498f Update dashboard.py 2024-12-12 23:26:32 +08:00
e69136534b Update install.sh 2024-12-12 23:00:41 +08:00
400ecfe690 Update alist.js 2024-12-12 22:23:45 +08:00
c64287fd51 Update index.py 2024-12-12 22:23:05 +08:00
0edc306aa8 Update index.py 2024-12-12 22:22:47 +08:00
839fec3a79 Update index.py 2024-12-12 22:15:39 +08:00
db2aab88f4 Update site.py 2024-12-12 17:43:26 +08:00
a5195956c2 Update sql_mysql.py 2024-12-12 12:41:55 +08:00
fc0b79f018 Update orm.py 2024-12-12 12:38:30 +08:00
1b42bafc49 Update php.py 2024-12-12 04:19:00 +08:00
83a2ea9b4e Update logs.py 2024-12-12 02:11:12 +08:00
4bf5fd712d Update sql_mysql.py 2024-12-11 20:15:42 +08:00
8a42898afe Update sql_mysql.py 2024-12-11 19:54:31 +08:00
6577b37b76 Update plugin.py 2024-12-11 18:56:53 +08:00
ccb02f14a6 update 2024-12-11 18:56:37 +08:00
0bd476340a Update install.sh 2024-12-11 14:26:01 +08:00
84c9436546 Update plugin.py 2024-12-11 14:03:47 +08:00
e9d220b54d Update plugin.py 2024-12-11 14:03:34 +08:00
adecec811e Update Dockerfile 2024-12-11 13:35:10 +08:00
c3285f8b2e Update panel_tools.py 2024-12-11 12:11:04 +08:00
864b5bb985 Update panel_tools.py 2024-12-11 12:10:42 +08:00
39bf6b811a Update python-app-php.yml 2024-12-11 12:01:43 +08:00
c7d0744fa3 Update python-app-op.yml 2024-12-11 11:43:08 +08:00
726cdd8dc7 Update python-app-op.yml 2024-12-11 00:04:55 +08:00
93f895d4e4 Update python-app-op.yml 2024-12-11 00:04:02 +08:00
00ed75502b Update python-app-php.yml 2024-12-10 23:55:14 +08:00
a4b1ca831e Update python-app-php.yml 2024-12-10 23:37:16 +08:00
18e59c9538 Update panel_tools.py 2024-12-10 23:24:07 +08:00
3fa51efd16 Update panel_tools.py 2024-12-10 23:23:57 +08:00
fcd747c4a5 Update panel_tools.py 2024-12-10 23:22:54 +08:00
4d9dd26337 Update panel_tools.py 2024-12-10 23:22:07 +08:00
7996722f04 Update setting.py 2024-12-10 22:33:27 +08:00
b0aa889a1f Update setting.py 2024-12-10 22:25:59 +08:00
4b1d6acb77 Update panel_tools.py 2024-12-10 22:17:21 +08:00
d00da44fcb update 2024-12-10 22:13:20 +08:00
1da7d08887 update 2024-12-10 21:27:30 +08:00
a04d24d410 update 2024-12-10 21:22:42 +08:00
055422bac9 update 2024-12-10 19:56:26 +08:00
4e09a802b0 update 2024-12-10 19:31:15 +08:00
a66bab02ab update 2024-12-10 19:20:19 +08:00
d217ebfc4f Update php.js 2024-12-10 19:05:09 +08:00
31cafa59ab Update index.py 2024-12-10 18:50:06 +08:00
c66b9794ee Update php.js 2024-12-10 18:40:29 +08:00
ddd3d3a33a Update version.py 2024-12-10 18:36:04 +08:00
7816dbf264 Update public.js 2024-12-10 18:35:57 +08:00
f78279a271 update 2024-12-10 18:34:21 +08:00
411174c07c Update public.js 2024-12-10 18:27:27 +08:00
28988eff93 Update public.js 2024-12-10 18:26:19 +08:00
5ee9a6790e update 2024-12-10 18:25:52 +08:00
6cce658ea3 Update public.js 2024-12-10 18:24:51 +08:00
3c54e7943b Update php.js 2024-12-10 18:21:17 +08:00
c0923f7d4f Update index.py 2024-12-10 18:15:05 +08:00
7973d369cc update 2024-12-10 18:05:43 +08:00
2b70534fb2 update 2024-12-10 18:00:09 +08:00
1d0a4c371c update 2024-12-10 17:42:51 +08:00
18eee3f8e8 Update firewall.py 2024-12-10 16:49:12 +08:00
2ae280e6c9 Update firewall.py 2024-12-10 16:48:42 +08:00
baf56d71e9 Update phplib.conf 2024-12-10 15:54:48 +08:00
fe6649a0a5 update 2024-12-10 15:51:15 +08:00
452623a56e Update README.md 2024-12-10 15:33:44 +08:00
a361c31c11 Update push_notice_msg.py 2024-12-10 15:22:51 +08:00
fb15ca1d76 Update push_ad.py 2024-12-10 15:22:23 +08:00
3d319c7c76 update 2024-12-10 15:17:22 +08:00
069bef1f0d Update igbinary.sh 2024-12-10 14:56:36 +08:00
3b0e624d92 Update README.md 2024-12-10 14:54:14 +08:00
ee13c8f519 Update solr.sh 2024-12-10 14:44:52 +08:00
51eff5f671 Update yaml.sh 2024-12-10 14:43:32 +08:00
e544ba53b5 Update yaf.sh 2024-12-10 14:40:43 +08:00
e28a7124a2 Update yaf.sh 2024-12-10 14:39:03 +08:00
dd0c46286c Update swoole.sh 2024-12-10 14:37:46 +08:00
a1b39dcff5 Update site.py 2024-12-10 14:26:02 +08:00
a3022c7f80 Update site.py 2024-12-10 14:24:40 +08:00
f16dfd6819 update 2024-12-10 14:22:59 +08:00
9f2bc6e0e1 Update phplib.conf 2024-12-10 05:30:44 +08:00
f2c4831786 update 2024-12-10 04:29:32 +08:00
3f5b6a0b00 Update panel_bookmark.py 2024-12-10 04:18:21 +08:00
1bf02abc1d Update __init__.py 2024-12-10 03:23:19 +08:00
5dcf932a81 Update __init__.py 2024-12-10 03:15:26 +08:00
f2f02e4b1b update 2024-12-10 03:14:06 +08:00
47ce5e05bc Update plugin.py 2024-12-10 03:10:48 +08:00
e878f79ffc up 2024-12-10 02:57:58 +08:00
5e6774ee63 Update version.py 2024-12-10 02:52:44 +08:00
ec4c3f3574 Update public.js 2024-12-10 02:52:35 +08:00
e7e9379c09 update 2024-12-10 02:30:07 +08:00
65c303272c update 2024-12-10 02:23:49 +08:00
2be356a875 Update readline.sh 2024-12-10 02:05:33 +08:00
d60e1291c8 Update version.py 2024-12-10 00:35:02 +08:00
ae342c71a7 Update public.js 2024-12-10 00:27:47 +08:00
ec79bfc93b Update openssl.sh 2024-12-10 00:12:26 +08:00
f3006b55b3 Update phplib.conf 2024-12-10 00:02:06 +08:00
08aa864fa0 Update install.sh 2024-12-09 23:29:57 +08:00
93b39f4fb0 Update phplib.conf 2024-12-09 23:28:34 +08:00
b189241745 update 2024-12-09 23:25:45 +08:00
3206e62583 update 2024-12-09 23:19:53 +08:00
299b216c48 Update phplib.conf 2024-12-09 23:15:39 +08:00
fe53068055 Update zip.sh 2024-12-09 23:12:27 +08:00
0a8b921327 Update phplib.conf 2024-12-09 23:10:59 +08:00
1119371bdb Update phplib.conf 2024-12-09 22:58:25 +08:00
980129a8ec Update phplib.conf 2024-12-09 22:58:19 +08:00
5554ff3350 update 2024-12-09 22:49:39 +08:00
3fd55fd5de Update sql_mysql.py 2024-12-09 20:11:02 +08:00
d4f9f5bcfd Update sql_mysql.py 2024-12-09 20:08:18 +08:00
318cba0d43 Update sql_mysql.py 2024-12-09 20:07:41 +08:00
173aae22b4 Update app.js 2024-12-09 19:59:01 +08:00
f86e30634d Update app.js 2024-12-09 19:55:27 +08:00
6f9b9bbbc1 Update sql_mysql.py 2024-12-09 19:48:30 +08:00
fa7ad33474 Update sql_mysql.py 2024-12-09 19:46:13 +08:00
834978adfd Update sql_mysql.py 2024-12-09 19:45:21 +08:00
e70fa6d257 Update app.js 2024-12-09 19:33:07 +08:00
326179479c Update app.js 2024-12-09 19:30:57 +08:00
909b8a3f88 Update sql_mysql.py 2024-12-09 19:25:55 +08:00
973cbf4f9d update 2024-12-09 19:20:06 +08:00
ca52d5bf65 Update app.js 2024-12-09 18:53:47 +08:00
5427a2b1ee Update nosql_redis.py 2024-12-09 18:49:34 +08:00
7b925e5504 Update app.js 2024-12-09 18:46:08 +08:00
6b7752e14a Update sql_mysql.py 2024-12-09 18:45:20 +08:00
f13a0c68dc Update site.py 2024-12-09 18:38:39 +08:00
017d96872a Update site.py 2024-12-09 18:37:25 +08:00
f11b8637bb update 2024-12-09 18:34:30 +08:00
5452ee3229 Update site.py 2024-12-09 18:24:12 +08:00
41a76e1ac6 Update site.py 2024-12-09 18:22:39 +08:00
2e3d5fda44 Update site.py 2024-12-09 18:21:58 +08:00
d26e2fb06f Update site.py 2024-12-09 18:08:15 +08:00
7aa0bf59f2 Update site.py 2024-12-09 18:07:31 +08:00
4cc72c7164 update 2024-12-09 18:01:25 +08:00
10dffd71f7 update 2024-12-09 17:48:13 +08:00
56c4710c55 Update site.py 2024-12-09 17:37:16 +08:00
2bebf3503f Update site.py 2024-12-09 17:32:00 +08:00
8e61c89bd3 Update site.py 2024-12-09 17:31:25 +08:00
2e4fe6e434 Update site.py 2024-12-09 17:28:34 +08:00
Mr Chen
be1e03828c Merge pull request #631 from midoks/revert-630-master
Revert "修复http3在多Worker 下需要reuseport以及不传HOST变量的问题"
2024-12-09 16:48:48 +08:00
Mr Chen
55d9700401 Revert "修复http3在多Worker 下需要reuseport以及不传HOST变量的问题" 2024-12-09 16:48:27 +08:00
e55f79b9b8 Update README.md 2024-12-09 15:57:46 +08:00
5684fc217f Update README.md 2024-12-09 15:57:26 +08:00
f0071b5e82 Update panel_task.py 2024-12-09 15:52:21 +08:00
7bb7ce2ef3 Update panel_task.py 2024-12-09 01:36:51 +08:00
47569c475f Update file.py 2024-12-09 01:07:22 +08:00
eb8886b4eb update 2024-12-09 01:04:30 +08:00
83711db1c8 update 2024-12-09 01:00:01 +08:00
6858a827f9 update 2024-12-09 00:53:02 +08:00
66c8900a30 update 2024-12-09 00:47:05 +08:00
892b1144e1 Update files.py 2024-12-09 00:39:41 +08:00
06d2b381b2 Update files.py 2024-12-09 00:38:19 +08:00
f8e3df36c8 Update file.py 2024-12-09 00:36:09 +08:00
b69c986dcd Update system.py 2024-12-09 00:18:03 +08:00
3501323a12 Update system.py 2024-12-09 00:17:51 +08:00
0671455b59 update 2024-12-09 00:10:10 +08:00
c4727b90da Update system.py 2024-12-09 00:08:37 +08:00
a14c4b566e update 2024-12-09 00:05:34 +08:00
33353dd2a3 Update plugin.py 2024-12-08 23:55:44 +08:00
3b436a15c1 Update plugin.py 2024-12-08 23:04:34 +08:00
49f45314d1 Update plugin.py 2024-12-08 23:04:23 +08:00
679aefba86 Update plugin.py 2024-12-08 23:00:42 +08:00
255d297d61 Update plugin.py 2024-12-08 23:00:03 +08:00
c1a59d63fc 缓存检查插件状态,提高速度 2024-12-08 22:43:55 +08:00
d75c729e29 re 修复 2024-12-08 22:41:10 +08:00
f50be939f5 Update version.py 2024-12-06 04:17:29 +08:00
3394a8892f update 2024-12-06 04:17:11 +08:00
02e5f595fd Update sql_mysql.py 2024-12-06 03:50:14 +08:00
1bee5e7429 Update option.py 2024-12-05 23:48:54 +08:00
a8b6ae4c21 Update option.py 2024-12-05 23:48:35 +08:00
154c482e67 Update compatibility.md 2024-12-05 14:55:50 +08:00
723d5e3959 Update __init__.py 2024-12-05 06:18:12 +08:00
73f8226854 Update init_cmd.py 2024-12-05 06:11:49 +08:00
3826bb53aa Update init_cmd.py 2024-12-05 06:11:23 +08:00
7fbe40e73f Update init_cmd.py 2024-12-05 06:11:03 +08:00
e3606a1ca4 Update __init__.py 2024-12-05 06:07:05 +08:00
bfe0e0a31a Update panel_tools.py 2024-12-05 06:04:05 +08:00
643338eab1 update 2024-12-05 06:02:42 +08:00
0777b65919 up 2024-12-05 05:45:06 +08:00
c9ef1cd141 up 2024-12-05 05:38:11 +08:00
b9a1d142d1 Update crontab.py 2024-12-05 05:36:06 +08:00
7959167554 Update version.py 2024-12-05 05:29:18 +08:00
fcf20958c9 Update crontab.html 2024-12-05 05:29:09 +08:00
92b26bd14f update 2024-12-05 05:22:16 +08:00
d6b414f022 Update version.py 2024-12-05 05:13:45 +08:00
dd3092639e Update crontab.html 2024-12-05 05:13:38 +08:00
0e633491bd Update version.py 2024-12-05 05:08:17 +08:00
2250770f66 Update crontab.js 2024-12-05 05:08:06 +08:00
1d8448d6bb update 2024-12-05 05:05:47 +08:00
6eda36aec2 Update index.py 2024-12-05 04:56:02 +08:00
09d656ef60 update 2024-12-05 04:54:06 +08:00
19aadb581f Update index.py 2024-12-05 04:46:36 +08:00
c27248af98 Update index.py 2024-12-05 04:42:36 +08:00
829a2516ba update 2024-12-05 04:27:37 +08:00
ac0dac2561 Update __init__.py 2024-12-05 04:23:06 +08:00
a308c630fc Update update.py 2024-12-05 03:58:04 +08:00
661a346060 Update config.py 2024-12-05 03:11:29 +08:00
b251de30b1 Update version.py 2024-12-05 03:05:22 +08:00
716c0a6d46 Update crontab.py 2024-12-05 03:04:37 +08:00
ac8c048b28 Update crontab.py 2024-12-05 02:57:33 +08:00
00afaec282 Update index.html 2024-12-05 02:51:38 +08:00
727c36ebc7 update 2024-12-05 02:11:47 +08:00
2f5bd3b5ed Update index.py 2024-12-05 01:57:20 +08:00
49ca076d6c Update index.py 2024-12-05 01:57:03 +08:00
f63e375b13 update 2024-12-05 01:54:12 +08:00
e480582fcf Update readline.sh 2024-12-05 01:11:43 +08:00
f45dd1bbf5 Update readline.sh 2024-12-05 01:10:51 +08:00
d37f651f23 Update readline.sh 2024-12-05 00:37:33 +08:00
4d2793d4dc Update version.py 2024-12-04 18:07:10 +08:00
fb3404e92f Update upgrade.py 2024-12-04 18:06:54 +08:00
2cdb62cbd3 update 2024-12-04 18:03:37 +08:00
a3d231f619 update 2024-12-04 17:58:16 +08:00
34551409d9 Update version.py 2024-12-04 17:44:23 +08:00
be83c2c3bb Update version.py 2024-12-04 16:58:37 +08:00
b963302a96 Update push_ad.py 2024-12-04 15:24:41 +08:00
5238d8f263 Update pathinfo.conf 2024-12-04 15:11:43 +08:00
384419fa30 Update app.js 2024-12-04 04:24:46 +08:00
d18952a72e Update index.py 2024-12-04 03:57:56 +08:00
f1478369b5 Update index.py 2024-12-04 03:28:06 +08:00
face89efc5 Update file.py 2024-12-04 03:15:12 +08:00
44f5f7f270 Update file.py 2024-12-04 03:11:35 +08:00
a30d68a3d9 Update file.py 2024-12-04 03:07:01 +08:00
0e5f3bc23b Update file.py 2024-12-04 02:33:56 +08:00
0f97e0db44 Update install.sh 2024-12-04 02:20:18 +08:00
79ed3f3a4c Update index.py 2024-12-04 01:57:14 +08:00
869a321c14 Update index.py 2024-12-04 01:57:01 +08:00
f338d8bd8e Update index.py 2024-12-04 01:54:30 +08:00
2a60cd981d Update index.py 2024-12-04 01:37:00 +08:00
3504ca24f2 Update mw_api.py 2024-12-04 01:26:36 +08:00
ebcd450f55 Update index.py 2024-12-04 01:26:33 +08:00
db8f74f848 update 2024-12-04 01:26:26 +08:00
b34cf3fc86 Update main.py 2024-12-04 00:38:34 +08:00
a1bb8b9816 update 2024-12-04 00:34:49 +08:00
3db30b1298 Update __init__.py 2024-12-04 00:14:53 +08:00
773bc41a12 Update version.py 2024-12-04 00:05:00 +08:00
c91928c55f update 2024-12-03 23:26:15 +08:00
5588976f95 Update index.py 2024-12-03 21:52:15 +08:00
87d76d7cf7 update 2024-12-03 20:48:01 +08:00
18202b859b Update system.py 2024-12-03 20:19:41 +08:00
8309b8e493 update 2024-12-03 20:16:19 +08:00
50a96b198a update 2024-12-03 20:12:55 +08:00
6ebc7a1514 update 2024-12-03 20:07:50 +08:00
Mr Chen
156f6d1791 Merge pull request #630 from jd82k/master
修复http3在多Worker 下需要reuseport以及不传HOST变量的问题
2024-12-03 18:56:32 +08:00
6a013dd7f6 Update index.py 2024-12-03 18:48:56 +08:00
05d8181202 update 2024-12-03 18:46:45 +08:00
2f8217d5d5 Update index.py 2024-12-03 18:39:51 +08:00
d9234c9b77 Update index.py 2024-12-03 18:38:44 +08:00
16b54569e0 update 2024-12-03 18:36:17 +08:00
23ed3a7e47 update 2024-12-03 18:33:47 +08:00
d2f586dadd Update index.py 2024-12-03 18:25:04 +08:00
c72dcf02d2 Update xui.js 2024-12-03 18:23:22 +08:00
a099a83f9b Update xui.js 2024-12-03 18:18:56 +08:00
a986082f62 Update index.html 2024-12-03 18:18:41 +08:00
5c9cde381c Update xui.js 2024-12-03 18:18:31 +08:00
c23ae77215 Update index.html 2024-12-03 18:05:28 +08:00
33a83a6d8e Update index.html 2024-12-03 18:03:40 +08:00
07d6ce0a34 Update index.html 2024-12-03 18:03:09 +08:00
940006a10a update 2024-12-03 18:02:44 +08:00
c77b8d47fd Update xui.js 2024-12-03 18:02:15 +08:00
58f24f0c75 Update xui.js 2024-12-03 18:01:33 +08:00
41b11669d8 Update index.html 2024-12-03 17:59:11 +08:00
bb04f1666f update 2024-12-03 17:55:14 +08:00
49c22a2d70 Update xui.js 2024-12-03 17:53:18 +08:00
5616b90474 Update index.py 2024-12-03 17:51:26 +08:00
230d3925df Update index.py 2024-12-03 17:49:23 +08:00
5e92740b62 Update index.py 2024-12-03 17:47:22 +08:00
f353fc3e5a Update index.py 2024-12-03 17:42:55 +08:00
8f5936135d Update index.py 2024-12-03 17:42:37 +08:00
2954b92963 Update xui.js 2024-12-03 17:41:27 +08:00
57141b3a90 Update index.py 2024-12-03 17:39:32 +08:00
3b0db0359c update 2024-12-03 17:38:12 +08:00
ad66ecc628 update 2024-12-03 17:30:41 +08:00
766dc32287 update 2024-12-03 17:29:50 +08:00
761ddd72e9 Update index.py 2024-12-03 17:28:12 +08:00
16e312bbe7 update 2024-12-03 17:25:53 +08:00
d36b36e1d3 Update index.py 2024-12-03 17:14:31 +08:00
9eabb10e41 Update index.py 2024-12-03 17:12:37 +08:00
7be3cdd5e8 update 2024-12-03 17:10:56 +08:00
2f5842622c Update install.sh 2024-12-03 17:09:55 +08:00
3f52744747 Update install.sh 2024-12-03 17:05:20 +08:00
91a2558bf4 Update install.sh 2024-12-03 17:04:43 +08:00
aa397eb8e7 Update install.sh 2024-12-03 17:02:46 +08:00
7663bdbc14 Create install_xui.sh 2024-12-03 17:01:12 +08:00
51a9b551fd Update install.sh 2024-12-03 17:01:09 +08:00
725572745b Update install.sh 2024-12-03 16:58:25 +08:00
77e65252fb Update file.py 2024-12-03 16:50:32 +08:00
1fc0a106b6 update 2024-12-03 16:49:04 +08:00
e8d72985e6 Update install.sh 2024-12-03 16:26:24 +08:00
2ecc29269f update 2024-12-03 16:14:47 +08:00
299eaa06b8 Update file.py 2024-12-03 15:35:41 +08:00
154c7cbdbc Update file.py 2024-12-03 15:35:17 +08:00
06bb5b5bb0 Update file.py 2024-12-03 15:34:27 +08:00
a718db5457 Update file.py 2024-12-03 15:34:14 +08:00
2e17870d03 update 2024-12-03 15:32:31 +08:00
e70113c280 Update file.py 2024-12-03 15:29:05 +08:00
4240f49de9 Update file.py 2024-12-03 15:28:33 +08:00
9b0b8015df update 2024-12-03 15:19:58 +08:00
jd82k
998938e7ab fix http3 bugs 2024-12-02 20:06:59 -08:00
jd82k
faffdaf535 Update pathinfo.conf 2024-12-02 20:04:17 -08:00
fce4cc332c Update install.sh 2024-12-03 01:10:02 +08:00
d211aa168c Update info.json 2024-12-03 00:27:34 +08:00
2430cbb11a Update public.js 2024-12-02 23:46:02 +08:00
ddef7b1182 Update public.js 2024-12-02 23:45:31 +08:00
f5af7688a7 Update public.js 2024-12-02 23:43:36 +08:00
1faef6799b update 2024-12-02 23:43:05 +08:00
34e6bb75e0 Update index.py 2024-12-02 22:26:28 +08:00
332aa43419 Update index.py 2024-12-02 22:24:49 +08:00
f96ff13843 Update version.py 2024-12-02 22:16:05 +08:00
f25066e23e Update public.js 2024-12-02 22:10:07 +08:00
35ce2abae6 Update __init__.py 2024-12-02 22:09:34 +08:00
897e236719 Update __init__.py 2024-12-02 22:08:53 +08:00
916b3dff6c Update public.js 2024-12-02 22:03:25 +08:00
846600ef99 Update index.py 2024-12-02 21:48:40 +08:00
8cbae18986 Update README.md 2024-12-02 21:46:30 +08:00
c81616894c Update README.md 2024-12-02 21:13:50 +08:00
408c9c291b Update init_cmd.py 2024-12-02 18:03:11 +08:00
824032b338 Update init_cmd.py 2024-12-02 17:57:19 +08:00
99c2c7ce4c Update init_cmd.py 2024-12-02 17:56:26 +08:00
93d4749d9e Update init_cmd.py 2024-12-02 17:54:29 +08:00
163776c5ff Update init_cmd.py 2024-12-02 17:54:09 +08:00
fd907e1dc9 Update mw.tpl 2024-12-02 17:39:19 +08:00
6c306ad97f Update mw.tpl 2024-12-02 17:39:07 +08:00
0357087b06 Update mw.tpl 2024-12-02 17:27:08 +08:00
85a9ee4b29 Update mw.tpl 2024-12-02 17:22:16 +08:00
5bab1ab4da Update mw.tpl 2024-12-02 17:18:29 +08:00
0312c5ceb0 update 2024-12-02 17:12:29 +08:00
eca12b2cf3 update 2024-12-02 16:49:06 +08:00
3476b4c30a Update init_cmd.py 2024-12-02 16:33:47 +08:00
46d7f83cc4 Update mw.service.tpl 2024-12-02 16:28:42 +08:00
e1ef876db1 Update init_cmd.py 2024-12-02 16:25:55 +08:00
8f1a89f978 Update init_cmd.py 2024-12-02 16:24:29 +08:00
a14301f769 Update tamper_proof_service.py 2024-12-02 14:53:23 +08:00
54bd8f1d5c Update sql_mysql.py 2024-12-02 04:41:35 +08:00
9d05edf09f Update orm.py 2024-12-02 04:33:02 +08:00
a0c228e352 Update sql_mysql.py 2024-12-02 04:13:19 +08:00
dfaf09735e Update sql_mysql.py 2024-12-02 04:08:03 +08:00
6f2cc03044 Update ubuntu.sh 2024-12-02 03:54:47 +08:00
2ff6d17d23 Update debian.sh 2024-12-02 03:54:32 +08:00
af83750220 update 2024-12-02 03:45:16 +08:00
70dbb9eab5 Update sql_mysql.py 2024-12-02 03:18:06 +08:00
a58fd4476e Update app.js 2024-12-02 03:13:43 +08:00
5f7f45c648 Update version.py 2024-12-02 03:09:33 +08:00
ca5b315725 update 2024-12-02 03:08:41 +08:00
6a33354b2b Update index.py 2024-12-02 03:00:22 +08:00
821683d484 Update init_cmd.py 2024-12-02 02:54:17 +08:00
a2e4fc8085 Update info.json 2024-12-02 02:41:49 +08:00
bb37fccee3 Update index.py 2024-12-02 02:40:52 +08:00
e9a01b5056 update 2024-12-02 02:33:32 +08:00
c1dec87784 Update install.sh 2024-12-02 02:31:48 +08:00
74b3118bc3 Update install.sh 2024-12-02 02:31:43 +08:00
853d5045f0 Update install.sh 2024-12-02 02:28:30 +08:00
30db5569ad Update gdriveclient.py 2024-12-02 02:25:52 +08:00
8c841e93a0 update 2024-12-02 02:00:13 +08:00
46a752480c update 2024-12-02 01:54:28 +08:00
1dddc3c5ba Update site.py 2024-12-02 01:47:26 +08:00
61d90ef8e7 Update site.py 2024-12-02 01:44:19 +08:00
c3241a5c17 Update version.py 2024-12-02 01:32:07 +08:00
c6d1a44d43 Update control.js 2024-12-02 01:31:59 +08:00
8ce5d6dfbe Update version.py 2024-12-02 01:30:41 +08:00
a8c8f922eb Update version.py 2024-12-02 01:28:54 +08:00
e7d458b2a9 Update control.js 2024-12-02 01:28:34 +08:00
9cba031049 Update version.py 2024-12-02 01:26:45 +08:00
73e5cc4fbd update 2024-12-02 01:25:06 +08:00
3df5ae86d4 Update version.py 2024-12-02 01:21:06 +08:00
542610f5a7 update 2024-12-02 01:20:37 +08:00
1b1d3aec8c update 2024-12-02 01:16:05 +08:00
829f4def27 update 2024-12-02 01:12:04 +08:00
cc9e628346 update 2024-12-02 01:04:40 +08:00
921af80598 Update version.py 2024-12-02 01:00:42 +08:00
dae5d2d062 update 2024-12-02 01:00:28 +08:00
6ee0496c4c Update requirements.txt 2024-12-02 00:36:48 +08:00
bbcac5f899 Update requirements.txt 2024-12-02 00:35:36 +08:00
7fb006b2ff Update index.py 2024-12-02 00:27:31 +08:00
6bfa72feb6 update 2024-12-01 23:54:04 +08:00
8867799825 Update mt.toml 2024-12-01 23:46:54 +08:00
12c90f5e6e update 2024-12-01 23:42:01 +08:00
8ed608e9cd update 2024-12-01 23:16:27 +08:00
1c0dbe76f9 update 2024-12-01 22:30:36 +08:00
14ad247168 Update index.py 2024-12-01 22:24:41 +08:00
b114c768dc Update index.py 2024-12-01 22:21:36 +08:00
58129d5209 update 2024-12-01 22:19:49 +08:00
54f5b44e04 Update index.py 2024-12-01 22:16:30 +08:00
85f64b72cb Update install.sh 2024-12-01 22:11:25 +08:00
626c64afb2 Update index.py 2024-12-01 22:01:56 +08:00
e639fc5746 Update index.py 2024-12-01 22:01:45 +08:00
d988dce5d8 Update install.sh 2024-12-01 22:00:04 +08:00
34f03d2ccb update 2024-12-01 21:57:23 +08:00
4e66ed3a32 mtproxy 2024-12-01 21:51:31 +08:00
fde9da1af5 Update dashboard.py 2024-12-01 21:45:16 +08:00
bad42e8e48 Update dashboard.py 2024-12-01 21:40:02 +08:00
c562f9481d Update dashboard.py 2024-12-01 21:39:49 +08:00
caa9b598d0 update 2024-12-01 21:26:58 +08:00
ffa16648ae Update mw.tpl 2024-12-01 20:59:59 +08:00
a7a06ea7bf Update mw.tpl 2024-12-01 20:59:45 +08:00
99de06abc0 Update mw.tpl 2024-12-01 20:59:32 +08:00
b538e646bd Update mw.tpl 2024-12-01 20:48:37 +08:00
6088386e51 update 2024-12-01 20:47:39 +08:00
404a38d990 update 2024-12-01 20:42:21 +08:00
91e3900d12 Update panel_tools.py 2024-12-01 20:38:13 +08:00
2b0dfcd460 Update panel_tools.py 2024-12-01 20:33:49 +08:00
f561a1da4f Update mw.tpl 2024-12-01 20:29:41 +08:00
34b435ffca update 2024-12-01 20:24:57 +08:00
5b92f109b9 Update version.py 2024-12-01 20:22:46 +08:00
fe68bf7226 update 2024-12-01 20:22:19 +08:00
1e4989857e Update version.py 2024-12-01 17:42:52 +08:00
56055000d9 Update public.js 2024-12-01 17:22:31 +08:00
9365139430 Update public.js 2024-12-01 17:12:39 +08:00
b22f240719 Update public.js 2024-12-01 16:57:29 +08:00
5b0e8ad2da update 2024-12-01 16:32:05 +08:00
cb794a946a Update sg11.sh 2024-12-01 15:48:17 +08:00
446e39fb68 Update sg11.sh 2024-12-01 15:42:57 +08:00
9276dd1bb8 Update sg11.sh 2024-12-01 15:23:03 +08:00
1972df1f2d update 2024-12-01 15:20:29 +08:00
afb9f430b3 update 2024-12-01 15:04:12 +08:00
52e9ff38fa Update phplib.conf 2024-12-01 14:54:25 +08:00
37f4244484 update 2024-12-01 13:53:32 +08:00
485b0605b4 Update python-app-op.yml 2024-12-01 13:52:36 +08:00
30e2ea56c8 Update init_cmd.py 2024-12-01 13:34:58 +08:00
371b6651f0 Update init_cmd.py 2024-12-01 04:21:09 +08:00
37448dc827 update 2024-12-01 04:19:00 +08:00
6e197f81ef Update app.js 2024-12-01 04:18:14 +08:00
bdd0634f61 update 2024-12-01 04:17:28 +08:00
a8019d1ec4 Update sql_mysql.py 2024-12-01 03:38:09 +08:00
d33ce43ad3 Update sql_mysql.py 2024-12-01 03:26:57 +08:00
cc165c4cde update 2024-12-01 03:23:13 +08:00
1f6e6957ea Update init_cmd.py 2024-12-01 02:15:32 +08:00
7b8bb6380d Update mw.py 2024-12-01 01:49:02 +08:00
b432b1c165 update 2024-12-01 01:40:56 +08:00
ce6f7153b3 Update firewall.py 2024-12-01 01:31:08 +08:00
1cc4aee6f7 Update index.py 2024-12-01 01:23:14 +08:00
eafaf13a3d Update init_cmd.py 2024-12-01 01:14:12 +08:00
7352f30d91 Update ubuntu.sh 2024-12-01 00:38:35 +08:00
31db220719 Update python-app-op.yml 2024-11-30 23:35:48 +08:00
000a4cccf1 Update python-app-op.yml 2024-11-30 23:35:34 +08:00
1cc6953415 Update install.sh 2024-11-30 23:10:58 +08:00
519951ad69 Update setting.py 2024-11-30 23:02:08 +08:00
b97b8c2c9b Update setting.py 2024-11-30 23:01:21 +08:00
27b3bc1150 Update firewall.py 2024-11-30 23:00:46 +08:00
c66ad2b7fb Update firewall.py 2024-11-30 22:58:24 +08:00
f040b590d5 Update firewall.py 2024-11-30 22:53:40 +08:00
a36d2f2665 Update firewall.py 2024-11-30 22:43:17 +08:00
b0c3e5b7e5 update 2024-11-30 22:41:39 +08:00
3d3cde4353 Update update_new.sh 2024-11-30 21:58:06 +08:00
da9c57cf84 update 2024-11-30 21:57:46 +08:00
9915ed35d0 update 2024-11-30 21:44:09 +08:00
97829cd944 Update install.sh 2024-11-30 21:16:59 +08:00
c355a120b4 Update install.sh 2024-11-30 21:16:21 +08:00
1d9bc68e28 update 2024-11-30 18:07:22 +08:00
778e1860df Update python-app-op.yml 2024-11-30 18:01:09 +08:00
76b9298efd update 2024-11-30 17:11:00 +08:00
371cc9c4c8 Update debian.sh 2024-11-30 16:57:58 +08:00
ab7c4792e2 Update sql_mysql.py 2024-11-30 16:51:26 +08:00
7e2c192d40 update 2024-11-30 16:42:42 +08:00
6874de5cda Update app.js 2024-11-30 04:26:28 +08:00
bd2ab7d529 update 2024-11-30 04:21:43 +08:00
152fadfc87 Update app.js 2024-11-30 04:07:29 +08:00
d3b3b526db update 2024-11-30 03:52:58 +08:00
00002a8540 update 2024-11-30 03:32:33 +08:00
a5bc06acf6 Update app.js 2024-11-29 22:08:54 +08:00
2dcb8b257e 添加插件 2024-11-29 21:14:18 +08:00
fd1f64a6e2 Update .gitignore 2024-11-29 21:14:08 +08:00
fbf1a36e00 Update brotli.sh 2024-11-29 19:49:55 +08:00
52d66b33cb update 2024-11-29 19:43:36 +08:00
eb0fe483b1 Update index.py 2024-11-29 19:24:31 +08:00
acc57ee993 Update mw.py 2024-11-29 19:19:21 +08:00
0397090458 Update macos.sh 2024-11-29 19:08:11 +08:00
5f6df46c90 Update mw.py 2024-11-29 18:52:38 +08:00
3030849bd2 Update ftp_client.py 2024-11-29 18:46:15 +08:00
7a1bc2ee39 Update ftp_client.py 2024-11-29 18:45:45 +08:00
efc715678b Update install.sh 2024-11-29 18:43:25 +08:00
65ec08d40f Update install.sh 2024-11-29 18:42:55 +08:00
7855df5aa2 up 2024-11-29 18:41:43 +08:00
abbe16eb87 up 2024-11-29 18:41:02 +08:00
45645a52b5 up 2024-11-29 18:40:11 +08:00
48d193141e Update install.sh 2024-11-29 18:31:04 +08:00
264dd392f6 Update install.sh 2024-11-29 18:28:18 +08:00
3e9b47cbf3 Update index.py 2024-11-29 18:23:25 +08:00
b350747eab update 2024-11-29 18:21:12 +08:00
d078b285a2 Update index.py 2024-11-29 18:14:02 +08:00
7b5d9bb3c1 Update index.py 2024-11-29 18:09:33 +08:00
346f07657d Update index.py 2024-11-29 17:55:37 +08:00
f4859ef7f6 Update index.py 2024-11-29 17:53:25 +08:00
40bc9798a9 Update index.py 2024-11-29 17:44:05 +08:00
98899cd76e Update index.py 2024-11-29 17:41:31 +08:00
6da57d6ccc Update index.py 2024-11-29 17:38:03 +08:00
0cef478d71 Update index.py 2024-11-29 17:36:34 +08:00
30e0db5adb Update debian.sh 2024-11-29 17:25:08 +08:00
bb6a64c0dc Update ubuntu.sh 2024-11-29 17:23:02 +08:00
d940a12ed5 Update ubuntu.sh 2024-11-29 17:22:28 +08:00
fe9cd42210 Update debian.sh 2024-11-29 17:21:15 +08:00
ad503863ad update 2024-11-29 17:16:23 +08:00
a660014740 update 2024-11-29 17:15:07 +08:00
637a4dacb9 update 2024-11-29 17:11:28 +08:00
79c8081c30 Update index.py 2024-11-29 17:04:15 +08:00
0903589e5b Update info.json 2024-11-29 17:04:09 +08:00
777bfa1145 Update index.py 2024-11-29 16:06:02 +08:00
4826dbd8a9 Update index.py 2024-11-29 16:05:27 +08:00
70507e9f65 Update index.py 2024-11-29 16:05:06 +08:00
b8d6d9ed60 update 2024-11-29 15:54:29 +08:00
d62531c700 Update info.json 2024-11-29 15:31:37 +08:00
96d5a817d5 Update install.sh 2024-11-29 15:31:26 +08:00
6436a933c9 Update panel_task.py 2024-11-29 05:19:53 +08:00
db79be96ed Update mcrypt.sh 2024-11-29 05:16:39 +08:00
d2d79092ca up 2024-11-29 05:12:09 +08:00
8f4fca5a6c update 2024-11-29 05:10:44 +08:00
dbe9fd4222 update 2024-11-29 04:49:47 +08:00
d0bc04e53b Update index.py 2024-11-29 04:05:33 +08:00
49858199a5 Update install.sh 2024-11-29 03:55:03 +08:00
7750fb7b38 Update readline.sh 2024-11-29 03:54:18 +08:00
d1d276d026 Update .gitignore 2024-11-29 03:35:01 +08:00
70aca29ce1 Update .gitignore 2024-11-29 03:34:38 +08:00
dc17d67dc9 Update plugin.py 2024-11-29 03:32:10 +08:00
407dc56f40 Update install.sh 2024-11-29 03:13:41 +08:00
bdfc044783 Update tasks.py 2024-11-29 03:13:34 +08:00
325a113ac6 Update mw.py 2024-11-29 03:13:30 +08:00
7e55e1e29a Update plugin.py 2024-11-29 03:13:04 +08:00
d604c966b2 update 2024-11-29 02:47:43 +08:00
573e3192fc Update swoole.sh 2024-11-29 02:36:40 +08:00
8ec3b66f20 Update install.sh 2024-11-29 02:24:37 +08:00
5b9a414688 Update openssl.sh 2024-11-29 02:24:29 +08:00
9553add27a Update readline.sh 2024-11-29 02:07:07 +08:00
fb3cd54ce0 Update install.sh 2024-11-29 01:54:48 +08:00
1ce5cac3ba Update openssl.sh 2024-11-29 01:23:55 +08:00
fa1819feb8 Update readline.sh 2024-11-29 01:21:32 +08:00
bd873b48d0 Update readline.sh 2024-11-29 01:16:13 +08:00
37e3850b43 update 2024-11-29 01:13:22 +08:00
3182bac95e Update install.sh 2024-11-29 01:08:08 +08:00
71dc92f59d Update phplib.conf 2024-11-29 01:08:01 +08:00
dc5a81ea89 Create curl.sh 2024-11-29 01:07:57 +08:00
e04214c14d Update install.sh 2024-11-29 00:23:17 +08:00
1846af7271 update 2024-11-29 00:23:07 +08:00
58cb061ef2 Update index.py 2024-11-28 23:28:58 +08:00
c71a59cce1 Update init.py 2024-11-28 20:48:57 +08:00
c3d6ec90e8 Update panel_tools.py 2024-11-28 20:43:33 +08:00
9569b64d26 Update __init__.py 2024-11-28 20:43:17 +08:00
6f7c26adc4 Update init.py 2024-11-28 20:42:53 +08:00
82e4e5c1d3 Update mw.tpl 2024-11-28 20:39:52 +08:00
d6972bae75 Update init.py 2024-11-28 20:29:48 +08:00
2beae29d25 Update init.py 2024-11-28 20:29:30 +08:00
e2d800a167 Update init.py 2024-11-28 20:29:11 +08:00
630e518ae3 Update mw.tpl 2024-11-28 20:22:01 +08:00
2c8108a0be Update mw.tpl 2024-11-28 20:21:40 +08:00
11ba771db3 Update __init__.py 2024-11-28 20:17:23 +08:00
e20341d3da Update setting.py 2024-11-28 20:16:58 +08:00
179b00e8a1 Update __init__.py 2024-11-28 20:16:02 +08:00
ab287d42ef Update __init__.py 2024-11-28 20:12:41 +08:00
8b439801ab Update .gitignore 2024-11-28 20:05:09 +08:00
8e39af00a3 update 2024-11-28 20:04:35 +08:00
493553ec4b update 2024-11-28 19:48:36 +08:00
0d1d4b66d6 Update panel_task.py 2024-11-28 19:47:24 +08:00
7ba7272a7c Update panel_tools.py 2024-11-28 19:43:44 +08:00
12d5ce5eea update 2024-11-28 19:31:45 +08:00
a059e09244 Update setting.py 2024-11-28 19:28:17 +08:00
2ac28e9d80 Update plugin.py 2024-11-28 19:12:10 +08:00
de3f2ab4d2 Update mw.py 2024-11-28 19:08:22 +08:00
ee206f014d Update mw.py 2024-11-28 19:07:59 +08:00
852fc6e5a7 Update mw.py 2024-11-28 19:04:25 +08:00
17b40e5d1d Update setting.py 2024-11-28 18:58:55 +08:00
769f36c560 Update app.py 2024-11-28 18:47:24 +08:00
7d1c2bac14 Update setting.py 2024-11-28 18:44:17 +08:00
58101f889d Update app.py 2024-11-28 18:43:49 +08:00
009be7e920 Update config.py 2024-11-28 18:20:11 +08:00
74817313f6 Update setting.py 2024-11-28 18:13:31 +08:00
1dc55d5e1a Update setting.py 2024-11-28 18:05:23 +08:00
2a943efcd7 Update setting.py 2024-11-28 18:03:31 +08:00
dfef78fc84 Update mw.py 2024-11-28 18:00:26 +08:00
51d092ca19 Update setting.py 2024-11-28 18:00:04 +08:00
c210429086 update 2024-11-28 16:26:14 +08:00
9cbec5a68f Update setting.py 2024-11-28 01:52:10 +08:00
b02a6a2d19 update 2024-11-28 01:49:17 +08:00
e5ef7d3e4d Update app.py 2024-11-28 01:40:52 +08:00
1d1dbfc54c Update mw.tpl 2024-11-28 01:36:00 +08:00
49867fadf0 Update setting.py 2024-11-28 01:31:27 +08:00
0df069b9a4 update 2024-11-28 01:28:45 +08:00
ef59c3a654 Update app.py 2024-11-28 01:24:24 +08:00
af3ceeefe7 Update version.py 2024-11-28 01:21:14 +08:00
655c2c2268 Update app.py 2024-11-28 01:19:44 +08:00
83f48cb05e update 2024-11-28 01:18:57 +08:00
25527d09f5 Update firewall.py 2024-11-28 01:07:00 +08:00
32718d5450 Update mw.tpl 2024-11-28 00:55:49 +08:00
7ce3160ade Update __init__.py 2024-11-28 00:52:16 +08:00
f4f4e32612 update 2024-11-28 00:45:50 +08:00
1bb99bb90e Update app.py 2024-11-28 00:33:31 +08:00
0ccf70be56 update 2024-11-28 00:33:08 +08:00
d6b68f45e5 Update __init__.py 2024-11-28 00:24:35 +08:00
41978d33bd Update app.py 2024-11-28 00:20:33 +08:00
85c62dd51a update 2024-11-27 23:59:56 +08:00
ccb9d678f6 Update __init__.py 2024-11-27 20:28:23 +08:00
d950501ec6 Create backup.py 2024-11-27 20:28:19 +08:00
4edae5114e Update site.py 2024-11-27 20:28:15 +08:00
eb925d004e Create backup.py 2024-11-27 20:28:10 +08:00
58fafd6233 Update all_test.sh 2024-11-27 18:09:17 +08:00
c4c3c1659c update 2024-11-27 15:59:25 +08:00
5a800ac1b2 Update gd_old.sh 2024-11-27 15:52:17 +08:00
0e6ea7cb7e Update setting.py 2024-11-27 06:05:54 +08:00
4078f4c67b Update setting.py 2024-11-27 05:50:15 +08:00
a44873b142 update 2024-11-27 05:48:44 +08:00
293c902a80 Update init.py 2024-11-27 05:23:05 +08:00
d25993e78b update 2024-11-27 04:48:39 +08:00
c3ef396728 Update panel_tools.py 2024-11-27 04:40:29 +08:00
17d46958f8 Update panel_tools.py 2024-11-27 04:35:55 +08:00
aef3c5d694 Update init.py 2024-11-27 04:15:28 +08:00
50eb0137a4 Update __init__.py 2024-11-27 04:13:19 +08:00
e8d1e6e1eb Update system.sql 2024-11-27 03:45:31 +08:00
e4c7a04701 Update init.py 2024-11-27 03:31:14 +08:00
e145e2c57f Update default.sql 2024-11-27 03:27:04 +08:00
2d892575f3 Update default.sql 2024-11-27 03:17:24 +08:00
0c4460282a Update default.sql 2024-11-27 03:01:15 +08:00
da0e599bad Update mw.py 2024-11-27 02:56:43 +08:00
7d2ca4ea74 Update user.py 2024-11-27 02:53:02 +08:00
7a1b30994b update 2024-11-27 02:47:23 +08:00
3994d8f0ce update 2024-11-27 02:21:45 +08:00
aa5ffdc3c0 Update mw.tpl 2024-11-27 02:17:01 +08:00
db1dfb9aed Update crontab.py 2024-11-27 02:15:08 +08:00
06db6b02d8 Update plugin.py 2024-11-27 02:13:28 +08:00
bf0269a7da Update plugin.py 2024-11-27 02:11:58 +08:00
486361f3b7 Update config.py 2024-11-27 02:08:55 +08:00
ab088d9355 Update config.py 2024-11-27 02:07:30 +08:00
c9c52cf7f5 update 2024-11-27 02:07:08 +08:00
e4ad01dd42 update 2024-11-27 01:55:03 +08:00
86ac000117 Update firewall.py 2024-11-27 01:51:15 +08:00
ae016172ea Update firewall.py 2024-11-27 01:50:47 +08:00
2c5ab01237 Update firewall.py 2024-11-27 01:50:32 +08:00
9b0a41c3d5 update 2024-11-27 01:49:20 +08:00
be55e79dcf Update sites.py 2024-11-27 01:47:53 +08:00
9265bd57e4 update 2024-11-27 01:46:54 +08:00
26bc566aed update 2024-11-27 01:41:17 +08:00
1b007460de update 2024-11-27 01:35:37 +08:00
b007010912 Update mw.py 2024-11-27 01:34:38 +08:00
053cd9bc01 Update mw.py 2024-11-27 01:33:15 +08:00
37c8da89ae Update mw.py 2024-11-27 01:32:57 +08:00
4f1001e487 Update file.py 2024-11-27 01:30:38 +08:00
f9f074ef01 update 2024-11-27 01:27:32 +08:00
8df9799564 Update mw.py 2024-11-27 01:23:59 +08:00
80e49a6ff8 Update setting.py 2024-11-27 01:19:40 +08:00
2a3bad681b Update install_new.sh 2024-11-27 00:56:23 +08:00
f7c9d61e8d Update plugin.py 2024-11-27 00:22:33 +08:00
296f54127d Update panel_task.py 2024-11-27 00:22:01 +08:00
b8161b86d2 update 2024-11-27 00:17:57 +08:00
3305e51fda Update install.sh 2024-11-27 00:13:34 +08:00
4adaa8565c Update setting.py 2024-11-27 00:01:00 +08:00
5564b27ff2 Update mw.py 2024-11-26 23:50:47 +08:00
0f1b98721b up 2024-11-26 23:50:17 +08:00
3894eebfb5 update 2024-11-26 15:47:22 +08:00
e3070b618f Update plugin.py 2024-11-26 05:14:26 +08:00
5f144924e4 update 2024-11-26 05:02:47 +08:00
570f775c66 Update site.py 2024-11-26 04:58:11 +08:00
cbdf826951 Update site.py 2024-11-26 04:56:25 +08:00
9933035cae update 2024-11-26 04:53:43 +08:00
4e3e7b7301 update 2024-11-26 04:53:03 +08:00
4ed5c48650 update 2024-11-26 04:45:38 +08:00
f46c28b39d update 2024-11-26 04:43:57 +08:00
b124aabb7b update 2024-11-26 04:38:55 +08:00
6e48e0c339 Update mongodb.sh 2024-11-26 03:55:43 +08:00
79160854b9 Update index.py 2024-11-26 03:53:33 +08:00
f5089eeb16 update 2024-11-26 03:53:21 +08:00
453639bf92 Update index.py 2024-11-26 03:50:08 +08:00
5ca5265b92 Update index.py 2024-11-26 03:49:36 +08:00
88b86b2b2b Update install.sh 2024-11-26 03:46:00 +08:00
7da0fa4379 Update index.py 2024-11-26 03:41:53 +08:00
add4d4bb5e Update panel_task.py 2024-11-26 02:01:07 +08:00
39a1c1e6e0 update 2024-11-26 01:56:33 +08:00
0b37a34528 up 2024-11-26 00:37:55 +08:00
ffcceb16cf update 2024-11-25 22:38:16 +08:00
4b7296f99e Update panel_task.py 2024-11-25 22:16:19 +08:00
5796e311a9 update 2024-11-25 22:13:45 +08:00
8af22d14c8 update 2024-11-25 16:52:18 +08:00
bd5753eb27 Update panel_task.py 2024-11-25 16:26:18 +08:00
6a6166c8ac update 2024-11-25 03:20:54 +08:00
82a5af071a update 2024-11-25 03:17:52 +08:00
4e6f867ba4 update 2024-11-25 03:16:46 +08:00
8e0a4ec34b Update install.sh 2024-11-25 03:15:08 +08:00
d5678d3f34 Update firewall.py 2024-11-25 03:08:33 +08:00
cfd7030d00 Update firewall.py 2024-11-25 03:08:18 +08:00
360d94d573 Update firewall.py 2024-11-25 03:07:09 +08:00
b3370f2937 Update firewall.py 2024-11-25 03:04:04 +08:00
ce3e37b6f8 Update site.py 2024-11-25 02:54:41 +08:00
43384f8ca4 Update site.py 2024-11-25 02:53:55 +08:00
9ab361604f Update site.py 2024-11-25 02:53:00 +08:00
000b825ef0 Delete app.py 2024-11-25 02:40:26 +08:00
d00101f6eb update 2024-11-25 02:40:09 +08:00
2d8528ca8d Update index.py 2024-11-25 02:32:11 +08:00
c6d900c4e0 Update index.py 2024-11-25 02:31:12 +08:00
15314974f6 Update index.py 2024-11-25 02:27:21 +08:00
60a1bfe679 Update index.py 2024-11-25 02:22:13 +08:00
a3af4ac405 Update index.py 2024-11-25 02:22:03 +08:00
df7a43919f Update index.py 2024-11-25 02:21:07 +08:00
ae4f3851e5 Update index.py 2024-11-25 02:20:47 +08:00
e0384dd6cb Update msodclient.py 2024-11-25 02:10:44 +08:00
d8a34e7a0b Update site.js 2024-11-25 02:04:47 +08:00
e013eb8137 update 2024-11-25 01:59:22 +08:00
72917bdc5b Update site.py 2024-11-25 01:39:17 +08:00
cf74b0a941 Update mw.py 2024-11-25 01:37:38 +08:00
e027700d50 update 2024-11-25 01:33:59 +08:00
d7fe140ff2 update 2024-11-25 01:13:47 +08:00
00c0c592fc Update index.py 2024-11-25 01:04:38 +08:00
6603a49d7b Update index.py 2024-11-25 01:01:55 +08:00
3340112c11 update 2024-11-25 01:01:20 +08:00
741e1aedf6 Update mw.py 2024-11-25 00:56:59 +08:00
a156c14248 Update index.py 2024-11-25 00:52:48 +08:00
d56de6d827 Update site.py 2024-11-25 00:41:58 +08:00
6433d6fc50 Update site.py 2024-11-25 00:40:41 +08:00
58950d581c Update site.py 2024-11-25 00:40:18 +08:00
6cd613a172 Update site.py 2024-11-25 00:38:50 +08:00
1fa57de2c0 Update site.py 2024-11-25 00:35:54 +08:00
5ebdbc74ad Update version.py 2024-11-25 00:30:10 +08:00
9c130746fb update 2024-11-25 00:29:25 +08:00
7d83f29db7 Update mw.tpl 2024-11-24 22:07:47 +08:00
729ea2df8f Update cli.sh 2024-11-24 22:04:31 +08:00
c560d3fced Update mw.tpl 2024-11-24 22:04:07 +08:00
590a246fc0 Update mw.tpl 2024-11-24 22:03:51 +08:00
5ea712b943 Update cli.sh 2024-11-24 21:56:23 +08:00
6329ce3fd6 Update cli.sh 2024-11-24 21:54:28 +08:00
cd069b24c6 Update cli.sh 2024-11-24 21:54:00 +08:00
3da3453503 Update cli.sh 2024-11-24 21:53:38 +08:00
1ab7c21910 update 2024-11-24 21:50:08 +08:00
d074224447 Update site.py 2024-11-24 21:43:03 +08:00
3f0f219896 Update site.py 2024-11-24 21:31:44 +08:00
06bdad4ab0 Update site.py 2024-11-24 21:31:04 +08:00
f2dac6e1e6 Update site.py 2024-11-24 21:28:30 +08:00
116140f5df Update site.py 2024-11-24 21:20:57 +08:00
df46b40c0f Update site.py 2024-11-24 17:53:34 +08:00
196ab188bb Update site.py 2024-11-24 17:53:07 +08:00
dc9d114ca4 Update site.py 2024-11-24 17:46:23 +08:00
d1f8cf9a8e update 2024-11-24 17:42:40 +08:00
7836622cd6 Update site.py 2024-11-24 17:32:09 +08:00
c5500c57f1 Update site.py 2024-11-24 17:30:45 +08:00
7956b6c8f4 update 2024-11-24 17:18:57 +08:00
80dd014be5 update 2024-11-24 16:48:42 +08:00
06f8a3c01a Update site.py 2024-11-24 16:38:08 +08:00
e76a0b1288 Update index.py 2024-11-24 06:25:28 +08:00
e9efc4cc35 Update index.py 2024-11-24 06:18:15 +08:00
8d6e0f049c Update install.sh 2024-11-24 06:16:14 +08:00
b83e632328 Update tool_task.py 2024-11-24 06:12:24 +08:00
315a3759c3 Update tool_cron.py 2024-11-24 06:10:07 +08:00
df0efaa7b1 update 2024-11-24 06:05:18 +08:00
c731077fba Update tool_task.py 2024-11-24 06:04:37 +08:00
c9f03c0f69 修改引入公共方法方式 2024-11-24 06:02:41 +08:00
941285d168 update 2024-11-24 05:48:35 +08:00
141c56fbc2 update 2024-11-24 05:46:05 +08:00
beb6dd874a update 2024-11-24 05:41:55 +08:00
b0392b7cf1 update 2024-11-24 05:40:30 +08:00
d57b0d0922 Update mw.py 2024-11-24 05:36:53 +08:00
add966bc62 Update crontab.py 2024-11-24 05:32:51 +08:00
62a94c5c15 Update tool_task.py 2024-11-24 05:26:35 +08:00
3b857833a7 update 2024-11-24 05:18:34 +08:00
27e1e0c73c Update mw.py 2024-11-24 05:11:35 +08:00
41000f0c5d update 2024-11-24 05:10:19 +08:00
c249da061d Update mw.py 2024-11-24 05:01:42 +08:00
aa2126e7e6 Update crontab.py 2024-11-24 04:57:24 +08:00
2893f02735 update 2024-11-24 04:51:29 +08:00
5a072d7cda Update crontab.py 2024-11-24 04:46:40 +08:00
5218468b96 Update tool_task.py 2024-11-24 04:44:31 +08:00
e4d7ebbe25 Update tool_task.py 2024-11-24 04:44:24 +08:00
d32523c451 up 2024-11-24 04:43:22 +08:00
7eb88d6a92 Update tool_task.py 2024-11-24 04:43:00 +08:00
2d14184c82 Update index.py 2024-11-24 04:40:21 +08:00
080e4ad696 Update tool_task.py 2024-11-24 04:38:28 +08:00
c639d2736e update 2024-11-24 04:24:46 +08:00
339d9e829e Update cli.sh 2024-11-24 04:24:12 +08:00
21af7b2c1c Update setting.py 2024-11-24 04:21:44 +08:00
7ef0b5a9ae Update version.py 2024-11-24 04:19:22 +08:00
ba96b38a82 Update firewall.js 2024-11-24 04:18:02 +08:00
92f9a2b9a2 update 2024-11-24 04:17:05 +08:00
9f6cd75893 update 2024-11-24 04:13:22 +08:00
d8bf989f83 update 2024-11-24 04:06:53 +08:00
2cf2a893e6 Update mw.tpl 2024-11-24 03:53:23 +08:00
08ac6ea08c update 2024-11-24 03:49:53 +08:00
6246cc84d5 Update notify_email.py 2024-11-24 03:20:34 +08:00
b056892676 update 2024-11-24 02:57:18 +08:00
c1607752b2 update 2024-11-24 00:44:39 +08:00
cf7323cf12 Update site.js 2024-11-24 00:19:45 +08:00
9765cb99ea Update site.js 2024-11-24 00:19:18 +08:00
33c67f90db Create cert.py 2024-11-23 23:48:13 +08:00
f510d23c92 Update site.py 2024-11-23 23:18:03 +08:00
5b2e40404d update 2024-11-23 23:15:25 +08:00
ed375271d2 Update site.py 2024-11-23 17:42:03 +08:00
4a16502269 up 2024-11-22 21:47:33 +08:00
0862df3182 Update site.py 2024-11-22 01:39:37 +08:00
4c1e2a206d up 2024-11-22 01:09:42 +08:00
98fbaa099f update 2024-11-21 02:54:46 +08:00
8ae54e30d0 update 2024-11-20 16:40:06 +08:00
0eed51452a Update setting.py 2024-11-14 16:51:43 +08:00
f6ff18dd8d Update crontab.js 2024-11-14 15:14:53 +08:00
4602b9fc07 Update crontab.js 2024-11-14 15:14:10 +08:00
bf6aa15505 Update crontab.js 2024-11-14 15:00:30 +08:00
ee64e55eca update 2024-11-13 19:28:56 +08:00
f685054a9a update 2024-11-13 14:45:53 +08:00
bfc1974043 Update setting.py 2024-11-13 14:27:27 +08:00
c8b9dd2ae9 Update setting.py 2024-11-13 14:25:29 +08:00
289f736160 Update setting.py 2024-11-13 14:25:22 +08:00
28def91c7d Update __init__.py 2024-11-12 22:56:40 +08:00
b9371e9b94 Update firewall.py 2024-11-12 22:40:15 +08:00
29c65c0e7c update 2024-11-12 20:24:57 +08:00
b10e1ba8cc update 2024-11-12 20:24:48 +08:00
31ac0c2542 Update firewall.py 2024-11-12 20:21:12 +08:00
2d32d8dbb2 update 2024-11-12 20:05:34 +08:00
e6f1bbfabe Update __init__.py 2024-11-12 15:40:58 +08:00
98f7c4810e Update __init__.py 2024-11-12 14:33:19 +08:00
c9288e8dbe Update __init__.py 2024-11-12 01:42:53 +08:00
1cc8ac17f3 update 2024-11-12 01:42:02 +08:00
687f16e1ef Update firewall.py 2024-11-12 01:37:59 +08:00
1616d4d191 update 2024-11-12 01:36:30 +08:00
0da42e9ec8 Update __init__.py 2024-11-12 01:21:14 +08:00
49bfb5b3a8 update 2024-11-12 01:12:15 +08:00
17a9f07f04 Update app.py 2024-11-12 01:06:31 +08:00
b03f7abcb8 Update requirements.txt 2024-11-12 01:03:49 +08:00
990199ec89 update 2024-11-12 01:00:06 +08:00
96fcdb8af3 Update README.md 2024-11-12 00:15:37 +08:00
6e88b3b0c5 Create update.sh 2024-11-12 00:15:08 +08:00
c182635fd6 Update README.md 2024-11-12 00:10:16 +08:00
7b37a86acb update 2024-11-12 00:09:20 +08:00
0f5e196e3f update 2024-11-11 23:48:44 +08:00
8f1396bb8b up 2024-11-11 22:18:32 +08:00
89d6bbd317 Update default.sql 2024-11-11 00:56:03 +08:00
111aaa768a update 2024-11-11 00:48:54 +08:00
f511b8e44f Update app.py 2024-11-10 22:48:41 +08:00
af29e865e8 update 2024-11-10 22:43:08 +08:00
97b23b7148 Update files.js 2024-11-10 20:36:48 +08:00
a9f10842e7 Update files.js 2024-11-10 20:35:58 +08:00
8520bfcd27 update 2024-11-10 20:05:21 +08:00
d8a2e91922 update 2024-11-10 19:33:56 +08:00
08336eb2ee Update firewall.html 2024-11-10 19:13:53 +08:00
9945425f99 update 2024-11-10 18:28:34 +08:00
3a1a3f6579 update 2024-11-10 17:32:00 +08:00
23b3f213b6 Update panel_tools.py 2024-11-10 14:15:53 +08:00
c2a8b95231 update 2024-11-10 13:19:03 +08:00
e6af36a34b Update panel_task.py 2024-11-10 02:26:15 +08:00
e5ed04ce31 update 2024-11-10 02:15:35 +08:00
433ad507e7 update 2024-11-09 23:31:56 +08:00
d50d8abab8 update 2024-11-09 23:25:16 +08:00
8233ba99df update 2024-11-09 19:02:08 +08:00
020c8da426 update 2024-11-09 17:18:57 +08:00
f1a74e6275 update 2024-11-09 01:27:32 +08:00
260c37f63b update 2024-11-08 21:29:01 +08:00
03e37a2b88 Update __init__.py 2024-11-08 20:06:42 +08:00
e1e7fd51cd update 2024-11-08 19:56:37 +08:00
5c24373a32 Update __init__.py 2024-11-08 19:35:48 +08:00
8ed2f6848b update 2024-11-08 19:26:16 +08:00
8f1ec01b58 update 2024-11-08 18:26:46 +08:00
d5a8efff0e update 2024-11-08 18:22:01 +08:00
43420b7c38 update 2024-11-08 18:15:31 +08:00
fa614fcf88 Update site.py 2024-11-07 03:55:16 +08:00
1b4785ec52 Update site.py 2024-11-07 03:54:48 +08:00
35c42d94c6 Update site.py 2024-11-07 03:54:37 +08:00
8609033d37 Update binding.py 2024-11-07 03:53:09 +08:00
881facdfa8 update 2024-11-07 03:50:50 +08:00
e994cd80f1 Update panel_tools.py 2024-11-07 03:09:47 +08:00
accdb5834d up 2024-11-06 20:58:22 +08:00
bcfdd22161 update 2024-11-06 02:08:35 +08:00
82ee20b1a9 update 2024-11-05 03:29:36 +08:00
d83e7b6905 Update firewall.py 2024-11-05 03:00:02 +08:00
f9b7526007 Update mw.py 2024-11-05 02:59:41 +08:00
9ce92eb69e update 2024-11-05 02:56:12 +08:00
a4079c09ef Update tasks.py 2024-11-05 02:37:39 +08:00
a09a9d5889 Update tasks.py 2024-11-05 02:35:36 +08:00
1a3972fa21 Update tasks.py 2024-11-05 02:35:16 +08:00
e477a69b98 Update tasks.py 2024-11-05 02:33:23 +08:00
1ec2c33384 Update tasks.py 2024-11-05 02:30:46 +08:00
a0a4292cb8 Update panel_task.py 2024-11-05 02:28:22 +08:00
2fe3ed5407 update 2024-11-05 02:28:06 +08:00
0c9eae860f Update mw.py 2024-11-05 01:45:22 +08:00
f6c4f3b2ee Update mw.py 2024-11-05 01:44:04 +08:00
ec70d3e955 Update firewall.js 2024-11-05 01:42:09 +08:00
534af4f017 Update index_php_yum.py 2024-11-05 01:39:21 +08:00
804f7646d1 update 2024-11-05 01:39:07 +08:00
4d44650609 Update install.sh 2024-11-05 01:35:39 +08:00
91327c50f0 Update install.sh 2024-11-05 01:34:27 +08:00
024dedabaf update 2024-11-05 01:26:45 +08:00
fed4a4ae48 Update tasks.py 2024-11-05 01:20:54 +08:00
f217c07d12 Update tasks.py 2024-11-05 01:19:09 +08:00
8d2e70c31e Update panel_task.py 2024-11-05 01:16:17 +08:00
36bd8d8a1f Update panel_task.py 2024-11-05 01:16:08 +08:00
6bf4371a2b Update panel_task.py 2024-11-05 01:15:40 +08:00
72c6dbabab update 2024-11-05 01:15:17 +08:00
ef7b680e37 update 2024-11-05 01:12:04 +08:00
910defe18b update 2024-11-05 01:03:37 +08:00
6f232aa46e Update panel_task.py 2024-11-05 00:59:38 +08:00
8010ead35a update 2024-11-05 00:58:40 +08:00
39c634ab14 Update panel_tools.py 2024-11-05 00:51:55 +08:00
9cf9b53671 update 2024-11-05 00:46:25 +08:00
fbe2da1cd8 update 2024-11-05 00:38:22 +08:00
b1dd7ea609 update 2024-11-05 00:16:19 +08:00
d4cfd90ccd update 2024-11-04 19:08:39 +08:00
1826adf50e Update install.sh 2024-11-04 01:21:17 +08:00
b58d457742 Update new_cli.sh 2024-11-04 00:33:15 +08:00
f37cd39a65 Update new_cli.sh 2024-11-04 00:32:57 +08:00
98a53b8639 Update mw.py 2024-11-04 00:28:52 +08:00
795bee7de3 update 2024-11-04 00:27:32 +08:00
477b8b1f73 Update mw.py 2024-11-04 00:13:21 +08:00
d795dd7d47 Update logs.py 2024-11-04 00:02:30 +08:00
4a7fea3b4c Update __init__.py 2024-11-03 23:59:22 +08:00
83ae4562fa update 2024-11-03 23:56:25 +08:00
06abfd92f2 update 2024-11-03 23:44:05 +08:00
3ae8f0253e up 2024-11-03 22:21:41 +08:00
c77d409317 up 2024-11-03 21:16:13 +08:00
39603f367f Update panel_tools.py 2024-11-03 20:24:45 +08:00
044eb2b65f up 2024-11-03 20:21:35 +08:00
0b6cdec4ce Update __init__.py 2024-11-03 19:50:58 +08:00
8f0be8a475 Update init_cmd.py 2024-11-03 19:39:49 +08:00
6114bcd9bc Update init_cmd.py 2024-11-03 19:36:17 +08:00
0f89246b17 Update init_cmd.py 2024-11-03 19:36:09 +08:00
63145c736f Update init_cmd.py 2024-11-03 19:33:16 +08:00
52e98f6d41 update 2024-11-03 19:15:37 +08:00
0c6fb48989 update 2024-11-03 18:57:50 +08:00
7c696c24f3 Update panel_tools.py 2024-11-03 18:48:17 +08:00
91612a8465 Update user.py 2024-11-03 18:46:41 +08:00
063263d924 update 2024-11-03 18:45:36 +08:00
514518e278 Update user.py 2024-11-03 18:36:16 +08:00
3ce1289c44 update 2024-11-03 18:14:25 +08:00
ed90f9a087 Update system.sql 2024-11-03 14:57:20 +08:00
9a9faa6a33 Update monitor.py 2024-11-03 03:38:07 +08:00
fa6900a937 Update monitor.py 2024-11-03 03:34:21 +08:00
b020f4c502 Update system.py 2024-11-03 03:31:47 +08:00
122bef53ff Update system.sql 2024-11-03 03:25:21 +08:00
bed1d7ee85 Update system.sql 2024-11-03 03:25:08 +08:00
7f68067f67 update 2024-11-03 03:17:02 +08:00
06d43efd7f update 2024-11-03 03:06:40 +08:00
745d95bbcb Update __init__.py 2024-11-03 02:20:52 +08:00
7f5b45fbdc Update monitor.py 2024-11-03 02:01:20 +08:00
179bc05e09 Update mw.py 2024-11-03 01:34:10 +08:00
5e53c637c3 update 2024-11-03 01:28:19 +08:00
d7b7c572b0 update 2024-11-03 00:59:26 +08:00
18e59ef377 up 2024-11-02 16:16:31 +08:00
fa64dfb89b update 2024-11-02 16:15:21 +08:00
5788693e6c Update install.sh 2024-11-02 16:14:29 +08:00
083f5e2271 update 2024-11-02 16:13:16 +08:00
6b378a9712 update 2024-11-02 16:12:55 +08:00
2a19a8f93d Update install.sh 2024-11-02 16:03:58 +08:00
c6418069fb Update install.sh 2024-11-02 16:01:48 +08:00
b66ab079ed Update install.sh 2024-11-02 15:58:50 +08:00
07bca6cac8 update 2024-11-02 15:54:37 +08:00
01b6ede03e update 2024-11-02 15:41:33 +08:00
472f441c0e update 2024-11-02 02:47:47 +08:00
31571a60e3 update 2024-11-02 02:19:58 +08:00
8803d3ee03 Update new_cli.sh 2024-11-01 21:30:24 +08:00
d81764cc78 Update __init__.py 2024-11-01 21:30:18 +08:00
c56c1c7274 Update __init__.py 2024-11-01 21:28:39 +08:00
580235b105 Update __init__.py 2024-11-01 21:24:14 +08:00
210dbfe164 Update __init__.py 2024-11-01 21:18:49 +08:00
e6598ff57d update 2024-11-01 21:16:25 +08:00
1dc21b3c0b Update __init__.py 2024-11-01 21:14:26 +08:00
1bae404c5e Update adult_log.py 2024-11-01 19:06:54 +08:00
39b3936eca Update adult_log.py 2024-11-01 19:04:14 +08:00
205bb47101 Update user.py 2024-11-01 19:00:21 +08:00
a4cdc1e03b Update user.py 2024-11-01 18:59:08 +08:00
0467d39c90 Update user.py 2024-11-01 18:57:12 +08:00
f8f152affb Update user.py 2024-11-01 18:56:49 +08:00
b2f595dfb2 Update user.py 2024-11-01 18:52:46 +08:00
3f3221a3df Update user.py 2024-11-01 18:48:04 +08:00
0eea41ba85 Update panel_tools.py 2024-11-01 18:45:07 +08:00
90a406e5e9 Update panel_tools.py 2024-11-01 18:43:07 +08:00
671859ad3c Update panel_tools.py 2024-11-01 18:37:00 +08:00
306d69bd39 Update mw.tpl 2024-11-01 18:36:04 +08:00
f3552281c5 Update mw.tpl 2024-11-01 18:35:07 +08:00
669bbfce93 Update mw.tpl 2024-11-01 18:34:35 +08:00
9b1552269b update 2024-11-01 18:30:50 +08:00
559e549590 Update panel_tools.py 2024-11-01 18:18:58 +08:00
fb8b5314e1 Update panel_tools.py 2024-11-01 18:18:12 +08:00
d767a4d4a2 update 2024-11-01 18:14:31 +08:00
759cbd1065 Update mw.tpl 2024-11-01 17:34:48 +08:00
386448d60c Update mw.tpl 2024-11-01 17:34:15 +08:00
3d381b6dfa Update mw.tpl 2024-11-01 17:33:16 +08:00
39c9a260cb Update mw.tpl 2024-11-01 17:32:30 +08:00
b0e9a13984 Update mw.tpl 2024-11-01 17:26:01 +08:00
9ff26caa5f Update mw.tpl 2024-11-01 17:22:32 +08:00
d5e2f554f1 update 2024-11-01 17:21:19 +08:00
14ee45918f Update panel_tools.py 2024-11-01 17:18:19 +08:00
9fd7d20051 Update mw.tpl 2024-11-01 17:16:47 +08:00
328543852c Update mw.tpl 2024-11-01 17:13:06 +08:00
aa23809390 Update mw.tpl 2024-11-01 17:01:52 +08:00
6da09e708a Update mw.tpl 2024-11-01 16:58:51 +08:00
b44fec1859 Update __init__.py 2024-11-01 16:56:45 +08:00
71ab5920c8 Update README.md 2024-11-01 16:55:47 +08:00
4bd04eb71d Update update_new.sh 2024-11-01 16:55:22 +08:00
c08a2965ab Create update_new.sh 2024-11-01 16:54:42 +08:00
87c50e529d Update mw.tpl 2024-11-01 16:51:45 +08:00
Mr Chen
2438717c79 Merge pull request #628 from midoks/dev
0.17.4
2024-11-01 12:23:57 +08:00
f952f88d9a Update config_api.py 2024-11-01 12:21:22 +08:00
019594cee7 update 2024-11-01 02:52:34 +08:00
d7980147d6 update 2024-11-01 02:51:54 +08:00
2e45194b34 update 2024-11-01 02:51:27 +08:00
8d21448edb Update system_api.py 2024-11-01 02:45:00 +08:00
1d986a2b16 Update system_api.py 2024-11-01 02:44:44 +08:00
c291cc57e7 Update mw.tpl 2024-11-01 02:40:33 +08:00
0c9fe565e4 Update mw.py 2024-11-01 02:29:48 +08:00
c04e52d3df Update system_api.py 2024-11-01 02:24:09 +08:00
966506bb8d update 2024-11-01 02:10:08 +08:00
11f42d5d2c update 2024-11-01 01:22:56 +08:00
ebf474aefb up 2024-10-31 19:20:35 +08:00
1ab3718fe5 Update __init__.py 2024-10-31 05:02:13 +08:00
aad35bb73b update 2024-10-31 04:57:02 +08:00
1c72e5b664 Update push_notice_msg.py 2024-10-30 23:39:59 +08:00
028307d1fc Update nginx.conf 2024-10-30 16:05:27 +08:00
d0fc6a4c08 update 2024-10-30 02:37:16 +08:00
7507de7ed2 update 2024-10-30 00:56:24 +08:00
eb3f78ef4a update 2024-10-30 00:55:34 +08:00
a015c32e42 up 2024-10-29 22:28:38 +08:00
e5e106e3bc update 2024-10-29 18:58:45 +08:00
bc85a6003b Update __init__.py 2024-10-29 18:49:21 +08:00
e7bf5ef8b9 update 2024-10-29 18:47:46 +08:00
2337ea901b update 2024-10-28 23:23:24 +08:00
3a17126ac0 update 2024-10-28 18:43:19 +08:00
164bfa780c Update mysql.js 2024-10-28 17:28:28 +08:00
cb0375d9f7 Update install.sh 2024-10-28 17:11:12 +08:00
1d15747753 Update index.py 2024-10-28 16:18:03 +08:00
af7c38a8c2 Update app.py 2024-10-28 16:06:57 +08:00
57bbf07432 Update index.py 2024-10-28 16:06:41 +08:00
fe1bc268d5 Update index.py 2024-10-28 16:06:25 +08:00
ea2cf0b691 Update __init__.py 2024-10-28 15:47:40 +08:00
a593e2b8e0 update 2024-10-28 03:13:10 +08:00
5394dd329a update 2024-10-27 19:29:09 +08:00
b121d08503 update 2024-10-27 03:00:24 +08:00
97800e3424 update 2024-10-27 02:58:55 +08:00
bb1068a03c update 2024-10-27 02:23:20 +08:00
f2443d9473 update 2024-10-27 02:23:12 +08:00
f7c9e6636a Update info.json 2024-10-27 00:04:19 +08:00
feb3e0220e Update install.sh 2024-10-27 00:01:22 +08:00
c9951f870d update 2024-10-26 18:35:49 +08:00
c876c59e4f Create db.py 2024-10-26 04:26:32 +08:00
0e75844fd3 Update __init__.py 2024-10-26 04:22:18 +08:00
515a8c4272 Update files.js 2024-10-26 04:04:19 +08:00
d026385370 update 2024-10-26 04:04:00 +08:00
95ff8c66f6 update 2024-10-25 23:02:10 +08:00
6d90935784 update 2024-10-25 19:04:14 +08:00
94d45b1b07 update 2024-10-25 02:24:38 +08:00
dc1458fb2a Update __init__.py 2024-10-24 18:24:40 +08:00
ae74121229 Update index.py 2024-10-24 14:39:19 +08:00
f5b0ce7788 Update index.py 2024-10-24 14:39:16 +08:00
5757627a12 Update user_login_check.py 2024-10-24 14:39:10 +08:00
28f8f8945d update 2024-10-24 14:25:27 +08:00
e5386ab01c Update index.py 2024-10-24 14:25:17 +08:00
8ad9153012 update 2024-10-24 00:12:16 +08:00
2790a3890b Update __init__.py 2024-10-23 20:53:37 +08:00
a978c494c4 update 2024-10-23 15:40:14 +08:00
e1dd781b73 update 2024-10-23 14:49:03 +08:00
13a7c20764 update 2024-10-23 04:22:06 +08:00
7812c4983f update 2024-10-23 04:11:31 +08:00
a35ae6df9e update 2024-10-23 03:46:29 +08:00
32eefbba10 update 2024-10-23 02:40:54 +08:00
81de116417 update 2024-10-22 18:52:50 +08:00
37ace1226b Update r3.7.txt 2024-10-22 02:28:19 +08:00
7c780b32b8 Create page.py 2024-10-22 02:26:28 +08:00
eba923aa5f Update __init__.py 2024-10-22 02:25:21 +08:00
d97e265035 update 2024-10-22 02:11:30 +08:00
86014afedb update 2024-10-22 01:36:09 +08:00
b3626022bf Update requirements.txt 2024-10-22 00:52:58 +08:00
e5bf49bca4 Update requirements.txt 2024-10-22 00:44:26 +08:00
d988ce55b1 update 2024-10-21 03:19:08 +08:00
2804d0ed24 Update index.py 2024-10-20 01:45:59 +08:00
730797dcde Update fail2ban.js 2024-10-20 01:33:33 +08:00
476a4e9d88 Update fail2ban.js 2024-10-20 01:24:51 +08:00
665710f912 Update fail2ban.js 2024-10-20 01:22:19 +08:00
890a1ee864 Update fail2ban.js 2024-10-20 01:20:53 +08:00
5d7872200d Update fail2ban.js 2024-10-20 01:19:49 +08:00
ccdfde3186 Update fail2ban.js 2024-10-20 01:15:10 +08:00
f74c1ab784 update 2024-10-20 01:14:53 +08:00
82efc1a3e5 Update index.py 2024-10-19 23:38:11 +08:00
b6f87e16ac update 2024-10-19 23:19:15 +08:00
e1014a72bd Update index.py 2024-10-19 23:10:50 +08:00
218991d8d0 Update index.py 2024-10-19 22:47:48 +08:00
7937747a05 update 2024-10-19 22:45:13 +08:00
649ea30cb4 Update __init__.py 2024-10-19 22:17:16 +08:00
b92cfdeade update 2024-10-19 21:52:59 +08:00
76199a20a4 update 2024-10-19 21:44:12 +08:00
c42b92bb95 update 2024-10-19 21:32:18 +08:00
ce2affb119 update 2024-10-19 21:27:24 +08:00
d3e228bcd6 Update index.py 2024-10-19 03:01:05 +08:00
baac8e84ec Update fail2ban.js 2024-10-19 00:01:35 +08:00
3d0a55a383 Update fail2ban.js 2024-10-19 00:00:10 +08:00
d8c822de9d Update fail2ban.js 2024-10-18 23:58:05 +08:00
ee8a928357 update 2024-10-18 23:54:12 +08:00
785fb9698b update 2024-10-18 22:32:11 +08:00
14c3ccbfa5 Update index.html 2024-10-18 22:07:00 +08:00
41edac3e3a Update index.html 2024-10-18 22:05:27 +08:00
36173cdd0a Update index.html 2024-10-18 22:04:22 +08:00
ee59bd31e6 update 2024-10-18 22:00:38 +08:00
63004db963 Update backup.py 2024-10-16 22:30:47 +08:00
93b3c5ba3c Update simpleping_index.py 2024-10-16 22:01:29 +08:00
613063ce24 Update simpleping_index.py 2024-10-16 22:01:16 +08:00
2e7a147fd3 Update simpleping_index.py 2024-10-16 21:44:02 +08:00
894c0bff1f Update simpleping_index.py 2024-10-16 21:41:49 +08:00
3ad999db00 Update index.py 2024-10-16 20:53:22 +08:00
1e5e1afeeb Update debian.sh 2024-10-16 17:08:17 +08:00
463d5c1b23 update 2024-10-16 17:06:22 +08:00
a24b98cbea mongodb 升级 2024-10-16 17:01:49 +08:00
94034125f7 Update install.sh 2024-10-16 01:19:11 +08:00
17d446161b update 2024-10-16 01:17:30 +08:00
fb8c1d124e update 2024-10-15 16:18:44 +08:00
5033692886 Update index.py 2024-10-15 16:05:27 +08:00
e5ba11ae79 Update install.sh 2024-10-15 15:57:58 +08:00
0be032041a Update index.py 2024-10-15 15:42:03 +08:00
3bf3e83442 Update index.py 2024-10-15 15:39:47 +08:00
bd7aefb6cc Update index.py 2024-10-15 15:39:18 +08:00
7009dfc3c4 Update pgadmin.service.tpl 2024-10-15 14:55:19 +08:00
21c30c6e99 Update pgadmin.service.tpl 2024-10-15 14:53:27 +08:00
63a0d2205d Update install.sh 2024-10-15 14:52:26 +08:00
2e2e48e440 update 2024-10-15 00:31:41 +08:00
2f125383bf cloudreve init 2024-10-15 00:29:57 +08:00
71877f7403 update 2024-10-13 22:15:58 +08:00
3d9d528694 Update index.py 2024-10-12 04:40:54 +08:00
39e8b98287 Update index.py 2024-10-12 04:36:00 +08:00
fe960a32ee Update index.py 2024-10-12 04:22:38 +08:00
645450f886 update 2024-10-12 01:36:22 +08:00
77b4917d3a Update install.sh 2024-10-11 22:25:53 +08:00
893797b5e4 Update alist.js 2024-10-11 21:26:38 +08:00
019543b790 Update install.sh 2024-10-11 21:26:33 +08:00
c85fb94bc2 update 2024-10-11 16:43:49 +08:00
60f3dbf6fc Update index.py 2024-10-11 16:22:48 +08:00
b1846342d7 Update index.py 2024-10-10 00:51:18 +08:00
2f583d2e97 Update index.py 2024-10-10 00:45:46 +08:00
551bb1c3f7 update 2024-10-10 00:42:54 +08:00
36cf6c87cc Update install.sh 2024-10-09 22:59:59 +08:00
66bea6a943 Update alist.service.tpl 2024-10-09 22:59:39 +08:00
212d3e4ee8 Update alist.service.tpl 2024-10-09 22:52:47 +08:00
422060b929 Update alist.service.tpl 2024-10-09 22:49:34 +08:00
2b4f755244 Update install.sh 2024-10-09 22:48:16 +08:00
67c477af14 update 2024-10-09 22:44:21 +08:00
a8502e30b3 alist init 2024-10-09 22:37:43 +08:00
82db6d14e0 Update index.py 2024-10-09 22:37:01 +08:00
c529d18ad8 Update index.py 2024-10-09 22:10:04 +08:00
cf54ee1736 Update .gitignore 2024-10-08 23:35:56 +08:00
8e8c4c47ec new version init 2024-10-08 23:35:42 +08:00
a6c981355c Update .gitignore 2024-10-07 17:00:36 +08:00
69755363ca Update install.sh 2024-10-06 23:18:42 +08:00
eaa5a4d4ed Update mcrypt.sh 2024-10-06 15:18:04 +08:00
4dcae9f877 Update redis.sh 2024-10-06 14:36:44 +08:00
424830729f Update install.sh 2024-10-06 14:17:41 +08:00
a678d28a12 update 2024-10-06 14:13:46 +08:00
b9b5ecbac9 Update app.sh 2024-10-04 14:58:42 +08:00
199716e1fd Update .gitignore 2024-10-04 14:55:12 +08:00
Mr Chen
c95efcdd04 Merge pull request #626 from midoks/dev
Dev
2024-10-03 02:36:54 +08:00
02f14b29ee Update site_api.py 2024-10-03 02:35:47 +08:00
97789d0796 Update cert_api.py 2024-10-03 02:19:13 +08:00
ea5af1ac5b update 2024-10-03 02:01:53 +08:00
6e279a67e2 Update cert_api.py 2024-10-03 01:58:21 +08:00
9758becc46 Update cert_api.py 2024-10-03 01:00:32 +08:00
Mr Chen
da2d0fd2ce Merge pull request #625 from midoks/dev
Update config_api.py
2024-10-02 20:27:03 +08:00
6e0d580f6b Update config_api.py 2024-10-02 20:26:36 +08:00
Mr Chen
34481c12e1 Merge pull request #624 from midoks/dev
0.17.3
2024-10-02 20:25:38 +08:00
bc27feab00 Update my.cnf 2024-10-02 19:17:00 +08:00
1e48b32170 Update my.cnf 2024-10-02 19:13:35 +08:00
b9cbf63945 Update install.sh 2024-10-02 18:58:16 +08:00
8437e236db update 2024-10-02 18:57:02 +08:00
838043a9dd Update README.md 2024-10-02 16:20:08 +08:00
8debe50f1b update 2024-10-02 16:15:19 +08:00
8a97577b61 Update info.json 2024-10-02 16:09:45 +08:00
cb9b6b2816 Update cert_api.py 2024-10-02 16:00:47 +08:00
92d5126230 Update cert_api.py 2024-10-02 15:43:40 +08:00
50c6f9fce5 update 2024-10-02 15:33:23 +08:00
cbb1403f80 update 2024-10-02 14:25:14 +08:00
21f995f8ac Update install.sh 2024-10-02 04:11:59 +08:00
185e0dae22 Update README.md 2024-10-02 04:11:44 +08:00
e555829f1b Update install.sh 2024-10-02 04:03:39 +08:00
2f50a2ffa0 update 2024-10-02 03:51:37 +08:00
069ececfe1 Update install.sh 2024-10-02 03:48:23 +08:00
1ea1ad5ae0 Update info.json 2024-10-02 03:37:13 +08:00
3787913a12 Update index.py 2024-10-02 03:33:28 +08:00
45f51954f9 update 2024-10-02 03:29:34 +08:00
0c7773c6d4 Update pgadmin.js 2024-10-02 03:17:59 +08:00
81e1940b8f Update pgadmin.js 2024-10-02 03:17:42 +08:00
2e24a715ba Update pgadmin.js 2024-10-02 03:17:03 +08:00
a05be24ed1 up 2024-10-02 03:15:36 +08:00
f09017fe6e Update index.py 2024-10-02 02:58:12 +08:00
1aedb66132 Update index.py 2024-10-02 02:17:37 +08:00
2e3aef3776 Update cmd.md 2024-10-02 02:01:35 +08:00
0d3cf64e9a Update cmd.md 2024-10-02 01:57:53 +08:00
66220c1963 update 2024-10-02 01:56:26 +08:00
1ed52a1033 Update pg_init.sh 2024-10-02 01:49:19 +08:00
1a4ac13f8b Update cmd.md 2024-10-02 01:44:05 +08:00
e2e94015a0 Update index.py 2024-10-02 01:40:20 +08:00
dee7abc850 Update index.py 2024-10-02 01:40:02 +08:00
a1464006db Update pg_init.sh 2024-10-02 01:35:51 +08:00
b4c6bcec6e Update cmd.md 2024-10-02 01:28:08 +08:00
1d55ef3d0a Update mw.tpl 2024-10-02 01:27:40 +08:00
24dab4775c update 2024-10-02 01:26:26 +08:00
7a7b77887c update 2024-10-02 00:53:31 +08:00
c39d21b300 update 2024-10-02 00:39:56 +08:00
3f7bce197f Update index.py 2024-10-02 00:11:27 +08:00
e706ff17c1 Update index.py 2024-10-02 00:07:35 +08:00
5a80422b77 Update config_local.py 2024-10-02 00:04:15 +08:00
d3fb392f28 Update config_local.py 2024-10-02 00:02:23 +08:00
6817043007 Update index.py 2024-10-02 00:02:07 +08:00
3106c101d8 Update index.py 2024-10-02 00:00:51 +08:00
e25c7f424d update 2024-10-01 23:57:54 +08:00
156459b6a4 update 2024-10-01 23:49:15 +08:00
c73fe892b7 Update install.sh 2024-10-01 23:09:59 +08:00
491ad84103 Update pgadmin.conf 2024-10-01 22:29:23 +08:00
cdb27c5d83 Update index.py 2024-10-01 22:18:50 +08:00
7d35f9d129 Update index.py 2024-10-01 21:31:28 +08:00
b34d1e7caa update 2024-10-01 21:30:16 +08:00
055a52da03 Update mw.tpl 2024-10-01 21:02:26 +08:00
2c3746c596 Update mw.tpl 2024-10-01 20:59:30 +08:00
96a0ca9b2f Update mw.tpl 2024-10-01 18:23:50 +08:00
1cd436bc5d Update mw.tpl 2024-10-01 18:19:54 +08:00
3834a9b0b8 update 2024-10-01 18:18:28 +08:00
30454e3b4a Update index.py 2024-10-01 17:57:29 +08:00
020354f5bc update 2024-10-01 17:46:49 +08:00
6e5dbeda72 update 2024-10-01 17:37:39 +08:00
804922a707 Update pgadmin.js 2024-10-01 17:32:01 +08:00
23081f4487 Update pgadmin.js 2024-10-01 17:30:06 +08:00
2f75f57365 Update index.py 2024-10-01 17:27:52 +08:00
f4f7ffe5dd Update pgadmin.js 2024-10-01 17:27:30 +08:00
0de23a3914 update 2024-10-01 17:24:56 +08:00
d1f47ca406 Update pgadmin.js 2024-10-01 17:13:52 +08:00
8d16fe1d46 Update index.py 2024-10-01 17:10:57 +08:00
d1bffd74ae Update index.py 2024-10-01 17:10:27 +08:00
23de77d951 Update index.py 2024-10-01 17:09:43 +08:00
172fe65df4 Update install.sh 2024-10-01 17:09:32 +08:00
4cd96252f1 Update index.py 2024-10-01 17:09:17 +08:00
a88f4c35bd Update pgadmin.js 2024-10-01 17:08:39 +08:00
19ffeb7e8e Update pgadmin.js 2024-10-01 17:07:44 +08:00
004e1ce03c update 2024-10-01 17:05:59 +08:00
485efb0c88 Update pgadmin.js 2024-10-01 17:01:36 +08:00
227107719b Update index.html 2024-10-01 16:32:04 +08:00
d683f18bd0 update 2024-10-01 16:26:44 +08:00
78446b5a68 update 2024-10-01 16:00:50 +08:00
3fe638d16c update 2024-10-01 15:57:26 +08:00
f71973b10a Update index.py 2024-10-01 15:52:28 +08:00
0ab0a918c3 Update index.py 2024-10-01 15:46:11 +08:00
c694688220 Update index.py 2024-10-01 15:42:26 +08:00
f979fd32e3 Update index.py 2024-10-01 15:39:00 +08:00
7e11e8138e update 2024-10-01 15:37:14 +08:00
590575f5b1 Update pgadmin.service.tpl 2024-10-01 15:26:42 +08:00
b76c525106 update 2024-10-01 15:21:54 +08:00
56a276f019 Update index.py 2024-10-01 15:12:14 +08:00
62050fcff1 Update index.py 2024-10-01 15:11:01 +08:00
d4989bb762 update 2024-10-01 14:24:52 +08:00
dff54109a4 Update index.py 2024-10-01 14:22:05 +08:00
5850d69c10 update 2024-10-01 14:21:17 +08:00
908507f64e Update install.sh 2024-10-01 12:25:13 +08:00
ecd455ab21 Update install.sh 2024-10-01 12:24:34 +08:00
c4ebfff55e Update install.sh 2024-10-01 12:22:10 +08:00
6adf5f472d Update install.sh 2024-10-01 12:16:40 +08:00
ee6b5c304a Update install.sh 2024-10-01 12:14:26 +08:00
03327a549f init pgadmin 2024-10-01 04:08:12 +08:00
f6e245e77d Update __init__.py 2024-10-01 01:33:47 +08:00
4dcf9d9a40 Update __init__.py 2024-10-01 01:33:34 +08:00
a6ef4e12ad Update __init__.py 2024-10-01 01:30:44 +08:00
2e751bb3fb Update __init__.py 2024-10-01 01:30:23 +08:00
5ab15341e4 update 2024-09-29 12:00:00 +08:00
d6b027e969 Update ubuntu.sh 2024-09-28 22:26:59 +08:00
76a4b3b3e6 Update debian.sh 2024-09-28 22:23:28 +08:00
3062aee5cb Update debian.sh 2024-09-28 22:22:13 +08:00
dbf0d95329 Update __init__.py 2024-09-28 21:47:27 +08:00
c42b0d5fda Create webhook_index.py 2024-09-28 21:43:44 +08:00
59f2688399 Update __init__.py 2024-09-28 21:43:42 +08:00
395bf3aa5a Update __init__.py 2024-09-28 21:41:29 +08:00
bd85e418bc Update nginx.conf 2024-09-27 17:51:03 +08:00
091ac05920 Update redis.conf 2024-09-26 14:57:12 +08:00
127d175e5c Update redis.conf 2024-09-26 00:49:55 +08:00
744a7f83df Update redis.conf 2024-09-26 00:39:09 +08:00
5f61a7af17 Update gd_old.sh 2024-09-24 16:00:09 +08:00
c4ceaddcca update 2024-09-24 15:10:18 +08:00
12729092d8 Update index_php_yum.py 2024-09-24 14:31:22 +08:00
94830659e9 Update index_php_yum.py 2024-09-24 14:11:46 +08:00
aef307c312 Update index_php_yum.py 2024-09-24 14:11:11 +08:00
2b15c77cdc Update index_php_yum.py 2024-09-24 14:09:20 +08:00
78acddb043 Update index_php_yum.py 2024-09-24 14:08:10 +08:00
9106f3d2f5 Update index_php_yum.py 2024-09-24 14:00:01 +08:00
2df8355a33 Update index_php_yum.py 2024-09-24 13:59:01 +08:00
c5610aae05 update 2024-09-24 13:55:02 +08:00
f1f3a42557 Update gd_old.sh 2024-09-24 13:41:32 +08:00
63072120fc Update rocky.sh 2024-09-24 13:40:01 +08:00
0be966646b Update rocky.sh 2024-09-24 13:38:51 +08:00
c3201118bd Update gd_old.sh 2024-09-24 13:16:20 +08:00
12896574c7 update 2024-09-23 12:12:47 +08:00
5bf877647f Update cert_api.py 2024-09-21 14:15:08 +08:00
697e692c92 Update linux.conf 2024-09-18 22:57:38 +08:00
7b620a294b Update push_notice_msg.py 2024-09-18 10:06:49 +08:00
8c1e4d7c4d Update push_ad.py 2024-09-18 10:06:32 +08:00
468c64df40 Update site.js 2024-09-16 02:26:42 +08:00
c560bc666f up 2024-09-15 22:19:04 +08:00
8c4ab4a60d Update index.py 2024-09-15 15:53:01 +08:00
1a0b7895d9 Update common.js 2024-09-15 15:41:33 +08:00
26a29fea96 Update index.py 2024-09-15 15:39:36 +08:00
5c9a12a7b2 update 2024-09-15 15:35:31 +08:00
7d103e8f4a Update index.py 2024-09-15 15:27:33 +08:00
4f4dfd0ee1 Update common.js 2024-09-15 14:38:36 +08:00
c02e95bc49 update 2024-09-15 05:17:16 +08:00
e77bfb055a Update goedge.py 2024-09-15 01:13:23 +08:00
712814515c update 2024-09-15 01:03:32 +08:00
512213df15 update 2024-09-15 00:53:06 +08:00
e07c5ab7f9 Update cert_api.py 2024-09-14 20:55:41 +08:00
83471a37b0 Update common.js 2024-09-14 19:39:42 +08:00
f82944a043 Update common.js 2024-09-14 19:36:53 +08:00
6eb5dec1f6 Update goedge.py 2024-09-14 19:31:58 +08:00
f7ec845a7e update 2024-09-14 19:31:15 +08:00
0e7ed65e04 update 2024-09-14 19:22:10 +08:00
60910c9d87 Update goedge.py 2024-09-14 17:45:49 +08:00
f4b4b3c3a6 update 2024-09-14 17:42:42 +08:00
ce363b0319 Update index.py 2024-09-14 16:03:03 +08:00
42b0a4067b update 2024-09-14 15:50:03 +08:00
1e6f755045 update 2024-09-14 15:47:30 +08:00
c7570e84a0 Update index.py 2024-09-14 15:12:26 +08:00
34b7a5f7ba Update index.py 2024-09-14 15:04:44 +08:00
ff2146a49d update 2024-09-14 15:02:18 +08:00
5038d8b07f Update install.sh 2024-09-14 11:59:35 +08:00
aacc87c190 Update index.py 2024-09-14 11:57:28 +08:00
e68a21ccb7 Update index.py 2024-09-14 11:52:07 +08:00
435f0a0c84 Update index.py 2024-09-14 11:50:33 +08:00
d4269dc886 update 2024-09-14 11:48:43 +08:00
079ae529ee Update tool_cron.py 2024-09-14 02:39:51 +08:00
f8d3e23025 Update install.sh 2024-09-14 02:38:49 +08:00
efa168a4b1 Update install.sh 2024-09-14 02:37:14 +08:00
ebfc32be74 Update index.py 2024-09-14 02:35:55 +08:00
79a2f6d7a4 Update install.sh 2024-09-14 02:33:48 +08:00
edd218b139 Create tool_cron.py 2024-09-14 02:31:49 +08:00
d3645425f6 up 2024-09-14 02:21:21 +08:00
2f34c689d0 update 2024-09-14 02:12:32 +08:00
548e5fbde1 update 2024-09-14 02:00:13 +08:00
f0b3d7f151 Update common.js 2024-09-14 01:46:37 +08:00
c85a6fd462 Update index.html 2024-09-14 01:42:05 +08:00
ddbc7988b2 update 2024-09-14 01:39:57 +08:00
83b1e3b8af update 2024-09-14 01:25:59 +08:00
8fd4f83793 Update common.js 2024-09-14 01:17:41 +08:00
32321c822f Update acme.sql 2024-09-14 01:04:22 +08:00
bb8e8b7367 Update common.js 2024-09-14 01:01:34 +08:00
224417e2bd acme_pandominassl_apply 2 2024-09-14 00:35:35 +08:00
afb2a39f8c update 2024-09-13 20:54:22 +08:00
f240f167ff Update install.sh 2024-09-13 15:47:12 +08:00
69273f9cf9 Update install.sh 2024-09-13 15:44:18 +08:00
e30079bd2c update 2024-09-13 15:31:28 +08:00
d882de1582 update 2024-09-13 15:25:26 +08:00
2e14dc22ff Update install.sh 2024-09-13 15:24:46 +08:00
6839e387c2 Update install.sh 2024-09-13 15:21:16 +08:00
bde2bc0b2b update 2024-09-13 00:19:27 +08:00
e6fe0885a5 Update acme.sql 2024-09-13 00:17:46 +08:00
f95440da99 acme_pandominassl_apply init 2024-09-13 00:12:18 +08:00
cbfff99f89 Update index.py 2024-09-09 23:04:09 +08:00
ee119ea3cc Update openresty.js 2024-09-09 23:02:38 +08:00
ebefee67bc Update openresty.js 2024-09-09 23:01:03 +08:00
60fc2e5803 Update openresty.js 2024-09-09 23:00:01 +08:00
b766a6eb6a Update openresty.js 2024-09-09 22:58:29 +08:00
f67342fd7a Update index.py 2024-09-09 22:56:52 +08:00
2f98228310 Update .gitignore 2024-09-06 19:30:22 +08:00
b07739a66a Update index.py 2024-09-04 23:11:54 +08:00
3b293e3163 Update index.py 2024-09-04 13:09:20 +08:00
cec5fc594f Update index.py 2024-09-04 13:07:57 +08:00
ed10a050bc Update .gitignore 2024-09-01 10:54:15 +08:00
cfc3dc73c4 Update cert_api.py 2024-08-30 15:10:36 +08:00
7c23c16280 Update header_cors.conf 2024-08-26 12:29:41 +08:00
0f27552817 Update webstats_common.lua 2024-08-20 03:14:40 +08:00
7464789c8c Update commit.tpl 2024-08-16 13:35:34 +08:00
a1f9c023c7 update 2024-08-15 14:29:19 +08:00
9e8cdc2c49 Update fail2ban.conf 2024-08-15 14:28:32 +08:00
dc9b44f5f9 update 2024-08-15 14:27:52 +08:00
b7ea4bd6f1 update 2024-08-15 14:24:40 +08:00
65dddb798c Create fail2ban.bak.conf 2024-08-15 14:23:51 +08:00
2451f0b593 Update fail2ban.conf 2024-08-15 14:16:55 +08:00
418734eb31 Update index.py 2024-08-15 14:13:24 +08:00
fce7fe4fe3 Update install.sh 2024-08-15 13:18:25 +08:00
e31407527f Update site_api.py 2024-08-15 09:36:33 +08:00
9250e81059 Update nosql_mongodb.py 2024-08-10 12:55:15 +08:00
f54f9c6736 update 2024-08-09 21:41:59 +08:00
54135a88f9 Update mongodb.js 2024-08-09 21:08:28 +08:00
Mr Chen
5b219708db Merge pull request #621 from midoks/dev
一些简单优化
2024-08-09 16:37:50 +08:00
b62a5e457b Update app.js 2024-08-09 14:24:48 +08:00
3af325f0c4 update 2024-08-09 14:15:26 +08:00
514ced2cc6 update 2024-08-09 01:46:39 +08:00
55cdf6c0cf Update linux.conf 2024-08-08 22:14:14 +08:00
00cd6e4309 Update cmd.md 2024-08-06 13:21:11 +08:00
03012d8296 Update cmd.md 2024-08-06 13:21:04 +08:00
b4952dbb20 update 2024-08-06 13:14:43 +08:00
9123cedf4c Update mw.tpl 2024-08-06 13:03:17 +08:00
1c9fbfc2eb Update mw.tpl 2024-08-06 13:01:22 +08:00
d6e182b94f Update mw.tpl 2024-08-06 13:01:05 +08:00
e48e56f36a Update info.json 2024-08-02 04:19:03 +08:00
adde6acf4d Update gorse.toml 2024-08-02 04:18:10 +08:00
e929aa0875 Update gorse.js 2024-08-02 04:11:06 +08:00
f784376486 Update index.py 2024-08-02 04:04:30 +08:00
7c0d0f4a07 gorse init 2024-08-02 04:00:41 +08:00
e25804998d PHP默认隐藏版本号 2024-07-30 01:12:53 +08:00
6e69f843a0 update 2024-07-29 19:49:53 +08:00
978d2878a4 Update plugins_api.py 2024-07-29 14:02:45 +08:00
675ea86b83 Update install.sh 2024-07-29 12:44:32 +08:00
c2be36b8b3 Update install.sh 2024-07-29 12:25:31 +08:00
938e204691 Create euler.sh 2024-07-29 12:24:14 +08:00
70eb911e58 Update getos.sh 2024-07-29 12:22:59 +08:00
0440d0f286 update 2024-07-29 11:57:35 +08:00
9651a88d67 update 2024-07-29 11:55:13 +08:00
6b8d2622b4 Update install.sh 2024-07-29 11:52:15 +08:00
e743499825 Update install.sh 2024-07-29 11:49:33 +08:00
127535c7d4 Update install.sh 2024-07-29 11:48:15 +08:00
0a322c9fed Update index.html 2024-07-28 22:34:05 +08:00
db36c34332 Update index.py 2024-07-28 21:41:21 +08:00
6c00e8c350 Update index.py 2024-07-28 20:20:34 +08:00
4e21b136d7 Update index.py 2024-07-28 20:18:34 +08:00
407b317f01 Update index.py 2024-07-28 20:15:22 +08:00
eb55ff7c30 Update install.sh 2024-07-28 20:13:25 +08:00
3729146b80 Update install.sh 2024-07-28 20:01:01 +08:00
48636eae43 Update fail2ban.js 2024-07-28 19:59:24 +08:00
ae62bee78d update 2024-07-28 19:54:38 +08:00
d0f33a0813 Update index.py 2024-07-28 19:42:54 +08:00
6627b67692 update 2024-07-28 19:39:44 +08:00
32f58e6323 Update index.py 2024-07-28 19:36:37 +08:00
4c82688f7d Update index.py 2024-07-28 19:28:46 +08:00
479ed7ac1e Update install.sh 2024-07-28 19:26:45 +08:00
1320a8aad1 Update install.sh 2024-07-28 19:26:19 +08:00
ed1b1322fa Update info.json 2024-07-28 19:24:28 +08:00
b9b61d1462 update 2024-07-28 19:24:07 +08:00
fc982674f8 fail2ban init 2024-07-28 19:22:17 +08:00
Mr Chen
3e51722085 Merge pull request #620 from midoks/dev
0.17.2
2024-07-26 23:08:01 +08:00
d5f5287ca3 Update README.md 2024-07-26 23:06:46 +08:00
f0f491fa86 Update README.md 2024-07-26 23:05:02 +08:00
bbaa00a479 Update README.md 2024-07-26 23:03:43 +08:00
6df248ec22 Update config_api.py 2024-07-26 22:59:43 +08:00
eae61c827d Update cert_api.py 2024-07-26 22:58:38 +08:00
eed5c91435 Update redis_simple.conf 2024-07-26 22:52:55 +08:00
9e09952471 update 2024-07-26 19:22:57 +08:00
46a3591019 Update index.py 2024-07-26 17:00:52 +08:00
5419a01b5c Update cert_api.py 2024-07-26 12:59:59 +08:00
3770ebc0f3 Update cert_api.py 2024-07-26 12:58:52 +08:00
209ae03e63 Update cert_api.py 2024-07-26 12:44:52 +08:00
fc7609874d Update cert_api.py 2024-07-26 12:43:32 +08:00
3c99f17158 Update cert_api.py 2024-07-26 12:18:04 +08:00
6fb3a52e31 Update my.cnf 2024-07-25 15:37:06 +08:00
4f6a626e3e Update install.sh 2024-07-25 13:57:48 +08:00
7021015a66 Update install.sh 2024-07-25 13:33:00 +08:00
185c5cb45b Update ubuntu.sh 2024-07-25 12:34:37 +08:00
011d3dccaa update 2024-07-25 12:30:09 +08:00
a629eeac55 Update ubuntu.sh 2024-07-25 12:29:28 +08:00
d3ce4a1aac Update firewall_api.py 2024-07-25 12:23:00 +08:00
8ff13fac5b Update install.sh 2024-07-25 02:43:57 +08:00
d5c232201b update 2024-07-25 01:27:44 +08:00
fb4e16790e Update install.sh 2024-07-25 00:53:35 +08:00
be4cdd194d Update install.sh 2024-07-25 00:52:07 +08:00
398165d832 update 2024-07-25 00:49:00 +08:00
7d70fdcd1d Update install.sh 2024-07-25 00:39:29 +08:00
5c33504582 Update install.sh 2024-07-25 00:39:04 +08:00
e4223a7a58 Update install.sh 2024-07-25 00:36:34 +08:00
f2d5e166da Update install.sh 2024-07-25 00:36:11 +08:00
55d0f2fad8 Update install.sh 2024-07-25 00:35:43 +08:00
58068a06dd Update install.sh 2024-07-25 00:34:59 +08:00
01a76ff5de Update install.sh 2024-07-24 23:16:36 +08:00
53dd0d81e7 update 2024-07-24 23:07:08 +08:00
8d4b5e8403 Update install.sh 2024-07-24 22:31:25 +08:00
c6e491a9bc Update install.sh 2024-07-24 22:19:39 +08:00
55f6a3189c Update install.sh 2024-07-24 22:19:31 +08:00
dfaa041843 update 2024-07-24 21:03:48 +08:00
0bcf0465a6 Update plugins_api.py 2024-07-24 20:56:15 +08:00
517c65b790 Update plugins_api.py 2024-07-24 20:55:42 +08:00
4bda6ab1b1 Update cert_api.py 2024-07-24 20:53:58 +08:00
5a71ec8d6c Update index.py 2024-07-24 14:48:47 +08:00
f622ea6779 update 2024-07-24 14:46:10 +08:00
875db69bcf Update index.py 2024-07-24 14:33:47 +08:00
97a07b4955 Update index.py 2024-07-24 14:32:35 +08:00
0912360794 Update index.py 2024-07-24 14:30:42 +08:00
bfc2a82384 Update install.sh 2024-07-24 14:26:08 +08:00
6f02ccf6e7 update 2024-07-24 14:21:36 +08:00
36e7085ce0 update 2024-07-24 14:10:30 +08:00
044f130671 update 2024-07-24 14:04:38 +08:00
bf95d50cfd Update install.sh 2024-07-24 14:03:22 +08:00
63349ce33b Update index.py 2024-07-24 13:48:03 +08:00
3618940713 Update index.py 2024-07-24 13:45:17 +08:00
f5f9064c52 Update index.py 2024-07-24 13:45:08 +08:00
fd8bda7f48 Update index.py 2024-07-24 13:44:51 +08:00
5e9b5466a6 Update ubuntu.sh 2024-07-24 13:43:15 +08:00
82a0fde37c Update index.py 2024-07-24 13:40:53 +08:00
72367c40fe update 2024-07-24 13:29:14 +08:00
b8502c7459 update 2024-07-24 13:22:26 +08:00
6b33cfe6bb update 2024-07-24 13:16:21 +08:00
81e61a469e Update index.py 2024-07-24 13:08:04 +08:00
267213efc1 Update install.sh 2024-07-24 12:57:12 +08:00
03ca9512a4 Update index.py 2024-07-24 12:33:44 +08:00
e77b24a213 Update index.py 2024-07-24 12:30:50 +08:00
6118c49335 Update index.py 2024-07-24 12:21:08 +08:00
843321dfe5 Update install.sh 2024-07-24 12:13:47 +08:00
bd13bc8d68 Update index.py 2024-07-24 12:08:18 +08:00
9f8af72c70 Update index.py 2024-07-24 12:07:00 +08:00
50e3173706 Update index.py 2024-07-24 12:06:53 +08:00
a43bfbebab Update index.py 2024-07-24 12:02:38 +08:00
ffaac9553e Update cert_api.py 2024-07-24 01:26:50 +08:00
f480cbeda4 Update cert_api.py 2024-07-24 01:26:14 +08:00
e8a72a0b7a Update cert_api.py 2024-07-24 01:23:15 +08:00
b4b14d2c28 Update cert_api.py 2024-07-24 01:21:25 +08:00
672ebb013f Update cert_api.py 2024-07-24 01:20:47 +08:00
8e5f1ae809 Update cert_api.py 2024-07-24 01:17:49 +08:00
1cf77806ba Update cert_api.py 2024-07-24 01:17:34 +08:00
d1a6c61bd8 Update install.sh 2024-07-24 01:15:47 +08:00
e15cb57c27 Update update.sh 2024-07-24 01:09:02 +08:00
c187c36c51 Update update_dev.sh 2024-07-24 01:07:56 +08:00
5bec8e0c38 Update install_dev.sh 2024-07-24 01:04:16 +08:00
ed4a58025b Update phplib.conf 2024-07-24 00:46:26 +08:00
67178757c0 Update common.sh 2024-07-24 00:44:16 +08:00
d4679e2b5c Update common.sh 2024-07-24 00:44:08 +08:00
7b8ecd520c Delete yaf.sh 2024-07-24 00:42:09 +08:00
f2c188b245 Update yaf.sh 2024-07-24 00:36:09 +08:00
8ca6c32a76 Update yaf.sh 2024-07-24 00:35:43 +08:00
e6ac37644b Create yaf.sh 2024-07-24 00:32:43 +08:00
048df7e1e7 Update install.sh 2024-07-24 00:16:21 +08:00
73f0ed73d4 update 2024-07-23 23:17:02 +08:00
4ce9a8cc0f Update ioncube.sh 2024-07-23 22:30:13 +08:00
3c6538565e Update phalcon.sh 2024-07-23 22:27:29 +08:00
995fa234d9 Update phalcon.sh 2024-07-23 22:24:31 +08:00
efa9890019 Update phplib.conf 2024-07-23 22:19:56 +08:00
d7f710d3e0 Update phplib.conf 2024-07-23 22:12:11 +08:00
552cab5632 Update phplib.conf 2024-07-23 22:10:27 +08:00
4d32683e66 Update index.py 2024-07-23 21:48:30 +08:00
2cd41b91f5 Create install.sh 2024-07-23 21:47:58 +08:00
d26f840b68 Update phplib.conf 2024-07-23 21:43:52 +08:00
93ddd3c2c4 Update yar.sh 2024-07-23 21:42:42 +08:00
95dcd4c04d Update yaf.sh 2024-07-23 21:42:16 +08:00
a886359e94 Update yar.sh 2024-07-23 21:35:43 +08:00
1d48010a0d Update phplib.conf 2024-07-23 21:31:47 +08:00
b220628ca1 Update phplib.conf 2024-07-23 21:28:12 +08:00
c7a8ca2ec9 Update install.sh 2024-07-23 21:23:56 +08:00
9720cf7a69 update 2024-07-23 21:22:35 +08:00
4eb33806bf Update info.json 2024-07-23 20:43:32 +08:00
3d12bbcdd1 Update info.json 2024-07-23 20:43:06 +08:00
fa8b2aefb7 Update info.json 2024-07-23 18:55:29 +08:00
e08bea00eb Update info.json 2024-07-23 16:17:00 +08:00
8427a0d9be update 2024-07-23 16:00:07 +08:00
79a44f4b15 Update index.py 2024-07-23 15:21:48 +08:00
2dba6e6816 Update index.py 2024-07-23 15:17:37 +08:00
258576963d Update index.py 2024-07-23 15:14:52 +08:00
68e9ffffe3 Update index.py 2024-07-23 15:14:13 +08:00
b26717eab3 Create my9.0.cnf 2024-07-23 15:08:54 +08:00
83810a8dd8 Update index.py 2024-07-23 15:05:11 +08:00
3ba6d5c3c4 Update index.py 2024-07-23 15:04:00 +08:00
c6b5a92e7d Update mysql9.0.service.tpl 2024-07-23 14:54:47 +08:00
8a5e2a45dc update 2024-07-23 14:52:50 +08:00
0fd5ef28e2 Update index.py 2024-07-23 14:42:57 +08:00
fcb5a44abe Create my9.0.cnf 2024-07-23 14:33:31 +08:00
fb83cb40df update 2024-07-23 14:28:09 +08:00
4211934490 update 2024-07-23 14:23:08 +08:00
4ca64694ff Update install.sh 2024-07-23 14:17:28 +08:00
75d13f3cc7 Update install.sh 2024-07-23 14:12:53 +08:00
db14ede309 Update install.sh 2024-07-23 14:04:37 +08:00
9e2d17f3f3 update 2024-07-23 14:03:43 +08:00
7af56e1c56 update 2024-07-23 14:02:57 +08:00
0c06ae6028 Update install.sh 2024-07-23 13:46:24 +08:00
c39076dfb7 Update install.sh 2024-07-23 12:50:13 +08:00
fd81666453 update 2024-07-23 12:49:46 +08:00
2e7afad20b update 2024-07-23 12:47:30 +08:00
c962c6f86a update 2024-07-23 12:43:11 +08:00
277939ba29 update 2024-07-23 11:02:30 +08:00
c7f3445e79 update 2024-07-23 11:00:46 +08:00
c1a1e80185 Update install.sh 2024-07-23 10:44:55 +08:00
16892d474e Update site_api.py 2024-07-23 00:52:56 +08:00
167977a3d1 Update site_api.py 2024-07-23 00:50:01 +08:00
bc876232f9 Update site_api.py 2024-07-23 00:49:43 +08:00
d529ff596b Update __init__.py 2024-07-23 00:45:14 +08:00
c7cad36fde Update cert_api.py 2024-07-23 00:17:38 +08:00
b299d5f74b Update cert_api.py 2024-07-23 00:17:10 +08:00
20df24ca80 Update cert_api.py 2024-07-23 00:16:59 +08:00
2482a24898 Update info.json 2024-07-22 23:30:24 +08:00
9621f112d1 update 2024-07-22 23:13:15 +08:00
82e2ee2aea Update ubuntu.sh 2024-07-22 23:05:33 +08:00
Mr Chen
b602ab678f Merge pull request #619 from midoks/dev
update
2024-07-20 19:25:15 +08:00
03a5f750ec Update install.sh 2024-07-20 19:24:52 +08:00
e3888244ac update 2024-07-20 19:00:27 +08:00
d0a513d64d Update zabbix.js 2024-07-20 18:38:57 +08:00
26817c7e61 update 2024-07-20 18:35:32 +08:00
cad77c69d9 update 2024-07-20 17:49:25 +08:00
ad0b667ed2 update 2024-07-20 17:43:29 +08:00
bc6c1886b9 Update index.py 2024-07-20 17:37:08 +08:00
084843586e Update zabbix_agentd.conf 2024-07-20 17:32:38 +08:00
981e320664 Update index.py 2024-07-20 17:29:22 +08:00
e57e043edf Update README.md 2024-07-20 14:33:13 +08:00
Mr Chen
5045af850f Merge pull request #618 from midoks/dev
增加zabbix插件
2024-07-20 14:32:37 +08:00
59f80800c3 Update index.py 2024-07-20 14:27:37 +08:00
ae4db462b0 Update index.py 2024-07-20 14:19:10 +08:00
ab939aa359 Update index.py 2024-07-20 14:16:58 +08:00
e90c4a0e19 Update opensuse.sh 2024-07-20 13:39:25 +08:00
bed6b7c347 Update opensuse.sh 2024-07-20 13:22:37 +08:00
f626291e2e Update opensuse.sh 2024-07-20 13:10:55 +08:00
996e452966 Update index.py 2024-07-20 13:06:50 +08:00
d32ccbce0c update_dev 2024-07-20 13:01:23 +08:00
72b44bcceb Update install.sh 2024-07-20 12:47:40 +08:00
ed02c3bad6 Update install.sh 2024-07-20 12:46:06 +08:00
86deba3111 Update install.sh 2024-07-20 12:32:39 +08:00
dbc7fc08a8 Update install.sh 2024-07-20 12:30:52 +08:00
948dadcf57 Update install.sh 2024-07-20 12:29:31 +08:00
f0a7ceb255 Update install.sh 2024-07-20 12:25:58 +08:00
c14bd47ad2 update 2024-07-20 12:25:27 +08:00
0824c0f509 Update install.sh 2024-07-20 12:24:29 +08:00
0177e3d7bb update 2024-07-20 12:24:07 +08:00
159701e840 Create opensuse.sh 2024-07-20 12:16:42 +08:00
1c47a4cc2f update 2024-07-20 12:16:00 +08:00
f9caafcb86 update 2024-07-20 12:09:40 +08:00
da6d8aa797 Update opensuse.sh 2024-07-20 12:08:24 +08:00
88a846aef1 Update opensuse.sh 2024-07-20 12:06:02 +08:00
6ee0780fec update 2024-07-20 12:04:37 +08:00
116549329c Update install.sh 2024-07-20 11:41:19 +08:00
11d90b704a Update install.sh 2024-07-20 11:41:06 +08:00
8bdc60e75a Update install.sh 2024-07-20 11:39:58 +08:00
7fd3e4e0a7 update 2024-07-20 11:39:17 +08:00
18ed21b36a Update index.py 2024-07-20 11:32:58 +08:00
b77801112f Update zabbix.js 2024-07-20 11:09:11 +08:00
efb237c783 Update centos.sh 2024-07-20 10:30:55 +08:00
15375c575a update 2024-07-20 10:30:24 +08:00
e5dc00dbd3 Update index.py 2024-07-20 10:26:30 +08:00
8d8231f787 Create centos.sh 2024-07-20 10:21:15 +08:00
025ed5aa5a Create rocky.sh 2024-07-20 03:25:43 +08:00
b62d228ec8 Update index.py 2024-07-20 03:09:49 +08:00
01894ad91e Update index.py 2024-07-20 03:09:29 +08:00
ee3258196b Update index.py 2024-07-20 03:08:52 +08:00
b1ce9fb05e Update index.py 2024-07-20 03:07:33 +08:00
2c996b0a41 Update index.py 2024-07-20 03:06:19 +08:00
e4ded8950e Update install.sh 2024-07-20 03:03:10 +08:00
11a69cfb8b Update index.py 2024-07-20 03:00:06 +08:00
85fa8fcbd1 update 2024-07-20 02:51:09 +08:00
68b2bcee33 Create rocky.sh 2024-07-20 02:38:44 +08:00
1796eecc9b Create rocky.sh 2024-07-20 02:37:58 +08:00
d6b0601f74 Update index.py 2024-07-20 02:29:00 +08:00
2c250ee67c Update index.py 2024-07-20 02:28:41 +08:00
5b451e211f Update index.py 2024-07-20 02:26:13 +08:00
1389f210de Update index.py 2024-07-20 02:25:19 +08:00
b0f0706dfd Update index.py 2024-07-20 02:23:39 +08:00
8f66e8c39e Update index.py 2024-07-20 02:22:56 +08:00
3c788afce6 Update zabbix_server6.conf 2024-07-20 02:21:16 +08:00
e03ada5191 Update zabbix_server6.conf 2024-07-20 02:21:02 +08:00
7998177e03 Update zabbix_server6.conf 2024-07-20 02:18:40 +08:00
aef54656d2 update 2024-07-20 02:16:43 +08:00
9b52fee2a7 Update index.py 2024-07-20 01:53:29 +08:00
f89be00419 Update index.py 2024-07-20 01:48:36 +08:00
bad4415650 Update index.py 2024-07-20 01:46:13 +08:00
e5f3e85f8b Update install.sh 2024-07-20 01:32:12 +08:00
0c45a5035b Create alma.sh 2024-07-20 01:21:07 +08:00
c3347fcb28 Update alma.sh 2024-07-20 01:18:21 +08:00
a97e8ceee5 Update index.py 2024-07-20 01:16:19 +08:00
87da782cc3 Update index.py 2024-07-20 01:14:59 +08:00
7416be6680 Update phplib.conf 2024-07-20 01:11:34 +08:00
df8eb7f9ef Update phplib.conf 2024-07-20 01:06:44 +08:00
8198ea6941 Update phplib.conf 2024-07-20 01:02:03 +08:00
6f7513a013 Update install.sh 2024-07-20 00:58:48 +08:00
5f163b0661 Update index.py 2024-07-20 00:57:36 +08:00
11a9bd2ecc Update index.py 2024-07-20 00:57:31 +08:00
1e6f143eb7 Update install.sh 2024-07-20 00:57:10 +08:00
b99bd5fded Update install.sh 2024-07-20 00:56:16 +08:00
442896eadc Update index.py 2024-07-20 00:50:41 +08:00
38c7b2d44e Update index.py 2024-07-20 00:50:23 +08:00
662e983f01 Update index.py 2024-07-20 00:46:41 +08:00
de402e9996 Update install.sh 2024-07-20 00:22:07 +08:00
69fc4323f3 Update index.py 2024-07-20 00:08:19 +08:00
617a986325 Update index.py 2024-07-20 00:02:35 +08:00
c09c7fa1a8 Update index.py 2024-07-19 23:59:57 +08:00
2b43680099 Update ubuntu.sh 2024-07-19 23:59:32 +08:00
c1bb8ad7a6 Update zabbix.nginx.conf 2024-07-19 23:57:10 +08:00
f59c68edb8 Update index.py 2024-07-19 23:55:50 +08:00
85ae2ff349 Update install.sh 2024-07-19 23:50:45 +08:00
b52635c747 Update ubuntu.sh 2024-07-19 23:41:41 +08:00
d09c8ac98f Create ubuntu.sh 2024-07-19 23:38:33 +08:00
1921deb7e3 update 2024-07-19 23:37:27 +08:00
a21c7eac02 update 2024-07-19 23:33:39 +08:00
50ab9c21cd Update index.py 2024-07-19 23:31:21 +08:00
edd1b34217 Update index.py 2024-07-19 23:08:05 +08:00
c1f165bfa3 Create ubuntu.sh 2024-07-19 20:16:24 +08:00
799be0fd3e Update index.py 2024-07-19 19:48:54 +08:00
1f8c975c4d Update zabbix_server.conf 2024-07-19 19:43:45 +08:00
b10967bfad Create server6.0.sql.gz 2024-07-19 19:39:51 +08:00
835cf6ad8f update 2024-07-19 19:34:28 +08:00
6b55a4e0ca Update index.py 2024-07-19 19:30:39 +08:00
aa3a5a90c4 Update index.py 2024-07-19 19:30:08 +08:00
5f34d52542 Update index.py 2024-07-19 19:28:52 +08:00
ad49cadfb8 Update index.py 2024-07-19 19:28:42 +08:00
b4c00a2d27 Update index.py 2024-07-19 19:28:17 +08:00
42dfe63c2f Update index.py 2024-07-19 19:26:53 +08:00
4fa2588b66 Update index.py 2024-07-19 19:26:32 +08:00
a3227a681a Update index.py 2024-07-19 19:26:09 +08:00
1abbaa29ff Update info.json 2024-07-19 19:22:37 +08:00
b783a90d81 update 2024-07-19 19:14:21 +08:00
263243ecd4 update 2024-07-19 19:13:04 +08:00
5942c2e822 Update index.py 2024-07-19 19:11:05 +08:00
0a87dcc610 Update index.py 2024-07-19 19:08:27 +08:00
a80e1db128 Update index.py 2024-07-19 17:36:37 +08:00
fad851edea Update index.py 2024-07-19 17:16:50 +08:00
4d23d7d354 Update index.py 2024-07-19 17:09:11 +08:00
a19fe7b0b5 Update index.py 2024-07-19 16:51:49 +08:00
15096e7954 Update index.py 2024-07-19 14:58:18 +08:00
2da9b59ae9 update 2024-07-19 14:55:59 +08:00
c4cda94309 update 2024-07-19 14:52:13 +08:00
d32dd19dd0 Update debian.sh 2024-07-19 11:59:38 +08:00
269d0dc57e update 2024-07-19 11:47:58 +08:00
bd221e2c75 Update debian.sh 2024-07-18 23:06:48 +08:00
eb26c7d4e1 Create alma.sh 2024-07-18 21:11:44 +08:00
4de0ecb5cc Update centos.sh 2024-07-18 13:52:45 +08:00
5753e3fb51 Update centos.sh 2024-07-18 12:53:51 +08:00
14cf933487 update 2024-07-18 12:33:51 +08:00
df240ac681 Update centos.sh 2024-07-18 12:23:11 +08:00
cf2d53fe0d Update index.py 2024-07-18 12:18:21 +08:00
520f46441e Update index.py 2024-07-18 12:13:08 +08:00
be1117ba31 Update index.py 2024-07-18 12:07:38 +08:00
e35ff2da63 Update centos.sh 2024-07-18 11:59:24 +08:00
99f91768ad Update centos.sh 2024-07-18 11:29:09 +08:00
d8e6e63b90 Update info.json 2024-07-18 00:58:25 +08:00
9f4a3ed53d Update index.py 2024-07-17 19:41:01 +08:00
b06dd84f6b Create centos.sh 2024-07-17 19:38:37 +08:00
bf77d84227 Update index.py 2024-07-17 19:34:33 +08:00
1ff24a2835 update 2024-07-17 19:32:19 +08:00
a10f31f4fb update 2024-07-17 17:19:26 +08:00
c47dac6731 update 2024-07-17 13:09:20 +08:00
0de883b5b1 Update debian.sh 2024-07-17 12:26:04 +08:00
a160b5bfac Update zabbix.js 2024-07-17 12:22:03 +08:00
d7580842a8 Update debian.sh 2024-07-16 20:18:43 +08:00
40dfc60079 Update debian.sh 2024-07-16 20:17:31 +08:00
bfa593ea46 update 2024-07-16 19:29:25 +08:00
68de2d2c5f Update debian.sh 2024-07-16 18:36:26 +08:00
e883ccfb62 Update debian.sh 2024-07-16 18:14:41 +08:00
2f530d8c9e Update debian.sh 2024-07-16 18:14:12 +08:00
43e7363535 Update install.sh 2024-07-16 18:08:03 +08:00
fbe8a06d0b Update install.sh 2024-07-16 18:07:01 +08:00
421757e88a Update install.sh 2024-07-16 18:06:47 +08:00
07340dc68c Update index.py 2024-07-16 17:52:51 +08:00
f7559f6a55 Update index.py 2024-07-16 17:36:39 +08:00
dd45fb47d6 Update index.py 2024-07-16 17:35:44 +08:00
d2ade7aa90 Update index.py 2024-07-16 17:31:55 +08:00
7bed4cda8e Update index.py 2024-07-16 17:28:54 +08:00
24c37d5b92 Update index.py 2024-07-16 17:18:10 +08:00
c03add82a5 Update debian.sh 2024-07-16 17:13:15 +08:00
6f443ef414 Update debian.sh 2024-07-16 17:13:05 +08:00
939b44699f Update debian.sh 2024-07-16 17:09:32 +08:00
db5f979149 Update install.sh 2024-07-16 17:09:16 +08:00
ded03b5c46 update 2024-07-16 17:05:02 +08:00
f755a39589 update 2024-07-16 17:02:52 +08:00
788c097a50 Update zabbix_server.conf 2024-07-16 15:53:53 +08:00
3fe4c80784 Update zabbix.conf.php 2024-07-16 15:31:58 +08:00
74ae353761 Update debian.sh 2024-07-16 15:25:26 +08:00
05d62c7105 Update index.py 2024-07-16 15:24:36 +08:00
79ffa0b5b1 Update zabbix_server.conf 2024-07-16 15:23:59 +08:00
ec68096e52 Update debian.sh 2024-07-16 15:20:22 +08:00
2e79def40d Update zabbix_server.conf 2024-07-16 15:00:33 +08:00
c0fbf71a8e Update index.py 2024-07-16 14:09:56 +08:00
cb62e367ec Update index.py 2024-07-16 14:07:47 +08:00
1608fae975 Update index.py 2024-07-16 13:52:34 +08:00
8d1ce42004 Update zabbix.js 2024-07-16 12:30:42 +08:00
fd7314b603 Update index.py 2024-07-16 12:28:16 +08:00
e2433964e9 Update zabbix_agentd.conf 2024-07-16 12:26:44 +08:00
9ef7b36998 update 2024-07-16 12:12:21 +08:00
9ae7fd716c Update index.py 2024-07-16 12:11:23 +08:00
7fbc7bef5e Update index.py 2024-07-16 12:11:14 +08:00
43bab2a80e update 2024-07-16 12:07:53 +08:00
b4eaec1ca5 Update debian.sh 2024-07-16 12:02:12 +08:00
c391e54ee5 Update debian.sh 2024-07-16 12:01:54 +08:00
0c226b1fc7 update 2024-07-16 11:38:17 +08:00
b218874a2b Update index.py 2024-07-16 11:32:21 +08:00
fce367075d update 2024-07-16 11:28:29 +08:00
f06b5004e2 Update index.py 2024-07-16 11:25:04 +08:00
03c5191e89 zabbix_agent 初始化 2024-07-16 11:13:08 +08:00
492ac0bb60 Update install.sh 2024-07-16 02:37:44 +08:00
9ab9330671 Update index.py 2024-07-16 02:20:30 +08:00
9851b5406e update 2024-07-16 02:15:29 +08:00
19e10199e0 Update index.py 2024-07-16 02:09:30 +08:00
f11b1b3219 Update index.py 2024-07-16 02:02:28 +08:00
49c37fa307 Update index.py 2024-07-16 02:01:44 +08:00
d7fedc3118 Update zabbix_server.conf 2024-07-16 01:59:37 +08:00
0cd9f7f0d6 Update zabbix_server.conf.bak 2024-07-16 01:59:24 +08:00
82f6b8cb56 update 2024-07-16 01:59:08 +08:00
1f723ab8e0 Update index.py 2024-07-16 01:44:36 +08:00
9496968fbb Update zabbix.js 2024-07-16 01:42:25 +08:00
c1e66ac574 Update debian.sh 2024-07-16 01:41:43 +08:00
0b6506885a Update index.py 2024-07-16 01:39:57 +08:00
d018163ef2 Update zabbix.js 2024-07-16 01:32:37 +08:00
d89ab5c45f Update index.py 2024-07-16 01:30:57 +08:00
c3c536632d Update index.py 2024-07-16 01:27:17 +08:00
b73070231e update 2024-07-16 01:21:07 +08:00
a9c0c0d1d2 Update index.py 2024-07-16 00:49:25 +08:00
f65b16723b Update index.py 2024-07-16 00:45:42 +08:00
69f828b169 Update index.py 2024-07-16 00:44:16 +08:00
dbf0b963bd Update zabbix.js 2024-07-16 00:35:20 +08:00
5c20185426 update 2024-07-16 00:34:44 +08:00
f976b8c315 update 2024-07-16 00:31:46 +08:00
d5fac8bb07 Update index.py 2024-07-16 00:30:50 +08:00
c33431a2fc Update index.html 2024-07-16 00:29:58 +08:00
23ba7bf636 Update index.py 2024-07-15 23:22:36 +08:00
232f992203 Update index.py 2024-07-15 23:20:42 +08:00
4438d5a8b4 Update index.py 2024-07-15 23:20:23 +08:00
ca213242fd Update debian.sh 2024-07-15 23:17:53 +08:00
360221aa7a Update debian.sh 2024-07-15 23:17:39 +08:00
987f56331b Update index.py 2024-07-15 23:15:29 +08:00
8ee23d694f Update index.py 2024-07-15 23:13:12 +08:00
0f93997aed Update index.py 2024-07-15 23:09:54 +08:00
012bc92042 update 2024-07-15 23:09:49 +08:00
ef6fdfc71c Update index.py 2024-07-15 22:56:50 +08:00
150d8e30b0 Update index.py 2024-07-15 22:51:52 +08:00
491927a32c Update index.py 2024-07-15 22:47:09 +08:00
f5020404df Update index.py 2024-07-15 20:03:26 +08:00
d4ddf22e5b Update index.py 2024-07-15 16:39:48 +08:00
45b30dc38e Update index.py 2024-07-15 16:11:45 +08:00
fed57f1f68 Update index.py 2024-07-15 16:11:12 +08:00
6d02d6a85f update 2024-07-15 16:00:05 +08:00
39bc0ff55d Update debian.sh 2024-07-15 15:47:57 +08:00
9e0f045696 Update zabbix.nginx.conf 2024-07-15 15:46:54 +08:00
2d1897fe62 Update install.sh 2024-07-15 15:46:18 +08:00
b35107016e Update zabbix.nginx.conf 2024-07-15 15:40:43 +08:00
67f5342be4 Update index.py 2024-07-15 15:07:21 +08:00
835796a9b1 Update index.html 2024-07-15 13:06:38 +08:00
b32fe10047 Update zabbix.nginx.conf 2024-07-15 12:17:47 +08:00
43bdff7af1 Update index.py 2024-07-15 12:09:20 +08:00
6628e135fc up 2024-07-15 02:36:09 +08:00
e94dc60f28 Update info.json 2024-07-14 18:54:59 +08:00
8a4453ec84 Update install.sh 2024-07-14 18:47:05 +08:00
1916e4c34a Update install.sh 2024-07-14 18:45:50 +08:00
f2a54682a1 Update debian.sh 2024-07-14 18:44:25 +08:00
163903cc8a Update index.py 2024-07-14 18:42:07 +08:00
6653f0b8ee Update install.sh 2024-07-14 18:31:06 +08:00
7fa0200889 Update index.py 2024-07-14 18:30:37 +08:00
7bf0611d67 Update debian.sh 2024-07-14 18:28:12 +08:00
1cd3c3df17 Update debian.sh 2024-07-14 18:28:02 +08:00
e9ff82f0a3 zabbix初始化 2024-07-14 18:24:30 +08:00
e381309ba7 Update info.json 2024-07-14 18:02:52 +08:00
Mr Chen
bd6d063a49 Merge pull request #617 from midoks/dev
增加插件simpleping及其他问题解决
2024-07-14 15:43:37 +08:00
de1e1401b9 Update index.py 2024-07-14 15:24:40 +08:00
52bb6099d7 Update index.py 2024-07-14 15:22:45 +08:00
f42ec4973a Update index.py 2024-07-14 15:20:38 +08:00
ba8374cc5a Update index.py 2024-07-14 15:17:55 +08:00
d1f0ee9c20 update 2024-07-14 15:15:33 +08:00
2a934daf89 Update mariadb.js 2024-07-14 14:45:39 +08:00
ac0fab2f2b update 2024-07-14 13:06:11 +08:00
ffab97d4c8 update 2024-07-14 12:58:33 +08:00
f51ed6115d update 2024-07-14 12:51:19 +08:00
f126015e70 Update simpleping.js 2024-07-13 22:07:05 +08:00
699f71e636 update 2024-07-13 22:05:27 +08:00
88a7431067 update 2024-07-13 14:25:49 +08:00
bf256c6e60 update 2024-07-12 18:14:51 +08:00
0c718229d1 Update simpleping_index.py 2024-07-11 15:20:11 +08:00
2366a4e551 update 2024-07-11 15:17:57 +08:00
81bddd7eee Update simpleping.js 2024-07-11 13:43:00 +08:00
35f2791c72 Update simpleping_index.py 2024-07-11 13:32:16 +08:00
0dbbbf4359 Update simpleping_index.py 2024-07-11 13:28:44 +08:00
04b7e07e90 Update simpleping_index.py 2024-07-11 13:24:31 +08:00
85c84b64c4 Update install.sh 2024-07-11 04:38:02 +08:00
b0014c0477 Update install.sh 2024-07-11 04:37:55 +08:00
a53ad5d1b1 Update install.sh 2024-07-11 04:37:37 +08:00
73a418376d Update mw.tpl 2024-07-11 04:33:51 +08:00
437088663e Update simpleping.js 2024-07-11 04:18:29 +08:00
9db5188d30 update 2024-07-11 04:17:47 +08:00
53563cb130 Update simpleping.js 2024-07-11 04:11:25 +08:00
c989644c6f Update simpleping.js 2024-07-11 04:05:36 +08:00
c2a55f2658 Update install.sh 2024-07-11 03:57:20 +08:00
8ca63c0396 update 2024-07-11 03:50:31 +08:00
3b1fcac0aa Update index.py 2024-07-11 03:27:33 +08:00
7c093617f5 update 2024-07-11 03:04:23 +08:00
9e2f1dc172 Update simpleping.js 2024-07-11 02:55:31 +08:00
25591dc3e5 Update install.sh 2024-07-11 02:54:14 +08:00
4596a3a73c Update install.sh 2024-07-11 02:49:19 +08:00
818ab604e2 update 2024-07-11 02:35:33 +08:00
04e18490fb Update db.py 2024-07-11 01:06:53 +08:00
b519bb5522 plugins ping init 2024-07-11 00:37:08 +08:00
9d8e76faec update 2024-07-10 11:49:41 +08:00
cbdfb1a033 update 2024-07-08 23:08:36 +08:00
8b10a5839a Update push_ad.py 2024-07-08 23:01:20 +08:00
905cecc060 Update ubuntu.sh 2024-07-05 16:13:57 +08:00
486cf03c79 Update ubuntu.sh 2024-07-05 14:48:48 +08:00
735b669d44 Update ubuntu.sh 2024-07-05 14:48:15 +08:00
Mr Chen
489caa6070 Merge pull request #616 from midoks/dev
Update install.sh
2024-07-05 12:38:59 +08:00
f6284ed167 Update install.sh 2024-07-05 12:34:55 +08:00
Mr Chen
a843dd4a87 Merge pull request #615 from midoks/dev
Update index.py
2024-07-05 12:00:10 +08:00
b5c14926df Update index.py 2024-07-05 11:57:19 +08:00
Mr Chen
8b58c34e5b Merge pull request #614 from midoks/dev
Update index.py
2024-07-05 11:45:33 +08:00
f29d10b0b9 Update index.py 2024-07-05 11:38:43 +08:00
Mr Chen
ce15f78a56 Merge pull request #613 from midoks/dev
mysql>=8.0优化
2024-07-04 03:49:13 +08:00
033db86d3b up 2024-07-04 03:42:48 +08:00
7d32309183 Update index.py 2024-07-04 03:42:11 +08:00
353290cfa8 Update index.py 2024-07-04 03:37:42 +08:00
a7aa34795b update 2024-07-04 03:37:22 +08:00
994bc4aa6a Update index.py 2024-07-04 03:34:01 +08:00
9737d65592 Update index.py 2024-07-04 03:32:40 +08:00
e9ee66e932 Update index.py 2024-07-04 03:25:02 +08:00
42f66a2fb8 Update my8.0.cnf 2024-07-04 02:58:31 +08:00
5aaac1bdec Update my8.0.cnf 2024-07-04 02:58:00 +08:00
57a1721f62 Update my8.0.cnf 2024-07-04 02:57:39 +08:00
8134c3c9c0 update 2024-07-04 02:53:01 +08:00
cdaf64b41b Update index.py 2024-07-04 02:51:14 +08:00
5f5384f5aa Update index.py 2024-07-04 02:50:49 +08:00
a11e43f9a5 update 2024-07-04 02:47:57 +08:00
b76a9bf13c update 2024-07-04 02:33:09 +08:00
4653667ef1 Update mysql-apt.js 2024-07-04 02:30:35 +08:00
a1cc2f0147 update 2024-07-04 02:29:25 +08:00
d08b97415b Update mysql-apt.js 2024-07-04 02:26:28 +08:00
7fc9045688 Update index.py 2024-07-04 02:16:20 +08:00
d9f77537f1 Update index.py 2024-07-04 02:15:25 +08:00
bc8a874c68 update 2024-07-04 02:03:15 +08:00
8067c20e5a Update index.py 2024-07-04 02:01:59 +08:00
22526d5255 Update my8.0.cnf 2024-07-04 01:45:02 +08:00
83f846eb69 update 2024-07-04 01:42:12 +08:00
61a8bf0275 Update mysql-apt.js 2024-07-04 01:41:45 +08:00
1662c3ff3f update 2024-07-04 01:38:31 +08:00
41a1fa856c Update mw.tpl 2024-07-04 01:26:10 +08:00
eee5881ca7 Update lib.sh 2024-07-04 01:25:28 +08:00
3ce92f2477 Update lib.sh 2024-07-04 01:25:18 +08:00
4020ecff80 Update lib.sh 2024-07-04 01:15:40 +08:00
979b86b7cb update 2024-07-04 01:06:50 +08:00
26080ade0e Update index.py 2024-07-04 01:05:17 +08:00
4deb9c59ea Update index.py 2024-07-04 01:00:39 +08:00
Mr Chen
b640515243 Merge pull request #612 from midoks/dev
常规优化
2024-07-03 16:24:43 +08:00
130da4e311 Update mw.tpl 2024-07-03 16:19:12 +08:00
Mr Chen
dcca93baef Merge pull request #611 from midoks/dev
mysql修改同步账户
2024-07-01 13:34:08 +08:00
92525b0549 Update mariadb.js 2024-07-01 13:32:24 +08:00
fa0bca88b3 update 2024-07-01 13:31:22 +08:00
72961e3dca Update logs_api.py 2024-06-29 00:18:38 +08:00
7ac4000687 Update index.py 2024-06-28 22:37:20 +08:00
Mr Chen
3c0d0f9036 Merge pull request #610 from midoks/dev
计划任务优化2
2024-06-28 22:10:08 +08:00
790fa18e1b Update crontab.js 2024-06-28 22:05:16 +08:00
7b06b5533c Update crontab.js 2024-06-28 21:59:08 +08:00
9301783c3a Update crontab.js 2024-06-28 21:56:53 +08:00
39359ab783 Update crontab.js 2024-06-28 21:54:33 +08:00
a44be32cdc Update crontab.js 2024-06-28 21:51:51 +08:00
d4a4f238f2 Update index.py 2024-06-28 21:09:03 +08:00
60584ee79f Update index.py 2024-06-28 21:07:01 +08:00
Mr Chen
95845663f4 Merge pull request #609 from midoks/dev
计划任务优化
2024-06-28 20:13:54 +08:00
d1991b5c0d Update config_api.py 2024-06-28 20:11:53 +08:00
5448ba4611 Update crontab_api.py 2024-06-28 19:55:51 +08:00
11b59cdc41 Update crontab_api.py 2024-06-28 19:52:03 +08:00
05234cba77 Update logs_backup.py 2024-06-28 19:46:29 +08:00
f17c7f3d13 Update logs_backup.py 2024-06-28 19:35:06 +08:00
546792b733 update 2024-06-28 19:34:31 +08:00
4e38909ef2 Update logs_backup.py 2024-06-28 19:32:49 +08:00
d411439734 update 2024-06-28 19:23:29 +08:00
599d3ca8fc Update config_api.py 2024-06-28 19:19:59 +08:00
5a2bb0ca5c Update crontab.js 2024-06-28 19:18:53 +08:00
Mr Chen
a1492d4f3e Merge pull request #608 from midoks/dev
mysql-apt debian12 安装优化
2024-06-28 15:43:11 +08:00
aee881b302 Update install.sh 2024-06-28 15:39:38 +08:00
6287dc523d Update install.sh 2024-06-28 15:39:00 +08:00
a9a48aef39 update 2024-06-28 14:30:20 +08:00
ef861ef28e Update install.sh 2024-06-28 14:29:11 +08:00
9af9908ab2 Update index.py 2024-06-27 00:41:39 +08:00
29fd76fc91 Update index.py 2024-06-27 00:38:20 +08:00
Mr Chen
b69f978371 Merge pull request #607 from midoks/dev
sphinx 自动加入计划任务
2024-06-26 19:41:46 +08:00
89cea53d92 Update index.py 2024-06-26 19:27:13 +08:00
2a08d91021 Update index.py 2024-06-26 19:26:14 +08:00
c726bc48a9 Update index.py 2024-06-26 19:24:35 +08:00
69272110fb Update tool_cron.py 2024-06-26 19:20:23 +08:00
682502ff2b Update tool_cron.py 2024-06-26 19:19:00 +08:00
345eff8a0b Update tool_cron.py 2024-06-26 19:17:12 +08:00
dec8135478 Update index.py 2024-06-26 19:12:19 +08:00
60f37fa586 Update tool_cron.py 2024-06-26 19:06:38 +08:00
61849bb14e Update tool_cron.py 2024-06-26 19:05:08 +08:00
f32a40b53f Update index.py 2024-06-26 19:03:51 +08:00
4e2921f3b9 Update index.py 2024-06-26 19:01:30 +08:00
8652f3b2d8 Update index.py 2024-06-26 18:56:15 +08:00
d4f75fa0f1 Update index.py 2024-06-26 18:55:22 +08:00
93accf9ff3 Update index.py 2024-06-26 18:52:30 +08:00
22b06b36f9 Update index.py 2024-06-26 18:48:40 +08:00
b0a763f972 Update index.py 2024-06-26 18:48:35 +08:00
44e4dfb0bd Update index.py 2024-06-26 18:46:31 +08:00
80fe60211f update 2024-06-26 18:06:22 +08:00
0a1e47da4d Update index.py 2024-06-26 17:52:41 +08:00
a6acecb8c2 update 2024-06-26 17:49:26 +08:00
33cb0149f2 Update tool_cron.py 2024-06-26 17:46:37 +08:00
ff873d2e2d Update debian.sh 2024-06-26 17:33:12 +08:00
bc184f03cc update 2024-06-26 17:32:22 +08:00
b3147b9a2c Update sphinx.js 2024-06-26 16:37:20 +08:00
8a4e64a079 Update ftp_client.py 2024-06-22 13:21:56 +08:00
Mr Chen
24bb36e320 Merge pull request #604 from midoks/dev
优化2
2024-06-15 23:26:37 +08:00
285aa45de8 Update debian.sh 2024-06-15 23:25:10 +08:00
b9eee76b6e Update ubuntu.sh 2024-06-15 23:24:36 +08:00
e3bb8e6463 Update lib.sh 2024-06-15 23:22:12 +08:00
e72f33b201 Update lib.sh 2024-06-15 23:21:59 +08:00
22fe247707 Update install_dev.sh 2024-06-15 23:19:11 +08:00
a3a44e1494 Update install_dev.sh 2024-06-15 23:14:37 +08:00
9c3dcaf2ec Update debian.sh 2024-06-15 22:51:04 +08:00
2a088241da Update ubuntu.sh 2024-06-15 22:43:46 +08:00
ed8af0728b Update ubuntu.sh 2024-06-15 22:43:35 +08:00
cc01c5cbc1 Update debian.sh 2024-06-15 22:41:29 +08:00
828a079184 Update task_manager_index.py 2024-06-15 22:31:36 +08:00
189f73e522 Update plugins_api.py 2024-06-15 22:18:09 +08:00
692f51fe44 update 2024-06-15 22:11:51 +08:00
ddacecec9a Update plugins_api.py 2024-06-15 22:07:27 +08:00
af629be9e0 Update task_manager_index.py 2024-06-15 21:27:30 +08:00
dc76d41369 Update ubuntu.sh 2024-06-15 21:21:36 +08:00
Mr Chen
cc65840a1f Merge pull request #603 from midoks/dev
优化
2024-06-15 21:01:24 +08:00
dad72a1fe2 update 2024-06-15 20:53:04 +08:00
e43eff325b Update install_dev.sh 2024-06-15 20:32:11 +08:00
1a41f2d248 update 2024-06-15 20:28:11 +08:00
Mr Chen
58274ba9dc Merge pull request #602 from midoks/dev
php-apt,php-yum优化2
2024-06-14 17:18:34 +08:00
aa22501aac Update debian.sh 2024-06-14 17:15:56 +08:00
b74e733252 Update debian.sh 2024-06-14 17:15:11 +08:00
2cc714abf0 Update debian.sh 2024-06-14 17:14:35 +08:00
d86e6dd5c4 Update install.sh 2024-06-14 17:10:32 +08:00
31f7269ba5 Update opcache.sh 2024-06-14 17:05:10 +08:00
f335f08c27 Update common.sh 2024-06-14 17:02:50 +08:00
7a16486105 Update common.sh 2024-06-14 17:00:03 +08:00
4a05152adc Update opcache.sh 2024-06-14 16:59:13 +08:00
379478b2c2 Update ioncube.sh 2024-06-14 16:33:19 +08:00
c2b3d4113a Update ioncube.sh 2024-06-14 16:30:11 +08:00
4655867db0 Update ioncube.sh 2024-06-14 16:29:51 +08:00
5daf371c65 Update ioncube.sh 2024-06-14 16:26:42 +08:00
8488f73d7f Update ioncube.sh 2024-06-14 16:24:51 +08:00
2788d76c00 Update ioncube.sh 2024-06-14 16:23:16 +08:00
d55a89766e Update ioncube.sh 2024-06-14 16:20:48 +08:00
df64e00a27 update 2024-06-14 16:18:51 +08:00
4569c20f58 Update files.js 2024-06-14 16:10:41 +08:00
d0cdbf48d2 Update opcache.sh 2024-06-14 16:02:36 +08:00
24b45afe6f Update opcache.sh 2024-06-14 16:02:23 +08:00
a577235ccc Update opcache.sh 2024-06-14 15:58:13 +08:00
cc98b3322a update 2024-06-14 15:56:31 +08:00
214d784413 Update opcache.sh 2024-06-14 15:40:26 +08:00
c2c02f9c62 Update opcache.sh 2024-06-14 15:34:03 +08:00
c4ce555f91 Update opcache.sh 2024-06-14 15:33:52 +08:00
5901b1bd33 Update opcache.sh 2024-06-14 15:30:02 +08:00
2c65fc65dd Update install.sh 2024-06-14 15:28:22 +08:00
322141b927 Update opcache.sh 2024-06-14 15:19:43 +08:00
9d94b1571a Update common.sh 2024-06-14 15:16:29 +08:00
ff64f3a70f Update common.sh 2024-06-14 15:16:11 +08:00
dc0bfd25c8 Update opcache.sh 2024-06-14 15:07:28 +08:00
10ccbc0dc2 Update opcache.sh 2024-06-14 14:58:15 +08:00
45e46b6826 Update opcache.sh 2024-06-14 14:56:02 +08:00
7d20b9e9a2 Update opcache.sh 2024-06-14 14:48:52 +08:00
086765090a Update opcache.sh 2024-06-14 14:47:21 +08:00
1c49000ec2 Update opcache.sh 2024-06-14 14:47:06 +08:00
e9261a1e19 Update opcache.sh 2024-06-14 14:26:59 +08:00
796afbdf1d Update opcache.sh 2024-06-14 14:22:32 +08:00
3dfe8d2829 Update opcache.sh 2024-06-14 13:59:29 +08:00
77368f9908 Update opcache.sh 2024-06-14 13:59:06 +08:00
2acad0fa01 Update opcache.sh 2024-06-14 13:49:49 +08:00
e0ccb81014 Update opcache.sh 2024-06-14 13:47:28 +08:00
93cedaaa41 Update opcache.sh 2024-06-14 13:36:59 +08:00
d306bb4f36 update 2024-06-14 13:36:37 +08:00
Mr Chen
4c66354c6a Merge pull request #601 from midoks/dev
php-apt,php-yum优化
2024-06-14 00:15:31 +08:00
35ecb54a26 Update php-fpm.conf 2024-06-14 00:09:13 +08:00
e2780ecbdf Update index.py 2024-06-13 23:59:33 +08:00
4e4cfb24d6 Update index.py 2024-06-13 23:52:33 +08:00
89307534df Update index.py 2024-06-13 23:47:41 +08:00
d0e126118d Update index.py 2024-06-13 23:44:44 +08:00
7e424691fd Update index.py 2024-06-13 23:42:12 +08:00
12fb0067d1 Update index.py 2024-06-13 23:41:05 +08:00
f0fd643ef0 Update index.py 2024-06-13 23:39:06 +08:00
cd48a580af Update php-fpm.conf 2024-06-13 23:36:59 +08:00
a08ebed065 Update php-fpm.conf 2024-06-13 23:36:03 +08:00
0784b9092d Update index.py 2024-06-13 23:30:27 +08:00
6954bb947e update 2024-06-13 23:29:25 +08:00
eafa053e21 update 2024-06-13 23:19:05 +08:00
90900b1589 Update php.js 2024-06-13 23:15:54 +08:00
40397e6aaa Update php-fpm.conf 2024-06-13 22:27:02 +08:00
2196c5c70e Update index.py 2024-06-13 22:25:46 +08:00
c4d9f13380 update 2024-06-13 22:23:59 +08:00
27fbc15469 Update install.sh 2024-06-13 21:57:39 +08:00
c96bb414fe Update index.py 2024-06-13 21:47:22 +08:00
d428d0ff03 Update index.py 2024-06-13 21:45:40 +08:00
d80216ff31 Update index.py 2024-06-13 21:38:36 +08:00
adcb4e74fa Update index.py 2024-06-13 21:27:45 +08:00
4df1555179 update 2024-06-13 21:22:35 +08:00
4bd78541fc update 2024-06-13 20:37:45 +08:00
2f2a4722f9 Update php.js 2024-06-13 20:34:40 +08:00
7ad235bba1 update 2024-06-13 20:33:08 +08:00
Mr Chen
c7faaeff62 Merge pull request #600 from midoks/dev
mysql 二进制日志 设置优化
2024-06-13 20:23:32 +08:00
525bcc909f update 2024-06-13 20:21:43 +08:00
Mr Chen
aecd605df9 Merge pull request #599 from midoks/dev
php-apt ubuntu细节优化
2024-06-11 19:12:27 +08:00
f1eac4f309 Update install.sh 2024-06-11 19:06:14 +08:00
562ab87771 Update install.sh 2024-06-11 19:05:02 +08:00
26d7aeb401 Update install.sh 2024-06-11 19:03:26 +08:00
3798ac5e09 update 2024-06-11 18:57:09 +08:00
a2ee74c700 Update install.sh 2024-06-11 18:55:12 +08:00
Mr Chen
1a3aaad591 Merge pull request #598 from midoks/dev
php-yum,php-apt优化
2024-06-11 18:29:40 +08:00
4a5196a5cb Update install.sh 2024-06-11 18:21:50 +08:00
207062cf1a Update install.sh 2024-06-11 18:17:54 +08:00
d6291dbcb0 Update lib.sh 2024-06-11 18:07:54 +08:00
7b8737006c Update lib.sh 2024-06-11 18:03:55 +08:00
75818ebb0a Update install.sh 2024-06-11 17:56:46 +08:00
37f26e0f1b Update index.py 2024-06-11 17:23:30 +08:00
3250fc2620 Update index.py 2024-06-11 17:04:21 +08:00
cf44358190 Update index.py 2024-06-11 16:38:58 +08:00
87a5685fec Update index.py 2024-06-11 16:34:37 +08:00
8b6c761812 Update phplib.conf 2024-06-11 16:28:35 +08:00
21d86bf57a Update rhel.sh 2024-06-11 16:27:48 +08:00
7d892fe298 Update phplib.conf 2024-06-11 16:21:42 +08:00
0b16f3541d Update mysql-apt.js 2024-06-11 16:14:36 +08:00
cd1947a445 Update mysql-yum.js 2024-06-11 16:14:08 +08:00
1929e19647 Update index.py 2024-06-11 16:06:52 +08:00
31e3c4442f Update install.sh 2024-06-11 16:04:36 +08:00
c1459377a1 Update all_test.sh 2024-06-11 16:03:04 +08:00
2f30f37b7c update 2024-06-11 15:57:39 +08:00
b31924f316 Update install.sh 2024-06-11 15:56:42 +08:00
efb10c477c Update phplib.conf 2024-06-11 15:21:53 +08:00
7adfd7a589 Update install.sh 2024-06-11 15:16:20 +08:00
87ec027cdb Update install.sh 2024-06-11 15:15:43 +08:00
d171e28e49 Update common.sh 2024-06-11 14:57:42 +08:00
9169502512 Update common.sh 2024-06-11 14:57:34 +08:00
92d42ec297 Update common.sh 2024-06-11 14:56:59 +08:00
e6457ac82e Update install.sh 2024-06-11 14:20:04 +08:00
7eb85fc0c3 Update common.sh 2024-06-11 14:17:43 +08:00
a97de38574 Update lib.sh 2024-06-11 12:43:54 +08:00
b426b66f9e Update install.sh 2024-06-11 12:41:40 +08:00
d9d66fa6b4 Update install.sh 2024-06-11 12:41:18 +08:00
ade2809a72 update 2024-06-11 12:39:04 +08:00
0c0f20a75d update 2024-06-11 12:29:34 +08:00
a8b531b08e Update my8.4.cnf 2024-06-11 10:44:29 +08:00
Mr Chen
40ce57ba37 Merge pull request #597 from midoks/dev
mysql-apt,mysql-yum功能同步
2024-06-10 22:16:29 +08:00
3488dce7ad Update install.sh 2024-06-10 21:31:11 +08:00
0af71b83cb Update install.sh 2024-06-10 21:29:17 +08:00
39a92a56d1 Update info.json 2024-06-10 21:25:24 +08:00
e4943fe60a update 2024-06-10 21:09:16 +08:00
1d0c965ff0 Update index.py 2024-06-10 20:56:55 +08:00
6d5b5efafa Update index.py 2024-06-10 20:55:31 +08:00
665e7454bb Update index.py 2024-06-10 20:52:01 +08:00
63056b2d91 Update my8.4.cnf 2024-06-10 20:49:28 +08:00
c995488e68 update 2024-06-10 20:48:46 +08:00
f4f7d7795e Update install.sh 2024-06-10 20:40:00 +08:00
ddad227ae9 Update index.py 2024-06-10 20:32:52 +08:00
0af1308b7d Update index.py 2024-06-10 20:30:29 +08:00
e2afed1dc4 Update index.py 2024-06-10 20:07:37 +08:00
47de48806f Update index.py 2024-06-10 19:55:28 +08:00
7886066fd4 Update my8.0.cnf 2024-06-10 19:39:57 +08:00
db27f0b8b7 update 2024-06-10 19:32:23 +08:00
1d28c83807 update 2024-06-10 19:29:21 +08:00
9f13b4ec5a Update index.py 2024-06-10 19:20:30 +08:00
133f8fd9f3 update 2024-06-10 19:19:26 +08:00
757e20c75c Update index.py 2024-06-10 18:57:08 +08:00
6b75914c91 Update index.py 2024-06-10 18:26:30 +08:00
ae6af8d777 Create my8.4.cnf 2024-06-10 18:21:17 +08:00
770718ba95 Create install.sh 2024-06-10 18:20:34 +08:00
da4a9f7088 update 2024-06-10 18:14:34 +08:00
bea62f6d3c Update index.py 2024-06-10 18:07:44 +08:00
ef960f945e update 2024-06-10 17:20:34 +08:00
9fd8ac426c Update index.py 2024-06-10 17:08:42 +08:00
a68a5e6c8b update 2024-06-10 17:08:18 +08:00
f78296c1b0 Update index.py 2024-06-10 17:05:38 +08:00
91a3b0d659 update 2024-06-10 17:04:31 +08:00
6fdba85d04 Update my8.4.cnf 2024-06-10 16:57:20 +08:00
c0fd42d5c4 Update my8.4.cnf 2024-06-10 16:57:08 +08:00
4095263c72 Update index.py 2024-06-10 16:56:20 +08:00
57558d7241 Update index.py 2024-06-10 16:43:53 +08:00
28b64b3819 Update index.py 2024-06-10 16:36:00 +08:00
08a0b5e186 Update my8.0.cnf 2024-06-10 16:33:15 +08:00
7d8d34b15e Update install.sh 2024-06-10 16:31:09 +08:00
d93a1d92f3 Update my8.0.cnf 2024-06-10 16:29:13 +08:00
6a5b63c359 update 2024-06-10 16:25:44 +08:00
5d10c45501 Update install.sh 2024-06-10 16:25:11 +08:00
28449b5dfd Update my8.0.cnf 2024-06-10 16:23:45 +08:00
e1ea19b54d Update index.py 2024-06-10 16:13:45 +08:00
87a18b54ad Update index.py 2024-06-10 15:53:48 +08:00
1d36b669b0 update 2024-06-10 15:53:37 +08:00
0d67c6a3ca Update my8.4.cnf 2024-06-10 15:30:23 +08:00
9e2919dc35 Update my8.4.cnf 2024-06-10 15:30:15 +08:00
88219e7802 update 2024-06-10 15:23:34 +08:00
dee06ecf45 Update index.py 2024-06-10 15:09:30 +08:00
cc6e4d07b0 update 2024-06-10 15:05:07 +08:00
f824293c96 update 2024-06-10 14:57:49 +08:00
92e48f44dc Update mysql-yum.js 2024-06-10 14:55:37 +08:00
02402eb5dc Update mysql-apt.js 2024-06-10 14:54:30 +08:00
9e9e0d8f35 Update mysql-apt.js 2024-06-10 14:52:35 +08:00
3a955ce107 Update index.py 2024-06-10 14:49:40 +08:00
1d22d64558 Update my8.4.cnf 2024-06-10 14:40:02 +08:00
e59f29badf update 2024-06-10 14:32:08 +08:00
8cfb038a0c update 2024-06-10 14:27:56 +08:00
5ba48d965c Create mysql8.4.service.tpl 2024-06-10 14:24:49 +08:00
d72a7c4bf8 Update info.json 2024-06-10 14:20:29 +08:00
fb20289a80 Update index.py 2024-06-10 14:20:11 +08:00
21df235fd5 update 2024-06-10 14:18:25 +08:00
e001e9eb0d update 2024-06-10 14:16:26 +08:00
7ebe575132 Create mysql8.4.service.tpl 2024-06-10 14:10:08 +08:00
34951d1058 Update install.sh 2024-06-10 14:07:40 +08:00
2ccb45bfcb Update index.py 2024-06-10 13:58:40 +08:00
0a7945806e Update index.py 2024-06-10 13:43:11 +08:00
e3fe8aff79 update 2024-06-10 13:40:47 +08:00
12fdc90536 Create my8.4.cnf 2024-06-10 13:39:40 +08:00
870ee26b60 update 2024-06-10 13:38:29 +08:00
7b84624e81 Update install.sh 2024-06-10 13:34:48 +08:00
43d7f918a5 update 2024-06-10 13:33:00 +08:00
78e61a7718 update 2024-06-10 13:31:55 +08:00
3e3e3db323 update 2024-06-10 13:31:13 +08:00
335073102e Update index.py 2024-06-10 12:56:42 +08:00
c749154fb3 Update rhel.sh 2024-06-10 12:55:08 +08:00
752152fb56 Update rhel.sh 2024-06-10 12:54:38 +08:00
cb2883646d Update rhel.sh 2024-06-10 12:53:20 +08:00
bc6370ad8e Update rhel.sh 2024-06-10 12:53:03 +08:00
15ceaa1dbb Update rhel.sh 2024-06-10 12:45:17 +08:00
66dfd39757 Update rhel.sh 2024-06-10 12:43:17 +08:00
b7b82da73f Update index.py 2024-06-10 12:39:55 +08:00
f95946a11b update 2024-06-10 03:59:47 +08:00
1609f189dd Update info.json 2024-06-10 03:57:17 +08:00
26de27fc85 Update info.json 2024-06-10 03:57:11 +08:00
41a3771efe Update info.json 2024-06-10 03:55:44 +08:00
d0ac69832f update 2024-06-10 03:54:44 +08:00
df6c2687af update 2024-06-10 03:46:39 +08:00
8783a619c9 Update install_dev.sh 2024-06-10 03:45:10 +08:00
573cc3fc47 Update rhel.sh 2024-06-10 03:37:12 +08:00
4d1ac42057 Update install.sh 2024-06-10 03:29:34 +08:00
12dc740f56 Update info.json 2024-06-10 03:25:51 +08:00
7b61f433a0 Update my8.3.cnf 2024-06-10 03:20:19 +08:00
0e25a1e87b Update my8.2.cnf 2024-06-10 03:20:12 +08:00
e9ff3b72e1 Update my8.2.cnf 2024-06-10 03:18:10 +08:00
623ec17c29 Update my8.2.cnf 2024-06-10 03:15:58 +08:00
cc1a665f7a Update my8.3.cnf 2024-06-10 03:12:04 +08:00
f092846ece Update my8.3.cnf 2024-06-10 03:09:15 +08:00
b547fef1b9 Create my8.3.cnf 2024-06-10 03:07:28 +08:00
665bc9f8d1 Update install.sh 2024-06-10 03:03:49 +08:00
c961921be8 Update info.json 2024-06-10 03:02:17 +08:00
3f65a92446 Update index.py 2024-06-10 02:59:49 +08:00
bfe82cc95d Update index.py 2024-06-10 02:59:00 +08:00
85ededc849 Update index.py 2024-06-10 02:58:03 +08:00
7efe37c35c update 2024-06-10 02:53:36 +08:00
d394a70f46 Update index.py 2024-06-10 02:52:04 +08:00
1db88e3343 Update index.py 2024-06-10 02:46:11 +08:00
b9e1e33dc8 Update index.py 2024-06-10 02:44:54 +08:00
8af80459a1 update 2024-06-10 02:41:27 +08:00
c2b46f77b7 Update mysql-yum.js 2024-06-10 02:37:03 +08:00
5f5955d51b Update mysql-apt.js 2024-06-10 02:36:36 +08:00
e29d632a78 Update mysql-yum.js 2024-06-10 02:33:06 +08:00
b5845d3881 update 2024-06-10 02:31:05 +08:00
f75c42690b update 2024-06-10 02:28:55 +08:00
18f9ac498b Update index.py 2024-06-10 02:22:51 +08:00
865c71ab96 update 2024-06-10 02:10:08 +08:00
2d40e2d84b Update index.py 2024-06-10 02:00:27 +08:00
e7e160c8e1 update 2024-06-10 01:58:11 +08:00
a542c95433 Update index.py 2024-06-10 01:40:04 +08:00
83a3e0ca24 Update mysql-apt.js 2024-06-10 01:35:18 +08:00
7eeb7c97d2 Update mysql-apt.js 2024-06-10 01:33:31 +08:00
8629224f2f Update ubuntu.sh 2024-06-10 01:27:42 +08:00
76866a46f0 update 2024-06-10 01:15:44 +08:00
3f96854d9a update 2024-06-10 01:13:13 +08:00
92001aadfe update 2024-06-10 00:52:46 +08:00
3473645798 Update mysql-apt.js 2024-06-10 00:46:10 +08:00
47834ea34e Update index.py 2024-06-10 00:44:48 +08:00
1329a87a06 Update index.py 2024-06-10 00:42:16 +08:00
38217e7571 Update index.py 2024-06-10 00:40:17 +08:00
fff22ede33 update 2024-06-10 00:26:41 +08:00
ab3c395f2f Update index.py 2024-06-10 00:19:09 +08:00
4a4502a33c Update index.py 2024-06-10 00:17:11 +08:00
07b2dcbba0 update 2024-06-10 00:13:02 +08:00
c582d520b7 update 2024-06-10 00:09:59 +08:00
22fcff77c2 update 2024-06-10 00:05:55 +08:00
4b49ca9194 Create install.sh 2024-06-09 23:54:44 +08:00
95a500f09d Update .gitignore 2024-06-09 23:38:26 +08:00
Mr Chen
5f186e0bf2 Merge pull request #595 from midoks/dev
backup_ftp插件-目录备份修复2
2024-06-09 14:14:18 +08:00
64ac1b2188 backup_ftp插件-目录备份修复2 2024-06-09 14:13:38 +08:00
Mr Chen
e60f0b2cf7 Merge pull request #594 from midoks/dev
ftp插件-目录备份修复
2024-06-09 13:42:39 +08:00
aeb79cfe57 Update index.py 2024-06-09 13:39:05 +08:00
05e74503c5 Update index.py 2024-06-09 13:00:15 +08:00
Mr Chen
ef34b4b3f1 Merge pull request #593 from midoks/dev
mysql同步提示优化
2024-06-09 01:07:10 +08:00
dc22fc81e7 update 2024-06-09 00:13:17 +08:00
2ce73aefad Update index.py 2024-06-09 00:07:25 +08:00
a8b37fb5ba Update all_mac.sh 2024-06-08 21:45:34 +08:00
ee1d3dec38 Update all_test.sh 2024-06-08 21:45:26 +08:00
dbdea53fc3 update 2024-06-07 21:08:29 +08:00
Mr Chen
cc770cd61b Merge pull request #592 from midoks/dev
细节优化
2024-06-07 20:51:33 +08:00
5c3f71c2e4 Update task.py 2024-06-07 20:06:20 +08:00
6b61fa6136 Update public.js 2024-06-07 20:04:30 +08:00
5509a7b3ae Update mw.py 2024-06-07 19:45:07 +08:00
9d24d7024f Update public.js 2024-06-07 19:42:44 +08:00
17405babae Update public.js 2024-06-07 19:41:57 +08:00
a61c636455 Update public.js 2024-06-07 19:39:38 +08:00
Mr Chen
c17f6a3956 Merge pull request #591 from midoks/dev
安装脚本优化
2024-06-07 18:55:03 +08:00
0042b12ad5 Update ubuntu.sh 2024-06-07 18:53:48 +08:00
bbbf670ec9 Merge branch 'master' into dev 2024-06-07 18:53:08 +08:00
986685169a Update debian.sh 2024-06-07 18:52:19 +08:00
4d160967bc Update opensuse.sh 2024-06-07 16:05:36 +08:00
0163c9b728 Merge branch 'master' into dev 2024-06-07 15:12:26 +08:00
Mr Chen
b6b7fa1021 Merge pull request #590 from midoks/dev
webssh 优化
2024-06-07 15:10:41 +08:00
6d9d5024a0 Update ssh_terminal.py 2024-06-07 15:08:54 +08:00
Mr Chen
fbe9937782 Merge pull request #589 from midoks/dev
Update webssh.js
2024-06-07 14:51:47 +08:00
6b60315036 Update webssh.js 2024-06-07 14:48:25 +08:00
Mr Chen
64f15e77bc Merge pull request #588 from midoks/dev
docker相关功能优化
2024-06-07 13:51:18 +08:00
efc4fb9cb2 docker 优化 2024-06-07 13:49:59 +08:00
f1f0a0f1a5 Update mw.py 2024-06-07 13:33:07 +08:00
Mr Chen
7f696862ef Merge pull request #587 from midoks/dev
日志清理 - 优化
2024-06-06 19:35:39 +08:00
4cf00c1a6b Update index.py 2024-06-06 19:34:26 +08:00
2908ffc1c8 Update index.py 2024-06-06 19:32:55 +08:00
761cd1f064 Update index.py 2024-06-06 19:31:06 +08:00
b2026ce74f Update index.py 2024-06-06 19:29:57 +08:00
ee565b22db Update index.py 2024-06-06 19:26:20 +08:00
ba34b851e4 Update index.py 2024-06-06 19:25:08 +08:00
aadfe8a6e8 Update index.html 2024-06-06 19:20:32 +08:00
736677fdc6 Update index.py 2024-06-06 19:18:57 +08:00
6870dbf711 update 2024-06-06 19:18:44 +08:00
679a112a2c Update index.py 2024-06-06 18:56:09 +08:00
391ca28f46 Merge branch 'master' into dev 2024-06-05 19:39:04 +08:00
f3e897b6c5 Merge branch 'master' into dev 2024-06-05 19:19:10 +08:00
Mr Chen
29a3e606e1 Merge pull request #586 from midoks/dev
0.17.1
2024-06-05 19:00:44 +08:00
d2b837f52c Update mw.py 2024-06-05 18:58:12 +08:00
8984381ea2 0.17.1 2024-06-05 18:57:35 +08:00
ff015b19f7 Update install.sh 2024-06-05 18:14:40 +08:00
1e71eedc19 Update install.sh 2024-06-05 18:13:40 +08:00
fbce4a1abc Update install.sh 2024-06-05 18:12:51 +08:00
d0cdab81d4 Update install.sh 2024-06-05 18:08:57 +08:00
a69d5367d7 Update task_manager_index.py 2024-06-05 17:48:26 +08:00
8d0ee48aa6 Update task_manager_index.py 2024-06-05 17:47:13 +08:00
c24510e1e7 Update task_manager_index.py 2024-06-05 17:44:27 +08:00
2e1c2e21b7 Update task_manager_index.py 2024-06-05 17:18:19 +08:00
fee8c8c3db Update task_manager_index.py 2024-06-05 17:13:16 +08:00
d94290019c Update task_manager_index.py 2024-06-05 17:08:42 +08:00
27b914a905 Update task_manager_index.py 2024-06-05 17:01:45 +08:00
ded25a7c87 Update task_manager_index.py 2024-06-05 16:41:29 +08:00
5ba5da4cd1 Update task_manager_index.py 2024-06-05 16:39:48 +08:00
cbb2a076e3 Update task_manager.js 2024-06-05 16:30:10 +08:00
62df45da6a Update task_manager_index.py 2024-06-05 16:22:45 +08:00
e441d8dc87 Update task_manager_index.py 2024-06-05 16:22:12 +08:00
6d77e923b7 Update task_manager_index.py 2024-06-05 16:22:04 +08:00
17a40802ae Update task_manager_index.py 2024-06-05 16:16:10 +08:00
13bb828a95 Update task_manager.js 2024-06-05 16:12:37 +08:00
eaa1a74dd6 Update task_manager_index.py 2024-06-05 16:05:46 +08:00
80b615810c Update process_network_total.py 2024-06-05 15:56:27 +08:00
23fe4928e0 Update task_manager_index.py 2024-06-05 15:31:09 +08:00
5a37c742e2 Update info.json 2024-06-05 15:21:09 +08:00
b94af58524 Update task_manager_index.py 2024-06-05 15:14:48 +08:00
082c90b769 update 2024-06-05 15:14:20 +08:00
5012dc3a7b Update task_manager_index.py 2024-06-05 14:02:41 +08:00
a6619b6e9d Update task_manager_index.py 2024-06-05 13:56:34 +08:00
fe4ab5a013 Update task_manager_index.py 2024-06-05 13:40:27 +08:00
ade3a5621f Update process_network_total.py 2024-06-05 13:33:23 +08:00
1cadeb3f59 Update task_manager_index.py 2024-06-05 13:19:44 +08:00
05a2ba7f21 Update process_network_total.py 2024-06-05 13:18:06 +08:00
1759b6bcb1 update 2024-06-05 13:16:56 +08:00
a9e4c1b793 Update task_manager_index.py 2024-06-05 12:59:31 +08:00
650b565fdf Update task_manager_index.py 2024-06-05 12:58:19 +08:00
7ab974e565 Update task_manager_index.py 2024-06-05 12:56:47 +08:00
95f8faf30f Update task_manager.js 2024-06-05 12:14:29 +08:00
3d69e3723e Update task_manager.js 2024-06-05 12:13:56 +08:00
4420bbc36c Update task_manager.js 2024-06-05 12:08:33 +08:00
d5d96f6323 Update config_api.py 2024-06-05 12:01:38 +08:00
0bc9ed9d49 Update task_manager.js 2024-06-05 12:01:13 +08:00
95e29d6266 Update task_manager.js 2024-06-05 12:00:27 +08:00
207cef200f update 2024-06-05 11:58:07 +08:00
0082bcd159 Update site.css 2024-06-05 11:39:21 +08:00
f2a1674247 Update task_manager_index.py 2024-06-05 11:29:04 +08:00
cd1a3de04a Update task_manager_index.py 2024-06-05 11:27:26 +08:00
60a0bd7a65 Update task_manager_index.py 2024-06-05 11:25:54 +08:00
a0696fc974 Update task_manager_index.py 2024-06-05 11:25:32 +08:00
159660815b Update task_manager.js 2024-06-05 11:20:28 +08:00
1c5a3f3c13 Update task_manager_index.py 2024-06-05 11:17:30 +08:00
b36fc58839 Update task_manager_index.py 2024-06-05 11:09:53 +08:00
0cd7a7dc9e Update task_manager_index.py 2024-06-05 11:05:10 +08:00
52724dd5b2 Update task_manager_index.py 2024-06-05 11:04:42 +08:00
dccea0e283 Update task_manager_index.py 2024-06-05 11:04:05 +08:00
0f488b26d1 Update task_manager_index.py 2024-06-05 11:03:41 +08:00
c3b60695c7 Update task_manager_index.py 2024-06-05 10:54:21 +08:00
6fe205dbfb Update task_manager_index.py 2024-06-05 10:51:36 +08:00
d8efd3f987 Update task_manager.js 2024-06-05 03:19:48 +08:00
4c50e44e2c Update task_manager.js 2024-06-05 03:15:32 +08:00
60717c3363 Update task_manager.js 2024-06-05 03:09:10 +08:00
48388edcfc Update task_manager_index.py 2024-06-05 03:07:24 +08:00
3c90a0fbe6 Update task_manager_index.py 2024-06-05 03:03:43 +08:00
6eadb548a1 Update task_manager_index.py 2024-06-05 02:54:10 +08:00
204be55c81 Update task_manager_index.py 2024-06-05 02:48:19 +08:00
a44ac7606a Update task_manager_index.py 2024-06-05 02:43:31 +08:00
67505f7aef Update task_manager_index.py 2024-06-05 02:40:57 +08:00
369dc69364 Update task_manager.js 2024-06-05 02:23:47 +08:00
1ffe197d69 Update task_manager_index.py 2024-06-05 02:16:53 +08:00
6a584ccf7b Update task_manager_index.py 2024-06-05 02:13:02 +08:00
43aba019c0 Update task_manager_index.py 2024-06-05 02:09:19 +08:00
a0a61d3bbc Update task_manager.js 2024-06-05 01:15:34 +08:00
9b008fcff9 Update task_manager_index.py 2024-06-05 01:09:51 +08:00
e80162cfa9 Update task_manager.js 2024-06-05 01:07:14 +08:00
30b02aea33 update 2024-06-05 01:05:37 +08:00
1cf49c24ef Update task_manager_index.py 2024-06-05 01:03:38 +08:00
3bb0552ba6 Update task_manager_index.py 2024-06-05 00:52:03 +08:00
b33be2ab84 update 2024-06-05 00:50:42 +08:00
8a4a63c85b Update task_manager.js 2024-06-05 00:39:40 +08:00
640e8bbfa0 Update task_manager_index.py 2024-06-05 00:37:13 +08:00
e6463e0286 Update task_manager_index.py 2024-06-05 00:35:08 +08:00
c6cf6fef0b Update task_manager_index.py 2024-06-05 00:32:50 +08:00
a428636e1c Update task_manager_index.py 2024-06-05 00:31:17 +08:00
6fd145fa52 Update index.html 2024-06-05 00:13:42 +08:00
6164d462f3 Update task_manager.js 2024-06-05 00:08:28 +08:00
d05e72e1d7 Update task_manager_index.py 2024-06-04 23:42:37 +08:00
d9fbfcb184 Update task_manager_index.py 2024-06-04 22:28:35 +08:00
660d95616d Update task_manager_index.py 2024-06-04 22:26:13 +08:00
6160819920 Update task_manager.js 2024-06-04 22:17:14 +08:00
c83b2d5bc5 Update task_manager_index.py 2024-06-04 22:09:59 +08:00
44d529d32f Update public.js 2024-06-04 20:36:31 +08:00
b81e51c0e8 Update task_manager.js 2024-06-04 20:35:43 +08:00
beccfe8519 update 2024-06-04 18:19:17 +08:00
9e774fb629 update 2024-06-04 17:57:58 +08:00
10c7ec8718 Update task_manager_index.py 2024-06-04 03:32:34 +08:00
4bb9d0f002 Update task_manager.js 2024-06-04 01:51:09 +08:00
39676d1a37 Update task_manager_index.py 2024-06-04 01:49:24 +08:00
50f44afd82 update 2024-06-04 01:48:47 +08:00
9884bbd0e3 Update task_manager.js 2024-06-04 01:38:53 +08:00
39853e39c7 Update task_manager.js 2024-06-04 01:38:37 +08:00
894656741d Update task_manager.js 2024-06-04 01:35:09 +08:00
93ef3659f2 Update task_manager_index.py 2024-06-04 01:34:17 +08:00
3ccf084a53 Update task_manager.js 2024-06-04 01:27:43 +08:00
aaa2b766a3 Update task_manager.js 2024-06-04 01:07:52 +08:00
dc1f03b7ae update 2024-06-04 01:04:16 +08:00
36b50d3bf2 update 2024-06-04 01:01:15 +08:00
b9b7081eb4 Update task_manager_index.py 2024-06-04 00:38:18 +08:00
808e65091d Update install.sh 2024-06-04 00:34:19 +08:00
9b0c30e554 Update task_manager_index.py 2024-06-04 00:33:02 +08:00
ffec30883f Update task_manager_index.py 2024-06-04 00:30:29 +08:00
900dfc6ca7 Update task_manager_index.py 2024-06-04 00:28:42 +08:00
203b4d11a8 Update task_manager_index.py 2024-06-04 00:26:48 +08:00
2ba57ab05f Update task_manager_index.py 2024-06-04 00:25:04 +08:00
4b11415f36 Update task_manager_index.py 2024-06-04 00:23:52 +08:00
1ef0c4b8f0 Update task_manager_index.py 2024-06-04 00:23:06 +08:00
4d85ed4e88 Update task_manager_index.py 2024-06-04 00:22:42 +08:00
6c40e57ff6 update 2024-06-04 00:19:15 +08:00
19a4974537 Update stats.js 2024-06-03 23:09:30 +08:00
6783e1507d Update mysql.js 2024-06-03 12:10:59 +08:00
8f3e722a0f Update .gitignore 2024-06-03 00:43:38 +08:00
3437d2e484 Update php.js 2024-06-01 12:17:10 +08:00
Mr Chen
06e654ae2e Merge pull request #585 from midoks/dev
ssh终端提高稳定性。
2024-06-01 02:08:55 +08:00
c3103a23c6 Update __init__.py 2024-06-01 01:57:36 +08:00
55b38c2741 Update ssh_local.py 2024-06-01 01:55:14 +08:00
9f30c1968d Update ssh_local.py 2024-06-01 01:53:53 +08:00
d2455768ff Update ssh_local.py 2024-06-01 01:53:39 +08:00
6331155dc7 Update ssh_local.py 2024-06-01 01:51:27 +08:00
06d9695d33 update 2024-06-01 01:50:29 +08:00
80b35284ed Update ssh_terminal.py 2024-06-01 01:33:29 +08:00
27c38153b8 Update ssh_terminal.py 2024-06-01 01:20:26 +08:00
db62524dab Update __init__.py 2024-06-01 01:19:04 +08:00
190b858e46 update 2024-06-01 01:16:40 +08:00
Mr Chen
be69e5838e Merge pull request #584 from midoks/dev
mysql插件 pv命令判断修复
2024-05-30 12:15:26 +08:00
b12122f53b update 2024-05-30 12:14:54 +08:00
33be35eb60 Update config_api.py 2024-05-27 19:06:20 +08:00
39b3f96ab5 Update index.js 2024-05-27 19:05:44 +08:00
7d214f74fd Update public.js 2024-05-27 18:59:47 +08:00
10aa140fe9 Update public.js 2024-05-27 18:59:39 +08:00
c68eaa9c61 Update public.js 2024-05-27 18:59:23 +08:00
3cc6021540 Update public.js 2024-05-27 18:53:50 +08:00
bfe7d49e07 Update public.js 2024-05-27 18:53:44 +08:00
c02aacb0d5 Update public.js 2024-05-27 18:53:19 +08:00
6d0f6fd171 Update index.js 2024-05-27 18:51:48 +08:00
712061e814 Update index.js 2024-05-27 18:49:48 +08:00
197dfa1b7e Update index.js 2024-05-27 18:48:41 +08:00
f21b66ddc0 Update index.js 2024-05-27 18:48:02 +08:00
5e086537d6 Update index.js 2024-05-27 18:46:53 +08:00
23532cb7e6 Update index.js 2024-05-27 18:43:40 +08:00
864ee5caec Update index.js 2024-05-27 18:43:07 +08:00
5db6d0332b Update config_api.py 2024-05-27 18:36:01 +08:00
eb9504658a update 2024-05-27 18:35:30 +08:00
a67389d611 Update stats.js 2024-05-27 18:07:12 +08:00
Mr Chen
f6d4609947 Merge pull request #583 from midoks/dev
0.17.0
2024-05-27 17:47:09 +08:00
d2ddcebe3e 0.17.0 2024-05-27 17:46:06 +08:00
fd2f2c0aa9 Update config.js 2024-05-27 17:42:48 +08:00
0aae3b0654 Update config_api.py 2024-05-27 17:39:03 +08:00
e56606ac61 Update config_api.py 2024-05-27 17:34:56 +08:00
54e11700c2 Update config_api.py 2024-05-27 17:27:45 +08:00
fe3b8de490 update 2024-05-27 17:26:42 +08:00
9874069100 Update config_api.py 2024-05-27 15:13:08 +08:00
9419d6d55b Update config_api.py 2024-05-27 15:06:14 +08:00
2f61facbda Update mw.py 2024-05-27 15:01:01 +08:00
5cd8d7bf18 Update setting.py 2024-05-27 14:57:55 +08:00
41f016050f Update mw.py 2024-05-27 14:51:39 +08:00
d931790dd3 Update mw.py 2024-05-27 14:50:56 +08:00
a81e63e131 Update mw.tpl 2024-05-27 14:47:38 +08:00
30717079d4 Update mw.tpl 2024-05-27 14:46:56 +08:00
3eb2fbb654 Update mw.py 2024-05-27 14:41:06 +08:00
cf54a430eb Update mw.py 2024-05-27 14:40:43 +08:00
04925c0534 Update mw.py 2024-05-27 14:40:27 +08:00
6473755127 Update mw.py 2024-05-27 14:39:13 +08:00
35f40fc8fc Update mw.py 2024-05-27 14:37:09 +08:00
088a4ab969 Update mw.py 2024-05-27 14:35:44 +08:00
3c00ddad75 Update mw.py 2024-05-27 14:31:04 +08:00
5edd9baeb6 Update config_api.py 2024-05-27 14:22:48 +08:00
734548d764 update 2024-05-27 14:18:54 +08:00
e47d3a235d Update task.py 2024-05-27 13:59:19 +08:00
0a93015720 Update tools.py 2024-05-27 12:24:23 +08:00
1078d71370 Update tools.py 2024-05-27 12:23:53 +08:00
b482127044 update 2024-05-27 12:12:41 +08:00
27b6ee135c Update config.js 2024-05-27 10:37:08 +08:00
cc2000267d Update config_api.py 2024-05-27 10:35:22 +08:00
c1e3655923 Update config_api.py 2024-05-27 09:34:21 +08:00
b0a6181dca up 2024-05-27 00:16:04 +08:00
33e7efa440 Update config_api.py 2024-05-26 23:01:16 +08:00
6d7a38dc08 Update config.js 2024-05-26 22:55:28 +08:00
8a60965069 update 2024-05-26 22:50:29 +08:00
ef9d627095 Update config_api.py 2024-05-26 22:37:12 +08:00
b66acc8c2a Update config.js 2024-05-26 22:28:19 +08:00
fb56f6c190 Update config_api.py 2024-05-26 22:09:29 +08:00
af0f55e6ef Update config_api.py 2024-05-26 21:23:05 +08:00
fb95e2ad8d Update config_api.py 2024-05-26 21:22:41 +08:00
138a6d3e66 Update config_api.py 2024-05-26 21:21:57 +08:00
98b9065585 Update config_api.py 2024-05-26 21:19:49 +08:00
36c3fae920 Update config.js 2024-05-26 21:17:58 +08:00
70ee376958 Update config.js 2024-05-26 21:14:04 +08:00
47b2f1b009 Update config_api.py 2024-05-26 17:01:31 +08:00
f2a35b97b0 Update config_api.py 2024-05-26 16:58:38 +08:00
c26e5dc40d update 2024-05-26 16:39:28 +08:00
893b2d601c Update config.js 2024-05-26 15:49:56 +08:00
28964721ec Update config_api.py 2024-05-26 15:47:48 +08:00
5a2028d797 update 2024-05-26 15:46:12 +08:00
fcbe6a87df Update mw.py 2024-05-26 15:32:05 +08:00
7f5cf75d68 update 2024-05-26 15:29:21 +08:00
c368638181 Update config_api.py 2024-05-26 15:13:53 +08:00
decc9d2b29 Update config_api.py 2024-05-26 14:08:37 +08:00
7da2a90712 Update config_api.py 2024-05-26 14:01:53 +08:00
7dd377460c Update config.js 2024-05-26 14:01:22 +08:00
6b6ae63aea Update config.js 2024-05-26 14:00:22 +08:00
cc9a4b5536 Update config.js 2024-05-26 13:58:52 +08:00
fd44a312f6 Update config.js 2024-05-26 13:58:26 +08:00
a5802b4280 Update config_api.py 2024-05-26 13:56:40 +08:00
d8c928dc02 Update config.js 2024-05-26 13:56:29 +08:00
339cdf662b Update cli.sh 2024-05-26 13:55:51 +08:00
1e2a174e30 Update config_api.py 2024-05-26 13:55:47 +08:00
2714538ad7 Update config_api.py 2024-05-26 13:54:50 +08:00
8a43f67801 Update mw.py 2024-05-26 13:52:19 +08:00
f3f7ef4a3d Update config.js 2024-05-26 13:52:12 +08:00
3523f8d6c8 update 2024-05-26 13:52:07 +08:00
eb8c2b6ad5 update 2024-05-26 00:48:03 +08:00
438322361d Update files.js 2024-05-25 23:19:57 +08:00
c902f48931 Update config_api.py 2024-05-25 13:24:11 +08:00
e67a258e7a Update sphinx.js 2024-05-25 13:06:28 +08:00
007993ed9e Update sphinx.js 2024-05-25 13:03:50 +08:00
81171c0c7c Update webstats_common.lua 2024-05-25 11:44:00 +08:00
Mr Chen
15d07e4234 Merge pull request #582 from midoks/dev
网站统计-PV,UV优化
2024-05-25 11:36:02 +08:00
786fac9142 Update webstats_common.lua 2024-05-25 11:31:56 +08:00
5499c8795f update 2024-05-25 11:08:46 +08:00
322698f345 Update init.sql 2024-05-24 23:31:30 +08:00
f229e03f10 Update stats.js 2024-05-23 15:52:32 +08:00
Mr Chen
6024dbcdb6 Merge pull request #581 from midoks/dev
网站统计 - 特殊处理
2024-05-23 15:51:59 +08:00
c874ea44eb 网站统计 - 特殊处理 2024-05-23 15:50:43 +08:00
Mr Chen
c70e4d1412 Merge pull request #580 from midoks/dev
Update index.py
2024-05-23 14:03:08 +08:00
235c5e329e Update index.py 2024-05-23 14:01:02 +08:00
Mr Chen
b77bfab5a8 Merge pull request #579 from midoks/dev
新功能同步到mariadb
2024-05-23 13:11:41 +08:00
890bbc4214 Update index.py 2024-05-23 13:05:44 +08:00
2f86f4d6ff Update index.py 2024-05-23 13:04:34 +08:00
c9ced293e8 Update mariadb.js 2024-05-23 12:57:33 +08:00
43f081aac1 Update mariadb.js 2024-05-23 12:56:09 +08:00
49aa411248 Update index.py 2024-05-23 12:53:00 +08:00
d597e15402 Update index.py 2024-05-23 12:52:49 +08:00
a74ee3faf4 Update index.py 2024-05-23 12:52:39 +08:00
cfe55ca196 Update index.py 2024-05-23 12:51:24 +08:00
2edffd36d0 Update requirements.txt 2024-05-23 12:07:31 +08:00
c7077ec283 Update index.py 2024-05-23 11:57:12 +08:00
cfcd4c2050 Update index.py 2024-05-23 11:55:28 +08:00
2387af2880 Update index.py 2024-05-23 11:25:33 +08:00
72f825c0c4 Update index.py 2024-05-23 11:23:55 +08:00
fbe4857944 Update index.py 2024-05-23 11:23:05 +08:00
01fe75e553 Update index.py 2024-05-23 11:21:37 +08:00
2bd607edad Update index.py 2024-05-23 11:20:35 +08:00
9b9a806dee Update install.sh 2024-05-23 11:17:20 +08:00
9bc6d392a0 Update index.py 2024-05-23 11:15:15 +08:00
26b5dc7cd4 update 2024-05-23 11:04:08 +08:00
80a690c431 Update mariadb.js 2024-05-23 10:48:15 +08:00
71840ee1e2 update 2024-05-23 10:45:03 +08:00
fbdbb25a78 Update index.py 2024-05-23 10:36:10 +08:00
e546428596 Update public.js 2024-05-23 00:43:10 +08:00
a16259f718 Update public.js 2024-05-23 00:35:54 +08:00
df0b708462 Update backup.py 2024-05-23 00:16:38 +08:00
b3c383327d Update index.py 2024-05-23 00:15:35 +08:00
Mr Chen
8a9c99fb0d Merge pull request #578 from midoks/dev
Update requirements.txt
2024-05-22 22:22:33 +08:00
a22d90198c Update requirements.txt 2024-05-22 22:21:18 +08:00
Mr Chen
dcae829a1c Merge pull request #577 from midoks/dev
0.16.9
2024-05-22 22:12:39 +08:00
de4e134be8 0.16.9
- mysql同步优化,享受丝滑般感觉。
- 网站统计 - 实时-可调节1-10s。
- 网站统计 - 加入大小条件。
- Sphinx优化。
2024-05-22 22:12:03 +08:00
ba96e62126 Update cmd.md 2024-05-22 22:11:07 +08:00
990fb06567 Update .gitignore 2024-05-22 22:02:17 +08:00
71c1034d12 Update .gitignore 2024-05-22 22:01:37 +08:00
6582cbc09d update 2024-05-22 22:01:09 +08:00
52bad278cc Update README.md 2024-05-22 19:48:12 +08:00
e023490002 网站统计加入大小条件 2024-05-22 19:44:25 +08:00
c1a7443597 Update r3.6.txt 2024-05-22 11:46:40 +08:00
3f57e7da07 update 2024-05-22 11:45:51 +08:00
0461bf3225 Update sphinx_make.py 2024-05-22 11:37:47 +08:00
ac0a503aa7 Update push_notice_msg.py 2024-05-22 10:57:45 +08:00
706e9e98e7 Update redis.tpl 2024-05-22 10:50:08 +08:00
d9e878d607 Update redis_cluster.conf 2024-05-22 10:45:57 +08:00
ceb5f21814 Update redis_slave.conf 2024-05-22 10:44:45 +08:00
c8e689433b mw update_dev 2024-05-22 10:44:21 +08:00
f2171aa159 Update mw.tpl 2024-05-22 03:29:46 +08:00
6eccdd510e update 2024-05-22 03:29:01 +08:00
c9a00809a4 Update redis_slave.conf 2024-05-22 02:57:42 +08:00
9f1d8e43e6 Update redis_slave.conf 2024-05-22 02:54:26 +08:00
e8eda79a1a Update redis.conf 2024-05-22 02:54:06 +08:00
f25847d31d Update tidb.yaml 2024-05-22 02:53:27 +08:00
bda7dfa518 Update redis_slave.conf 2024-05-22 02:53:06 +08:00
4115c29fe9 Update redis_slave.conf 2024-05-22 02:46:09 +08:00
f73e378fd6 Update index.py 2024-05-21 23:41:56 +08:00
aa9ab55fec Update sphinx_make.py 2024-05-21 23:39:19 +08:00
da5c44a747 Update sphinx_make.py 2024-05-21 23:39:04 +08:00
ee55c998ba Update sphinx_make.py 2024-05-21 23:28:55 +08:00
2e75a56502 Update sphinx_make.py 2024-05-21 23:26:15 +08:00
a66279ba37 Update sphinx_make.py 2024-05-21 23:23:33 +08:00
78bbae1f53 Update sphinx_make.py 2024-05-21 23:21:20 +08:00
a87def4325 Update sphinx_make.py 2024-05-21 22:29:32 +08:00
b84ac2daf1 Update sphinx_make.py 2024-05-21 20:58:22 +08:00
7c9bf99669 Update sphinx_make.py 2024-05-21 20:56:38 +08:00
599f6ecc51 Update sphinx_make.py 2024-05-21 20:42:38 +08:00
47a17fbc46 Update sphinx_make.py 2024-05-21 20:40:31 +08:00
80fa0ea62d Update sphinx_make.py 2024-05-21 20:40:15 +08:00
83c78609a4 Update sphinx_make.py 2024-05-21 20:35:50 +08:00
298d4b7981 Update sphinx_make.py 2024-05-21 20:33:22 +08:00
dc6f4e03e7 Update sphinx_make.py 2024-05-21 20:27:55 +08:00
8b0b2b2d72 Update sphinx.js 2024-05-21 20:00:29 +08:00
d4087ce7f0 Update sphinx_make.py 2024-05-21 19:59:23 +08:00
f92df461ba Update sphinx_make.py 2024-05-21 19:58:43 +08:00
9e015bc08c Update sphinx_make.py 2024-05-21 19:55:36 +08:00
4bffd9a22d update 2024-05-21 19:43:25 +08:00
e2ef42fbbc Update sphinx.js 2024-05-21 19:23:30 +08:00
f10e05b7ee update 2024-05-21 19:20:07 +08:00
c15288cf09 update 2024-05-21 17:12:39 +08:00
2461307d64 update 2024-05-21 16:57:05 +08:00
95ec87346d update 2024-05-21 16:07:59 +08:00
f99c5b5fc4 update 2024-05-21 16:04:02 +08:00
adfd3bef2d Update app.js 2024-05-21 15:58:32 +08:00
c11631c0c3 Update index.html 2024-05-21 14:42:11 +08:00
4f87725101 Update redis_slave.conf 2024-05-21 14:22:40 +08:00
3a6695bb0d Update redis.conf 2024-05-21 14:22:02 +08:00
dd3bcced66 Update redis_slave.conf 2024-05-21 14:21:57 +08:00
81a163f744 Update site.css 2024-05-21 03:08:08 +08:00
19dd36fa8b Update sphinx_make.py 2024-05-21 00:22:03 +08:00
9dcb028158 Update sphinx_make.py 2024-05-21 00:15:26 +08:00
1ce841eac9 Update sphinx_make.py 2024-05-21 00:12:15 +08:00
c99311dad9 update 2024-05-21 00:07:48 +08:00
d7dd126a48 Update sphinx_make.py 2024-05-20 23:50:06 +08:00
ec8ab6bc45 Update sphinx_make.py 2024-05-20 23:48:03 +08:00
d5b87f450d Update sphinx_make.py 2024-05-20 23:46:23 +08:00
0016f85132 Update sphinx_make.py 2024-05-20 23:18:48 +08:00
32a6b36297 Update tools.py 2024-05-20 22:31:11 +08:00
8da60ffc6b Update tools.py 2024-05-20 22:20:32 +08:00
64d65a5cac Update sphinx_make.py 2024-05-20 20:14:48 +08:00
cf5b986d2e update 2024-05-20 14:11:27 +08:00
e1d0fc49bb Update install.sh 2024-05-20 00:34:08 +08:00
68187ee7dd update 2024-05-20 00:21:09 +08:00
9f7a7c5e59 Update rhel.sh 2024-05-20 00:10:44 +08:00
90b14d59b0 Update install.sh 2024-05-19 23:51:32 +08:00
e8d1ea0a38 Update install.sh 2024-05-19 23:51:11 +08:00
edf8a5534a Update install.sh 2024-05-19 23:48:06 +08:00
87bceced80 update 2024-05-19 23:18:48 +08:00
db3350e85c Update install.sh 2024-05-19 23:03:59 +08:00
56b3aae0c7 Update install.sh 2024-05-19 22:22:52 +08:00
01d5b75d90 Update install.sh 2024-05-19 22:15:43 +08:00
cbf3a15bf0 update 2024-05-19 22:06:47 +08:00
2f0f6eaed6 Update install.sh 2024-05-19 21:54:20 +08:00
f0fcec44ff Update install.sh 2024-05-19 21:46:52 +08:00
fcfdfe822a up 2024-05-19 21:36:25 +08:00
d8e08812f9 update 2024-05-19 19:49:15 +08:00
d0ba142933 Update sphinx_make.py 2024-05-19 18:42:43 +08:00
b4e130c664 Update sphinx_make.py 2024-05-19 18:25:51 +08:00
7503907f34 Update sphinx_make.py 2024-05-19 18:22:13 +08:00
390df93477 Update sphinx_make.py 2024-05-19 18:20:55 +08:00
abcf6250e3 Update sphinx_make.py 2024-05-19 18:20:10 +08:00
70370fcb0b Update sphinx_make.py 2024-05-19 18:19:57 +08:00
57e7021be2 Update sphinx_make.py 2024-05-19 18:10:54 +08:00
45b7abd0fb Update sphinx_make.py 2024-05-19 17:58:50 +08:00
a6d96bb4d8 Update sphinx_make.py 2024-05-19 17:57:27 +08:00
2742ecfc67 Update sphinx_make.py 2024-05-19 17:49:08 +08:00
60747c2f04 Update sphinx_make.py 2024-05-19 17:47:51 +08:00
2b019a704a Update sphinx_make.py 2024-05-19 17:47:27 +08:00
7e049a381b Update sphinx_make.py 2024-05-19 17:45:39 +08:00
2f4cf46bcf Update sphinx_make.py 2024-05-19 17:45:27 +08:00
706ee146b5 Update sphinx_make.py 2024-05-19 17:43:52 +08:00
79b4d09d50 Update index.py 2024-05-19 17:37:47 +08:00
2f0797daab Update sphinx_make.py 2024-05-19 17:34:37 +08:00
8e47c73f5c Update sphinx_make.py 2024-05-19 17:27:22 +08:00
c90d752ae7 update 2024-05-19 17:21:19 +08:00
7c96bbe72f Update sphinx_make.py 2024-05-19 16:56:27 +08:00
53134b7ecc Update sphinx_make.py 2024-05-19 16:36:14 +08:00
bf859f7c7c Update sphinx_make.py 2024-05-19 16:29:16 +08:00
0046d02ddf update 2024-05-19 16:24:33 +08:00
5a0e7a3b60 update 2024-05-19 15:09:25 +08:00
a74ca20d0e up 2024-05-19 14:58:14 +08:00
41109af522 Update install.sh 2024-05-19 11:27:13 +08:00
b3b23994eb Update sphinx.js 2024-05-19 02:40:11 +08:00
02f3a147aa Update index.py 2024-05-19 02:36:34 +08:00
10edf675f5 Update config_api.py 2024-05-19 02:35:24 +08:00
b07b6f0c94 update 2024-05-19 02:35:03 +08:00
002639936e update 2024-05-19 01:32:31 +08:00
aac516c8f8 Update stats.js 2024-05-19 00:56:35 +08:00
efd07f6de2 网站统计 - 实时请求 可选择 2024-05-19 00:51:35 +08:00
fa17782573 Update index.py 2024-05-18 14:15:57 +08:00
9ee3aebc8c Update index.py 2024-05-18 14:02:17 +08:00
b778c8cdeb Update index.py 2024-05-18 13:57:34 +08:00
1d1e6b1d5b Update index.py 2024-05-18 12:49:46 +08:00
70012ea7ee Update index.py 2024-05-18 11:56:56 +08:00
0897fd9370 Update index.py 2024-05-18 11:51:51 +08:00
477b8b38fd Update index.py 2024-05-18 10:58:10 +08:00
e805910b1b Update index.py 2024-05-18 10:54:06 +08:00
2f9903753f Update index.py 2024-05-18 02:57:32 +08:00
53cd6377bb Update stats.js 2024-05-18 00:57:55 +08:00
56cf0271b8 Update index.py 2024-05-17 18:26:51 +08:00
4fefb0efb2 Update index.py 2024-05-17 18:26:18 +08:00
222b8bc4de Update index.py 2024-05-17 17:58:50 +08:00
dc0e6fe78a Update index.py 2024-05-17 17:57:14 +08:00
22a21025af Update index.py 2024-05-17 17:56:11 +08:00
7cd102c40f Update index.py 2024-05-17 17:55:47 +08:00
5cd7a65737 Update index.py 2024-05-17 17:48:40 +08:00
c370486845 Update mysql.js 2024-05-17 16:59:08 +08:00
cb9857edf2 update 2024-05-17 16:51:10 +08:00
8fb3410366 Update mysql.js 2024-05-17 16:26:55 +08:00
659ef259b7 Update index.py 2024-05-17 15:44:33 +08:00
9d89a92b78 Update mysql.js 2024-05-17 15:33:48 +08:00
139f353034 update 2024-05-17 14:09:57 +08:00
908b1cf684 Update backup.py 2024-05-17 14:05:25 +08:00
07dc74c283 update 2024-05-17 13:56:47 +08:00
61e136fb39 Update backup.py 2024-05-17 13:54:59 +08:00
030e05b2cf Update index.py 2024-05-17 13:52:19 +08:00
24750cfdb2 Update config_api.py 2024-05-17 13:35:26 +08:00
975a69fce8 Update layout.html 2024-05-17 13:35:13 +08:00
5f42f37ee2 Update mysql.sql 2024-05-17 05:24:48 +08:00
9925daa363 Update index.py 2024-05-17 05:08:45 +08:00
2572bde607 Update index.py 2024-05-17 05:05:06 +08:00
572207105c Update index.py 2024-05-17 05:04:18 +08:00
2b8804e960 同步问题 2024-05-17 05:01:39 +08:00
310409c52b Update mw.tpl 2024-05-17 04:06:01 +08:00
01e95fa6fb Update index.py 2024-05-17 03:36:27 +08:00
848021a639 Update index.py 2024-05-17 03:27:20 +08:00
a679c0e90c Update index.py 2024-05-17 03:26:37 +08:00
8d9eb6302c Update index.py 2024-05-17 03:20:29 +08:00
f6663ad370 Update index.py 2024-05-17 03:18:59 +08:00
9964745e46 Update index.py 2024-05-17 01:49:11 +08:00
b570a4552a Update index.py 2024-05-17 01:48:00 +08:00
cd2655a6f9 Update index.py 2024-05-17 01:47:40 +08:00
608b40a110 Update index.py 2024-05-17 01:46:17 +08:00
a65d42ed2e Update index.py 2024-05-17 01:43:57 +08:00
b0d8d4bef8 Update index.py 2024-05-17 01:43:19 +08:00
d9f657c236 Update index.py 2024-05-17 01:42:05 +08:00
de02bcd800 Update index.py 2024-05-17 01:39:46 +08:00
1f8dbe1a5f Update index.py 2024-05-17 01:37:54 +08:00
8f4949cf8d Update index.py 2024-05-17 01:35:43 +08:00
6128186a2c Update index.py 2024-05-17 01:26:35 +08:00
7f707f9aac Update index.py 2024-05-17 01:08:13 +08:00
56c1cd88ee Update config_api.py 2024-05-17 01:02:36 +08:00
5d0b8b1877 Update layout.html 2024-05-17 01:01:48 +08:00
e944c9fbc5 Update layout.html 2024-05-17 01:01:16 +08:00
8cab94e26c Update config_api.py 2024-05-17 00:45:56 +08:00
edb26fd11c update 2024-05-17 00:44:52 +08:00
cfd3a07046 Update mysql.js 2024-05-17 00:32:27 +08:00
8d4ffc431a Update index.py 2024-05-17 00:21:37 +08:00
22b97ab255 updatae 2024-05-17 00:21:06 +08:00
8cfc5c5344 Update stats.js 2024-05-16 21:09:10 +08:00
01c9633a1b Update index.py 2024-05-16 20:32:22 +08:00
160634d3d4 Update index.py 2024-05-16 20:09:21 +08:00
59b4ec32a6 Update index.py 2024-05-16 19:58:22 +08:00
08a2295cdc Update index.py 2024-05-16 19:57:51 +08:00
fb7dbd69e5 Update index.py 2024-05-16 19:43:55 +08:00
c212a30536 Update index.py 2024-05-16 19:42:04 +08:00
7a7acd3a4d Update index.py 2024-05-16 19:39:45 +08:00
f5edd83164 Update index.py 2024-05-16 19:04:38 +08:00
8ea3ac1a3c Update index.py 2024-05-16 19:04:21 +08:00
d241ceea3e Update index.py 2024-05-16 18:55:07 +08:00
6b3f50374a Update index.py 2024-05-16 18:32:59 +08:00
b3ceb03365 Update index.py 2024-05-16 18:25:20 +08:00
87b26a14df Update mysql.js 2024-05-16 18:25:02 +08:00
9046a09c0a Update mysql.js 2024-05-16 18:18:22 +08:00
8bbfdbbf66 Update index.py 2024-05-16 17:57:46 +08:00
fa2d5c690c Update index.py 2024-05-16 17:46:25 +08:00
681dfc96cb update 2024-05-16 16:33:19 +08:00
362f5eb427 Update index.py 2024-05-16 16:28:07 +08:00
b033bd1c73 Update index.py 2024-05-16 16:17:04 +08:00
ea94fa21d5 Update index.py 2024-05-16 16:14:51 +08:00
36c1541179 Update index.py 2024-05-16 16:13:05 +08:00
d5864db956 update 2024-05-15 23:56:52 +08:00
00008b657c Update index.py 2024-05-15 21:11:29 +08:00
3abed25d71 Update index.py 2024-05-15 20:52:58 +08:00
862ea95a77 Update index.py 2024-05-15 20:22:58 +08:00
63d624d084 Update index.py 2024-05-15 20:11:59 +08:00
c580076307 Update index.py 2024-05-15 20:01:59 +08:00
3fada81661 Update index.py 2024-05-15 20:00:36 +08:00
a3bd0c6bda Update index.py 2024-05-15 20:00:19 +08:00
454b036908 Update index.py 2024-05-15 20:00:01 +08:00
1af9b1ddaa Update index.py 2024-05-15 19:59:35 +08:00
5818fb46f1 Update mysql.js 2024-05-15 19:36:15 +08:00
1069fd5252 Update index.py 2024-05-15 19:33:53 +08:00
76229b6651 Update index.py 2024-05-15 19:31:30 +08:00
4c9e717559 Update index.py 2024-05-15 19:30:04 +08:00
9ae61517a4 Update index.py 2024-05-15 19:20:02 +08:00
952a173535 Update index.py 2024-05-15 19:11:28 +08:00
5b9b03a153 Update index.py 2024-05-15 19:09:01 +08:00
9475dbecfe Update index.py 2024-05-15 18:56:38 +08:00
5a64835969 Update index.py 2024-05-15 18:56:00 +08:00
8685f21ad9 Update index.py 2024-05-15 18:50:52 +08:00
500ccff90b update 2024-05-15 17:48:41 +08:00
85adb449c2 Update index.py 2024-05-15 17:38:49 +08:00
aa6748c09d Update index.py 2024-05-15 17:32:11 +08:00
05992b5f82 Update index.py 2024-05-15 17:31:49 +08:00
1a48e880d0 update 2024-05-15 17:29:02 +08:00
1da749aea9 Update index.py 2024-05-15 14:45:23 +08:00
bf121ee6f8 Update index.py 2024-05-15 14:41:19 +08:00
6b6e1f415f Update index.py 2024-05-15 14:40:33 +08:00
5535d56304 Update index.py 2024-05-15 14:30:56 +08:00
bbc0dee2b6 Update index.py 2024-05-15 14:28:23 +08:00
1da8f6bbb6 update 2024-05-15 14:21:43 +08:00
de15101a76 Update orm.py 2024-05-15 14:06:17 +08:00
ee99d14df3 Update index.py 2024-05-15 14:03:41 +08:00
7bff08b3e5 Update index.py 2024-05-15 14:02:10 +08:00
faca0b183e update 2024-05-15 13:59:59 +08:00
700b9a7c61 Update index.py 2024-05-15 13:53:30 +08:00
53952d267e Update index.py 2024-05-15 13:42:57 +08:00
ff52646fd2 Update index.py 2024-05-15 13:40:00 +08:00
1dcd4520f1 Update index.py 2024-05-15 13:37:23 +08:00
21d86f0583 Update index.py 2024-05-15 13:33:08 +08:00
3e95e3aaf2 Update index.py 2024-05-15 13:28:46 +08:00
29c7367906 Update index.py 2024-05-15 13:01:44 +08:00
fc1e23f12d Update index.py 2024-05-15 12:31:52 +08:00
ae4af02909 Update index.py 2024-05-15 12:27:54 +08:00
6b8716ae59 Update index.py 2024-05-15 12:07:57 +08:00
661faf8503 Update index.py 2024-05-15 11:57:58 +08:00
d0881ff3eb Update index.py 2024-05-15 06:04:24 +08:00
b708d4821a Update index.py 2024-05-15 05:59:39 +08:00
2f18bf5fb2 Update index.py 2024-05-15 05:50:25 +08:00
2079076638 Update index.py 2024-05-15 05:42:44 +08:00
6ec2e4f29f Update index.py 2024-05-15 05:41:51 +08:00
a07ed61305 Update index.py 2024-05-15 05:38:59 +08:00
8031ea2c45 Update index.py 2024-05-15 05:35:14 +08:00
24d3fc18d6 Update index.py 2024-05-15 05:05:29 +08:00
4b200765aa Update index.py 2024-05-15 05:02:01 +08:00
994ee32fbf Update index.py 2024-05-15 05:00:03 +08:00
c6a742a932 Update index.py 2024-05-15 04:57:51 +08:00
478e03bca1 Update index.py 2024-05-15 04:42:42 +08:00
f4cff7bcf7 Update index.py 2024-05-15 04:35:52 +08:00
ff7d2f358e Update index.py 2024-05-15 04:35:12 +08:00
e114b07d7d Update index.py 2024-05-15 04:30:04 +08:00
272b13b29c Update index.py 2024-05-15 04:24:13 +08:00
8d875fe589 Update index.py 2024-05-15 04:23:17 +08:00
e85e6a7299 update 2024-05-15 04:22:14 +08:00
e8a3f8b014 Update orm.py 2024-05-15 04:16:49 +08:00
585cd8b532 update_dev 2024-05-15 04:06:15 +08:00
c89ee89061 Update index.py 2024-05-15 01:20:42 +08:00
ea7310502f Update index.py 2024-05-15 01:19:02 +08:00
507b34797d Update backup.py 2024-05-15 01:18:56 +08:00
7baecfc4a0 Update README.md 2024-05-14 23:57:17 +08:00
8a1b64a524 Update index.py 2024-05-14 23:21:44 +08:00
89052225f9 Update index.py 2024-05-14 23:20:55 +08:00
b4c0030baa Update index.py 2024-05-14 23:20:26 +08:00
342dfe407c Create README.md 2024-05-14 22:36:37 +08:00
f9020d3c7f Update index.py 2024-05-14 22:24:08 +08:00
d9eb331f32 Update index.py 2024-05-14 22:23:24 +08:00
bc9b5ab511 Update install.sh 2024-05-14 21:48:55 +08:00
b71e3196b8 Update index.py 2024-05-14 21:38:07 +08:00
69b8c609aa Update index.py 2024-05-14 21:36:07 +08:00
b1ff41350c Update index.py 2024-05-14 21:02:24 +08:00
ddc9defe51 Update index.py 2024-05-14 20:59:46 +08:00
2942e47630 Update backup.py 2024-05-14 20:58:49 +08:00
b825ed9c76 Update index.py 2024-05-14 20:56:01 +08:00
5d2dd11163 Update index.py 2024-05-14 20:54:47 +08:00
253de5e70f Update index.py 2024-05-14 20:11:59 +08:00
a1e900f5c9 Update index.py 2024-05-14 19:25:18 +08:00
cf44889c74 Update index.py 2024-05-14 19:25:00 +08:00
abd48636ab Update index.py 2024-05-14 19:03:17 +08:00
cc0cdd62b8 Update index.py 2024-05-14 16:24:33 +08:00
0b95db3bd5 Update index.py 2024-05-14 16:13:06 +08:00
d473f0769f Update mongodb.js 2024-05-14 16:11:23 +08:00
dd498c2cfc update 2024-05-14 14:12:21 +08:00
77b4d0452a Update mongodb.sh 2024-05-13 23:18:00 +08:00
924e1ddbec Update layout.html 2024-05-13 22:35:10 +08:00
3213cee5f8 Update mongodb.sh 2024-05-13 20:50:45 +08:00
9fbf09f2ef Create tidb_debug.yaml 2024-05-13 10:41:00 +08:00
fd3e074cc3 Update install.sh 2024-05-13 03:18:02 +08:00
574007da2c Update stats.js 2024-05-13 02:47:13 +08:00
ec6c1b2024 Update nginx.conf 2024-05-12 16:09:36 +08:00
0dd6f47b2a Update index.py 2024-05-12 15:59:19 +08:00
968827480e Update install.sh 2024-05-12 14:42:07 +08:00
4bce8bb56d Update index.py 2024-05-12 14:35:53 +08:00
00fa001c91 update 2024-05-12 14:27:36 +08:00
2f65839b9a Update index.py 2024-05-12 14:17:49 +08:00
c0aa4bcc1e Update mongodb.js 2024-05-12 14:10:52 +08:00
4bb345abc4 update 2024-05-12 14:06:56 +08:00
3d552379bc update 2024-05-12 12:55:14 +08:00
2de399b70f Update index.py 2024-05-12 12:46:41 +08:00
7952570b45 update 2024-05-12 10:58:12 +08:00
00269662bf Create tidb.yaml 2024-05-12 01:25:10 +08:00
fb6dbde4c9 Update config_api.py 2024-05-12 01:18:49 +08:00
66a9ca2a5a Update files.js 2024-05-12 01:18:32 +08:00
2e9561dd86 Update files_api.py 2024-05-12 01:10:04 +08:00
47ff1e4458 Update r3.7.txt 2024-05-12 00:28:20 +08:00
9f49595bad Update r3.6.txt 2024-05-12 00:28:08 +08:00
3e6f4f32d5 Update install.sh 2024-05-11 23:42:26 +08:00
ae69d58ee8 Update install.sh 2024-05-11 23:40:45 +08:00
1788054cc4 Update install.sh 2024-05-11 22:14:51 +08:00
20b20d3cce Update index.py 2024-05-11 22:13:53 +08:00
3fc3d90b6f Update install.sh 2024-05-11 22:09:57 +08:00
cef6db80a2 Update install.sh 2024-05-11 22:08:06 +08:00
59aab80eab Update install.sh 2024-05-11 22:03:56 +08:00
53c2c71d3e Update install.sh 2024-05-11 21:56:24 +08:00
d9d814202a Update install.sh 2024-05-11 21:51:40 +08:00
941dbecfa2 Update index.py 2024-05-11 21:48:05 +08:00
cb7228c681 Update index.py 2024-05-11 21:47:55 +08:00
7ac1cb2944 Update index.py 2024-05-11 21:47:46 +08:00
0262d29218 Update install.sh 2024-05-11 21:46:48 +08:00
5a955c2a33 tidb插件init 2024-05-11 20:21:07 +08:00
Mr Chen
dd25ebe1e9 Merge pull request #574 from midoks/dev
修复
2024-05-11 13:54:29 +08:00
e92151c9c5 Update site_api.py 2024-05-11 13:52:52 +08:00
16cc3eab40 Update site_api.py 2024-05-11 13:52:39 +08:00
Mr Chen
87138fc41f Merge pull request #573 from midoks/dev
迁移加入版本判断
2024-05-11 12:38:52 +08:00
0787bff959 Update index.py 2024-05-11 12:36:57 +08:00
Mr Chen
8fc6855936 Merge pull request #572 from midoks/dev
mysql 不锁表导出
2024-05-11 12:13:27 +08:00
43f21b4d58 Update backup.py 2024-05-11 12:06:59 +08:00
56e75bc4cf Update backup.py 2024-05-11 11:59:38 +08:00
10190201c7 Update backup.py 2024-05-11 11:46:49 +08:00
Mr Chen
3db2aa0034 Merge pull request #571 from midoks/dev
Update site_api.py
2024-05-11 11:08:09 +08:00
9fa93b5c84 Update site_api.py 2024-05-11 11:07:23 +08:00
Mr Chen
fe3e9eec35 Merge pull request #570 from midoks/dev
调优
2024-05-10 17:40:28 +08:00
86a3922d4f Update index.html 2024-05-10 17:38:48 +08:00
aa50658245 update 2024-05-10 17:36:06 +08:00
8cd78d7dea Update index.js 2024-05-10 17:25:19 +08:00
Mr Chen
f33bfa214f Merge pull request #569 from midoks/dev
Update README.md
2024-05-10 16:26:26 +08:00
e231c38f1d Update README.md 2024-05-10 16:25:20 +08:00
Mr Chen
a6a3cf7882 Merge pull request #568 from midoks/dev
0.16.8
2024-05-10 15:34:21 +08:00
a1afe5e846 0.16.8
- 首页对网络/磁盘IO进行更细致的展示。
2024-05-10 15:30:49 +08:00
594e8c4b2b update 2024-05-10 14:36:38 +08:00
cc015bad61 update 2024-05-10 14:35:51 +08:00
bc9461dea6 update 2024-05-10 13:32:46 +08:00
0a25598c15 Update config_api.py 2024-05-10 12:14:05 +08:00
7a9a8a08b6 Update index.js 2024-05-10 12:13:51 +08:00
8eb728defa index加入io统计展示 2024-05-10 12:04:21 +08:00
7f8ffbf178 Update site.css 2024-05-10 04:36:43 +08:00
cb0027e903 Update system_api.py 2024-05-10 04:23:48 +08:00
e0ebdd922d Update site.css 2024-05-10 02:16:49 +08:00
d6f43a86c9 Update system_api.py 2024-05-10 02:16:39 +08:00
dfe7becdb1 Update system_api.py 2024-05-09 23:43:16 +08:00
57f4162cb8 Update mongodb.js 2024-05-09 01:08:14 +08:00
a9ce4f2e23 Update mongodb.js 2024-05-09 01:05:03 +08:00
b501d62d91 Update mongodb.js 2024-05-09 01:03:41 +08:00
Mr Chen
45ffba1559 Merge pull request #567 from midoks/dev
mysql手动导入大文件sql
2024-05-08 17:02:59 +08:00
28d0fbe106 手动导入大文件sql 2024-05-08 17:01:58 +08:00
Mr Chen
eeb8fee3b3 Merge pull request #566 from midoks/dev
日志清理-改成每隔7天
2024-05-08 12:59:59 +08:00
0e1fbdcfb9 update 2024-05-08 12:58:55 +08:00
Mr Chen
df2744816b Merge pull request #565 from midoks/dev
php更新和安装脚本加入pv命令
2024-05-08 12:34:20 +08:00
862c09778a Update euler.sh 2024-05-08 12:32:52 +08:00
8f9a1888ff update 2024-05-08 12:32:37 +08:00
66351dc3a7 update 2024-05-08 12:28:50 +08:00
Mr Chen
55c4709c93 Merge pull request #564 from midoks/dev
日志清理优化
2024-05-08 01:33:02 +08:00
e27ae42270 Update index.py 2024-05-08 01:27:23 +08:00
70805de98e Update index.py 2024-05-08 01:26:43 +08:00
c0e09e43a2 Update index.py 2024-05-08 01:25:58 +08:00
b69a32c81f Update index.py 2024-05-08 01:20:29 +08:00
2431833cce Update index.py 2024-05-08 01:19:53 +08:00
a85d8ec429 Update index.html 2024-05-08 01:15:59 +08:00
ce5a6edeea Update tool_task.py 2024-05-08 01:13:34 +08:00
aa195dea2c Update tool_task.py 2024-05-08 00:52:51 +08:00
840a3c5911 Update layout.html 2024-05-08 00:27:09 +08:00
ca87ab78b3 Update layout.html 2024-05-08 00:11:04 +08:00
d9fc411168 Update layout.html 2024-05-08 00:00:37 +08:00
Mr Chen
e468ab16eb Merge pull request #563 from midoks/dev
细节优化
2024-05-07 20:26:43 +08:00
c545062d07 Update index.py 2024-05-07 20:24:05 +08:00
Mr Chen
e620fd67e3 Merge pull request #562 from midoks/dev
mongodb删除保护
2024-05-07 20:18:53 +08:00
aa9a412e9a mongodb删除保护 2024-05-07 20:18:23 +08:00
Mr Chen
ad63a22a7e Merge pull request #561 from midoks/dev
0.16.7
2024-05-07 20:08:54 +08:00
5b1e4d3e0a 0.16.7
- mongodb副本设置/备份/认证。
2024-05-07 20:08:11 +08:00
110e9b501e 优化 2024-05-07 01:27:09 +08:00
26de973b82 Update mongodb.js 2024-05-07 01:02:15 +08:00
9adc0a8c38 Update index.py 2024-05-06 17:51:26 +08:00
08f75685fb Update index.py 2024-05-06 17:17:58 +08:00
dc59f24ce2 Update index.py 2024-05-06 17:17:36 +08:00
869843da82 Update index.py 2024-05-06 17:17:08 +08:00
01055e3403 Update mongodb.sql 2024-05-06 17:07:08 +08:00
43cfbc90a2 Update index.py 2024-05-06 17:02:37 +08:00
270fb15ebf Update index.py 2024-05-06 17:01:05 +08:00
4e7e4f5fb4 Update index.py 2024-05-06 16:57:47 +08:00
67530acf1d Update index.py 2024-05-06 16:42:10 +08:00
7a86ba4444 Update index.py 2024-05-06 15:20:56 +08:00
f4f29784d7 Update index.py 2024-05-06 15:20:34 +08:00
fafa64f2c7 Update index.py 2024-05-06 02:28:01 +08:00
41c7b0fb70 Update index.py 2024-05-06 02:13:59 +08:00
a779caea41 Update index.py 2024-05-06 02:11:37 +08:00
a8b97bf6d7 Update index.py 2024-05-06 01:33:14 +08:00
b31bfcb88a Update index.py 2024-05-06 01:24:55 +08:00
dbb95228b1 Update backup.py 2024-05-06 01:24:16 +08:00
5ad4772c33 Update index.py 2024-05-06 01:14:07 +08:00
b270c1bfdc Update mongodb.js 2024-05-06 01:10:39 +08:00
c8ccf4b1c8 Update backup.py 2024-05-06 00:51:28 +08:00
6eb21ffbf9 Update backup.py 2024-05-06 00:51:17 +08:00
58ce8db1d0 update 2024-05-06 00:49:48 +08:00
8b1bf28cf7 Update backup.py 2024-05-06 00:44:20 +08:00
0e98e114fa Update index.py 2024-05-06 00:16:51 +08:00
4c93cd77e0 Update index.py 2024-05-06 00:13:10 +08:00
7044d27ca9 Update info.json 2024-05-05 23:46:52 +08:00
9168af0a9c Update index.py 2024-05-05 23:36:34 +08:00
f893eec0e4 Update index.py 2024-05-05 20:27:58 +08:00
574c7558b4 Update mongodb.js 2024-05-05 20:08:37 +08:00
4901910a71 update 2024-05-05 20:07:36 +08:00
286be2a9f6 Update index.py 2024-05-05 20:03:18 +08:00
fed18880be Update index.py 2024-05-05 19:54:18 +08:00
b862cd2413 Update index.py 2024-05-05 19:53:34 +08:00
8c652c99da Update index.py 2024-05-05 19:50:42 +08:00
728677c702 update 2024-05-05 19:46:45 +08:00
4a023531e4 Update index.py 2024-05-05 18:21:50 +08:00
8d27ffbe91 update 2024-05-05 18:03:40 +08:00
afa32231ad mongodb备份 2024-05-05 17:49:29 +08:00
e693d15a04 Update mongodb.js 2024-05-05 14:50:21 +08:00
814d0cb925 update 2024-05-05 14:44:37 +08:00
6d95f7fd82 update 2024-05-05 14:43:41 +08:00
979c1fc530 Update index.py 2024-05-05 14:40:50 +08:00
c147ccd079 update 2024-05-05 14:25:47 +08:00
71b64b19a1 Update index.py 2024-05-05 13:51:59 +08:00
fdac352244 update 2024-05-05 13:45:50 +08:00
da5de004c4 Update backup.py 2024-05-05 12:34:29 +08:00
8108ca7ee6 Update backup.py 2024-05-05 12:12:23 +08:00
ba2fbbeb41 Update mongodb.conf 2024-05-05 11:01:50 +08:00
614e7af3c4 Update debian.sh 2024-05-04 22:26:14 +08:00
ec67913cda update 2024-05-04 22:26:09 +08:00
847353374f update 2024-05-04 21:44:32 +08:00
239d1de0ec Create backup.py 2024-05-04 18:05:55 +08:00
5fefbb46a7 Update index.py 2024-05-04 18:00:10 +08:00
4288ccfc0c Update index.py 2024-05-04 17:28:18 +08:00
367aeddd2d Update index.py 2024-05-04 16:24:57 +08:00
76ec5b58cd up 2024-05-04 16:14:27 +08:00
f0cc9e2d54 update 2024-05-04 16:02:44 +08:00
b3630699ce Update mongodb.js 2024-05-04 15:49:33 +08:00
dfe9a10a47 Update mongodb.js 2024-05-04 15:45:46 +08:00
c34405a4d6 Update index.py 2024-05-04 15:37:18 +08:00
3068e3b033 Update index.py 2024-05-04 15:28:09 +08:00
10db173b31 Update index.py 2024-05-04 15:26:18 +08:00
3db40877cd Update index.py 2024-05-04 15:24:44 +08:00
adc7f2fe98 Update index.py 2024-05-04 15:24:27 +08:00
6dc81175ea Update mongodb.js 2024-05-04 15:22:13 +08:00
c64183abe9 Update index.py 2024-05-04 14:44:27 +08:00
8eb2403e4b update 2024-05-04 14:34:38 +08:00
4c2178ea9c Update index.py 2024-05-03 19:26:25 +08:00
6702fb94a0 update 2024-05-03 19:01:34 +08:00
c4bc66e410 update 2024-05-03 18:30:50 +08:00
54a6a121ac Update index.py 2024-05-03 16:25:47 +08:00
1bb92d7f38 Update install.sh 2024-05-03 16:19:30 +08:00
9a99a5e1c6 Update index.py 2024-05-03 16:16:16 +08:00
eeeff6e825 update 2024-05-03 16:07:55 +08:00
8ee5b0a4aa update 2024-05-03 16:00:09 +08:00
4ee5e41882 update 2024-05-03 12:05:02 +08:00
8c4820046a Update index.py 2024-05-03 00:48:08 +08:00
1b6f54e6a5 update 2024-05-03 00:45:28 +08:00
9ae7644710 updatte 2024-05-02 19:58:58 +08:00
0ab87b1da5 update 2024-05-02 19:15:13 +08:00
6b7457e660 Update mongodb.js 2024-05-02 15:53:28 +08:00
b81deee461 up 2024-05-02 15:52:10 +08:00
59211703f8 Update index.py 2024-05-01 23:55:28 +08:00
3271e76d34 Update index.py 2024-05-01 23:50:45 +08:00
dca0955bb6 update 2024-05-01 23:48:40 +08:00
7af78883cc Update index.html 2024-05-01 20:35:23 +08:00
0f2db3f144 Update mongodb.js 2024-05-01 20:34:09 +08:00
eb2c476b28 update 2024-05-01 20:33:36 +08:00
99a57d29af Update php.js 2024-05-01 17:54:17 +08:00
ed0afb6b86 Update requirements.txt 2024-05-01 11:22:59 +08:00
2f005cbadd update 2024-05-01 03:36:34 +08:00
7bac4e0a6b Update setting.py 2024-05-01 03:13:28 +08:00
2dad4189c8 up 2024-04-30 17:18:30 +08:00
5c1fe49e1b update 2024-04-30 17:18:17 +08:00
9a5cd7e834 Update mongodb.conf 2024-04-30 14:49:37 +08:00
78a032a18b upda 2024-04-30 11:15:00 +08:00
b99a9d7d2f Update nosql_mongodb.py 2024-04-29 23:40:01 +08:00
36c9628695 Update nosql_mongodb.py 2024-04-29 23:38:59 +08:00
ccd7468ffe Update nosql_mongodb.py 2024-04-29 23:37:41 +08:00
129b244ea9 Update nosql_mongodb.py 2024-04-29 23:36:17 +08:00
716e39f947 Update index.py 2024-04-29 23:32:41 +08:00
a0167e7cf2 Update nosql_mongodb.py 2024-04-29 23:26:55 +08:00
2c6dea64ab Update index.py 2024-04-29 22:49:07 +08:00
9605676dbe update 2024-04-29 22:40:15 +08:00
a4e7be46fb Update debian.sh 2024-04-29 22:38:06 +08:00
e2ce520041 Update debian.sh 2024-04-29 22:34:34 +08:00
d1fc41682e Update debian.sh 2024-04-29 22:33:11 +08:00
56918a1ba2 Update debian.sh 2024-04-29 22:32:42 +08:00
869788028c Update debian.sh 2024-04-29 22:32:01 +08:00
a262c6c0b7 update 2024-04-29 22:24:59 +08:00
54682ef02c Update index.py 2024-04-29 21:47:53 +08:00
093bf3910b Update index.py 2024-04-29 21:22:31 +08:00
0b65f50b4b Update index.py 2024-04-29 21:21:35 +08:00
a1995772ef Update index.py 2024-04-29 21:20:34 +08:00
fcef433ba3 Update index.py 2024-04-29 21:20:14 +08:00
6950f0c7c9 Update index.py 2024-04-29 21:18:04 +08:00
e987c4d27e up 2024-04-29 19:45:58 +08:00
25c72b299e update 2024-04-29 18:35:19 +08:00
Mr Chen
8f4f182064 Merge pull request #559 from midoks/dev
文件名排序
2024-04-29 16:05:44 +08:00
2cd37b988f update 2024-04-29 16:04:49 +08:00
040ef6e22b Update index.py 2024-04-29 15:22:12 +08:00
5dfd0508da Update index.py 2024-04-29 15:19:37 +08:00
b0b043f432 Update index.py 2024-04-29 14:59:37 +08:00
cfe063a6e7 Update index.py 2024-04-29 14:59:00 +08:00
Mr Chen
22a5e147d2 Merge pull request #558 from midoks/dev
mysql8.3配置
2024-04-28 13:37:06 +08:00
648e4b3866 Update index.py 2024-04-28 13:34:26 +08:00
ffb5a66042 Create my8.3.cnf 2024-04-28 12:37:43 +08:00
e1593b67fc Update install.sh 2024-04-27 13:18:52 +08:00
871d7ef535 Update info.json 2024-04-27 13:17:59 +08:00
ac32c639fa update 2024-04-27 13:16:46 +08:00
Mr Chen
997c8194b6 Merge pull request #557 from midoks/dev
网站统计优化
2024-04-26 20:17:18 +08:00
7334ec38fb update 2024-04-26 20:00:54 +08:00
cafc7989e9 Update requirements.txt 2024-04-26 15:26:50 +08:00
2354d484ee Update __init__.py 2024-04-26 15:23:49 +08:00
f7ebdcb182 Update __init__.py 2024-04-26 15:09:53 +08:00
8305dc0ebe update 2024-04-26 15:09:37 +08:00
5923042bf1 update 2024-04-26 15:07:50 +08:00
00b162771f Update webstats_index.py 2024-04-26 15:03:43 +08:00
4b9ab17fcb Update webstats_index.py 2024-04-26 15:01:03 +08:00
946bd36e66 Update webstats_index.py 2024-04-26 14:50:10 +08:00
Mr Chen
42f4e419cd Merge pull request #556 from midoks/dev
网站统计优化
2024-04-26 13:48:48 +08:00
f7c8b8cdb5 Update swoole.sh 2024-04-26 13:43:12 +08:00
fdf8f30d90 Update stats.js 2024-04-26 13:34:37 +08:00
0f1127e502 Update stats.js 2024-04-26 13:29:34 +08:00
12c59f6ac6 统计查询优化 2024-04-26 13:15:08 +08:00
1f3414f5bc Update phplib.conf 2024-04-25 21:48:47 +08:00
Mr Chen
94a6a3f64d Merge pull request #555 from midoks/dev
切换获取ip的地址
2024-04-25 19:32:18 +08:00
812a520c43 Merge branch 'master' into dev 2024-04-25 19:27:38 +08:00
a48429f9f8 Update tools.py 2024-04-25 19:19:57 +08:00
Mr Chen
9aa4bdfd19 Merge pull request #554 from midoks/dev
debian/ubuntu 443/udp ufw防火墙默认开启。
2024-04-24 22:55:48 +08:00
7c3cde83df Merge branch 'master' into dev 2024-04-24 22:53:51 +08:00
Mr Chen
af00b1b127 Merge pull request #553 from jd82k/master
修复提交正则过滤时,因为正则中存在冒号,错误的将所有的冒号用于分割,应该只使用第一个冒号分割
2024-04-24 22:52:52 +08:00
jd82k
8a0e8e9c17 增加了一些非法扫描器及脚本
通过1年的日志分析,收集了一些非法扫描器、脚本、爬虫的UA
2024-04-24 22:42:05 +08:00
982ee4f60f Merge branch 'master' into dev 2024-04-24 22:40:48 +08:00
jd82k
c735dab40d 修复提交正则过滤时,因为正则中存在冒号,错误的将所有的冒号用于分割,应该只使用第一个冒号分割 2024-04-24 22:23:37 +08:00
Mr Chen
32b8cdf9bc Merge pull request #552 from jd82k/master
修复笔误
2024-04-24 16:56:19 +08:00
jd82k
fd7fa885ca 修复笔误 2024-04-24 16:50:05 +08:00
f4642d3b69 Merge branch 'master' into dev 2024-04-24 16:07:38 +08:00
Mr Chen
f54be91744 Merge pull request #551 from jd82k/master
修复数据类型错误导致的openresty lua error 从而使得useragent匹配失效的bug
2024-04-24 16:06:40 +08:00
jd82k
4ecbfb3e58 修复数据类型错误导致的openresty lua error 从而使得useragent匹配失效的bug 2024-04-24 14:52:07 +08:00
309cf2825e update 2024-04-24 11:32:41 +08:00
ecbc0f6afe Update plugins_api.py 2024-04-21 17:49:38 +08:00
c402a1dc79 update 2024-04-20 13:25:02 +08:00
Mr Chen
c949e8d0f2 Merge pull request #549 from midoks/dev
centos7的python库安装优化
2024-04-18 11:08:50 +08:00
195446ef86 update 2024-04-18 11:05:40 +08:00
e6a1fe58bc Update requirements.txt 2024-04-18 11:03:32 +08:00
3a9b1b374d Update site_api.py 2024-04-18 00:04:14 +08:00
Mr Chen
8bb0e744bb Merge pull request #548 from midoks/dev
常规更新
2024-04-17 23:44:25 +08:00
1182894326 Update nginx.conf 2024-04-17 23:43:46 +08:00
77b03f4a21 Update site_api.py 2024-04-17 23:41:38 +08:00
72bc30e188 Update install.sh 2024-04-17 23:25:32 +08:00
Mr Chen
35c789fc00 Merge pull request #547 from midoks/dev
部分php扩展更新
2024-04-17 18:58:35 +08:00
738bf5d441 Update gd_old.sh 2024-04-17 18:55:26 +08:00
22a62e6cb8 Update gd_old.sh 2024-04-17 18:53:57 +08:00
a63a1b8b51 Update xdebug.sh 2024-04-17 18:47:30 +08:00
c51f885653 Update gd_old.sh 2024-04-17 18:44:46 +08:00
266a23b7eb Update swoole.sh 2024-04-17 18:39:38 +08:00
48603b14da Update phplib.conf 2024-04-17 18:37:19 +08:00
7e7e19455e Update event.sh 2024-04-17 18:37:09 +08:00
7657ccb94e Update event.sh 2024-04-17 18:31:40 +08:00
Mr Chen
80ade55b69 Merge pull request #546 from midoks/dev
reuseport
2024-04-17 18:28:00 +08:00
a643c9b5f4 Update site_api.py 2024-04-17 18:25:53 +08:00
15dc4ae7cf Update site_api.py 2024-04-17 17:56:43 +08:00
Mr Chen
030734cc93 Merge pull request #545 from midoks/dev
http/3调整
2024-04-17 17:54:09 +08:00
1439d4edf6 Update site_api.py 2024-04-17 17:52:22 +08:00
d6a816b06e Update site_api.py 2024-04-17 17:40:00 +08:00
b6e1f46379 Update site_api.py 2024-04-17 17:38:08 +08:00
d926a69b59 Update site_api.py 2024-04-17 17:35:48 +08:00
0504ca3887 Update site_api.py 2024-04-17 16:58:08 +08:00
3f36019c2e Create altsvc.cache 2024-04-17 16:44:51 +08:00
b64e3b772f Update all_test.sh 2024-04-17 13:07:21 +08:00
ff29679b42 update 2024-04-17 12:34:07 +08:00
5aca1ef708 Update r3.6.txt 2024-04-17 11:29:03 +08:00
95a84c7ac5 Update r3.7.txt 2024-04-17 11:27:22 +08:00
28c2335223 Update r3.7.txt 2024-04-17 11:25:18 +08:00
8ea87a47ea Update r3.6.txt 2024-04-17 11:25:05 +08:00
57058f5ab0 Update requirements.txt 2024-04-17 11:18:10 +08:00
Mr Chen
b31d30bb31 Merge pull request #542 from midoks/dev
0.16.6
2024-04-17 01:52:02 +08:00
0670b7f338 Update README.md 2024-04-17 01:49:06 +08:00
c25ecc9db2 Update config_api.py 2024-04-17 01:41:21 +08:00
d0d75f4526 Update site_api.py 2024-04-17 01:37:50 +08:00
539857919a Update site_api.py 2024-04-17 01:20:34 +08:00
5139cacce8 Update install.sh 2024-04-17 00:59:06 +08:00
222c4c6d58 Update site_api.py 2024-04-17 00:53:33 +08:00
c2d6f5408d Update site_api.py 2024-04-17 00:50:06 +08:00
d3a5b9874b Update site_api.py 2024-04-17 00:43:23 +08:00
87da2b9fc5 443同时开启tcp/udp 2024-04-16 23:41:06 +08:00
a3a40c830b Update install.sh 2024-04-16 23:11:17 +08:00
d30ff5b882 Update install.sh 2024-04-16 23:10:30 +08:00
8a0e4122f3 Update install.sh 2024-04-16 23:00:42 +08:00
0766ad0063 update 2024-04-16 22:58:18 +08:00
04823f656a Update site_api.py 2024-04-16 22:19:05 +08:00
5d50b3664d Update install.sh 2024-04-16 21:43:16 +08:00
889c5d96e5 Update bcmath.sh 2024-04-16 21:25:29 +08:00
c6ac7e90df Revert "Update requirements.txt"
This reverts commit 28fe1950c4.
2024-04-16 19:38:51 +08:00
28fe1950c4 Update requirements.txt 2024-04-16 19:38:25 +08:00
Mr Chen
4a9baeb924 Merge pull request #541 from midoks/dev
修复
2024-04-16 15:59:38 +08:00
3e6a2e148c Update files.js 2024-04-16 15:58:46 +08:00
79ec3b2ec0 Update push_notice_msg.py 2024-04-16 14:47:57 +08:00
4b7b8aa801 Update args.json 2024-04-15 22:38:53 +08:00
66ea1b7f5b Update cookie.json 2024-04-15 22:37:53 +08:00
a9b703c6ee Update post.json 2024-04-15 22:36:45 +08:00
00b57bc1c0 Update user_agent.json 2024-04-15 22:34:50 +08:00
47cfe6ee04 Update user_agent.json 2024-04-15 22:34:10 +08:00
2b9c47b79c Update user_agent.json 2024-04-15 22:33:52 +08:00
Mr Chen
540fb5a11f Merge pull request #539 from midoks/dev
0.16.5
2024-04-15 17:02:43 +08:00
5dca6bfb80 update 2024-04-15 17:01:23 +08:00
8439fcbe98 Update config_api.py 2024-04-15 16:58:13 +08:00
6cee6f4785 Update info.json 2024-04-15 16:48:20 +08:00
6a067ad457 Update README.md 2024-04-15 14:23:42 +08:00
691aba1f2a Update config_api.py 2024-04-15 14:12:45 +08:00
6446a7053e https://github.com/midoks/mdserver-web/discussions/536 2024-04-15 14:11:45 +08:00
040c66cdc3 Update site.css 2024-04-15 02:01:57 +08:00
c8d02eaa85 Update files.html 2024-04-15 02:01:52 +08:00
59bbd99ba4 Update cert_api.py 2024-04-15 00:42:38 +08:00
c8d86fa835 Update cert_api.py 2024-04-15 00:27:46 +08:00
e629a82ed9 Update cert_api.py 2024-04-15 00:21:58 +08:00
fb0a771c81 Update cert_request.py 2024-04-15 00:11:02 +08:00
891cd56163 Update config.json 2024-04-13 11:56:49 +08:00
0714780938 Update zip.sh 2024-04-12 21:36:52 +08:00
0a11f17d90 Update phplib.conf 2024-04-12 21:34:44 +08:00
e22722f40e Update cert_api.py 2024-04-10 22:07:09 +08:00
519544715f Update README.md 2024-04-09 16:00:09 +08:00
Mr Chen
6d34061402 Merge pull request #535 from midoks/dev
优化
2024-04-05 02:31:50 +08:00
119928d9df 优化
* 任务日志查看优化。
* 优化MySQL打开phpMyAdmin速度。
2024-04-05 02:31:05 +08:00
022dfe31d4 update 2024-04-05 02:28:03 +08:00
c2011eedf9 Update mysql.js 2024-04-05 02:23:01 +08:00
b77d549b34 Update mysql.js 2024-04-05 02:19:24 +08:00
0b3bcafec7 update 2024-04-05 02:18:02 +08:00
4e12548978 Update mysql.js 2024-04-05 02:08:00 +08:00
bf7de761c8 update 2024-04-05 02:06:19 +08:00
bfc96e925f Update mysql.js 2024-04-05 01:57:06 +08:00
de1da98e92 Update index.py 2024-04-05 01:55:35 +08:00
d4edc449a2 Update index.py 2024-04-05 01:53:41 +08:00
a03d4e7dda Update index.py 2024-04-05 01:50:27 +08:00
4351367e32 update 2024-04-05 01:49:34 +08:00
0ec628f5e2 update 2024-04-05 01:28:47 +08:00
a94ef37b49 Update config_api.py 2024-04-05 01:17:19 +08:00
cf8729a6ac Update crontab.js 2024-04-05 01:16:49 +08:00
3688456ea0 Update install.sh 2024-04-04 18:14:42 +08:00
47c64e7212 Update site_api.py 2024-04-04 17:59:35 +08:00
e653f76608 Update info.json 2024-04-04 17:48:41 +08:00
d40d0001bf Update install.sh 2024-04-04 12:45:27 +08:00
793a236641 Update install.sh 2024-04-04 12:42:11 +08:00
Mr Chen
07996a3fe5 Merge pull request #533 from midoks/dev
Update README.md
2024-04-04 12:35:37 +08:00
a826f784fc Update README.md 2024-04-04 12:35:16 +08:00
Mr Chen
1561768524 Merge pull request #532 from midoks/dev
Update README.md
2024-04-04 12:34:32 +08:00
1d899fe330 Update README.md 2024-04-04 12:34:09 +08:00
Mr Chen
a1b3e70816 Merge pull request #531 from midoks/dev
0.16.4
2024-04-04 12:32:06 +08:00
6f4479558f Update README.md 2024-04-04 12:31:17 +08:00
f817792aeb Update config_api.py 2024-04-04 12:29:34 +08:00
c8c0e44143 Update op_waf.js 2024-04-04 12:26:29 +08:00
6668c2e14b update 2024-04-04 11:42:19 +08:00
721f041c65 Update README.md 2024-04-04 00:20:05 +08:00
Mr Chen
87239f5361 Merge pull request #530 from midoks/dev
更新为支付宝
2024-04-04 00:18:55 +08:00
b48e3cbfcc update 2024-04-04 00:17:58 +08:00
4b41c6df57 update 2024-04-02 00:17:20 +08:00
b491a6e913 Update README.md 2024-03-29 15:38:01 +08:00
Mr Chen
42271c5562 Merge pull request #529 from midoks/dev
discord
2024-03-29 15:30:24 +08:00
ef63465aea Update README.md 2024-03-29 15:28:40 +08:00
Mr Chen
98745e8134 Merge pull request #528 from midoks/dev
简单优化+ whatapp
2024-03-29 11:21:41 +08:00
2fb293c89c Update README.md 2024-03-29 11:20:59 +08:00
4e0db8d0a1 Update commit.tpl.ssh 2024-03-27 21:11:53 +08:00
4b1e40b42d Update index.html 2024-03-26 17:47:26 +08:00
935bee90f7 Update index.html 2024-03-26 17:42:25 +08:00
0489a9df2c Update config_api.py 2024-03-19 23:29:27 +08:00
20a4154240 update 2024-03-19 23:27:17 +08:00
a8ced31d32 Update mw.py 2024-03-19 23:24:40 +08:00
ac97b8f7ec Update tools.py 2024-03-19 23:21:19 +08:00
a797cd3741 Update push_notice_msg.py 2024-03-18 15:42:27 +08:00
Mr Chen
a616736bf1 Merge pull request #526 from midoks/dev
AD及 二次验证
2024-03-18 15:26:22 +08:00
8a90f5cb90 ad 2024-03-18 15:25:30 +08:00
419d4abe8e Update login.html 2024-03-10 19:21:18 +08:00
ba555fba63 Update __init__.py 2024-03-10 19:16:05 +08:00
7ead8708bc Update __init__.py 2024-03-10 19:15:42 +08:00
bd5b066afe Update __init__.py 2024-03-10 19:10:57 +08:00
6d08c160e0 Update __init__.py 2024-03-10 19:10:27 +08:00
f24f8a3a16 Update config_api.py 2024-03-10 18:35:05 +08:00
707b0d4b53 Update tools.py 2024-03-10 18:34:26 +08:00
d19e9cd8f4 二次验证,加强安全登录 2024-03-10 18:27:39 +08:00
a2d0cc6cfe Update requirements.txt 2024-03-10 14:43:53 +08:00
356fd831fb Update requirements.txt 2024-03-10 14:33:09 +08:00
ec4988e732 update 2024-02-19 18:41:32 +08:00
3a694b8d7d ad
# 海外服务器 高防CDN 解决移动屏蔽 | 19/m | next,2/19 | @YYCDNFW
2024-02-19 18:35:37 +08:00
Mr Chen
d5945fd449 Merge pull request #524 from midoks/dev
更换GitHub Proxy
2024-02-08 16:47:46 +08:00
10186786d9 更换GitHub Proxy
更换GitHub Proxy
2024-02-08 16:46:43 +08:00
Mr Chen
0eb8791e84 Merge pull request #523 from midoks/dev
Update sql_mysql.py
2024-02-07 01:57:51 +08:00
5234b55798 Update sql_mysql.py 2024-02-07 01:54:30 +08:00
Mr Chen
4efe740504 Merge pull request #522 from midoks/dev
0.16.3
2024-02-06 22:53:11 +08:00
bde0ed59ad Update README.md 2024-02-06 22:52:15 +08:00
19c855790f Update config_api.py 2024-02-06 22:51:47 +08:00
4a90f1b8b0 Update app.js 2024-02-06 22:45:25 +08:00
f83bdffed8 update 2024-02-06 22:44:52 +08:00
087cb4fc37 Update app.js 2024-02-06 22:16:09 +08:00
66bcd15502 update 2024-02-06 22:14:17 +08:00
29e3dedbe9 update 2024-02-06 22:11:02 +08:00
f10160c239 update 2024-02-06 22:06:26 +08:00
376d09a955 up 2024-02-06 21:31:20 +08:00
9076a3a11a Update app.js 2024-02-06 21:27:05 +08:00
57719990d5 Update app.js 2024-02-06 21:20:07 +08:00
7073d66662 Update app.js 2024-02-06 21:18:33 +08:00
1983d02107 up 2024-02-06 21:17:24 +08:00
b4acb2942f update 2024-02-06 19:49:15 +08:00
c94a662235 Update index.html 2024-02-06 18:25:47 +08:00
1d61026dd3 Update index.html 2024-02-06 18:25:28 +08:00
48a55e279e Update nosql_mongodb.py 2024-02-06 18:06:45 +08:00
55e9313711 update 2024-02-06 18:00:20 +08:00
5ab59c3b75 update 2024-02-06 04:34:41 +08:00
9c045b8e85 update 2024-02-06 04:10:13 +08:00
65e87fec1a up 2024-02-06 03:52:36 +08:00
dc8f508ac5 update 2024-02-06 03:14:20 +08:00
ce0c2fb9ea Update index.py 2024-02-05 00:22:00 +08:00
d7e70aa701 Update index.py 2024-02-05 00:17:44 +08:00
ceacaaf7ae Update index.py 2024-02-04 18:12:33 +08:00
36ad902250 Update tool_migrate.py 2024-02-04 15:30:05 +08:00
7a871d3e16 Update tool_migrate.py 2024-02-04 15:29:31 +08:00
f36ba4a351 Update tool_migrate.py 2024-02-04 15:27:50 +08:00
5093265a24 Update index.html 2024-02-04 02:38:03 +08:00
9c4347f692 del rockmongo 2024-02-03 23:30:52 +08:00
cb882ab7a1 Update requirements.txt 2024-02-03 20:36:40 +08:00
0d5fd1b423 Update README.md 2024-02-03 18:46:13 +08:00
e694635088 Update README.md 2024-02-03 18:45:59 +08:00
3386ae2064 Update app.js 2024-02-03 16:11:00 +08:00
bbaced5976 Update app.js 2024-02-03 15:51:33 +08:00
c0d5c5c0e6 Update app.js 2024-02-03 15:50:38 +08:00
f9f7de48ef Update app.js 2024-02-03 15:43:26 +08:00
5555eab5c0 Update stats.js 2024-02-03 15:40:35 +08:00
654737cbd2 Update setting.js 2024-02-03 15:34:38 +08:00
04568df3df update 2024-02-03 04:44:06 +08:00
b1e8839ace update_dev 2024-02-03 04:09:00 +08:00
80c6f91206 update 2024-02-02 06:16:28 +08:00
315b8e0e48 Update index.html 2024-02-01 22:18:18 +08:00
ed295d5456 up 2024-02-01 22:08:45 +08:00
eb38d81674 Update config_api.py 2024-02-01 15:06:39 +08:00
0bc3b42819 del phpredisadmin 2024-02-01 05:19:10 +08:00
8a640981d2 数据管理插件 2024-02-01 05:09:56 +08:00
7b94a61b65 update 2024-01-29 19:25:05 +08:00
e24151f332 Update public.js 2024-01-27 15:45:05 +08:00
dc43953c05 Update public.js 2024-01-27 15:44:52 +08:00
160ff6a4a7 update 2024-01-26 03:03:07 +08:00
a218ba05d2 Update app_start.php 2024-01-25 15:38:32 +08:00
65cb4941af Update index.py 2024-01-25 15:11:18 +08:00
53a12e7c4b Update site.js 2024-01-24 19:25:29 +08:00
6db8a906ff Update task.py 2024-01-23 23:41:06 +08:00
fc6c86e3ce Update info.json 2024-01-23 03:02:04 +08:00
f5989c881d Update info.json 2024-01-23 03:00:50 +08:00
b4946a87ee Update index.py 2024-01-23 02:43:58 +08:00
562e153371 Update site.css 2024-01-23 02:01:13 +08:00
63ea0cc129 Update requirements.txt 2024-01-23 00:16:03 +08:00
8eacae7c6a Update .gitignore 2024-01-22 23:46:30 +08:00
3e48c3871a Update task.py 2024-01-22 23:46:15 +08:00
22df4cb5b1 Update task.py 2024-01-22 23:41:02 +08:00
2d5d954586 Create ico.png 2024-01-22 16:48:14 +08:00
63ce3805ee Update index.py 2024-01-22 00:23:55 +08:00
3fe4918b55 update 2024-01-22 00:16:25 +08:00
24cc733e45 Update mongodb.conf 2024-01-21 23:30:52 +08:00
1ebb9e1ff3 Update mongodb.conf 2024-01-21 22:15:08 +08:00
9769f2c190 Update config_api.py 2024-01-21 16:34:28 +08:00
de91e4545b update 2024-01-21 16:01:10 +08:00
8d3c87a25e Update opcache.sh 2024-01-21 15:54:00 +08:00
660e393cf1 Update install.sh 2024-01-21 13:47:35 +08:00
fa5f2d6de5 Update config.js 2024-01-21 02:35:15 +08:00
f27406d343 Update config.js 2024-01-21 02:32:37 +08:00
488577af68 update 2024-01-21 02:23:18 +08:00
0f7b462b43 Update task.py 2024-01-21 01:47:41 +08:00
998f1ceae5 Update task.py 2024-01-21 01:44:17 +08:00
2a9bec3fb8 Update README.md 2024-01-21 01:29:08 +08:00
5c301296df 站点页优化 2024-01-21 01:27:09 +08:00
45b0e94132 update 2024-01-20 18:32:35 +08:00
06be751d1a update 2024-01-20 18:25:31 +08:00
f939b03a0b Update update_dev.sh 2024-01-20 18:22:35 +08:00
3339406f37 Update compatibility.md 2024-01-20 13:57:24 +08:00
f32d07ccc9 Update nginx.conf 2024-01-20 13:09:40 +08:00
ab8f1623bf update 2024-01-20 02:31:29 +08:00
d467d73230 Update backup.conf 2024-01-20 02:30:52 +08:00
4b0dd7d3fb Update php.js 2024-01-20 01:49:35 +08:00
91d243f8b1 Update install.sh 2024-01-20 01:37:57 +08:00
d682882d25 Update install.sh 2024-01-20 01:37:07 +08:00
0b3745c933 Update README.md 2024-01-20 01:29:45 +08:00
935c3012f9 Update README.md 2024-01-20 01:08:45 +08:00
a191548a83 Update enable-php-upstream.conf 2024-01-19 22:06:48 +08:00
9a01d61e1e Update enable-php.conf 2024-01-19 22:06:35 +08:00
7524798385 php配置改造 2024-01-19 21:21:36 +08:00
86e3796524 Update logs_api.py 2024-01-18 13:23:22 +08:00
37d68f5ff8 Update logs_api.py 2024-01-17 21:19:48 +08:00
647e3904d2 Create enable-php-upstream.conf 2024-01-17 04:22:34 +08:00
c5abb3eea1 Update index.html 2024-01-17 03:20:48 +08:00
65c94c64ae Update README.md 2024-01-17 02:47:12 +08:00
dbc132951b PHP-FPM设置多个应用池 2024-01-17 02:44:17 +08:00
440ba49e7b Create backup.conf 2024-01-17 00:07:45 +08:00
6a0f78b1a0 Update index.html 2024-01-17 00:07:30 +08:00
a69ff3e373 php更新加密校验 2024-01-16 01:18:27 +08:00
770d37e575 Update config_api.py 2024-01-15 19:58:33 +08:00
e725ad90ca Update config.js 2024-01-15 19:56:57 +08:00
bf5d8f7f27 Update commit.tpl 2024-01-15 17:14:46 +08:00
9bc72b23d6 Update commit.tpl 2024-01-15 17:13:52 +08:00
3ac3350240 Update install.sh 2024-01-14 22:38:40 +08:00
c1d04b0a16 Update index.py 2024-01-14 22:35:48 +08:00
1962cece21 Update index.py 2024-01-14 22:33:00 +08:00
0d24b8aebd update 2024-01-14 22:29:28 +08:00
de50de0a75 Update index.py 2024-01-14 22:16:35 +08:00
190fc88d4f Update index.py 2024-01-10 22:23:44 +08:00
727a7872a7 Update index.py 2024-01-10 14:52:19 +08:00
d408d56826 Update README.md 2024-01-10 14:14:17 +08:00
1cccd63edc update 2024-01-10 12:57:43 +08:00
cc50816286 Update config.html 2024-01-10 00:55:53 +08:00
04426c7a67 Update README.md 2024-01-10 00:40:27 +08:00
3979820eae 时区 2024-01-10 00:19:09 +08:00
3a850a31a1 Update config_api.py 2024-01-10 00:05:52 +08:00
6f5487b487 Update requirements.txt 2024-01-10 00:03:59 +08:00
d09a96ec84 时区设置 2024-01-10 00:02:04 +08:00
dcc4e14e7b Update gd.sh 2024-01-09 19:48:29 +08:00
e947b8db4e Update gd_old.sh 2024-01-09 19:47:51 +08:00
158a66ab62 update 2024-01-09 19:06:34 +08:00
df596fc673 Update tools.py 2024-01-09 01:57:28 +08:00
707fd668d5 update 2024-01-09 01:56:25 +08:00
b96c4c00e3 Update common.py 2024-01-09 01:12:13 +08:00
bc6cf72cfe up 2024-01-07 19:16:24 +08:00
48dacb4c27 Update php.js 2024-01-07 04:14:03 +08:00
78c9abbde2 update 2024-01-07 04:12:33 +08:00
d8d772c6dc Create trace.sh 2024-01-07 03:16:18 +08:00
33e114ffdd Update php.js 2024-01-07 03:11:18 +08:00
552b63d329 update 2024-01-07 03:08:41 +08:00
36637260a7 Update index_php_apt.py 2024-01-07 03:06:45 +08:00
53fbb5039b Update index_php_apt.py 2024-01-07 02:58:50 +08:00
74152af289 Update index_php_apt.py 2024-01-07 02:56:30 +08:00
5bf4401fb0 Update index_php_apt.py 2024-01-07 02:51:56 +08:00
12117a3b27 Update index_php_apt.py 2024-01-07 02:47:58 +08:00
d726f1bb15 Update php.js 2024-01-07 02:43:33 +08:00
a2b316b4d2 update 2024-01-07 02:40:56 +08:00
0d48e5250a Update php.js 2024-01-07 02:35:21 +08:00
d3cd606432 Update php.js 2024-01-07 02:35:14 +08:00
600435f23c update 2024-01-07 02:34:33 +08:00
b4831d64b9 php界面优化 2024-01-07 02:32:04 +08:00
6638967636 Create script.sh 2024-01-07 02:05:19 +08:00
ead409a58c Update linux.conf 2024-01-07 01:32:15 +08:00
971da145cb Update linux.conf 2024-01-07 01:21:59 +08:00
055d440484 up 2024-01-04 19:54:50 +08:00
97e2d131b4 update 2024-01-01 19:26:19 +08:00
e2784d2d55 Update .gitignore 2024-01-01 02:18:10 +08:00
6b697ae3be Update opcache.sh 2023-12-31 02:15:07 +08:00
207fa1d15e Update index.py 2023-12-30 19:58:54 +08:00
454e399d3d Update phpmongoadmin.conf 2023-12-30 19:32:39 +08:00
6ea8f20a9d php mongo admin 2023-12-30 19:32:17 +08:00
9dc3496c27 update 2023-12-30 04:30:21 +08:00
b523b84609 Update info.json 2023-12-30 04:19:03 +08:00
e443b88ad9 phpredisadmin 2023-12-30 04:12:15 +08:00
480ae78579 Update redis.conf 2023-12-30 03:32:23 +08:00
fb31e3ca15 Update index.py 2023-12-30 03:31:39 +08:00
53fdaed5c3 Update install.sh 2023-12-30 03:21:20 +08:00
37f6f2b6bc update 2023-12-30 03:21:13 +08:00
d1028bcc41 Update install.sh 2023-12-30 02:43:43 +08:00
72e7800b50 AD调整 2023-12-30 00:04:39 +08:00
bb717d2963 update 2023-12-28 19:07:05 +08:00
16787aebd0 Update stats.js 2023-12-28 03:34:53 +08:00
d769822731 Update stats.js 2023-12-28 03:32:48 +08:00
b6073ba8d3 Update maccms.conf 2023-12-28 00:47:18 +08:00
8d50f75f18 php 升级 2023-12-27 20:46:10 +08:00
8077b4cb13 Update gtid.cnf 2023-12-25 19:58:20 +08:00
7a9f1ebf5e Create orm.py 2023-12-25 19:56:48 +08:00
21f5670a85 Update index.py 2023-12-23 00:41:00 +08:00
Mr Chen
dbd0664c72 Merge pull request #519 from midoks/dev
mysql-apt/mysql-yum 功能增强
2023-12-22 23:25:00 +08:00
f9e53164d9 Update README.md 2023-12-22 23:23:24 +08:00
62e0321126 Update index.py 2023-12-22 23:10:47 +08:00
51b82ecbbb Update index.py 2023-12-22 23:09:32 +08:00
0229f50fef Update install.sh 2023-12-22 23:04:53 +08:00
be176001ea Update index.py 2023-12-22 22:50:33 +08:00
3bea21bb94 update 2023-12-22 22:48:14 +08:00
4b3104c849 Update index.py 2023-12-22 22:32:59 +08:00
0cbb1ad02e Update index.py 2023-12-22 22:28:50 +08:00
221f114dd4 Update index.py 2023-12-22 22:28:17 +08:00
5a5c2f3e33 update 2023-12-22 22:20:03 +08:00
69de62f8c3 Update index.py 2023-12-22 22:12:41 +08:00
af7698e157 update 2023-12-22 22:02:46 +08:00
f0af84f940 Update index.py 2023-12-22 21:54:05 +08:00
4802dde50a update 2023-12-22 21:52:31 +08:00
fcbf7be2b6 update 2023-12-22 21:45:06 +08:00
f77484df84 update 2023-12-22 21:42:06 +08:00
64ccba7595 Update index.py 2023-12-22 21:37:57 +08:00
b1935372a1 Update index.py 2023-12-22 21:37:37 +08:00
03c9afed4a Create index_mysql_apt.py 2023-12-22 21:35:09 +08:00
4e63c82e93 update 2023-12-22 21:32:20 +08:00
6fa2fde791 Update index_mysql_apt.py 2023-12-22 21:23:28 +08:00
98353df1ee Update index.py 2023-12-22 21:20:26 +08:00
50978741aa Update index.py 2023-12-22 21:14:59 +08:00
d4431f11be Update index.py 2023-12-22 21:09:08 +08:00
3faad62dd8 update 2023-12-22 20:58:23 +08:00
6d2550e607 update 2023-12-22 20:31:23 +08:00
f835e4d6a1 Merge branch 'master' into dev 2023-12-22 15:53:37 +08:00
Mr Chen
e33bdc5b7d Merge pull request #518 from midoks/dev
mariadb功能增强
2023-12-22 15:33:30 +08:00
1e6fe01819 Update index.py 2023-12-22 15:21:12 +08:00
c522738df5 Update mysql.js 2023-12-22 15:20:37 +08:00
5a8be9de7c Update mariadb.js 2023-12-22 15:19:44 +08:00
fd9c860d9b Update index.py 2023-12-22 15:11:12 +08:00
306a6d450f Update index.py 2023-12-22 15:04:56 +08:00
79fd1d7157 Update install.sh 2023-12-22 14:55:58 +08:00
9276e811c2 update 2023-12-22 14:50:50 +08:00
d1493ca13f Update index.py 2023-12-22 05:27:01 +08:00
13c605d58a Update index.py 2023-12-22 05:26:16 +08:00
36d19f2250 up 2023-12-22 05:21:59 +08:00
8f229c99be Update index.py 2023-12-22 05:05:48 +08:00
72b16e9540 update 2023-12-22 04:59:19 +08:00
dbe2a1f0df Update index.py 2023-12-22 04:56:05 +08:00
4c3f8c095f Update index.py 2023-12-22 04:55:30 +08:00
589933dc33 Update index.py 2023-12-22 04:53:05 +08:00
de36f41182 Update index.py 2023-12-22 04:51:07 +08:00
8e1b4881c4 Update index.py 2023-12-22 04:22:10 +08:00
692872ecd6 Update index.py 2023-12-22 04:14:58 +08:00
d422a640d5 Update index.py 2023-12-22 03:48:35 +08:00
46d293613e Update index.py 2023-12-22 03:46:26 +08:00
b775625890 Update index.py 2023-12-22 03:25:54 +08:00
eb2bb595de Update index.py 2023-12-22 03:10:31 +08:00
0ddc3bf762 Update index.py 2023-12-22 03:05:50 +08:00
e45604f211 update 2023-12-22 02:49:13 +08:00
4f22d9ae70 update 2023-12-22 02:39:43 +08:00
732363ec41 Update index.py 2023-12-22 01:26:16 +08:00
bc688aa93f update 2023-12-22 01:23:47 +08:00
56ed68b888 mariadb 二进制查看 2023-12-22 01:17:45 +08:00
90539a5049 Update index.py 2023-12-22 01:08:36 +08:00
df15100272 Update mariadb.js 2023-12-22 01:04:20 +08:00
4bfec3ac06 Update index.py 2023-12-22 01:01:46 +08:00
3a80a27970 Update mysql.js 2023-12-22 00:56:02 +08:00
09e79aff63 Update index.py 2023-12-22 00:55:18 +08:00
41a36a6fd3 Update index.py 2023-12-22 00:52:15 +08:00
fc0974dc91 mysql修复功能-敏感功能优化 2023-12-22 00:34:23 +08:00
4942c92b33 Update index.py 2023-12-22 00:24:08 +08:00
e173c2e51a mysql修复功能-敏感功能优化 2023-12-22 00:18:41 +08:00
daddf317e2 Update info.json 2023-12-21 19:07:32 +08:00
7e919050b2 Create my8.2.cnf 2023-12-21 19:01:03 +08:00
af9d050536 update 2023-12-21 18:59:32 +08:00
a9e6acd407 Update phplib.conf 2023-12-21 18:57:03 +08:00
180e67dde9 Update info.json 2023-12-21 18:11:37 +08:00
f8451fadba Create install.sh 2023-12-21 18:10:49 +08:00
558bfcb1ee 调整 2023-12-20 01:15:06 +08:00
6a27e69ee7 Update config_api.py 2023-12-19 23:34:11 +08:00
b5d28b4ef2 流量显示优化 2023-12-19 23:31:18 +08:00
8f80336901 Update index.py 2023-12-18 22:18:54 +08:00
0a78dda06c update 2023-12-18 22:13:03 +08:00
b6c3020705 Update index.py 2023-12-18 21:42:56 +08:00
ed70d4faa3 Update index.py 2023-12-18 21:41:26 +08:00
Mr Chen
46e4f55105 Merge pull request #517 from midoks/dev
mongodb优化
2023-12-17 13:52:23 +08:00
235f0b6d66 Update mongodb.conf 2023-12-17 13:47:30 +08:00
633066088d Update index.py 2023-12-17 13:32:39 +08:00
48f223f4f9 Update index.html 2023-12-16 20:59:29 +08:00
709a91dcec Update mongodb.js 2023-12-16 17:06:22 +08:00
2592291b49 update 2023-12-16 17:01:49 +08:00
502893194e mongo状态 2023-12-16 16:30:34 +08:00
8976e97ea5 Update mongodb.conf 2023-12-16 15:25:18 +08:00
22cb5f3bc2 Update config.js 2023-12-15 18:36:20 +08:00
0888b89ea7 Update config.js 2023-12-15 18:36:14 +08:00
738e69562e Update config.js 2023-12-15 18:35:54 +08:00
Mr Chen
511b62d911 Merge pull request #516 from midoks/dev
mysql8.2及密码生成加强
2023-12-15 14:49:43 +08:00
d748674b49 Update public.js 2023-12-15 14:48:54 +08:00
828372f16f Update public.js 2023-12-15 14:47:52 +08:00
a349b2bc81 Update install.sh 2023-12-14 14:00:31 +08:00
4f3fe2af54 Update index.py 2023-12-14 13:59:08 +08:00
4670811fd6 Create my8.2.cnf 2023-12-14 13:33:04 +08:00
e1fb85859a Update install.sh 2023-12-14 01:01:21 +08:00
c0fc1148eb Update install.sh 2023-12-14 01:01:01 +08:00
50052e7650 Update install.sh 2023-12-14 00:58:02 +08:00
8053f9b593 Update install.sh 2023-12-14 00:30:58 +08:00
1a5cdca70d Update mysql.js 2023-12-14 00:22:27 +08:00
341690d234 Update mysql.js 2023-12-14 00:20:24 +08:00
d76654b853 Update mysql.js 2023-12-14 00:17:37 +08:00
0ef35e1474 Update mysql.js 2023-12-14 00:12:56 +08:00
9ea52e452a mysql识别登录加密规则 2023-12-14 00:04:48 +08:00
5e39e1a463 Update my8.0.cnf 2023-12-13 23:54:39 +08:00
36421ae254 update 2023-12-13 23:51:18 +08:00
a34f025a36 Update index.py 2023-12-13 23:33:25 +08:00
7be4f9ea98 Update index.py 2023-12-13 23:32:59 +08:00
2dc93bf490 Update my8.0.cnf 2023-12-13 23:27:18 +08:00
Mr Chen
73fb46fcc0 Merge pull request #515 from midoks/dev
mongodb配置优化
2023-12-12 14:54:49 +08:00
f4ea1dc544 Update index.py 2023-12-12 14:51:47 +08:00
d17cc990fe Update index.py 2023-12-12 14:44:39 +08:00
8edd40393b Update index.py 2023-12-12 14:44:23 +08:00
98e653710c Update index.py 2023-12-12 14:43:49 +08:00
3eb6937778 Update layout.html 2023-12-12 13:22:31 +08:00
974eaf3583 Merge branch 'master' into dev 2023-12-11 23:32:27 +08:00
Mr Chen
dadcc2df6d Merge pull request #514 from midoks/dev
部分更新
2023-12-11 23:32:14 +08:00
639d5413e5 up 2023-12-11 23:20:34 +08:00
1d114d9db7 Update cmd.md 2023-12-09 15:59:36 +08:00
dfa669a032 Update cmd.md 2023-12-09 15:58:57 +08:00
bf370685b3 Update install.sh 2023-12-07 13:27:46 +08:00
8f9bdde0a1 Update info.json 2023-12-06 21:10:32 +08:00
dbbc32258a Create install.sh 2023-12-06 21:09:56 +08:00
Mr Chen
bf79e3028a Merge pull request #513 from midoks/dev
地址更新
2023-12-05 13:08:47 +08:00
0650858824 update 2023-12-05 13:07:56 +08:00
83f736d5b2 Update install.sh 2023-12-05 13:06:59 +08:00
Mr Chen
bafee3782a Merge pull request #512 from midoks/dev
地址更新
2023-12-04 16:24:36 +08:00
1aff003ba3 Update mw.tpl 2023-12-04 16:23:54 +08:00
Mr Chen
30e779686a Merge pull request #511 from midoks/dev
域名更改
2023-12-04 13:19:24 +08:00
15eccc72f3 Update README.md 2023-12-04 13:18:46 +08:00
f69691fac7 Update plugins_api.py 2023-12-04 00:13:41 +08:00
1ffcb9ca7d 站点-优化提示 2023-12-04 00:10:03 +08:00
75514f8e5c update 2023-12-03 03:15:13 +08:00
098be84816 Update push_bbs_ntid.py 2023-12-03 03:14:19 +08:00
8752e394a3 Update mw.py 2023-12-03 01:23:18 +08:00
0350f3ecbb Update mw.py 2023-12-03 01:17:50 +08:00
Mr Chen
3c855afc43 Merge pull request #510 from midoks/dev
简单更新
2023-12-03 00:31:34 +08:00
0c8ec2132f Update README.md 2023-12-03 00:30:43 +08:00
e3deac06b4 Update README.md 2023-12-03 00:30:09 +08:00
b92dbea2c8 update 2023-12-01 12:09:20 +08:00
Mr Chen
4da6738909 Merge pull request #509 from midoks/dev
换自建域名
2023-12-01 11:44:12 +08:00
1665256627 换自建域名 2023-12-01 11:43:31 +08:00
d49ebe9fa8 Update index.py 2023-11-29 00:35:51 +08:00
6dbdf26d80 Update index.py 2023-11-28 17:33:02 +08:00
114ed15c02 Update supervisor.service 2023-11-28 12:49:56 +08:00
315eb82a89 Update index.py 2023-11-28 12:46:23 +08:00
f4ef03304d Update install.sh 2023-11-28 12:28:04 +08:00
9877d04979 查看日志优化 2023-11-25 22:09:17 +08:00
Mr Chen
e6f379db9d Merge pull request #507 from midoks/dev
php83正式版发布
2023-11-24 17:01:00 +08:00
ecad324fc6 Update install.sh 2023-11-24 16:27:45 +08:00
ed13ee1645 Update install.sh 2023-11-24 16:26:33 +08:00
603c436f4e Update commit.tpl 2023-11-23 19:33:01 +08:00
d917c23fda Update webstats_common.lua 2023-11-21 22:17:01 +08:00
a0c4273280 Update webstats_common.lua 2023-11-21 21:59:24 +08:00
8e71d0a306 Update webstats_common.lua 2023-11-21 19:08:39 +08:00
Mr Chen
01dfb6f248 Merge pull request #506 from midoks/dev
命令行开启ipv6支持
2023-11-21 00:44:34 +08:00
4ab1d14ffe update 2023-11-21 00:43:38 +08:00
665fe41014 Update tool_migrate.py 2023-11-20 23:51:12 +08:00
ddba4f3abe Update tool_migrate.py 2023-11-20 23:43:18 +08:00
1f65f80bef Update webstats_common.lua 2023-11-20 23:40:07 +08:00
8dd9f707a6 命令行开启ip支持 2023-11-20 20:57:53 +08:00
Mr Chen
14437611c8 Merge pull request #505 from midoks/dev
增加php扩展
2023-11-20 01:01:13 +08:00
bfe857ee59 Update install.sh 2023-11-19 22:00:53 +08:00
01efa67bf1 Merge branch 'master' of https://github.com/midoks/mdserver-web 2023-11-19 21:38:07 +08:00
3b3356d5c6 update 2023-11-19 21:37:41 +08:00
6dbfd385fb Update readline.sh 2023-11-19 21:34:35 +08:00
1e9fa587f5 Update all_test.sh 2023-11-19 21:34:30 +08:00
fd673b76e8 Update phplib.conf 2023-11-19 21:34:07 +08:00
d2340872c0 Update libedit.sh 2023-11-19 21:05:46 +08:00
1c14566b6c Update readline.sh 2023-11-19 21:03:49 +08:00
adde0086aa Create libedit.sh 2023-11-19 21:02:31 +08:00
b6ca99f1ef Update libiconv.sh 2023-11-19 20:50:16 +08:00
c920b46a13 Update readline.sh 2023-11-19 20:37:30 +08:00
338e64d295 Update event.sh 2023-11-19 20:34:08 +08:00
f030f7a97d event 2023-11-19 20:33:19 +08:00
ef7da2ec96 update 2023-11-19 20:30:47 +08:00
6dec09741f Update maccms.conf 2023-11-19 19:26:03 +08:00
6d75a65a09 Update maccms.conf 2023-11-19 17:38:23 +08:00
8eeb55d555 Update maccms.conf 2023-11-19 17:32:53 +08:00
f54feaa87b Update maccms.conf 2023-11-19 17:29:50 +08:00
b828fc2188 Update maccms.conf 2023-11-19 17:23:22 +08:00
e645be4285 Update maccms.conf 2023-11-19 17:18:01 +08:00
05a7b8818e Update maccms.conf 2023-11-19 17:10:53 +08:00
391b313a65 Update maccms.conf 2023-11-19 17:06:13 +08:00
df7bff4a72 Update maccms.conf 2023-11-19 17:04:10 +08:00
2eefd7d3fa Update maccms.conf 2023-11-19 16:58:15 +08:00
130e4cf546 Update maccms.conf 2023-11-19 16:55:05 +08:00
096dfa6b96 Create maccms.conf 2023-11-19 16:54:36 +08:00
77361259c3 Update install.sh 2023-11-19 16:10:22 +08:00
Mr Chen
cf00bd3d98 Merge pull request #504 from midoks/dev
0.16.2
2023-11-18 22:55:14 +08:00
ad3f42059d Update config_api.py 2023-11-18 22:54:08 +08:00
9a1d3f5e15 Update README.md 2023-11-18 22:53:06 +08:00
f2246cf8ba Update index.py 2023-11-18 20:46:11 +08:00
81aabd3910 Update index.py 2023-11-18 20:44:51 +08:00
235b1dc5e4 Update install.sh 2023-11-18 20:43:39 +08:00
ad007b07a5 Update haproxy.conf 2023-11-18 20:40:54 +08:00
53cc020108 Update install.sh 2023-11-18 20:36:34 +08:00
71d63f3d68 Update install.sh 2023-11-18 20:34:44 +08:00
917b3f6099 Update default.tpl 2023-11-18 20:29:49 +08:00
36341f66f1 Update haproxy.conf 2023-11-18 20:29:32 +08:00
2a16e1d262 安装优化 2023-11-18 20:28:17 +08:00
d27db369dc Update public.js 2023-11-18 20:16:03 +08:00
6619ae0bc5 haproxy 配置检查 2023-11-18 20:13:39 +08:00
da1646eaed Update info.json 2023-11-18 19:37:14 +08:00
bf88621629 Create keepalived.lvs.nat.master.conf 2023-11-18 18:07:19 +08:00
7497c4608a Update install.sh 2023-11-18 17:34:15 +08:00
b0ee844b84 Update lvs.js 2023-11-18 17:32:43 +08:00
3efa46ce70 Update lvs.js 2023-11-18 17:32:29 +08:00
aaaef570a4 Update default.tpl 2023-11-18 17:28:51 +08:00
53c651724a update 2023-11-18 17:28:11 +08:00
dd8c97f4b8 update 2023-11-18 17:17:55 +08:00
b4e1a5947e Update install.sh 2023-11-18 17:14:49 +08:00
784056d465 Update install.sh 2023-11-18 17:10:47 +08:00
b1fbdf8d60 Update mw.tpl 2023-11-18 17:08:59 +08:00
f9459089a4 Update mw.tpl 2023-11-18 17:08:46 +08:00
36c3967e38 Update push_notice_msg.py 2023-11-18 16:25:31 +08:00
c7ba5fa2d9 Update push_ad.py 2023-11-18 16:25:07 +08:00
5f2f6d15ed Update linux.conf 2023-11-18 16:20:49 +08:00
5e3c81d785 update 2023-11-18 15:54:40 +08:00
76560bc4fd Update info.json 2023-11-18 15:27:34 +08:00
e84a104584 Update webstats_common.lua 2023-11-18 12:45:29 +08:00
afe7175941 Update webstats_common.lua 2023-11-18 04:32:35 +08:00
4b7c821a91 Update index.py 2023-11-18 03:39:53 +08:00
1941479092 Update index.py 2023-11-18 03:37:41 +08:00
bfcfc2015a Update index.py 2023-11-18 03:36:13 +08:00
8a5daeb327 网站统计-加入耗时搜索 2023-11-18 03:32:39 +08:00
66049068aa Update webstats_common.lua 2023-11-18 02:40:03 +08:00
e2d680cb2a 修复反向代理代过来的数据 2023-11-18 02:36:18 +08:00
719eec4b98 Update install.sh 2023-11-18 01:51:25 +08:00
9ea859f94c Update install.sh 2023-11-18 01:51:11 +08:00
0bdd384f46 Update install.sh 2023-11-18 01:50:21 +08:00
c3d20f358c Update install.sh 2023-11-18 01:04:50 +08:00
7a6454e126 Update requirements.txt 2023-11-18 00:50:33 +08:00
d683069fef Update info.json 2023-11-17 23:45:41 +08:00
5e7e7af1a7 update 2023-11-17 23:35:23 +08:00
5894323eec Update README.md 2023-11-17 23:12:54 +08:00
1cd4996527 Update linux.conf 2023-11-17 20:58:46 +08:00
78786a92e9 Update linux.conf 2023-11-17 20:57:41 +08:00
67d5d3fac5 Update linux.conf 2023-11-17 20:57:26 +08:00
5caf8f52bc Update index.html 2023-11-17 19:16:58 +08:00
b838caea8b update 2023-11-17 18:56:07 +08:00
57d4ef5fc9 Update index.py 2023-11-17 18:52:05 +08:00
ca3d8cccc9 Update install.sh 2023-11-17 18:33:39 +08:00
c56aa2efa3 Update install.sh 2023-11-17 18:33:21 +08:00
f41ef634bf Update install.sh 2023-11-17 18:30:41 +08:00
80e3a73fa4 Update install.sh 2023-11-17 17:54:08 +08:00
c4788c03f9 update 2023-11-17 17:49:42 +08:00
501012b4e6 初始化lvs插件 2023-11-17 17:40:58 +08:00
e7b927bdef Update keepalived.mysql.note.conf 2023-11-16 20:26:45 +08:00
9c818b0a5d Update keepalived.conf 2023-11-16 20:03:23 +08:00
8faf553e1d Update chk.sh 2023-11-16 19:55:18 +08:00
e22f296e38 Update chk.sh 2023-11-16 19:45:43 +08:00
b3deeb5a39 Update config_api.py 2023-11-16 19:39:24 +08:00
2ddb4e9ef8 Update chk.sh 2023-11-16 19:34:58 +08:00
74b1d424b9 Update chk_mysql.sh 2023-11-16 19:34:32 +08:00
cd13d0bbe7 update 2023-11-16 19:30:43 +08:00
5dc97276c1 keepalived 脚本模板 2023-11-16 19:16:14 +08:00
9da7f04379 Update keepalived.mysql.conf 2023-11-16 18:03:09 +08:00
0bee208795 update 2023-11-16 18:02:34 +08:00
af660daa30 update 2023-11-16 18:00:53 +08:00
71a2b43c06 Update mw.tpl 2023-11-16 17:49:21 +08:00
ad644c3cf9 Update chk_mysql.sh 2023-11-16 17:19:35 +08:00
e676790250 update 2023-11-16 17:11:49 +08:00
135b307a98 update 2023-11-16 16:11:17 +08:00
c95c760aef Update index.py 2023-11-16 16:06:15 +08:00
60125e6bbb Update keepalived.mysql.note.conf 2023-11-16 16:03:30 +08:00
fbef641839 update 2023-11-16 15:29:21 +08:00
37431a76b6 update 2023-11-16 03:07:51 +08:00
49cfeb7a39 mysql config 2023-11-16 00:34:03 +08:00
faf433b77d Update install.sh 2023-11-15 19:58:21 +08:00
d0b70841c2 Update install.sh 2023-11-15 19:58:03 +08:00
bf8a820343 Update install.sh 2023-11-15 19:21:27 +08:00
ae1e2cd972 php-fpm状态展示说明 2023-11-15 16:44:20 +08:00
46da6c0dd0 php性能调整优化 2023-11-14 01:52:02 +08:00
1e827944ab update 2023-11-14 01:41:51 +08:00
09bbd5280d update 2023-11-12 13:15:23 +08:00
01a887efad sync_binlog
默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。这样的话,在数据库所在的主机操作系统损坏或者突然掉电的情况下,系统才有可能丢失1个事务的数据。但是binlog虽然是顺序IO,但是设置sync_binlog=1,多个事务同时提交,同样很大的影响MySQL和IO性能。虽然可以通过group commit的补丁缓解,但是刷新的频率过高对IO的影响也非常大。对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多
2023-11-12 13:12:58 +08:00
aa236bac0b up 2023-11-12 12:45:44 +08:00
bcc1ae3b8f ad 改动 2023-11-12 12:22:34 +08:00
1acc9a4b76 Update index.py 2023-11-11 16:13:11 +08:00
e1b57621d5 Update index.py 2023-11-11 16:12:46 +08:00
0f9bd8d387 Update install.sh 2023-11-11 03:17:10 +08:00
24eb4fe994 没成功,不管了 2023-11-11 01:14:06 +08:00
7799d3436a php56 ,55 mac m2 ok 2023-11-11 00:47:32 +08:00
f3f1aaa041 php 70 mac m2 ok 2023-11-11 00:32:20 +08:00
d7d907945a php 71 mac m2 ok 2023-11-11 00:28:10 +08:00
6961ff7996 Update install.sh 2023-11-10 23:34:57 +08:00
27047cb169 php 54 mac m2 编译 2023-11-10 23:34:08 +08:00
25f3b5b18d Create pcre.sh 2023-11-10 23:29:36 +08:00
a9efe0f808 update 2023-11-10 21:51:50 +08:00
847a40e743 Update install.sh 2023-11-10 21:42:05 +08:00
9f59f479a2 update 2023-11-10 20:18:15 +08:00
c8b955f282 update 2023-11-10 20:03:04 +08:00
b4cee43517 Update macos.sh 2023-11-10 19:29:17 +08:00
a33c1261b3 更好的重启 2023-11-10 19:20:23 +08:00
8fd3476126 up 2023-11-10 19:06:31 +08:00
664852c26f update 2023-11-10 18:47:32 +08:00
b356ad5a43 Update index.py 2023-11-10 05:05:49 +08:00
ce96f54aa7 update 2023-11-10 05:01:06 +08:00
028bfe13ab Update macos.sh 2023-11-10 02:45:21 +08:00
93061a1138 Update macos.sh 2023-11-10 02:26:40 +08:00
66f0b8691c 群集创建说明 2023-11-10 01:45:27 +08:00
22ac89bc2c 集群节点暂时 2023-11-10 00:13:32 +08:00
4edf9c1bb7 Update redis.tpl 2023-11-09 22:52:59 +08:00
8169f89ddb Update redis.js 2023-11-09 22:31:47 +08:00
8c82641cb0 Update index.py 2023-11-09 22:26:48 +08:00
5e5606a586 Update redis.js 2023-11-09 22:26:24 +08:00
d4d0538996 集群状态 2023-11-09 22:18:37 +08:00
d03c630b48 Update index.py 2023-11-09 21:40:09 +08:00
698b5c2623 up 2023-11-09 21:00:42 +08:00
c9817cb1c6 Create redis_simple.conf 2023-11-09 21:00:23 +08:00
76d2acac76 Update redis.js 2023-11-09 20:54:53 +08:00
feb58ca3ad Update redis.js 2023-11-09 20:50:51 +08:00
2748d248b4 Update redis.js 2023-11-09 20:49:13 +08:00
e008de3d2c redis集群配置 2023-11-09 20:45:00 +08:00
57c9ca8e78 Update redis.js 2023-11-09 19:43:27 +08:00
db90443239 Update redis.js 2023-11-09 19:41:42 +08:00
883ce06c1c Update redis.js 2023-11-09 19:26:50 +08:00
9c9b0b9ae5 redis 复制状态 2023-11-09 15:08:45 +08:00
dd8341867f Update install.sh 2023-11-09 13:11:20 +08:00
15e6ca97e1 redis 主从配置识别 2023-11-09 03:33:07 +08:00
1996cb03ce 兼容新版mac 2023-11-09 01:32:59 +08:00
7d0834397d Update haproxy.conf 2023-11-08 17:58:46 +08:00
54055f2174 Update install.sh 2023-11-08 16:47:30 +08:00
33c77f0e90 Update mw.tpl 2023-11-08 16:19:49 +08:00
7d4c4a9ef9 mac优化 2023-11-08 15:55:53 +08:00
fbe211b3ec update 2023-11-08 15:28:52 +08:00
53e98bd5fe Update macos.sh 2023-11-08 12:12:16 +08:00
8a7be7e61c mac 不判断root 2023-11-08 11:59:28 +08:00
4aad9f90db mac 不判断root 2023-11-08 11:58:50 +08:00
Mr Chen
29de642a1a Merge pull request #503 from midoks/dev
mysql binlog日志查看功能及同步12306错误,尝试修复功能。
2023-11-08 02:14:07 +08:00
e73533b611 Update mysql.js 2023-11-08 02:04:14 +08:00
89e5d57926 Update index.py 2023-11-08 01:58:45 +08:00
283d3c5f1f Update index.py 2023-11-08 01:57:27 +08:00
69cde4ebc3 Update index_mysql.py 2023-11-08 01:56:55 +08:00
e5a9f2c197 Update index_mysql.py 2023-11-08 01:52:49 +08:00
b3f495efb8 Update index.py 2023-11-08 01:49:44 +08:00
c0310a2628 binlog日志功能基本OK 2023-11-08 01:44:17 +08:00
496e94ad54 Update mysql.js 2023-11-08 01:16:55 +08:00
beb00d46e0 update 2023-11-08 01:15:28 +08:00
9e123f067b update 2023-11-08 01:12:02 +08:00
aba594caf2 update 2023-11-08 01:00:29 +08:00
f67be6d59f update 2023-11-08 00:49:01 +08:00
bb5240dc43 Update ubuntu.sh 2023-11-07 19:42:02 +08:00
e24bf5313c Update debian.sh 2023-11-07 19:41:29 +08:00
f17a986461 mysql 同步1236错误-修复方案 2023-11-07 18:55:44 +08:00
2c31318a5c Update index.py 2023-11-07 18:06:09 +08:00
7c4231d9c0 Update debian.sh 2023-11-07 16:36:16 +08:00
462f7b78ec Update tool_task.py 2023-11-07 12:17:04 +08:00
83466e927e update 2023-11-06 18:29:20 +08:00
d8123d9350 Update install.sh 2023-11-05 19:57:14 +08:00
Mr Chen
23c3b553e9 Merge pull request #501 from midoks/dev
php扩展ioncube修复。
2023-11-05 19:32:05 +08:00
9c2129e638 Update phplib.conf 2023-11-05 19:05:40 +08:00
a29b2ac731 Update phplib.conf 2023-11-05 19:05:08 +08:00
944040cc03 Update ioncube.sh 2023-11-05 19:00:58 +08:00
9d9615acc9 Update ioncube.sh 2023-11-05 18:59:15 +08:00
e3f42c8f67 Update ioncube.sh 2023-11-05 18:48:10 +08:00
Mr Chen
6e9dbe4bd5 Merge pull request #500 from midoks/dev
安装减小体积3 && php扩展-yaml
2023-11-03 19:24:09 +08:00
e71329485a yaml依赖 2023-11-03 19:21:50 +08:00
5d0e24f0d5 php yaml 2023-11-03 19:14:24 +08:00
78263f6a06 Create yaml.sh 2023-11-03 19:10:52 +08:00
ce70fdc784 Update mw.py 2023-11-01 23:21:45 +08:00
184610acb9 Update all_test.sh 2023-11-01 02:36:32 +08:00
1b668d546f 优化 2023-11-01 02:35:36 +08:00
b7df4f57ad update 2023-11-01 02:27:42 +08:00
817e7607e5 update 2023-11-01 02:16:44 +08:00
d36df7b24c Update gd.sh 2023-11-01 02:15:37 +08:00
Mr Chen
e63a643c7b Merge pull request #499 from midoks/dev
安装结束后解压源码删除  2
2023-11-01 02:03:38 +08:00
0cfd2fc971 update 2023-11-01 01:47:45 +08:00
9b3383dd0e update 2023-11-01 01:43:05 +08:00
9b266ffd7d Update yaf.sh 2023-11-01 01:41:19 +08:00
345a5be488 Update swoole.sh 2023-11-01 01:41:00 +08:00
0a178f196a up 2023-11-01 00:43:52 +08:00
8abc166dd2 update 2023-10-31 22:09:22 +08:00
Mr Chen
a3e0fe817b Merge pull request #498 from midoks/dev
安装结束后解压源码删除
2023-10-31 21:15:30 +08:00
7ab4572bdd update 2023-10-31 21:01:21 +08:00
165f6ee323 update ad 2023-10-31 14:57:25 +08:00
e565390d5b ad 2023-10-31 14:43:06 +08:00
Mr Chen
7502fb7e08 Merge pull request #497 from midoks/dev
暂时不删除php源码。
2023-10-31 03:15:20 +08:00
026f191de2 update 2023-10-31 03:13:13 +08:00
6d7b58e65c Update ubuntu.sh 2023-10-31 02:34:54 +08:00
Mr Chen
6953140238 Merge pull request #496 from midoks/dev
php73-gd优化及部分安装删除源码,节省安装体积。
2023-10-31 02:33:22 +08:00
97963a67aa Update install.sh 2023-10-31 02:29:05 +08:00
1112e31a5f update 2023-10-31 02:21:57 +08:00
5358191adf Update install.sh 2023-10-31 02:17:16 +08:00
4f52e4a520 Update php5.ini 2023-10-31 02:13:14 +08:00
abcabeb2a1 update 2023-10-31 02:08:29 +08:00
c592086d29 u p d da te 2023-10-31 02:00:05 +08:00
f93dd8ebec Update www.conf 2023-10-31 01:59:12 +08:00
92283d1cfc Update icu.sh 2023-10-31 01:45:41 +08:00
f29b15dd60 update 2023-10-31 01:37:21 +08:00
84f2d212f4 mongodb 安装后删除文件 2023-10-31 01:34:24 +08:00
5fb00f7108 Update centos.sh 2023-10-31 01:25:45 +08:00
fcea7a0610 update 2023-10-31 01:25:11 +08:00
f9b364c435 Update debian.sh 2023-10-31 01:14:35 +08:00
e9743ce97e Update centos.sh 2023-10-31 01:13:06 +08:00
8c2475192b update 2023-10-31 01:05:23 +08:00
35c279d93a update 2023-10-31 00:59:03 +08:00
7c5a7fe822 Update install.sh 2023-10-31 00:53:35 +08:00
09ee8a0c61 Update install.sh 2023-10-31 00:52:48 +08:00
7bda3c0cd6 安装后,可以删除就删除 2023-10-31 00:50:25 +08:00
d8a5fcab90 Update imagemagick.sh 2023-10-31 00:42:57 +08:00
1d8bc48a9b Update imagemagick.sh 2023-10-31 00:36:50 +08:00
2d39f431c5 Update all_test.sh 2023-10-31 00:29:33 +08:00
b78cbb3c39 Update stats.js 2023-10-31 00:06:49 +08:00
d55450e0c9 Update icu.sh 2023-10-30 23:47:23 +08:00
7cc10a9bdb update 2023-10-30 23:25:33 +08:00
fdebeab6b2 Update phplib.conf 2023-10-30 23:21:58 +08:00
fdc1a93e51 Update install.sh 2023-10-30 23:21:40 +08:00
e9978642c8 Update phplib.conf 2023-10-30 23:14:44 +08:00
823c6f1f79 update 2023-10-30 23:08:02 +08:00
Mr Chen
7bbb49a459 Merge pull request #495 from midoks/dev
php73-gd优化
2023-10-30 23:01:55 +08:00
2bbbe3f17f update 2023-10-30 22:55:00 +08:00
9e8d036ee7 Update debian.sh 2023-10-30 22:43:18 +08:00
7ee6e491e8 Update install.sh 2023-10-30 20:02:49 +08:00
Mr Chen
10ffa66dd8 Merge pull request #494 from midoks/dev
Gogs/Gitea优化
2023-10-30 17:54:17 +08:00
85d2f2f702 Update stats.js 2023-10-30 16:34:39 +08:00
0917ec52de Update index.py 2023-10-30 16:12:53 +08:00
da872c1d92 Update index.py 2023-10-30 16:10:42 +08:00
91919426f4 Update index.py 2023-10-30 16:06:20 +08:00
7f7196c55e Update index.py 2023-10-30 16:03:37 +08:00
cb86245a35 Update index.py 2023-10-30 16:02:58 +08:00
a319c43d54 Update index.py 2023-10-30 15:55:27 +08:00
d07faf396e Update index.py 2023-10-30 15:49:56 +08:00
fc718ff727 Update index.html 2023-10-30 15:47:11 +08:00
bacac94186 Update index.py 2023-10-30 15:40:25 +08:00
c925e09ea6 Update index.py 2023-10-30 15:38:42 +08:00
2de9b736f5 Update gitea.js 2023-10-30 15:36:05 +08:00
24d3aeabb0 gitea update 2023-10-30 15:34:37 +08:00
3a33a4c758 Update index.py 2023-10-30 15:04:58 +08:00
109f562f06 update 2023-10-30 14:47:54 +08:00
f74702cbad Update gogs.js 2023-10-30 14:21:33 +08:00
be9365e4e6 Update gogs.js 2023-10-30 14:11:18 +08:00
6a61e66c05 Update index.html 2023-10-30 14:07:57 +08:00
42d07c1cec update 2023-10-30 14:02:10 +08:00
3886dab6b5 Update index.py 2023-10-30 13:55:42 +08:00
d17ebf1e9c Update index.py 2023-10-30 13:31:18 +08:00
a6644cc706 优化 2023-10-30 01:48:26 +08:00
43071db317 gogs 基本改造结束 2023-10-30 01:43:35 +08:00
e5c53323a5 gogs 项目管理细化 2023-10-30 01:00:54 +08:00
d08ba45f5f update 2023-10-30 00:25:45 +08:00
eba73c71bc update 2023-10-29 23:50:32 +08:00
fe63f684f3 Update index.py 2023-10-29 14:35:09 +08:00
f19ef94dca update 2023-10-29 14:34:16 +08:00
685aa7868d update 2023-10-29 14:26:46 +08:00
2e927da78c update 2023-10-29 03:23:17 +08:00
4391a3ccd7 Delete .gitignore 2023-10-29 02:01:47 +08:00
27041ee0e0 Update keepalived.backup.conf 2023-10-29 01:29:24 +08:00
e09085a64c update 2023-10-29 00:48:28 +08:00
8216000f35 update 2023-10-28 22:47:34 +08:00
36d59c6c67 Update push_notice_msg.py 2023-10-28 22:41:03 +08:00
363f97119c update 2023-10-28 22:35:21 +08:00
f86980b805 update 2023-10-28 22:34:14 +08:00
805b804a10 Update keepalived.conf 2023-10-28 20:02:02 +08:00
2f22cdb36e Update keepalived.conf 2023-10-28 18:51:24 +08:00
7254b9b862 update 2023-10-28 18:50:52 +08:00
ad9ab2d7af Update index.html 2023-10-28 18:44:38 +08:00
c8c4a0dbbe Update index.py 2023-10-28 18:43:15 +08:00
f425fb1ea2 Update init.lua 2023-10-28 13:32:45 +08:00
970c6dbe54 Update init.lua 2023-10-28 13:32:27 +08:00
3f529ac798 Update index.py 2023-10-24 16:42:04 +08:00
4be2f60b5b Update index.py 2023-10-24 16:41:25 +08:00
305b9ca7cf Update install.sh 2023-10-24 16:38:16 +08:00
fdf0c4e02f update 2023-10-24 16:35:58 +08:00
52dc2210a4 Update keepalived.conf 2023-10-24 16:13:55 +08:00
579b118495 Update install.sh 2023-10-24 15:46:34 +08:00
0fac1b026b Update keepalived.conf 2023-10-24 15:25:36 +08:00
a0c891ed92 Update keepalived.conf 2023-10-24 15:25:08 +08:00
98f3ad52dd Update keepalived.conf 2023-10-24 15:24:36 +08:00
ada1aeac05 Update keepalived.conf 2023-10-24 15:23:26 +08:00
272d71ed97 update 2023-10-24 15:23:05 +08:00
1a69d55da1 Update push_notice_msg.py 2023-10-23 19:04:55 +08:00
8a4174a8a4 Update index_php.py 2023-10-23 17:42:34 +08:00
7d58ba316d Update index_php.py 2023-10-23 17:42:15 +08:00
d4af727e5a Update index_php.py 2023-10-23 17:41:34 +08:00
3a8c93b595 update 2023-10-23 17:37:44 +08:00
25fe2e79bb Update keepalived.js 2023-10-23 16:33:50 +08:00
84ebfc4254 Update info.json 2023-10-23 16:31:34 +08:00
2bdba8aa8d Update index.html 2023-10-23 16:25:27 +08:00
60be806398 Update index.html 2023-10-23 16:25:14 +08:00
b919de1fd6 Update index.html 2023-10-23 16:24:00 +08:00
087dcc7f40 Update index.html 2023-10-23 16:22:13 +08:00
be2cfa4407 Update index.py 2023-10-23 16:19:42 +08:00
e86707d752 Update index.py 2023-10-23 16:19:17 +08:00
b31c49ac11 update 2023-10-23 16:15:33 +08:00
d013595431 Update index.py 2023-10-23 16:05:42 +08:00
9e9dad7325 update 2023-10-23 16:03:10 +08:00
1f52d69410 Update keepalived.tpl 2023-10-23 15:52:03 +08:00
5a221d9cb3 update 2023-10-22 22:53:42 +08:00
4abd1df942 Update index.py 2023-10-22 18:12:32 +08:00
ee84266acb Update index.py 2023-10-22 17:55:02 +08:00
4fadf4c275 Update keepalived.tpl 2023-10-22 17:52:42 +08:00
89b5a762d1 Update install.sh 2023-10-22 17:48:42 +08:00
759e1432f8 keepalived debug 2023-10-22 17:45:39 +08:00
d3e9fbb5db update 2023-10-22 17:18:39 +08:00
e3c60de0e7 Update stats.js 2023-10-21 17:42:01 +08:00
Mr Chen
1cd7667f7b Merge pull request #492 from midoks/dev
centos8 mongodb安装优化
2023-10-21 16:30:53 +08:00
d0ac8bd70c Update files.html 2023-10-21 16:29:36 +08:00
89e20482a0 Update mongodb.service.tpl 2023-10-21 16:23:02 +08:00
9036d88fab 首页软件列表优化 2023-10-21 16:10:27 +08:00
Mr Chen
919ca8ed83 Merge pull request #491 from midoks/dev
网站统计-增加查询条件
2023-10-21 15:02:38 +08:00
e41055443e Update stats.js 2023-10-21 14:53:59 +08:00
ad15bb303f 网站统计-增加查询条件 2023-10-21 14:41:45 +08:00
Mr Chen
a6e0af5672 Merge pull request #490 from midoks/dev
centos8-php-memcached扩展安装优化
2023-10-20 22:59:02 +08:00
dbd3c86970 Update rhel.sh 2023-10-20 22:46:03 +08:00
7659e654a9 Update all_test.sh 2023-10-20 22:39:48 +08:00
32c74fd85d Update memcached.sh 2023-10-20 22:32:56 +08:00
383fd3b068 Update libmemcached.sh 2023-10-20 22:27:10 +08:00
d8aed860a7 Update libmemcached.sh 2023-10-20 22:23:18 +08:00
68a8751137 Update libmemcached.sh 2023-10-20 22:23:07 +08:00
bb0f0ced62 Update libmemcached.sh 2023-10-20 22:22:17 +08:00
04ce9541a2 Update libmemcached.sh 2023-10-20 22:18:20 +08:00
2be2565736 Update memcached.sh 2023-10-20 21:59:08 +08:00
Mr Chen
b5776f903f Merge pull request #489 from midoks/dev
php argon2 安装优化
2023-10-20 13:44:37 +08:00
5052ea11b0 php argon2 安装优化 2023-10-20 13:42:08 +08:00
a578eeef01 Update rhel.sh 2023-10-20 13:15:44 +08:00
d1dcbcb0d6 Update libmemcached.sh 2023-10-20 02:47:22 +08:00
0916e96448 Update libmemcached.sh 2023-10-20 02:26:06 +08:00
7616acccb9 Update memcached.sh 2023-10-20 02:22:16 +08:00
2499c296e7 Update rhel.sh 2023-10-20 01:56:20 +08:00
ceb41fef68 Update index.py 2023-10-20 01:40:38 +08:00
aaaefdb996 Update libsodium.sh 2023-10-20 00:49:46 +08:00
0bef98d83e Update mongodb.service.tpl 2023-10-19 22:10:18 +08:00
Mr Chen
a21ac3fa6c Merge pull request #487 from midoks/dev
mongodb安装优化
2023-10-19 00:37:08 +08:00
de9fdd6e87 Update mongodb.service.tpl 2023-10-19 00:33:23 +08:00
6991a3ecfc Update index.py 2023-10-19 00:32:06 +08:00
863b42800b 优化 2023-10-19 00:28:31 +08:00
3bf83a6202 Update install.sh 2023-10-19 00:07:10 +08:00
ee6e6f8286 Update index.py 2023-10-19 00:05:57 +08:00
7370ef9816 Update index.py 2023-10-19 00:04:38 +08:00
8572b93ed0 debian 安装mongodb的bug 2023-10-18 23:51:43 +08:00
Mr Chen
337ba1fa1e Merge pull request #486 from midoks/dev
版本升级
2023-10-18 23:35:15 +08:00
1ad11de98e 版本升级 2023-10-18 23:34:18 +08:00
a9aaf268fc Update install.sh 2023-10-18 23:31:50 +08:00
d618f36f89 Update install.sh 2023-10-18 23:28:25 +08:00
929ead12bc Update install.sh 2023-10-18 23:28:06 +08:00
89991b8417 Update install.sh 2023-10-18 23:24:12 +08:00
af8f9fb1a9 Update index.py 2023-10-18 23:21:49 +08:00
4a09695343 Update index.py 2023-10-18 23:19:41 +08:00
5aead0ad7c Update index.py 2023-10-18 23:19:33 +08:00
8324a89edb Update install.sh 2023-10-18 23:17:21 +08:00
de6ed476fb Update install.sh 2023-10-18 23:13:38 +08:00
9342e31faf Update install.sh 2023-10-18 23:01:50 +08:00
061c2d86eb Update install.sh 2023-10-18 22:57:34 +08:00
1937a6344e php升级版本 2023-10-18 22:54:59 +08:00
5e91ac8fe9 Update install.sh 2023-10-18 22:49:26 +08:00
ff32ab721f Update info.json 2023-10-18 22:46:10 +08:00
Mr Chen
8d213a2444 Merge pull request #485 from midoks/dev
系统加固提醒
2023-10-18 16:58:08 +08:00
ca10177754 Update crontab_api.py 2023-10-18 16:53:59 +08:00
Mr Chen
7cbabaa04b Merge pull request #484 from midoks/dev
OP防火墙-地区限制优化
2023-10-18 03:15:25 +08:00
805bd0a3ad Update install.sh 2023-10-18 03:13:46 +08:00
cf003d9f62 Update index.py 2023-10-18 03:12:48 +08:00
2e22b7307c OP防火墙优化 2023-10-18 03:06:59 +08:00
4d346dd6c8 Update config.json 2023-10-18 02:28:11 +08:00
35a7025530 Update init.lua 2023-10-18 02:20:23 +08:00
9ad51c81d8 Update install.sh 2023-10-18 02:13:44 +08:00
30da2fe60d Update install.sh 2023-10-18 02:11:16 +08:00
b16ca19ca8 update 2023-10-18 02:02:44 +08:00
Mr Chen
986687b829 Merge pull request #483 from midoks/dev
增加清空python库文件
2023-10-18 01:23:45 +08:00
0cec515297 Update gd.sh 2023-10-18 01:08:25 +08:00
e54ea53017 Update gd.sh 2023-10-18 01:07:46 +08:00
755901b4ca Update mw.tpl 2023-10-17 17:23:03 +08:00
90d0d3ba72 Update mw.tpl 2023-10-17 17:22:20 +08:00
f65a8a24e0 Update init_cmd.py 2023-10-14 02:24:45 +08:00
Mr Chen
2c7d50e3bc Merge pull request #482 from midoks/dev
删除部分AD
2023-10-14 02:21:58 +08:00
91a71a1eb3 update 2023-10-14 02:21:06 +08:00
Mr Chen
875acda8a5 Merge pull request #481 from midoks/dev
各种小细节的优化
2023-10-14 02:05:59 +08:00
52e138ae56 Update __init__.py 2023-10-14 02:02:41 +08:00
a769623a24 Merge branch 'master' into dev 2023-10-14 01:56:22 +08:00
d7a4e1d4be Merge branch 'master' into dev 2023-10-14 01:54:58 +08:00
Mr Chen
057e152845 Merge pull request #480 from tsymq-live/master
Update __init__.py
2023-10-14 01:53:40 +08:00
tsymq-live
f80ac8e9f0 Update __init__.py
解决gogs webhook 验证失败的问题

需要带上参数post=1来强制使用post
2023-10-14 00:24:11 +08:00
aceb26e309 Update README.md 2023-10-13 21:32:28 +08:00
1d078a63ca Update index.py 2023-10-13 16:37:23 +08:00
f0ba3d58d6 Update redis.js 2023-10-13 00:52:49 +08:00
14f2fad644 Update redis.js 2023-10-12 19:43:40 +08:00
58f0cd69b7 Update files_api.py 2023-10-12 01:47:21 +08:00
9326138c6e Update files_api.py 2023-10-12 01:46:55 +08:00
ceffb49d61 Update files_api.py 2023-10-12 01:46:32 +08:00
a4e2b2d8b4 Update files_api.py 2023-10-12 01:46:01 +08:00
1ba42fdc4b Update site_api.py 2023-10-12 01:44:00 +08:00
b0ab2e28cb Update site_api.py 2023-10-12 01:43:09 +08:00
2471784d1f Update waf_common.lua 2023-10-11 14:48:22 +08:00
Mr Chen
78049fa34f Merge pull request #477 from midoks/dev
php安装的下载文件,md5校验
2023-10-11 02:37:40 +08:00
09c25924fe php安装的下载文件,md5校验 2023-10-11 02:36:03 +08:00
e8e2487f27 Update install.sh 2023-10-11 02:16:27 +08:00
cf930aeca1 Merge branch 'master' into dev 2023-10-10 23:34:39 +08:00
e6d380c321 Merge branch 'master' into dev 2023-10-10 23:34:11 +08:00
Mr Chen
065b6430f2 Merge pull request #475 from 0honus0/master
修改flask版本过高造成的启动失败
2023-10-10 23:32:44 +08:00
Mr Chen
e1c03474eb Merge branch 'master' into master 2023-10-10 23:32:36 +08:00
Mr Chen
3aef5f7bbf Merge pull request #476 from midoks/dev
解决python flask 最新版本影响大部分安装
2023-10-10 23:31:15 +08:00
cebeb7fe90 Update requirements.txt 2023-10-10 23:28:38 +08:00
c5d8166a2a Update mw.tpl 2023-10-10 23:22:46 +08:00
ff30de33ab Update cmd.md 2023-10-10 23:22:02 +08:00
7700eb92ec Update mw.tpl 2023-10-10 23:21:09 +08:00
0c8f84e81f Update requirements.txt 2023-10-10 23:18:45 +08:00
245d026726 Update README.md 2023-10-10 23:13:13 +08:00
1ac8bf51f2 Update README.md 2023-10-10 23:11:42 +08:00
248e6b1e0e update 2023-10-10 23:06:27 +08:00
6ff5d4128b Update README.md 2023-10-10 22:52:25 +08:00
0honus0
82e39f6be4 修改flask版本过高造成的启动失败 2023-10-10 22:39:32 +08:00
Mr Chen
780dfb08a3 Merge pull request #474 from midoks/dev
debian11  python3.9 flask默认安装太高问题解决。
2023-10-10 13:30:53 +08:00
dd586576a7 Create r3.9.txt 2023-10-10 13:26:29 +08:00
Mr Chen
c77efccd19 Merge pull request #473 from midoks/dev
mysql初始安装优化
2023-10-09 20:33:52 +08:00
962b0fa9c5 mysql 优化 2023-10-09 20:32:35 +08:00
5532dcd968 Update index.py 2023-10-09 18:43:48 +08:00
ce2d060c94 Update .gitignore 2023-10-09 11:40:44 +08:00
Mr Chen
3c388ada21 Merge pull request #471 from midoks/dev
快捷命令说明
2023-10-08 02:03:11 +08:00
c81ddebcd4 Update cmd.md 2023-10-08 02:02:10 +08:00
9ff01c3cfb Update cmd.md 2023-10-08 02:01:50 +08:00
6a981e1e8f Update cmd.md 2023-10-08 01:56:51 +08:00
3643d63a90 Update cmd.md 2023-10-08 01:55:41 +08:00
Mr Chen
8560880944 Merge pull request #470 from midoks/dev
Update mw.tpl
2023-10-08 01:52:55 +08:00
4210bb87a9 Update mw.tpl 2023-10-08 01:51:52 +08:00
Mr Chen
6473d68421 Merge pull request #469 from midoks/dev
增加命令 mw db 快捷登录数据库
2023-10-08 01:50:17 +08:00
009b599831 Update mw.tpl 2023-10-08 01:47:35 +08:00
1c4536980c Update mw.tpl 2023-10-08 00:48:00 +08:00
9b62a46312 update 2023-10-08 00:46:55 +08:00
bb100b6bf2 Update mw.tpl 2023-10-08 00:42:54 +08:00
81fba581bd Update mw.tpl 2023-10-08 00:32:21 +08:00
36cc799c1a Update mw.tpl 2023-10-08 00:31:19 +08:00
6d64401e22 update 2023-10-08 00:30:35 +08:00
8e81f423f9 Update mw.tpl 2023-10-08 00:26:47 +08:00
ea4677b2c4 update 2023-10-08 00:26:34 +08:00
774cf403f1 Update push_ad.py 2023-10-06 17:05:54 +08:00
3e3e53e58b Update mw.tpl 2023-10-04 21:34:23 +08:00
Mr Chen
e0678c8b4c Merge pull request #466 from midoks/dev
gogs同步模板优化
2023-10-04 16:32:13 +08:00
c0bdf2659f Update commit.tpl 2023-10-04 15:57:23 +08:00
ae3cc4bd0b Update commit.tpl 2023-10-04 15:53:59 +08:00
0f8c9ee740 Update commit.tpl 2023-10-04 15:33:03 +08:00
4bc4ff5eda Update gogs.js 2023-10-04 15:31:49 +08:00
7568bd10d8 Update gogs.js 2023-10-04 15:16:38 +08:00
28410d2bf5 Update gogs.js 2023-10-04 15:16:17 +08:00
c56246a9d7 Update index.py 2023-10-04 15:13:17 +08:00
5770c6d3c5 Update gogs.js 2023-10-04 15:10:18 +08:00
b9fed0b6e9 Update gogs.js 2023-10-04 14:55:35 +08:00
899e58500e Update gogs.js 2023-10-04 14:54:40 +08:00
Mr Chen
c6a8841a91 Merge pull request #465 from midoks/dev
细节优化2
2023-10-01 23:53:31 +08:00
40e8393c43 Update mw.tpl 2023-10-01 23:52:41 +08:00
ec3d29fc2b Update install.sh 2023-10-01 21:12:00 +08:00
fba632c393 update 2023-10-01 20:34:27 +08:00
Mr Chen
5dec539d40 Merge pull request #464 from midoks/dev
细节优化
2023-10-01 14:33:43 +08:00
0119e72771 Update mw.tpl 2023-10-01 14:07:48 +08:00
Mr Chen
c1ffb36642 Merge pull request #463 from midoks/dev
增加mosquitto插件
2023-09-30 15:22:52 +08:00
29d8779233 update
* 增加mosquitto插件。
* redis负载状态读取优化。
2023-09-30 15:21:41 +08:00
6e9a26c331 Update README.md 2023-09-30 01:39:09 +08:00
e2a491ab97 Update index.py 2023-09-30 01:36:56 +08:00
f1fb16366c Update php.service.tpl 2023-09-30 01:16:49 +08:00
29ffc62b7c Update index.py 2023-09-30 01:12:02 +08:00
f0d8f12f89 Update README.md 2023-09-29 23:58:37 +08:00
ef36d8729e Update mosquitto.tpl 2023-09-29 23:57:30 +08:00
28bf685e73 update 2023-09-29 23:45:20 +08:00
3f424668a7 Update install.sh 2023-09-29 23:39:00 +08:00
dfa53c4c4c Update install.sh 2023-09-29 23:38:13 +08:00
0b712c7242 Update install.sh 2023-09-29 23:33:59 +08:00
101792a081 Update mosquitto.js 2023-09-29 23:31:25 +08:00
0055fa98fa update 2023-09-29 23:23:42 +08:00
52a8cc6946 Update mosquitto.service.tpl 2023-09-29 23:19:56 +08:00
3da1ff214f Update mosquitto.service.tpl 2023-09-29 23:16:58 +08:00
ed509e2d8d Update index.py 2023-09-29 23:15:47 +08:00
5dfc0f7ebb Update index.py 2023-09-29 23:13:41 +08:00
1129d5753a update 2023-09-29 23:13:07 +08:00
0c48e0fcbb Update mosquitto.service.tpl 2023-09-29 23:11:02 +08:00
6a28e72273 Update index.py 2023-09-29 23:02:57 +08:00
82fc1a3609 Update index.py 2023-09-29 23:01:03 +08:00
73ff1c664e Update index.py 2023-09-29 22:59:39 +08:00
9093d4bc3f Update index.py 2023-09-29 22:59:03 +08:00
d50936349c Update index.py 2023-09-29 22:58:20 +08:00
20d85d0bd7 Update index.py 2023-09-29 22:56:56 +08:00
fc904c9a5d update 2023-09-29 22:54:14 +08:00
59e616919f mosquitto 初始化 2023-09-29 22:48:38 +08:00
3447c1e48f Update php.service.tpl 2023-09-29 21:35:31 +08:00
d7c6879d2f Update php.service.tpl 2023-09-29 21:14:49 +08:00
c0240836f7 Update php.service.tpl 2023-09-29 19:53:58 +08:00
99c6c26859 Update push_ad.py 2023-09-29 14:24:14 +08:00
7b0e65de42 update 2023-09-28 19:35:39 +08:00
Mr Chen
29c737121b Merge pull request #462 from midoks/dev
网站统计-其他爬虫识别优化
2023-09-27 18:41:19 +08:00
318d123015 Update webstats_common.lua 2023-09-27 18:36:24 +08:00
093f8b14f8 Update webstats_common.lua 2023-09-27 18:27:20 +08:00
2f48df6013 update 2023-09-27 15:22:44 +08:00
Mr Chen
7f42ee741c Merge pull request #461 from midoks/dev
防火墙支持tcp/udp模式
2023-09-26 22:17:36 +08:00
abfb92eaa5 Update README.md 2023-09-26 22:16:32 +08:00
3f8a822d5e Update index.py 2023-09-26 21:39:32 +08:00
f9bec73252 Update firewall_api.py 2023-09-26 21:35:01 +08:00
a9530b0630 Update firewall_api.py 2023-09-26 21:34:38 +08:00
33fe1095d7 Update firewall_api.py 2023-09-26 21:32:17 +08:00
ae5a947898 Update index.py 2023-09-26 21:27:03 +08:00
b1128cbddb update 2023-09-26 21:21:42 +08:00
ead8de6e0f update 2023-09-26 20:32:00 +08:00
caf3924b09 Update config_api.py 2023-09-26 20:25:21 +08:00
526caf0497 Update firewall_api.py 2023-09-26 20:25:03 +08:00
c20dc4af94 Update firewall.js 2023-09-26 20:20:01 +08:00
be500c898e Update firewall_api.py 2023-09-26 20:13:28 +08:00
d2ccea3520 Update firewall_api.py 2023-09-26 20:10:50 +08:00
051f992e91 Update firewall_api.py 2023-09-26 20:09:41 +08:00
af6b96d18b update 2023-09-26 20:07:11 +08:00
996786a7b7 update_dev 2023-09-26 19:02:31 +08:00
42bedca172 调整 - phpMyAdmin默认端口2 2023-09-26 18:00:47 +08:00
51e3d26492 调整 - phpMyAdmin默认端口 2023-09-26 17:58:38 +08:00
5ff6ee2763 Update default.sql 2023-09-26 17:49:07 +08:00
64f0ff8ad9 Update default.sql 2023-09-26 17:39:44 +08:00
7a6f4323d2 Update default.sql 2023-09-26 17:39:17 +08:00
Mr Chen
f927914ff1 Merge pull request #460 from midoks/dev
python gevent 调整
2023-09-26 15:39:01 +08:00
02ad9c95ee Update requirements.txt 2023-09-26 15:32:59 +08:00
4d9c102e8b up 2023-09-26 15:28:53 +08:00
ebb53ada1d Update requirements.txt 2023-09-26 15:28:30 +08:00
Mr Chen
87f4307655 Merge pull request #458 from midoks/dev
SSH禁止密码登陆优化
2023-09-25 04:11:56 +08:00
21cf48b08b Update README.md 2023-09-25 04:11:11 +08:00
dd6d9cf09a Update firewall_api.py 2023-09-25 04:07:47 +08:00
e0e889bbff Update firewall_api.py 2023-09-25 04:01:31 +08:00
18b36b08a7 Update firewall_api.py 2023-09-25 03:54:37 +08:00
1389280a70 Update firewall_api.py 2023-09-25 03:54:22 +08:00
8bc9500b23 Update firewall_api.py 2023-09-25 03:52:54 +08:00
49a358ccfa Update system_api.py 2023-09-24 00:12:29 +08:00
c9bf5f59f4 Update system_api.py 2023-09-24 00:11:20 +08:00
577e5f3512 Update system_api.py 2023-09-24 00:06:20 +08:00
Mr Chen
343b815823 Merge pull request #457 from midoks/dev
网站统计安装优化
2023-09-17 23:24:42 +08:00
3819e2f470 Update install.sh 2023-09-17 23:22:56 +08:00
0e5f762919 update 2023-09-15 13:28:19 +08:00
e9eab63e99 update 2023-09-15 13:24:19 +08:00
be43b537cc Update install.sh 2023-09-15 13:23:28 +08:00
6b85710504 Update install_dev.sh 2023-09-15 13:21:53 +08:00
Mr Chen
c2d89a91ab Merge pull request #456 from midoks/dev
支持rar解压。
2023-09-15 01:08:21 +08:00
682f8309c4 支持rar解压 2023-09-15 01:07:29 +08:00
586302b575 Update config_api.py 2023-09-15 00:59:50 +08:00
4af7183dbd Update config_api.py 2023-09-15 00:43:01 +08:00
a488f106ca Update files_api.py 2023-09-15 00:37:23 +08:00
f05de84dc2 Update files_api.py 2023-09-15 00:13:05 +08:00
fe4c95276d Update files_api.py 2023-09-15 00:08:13 +08:00
abc6e8f597 支持rar 2023-09-15 00:01:37 +08:00
Mr Chen
0fc03c81db Merge pull request #455 from midoks/dev
unrar&&rar准备
2023-09-14 15:14:39 +08:00
8a6dbf22c0 加入rar,unrar 2023-09-14 14:21:31 +08:00
8c18023f64 update 2023-09-14 00:17:01 +08:00
fd521eff3f ad 2023-09-14 00:05:29 +08:00
Mr Chen
55f8e3fd72 Merge pull request #454 from midoks/dev
延长检查时间
2023-09-13 23:18:12 +08:00
1a26224b6f 延长检查时间 2023-09-13 23:17:16 +08:00
Mr Chen
f9ab290d07 Merge pull request #453 from midoks/dev
php83显示&&redis安装优化
2023-09-12 17:22:16 +08:00
70a30412a5 Update install.sh 2023-09-12 17:00:11 +08:00
ed63341750 Update site_api.py 2023-09-12 16:52:10 +08:00
81fea53bc7 Update push_notice_msg.py 2023-09-12 16:12:46 +08:00
Mr Chen
eab194f5d1 Merge pull request #452 from midoks/dev
update
2023-09-11 13:12:42 +08:00
0b5299dbe0 update 2023-09-11 13:12:08 +08:00
Mr Chen
e5f399e700 Merge pull request #451 from midoks/dev
安装时默认监控开启2
2023-09-11 12:43:57 +08:00
f7ee3a9aed Update common.py 2023-09-11 12:42:27 +08:00
aa60d52662 Update __init__.py 2023-09-11 12:39:16 +08:00
Mr Chen
9249ed7896 Merge pull request #450 from midoks/dev
安装时默认监控开启
2023-09-11 12:25:09 +08:00
a470b3c53c Update common.py 2023-09-11 12:24:27 +08:00
0851e95fb2 Update common.py 2023-09-11 12:17:08 +08:00
Mr Chen
b6f7334f5e Merge pull request #449 from midoks/dev
0.16.1
2023-09-11 11:52:37 +08:00
27b77f8570 Update push_notice_msg.py 2023-09-10 23:18:13 +08:00
3d888961bc Update zip.sh 2023-09-10 22:02:43 +08:00
5edc4fb713 Update install.sh 2023-09-10 21:33:37 +08:00
214954b298 Update install.sh 2023-09-10 21:29:29 +08:00
13b0b2752e Update info.json 2023-09-10 21:23:27 +08:00
a2918e651f Update common.py 2023-09-10 14:26:00 +08:00
55dd1d7d5a update 2023-09-10 14:06:41 +08:00
df50eceeed update 2023-09-10 14:06:19 +08:00
e1de6dd514 Update install_dev.sh 2023-09-10 14:04:13 +08:00
08328bbb86 Update install_dev.sh 2023-09-10 14:03:53 +08:00
6abc5b365b Update README.md 2023-09-10 12:37:34 +08:00
6cc1279729 update 2023-09-10 12:36:23 +08:00
aeafaa2832 update 2023-09-10 12:25:51 +08:00
e74a511763 Update euler.sh 2023-09-10 12:25:01 +08:00
f86159eeac Update README.md 2023-09-10 12:20:02 +08:00
8097164475 支持华为欧拉系统 2023-09-10 12:19:14 +08:00
4ebb44e4c0 Update info.json 2023-09-09 22:32:52 +08:00
584f93461a update 2023-09-09 12:13:16 +08:00
e21f0a53e5 Update update_dev.sh 2023-09-09 11:57:34 +08:00
1d31a0eae0 Update update.sh 2023-09-09 11:57:15 +08:00
ded33ed6b4 update 2023-09-09 11:55:40 +08:00
b703758d0e update 2023-09-09 11:37:18 +08:00
33493ac03c up 2023-09-09 11:35:08 +08:00
74e63c5bbd Update install.sh 2023-09-09 11:33:38 +08:00
f2d34e5551 Update lib.sh 2023-09-09 11:32:02 +08:00
89c529f44c Update install_dev.sh 2023-09-09 11:28:53 +08:00
56b728601b MySQL/MYSQL-YUM/MySQL-APT添加重置master功能。
mysql主从同步数据过期时,可使用此命令
2023-09-07 21:17:56 +08:00
bf1d2daeaa Update push_notice_msg.py 2023-09-07 20:37:46 +08:00
cac45b3732 update 2023-09-07 13:36:54 +08:00
ee498b7094 Update install.sh 2023-09-07 13:04:30 +08:00
385113fe4d Update push_notice_msg.py 2023-09-07 12:58:53 +08:00
5dbfc5bd51 Update README.md 2023-09-06 19:34:09 +08:00
b76e0f606a Update install.sh 2023-09-06 19:24:25 +08:00
047702f26d Update debian.sh 2023-09-06 17:48:40 +08:00
eb219caada Update config_api.py 2023-09-04 18:45:49 +08:00
78b2046f19 Update README.md 2023-09-04 18:45:10 +08:00
Mr Chen
5fe85730e6 Merge pull request #447 from midoks/dev
0.16.1-提前版,合并不release.
2023-09-04 18:44:41 +08:00
adb72ef33b Update config_api.py 2023-09-04 18:40:39 +08:00
d9c8a46031 Update install.sh 2023-09-04 18:35:12 +08:00
24f520bdc9 Update install.sh 2023-09-04 18:30:40 +08:00
7492756997 Update install.sh 2023-09-04 18:23:08 +08:00
616af16635 Update install.sh 2023-09-04 18:15:53 +08:00
916d39e205 Update install.sh 2023-09-04 18:15:21 +08:00
017958b6b0 Update install.sh 2023-09-04 18:07:52 +08:00
d403c4c4ad Update opensuse.sh 2023-09-04 17:43:28 +08:00
9f1481db07 Update mw_api.py 2023-09-04 13:16:42 +08:00
47e0ec5fae update 2023-09-04 13:14:08 +08:00
a2377d960e 给防盗链增加禁止空来源 2023-09-04 12:47:12 +08:00
60f1ce2575 update 2023-09-03 00:16:01 +08:00
0e368f7157 Update index.py 2023-09-03 00:01:20 +08:00
3cf5c5b190 Update gdriveclient.py 2023-09-02 23:45:33 +08:00
4ed07beca3 Update gdriveclient.py 2023-09-02 23:43:30 +08:00
cee9619883 update 2023-09-02 23:30:02 +08:00
5db4a96fc9 Update install.sh 2023-09-02 23:17:38 +08:00
2e6b7bf5cd Update install.sh 2023-09-02 23:15:52 +08:00
f404caa763 Update install.sh 2023-09-02 22:59:37 +08:00
062a518492 gdrive云备份开始测试 2023-09-02 22:47:01 +08:00
0310cab3ae Update msonedrive.js 2023-09-02 21:06:30 +08:00
4a0b8df57f Update index.html 2023-09-01 16:28:44 +08:00
Mr Chen
63e427b488 Merge pull request #445 from midoks/dev
0.16.0
2023-08-30 23:26:30 +08:00
c688c692f9 0.16.0
yum install -y libargon2-devel
apt install -y libargon2-dev

OP防火墙 - 重载即可

* 增加PHP83。
* 面板日志单独为一页并加入日志审计功能。
* 修复webssh服务器读取问题。
* 站点批量删除修复。
* OP防火墙-修复`自动强制验证`关闭不生效。
* 新增OneDrive备份插件。
* FTP备份优化。
2023-08-30 23:24:49 +08:00
c9f074b319 FTP备份优化 2023-08-30 20:48:54 +08:00
38b4042c5a Update msonedrive.js 2023-08-30 19:51:52 +08:00
bf32390f0e Update README.md 2023-08-30 18:40:21 +08:00
91a9be4cc0 Update mw.py 2023-08-30 18:26:08 +08:00
be5f438f84 Delete config.conf 2023-08-30 17:47:38 +08:00
2705fd7ba2 Update config_api.py 2023-08-30 17:45:21 +08:00
4de7e72f0a Update test.py 2023-08-30 17:37:49 +08:00
da668c723c onedrive插件OK 2023-08-30 17:35:41 +08:00
20624217bf Update backup.py 2023-08-30 15:11:17 +08:00
2403af08c6 Update crontab.js 2023-08-30 13:35:52 +08:00
2350b73896 Update layout.html 2023-08-28 23:50:14 +08:00
464fa9cc0f Update cert_api.py 2023-08-28 23:06:16 +08:00
9a79f0b728 Update README.md 2023-08-28 22:57:47 +08:00
52cfff7038 OP防火墙-修复自动强制验证关闭不生效。 2023-08-28 22:50:03 +08:00
8d42f8137c Update .gitignore 2023-08-28 11:45:37 +08:00
41fb9759a3 Create readme.md 2023-08-28 11:38:44 +08:00
7d3833b2ef Update index.py 2023-08-27 19:56:17 +08:00
0badb053e0 站点批量删除修复。 2023-08-27 19:46:56 +08:00
80b9e7cbf7 Update index.py 2023-08-27 19:00:13 +08:00
94df21192f Update dynamic-tracking.js 2023-08-27 18:50:25 +08:00
346d687368 Update simple_trace.sh 2023-08-27 18:34:47 +08:00
46ec655365 Update simple_trace.sh 2023-08-27 18:28:52 +08:00
e852020c38 Update simple_trace.sh 2023-08-27 17:51:18 +08:00
d06e83676b Update simple_trace.sh 2023-08-27 17:50:32 +08:00
7a511f8217 Update dynamic-tracking.js 2023-08-27 17:09:49 +08:00
8c5021b9dc Update simple_trace.sh 2023-08-27 16:48:05 +08:00
b7d50540ac Create ubuntu.sh 2023-08-27 16:45:06 +08:00
2a95fcc59a Update install.sh 2023-08-27 16:29:52 +08:00
2b04cb3947 Update dynamic-tracking.js 2023-08-27 16:17:15 +08:00
7f0ad25342 Update simple_macosx_trace.sh 2023-08-27 15:51:42 +08:00
09f7e6f5b5 update 2023-08-27 15:50:52 +08:00
17a7ffa0b4 update 2023-08-27 15:38:00 +08:00
ba6dcabd04 Update simple_trace.sh 2023-08-27 14:29:17 +08:00
0ff5c170d3 update 2023-08-27 14:28:26 +08:00
b78e020993 Update index.py 2023-08-26 23:14:06 +08:00
9586eeda07 up 2023-08-26 23:02:17 +08:00
ea462aa51d update 2023-08-26 22:43:13 +08:00
aaac8b5239 文件管理-svg预览优化 2023-08-26 22:38:27 +08:00
2b86c375b0 动态追踪- svg查看功能 2023-08-26 22:23:13 +08:00
600e2688f9 update 2023-08-26 21:11:34 +08:00
3537bc520f Update dynamic-tracking.js 2023-08-26 17:47:06 +08:00
9ffdffadd6 Update README.md 2023-08-26 17:42:59 +08:00
3942f2fbf5 Update index.py 2023-08-26 17:35:48 +08:00
8ff2f217b3 Update index.py 2023-08-26 17:23:34 +08:00
480bd154c6 Update index.py 2023-08-26 17:21:20 +08:00
5eb3ed4524 Update README.md 2023-08-26 16:49:19 +08:00
50e78ae6f6 Update logs.html 2023-08-26 16:22:08 +08:00
0ec9b31c2f update 2023-08-26 16:17:54 +08:00
191b54821e Update logs_api.py 2023-08-26 16:07:19 +08:00
c2188a2c7e update 2023-08-26 16:04:35 +08:00
d23b64a92c Update update_dev.sh 2023-08-26 16:03:29 +08:00
3ae97e1c75 Update config_api.py 2023-08-26 15:59:04 +08:00
f0e7361436 Update logs_api.py 2023-08-26 15:57:54 +08:00
5f85d41352 日志审计转移完成 2023-08-26 15:55:09 +08:00
6fc8803446 update 2023-08-26 00:29:44 +08:00
b3120f3435 日志功能从防火墙提出来 2023-08-26 00:24:04 +08:00
f9f1b1a113 update 2023-08-25 21:21:58 +08:00
2645297cee update 2023-08-25 21:20:56 +08:00
7f171f5986 update 2023-08-25 20:56:53 +08:00
c3b3e3b01c update 2023-08-25 16:55:44 +08:00
3824b394ad php argon2 2023-08-25 16:55:32 +08:00
270660fb53 update 2023-08-25 15:26:23 +08:00
c4171a9506 Update install.sh 2023-08-25 15:09:54 +08:00
222943e312 Update index.py 2023-08-24 22:35:44 +08:00
92f8a4e949 Update mw.tpl 2023-08-24 22:12:02 +08:00
eff1f55a21 Update cli.sh 2023-08-24 22:10:43 +08:00
0b54da9747 Update freebsd.sh 2023-08-24 21:39:29 +08:00
0bec57937f Update index.py 2023-08-24 21:31:35 +08:00
6c64f8ee5e Update install.sh 2023-08-24 21:25:15 +08:00
b65ad9de80 Update install.sh 2023-08-24 21:18:49 +08:00
07be263d81 Update install.sh 2023-08-24 21:12:53 +08:00
bf9cb52fec Update index.py 2023-08-24 21:07:42 +08:00
f7135a6ded Update index.py 2023-08-24 21:02:36 +08:00
7b98dde1aa Update index.py 2023-08-24 21:02:26 +08:00
b51f3fdd68 update 2023-08-24 21:00:47 +08:00
e02c52df49 Update freebsd.sh 2023-08-24 20:58:26 +08:00
730bc7171b Update index.py 2023-08-24 20:55:57 +08:00
c065eabb48 Update index.py 2023-08-24 20:47:49 +08:00
1ad1e3326d php扩展库读取优化 2023-08-24 20:45:25 +08:00
d4346a51bc Update crontab_api.py 2023-08-24 20:22:53 +08:00
8260cc5f4a Update crontab_api.py 2023-08-24 20:12:50 +08:00
021b299b7d Update mw.tpl 2023-08-24 20:09:53 +08:00
a767e7e578 Update index.py 2023-08-24 20:05:08 +08:00
57da2aef27 Update freebsd.sh 2023-08-24 19:48:06 +08:00
5b43438cb1 Update index.py 2023-08-24 19:46:02 +08:00
7ab88a1bea Update index.py 2023-08-24 19:05:11 +08:00
31291a13c7 Update index.py 2023-08-24 18:58:59 +08:00
43d0b75d98 Update index.py 2023-08-24 18:58:35 +08:00
5490197b8a Update index.py 2023-08-24 18:58:16 +08:00
8f03574bce update 2023-08-24 18:56:19 +08:00
94487e0b3d Update index.py 2023-08-24 18:54:09 +08:00
45cc0159af Update index.py 2023-08-24 18:48:07 +08:00
504a618eb1 Update index.py 2023-08-24 18:33:48 +08:00
5e25849464 Update index.py 2023-08-24 18:33:22 +08:00
9bb59a1559 Update index.py 2023-08-24 18:10:07 +08:00
6883316efc Update index.py 2023-08-24 18:09:16 +08:00
de7ea503e5 update 2023-08-24 18:03:23 +08:00
4fcad95c79 Update index.py 2023-08-24 15:28:10 +08:00
75dc1bd70d Update freebsd.sh 2023-08-24 15:18:38 +08:00
44758e3e55 Update index.py 2023-08-24 15:02:20 +08:00
140624e62f Update index.py 2023-08-24 14:47:01 +08:00
65f90b473c Update index.py 2023-08-24 14:44:59 +08:00
0a089fcedf Update index.py 2023-08-24 14:41:58 +08:00
010624023f update 2023-08-24 14:39:32 +08:00
9399a14a92 update 2023-08-24 12:52:10 +08:00
2875b40e62 Update README.md 2023-08-23 20:15:28 +08:00
78c3686091 Update freebsd.sh 2023-08-23 13:12:29 +08:00
d7447197ec Update freebsd.sh 2023-08-22 19:58:23 +08:00
9b64ec5c6d Update freebsd.sh 2023-08-22 18:48:18 +08:00
dad51dad77 Update files_api.py 2023-08-22 18:48:07 +08:00
d89751f733 update 2023-08-22 18:25:46 +08:00
1dc486711b Update install.sh 2023-08-22 17:42:34 +08:00
60a2f85f02 Update install.sh 2023-08-22 17:41:57 +08:00
830d387ddb up 2023-08-22 17:37:53 +08:00
ae225780f9 Update system_api.py 2023-08-22 17:27:21 +08:00
e0a0a82d68 update 2023-08-22 17:25:54 +08:00
0b23c5f330 update 2023-08-22 17:18:32 +08:00
fb01c68f5a Update mw.py 2023-08-22 17:09:26 +08:00
5755121fa5 Update mw.py 2023-08-22 17:05:23 +08:00
3d1c613864 Update mw.py 2023-08-22 17:02:39 +08:00
9590c4bb7d Update mw.py 2023-08-22 17:01:45 +08:00
32c0bdf093 Update system_api.py 2023-08-22 16:52:15 +08:00
4f5424a746 Update freebsd.sh 2023-08-22 16:36:56 +08:00
81ba3bce9d Update freebsd.sh 2023-08-22 16:21:24 +08:00
22b3a1bc42 Update op_waf.js 2023-08-21 23:15:10 +08:00
df9a34aa31 Update index.py 2023-08-21 22:33:33 +08:00
2400213533 up 2023-08-21 22:20:51 +08:00
465eb118a9 0.16.0
改版为【老子面板】
2023-08-21 20:28:06 +08:00
7e81aa109f Update all_test.sh 2023-08-21 19:49:47 +08:00
b23b41c7a7 Update phplib.conf 2023-08-21 19:22:19 +08:00
724a77ae81 Update install.sh 2023-08-21 19:17:37 +08:00
3499ed74ee Update info.json 2023-08-21 19:13:36 +08:00
52997049e2 Update layout.html 2023-08-21 19:11:28 +08:00
a96a36b087 Create install.sh 2023-08-21 19:02:52 +08:00
5926f688a6 Update macos.sh 2023-08-21 00:41:26 +08:00
1b754f5c43 Update push_notice_msg.py 2023-08-21 00:12:30 +08:00
c4c20de520 Update install.sh 2023-08-20 22:37:42 +08:00
616895785f Update init_cmd.py 2023-08-20 20:37:30 +08:00
29d6c8740a Update receive_music163_search.py 2023-08-20 20:35:33 +08:00
64aa9a9d01 Update receive_music163_search.py 2023-08-20 19:46:30 +08:00
ffbe8ba6d4 Update receive_music163_search.py 2023-08-20 19:41:04 +08:00
ed39c5d243 Update receive_music163_search.py 2023-08-20 16:56:48 +08:00
4bb2115040 Update receive_music163_search.py 2023-08-20 15:32:16 +08:00
6b0cf8129d Update receive_music163_search.py 2023-08-20 15:11:19 +08:00
ab7bbe942b Update receive_music163_search.py 2023-08-20 15:11:01 +08:00
a8a3fa1754 update 2023-08-20 15:10:58 +08:00
e343f33b47 Update receive_faq.py 2023-08-20 14:58:48 +08:00
f55367ab5e Update index.py 2023-08-20 00:26:17 +08:00
050bd158c1 update 2023-08-20 00:25:46 +08:00
d35a680fec update 2023-08-19 20:11:08 +08:00
4a4ddeaabe Update system_api.py 2023-08-19 00:17:23 +08:00
0e74b0cccf Update system_api.py 2023-08-19 00:15:39 +08:00
806e29577e Update system_api.py 2023-08-19 00:14:47 +08:00
75923f5363 Update system_api.py 2023-08-19 00:13:19 +08:00
834196883c Update index.py 2023-08-18 00:53:15 +08:00
341826c641 Update index.py 2023-08-18 00:52:28 +08:00
1bd1ce5b31 Update index.py 2023-08-18 00:42:20 +08:00
Mr Chen
eef504e172 Merge pull request #442 from midoks/dev
OP防火墙测试功能修复
2023-08-18 00:20:06 +08:00
a0434ef7d6 Update index.py 2023-08-18 00:13:17 +08:00
893bbb8ea7 Update install.sh 2023-08-17 22:49:01 +08:00
92e3e277cc Update info.json 2023-08-17 21:38:44 +08:00
58e48bf013 Update info.json 2023-08-17 21:36:41 +08:00
644760d5b0 update 2023-08-17 21:35:37 +08:00
d6ccd81def 动态追踪 - 专业人员使用 2023-08-17 21:29:54 +08:00
Mr Chen
d32e71b2d9 Merge pull request #441 from midoks/dev
centos9 mysql8安装需要patchelf
2023-08-17 18:43:28 +08:00
ae9e56c56c Update rhel.sh 2023-08-17 18:41:42 +08:00
d7c0285bbf Update rhel.sh 2023-08-17 18:38:43 +08:00
5cc0957ffd Update rhel.sh 2023-08-17 18:38:18 +08:00
Mr Chen
1e44d64ace Merge pull request #440 from midoks/dev
mysql安装优化
2023-08-17 17:55:46 +08:00
907851c413 update 2023-08-17 17:29:04 +08:00
0faafc654b Update install.sh 2023-08-17 16:58:36 +08:00
Mr Chen
4cdc399b77 Merge pull request #439 from midoks/dev
mongodb脚本升级和检查openresty状态优化
2023-08-17 16:25:46 +08:00
a085e5b1ea Update mw.py 2023-08-17 16:20:07 +08:00
bdbf4dddc6 Update mongodb.tpl 2023-08-17 15:39:45 +08:00
5cee2f2b6d mongodb centos 2023-08-17 15:36:13 +08:00
Mr Chen
b9652a7940 Merge pull request #437 from midoks/dev
0.15.4
2023-08-17 14:53:59 +08:00
dc7ddbcf6b up 2023-08-17 14:52:52 +08:00
87a8bfe59e Update freebsd.sh 2023-08-17 13:49:30 +08:00
cfdd5e5f73 Update freebsd.sh 2023-08-17 13:48:38 +08:00
e2acf621ca Update freebsd.sh 2023-08-17 13:46:21 +08:00
0711a922d2 Update freebsd.sh 2023-08-17 13:45:05 +08:00
055ea0ca0c Update README.md 2023-08-17 13:23:26 +08:00
772d9c50f6 update 2023-08-17 13:18:46 +08:00
0809b51725 updaate 2023-08-17 12:27:31 +08:00
4e901e6750 update 2023-08-17 11:51:01 +08:00
5c62397234 update 2023-08-17 11:39:40 +08:00
63021a3eab Create centos.sh 2023-08-17 11:35:02 +08:00
e617b07790 update 2023-08-17 11:32:03 +08:00
960eeed4ce update 2023-08-17 11:18:25 +08:00
ccf020bf6b Update index.py 2023-08-17 11:14:56 +08:00
c4918d8cd7 update 2023-08-17 11:09:50 +08:00
b3d3ceb058 update 2023-08-17 11:02:39 +08:00
17a301c745 update 2023-08-17 00:56:07 +08:00
1bfa2ae3ab update 2023-08-17 00:52:43 +08:00
9be5dcfd8a Update index.py 2023-08-17 00:47:29 +08:00
d9e8f1d4ad Update ubuntu.sh 2023-08-17 00:43:22 +08:00
d85f544773 Create ubuntu.sh 2023-08-17 00:35:43 +08:00
577ac1f8ee Update debian.sh 2023-08-17 00:24:02 +08:00
ed117a1b40 Update debian.sh 2023-08-17 00:21:44 +08:00
9d54f0b6cd Create debian.sh 2023-08-17 00:19:23 +08:00
707eced7bf Create debian.sh 2023-08-17 00:16:28 +08:00
dd96833c09 Update index.py 2023-08-17 00:10:38 +08:00
4c61143918 update 2023-08-17 00:04:19 +08:00
8cb8a1bc70 update 2023-08-16 23:20:22 +08:00
c55c3c23d1 up 2023-08-16 22:37:31 +08:00
04e6b9367a Update index.py 2023-08-16 22:24:41 +08:00
f4f25b8ab3 Update index.py 2023-08-16 22:20:12 +08:00
a0b0b9b294 update 2023-08-16 22:18:31 +08:00
699ad0b8ca Update debian.sh 2023-08-16 22:11:39 +08:00
a45eaf1c3b Update debian.sh 2023-08-16 22:09:35 +08:00
0f51a6d481 update 2023-08-16 22:06:43 +08:00
142d5f7ed8 update 2023-08-16 22:00:57 +08:00
72bd528a24 update 2023-08-16 21:40:41 +08:00
af2dc0585b up 2023-08-16 18:27:12 +08:00
0a0021b09d Update install.sh 2023-08-16 13:46:00 +08:00
c5811d4494 Update install.sh 2023-08-16 12:11:11 +08:00
e329892cd2 Update openssl.sh 2023-08-16 11:32:40 +08:00
368324a813 Update install.sh 2023-08-16 11:28:52 +08:00
6a7cc4f054 Update install.sh 2023-08-16 11:27:54 +08:00
1d3cba599c Update install.sh 2023-08-16 11:15:14 +08:00
7d902a50eb Update install.sh 2023-08-16 11:09:48 +08:00
25feb7c0ad Update install.sh 2023-08-16 11:07:32 +08:00
e15d1716e5 Update install.sh 2023-08-16 11:02:48 +08:00
ee16e0142e Update install.sh 2023-08-16 10:59:15 +08:00
68e06aa8f5 u 2023-08-16 10:52:58 +08:00
d88003ca52 Update install.sh 2023-08-16 03:55:40 +08:00
8757c646f6 Update index.py 2023-08-16 03:49:13 +08:00
c3e9d8aa4c update 2023-08-16 03:45:39 +08:00
7e3983f612 update 2023-08-16 03:25:46 +08:00
a4e43b492d OP防火墙-加入地区限制 2023-08-16 02:53:29 +08:00
1f57517ea7 Update push_notice_msg.py 2023-08-15 09:47:44 +08:00
b2fe35771d up 2023-08-15 00:00:44 +08:00
00ce3e00d3 update 2023-08-14 20:16:16 +08:00
c7c28731a4 update 2023-08-14 19:42:08 +08:00
3305eab770 update 2023-08-14 18:30:29 +08:00
b595359f38 Update index.py 2023-08-14 18:29:00 +08:00
5dc06b90ca Update init.lua 2023-08-14 12:56:59 +08:00
651fa7672c Update layout.html 2023-08-14 11:53:53 +08:00
7a0db5abef Update layout.html 2023-08-14 11:52:51 +08:00
d21a5dfacc Update push_notice_msg.py 2023-08-14 09:15:50 +08:00
0c49749b63 Update waf_maxminddb.lua 2023-08-14 00:11:02 +08:00
11bb65a739 Update index.py 2023-08-13 22:03:55 +08:00
ce44353cbf debug 1 2023-08-13 21:13:13 +08:00
2e5c5ef5b9 update 2023-08-13 18:32:30 +08:00
Mr Chen
d1b687476b Merge pull request #436 from midoks/dev
0.15.4
2023-08-13 16:08:33 +08:00
a46eabce10 update 2023-08-13 16:06:40 +08:00
08e378a3e4 Update push_ad.py 2023-08-13 16:02:29 +08:00
c80ce63a4b Update push_notice_msg.py 2023-08-13 16:02:07 +08:00
72bb94df42 Update README.md 2023-08-13 15:26:45 +08:00
e9b7aca47a Update imagemagick.sh 2023-08-13 15:20:26 +08:00
f25d4f5a4f Update imagemagick.sh 2023-08-13 15:18:25 +08:00
59fcef76fe Update imagemagick.sh 2023-08-13 15:15:10 +08:00
4ab6ccbcbb Update imagemagick.sh 2023-08-13 15:14:22 +08:00
fd457df3c8 up 2023-08-13 15:04:54 +08:00
147bec02a5 Update phplib.conf 2023-08-13 14:58:38 +08:00
34c126fbb7 Update ioncube.sh 2023-08-13 14:57:41 +08:00
4d21c920a8 Update all_test.sh 2023-08-13 14:56:25 +08:00
2d810fe7ab Update opcache.sh 2023-08-13 14:52:34 +08:00
fb5260b9a5 Update opcache.sh 2023-08-13 14:50:24 +08:00
32b5542534 Update all_test.sh 2023-08-13 14:46:15 +08:00
c665486122 Update redis.sh 2023-08-13 14:44:11 +08:00
d3b885b1f9 Update redis.sh 2023-08-13 14:43:45 +08:00
e476e36420 Update solr.sh 2023-08-13 14:37:24 +08:00
587503dc67 Update solr.sh 2023-08-13 14:31:18 +08:00
cecfe9470f Update imagemagick.sh 2023-08-13 14:23:54 +08:00
abc37acacc Update all_test.sh 2023-08-13 14:18:56 +08:00
e0197fef3a Update eaccelerator.sh 2023-08-13 14:13:32 +08:00
04c4e7ddc8 Update xdebug.sh 2023-08-13 14:10:08 +08:00
6fb3e29a91 Update intl.sh 2023-08-13 14:01:10 +08:00
66fe66b479 update 2023-08-13 13:59:07 +08:00
4329d2470c update 2023-08-13 13:57:46 +08:00
0cd4527234 Update phalcon.sh 2023-08-13 13:44:07 +08:00
bdba9149f2 update 2023-08-13 13:43:04 +08:00
e05f7a9c3f Update seaslog.sh 2023-08-13 13:41:46 +08:00
bddd81c94d Update zlib.sh 2023-08-13 13:40:54 +08:00
f470392382 Update swoole.sh 2023-08-13 13:39:55 +08:00
895a250f06 update 2023-08-13 13:39:14 +08:00
dd579b7e5c update 2023-08-13 13:33:47 +08:00
cd0653d092 Update memcache.sh 2023-08-13 13:32:37 +08:00
f2bc938ade Update memcache.sh 2023-08-13 13:32:18 +08:00
dc694cae35 Update gettext.sh 2023-08-13 13:30:44 +08:00
0b98e40fec Update iconv.sh 2023-08-13 13:29:34 +08:00
10c40800ff Update mcrypt.sh 2023-08-13 13:28:38 +08:00
424d9fa799 Update intl.sh 2023-08-13 13:28:06 +08:00
1350fc7a4a Update gd_old.sh 2023-08-13 13:26:22 +08:00
d678ade262 Update pcntl.sh 2023-08-13 13:24:54 +08:00
0b0b0bc9c5 Update bcmath.sh 2023-08-13 13:22:46 +08:00
f3eee40e1e Update openssl.sh 2023-08-13 12:15:43 +08:00
8e0327a084 Update openssl.sh 2023-08-13 12:14:23 +08:00
0a4b5529b9 Update install.sh 2023-08-13 11:59:08 +08:00
a8c17e1f3c update 2023-08-13 11:55:33 +08:00
4d242dd322 update 2023-08-13 11:49:54 +08:00
272a08f4eb Update install.sh 2023-08-13 11:45:15 +08:00
453009da40 Update install.sh 2023-08-13 11:39:20 +08:00
9c8880e1bb Update install.sh 2023-08-13 10:49:24 +08:00
4f716830ef update 2023-08-13 10:46:54 +08:00
b4d799f8bd up 2023-08-13 10:14:22 +08:00
e9fc7d5344 up 2023-08-13 01:42:50 +08:00
585d3d1839 Update install.sh 2023-08-13 00:12:35 +08:00
3278dd23b5 Update install.sh 2023-08-13 00:08:50 +08:00
5b406eaeb1 Update my8.0.cnf 2023-08-12 21:48:48 +08:00
0a354f649d mysql添加可过滤的同步错误 2023-08-12 21:11:32 +08:00
176dd4a5b8 Update install.sh 2023-08-12 20:13:44 +08:00
4bb9cc2d67 Update config_api.py 2023-08-12 17:05:12 +08:00
f1edb26540 up 2023-08-12 17:04:56 +08:00
0692537cbd update 2023-08-12 16:41:15 +08:00
0710ca590a Update ubuntu.sh 2023-08-12 15:46:44 +08:00
c19b12e8df Update swoole.sh 2023-08-12 15:37:40 +08:00
99eeee19ef Update all_test.sh 2023-08-12 15:19:10 +08:00
fff3707031 Update solr.sh 2023-08-12 15:11:49 +08:00
0d0cb4add1 Update phalcon.sh 2023-08-12 15:06:52 +08:00
5ed37443da Update phalcon.sh 2023-08-12 14:47:18 +08:00
25b836e6f5 Update memcached.sh 2023-08-12 14:43:40 +08:00
4ca5c8e1a8 Merge branch 'master' into dev 2023-08-12 14:38:18 +08:00
b522287a87 Merge branch 'master' into dev 2023-08-12 14:37:36 +08:00
Mr Chen
05cec7e0bf Merge pull request #435 from msycn/master
修复Openssl 1.1.1 重大漏洞/更新MySQL到8.0.34/更新php到8.2.8/更新redis到7.0.12
2023-08-12 14:36:42 +08:00
msycn
b731868e06 Update openssl.sh 1.1.1 to 3.0.10
最新的稳定版本是 3.1 系列,支持到 2025 年 3 月 14 日。还提供 3.0 系列,它是长期支持 (LTS) 版本,支持到 2026 年 9 月 7 日。之前的 LTS 版本(1.1.1 系列)是 也可用并支持到 2023 年 9 月 11 日。所有旧版本(包括 1.1.0、1.0.2、1.0.0 和 0.9.8)现已不再支持,不应使用。 我们鼓励这些旧版本的用户尽快升级到3.1或3.0。 提供了对 1.0.2 的扩展支持,以获取该版本的安全修复程序。

The latest stable version is the 3.1 series supported until 14th March 2025. Also available is the 3.0 series which is a Long Term Support (LTS) version and is supported until 7th September 2026. The previous LTS version (the 1.1.1 series) is also available and is supported until 11th September 2023. All older versions (including 1.1.0, 1.0.2, 1.0.0 and 0.9.8) are now out of support and should not be used. Users of these older versions are encouraged to upgrade to 3.1 or 3.0 as soon as possible. Extended support for 1.0.2 to gain access to security fixes for that version is available.
2023-08-12 00:57:04 +08:00
msycn
9c4ceca41f Update install.sh 8.2.7 to 8.2.8
Version 8.2.8
06 Jul 2023
CLI:
Fixed bug GH-11246 (cli/get_set_process_title fails on MacOS).
Core:
Fixed build for the riscv64 architecture/GCC 12.
Curl:
Fixed bug GH-11433 (Unable to set CURLOPT_ACCEPT_ENCODING to NULL).
Date:
Fixed bug GH-11455 (Segmentation fault with custom object date properties).
DOM:
Fixed bugs GH-11288 and GH-11289 and GH-11290 and GH-9142 (DOMExceptions and segfaults with replaceWith).
Fixed bug GH-10234 (Setting DOMAttr::textContent results in an empty attribute value).
Fix return value in stub file for DOMNodeList::item.
Fix spec compliance error with '*' namespace for DOMDocument::getElementsByTagNameNS.
Fix DOMElement::append() and DOMElement::prepend() hierarchy checks.
Fixed bug GH-11347 (Memory leak when calling a static method inside an xpath query).
Fixed bug #67440 (append_node of a DOMDocumentFragment does not reconcile namespaces).
Fixed bug #81642 (DOMChildNode::replaceWith() bug when replacing a node with itself).
Fixed bug #77686 (Removed elements are still returned by getElementById).
Fixed bug #70359 (print_r() on DOMAttr causes Segfault in php_libxml_node_free_list()).
Fixed bug #78577 (Crash in DOMNameSpace debug info handlers).
Fix lifetime issue with getAttributeNodeNS().
Fix "invalid state error" with cloned namespace declarations.
Fixed bug #55294 and #47530 and #47847 (various namespace reconciliation issues).
Fixed bug #80332 (Completely broken array access functionality with DOMNamedNodeMap).
Opcache:
Fix allocation loop in zend_shared_alloc_startup().
Access violation on smm_shared_globals with ALLOC_FALLBACK.
Fixed bug GH-11336 (php still tries to unlock the shared memory ZendSem with opcache.file_cache_only=1 but it was never locked).
OpenSSL:
Fixed bug GH-9356 Incomplete validation of IPv6 Address fields in subjectAltNames (James Lucas, Jakub Zelenka).
PCRE:
Fix preg_replace_callback_array() pattern validation.
PGSQL:
Fixed intermittent segfault with pg_trace.
Phar:
Fix cross-compilation check in phar generation for FreeBSD.
SPL:
Fixed bug GH-11338 (SplFileInfo empty getBasename with more than one slash).
Standard:
Fix access on NULL pointer in array_merge_recursive().
Fix exception handling in array_multisort().
SQLite3:
Fixed bug GH-11451 (Invalid associative array containing duplicate keys).
2023-08-12 00:52:40 +08:00
msycn
22d266e710 Update redis 7.0.4 to 7.0.12 2023-08-12 00:50:36 +08:00
msycn
d35bf118ff Update install.sh to 8.0.34 2023-08-12 00:48:17 +08:00
msycn
1adb2f751c Update MySQL to 8.0.34
Update MySQL to 8.0.34
2023-08-12 00:46:07 +08:00
54e743037e Update index.py 2023-08-11 21:04:46 +08:00
6debb93fd1 Update init.lua 2023-08-11 21:01:17 +08:00
7229f9c569 Update index.py 2023-08-11 20:59:34 +08:00
844dcbda00 cf验证问题解决 2023-08-11 20:58:52 +08:00
af2b45a6f4 Update index.py 2023-08-11 20:54:37 +08:00
d848d41a71 Update index.py 2023-08-11 20:44:59 +08:00
826ebfb2e5 Update init.lua 2023-08-11 20:05:04 +08:00
e1807c1585 Update index.py 2023-08-11 17:17:08 +08:00
6e9d5a19c0 关于强制性验证优化 2023-08-11 17:15:47 +08:00
6eadad5db4 OP防火墙部分优化 2023-08-11 12:56:07 +08:00
2b2fc08120 Update index.py 2023-08-11 01:20:45 +08:00
175061884d update 2023-08-11 01:11:45 +08:00
cc3fa8ac95 Update init.lua 2023-08-11 00:51:54 +08:00
c9d736e338 update 2023-08-10 22:35:08 +08:00
e4437e42f3 Update site_api.py 2023-08-10 21:19:49 +08:00
644fc2c81f Update mw.py 2023-08-10 21:09:59 +08:00
d2314bf26f Update push_notice_msg.py 2023-08-10 18:44:22 +08:00
Mr Chen
c17314b634 Merge pull request #434 from midoks/dev
MySQL,MariaDB数据库主从同步及多源同步
2023-08-10 11:32:24 +08:00
92a4b28fbf mariadb,mysql多源同步支持 2023-08-10 11:28:17 +08:00
733e4e81be update 2023-08-10 09:54:19 +08:00
8b99ae2515 update 2023-08-09 13:01:41 +08:00
2a72422402 update ad 2023-08-09 12:57:38 +08:00
145a259ef9 update 2023-08-09 08:57:49 +08:00
a34b7719c8 update 2023-08-09 08:52:36 +08:00
4d98455c35 up 2023-08-08 21:17:49 +08:00
c0c9def1fb Update index.py 2023-08-08 21:07:53 +08:00
02d8416466 update 2023-08-08 21:06:56 +08:00
d505740269 Update index.py 2023-08-08 21:01:21 +08:00
b1f6314df7 Update index.py 2023-08-08 16:54:17 +08:00
533653fe47 Update index.py 2023-08-08 16:48:21 +08:00
dff4551fb1 update 2023-08-08 16:45:46 +08:00
79723149a5 Update install.sh 2023-08-08 16:32:07 +08:00
76da8a2ad5 Update install.sh 2023-08-08 16:25:40 +08:00
645538e633 Update index.py 2023-08-08 16:11:17 +08:00
1a1b4e9f3a Update index.py 2023-08-08 16:09:07 +08:00
3afde01f93 Update index.py 2023-08-08 16:07:44 +08:00
a14db23971 Update index.py 2023-08-08 16:04:25 +08:00
316f06911b Update index.py 2023-08-08 16:01:34 +08:00
698d049314 up 2023-08-08 15:50:20 +08:00
d397d74f73 Update index.py 2023-08-08 15:44:25 +08:00
8a7447a4ee Update mysql-apt.js 2023-08-08 15:37:45 +08:00
98414db41d update 2023-08-08 15:25:23 +08:00
7024185b59 Update my8.0.cnf 2023-08-08 14:52:57 +08:00
495f16f2cf Update mysql.js 2023-08-08 14:52:19 +08:00
62444b7b6d Update mysql.js 2023-08-08 14:51:59 +08:00
50b11457f7 update 2023-08-08 14:26:00 +08:00
393cbc3974 Merge branch 'master' into dev 2023-08-08 13:27:41 +08:00
ce3bfc2ebd Merge branch 'master' into dev 2023-08-08 13:25:56 +08:00
Mr Chen
b68e8f3650 Merge pull request #433 from midoks/midoks-patch-1
AD删除
2023-08-08 13:25:25 +08:00
Mr Chen
59a2765b2f AD删除 2023-08-08 13:24:29 +08:00
08c83edeb9 update 2023-08-08 13:17:39 +08:00
c114e9aca8 Update index.py 2023-08-07 22:50:52 +08:00
c5123268d0 Update index.py 2023-08-07 22:48:34 +08:00
54bbc3ff57 Update index.py 2023-08-07 22:39:24 +08:00
4658b991a9 Update index.py 2023-08-07 22:15:14 +08:00
52145e710b Update index.py 2023-08-07 22:05:01 +08:00
4acc48ded2 Update index.py 2023-08-07 22:04:00 +08:00
0d858f87ea Update index.py 2023-08-07 22:03:00 +08:00
f37f08a9f5 Update index.py 2023-08-07 21:53:28 +08:00
0b5fc1de55 Update index.py 2023-08-07 21:52:53 +08:00
8748777101 Update index.py 2023-08-07 21:47:03 +08:00
48ed0b8034 Update index.py 2023-08-07 21:44:32 +08:00
41c9f6b7b6 Update mariadb.js 2023-08-07 21:24:42 +08:00
c47336b65f update 2023-08-07 21:22:29 +08:00
24d7204ccc Update index.py 2023-08-07 21:05:22 +08:00
8c00fb8859 Update index.py 2023-08-07 20:42:08 +08:00
c573b28f16 Update index.py 2023-08-07 20:41:11 +08:00
afad548cf9 Update index.py 2023-08-07 20:22:26 +08:00
2605849de2 Update index.py 2023-08-07 20:02:18 +08:00
77598fa8a7 Update index.py 2023-08-07 19:44:47 +08:00
b175ab735d Update index.py 2023-08-07 19:34:57 +08:00
54ed17ab8f Update index.py 2023-08-07 19:32:47 +08:00
cadf72ea69 Update index.py 2023-08-07 17:53:33 +08:00
dadb737f88 update 2023-08-07 15:59:00 +08:00
fef2acf683 Update index.py 2023-08-07 15:56:59 +08:00
4b6dbf8887 Update mariadb.js 2023-08-07 15:46:10 +08:00
06c99e1cc1 Update index.py 2023-08-07 15:26:54 +08:00
afb3e920f8 mariadb多住一从功能 2023-08-07 15:10:38 +08:00
2c346c9850 Update my.cnf 2023-08-06 14:38:47 +08:00
5b6c5be288 Update mariadb.js 2023-08-06 00:43:24 +08:00
63bd806222 Update index.py 2023-08-06 00:25:22 +08:00
afe3848b71 update 2023-08-05 21:34:04 +08:00
cd361ec7ec Update install.sh 2023-08-05 21:33:14 +08:00
eb399fe799 Update install.sh 2023-08-05 21:32:25 +08:00
53e588b6fc Update install.sh 2023-08-05 21:31:58 +08:00
Mr Chen
612c104cca Merge pull request #432 from midoks/dev
PHP - libzip库修复
2023-08-05 17:35:09 +08:00
550ca7681a Update libzip.sh 2023-08-05 17:31:16 +08:00
6a09706362 Update libzip.sh 2023-08-05 17:30:26 +08:00
ca040e8986 Update install.sh 2023-08-05 17:23:52 +08:00
6fcc980d5d Update libzip.sh 2023-08-05 17:19:39 +08:00
b69adc9c7d Update libzip.sh 2023-08-05 17:09:10 +08:00
67da343705 Update libzip.sh 2023-08-05 17:05:48 +08:00
4b47e27a54 Update libzip.sh 2023-08-05 17:01:05 +08:00
fba3ddc9a5 Update libzip.sh 2023-08-05 16:44:39 +08:00
Mr Chen
4769ce5be8 Merge pull request #431 from midoks/dev
0.15.2
2023-08-05 15:12:37 +08:00
8e16cbf7f9 0.15.2 2023-08-05 15:06:22 +08:00
4225d4c040 Update common.py 2023-08-05 14:43:14 +08:00
b578f2fddc Update common.py 2023-08-05 14:42:43 +08:00
961c3423fd Update common.py 2023-08-05 14:29:52 +08:00
8040c8c67a Update common.py 2023-08-05 14:21:25 +08:00
5aca7d7c26 Update common.py 2023-08-05 14:17:16 +08:00
d9f99e6b7c Update common.py 2023-08-05 14:17:01 +08:00
3addb46708 Update common.py 2023-08-05 13:46:19 +08:00
e6b493237d 优化初始化安装SSH端口识别 2023-08-05 13:36:13 +08:00
7f42054a14 Update ubuntu.sh 2023-08-05 12:29:39 +08:00
501af3da15 Update plugins_api.py 2023-08-05 12:01:46 +08:00
68727cbe91 Update site_api.py 2023-08-05 11:28:33 +08:00
c5207961f3 Update index.py 2023-08-05 01:52:49 +08:00
a04e05c7e8 Update index.py 2023-08-05 01:19:42 +08:00
5b8cca24aa Update index.py 2023-08-05 00:46:41 +08:00
cafe58f3fc Update index.py 2023-08-05 00:45:04 +08:00
d1e2781eb9 Update index.py 2023-08-05 00:44:48 +08:00
67c899fc84 Update index.py 2023-08-05 00:43:06 +08:00
7432548ff9 Update index.py 2023-08-05 00:24:35 +08:00
0c2c136097 Update index.py 2023-08-04 23:58:21 +08:00
2a7e21951b Update my8.0.cnf 2023-08-04 22:49:18 +08:00
066185e404 网站设置反向代理升级功能 2023-08-04 20:27:20 +08:00
bd431f1647 docker阶段性完成 2023-08-03 18:37:14 +08:00
0a6e88d81d update 2023-08-03 17:00:12 +08:00
02c9988ef7 Update docker.js 2023-08-03 00:24:13 +08:00
5ee7df4a46 Update nginx.conf 2023-08-03 00:14:16 +08:00
5f382c0034 update 2023-08-03 00:06:01 +08:00
63d17c4d77 Update docker.js 2023-08-02 23:24:10 +08:00
38722c1dc2 Update index.py 2023-08-02 17:51:29 +08:00
ea982b7261 Update README.md 2023-08-02 17:50:22 +08:00
73d9edced8 使用mariadb二进制导入备份文件 2023-08-02 17:36:27 +08:00
af03c004a3 Update rsyncd.js 2023-08-02 15:35:30 +08:00
ddd9e70ac2 Update rsyncd.js 2023-08-02 15:29:32 +08:00
8976a7a147 Update rsyncd.js 2023-08-02 15:26:55 +08:00
677ff8ec0c Update README.md 2023-08-02 15:10:42 +08:00
47d240e2b8 rsyncd添加优化 2023-08-02 15:10:23 +08:00
1f7bd76875 Update crontab_api.py 2023-08-02 14:27:04 +08:00
f04c70f022 计划任务自动脚本运行时间 2023-08-02 14:04:00 +08:00
5044cc5db9 Update README.md 2023-08-02 00:06:51 +08:00
4329b90ac4 Update info.json 2023-08-01 23:58:10 +08:00
f7873b6dcd Update init_cmd.py 2023-07-25 00:03:20 +08:00
a80d666786 update 2023-07-24 23:52:38 +08:00
Mr Chen
0598704dce Merge pull request #428 from midoks/dev
修复centos9源安装问题
2023-07-22 12:54:17 +08:00
8f19a05755 Update rhel.sh 2023-07-22 12:53:07 +08:00
f320d7cc69 Update rhel.sh 2023-07-22 12:26:56 +08:00
1e97929a24 Update push_notice_msg.py 2023-07-21 12:10:55 +08:00
Mr Chen
c66bbac97e Merge pull request #427 from midoks/dev
python3.7 urllib3在亚马逊降级
2023-07-20 16:14:22 +08:00
1f7a0d2795 Create r3.7.txt 2023-07-20 16:04:18 +08:00
f05ce79e63 Update rhel.sh 2023-07-20 15:55:11 +08:00
9f3d06191a PHP提示优化 2023-07-19 18:35:27 +08:00
Mr Chen
2c6614a5ff Merge pull request #426 from midoks/dev
赞助换域名
2023-07-18 15:23:49 +08:00
905bad29cf Update README.md 2023-07-18 15:22:19 +08:00
9ba572a8ce AD修改 2023-07-16 17:23:45 +08:00
Mr Chen
85fc333d2c Merge pull request #424 from midoks/dev
0.15.1
2023-07-15 23:04:39 +08:00
5bc27a4725 Update config_api.py 2023-07-15 22:53:38 +08:00
e5acf206f5 Update cli.sh 2023-07-15 20:43:13 +08:00
ae7afc2eb5 Update rhel.sh 2023-07-15 20:34:46 +08:00
5c8527a5de 监控页面-自定义时间优化。 2023-07-15 19:33:17 +08:00
274592229e Update rhel.sh 2023-07-15 15:51:03 +08:00
60ddb13f8e Update rhel.sh 2023-07-15 15:50:35 +08:00
f62af00fb7 Update rhel.sh 2023-07-15 15:49:28 +08:00
9c6faefffd Update rhel.sh 2023-07-15 15:38:14 +08:00
c9e27c2add 优化
* [插件]docker - 添加IP地址池。
* PHP下载中国优化。
2023-07-15 15:00:00 +08:00
97b1e8b9b3 Update rhel.sh 2023-07-15 12:34:47 +08:00
18cdcd1436 修复子目录绑定-伪静态问题。 2023-07-13 10:36:16 +08:00
7d783c64b6 OP防火墙优化
站点配置-状态关闭后,不再防御。
2023-07-13 00:40:46 +08:00
0b65d69750 Update __init__.py 2023-07-12 22:18:55 +08:00
693dbb8cf1 Update __init__.py 2023-07-12 22:17:58 +08:00
117a99e729 增加标识 2023-07-12 09:46:58 +08:00
45d4b8a5de update 2023-07-11 16:25:34 +08:00
a5791051b1 Update debian.sh 2023-07-11 16:11:20 +08:00
dc3f8f8e0b 自动同步gitee 2023-07-11 12:21:48 +08:00
bf1d00c012 Update config_api.py 2023-07-10 22:41:13 +08:00
51cf851cea Update site.js 2023-07-10 22:38:37 +08:00
1e09408eb9 Update index.py 2023-07-10 22:13:46 +08:00
7659865caf Update lib.sh 2023-07-05 22:19:44 +08:00
Mr Chen
ad1851d068 Merge pull request #423 from midoks/dev
requests兼容低版本
2023-07-05 18:05:33 +08:00
e174652afc Update requirements.txt 2023-07-05 18:02:40 +08:00
a95e7aacd7 Update r3.6.txt 2023-07-05 18:00:36 +08:00
Mr Chen
6aa638ef9a Merge pull request #422 from midoks/dev
Update requirements.txt
2023-07-05 13:03:14 +08:00
6f3d50bae5 Update requirements.txt 2023-07-05 13:01:08 +08:00
Mr Chen
301a5a95b8 Merge pull request #421 from midoks/dev
AD
2023-07-05 12:51:37 +08:00
d35b9dccc7 AD信息 2023-07-05 12:49:47 +08:00
82680605ac mvirtua ad 2023-07-05 12:47:05 +08:00
5b148b3d1a Update requirements.txt 2023-07-05 10:20:04 +08:00
Mr Chen
714acd20e5 Merge pull request #420 from midoks/dev
0.15.0
2023-07-04 20:55:21 +08:00
bf58cd8acc Update config_api.py 2023-07-04 20:52:57 +08:00
059053d27c mysql安装成功后,删除原文件 2023-07-03 22:22:11 +08:00
185e73c26a Update index.py 2023-07-03 22:12:55 +08:00
569511d321 update 2023-07-03 22:08:00 +08:00
f88bf5059f Update README.md 2023-07-03 17:52:56 +08:00
05b63b8d2b Update index.py 2023-07-03 17:45:12 +08:00
3a197b273d Update docker.js 2023-07-03 17:37:14 +08:00
f4fdbab41c Update index.py 2023-07-03 17:35:34 +08:00
f6b2940657 docker插件容器创建OK 2023-07-03 17:34:58 +08:00
78b9ac5df0 up 2023-07-03 11:53:54 +08:00
3ea4272307 Update docker.js 2023-07-02 16:29:10 +08:00
efc7cee9ad Update docker.js 2023-07-02 15:36:38 +08:00
5c4805453d Update docker.js 2023-07-02 15:27:25 +08:00
f6da241c85 update 2023-07-02 14:38:56 +08:00
d5b6eb2325 update 2023-07-01 22:06:54 +08:00
6ed2cddf71 Update docker.js 2023-07-01 21:35:46 +08:00
9c31d76442 docker update 2023-07-01 21:34:04 +08:00
7aecbaf7df Update docker.js 2023-07-01 15:22:41 +08:00
ee81a86d24 update 2023-07-01 15:17:43 +08:00
0a60d66732 update 2023-07-01 14:46:22 +08:00
c3e3cff472 Update docker.js 2023-07-01 12:37:15 +08:00
194d46eb6a Update docker.js 2023-07-01 12:37:02 +08:00
d66bc94edc Update docker.js 2023-07-01 12:34:09 +08:00
fb4ffcd343 Update index.py 2023-07-01 12:30:58 +08:00
10c235e317 Update r3.6.txt 2023-07-01 12:25:32 +08:00
9c156928d8 up 2023-07-01 12:24:04 +08:00
771905d7f6 Update requirements.txt 2023-07-01 12:23:01 +08:00
cd21b3f3e7 Update r3.6.txt 2023-07-01 12:22:18 +08:00
982026db24 update 2023-07-01 12:21:07 +08:00
f9b91d9989 Update docker.js 2023-07-01 12:17:30 +08:00
f7b1159bd7 update 2023-07-01 12:15:51 +08:00
6aa49ddbcf Update rhel.sh 2023-07-01 11:48:06 +08:00
866eddac1d Update lib.sh 2023-07-01 10:19:42 +08:00
af0cce4216 Update install.sh 2023-07-01 10:16:39 +08:00
3951322d86 Update install_dev.sh 2023-07-01 10:16:23 +08:00
dfdd16b444 Update index.py 2023-07-01 10:11:15 +08:00
aa8fec2b7e update 2023-07-01 09:52:53 +08:00
2a8958ab84 Update index.py 2023-07-01 00:32:36 +08:00
f5125670ee Update index.py 2023-07-01 00:19:24 +08:00
2a8d4fb7a9 Update requirements.txt 2023-07-01 00:14:04 +08:00
59f7fe2290 Update requirements.txt 2023-07-01 00:07:30 +08:00
928db6e7e7 Update requirements.txt 2023-07-01 00:02:13 +08:00
f3927bd6cf Update requirements.txt 2023-07-01 00:01:32 +08:00
bb92727b56 Update requirements.txt 2023-07-01 00:00:14 +08:00
21b80b1fce Update index.py 2023-06-30 23:54:05 +08:00
637da92834 up 2023-06-30 23:43:51 +08:00
f5859626a9 update 2023-06-30 21:57:42 +08:00
003449eb0a update 2023-06-30 12:30:28 +08:00
d27f926191 update 2023-06-30 12:16:25 +08:00
7483247d4d up 2023-06-30 10:17:02 +08:00
1ad841d3af Update docker.js 2023-06-30 00:09:15 +08:00
27376d879c up 2023-06-30 00:09:09 +08:00
8b824447c1 Update php.service.tpl 2023-06-29 18:29:39 +08:00
a1d26dcd45 Update intl.sh 2023-06-29 16:25:12 +08:00
5e68c7bf0a Update install.sh 2023-06-29 13:00:08 +08:00
481ae16713 Update index.py 2023-06-29 12:59:05 +08:00
2d2bd39f9e Update intl.sh 2023-06-29 12:02:48 +08:00
7246a878a5 Update intl.sh 2023-06-29 12:00:37 +08:00
542ee3cdb0 Update intl.sh 2023-06-29 11:59:59 +08:00
69503b223b update 2023-06-29 11:43:56 +08:00
78d8fa7ebf Update lib.sh 2023-06-29 10:54:26 +08:00
21e9d8f2d8 Update update_dev.sh 2023-06-29 10:49:10 +08:00
3c6adfbd44 Update install.sh 2023-06-29 10:41:10 +08:00
c0e70abe6d Update install_dev.sh 2023-06-29 10:40:31 +08:00
f174e71228 Update app.py 2023-06-29 10:25:14 +08:00
7a9a811ea6 Update app.py 2023-06-29 10:21:39 +08:00
c7e3d9d9a3 Update app.py 2023-06-29 10:20:39 +08:00
161f7a1bc0 Update app.py 2023-06-29 10:18:52 +08:00
175cce0131 Update lib.sh 2023-06-29 10:11:52 +08:00
3735897ed2 Update lib.sh 2023-06-29 09:59:06 +08:00
30bfa5a630 Update lib.sh 2023-06-29 09:56:24 +08:00
594fdb4712 Update lib.sh 2023-06-29 09:55:14 +08:00
31a441ea02 update 2023-06-29 09:52:30 +08:00
06f7087fad Update requirements.txt 2023-06-29 09:30:06 +08:00
e7b8f5afdc Update index.py 2023-06-29 09:25:55 +08:00
6b57addfa7 Update index.py 2023-06-28 19:11:44 +08:00
aea435fbaf Update index.py 2023-06-28 18:53:45 +08:00
9cd6656946 u 2023-06-28 16:04:17 +08:00
4f7df4b3c3 Update index.py 2023-06-28 14:58:45 +08:00
70d12b7b8d docker 2023-06-28 14:53:59 +08:00
fe576c820a Update requirements.txt 2023-06-28 04:09:09 +08:00
b48a53e0d7 Create nezha.conf 2023-06-28 04:04:44 +08:00
4701839c33 up 2023-06-28 03:40:23 +08:00
916bc67c4d Update cert_api.py 2023-06-28 03:21:11 +08:00
d7bba830cc Update requirements.txt 2023-06-28 02:33:11 +08:00
7a28f8f57a Update index.py 2023-06-28 02:30:28 +08:00
41ee25aa7b update 2023-06-28 02:21:59 +08:00
c8aa91cfa3 up 2023-06-28 02:09:28 +08:00
98f27498b0 Update index.py 2023-06-28 01:57:06 +08:00
5444fe6455 Update index.py 2023-06-28 01:40:41 +08:00
9627c6e47b Update index.py 2023-06-28 01:32:14 +08:00
13597d6282 Update index.py 2023-06-28 01:21:15 +08:00
d09494e3aa Update index.py 2023-06-28 01:14:15 +08:00
d35439d286 Update index.py 2023-06-28 01:14:03 +08:00
ced48bab47 nezha 测试OK 2023-06-28 01:02:58 +08:00
fe2df6cc8d up 2023-06-28 00:08:38 +08:00
8bdfe15101 nezha 60% 2023-06-28 00:04:07 +08:00
42e9983b88 Update config.json 2023-06-27 15:56:43 +08:00
9b7c0b6f99 up 2023-06-27 15:11:38 +08:00
e421292c9e up 2023-06-27 14:13:04 +08:00
7b4d31779a Update install.sh 2023-06-27 01:31:52 +08:00
f3b09056f3 init nezha plugin 2023-06-26 23:06:06 +08:00
a92ccea6c5 lrzsz 2023-06-26 11:57:07 +08:00
9da77a0a9b up 2023-06-24 22:37:02 +08:00
c233ecaaa7 up 2023-06-22 16:06:04 +08:00
5828b8b8cb up 2023-06-22 16:00:09 +08:00
a4a1a2c83c up 2023-06-20 16:39:36 +08:00
0e20bc182c up 2023-06-19 20:28:44 +08:00
99c0b0a81a Update site_api.py 2023-06-17 23:20:24 +08:00
3fa199fec4 acme部署问题 2023-06-17 23:18:15 +08:00
194c36c6d8 tg ad 2023-06-15 01:43:21 +08:00
2fb542f6b4 Update all_test.sh 2023-06-14 01:25:55 +08:00
60af43ed31 Update intl.sh 2023-06-14 01:24:15 +08:00
9f02cf9744 Update install.sh 2023-06-14 01:21:47 +08:00
846bd270df Update yaf.sh 2023-06-14 01:14:47 +08:00
d910d4f462 up 2023-06-14 00:31:20 +08:00
13f5b1bf02 up 2023-06-13 18:34:57 +08:00
1fc3fd6247 Update lib.sh 2023-06-13 18:03:53 +08:00
36e3feb886 Update requirements.txt 2023-06-13 17:46:00 +08:00
0ca34afacd Update lib.sh 2023-06-13 17:43:39 +08:00
ffb3288f3d Update requirements.txt 2023-06-13 17:40:55 +08:00
e2f68a73ed Update requirements.txt 2023-06-13 17:34:23 +08:00
92fa8da2f6 Update lib.sh 2023-06-13 17:19:23 +08:00
7c96ddd63e Update lib.sh 2023-06-13 17:14:50 +08:00
c4e7872179 Update lib.sh 2023-06-13 17:14:31 +08:00
d399cb2bb4 Update install.sh 2023-06-13 16:38:04 +08:00
985cbc7eca Update install.sh 2023-06-13 16:36:48 +08:00
27ed21a17d update 2023-06-10 15:09:31 +08:00
972165ba1a Update lib.sh 2023-05-30 17:53:16 +08:00
e76eb4d0e8 Update client_check_member.py 2023-05-29 18:40:12 +08:00
fd05c40dbb up 2023-05-29 18:34:37 +08:00
a1a7fa5c82 网站备注优化 2023-05-28 19:59:31 +08:00
531de1407f Update push_notice_msg.py 2023-05-28 19:00:42 +08:00
ca455f13e8 ad 2023-05-28 14:50:53 +08:00
ab5342b01f Update docker.js 2023-05-27 00:18:44 +08:00
a5a57c5718 update 2023-05-27 00:18:39 +08:00
27999b21e6 Update config.json 2023-05-24 23:04:59 +08:00
d2c6caeef2 Update client_temp.py 2023-05-23 20:46:32 +08:00
de30d8a41f Create client_temp.py 2023-05-23 20:42:08 +08:00
d3abc8e7b2 up 2023-05-18 17:10:50 +08:00
b7aad65eb5 Update site_api.py 2023-05-17 13:36:35 +08:00
240b1dec27 修正网站搜索功能 2023-05-16 20:34:12 +08:00
4756e0f68b Update push_notice_msg.py 2023-05-15 19:30:38 +08:00
59f62b948a Update push_notice_msg.py 2023-05-15 19:30:00 +08:00
0ab0741031 up 2023-05-15 19:23:32 +08:00
2fd2f6e844 AD 2023-05-15 19:20:58 +08:00
e534c6177a update 2023-05-15 19:14:43 +08:00
897c6322fc Update install.sh 2023-05-14 23:57:41 +08:00
201e93f946 Update requirements.txt 2023-05-14 19:09:02 +08:00
Mr Chen
a78fd957ec Merge pull request #411 from midoks/dev
更新pip库2
2023-05-14 19:05:30 +08:00
3ce037b0a1 Update requirements.txt 2023-05-14 19:03:39 +08:00
f3176340f8 Update requirements.txt 2023-05-14 19:02:58 +08:00
7bfe096e8d Update requirements.txt 2023-05-14 19:00:45 +08:00
Mr Chen
066428fca8 Merge pull request #410 from midoks/dev
更新pip版本
2023-05-14 18:46:51 +08:00
a1313846c8 Update requirements.txt 2023-05-14 18:43:47 +08:00
0433123abd Update requirements.txt 2023-05-14 18:36:50 +08:00
72e99844dd Update requirements.txt 2023-05-14 18:31:19 +08:00
Mr Chen
3a7882e7fa Merge pull request #409 from midoks/dev
0.14.5
2023-05-14 13:12:27 +08:00
bec2a9a12c 0.14.5
* 软件管理-搜索功能。
* 文件-右键功能优化。
2023-05-14 13:10:17 +08:00
8f02363782 Update files.html 2023-05-12 11:22:38 +08:00
939c847f3e Update plugins_api.py 2023-05-10 18:23:06 +08:00
a623039db7 完成搜索功能 2023-05-10 18:20:48 +08:00
b7f49a1839 Update soft.html 2023-05-10 17:59:17 +08:00
f1f60870f6 up 2023-05-09 12:46:09 +08:00
3b04739fd4 up 2023-05-09 12:45:25 +08:00
fdf1e0b0be up 2023-05-09 12:39:44 +08:00
d3385f526f Update client_check_member.py 2023-05-09 11:37:39 +08:00
20f9095b93 up 2023-05-09 09:17:54 +08:00
757cf483a2 Update client_ad.py 2023-05-08 12:07:36 +08:00
1712cfd024 Update client_ad.py 2023-05-08 12:03:16 +08:00
2b524cbe75 Update client_ad.py 2023-05-08 11:57:01 +08:00
607d384000 Update client_ad.py 2023-05-08 11:29:09 +08:00
14cdc7b82e Update client_ad.py 2023-05-08 11:15:27 +08:00
c3219bcba2 Update client_check_member.py 2023-05-07 23:15:06 +08:00
Mr Chen
a12c4dd78e Merge pull request #407 from midoks/dev
0.14.4
2023-05-06 14:54:52 +08:00
39c6f19592 Update README.md 2023-05-06 14:54:34 +08:00
f18c05a097 0.14.4 2023-05-06 14:53:16 +08:00
80f296ea19 redat 系列 php74之后都需要安装oniguruma
debian系统,不需要
2023-05-06 14:42:54 +08:00
b3e9283a58 Update rhel.sh 2023-05-06 14:37:25 +08:00
2e140a3ae1 Update index.py 2023-05-06 14:18:46 +08:00
4d733c8886 Update index.py 2023-05-06 14:16:50 +08:00
62a7320baf Update rhel.sh 2023-05-06 13:59:02 +08:00
3dc7c2f5c1 Update rhel.sh 2023-05-06 13:52:55 +08:00
fe62bbee06 Update rhel.sh 2023-05-06 13:24:47 +08:00
f7c0cd82a0 Update rhel.sh 2023-05-06 13:22:49 +08:00
13a2014558 Update rhel.sh 2023-05-06 12:49:25 +08:00
5981f94376 Update rhel.sh 2023-05-06 12:30:51 +08:00
005e0f1513 Update rhel.sh 2023-05-06 12:27:54 +08:00
63a0f0fbdc Update rhel.sh 2023-05-05 23:32:07 +08:00
edc0be11a1 Update rhel.sh 2023-05-05 23:22:22 +08:00
908b6e67c6 Update rhel.sh 2023-05-05 23:21:57 +08:00
dfe46332db up 2023-05-05 22:49:39 +08:00
fcdf2e18b2 Update config_api.py 2023-05-05 22:19:33 +08:00
3c8f9bcf96 Update config.js 2023-05-05 22:19:26 +08:00
ebadd6d80d 端口修改后,跳转优化 2023-05-05 22:16:53 +08:00
Mr Chen
6062699074 Merge pull request #406 from midoks/dev
0.14.3
2023-05-05 20:52:04 +08:00
df9d57ba70 Update README.md 2023-05-05 20:50:20 +08:00
ffca953539 up 2023-05-05 20:49:45 +08:00
bd4946124f Update install.sh 2023-05-05 18:21:10 +08:00
8e18c63cee up 2023-05-05 17:52:13 +08:00
d201ca2574 Update install_dev.sh 2023-05-05 17:51:09 +08:00
b644f91090 安装时curl库软连接修复 2023-05-05 16:59:47 +08:00
931f51cf59 Update client_ad.py 2023-05-05 14:12:14 +08:00
0909a11fd9 Update client_ad.py 2023-05-05 14:03:45 +08:00
2ba2833699 Update client_ad.py 2023-05-05 13:59:14 +08:00
20389263fb Update client_ad.py 2023-05-04 20:41:10 +08:00
86141ccf3a Update my5.7.cnf 2023-05-04 16:42:59 +08:00
b2fdf84ca0 Update index.py 2023-05-04 16:39:46 +08:00
8fbc456e1a Update my5.7.cnf 2023-05-04 13:19:21 +08:00
4e43382496 Update client_ad.py 2023-05-03 18:29:37 +08:00
0326d4f112 Update client_ad.py 2023-05-03 18:05:33 +08:00
a87c13c5e0 Update client_ad.py 2023-05-03 13:02:21 +08:00
5f3720c855 Update client_ad.py 2023-05-03 12:50:41 +08:00
f548e020c4 up 2023-05-03 12:33:56 +08:00
7f21781c0b Update tgclient.py 2023-05-03 12:33:01 +08:00
680b0f09f2 Update client_ad.py 2023-05-03 12:22:31 +08:00
482943a63c Update client_ad.py 2023-05-03 10:53:49 +08:00
2871aee18e Create client_ad.py 2023-05-03 10:53:18 +08:00
ff46d9b36e up 2023-05-02 21:39:18 +08:00
fd5fcba543 up 2023-05-02 13:25:07 +08:00
Mr Chen
fe04e02e88 Merge pull request #405 from midoks/dev
0.14.2
2023-05-02 12:11:48 +08:00
93554332a7 Update README.md 2023-05-02 12:10:37 +08:00
b541c7e1b7 Update config_api.py 2023-05-02 12:09:02 +08:00
1dec1a286a Update docker.js 2023-05-02 12:07:51 +08:00
b17510104d up 2023-05-02 11:55:32 +08:00
c2c8ea0ce6 Update install.sh 2023-05-02 11:52:56 +08:00
acbdb013ae Update install.sh 2023-05-02 11:42:16 +08:00
b025f21765 Update index.py 2023-05-02 11:36:28 +08:00
1afc8a69e5 Update index.py 2023-05-02 11:35:21 +08:00
743fc9e8d3 Update index.py 2023-05-02 11:35:06 +08:00
8d692d2b3b Update install.sh 2023-05-02 11:34:00 +08:00
a0b362e691 Update index.py 2023-05-02 11:31:25 +08:00
98e1c2ae8f Update install.sh 2023-05-02 11:26:27 +08:00
c0e5915285 Update index.html 2023-05-02 11:23:46 +08:00
667a0fd0fd Update install.sh 2023-05-02 11:19:03 +08:00
8ed5f283b0 Update client_check_member.py 2023-05-01 17:30:03 +08:00
643c370d30 up 2023-05-01 17:26:02 +08:00
4601303065 up 2023-05-01 16:05:54 +08:00
14940d6734 Delete mdioks.session 2023-05-01 15:09:14 +08:00
fdc2b0f5c4 Update client_holding.py 2023-05-01 15:08:40 +08:00
cf0b233f63 Update client_check_member.py 2023-05-01 14:51:54 +08:00
b3a7ef2206 Create client_holding.py 2023-05-01 14:49:50 +08:00
9a3ca3e833 Update index.html 2023-04-30 10:17:28 +08:00
9afff8df3f Update index.py 2023-04-30 01:13:00 +08:00
ccd0b06223 Update tgclient.py 2023-04-30 01:04:16 +08:00
7b495fe9bf Update tgclient.py 2023-04-29 16:24:19 +08:00
2c3fb75e8f Update tgclient.js 2023-04-29 16:11:09 +08:00
53b606602f up 2023-04-29 16:10:30 +08:00
ecef0cf994 up 2023-04-29 16:01:10 +08:00
3691d41b23 Update client_change_username.py 2023-04-28 21:47:13 +08:00
1f66457a3e Update client_change_username.py 2023-04-28 17:25:38 +08:00
8e05beccfd Update tgclient.py 2023-04-28 17:22:56 +08:00
35424eae1f up 2023-04-28 17:21:13 +08:00
ed6df6d527 up 2023-04-28 17:03:41 +08:00
4366c4afde Update tgclient.py 2023-04-24 22:05:34 +08:00
4bb059f62f Update info.json 2023-04-24 21:23:44 +08:00
aa8f618d9c Update tgclient.py 2023-04-24 21:15:47 +08:00
dfd753e4c1 up 2023-04-24 21:07:25 +08:00
e38daf3c89 Update tgclient.py 2023-04-24 20:51:54 +08:00
535838fc5e Update tgclient.py 2023-04-24 20:44:28 +08:00
797853bd61 Update tgclient.py 2023-04-24 20:36:49 +08:00
0de3aff045 up 2023-04-24 20:32:41 +08:00
0b7b48ab23 up 2023-04-24 20:31:31 +08:00
5ff0a0bfbc Update index.py 2023-04-21 21:03:30 +08:00
9131f44d67 Update install.sh 2023-04-21 13:02:42 +08:00
6b86bb9d2b Update docker.js 2023-04-21 13:00:05 +08:00
dc06d6beda Update install.sh 2023-04-21 12:58:50 +08:00
2c8ea2498e Update install.sh 2023-04-21 12:55:38 +08:00
6b01173b61 Update push_notice_msg.py 2023-04-20 12:41:56 +08:00
883c554850 up 2023-04-20 12:19:33 +08:00
d267da351c Update push_ad.py 2023-04-16 23:48:24 +08:00
13a39f4d6a up 2023-04-16 20:50:30 +08:00
Mr Chen
cff1d5ee89 Merge pull request #403 from midoks/dev
0.14.1
2023-04-16 20:42:39 +08:00
bf5274c313 0.14.1
* 安装优化。
* 加入OP负载均衡插件。
* 网站防篡改程序(测试中)。
2023-04-16 20:41:39 +08:00
5623e3efac Update requirements.txt 2023-04-16 20:38:03 +08:00
b93bb6c64c Update requirements.txt 2023-04-16 20:37:24 +08:00
c9962f169e Update requirements.txt 2023-04-16 20:36:01 +08:00
080f343ee2 Update push_ad.py 2023-04-15 10:57:19 +08:00
5aeaf13f16 负载均衡插件 2023-04-13 15:42:01 +08:00
528094cfa7 网站防篡改程序 2023-04-13 15:33:15 +08:00
ed3e3336b2 Update push_notice_msg.py 2023-04-13 15:28:38 +08:00
Mr Chen
a75a49c2ae Merge pull request #402 from midoks/dev
0.14.0
2023-04-13 15:21:19 +08:00
1204e72f41 0.14.0
* 加入系统加固插件。
2023-04-13 15:20:15 +08:00
13ca5544a5 Update system_safe.tpl 2023-04-13 15:14:32 +08:00
e53fe26d52 Update system_safe.tpl 2023-04-13 15:09:20 +08:00
13772399f6 Update system_safe.py 2023-04-13 15:05:06 +08:00
98f11e2662 Update plugins_api.py 2023-04-13 14:49:46 +08:00
f0b0302f75 Update install.sh 2023-04-13 14:42:07 +08:00
5b9b466cb9 系统加固放出 2023-04-13 14:39:18 +08:00
5588a11ea5 Update cert_request.py 2023-04-10 22:35:09 +08:00
da05a4ef19 up 2023-04-10 22:34:12 +08:00
34cf899529 Update mw.py 2023-04-04 12:43:09 +08:00
0d7d67b012 up 2023-04-04 12:42:47 +08:00
5b778bfc0d Update vip_api.py 2023-04-04 12:20:28 +08:00
6ce414cecf up 2023-04-03 22:39:07 +08:00
c8160b63e7 up 2023-04-03 22:30:08 +08:00
68d957fd6e Update README.md 2023-04-03 19:34:05 +08:00
f09c438500 Update config.html 2023-04-03 17:46:18 +08:00
Mr Chen
9bc9944a3e Merge pull request #401 from midoks/dev
0.13.6
2023-04-03 17:43:58 +08:00
9e4c2b13d5 Update README.md 2023-04-03 17:43:05 +08:00
cd7143047f 0.13.6
1.修复初始化安装,缺少解压命令。
2.加入aes加密/解密方法
2023-04-03 17:41:48 +08:00
d608ac4d94 Update install.sh 2023-04-03 16:48:53 +08:00
9fedf9d10d Update push_notice_msg.py 2023-04-01 10:37:33 +08:00
9936191da2 up 2023-04-01 10:35:54 +08:00
538eba3acf up 2023-03-31 22:37:40 +08:00
e39ee9a6f7 VIP用户管理 2023-03-30 21:57:33 +08:00
Mr Chen
e1820ad5b3 Merge pull request #400 from midoks/dev
0.13.5
2023-03-30 17:31:54 +08:00
22133f1a6c 0.13.5
### 版本更新 0.13.5

* 添加邮件通知功能。
* 修复初始安装脚本。
2023-03-30 17:30:15 +08:00
0041cbdff3 添加邮件通知功能 2023-03-30 17:18:40 +08:00
889da3c769 Update install.sh 2023-03-30 11:59:55 +08:00
d086eb9c61 Update install.sh 2023-03-30 11:56:48 +08:00
832fa9cd1a Update install_dev.sh 2023-03-30 11:54:40 +08:00
8c19fb9629 Update config_api.py 2023-03-30 11:22:36 +08:00
a2e4dd6753 Update push_notice_msg.py 2023-03-30 11:22:19 +08:00
22ba7dda55 Update install.sh 2023-03-29 16:35:09 +08:00
2ffa36eecb up 2023-03-29 16:32:46 +08:00
Mr Chen
fe5843b35d Merge pull request #398 from midoks/dev
修复python pip源安装
2023-03-29 16:27:46 +08:00
e95acbe947 Update lib.sh 2023-03-29 16:08:55 +08:00
aed8319dd3 Update push_ad.py 2023-03-29 14:08:06 +08:00
babe1b885e Update push_notice_msg.py 2023-03-29 13:17:38 +08:00
0612f52402 Update push_notice_msg.py 2023-03-29 13:03:52 +08:00
db67cea737 AD 2023-03-29 13:01:12 +08:00
52cf675843 Update install_dev.sh 2023-03-29 08:49:26 +08:00
Mr Chen
3421bf6ab5 Merge pull request #397 from midoks/dev
0.13.4
2023-03-28 23:54:51 +08:00
2f39bd600b Update config_api.py
### 版本更新 0.13.4

无重大更新

* 国内安装不在依赖gitee。
* tgbot优化。
2023-03-28 23:53:14 +08:00
acd5ec69e8 Update tgbot.py 2023-03-28 23:49:59 +08:00
09878728af Update push_ad.py 2023-03-28 20:25:09 +08:00
af82e9f129 Update push_notice_msg.py 2023-03-28 20:23:08 +08:00
c74630e738 Update push_notice_msg.py 2023-03-28 20:19:49 +08:00
e4e0697b4b Update push_notice_msg.py 2023-03-28 20:18:52 +08:00
11b5ac658b Update mw.tpl 2023-03-28 18:00:50 +08:00
1306731164 up 2023-03-28 17:47:59 +08:00
bb6c933aee Update README.md 2023-03-28 17:41:50 +08:00
d6a93ef1e6 Update info.json 2023-03-28 17:18:59 +08:00
6610da402a Update info.json 2023-03-28 17:18:47 +08:00
3ace9cf51e Update install.sh 2023-03-28 16:54:21 +08:00
49c7ec6073 Update tgbot.py 2023-03-28 16:31:46 +08:00
8cf526667e up 2023-03-25 22:05:19 +08:00
6c42876411 Update receive_faq.py 2023-03-25 21:58:08 +08:00
79471e3806 Update receive_faq.py 2023-03-25 21:56:50 +08:00
cad06425fc Update lib.sh 2023-03-23 15:24:49 +08:00
6f1e11e474 Update lib.sh 2023-03-23 15:21:22 +08:00
59d13e50ce Update rhel.sh 2023-03-22 22:26:32 +08:00
5da0746240 Update push_bbs_ntid.py 2023-03-22 18:00:32 +08:00
192ea8b029 Update push_bbs_ntid.py 2023-03-22 17:34:18 +08:00
bfc20b3e42 Update push_tmp_msg.py 2023-03-22 17:01:50 +08:00
56bee5c752 Update push_tmp_msg.py 2023-03-22 16:41:26 +08:00
312df5de1f Create push_bbs_ntid.py 2023-03-22 16:41:23 +08:00
4d3640286c Update README.md 2023-03-20 17:49:48 +08:00
20930806b6 Update install.sh 2023-03-20 12:19:35 +08:00
71360b61da Update install.sh 2023-03-20 12:04:54 +08:00
411645c9e2 Update install.sh 2023-03-20 12:01:46 +08:00
3de4e1bfff up 2023-03-19 00:21:36 +08:00
34285f6051 Update push_tmp_msg.py 2023-03-19 00:20:23 +08:00
84f0cda89b up 2023-03-18 18:32:30 +08:00
04012085ce Update mdw.jpg 2023-03-17 19:18:27 +08:00
Mr Chen
265e17beac Merge pull request #393 from midoks/dev
0.13.3
2023-03-16 13:00:56 +08:00
Mr Chen
8849001384 Merge pull request #392 from midoks/dev
升级图表echarts
2023-03-09 02:49:57 +08:00
Mr Chen
d6c6ae5561 Merge pull request #391 from midoks/dev
0.13.2
2023-03-09 01:49:10 +08:00
Mr Chen
704b256408 Merge pull request #390 from midoks/dev
网站统计优化
2023-03-05 18:36:57 +08:00
Mr Chen
d38e9f7ad0 Merge pull request #389 from midoks/dev
OP防火墙优化
2023-03-05 18:07:54 +08:00
Mr Chen
04e43e051e Merge pull request #388 from midoks/dev
局部优化
2023-03-02 16:57:17 +08:00
Mr Chen
9d9b39dfe2 Merge pull request #387 from midoks/dev
0.13.1
2023-02-28 19:11:06 +08:00
Mr Chen
196fbbdd7d Merge pull request #382 from midoks/dev
0.13.0
2023-02-24 05:59:59 +08:00
Mr Chen
22d94ce67c Merge pull request #371 from midoks/dev
安装脚本优化3
2023-02-14 22:24:04 +08:00
Mr Chen
fc5970c65d Merge pull request #370 from midoks/dev
安装脚本优化2
2023-02-14 22:09:05 +08:00
Mr Chen
ea03bb056a Merge pull request #369 from midoks/dev
安装脚本优化
2023-02-14 21:59:22 +08:00
Mr Chen
628175a8ee Merge pull request #368 from midoks/dev
0.12.3
2023-02-14 20:13:04 +08:00
1513 changed files with 149102 additions and 53394 deletions

View File

@@ -34,5 +34,5 @@ jobs:
cd /www/server/mdserver-web/plugins/mysql && sudo bash install.sh install 5.5
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
cd web && gunicorn -c setting.py app:app
python3 panel_task.py &

View File

@@ -34,5 +34,5 @@ jobs:
cd /www/server/mdserver-web/plugins/mysql && sudo bash install.sh install 5.6
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
cd web && gunicorn -c setting.py app:app
python3 panel_task.py &

View File

@@ -34,5 +34,5 @@ jobs:
cd /www/server/mdserver-web/plugins/mysql && sudo bash install.sh install 5.7
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
cd web && gunicorn -c setting.py app:app
python3 panel_task.py &

View File

@@ -34,5 +34,5 @@ jobs:
cd /www/server/mdserver-web/plugins/mysql && sudo bash install.sh install 8.0
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
cd web && gunicorn -c setting.py app:app
python3 panel_task.py &

View File

@@ -31,8 +31,8 @@ jobs:
sudo bash scripts/install_dev.sh
- name: Install OpenResty
run: |
cd /www/server/mdserver-web/plugins/openresty && sudo bash install.sh install 1.21.4.1
cd /www/server/mdserver-web/plugins/openresty && sudo bash install.sh install 1.27.1
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
source /www/server/mdserver-web/bin/activate && cd web && gunicorn -c setting.py app:app
cd /www/server/mdserver-web && python3 panel_task.py &

View File

@@ -64,5 +64,5 @@ jobs:
cd /www/server/mdserver-web/plugins/php && sudo bash install.sh install 81
- name: Start DEBUG
run: |
gunicorn -c setting.py app:app
python3 task.py &
source /www/server/mdserver-web/bin/activate && cd web && gunicorn -c setting.py app:app
cd /www/server/mdserver-web && python3 panel_task.py &

16
.github/workflows/sync2gitee.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: sync2gitee
on: [push]
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
- name: Mirror the Github organization repos to Gitee.
uses: Yikun/hub-mirror-action@master
with:
src: 'github/midoks'
dst: 'gitee/midoks'
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token: ${{ secrets.GITEE_TOKEN }}
static_list: "mdserver-web"
force_update: true

73
.gitignore vendored
View File

@@ -87,6 +87,7 @@ venv/
ENV/
env.bak/
venv.bak/
lib/python*
# Spyder project settings
.spyderproject
@@ -98,6 +99,12 @@ venv.bak/
# mkdocs documentation
/site
bin
pyvenv.cfg
include
share
pip-selfcheck.json
# mypy
.mypy_cache/
@@ -108,9 +115,29 @@ tmp/*
*.swp
*.pem
*.zip
logs/*
debug.out
mdioks.session-journal
*.session
temp
logs/panel.pid
logs/panel.log
logs/panel_task.log
logs/panel_exec.log
logs/panel_task.lock
ssl/local
ssl/nginx
ssl/choose.pl
scripts/init.d/mw
scripts/mdserver-web
data/api_login.txt
data/sessions
data/*.db
data/control.conf
data/iplist.txt
data/json/index.json
data/json/config.json
@@ -123,27 +150,11 @@ data/default.pl
data/backup.pl
data/debug.pl
data/default_site.pl
ssl/input.pl
lib/python*
bin
pyvenv.cfg
include
share
pip-selfcheck.json
scripts/init.d/mw
scripts/mdserver-web
data/api_login.txt
data/sessions
data/ssl.pl
data/port.pl
data/ipv6.pl
data/restart.pl
data/ssl.pl
data/edate.pl
data/osname.pl
data/only_netio_counters.pl
@@ -155,19 +166,16 @@ data/notify.json
data/api.json
data/bind_domain.pl
data/unauthorized_status.pl
data/auth_secret.pl
data/panelSpeed.pl
plugins/vip_*
plugins/own_*
plugins/my_*
plugins/op_auth
plugins/l2tp
plugins/openlitespeed
plugins/system_safe
plugins/tamper_proof
plugins/tamper_proof_*
plugins/cryptocurrency_trade
plugins/op_load_balance
plugins/gdrive
plugins/mtproxy
plugins/zimg
plugins/bk_demo
plugins/mail
@@ -175,8 +183,15 @@ plugins/fastdfs
plugins/v2ray
plugins/frp
plugins/file_search
debug.out
plugins/proxysql
plugins/tidb
plugins/goedge-admin
plugins/goedge-node
plugins/goedge-happy
/logs
/data
/plugins/flexcdn
/plugins/tools
/plugins/choose-linux-python
*.md5

104
README.md
View File

@@ -10,7 +10,7 @@
简单的Linux面板,感谢BT.CN写出如此好的web管理软件。我一看到,就知道这是我一直想要的页面化管理方式。
复制了后台管理界面,按照自己想要的方式写了一版。
![EulerOS](https://img.shields.io/badge/LINUX-EulerOS-blue?style=for-the-badge&logo=EulerOS)
![Debian](https://img.shields.io/badge/LINUX-Debian-blue?style=for-the-badge&logo=Debian)
![Ubuntu](https://img.shields.io/badge/LINUX-Ubuntu-blue?style=for-the-badge&logo=Ubuntu)
![Fedora](https://img.shields.io/badge/LINUX-Fedora-blue?style=for-the-badge&logo=Fedora)
@@ -18,18 +18,17 @@
[![Wiki](https://img.shields.io/badge/MW-Wiki-red?style=for-the-badge&logo=wiki)](https://github.com/midoks/mdserver-web/wiki)
[![](https://data.jsdelivr.com/v1/package/gh/midoks/mdserver-web/badge?style=for-the-badge)](https://www.jsdelivr.com/package/gh/midoks/mdserver-web)
[![jsdelivr](https://data.jsdelivr.com/v1/package/gh/midoks/mdserver-web/badge)](https://www.jsdelivr.com/package/gh/midoks/mdserver-web)
* SSH终端工具
* 面板收藏功能
* 网站子目录绑定
* 网站备份功能
* 插件方式管理
基本上可以使用,后续会继续优化!欢迎提供意见!
- 吹水组 - https://t.me/mdserver_web
- 交流论坛 - https://bbs.midoks.me
- 交流论坛 - https://bbs.midoks.icu
```
如果出现问题,最好私给我面板信息。不要让我猜。如果不提供,不要提出问题,自行解决。 — 座右铭
@@ -37,16 +36,21 @@ Talk is cheap, show me the code. -- linus
```
- [兼容性测试报告](/compatibility.md)
- [常用命令说明](/cmd.md)
- [常用命令说明](/cmd.md) [ mw default ] [ mw update_dev ]
### 特别赞助
- [虚位以待](https://bbs.midoks.icu)
### 主要插件介绍
* OpenResty - 轻量级,占有内存少,并发能力强。
* PHP[53-82] - PHP是世界上最好的编程语言。
* PHP[53-85] - PHP是世界上最好的编程语言。
* MySQL - 一种关系数据库管理系统。
* MariaDB - 是MySQL的一个重要分支。
* MySQL[APT/YUM] - 一种关系数据库管理系统。
* MySQL[community] - 一种关系数据库管理系统。
* MongoDB - 一种非关系NOSQL数据库管理系统。
* PostgreSQL - 功能强大的开源数据库。
* phpMyAdmin - 著名Web端MySQL管理工具。
* Memcached - 一个高性能的分布式内存对象缓存系统。
* Redis - 一个高性能的KV数据库。
@@ -66,63 +70,67 @@ Talk is cheap, show me the code. -- linus
- 插件地址 - https://github.com/mw-plugin
- 开发文档 - https://github.com/midoks/mdserver-web/wiki/插件开发
## 其他插件
- OP鉴权 - https://github.com/mw-plugin/op_auth
# Note
```
phpMyAdmin[4.4.15]支持MySQL[5.5-5.7]
phpMyAdmin[5.2.0]支持MySQL[8.0]
phpMyAdmin[5.2.1]支持MySQL[8.0+]
PHP[53-72]支持phpMyAdmin[4.4.15]
PHP[72-82]支持phpMyAdmin[5.2.0]
PHP[72-84]支持phpMyAdmin[5.2.1]
```
# 特别赞助
# 郑重声明
不卖、不会监控(统计使用除外)、更不会注入病毒,大家使用方便(望大家不吝捐赠)。
- https://www.youtube.com/watch?v=2taa5K-Jmmw
- [找资源 - 阿里云盘资源搜索引擎](https://zhaoziyuan.la/)
# AD - VPS推荐 - 🙏
- [ZZZ评测](https://www.zzzvps.com/)
| 服务商 | LOGO | 推广地址 | 优惠码 |
| ------------- |----------|-----------|-------|
| digitalvirt |[![digitalvirt](https://digitalvirt.com/templates/BlueWhite/img/logo-dark.svg)](https://digitalvirt.com/aff.php?aff=154) | https://digitalvirt.com/aff.php?aff=154 | mdserver-web |
# Docker
- 由[DDSRem](https://github.com/DDSRem)开发维护。
- https://hub.docker.com/r/ddsderek/mw
- 由[DDS-Derek](https://github.com/DDS-Derek)开发维护。
- https://github.com/DDS-Derek/mdserver-web-Docker
```
docker run -itd --name mw-server --privileged=true -p 7200:7200 -p 80:80 -p 443:443 -p 888:888 ddsderek/mw-server:latest
```
### 版本更新 0.13.3
### 版本更新 0.18.2
* tgbot插件[增加扩展功能]。
* 面板设置ssl功能优化。
* 网站统计-计划任务归档优化。
- 备份目录功能支持排除目录。
- 其他细节优化。
### JSDelivr安装地址
- 初始安装
```
curl -fsSL https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/install.sh | bash
bash <(curl --insecure -fsSL https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/install.sh)
```
- 直接更新
```
curl -fsSL https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/update.sh | bash
bash <(curl --insecure -fsSL https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/update.sh)
```
- 卸载脚本
```
wget -O uninstall.sh https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/uninstall.sh && bash uninstall.sh
wget --no-check-certificate -O uninstall.sh https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scripts/uninstall.sh && bash uninstall.sh
```
### 备用地址
@@ -130,20 +138,21 @@ wget -O uninstall.sh https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/scri
- 初始安装
```
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/master/scripts/install.sh | bash
curl --insecure -fsSL https://gitee.com/midoks/mdserver-web/raw/master/scripts/install.sh | bash
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/install.sh)
bash <(curl --insecure -fsSL https://code.midoks.icu/midoks/mdserver-web/raw/branch/master/scripts/install.sh)
```
- 直接更新
```
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/master/scripts/update.sh | bash
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/master/scripts/update.sh)
```
- 卸载脚本
```
wget -O uninstall.sh https://raw.githubusercontent.com/midoks/mdserver-web/master/scripts/uninstall.sh && bash uninstall.sh
wget --no-check-certificate -O uninstall.sh https://raw.githubusercontent.com/midoks/mdserver-web/master/scripts/uninstall.sh && bash uninstall.sh
```
@@ -152,22 +161,47 @@ wget -O uninstall.sh https://raw.githubusercontent.com/midoks/mdserver-web/maste
- 需已经安装mdserver-web
```
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/quick/app.sh | bash
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/quick/app.sh)
```
### DEV使用
```
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/install_dev.sh | bash
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/update_dev.sh | bash
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/install.sh)
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/update.sh)
wget -O uninstall.sh https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/uninstall.sh && bash uninstall.sh
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/install_dev.sh)
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/update_dev.sh)
curl -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/quick/debug.sh | bash
wget --no-check-certificate -O install.sh https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/install.sh && bash install.sh
curl -fsSL https://gitee.com/midoks/mdserver-web/raw/dev/scripts/install_dev.sh | bash
curl -fsSL https://gitee.com/midoks/mdserver-web/raw/dev/scripts/update_dev.sh | bash
wget --no-check-certificate -O uninstall.sh https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/uninstall.sh && bash uninstall.sh
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/quick/debug.sh)
bash <(curl --insecure -fsSL https://code.midoks.icu/midoks/mdserver-web/raw/branch/dev/scripts/install.sh)
bash <(curl --insecure -fsSL https://code.midoks.icu/midoks/mdserver-web/raw/branch/dev/scripts/update.sh)
bash <(curl --insecure -fsSL https://code.midoks.icu/midoks/mdserver-web/raw/branch/dev/scripts/install_dev.sh)
bash <(curl --insecure -fsSL https://code.midoks.icu/midoks/mdserver-web/raw/branch/dev/scripts/update_dev.sh)
```
### 旧版安装/更新
```
curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/old/install.sh | bash
curl --insecure -fsSL https://raw.githubusercontent.com/midoks/mdserver-web/dev/scripts/old/update.sh | bash
```
### 偶然问题
- 在安装/更新时,突然出现python插件pip,psutil,可尝试如下解决方案
```
cd /www/server/mdserver-web rm -rf lib
cd /www/server/mdserver-web && rm -rf lib64
cd /www/server/mdserver-web && rm -rf bin
cd /www/server/mdserver-web && rm -rf include
mw update/mw update_dev/mw dev
```
### 捐赠地址 USDT(TRC20)
@@ -177,9 +211,9 @@ TVbNgrpeGBGZVm5gTLa21ADP7RpnPFhjya
日行一善,以后必定大富大贵
### 微信赞助
### 支付宝赞助
[![截图](https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/route/static/img/weixin_zz.jpg)](https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/route/static/img/weixin_zz.jpg)
[![截图](https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/route/static/img/alipay_zz.png)](https://cdn.jsdelivr.net/gh/midoks/mdserver-web@latest/route/static/img/alipay_zz.png)
### 无图不真相

51
app.py
View File

@@ -1,51 +0,0 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 入口文件
# ---------------------------------------------------------------------------------
# pip install profiler_online
# 性能测试
# from profiler_online import run_profiler
# run_profiler()
import sys
import io
import os
sys.dont_write_bytecode = True
from route import app, socketio
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from gevent import monkey
monkey.patch_all()
try:
if __name__ == "__main__":
PORT = 7200
if os.path.exists('data/port.pl'):
f = open('data/port.pl')
PORT = int(f.read())
f.close()
# HOST = '0.0.0.0'
# app.run(host=HOST, port=PORT)
http_server = WSGIServer(
(HOST, PORT), app, handler_class=WebSocketHandler)
http_server.serve_forever()
socketio.run(app, host=HOST, port=PORT)
except Exception as ex:
print(ex)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,144 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 公共操作
# ---------------------------------------------------------------------------------
import os
import sys
import time
import string
import json
import hashlib
import shlex
import datetime
import subprocess
import re
import hashlib
from random import Random
import mw
import db
from flask import redirect
def init():
initDB()
initUserInfo()
initInitD()
initInitTask()
def local():
result = checkClose()
if result:
return result
# 检查面板是否关闭
def checkClose():
if os.path.exists('data/close.pl'):
return redirect('/close')
def initDB():
try:
sql = db.Sql().dbfile('default')
csql = mw.readFile('data/sql/default.sql')
csql_list = csql.split(';')
for index in range(len(csql_list)):
sql.execute(csql_list[index], ())
except Exception as ex:
print(str(ex))
def doContentReplace(src, dst):
content = mw.readFile(src)
content = content.replace("{$SERVER_PATH}", mw.getRunDir())
mw.writeFile(dst, content)
def initInitD():
# systemctl
# sysCfgDir = mw.systemdCfgDir()
# if os.path.exists(sysCfgDir) and mw.getOsName() == 'centos' and mw.getOsID() == '9':
# systemd_mw = sysCfgDir + '/mw.service'
# systemd_mw_task = sysCfgDir + '/mw-task.service'
# systemd_mw_tpl = mw.getRunDir() + '/scripts/init.d/mw.service.tpl'
# systemd_mw_task_tpl = mw.getRunDir() + '/scripts/init.d/mw-task.service.tpl'
# if os.path.exists(systemd_mw):
# os.remove(systemd_mw)
# if os.path.exists(systemd_mw_task):
# os.remove(systemd_mw_task)
# doContentReplace(systemd_mw_tpl, systemd_mw)
# doContentReplace(systemd_mw_task_tpl, systemd_mw_task)
# mw.execShell('systemctl enable mw')
# mw.execShell('systemctl enable mw-task')
# mw.execShell('systemctl daemon-reload')
script = mw.getRunDir() + '/scripts/init.d/mw.tpl'
script_bin = mw.getRunDir() + '/scripts/init.d/mw'
doContentReplace(script, script_bin)
mw.execShell('chmod +x ' + script_bin)
# 在linux系统中,确保/etc/init.d存在
if not mw.isAppleSystem() and not os.path.exists("/etc/rc.d/init.d"):
mw.execShell('mkdir -p /etc/rc.d/init.d')
if not mw.isAppleSystem() and not os.path.exists("/etc/init.d"):
mw.execShell('mkdir -p /etc/init.d')
# initd
if os.path.exists('/etc/rc.d/init.d'):
initd_bin = '/etc/rc.d/init.d/mw'
if not os.path.exists(initd_bin):
import shutil
shutil.copyfile(script_bin, initd_bin)
mw.execShell('chmod +x ' + initd_bin)
# 加入自启动
mw.execShell('which chkconfig && chkconfig --add mw')
if os.path.exists('/etc/init.d'):
initd_bin = '/etc/init.d/mw'
if not os.path.exists(initd_bin):
import shutil
shutil.copyfile(script_bin, initd_bin)
mw.execShell('chmod +x ' + initd_bin)
# 加入自启动
mw.execShell('which update-rc.d && update-rc.d -f mw defaults')
# 获取系统IPV4
mw.setHostAddr(mw.getLocalIp())
def initInitTask():
# 创建证书同步命令
import cert_api
api = cert_api.cert_api()
api.createCertCron()
def initUserInfo():
data = mw.M('users').where('id=?', (1,)).getField('password')
if data == '21232f297a57a5a743894a0e4a801fc3':
pwd = mw.getRandomString(8).lower()
file_pw = mw.getRunDir() + '/data/default.pl'
mw.writeFile(file_pw, pwd)
mw.M('users').where('id=?', (1,)).setField(
'password', mw.md5(pwd))

File diff suppressed because it is too large Load Diff

View File

@@ -1,664 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 计划任务操作
# ---------------------------------------------------------------------------------
import psutil
import time
import os
import sys
import mw
import re
import json
import pwd
from flask import request
class crontab_api:
field = 'id,name,type,where1,where_hour,where_minute,echo,addtime,status,save,backup_to,stype,sname,sbody,urladdress'
def __init__(self):
pass
##### ----- start ----- ###
def listApi(self):
p = request.args.get('p', 1)
psize = 10
startPage = (int(p) - 1) * psize
pageInfo = str(startPage) + ',' + str(psize)
_list = mw.M('crontab').where('', ()).field(
self.field).limit(pageInfo).order('id desc').select()
data = []
for i in range(len(_list)):
tmp = _list[i]
if _list[i]['type'] == "day":
tmp['type'] = '每天'
tmp['cycle'] = mw.getInfo('每天, {1}点{2}分 执行', (str(
_list[i]['where_hour']), str(_list[i]['where_minute'])))
elif _list[i]['type'] == "day-n":
tmp['type'] = mw.getInfo(
'每{1}天', (str(_list[i]['where1']),))
tmp['cycle'] = mw.getInfo('每隔{1}天, {2}点{3}分 执行', (str(
_list[i]['where1']), str(_list[i]['where_hour']), str(_list[i]['where_minute'])))
elif _list[i]['type'] == "hour":
tmp['type'] = '每小时'
tmp['cycle'] = mw.getInfo(
'每小时, 第{1}分钟 执行', (str(_list[i]['where_minute']),))
elif _list[i]['type'] == "hour-n":
tmp['type'] = mw.getInfo(
'每{1}小时', (str(_list[i]['where1']),))
tmp['cycle'] = mw.getInfo('每{1}小时, 第{2}分钟 执行', (str(
_list[i]['where1']), str(_list[i]['where_minute'])))
elif _list[i]['type'] == "minute-n":
tmp['type'] = mw.getInfo(
'每{1}分钟', (str(_list[i]['where1']),))
tmp['cycle'] = mw.getInfo(
'每隔{1}分钟执行', (str(_list[i]['where1']),))
elif _list[i]['type'] == "week":
tmp['type'] = '每周'
if not _list[i]['where1']:
_list[i]['where1'] = '0'
tmp['cycle'] = mw.getInfo('每周{1}, {2}点{3}分执行', (self.toWeek(int(
_list[i]['where1'])), str(_list[i]['where_hour']), str(_list[i]['where_minute'])))
elif _list[i]['type'] == "month":
tmp['type'] = '每月'
tmp['cycle'] = mw.getInfo('每月, {1}日 {2}点{3}分执行', (str(_list[i]['where1']), str(
_list[i]['where_hour']), str(_list[i]['where_minute'])))
data.append(tmp)
rdata = {}
rdata['data'] = data
count = mw.M('crontab').where('', ()).count()
_page = {}
_page['count'] = count
_page['p'] = p
_page['row'] = psize
_page['tojs'] = "getCronData"
rdata['list'] = mw.getPage(_page)
rdata['p'] = p
# backup hook
bh_file = mw.getPanelDataDir() + "/hook_backup.json"
if os.path.exists(bh_file):
hb_data = mw.readFile(bh_file)
hb_data = json.loads(hb_data)
rdata['backup_hook'] = hb_data
return mw.getJson(rdata)
# 设置计划任务状态
def setCronStatusApi(self):
mid = request.form.get('id', '')
cronInfo = mw.M('crontab').where(
'id=?', (mid,)).field(self.field).find()
status = 1
if cronInfo['status'] == status:
status = 0
self.removeForCrond(cronInfo['echo'])
else:
cronInfo['status'] = 1
self.syncToCrond(cronInfo)
mw.M('crontab').where('id=?', (mid,)).setField('status', status)
mw.writeLog(
'计划任务', '修改计划任务[' + cronInfo['name'] + ']状态为[' + str(status) + ']')
return mw.returnJson(True, '设置成功')
# 获取指定任务数据
def getCrondFindApi(self):
sid = request.form.get('id', '')
data = mw.M('crontab').where(
'id=?', (sid,)).field(self.field).find()
return mw.getJson(data)
# 参数校验
def cronCheck(self, params):
if params['stype'] == 'site' or params['stype'] == 'database' or params['stype'].find('database_') > -1 or params['stype'] == 'logs' or params['stype'] == 'path':
if params['save'] == '':
return False, '保留份数不能为空!'
if params['type'] == 'day':
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'day-n':
if params['where1'] == '':
return False, '天不能为空!'
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'hour':
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'hour-n':
if params['where1'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'minute-n':
if params['where1'] == '':
return False, '分钟不能为空!'
if params['type'] == 'week':
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
if params['type'] == 'month':
if params['where1'] == '':
return False, '日不能为空!'
if params['hour'] == '':
return False, '小时不能为空!'
if params['minute'] == '':
return False, '分钟不能为空!'
return True, 'OK'
def modifyCrondApi(self):
sid = request.form.get('id', '')
iname = request.form.get('name', '')
field_type = request.form.get('type', '')
week = request.form.get('week', '')
where1 = request.form.get('where1', '')
hour = request.form.get('hour', '')
minute = request.form.get('minute', '')
save = request.form.get('save', '')
backup_to = request.form.get('backup_to', '')
stype = request.form.get('stype', '')
sname = request.form.get('sname', '')
sbody = request.form.get('sbody', '')
urladdress = request.form.get('urladdress', '')
if len(iname) < 1:
return mw.returnJson(False, '任务名称不能为空!')
params = {
'name': iname,
'type': field_type,
'week': week,
'where1': where1,
'hour': hour,
'minute': minute,
'save': save,
'backup_to': backup_to,
'stype': stype,
'sname': sname,
'sbody': sbody,
'urladdress': urladdress,
}
is_check_pass, msg = self.cronCheck(params)
if not is_check_pass:
return mw.returnJson(is_check_pass, msg)
cuonConfig, get, name = self.getCrondCycle(params)
cronInfo = mw.M('crontab').where(
'id=?', (sid,)).field(self.field).find()
del(cronInfo['id'])
del(cronInfo['addtime'])
cronInfo['name'] = get['name']
cronInfo['type'] = get['type']
cronInfo['where1'] = get['where1']
cronInfo['where_hour'] = get['hour']
cronInfo['where_minute'] = get['minute']
cronInfo['save'] = get['save']
cronInfo['backup_to'] = get['backup_to']
cronInfo['sbody'] = get['sbody']
cronInfo['urladdress'] = get['urladdress']
addData = mw.M('crontab').where('id=?', (sid,)).save('name,type,where1,where_hour,where_minute,save,backup_to, sname, sbody,urladdress',
(iname, field_type, get['where1'], get['hour'], get['minute'], get['save'], get['backup_to'], sname, get['sbody'], get['urladdress']))
self.removeForCrond(cronInfo['echo'])
self.syncToCrond(cronInfo)
mw.writeLog('计划任务', '修改计划任务[' + cronInfo['name'] + ']成功')
return mw.returnJson(True, '修改成功')
def logsApi(self):
sid = request.form.get('id', '')
echo = mw.M('crontab').where("id=?", (sid,)).field('echo').find()
logFile = mw.getServerDir() + '/cron/' + echo['echo'] + '.log'
if not os.path.exists(logFile):
return mw.returnJson(False, '当前日志为空!')
log = mw.getLastLine(logFile, 500)
return mw.returnJson(True, log)
def addApi(self):
iname = request.form.get('name', '')
field_type = request.form.get('type', '')
week = request.form.get('week', '')
where1 = request.form.get('where1', '')
hour = request.form.get('hour', '')
minute = request.form.get('minute', '')
save = request.form.get('save', '')
backup_to = request.form.get('backupTo', '')
stype = request.form.get('sType', '')
sname = request.form.get('sName', '')
sbody = request.form.get('sBody', '')
urladdress = request.form.get('urladdress', '')
if len(iname) < 1:
return mw.returnJson(False, '任务名称不能为空!')
params = {
'name': iname,
'type': field_type,
'week': week,
'where1': where1,
'hour': hour,
'minute': minute,
'save': save,
'backup_to': backup_to,
'stype': stype,
'sname': sname,
'sbody': sbody,
'urladdress': urladdress,
}
is_check_pass, msg = self.cronCheck(params)
if not is_check_pass:
return mw.returnJson(is_check_pass, msg)
addData = self.add(params)
if addData > 0:
return mw.returnJson(True, '添加成功')
return mw.returnJson(False, '添加失败')
def add(self, params):
iname = params["name"]
field_type = params["type"]
week = params["week"]
where1 = params["where1"]
hour = params["hour"]
minute = params["minute"]
save = params["save"]
backup_to = params["backup_to"]
stype = params["stype"]
sname = params["sname"]
sbody = params["sbody"]
urladdress = params["urladdress"]
# print params
cronConfig, get, name = self.getCrondCycle(params)
cronPath = mw.getServerDir() + '/cron'
cronName = self.getShell(params)
if type(cronName) == dict:
return cronName
cronConfig += ' ' + cronPath + '/' + cronName + \
' >> ' + cronPath + '/' + cronName + '.log 2>&1'
# print(cronConfig)
if not mw.isAppleSystem():
wRes = self.writeShell(cronConfig)
if type(wRes) != bool:
return wRes
self.crondReload()
add_time = time.strftime('%Y-%m-%d %X', time.localtime())
task_id = mw.M('crontab').add('name,type,where1,where_hour,where_minute,echo,addtime,status,save,backup_to,stype,sname,sbody,urladdress',
(iname, field_type, where1, hour, minute, cronName, add_time, 1, save, backup_to, stype, sname, sbody, urladdress,))
return task_id
def startTaskApi(self):
sid = request.form.get('id', '')
echo = mw.M('crontab').where('id=?', (sid,)).getField('echo')
execstr = mw.getServerDir() + '/cron/' + echo
os.system('chmod +x ' + execstr)
os.system('nohup ' + execstr + ' >> ' + execstr + '.log 2>&1 &')
return mw.returnJson(True, '任务已执行!')
def delApi(self):
task_id = request.form.get('id', '')
try:
data = self.delete(task_id)
if not data[0]:
return mw.returnJson(False, data[1])
return mw.returnJson(True, '删除成功')
except Exception as e:
return mw.returnJson(False, '删除失败:' + str(e))
def delete(self, tid):
find = mw.M('crontab').where("id=?", (tid,)).field('name,echo').find()
if not self.removeForCrond(find['echo']):
return (False, '无法写入文件,请检查是否开启了系统加固功能!')
cronPath = mw.getServerDir() + '/cron'
sfile = cronPath + '/' + find['echo']
if os.path.exists(sfile):
os.remove(sfile)
sfile = cronPath + '/' + find['echo'] + '.log'
if os.path.exists(sfile):
os.remove(sfile)
mw.M('crontab').where("id=?", (tid,)).delete()
mw.writeLog('计划任务', mw.getInfo('删除计划任务[{1}]成功!', (find['name'],)))
return (True, "OK")
def delLogsApi(self):
sid = request.form.get('id', '')
try:
echo = mw.M('crontab').where("id=?", (sid,)).getField('echo')
logFile = mw.getServerDir() + '/cron/' + echo + '.log'
os.remove(logFile)
return mw.returnJson(True, '任务日志已清空!')
except:
return mw.returnJson(False, '任务日志清空失败!')
# 取数据列表
def getDataListApi(self):
stype = request.form.get('type', '')
bak_data = []
if stype == 'site' or stype == 'sites' or stype == 'database' or stype.find('database_') > -1 or stype == 'path':
hookPath = mw.getPanelDataDir() + "/hook_backup.json"
if os.path.exists(hookPath):
t = mw.readFile(hookPath)
bak_data = json.loads(t)
if stype == 'database' or stype.find('database_') > -1:
sqlite3_name = 'mysql'
path = mw.getServerDir() + '/mysql'
if stype != 'database':
soft_name = stype.replace('database_', '')
path = mw.getServerDir() + '/' + soft_name
if soft_name == 'postgresql':
sqlite3_name = 'pgsql'
db_list = {}
db_list['orderOpt'] = bak_data
if not os.path.exists(path + '/' + sqlite3_name + '.db'):
db_list['data'] = []
else:
db_list['data'] = mw.M('databases').dbPos(
path, sqlite3_name).field('name,ps').select()
return mw.getJson(db_list)
if stype == 'path':
db_list = {}
db_list['data'] = [{"name": mw.getWwwDir(), "ps": "www"}]
db_list['orderOpt'] = bak_data
return mw.getJson(db_list)
data = {}
data['orderOpt'] = bak_data
default_db = 'sites'
# if stype == 'site' or stype == 'logs':
# stype == 'sites'
data['data'] = mw.M(default_db).field('name,ps').select()
return mw.getJson(data)
##### ----- start ----- ###
# 转换大写星期
def toWeek(self, num):
wheres = {
0: '日',
1: '一',
2: '二',
3: '三',
4: '四',
5: '五',
6: '六'
}
try:
return wheres[num]
except:
return ''
def getCrondCycle(self, params):
cuonConfig = ''
name = ''
if params['type'] == "day":
cuonConfig = self.getDay(params)
name = '每天'
elif params['type'] == "day-n":
cuonConfig = self.getDay_N(params)
name = mw.getInfo('每{1}天', (params['where1'],))
elif params['type'] == "hour":
cuonConfig = self.getHour(params)
name = '每小时'
elif params['type'] == "hour-n":
cuonConfig = self.getHour_N(params)
name = '每小时'
elif params['type'] == "minute-n":
cuonConfig = self.minute_N(params)
elif params['type'] == "week":
params['where1'] = params['week']
cuonConfig = self.week(params)
elif params['type'] == "month":
cuonConfig = self.month(params)
return cuonConfig, params, name
# 取任务构造Day
def getDay(self, param):
cuonConfig = "{0} {1} * * * ".format(param['minute'], param['hour'])
return cuonConfig
# 取任务构造Day_n
def getDay_N(self, param):
cuonConfig = "{0} {1} */{2} * * ".format(
param['minute'], param['hour'], param['where1'])
return cuonConfig
# 取任务构造Hour
def getHour(self, param):
cuonConfig = "{0} * * * * ".format(param['minute'])
return cuonConfig
# 取任务构造Hour-N
def getHour_N(self, param):
cuonConfig = "{0} */{1} * * * ".format(
param['minute'], param['where1'])
return cuonConfig
# 取任务构造Minute-N
def minute_N(self, param):
cuonConfig = "*/{0} * * * * ".format(param['where1'])
return cuonConfig
# 取任务构造week
def week(self, param):
cuonConfig = "{0} {1} * * {2}".format(
param['minute'], param['hour'], param['week'])
return cuonConfig
# 取任务构造Month
def month(self, param):
cuonConfig = "{0} {1} {2} * * ".format(
param['minute'], param['hour'], param['where1'])
return cuonConfig
# 取执行脚本
def getShell(self, param):
# try:
stype = param['stype']
if stype == 'toFile':
shell = param.sFile
else:
head = "#!/bin/bash\nPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin\nexport PATH\n"
source_bin_activate = '''
export LANG=en_US.UTF-8
MW_PATH=%s/bin/activate
if [ -f $MW_PATH ];then
source $MW_PATH
fi''' % (mw.getRunDir(),)
head = head + source_bin_activate + "\n"
log = '.log'
script_dir = mw.getRunDir() + "/scripts"
source_stype = 'database'
if stype.find('database_') > -1:
plugin_name = stype.replace('database_', '')
script_dir = mw.getRunDir() + "/plugins/" + plugin_name + "/scripts"
source_stype = stype
stype = 'database'
wheres = {
'path': head + "python3 " + script_dir + "/backup.py path " + param['sname'] + " " + str(param['save']),
'site': head + "python3 " + script_dir + "/backup.py site " + param['sname'] + " " + str(param['save']),
'database': head + "python3 " + script_dir + "/backup.py database " + param['sname'] + " " + str(param['save']),
'logs': head + "python3 " + script_dir + "/logs_backup.py " + param['sname'] + log + " " + str(param['save']),
'rememory': head + "/bin/bash " + script_dir + '/rememory.sh'
}
if param['backup_to'] != 'localhost':
cfile = mw.getPluginDir() + "/" + \
param['backup_to'] + "/index.py"
wheres['path'] = head + "python3 " + cfile + \
" path " + param['sname'] + " " + str(param['save'])
wheres['site'] = head + "python3 " + cfile + \
" site " + param['sname'] + " " + str(param['save'])
wheres['database'] = head + "python3 " + cfile + " " + \
source_stype + " " + \
param['sname'] + " " + str(param['save'])
try:
shell = wheres[stype]
except:
if stype == 'toUrl':
shell = head + "curl -sS --connect-timeout 10 -m 60 '" + \
param['urladdress'] + "'"
else:
shell = head + param['sbody'].replace("\r\n", "\n")
shell += '''
echo "----------------------------------------------------------------------------"
endDate=`date +"%Y-%m-%d %H:%M:%S"`
echo "★[$endDate] Successful"
echo "----------------------------------------------------------------------------"
'''
cronPath = mw.getServerDir() + '/cron'
if not os.path.exists(cronPath):
mw.execShell('mkdir -p ' + cronPath)
if not 'echo' in param:
cronName = mw.md5(mw.md5(str(time.time()) + '_mw'))
else:
cronName = param['echo']
file = cronPath + '/' + cronName
mw.writeFile(file, self.checkScript(shell))
mw.execShell('chmod 750 ' + file)
return cronName
# 检查脚本
def checkScript(self, shell):
keys = ['shutdown', 'init 0', 'mkfs', 'passwd',
'chpasswd', '--stdin', 'mkfs.ext', 'mke2fs']
for key in keys:
shell = shell.replace(key, '[***]')
return shell
# 将Shell脚本写到文件
def writeShell(self, config):
u_file = '/var/spool/cron/crontabs/root'
if not os.path.exists(u_file):
file = '/var/spool/cron/root'
if mw.isAppleSystem():
file = '/etc/crontab'
else:
file = u_file
if not os.path.exists(file):
mw.writeFile(file, '')
conf = mw.readFile(file)
conf += str(config) + "\n"
if mw.writeFile(file, conf):
if not os.path.exists(u_file):
mw.execShell("chmod 600 '" + file +
"' && chown root.root " + file)
else:
mw.execShell("chmod 600 '" + file +
"' && chown root.crontab " + file)
return True
return mw.returnJson(False, '文件写入失败,请检查是否开启系统加固功能!')
# 重载配置
def crondReload(self):
if mw.isAppleSystem():
# mw.execShell('/usr/sbin/cron restart')
if os.path.exists('/etc/crontab'):
pass
else:
if os.path.exists('/etc/init.d/crond'):
mw.execShell('/etc/init.d/crond reload')
elif os.path.exists('/etc/init.d/cron'):
mw.execShell('service cron restart')
else:
mw.execShell("systemctl reload crond")
# 从crond删除
def removeForCrond(self, echo):
u_file = '/var/spool/cron/crontabs/root'
if not os.path.exists(u_file):
file = '/var/spool/cron/root'
if mw.isAppleSystem():
file = '/etc/crontab'
if not os.path.exists(file):
return False
else:
file = u_file
if mw.isAppleSystem():
return True
conf = mw.readFile(file)
rep = ".+" + str(echo) + ".+\n"
conf = re.sub(rep, "", conf)
if not mw.writeFile(file, conf):
return False
self.crondReload()
return True
def syncToCrond(self, cronInfo):
if 'status' in cronInfo:
if cronInfo['status'] == 0:
return False
if 'where_hour' in cronInfo:
cronInfo['hour'] = cronInfo['where_hour']
cronInfo['minute'] = cronInfo['where_minute']
cronInfo['week'] = cronInfo['where1']
cuonConfig, cronInfo, name = self.getCrondCycle(cronInfo)
cronPath = mw.getServerDir() + '/cron'
cronName = self.getShell(cronInfo)
if type(cronName) == dict:
return cronName
cuonConfig += ' ' + cronPath + '/' + cronName + \
' >> ' + cronPath + '/' + cronName + '.log 2>&1'
wRes = self.writeShell(cuonConfig)
if type(wRes) != bool:
return False
self.crondReload()

View File

@@ -1,394 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# sqlite3操作
# ---------------------------------------------------------------------------------
import sqlite3
import os
import sys
class Sql():
#------------------------------
# 数据库操作类 For sqlite3
#------------------------------
__DB_FILE = None # 数据库文件
__DB_CONN = None # 数据库连接对象
__DB_TABLE = "" # 被操作的表名称
__OPT_WHERE = "" # where条件
__OPT_LIMIT = "" # limit条件
__OPT_GROUP = "" # group条件
__OPT_ORDER = "" # order条件
__OPT_FIELD = "*" # field条件
__OPT_PARAM = () # where值
def __init__(self):
self.__DB_FILE = 'data/default.db'
def __getConn(self):
# 取数据库对象
try:
if self.__DB_CONN == None:
self.__DB_CONN = sqlite3.connect(self.__DB_FILE)
self.__DB_CONN.text_factory = str
except Exception as ex:
return "error: " + str(ex)
def autoTextFactory(self):
if sys.version_info[0] == 3:
self.__DB_CONN.text_factory = lambda x: str(
x, encoding="utf-8", errors='ignore')
else:
self.__DB_CONN.text_factory = lambda x: unicode(
x, "utf-8", "ignore")
def dbfile(self, name):
self.__DB_FILE = 'data/' + name + '.db'
return self
def dbPos(self, path, name):
self.__DB_FILE = path + '/' + name + '.db'
return self
def table(self, table):
# 设置表名
self.__DB_TABLE = table
return self
def where(self, where, param):
# WHERE条件
if where:
self.__OPT_WHERE = " WHERE " + where
self.__OPT_PARAM = param
return self
def andWhere(self, where, param):
# WHERE条件
if where:
self.__OPT_WHERE = self.__OPT_WHERE + " and " + where
# print(param)
# print(self.__OPT_PARAM)
self.__OPT_PARAM = self.__OPT_PARAM + param
return self
def order(self, order):
# ORDER条件
if len(order):
self.__OPT_ORDER = " ORDER BY " + order
else:
self.__OPT_ORDER = ""
return self
def group(self, group):
if len(group):
self.__OPT_GROUP = " GROUP BY " + group
else:
self.__OPT_GROUP = ""
return self
def limit(self, limit):
# LIMIT条件
if len(limit):
self.__OPT_LIMIT = " LIMIT " + limit
else:
self.__OPT_LIMIT = ""
return self
def field(self, field):
# FIELD条件
if len(field):
self.__OPT_FIELD = field
return self
def select(self):
# 查询数据集
self.__getConn()
try:
sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + \
self.__OPT_WHERE + self.__OPT_GROUP + self.__OPT_ORDER + self.__OPT_LIMIT
# print(sql)
# print(self.__OPT_PARAM)
result = self.__DB_CONN.execute(sql, self.__OPT_PARAM)
data = result.fetchall()
# 构造字曲系列
if self.__OPT_FIELD != "*":
field = self.__OPT_FIELD.split(',')
tmp = []
for row in data:
i = 0
tmp1 = {}
for key in field:
tmp1[key] = row[i]
i += 1
tmp.append(tmp1)
del(tmp1)
data = tmp
del(tmp)
else:
# 将元组转换成列表
tmp = map(list, data)
data = tmp
del(tmp)
self.__close()
return data
except Exception as ex:
return "error: " + str(ex)
def inquiry(self, input_field=''):
# 查询数据集
# 不清空查询参数
self.__getConn()
try:
sql = "SELECT " + self.__OPT_FIELD + " FROM " + self.__DB_TABLE + \
self.__OPT_WHERE + self.__OPT_GROUP + self.__OPT_ORDER + self.__OPT_LIMIT
# print(sql, self.__OPT_PARAM)
result = self.__DB_CONN.execute(sql, self.__OPT_PARAM)
data = result.fetchall()
# 构造字曲系列
if self.__OPT_FIELD != "*":
if input_field != "":
field = input_field.split(',')
else:
field = self.__OPT_FIELD.split(',')
tmp = []
for row in data:
i = 0
tmp1 = {}
for key in field:
tmp1[key] = row[i]
i += 1
tmp.append(tmp1)
del(tmp1)
data = tmp
del(tmp)
else:
# 将元组转换成列表
tmp = map(list, data)
data = tmp
del(tmp)
return data
except Exception as ex:
return "error: " + str(ex)
def getField(self, keyName):
# 取回指定字段
result = self.field(keyName).select()
# print(result)
if len(result) == 1:
return result[0][keyName]
return result
def setField(self, keyName, keyValue):
# 更新指定字段
return self.save(keyName, (keyValue,))
def find(self):
# 取一行数据
result = self.limit("1").select()
if len(result) == 1:
return result[0]
return result
def count(self):
# 取行数
key = "COUNT(*)"
data = self.field(key).select()
try:
return int(data[0][key])
except:
return 0
def add(self, keys, param):
# 插入数据
self.__getConn()
try:
values = ""
for key in keys.split(','):
values += "?,"
values = self.checkInput(values[0:len(values) - 1])
sql = "INSERT INTO " + self.__DB_TABLE + \
"(" + keys + ") " + "VALUES(" + values + ")"
result = self.__DB_CONN.execute(sql, param)
last_id = result.lastrowid
self.__close()
self.__DB_CONN.commit()
return last_id
except Exception as ex:
return "error: " + str(ex)
# 插入数据
def insert(self, pdata):
if not pdata:
return False
keys, param = self.__format_pdata(pdata)
return self.add(keys, param)
# 更新数据
def update(self, pdata):
if not pdata:
return False
keys, param = self.__format_pdata(pdata)
return self.save(keys, param)
# 构造数据
def __format_pdata(self, pdata):
keys = pdata.keys()
keys_str = ','.join(keys)
param = []
for k in keys:
param.append(pdata[k])
return keys_str, tuple(param)
def checkInput(self, data):
if not data:
return data
if type(data) != str:
return data
checkList = [
{'d': '<', 'r': '<'},
{'d': '>', 'r': '>'},
{'d': '\'', 'r': '‘'},
{'d': '"', 'r': '“'},
{'d': '&', 'r': '&'},
{'d': '#', 'r': '#'},
{'d': '<', 'r': '<'}
]
for v in checkList:
data = data.replace(v['d'], v['r'])
return data
def addAll(self, keys, param):
# 插入数据
self.__getConn()
try:
values = ""
for key in keys.split(','):
values += "?,"
values = values[0:len(values) - 1]
sql = "INSERT INTO " + self.__DB_TABLE + \
"(" + keys + ") " + "VALUES(" + values + ")"
result = self.__DB_CONN.execute(sql, param)
return True
except Exception as ex:
return "error: " + str(ex)
def commit(self):
self.__close()
self.__DB_CONN.commit()
def save(self, keys, param):
# 更新数据
self.__getConn()
try:
opt = ""
for key in keys.split(','):
opt += key + "=?,"
opt = opt[0:len(opt) - 1]
sql = "UPDATE " + self.__DB_TABLE + " SET " + opt + self.__OPT_WHERE
# import mw
# mw.writeFile('/tmp/test.pl', sql)
# 处理拼接WHERE与UPDATE参数
tmp = list(param)
for arg in self.__OPT_PARAM:
tmp.append(arg)
self.__OPT_PARAM = tuple(tmp)
result = self.__DB_CONN.execute(sql, self.__OPT_PARAM)
self.__close()
self.__DB_CONN.commit()
return result.rowcount
except Exception as ex:
return "error: " + str(ex)
def delete(self, id=None):
# 删除数据
self.__getConn()
try:
if id:
self.__OPT_WHERE = " WHERE id=?"
self.__OPT_PARAM = (id,)
sql = "DELETE FROM " + self.__DB_TABLE + self.__OPT_WHERE
result = self.__DB_CONN.execute(sql, self.__OPT_PARAM)
self.__close()
self.__DB_CONN.commit()
return result.rowcount
except Exception as ex:
return "error: " + str(ex)
def originExecute(self, sql, param=()):
self.__getConn()
try:
result = self.__DB_CONN.execute(sql, param)
self.__DB_CONN.commit()
return result
except Exception as ex:
return "error: " + str(ex)
def execute(self, sql, param=()):
# 执行SQL语句返回受影响行
self.__getConn()
# print sql, param
try:
result = self.__DB_CONN.execute(sql, param)
self.__DB_CONN.commit()
return result.rowcount
except Exception as ex:
return "error: " + str(ex)
def query(self, sql, param=()):
# 执行SQL语句返回数据集
self.__getConn()
try:
result = self.__DB_CONN.execute(sql, param)
# 将元组转换成列表
# data = map(list, result)
return result
except Exception as ex:
return "error: " + str(ex)
def create(self, name):
# 创建数据表
self.__getConn()
import mw
script = mw.readFile('data/' + name + '.sql')
result = self.__DB_CONN.executescript(script)
self.__DB_CONN.commit()
return result.rowcount
def fofile(self, filename):
# 执行脚本
self.__getConn()
import mw
script = mw.readFile(filename)
result = self.__DB_CONN.executescript(script)
self.__DB_CONN.commit()
return result.rowcount
def __close(self):
# 清理条件属性
self.__OPT_WHERE = ""
self.__OPT_FIELD = "*"
self.__OPT_ORDER = ""
self.__OPT_LIMIT = ""
self.__OPT_PARAM = ()
def close(self):
# 释放资源
try:
self.__DB_CONN.close()
self.__DB_CONN = None
except:
pass

File diff suppressed because it is too large Load Diff

View File

@@ -1,485 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 防火墙操作
# ---------------------------------------------------------------------------------
import psutil
import time
import os
import sys
import mw
import re
import json
import pwd
from flask import request
class firewall_api:
__isFirewalld = False
__isIptables = False
__isUfw = False
__isMac = False
def __init__(self):
iptables_file = mw.systemdCfgDir() + '/iptables.service'
if os.path.exists('/usr/sbin/firewalld'):
self.__isFirewalld = True
elif os.path.exists('/usr/sbin/ufw'):
self.__isUfw = True
elif os.path.exists(iptables_file):
self.__isIptables = True
elif mw.isAppleSystem():
self.__isMac = True
##### ----- start ----- ###
# 添加屏蔽IP
def addDropAddressApi(self):
import re
port = request.form.get('port', '').strip()
ps = request.form.get('ps', '').strip()
rep = "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$"
if not re.search(rep, port):
return mw.returnJson(False, '您输入的IP地址不合法!')
address = port
if mw.M('firewall').where("port=?", (address,)).count() > 0:
return mw.returnJson(False, '您要放屏蔽的IP已存在屏蔽列表,无需重复处理!')
if self.__isUfw:
mw.execShell('ufw deny from ' + address + ' to any')
else:
if self.__isIptables:
cmd = 'iptables -I INPUT -s ' + address + ' -j DROP'
mw.execShell(cmd)
elif self.__isFirewalld:
cmd = 'firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="' + \
address + '" drop\''
mw.execShell(cmd)
else:
pass
msg = mw.getInfo('屏蔽IP[{1}]成功!', (address,))
mw.writeLog("防火墙管理", msg)
addtime = time.strftime('%Y-%m-%d %X', time.localtime())
mw.M('firewall').add('port,ps,addtime', (address, ps, addtime))
self.firewallReload()
return mw.returnJson(True, '添加成功!')
# 添加放行端口
def addAcceptPortApi(self):
if not self.getFwStatus():
return mw.returnJson(False, '防火墙启动时,才能添加规则!')
port = request.form.get('port', '').strip()
ps = request.form.get('ps', '').strip()
stype = request.form.get('type', '').strip()
data = self.addAcceptPortArgs(port, ps, stype)
return mw.getJson(data)
# 添加放行端口
def addAcceptPortArgs(self, port, ps, stype):
import re
import time
if not self.getFwStatus():
self.setFw(0)
rep = "^\d{1,5}(:\d{1,5})?$"
if not re.search(rep, port):
return mw.returnData(False, '端口范围不正确!')
if mw.M('firewall').where("port=?", (port,)).count() > 0:
return mw.returnData(False, '您要放行的端口已存在,无需重复放行!')
msg = mw.getInfo('放行端口[{1}]成功', (port,))
mw.writeLog("防火墙管理", msg)
addtime = time.strftime('%Y-%m-%d %X', time.localtime())
mw.M('firewall').add('port,ps,addtime', (port, ps, addtime))
self.addAcceptPort(port)
self.firewallReload()
return mw.returnData(True, '添加放行(' + port + ')端口成功!')
# 删除IP屏蔽
def delDropAddressApi(self):
if not self.getFwStatus():
return mw.returnJson(False, '防火墙启动时,才能删除规则!')
port = request.form.get('port', '').strip()
ps = request.form.get('ps', '').strip()
sid = request.form.get('id', '').strip()
address = port
if self.__isUfw:
mw.execShell('ufw delete deny from ' + address + ' to any')
elif self.__isFirewalld:
mw.execShell(
'firewall-cmd --permanent --remove-rich-rule=\'rule family=ipv4 source address="' + address + '" drop\'')
elif self.__isIptables:
cmd = 'iptables -D INPUT -s ' + address + ' -j DROP'
mw.execShell(cmd)
else:
pass
msg = mw.getInfo('解除IP[{1}]的屏蔽!', (address,))
mw.writeLog("防火墙管理", msg)
mw.M('firewall').where("id=?", (sid,)).delete()
self.firewallReload()
return mw.returnJson(True, '删除成功!')
# 删除放行端口
def delAcceptPortApi(self):
port = request.form.get('port', '').strip()
sid = request.form.get('id', '').strip()
mw_port = mw.readFile('data/port.pl')
try:
if(port == mw_port):
return mw.returnJson(False, '失败,不能删除当前面板端口!')
if self.__isUfw:
mw.execShell('ufw delete allow ' + port + '/tcp')
elif self.__isFirewalld:
port = port.replace(':', '-')
mw.execShell(
'firewall-cmd --permanent --zone=public --remove-port=' + port + '/tcp')
mw.execShell(
'firewall-cmd --permanent --zone=public --remove-port=' + port + '/udp')
elif self.__isIptables:
mw.execShell(
'iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport ' + port + ' -j ACCEPT')
else:
pass
msg = mw.getInfo('删除防火墙放行端口[{1}]成功!', (port,))
mw.writeLog("防火墙管理", msg)
mw.M('firewall').where("id=?", (sid,)).delete()
self.firewallReload()
return mw.returnJson(True, '删除成功!')
except Exception as e:
return mw.returnJson(False, '删除失败!:' + str(e))
def getWwwPathApi(self):
path = mw.getLogsDir()
return mw.getJson({'path': path})
def getListApi(self):
p = request.form.get('p', '1').strip()
limit = request.form.get('limit', '10').strip()
return self.getList(int(p), int(limit))
def getLogListApi(self):
p = request.form.get('p', '1').strip()
limit = request.form.get('limit', '10').strip()
search = request.form.get('search', '').strip()
return self.getLogList(int(p), int(limit), search)
def getSshInfoApi(self):
data = {}
file = '/etc/ssh/sshd_config'
conf = mw.readFile(file)
rep = "#*Port\s+([0-9]+)\s*\n"
port = re.search(rep, conf).groups(0)[0]
isPing = True
try:
if mw.isAppleSystem():
isPing = True
else:
file = '/etc/sysctl.conf'
sys_conf = mw.readFile(file)
rep = "#*net\.ipv4\.icmp_echo_ignore_all\s*=\s*([0-9]+)"
tmp = re.search(rep, sys_conf).groups(0)[0]
if tmp == '1':
isPing = False
except:
isPing = True
# sshd 检测
status = True
cmd = "service sshd status | grep -P '(dead|stop)'|grep -v grep"
ssh_status = mw.execShell(cmd)
if ssh_status[0] != '':
status = False
cmd = "systemctl status sshd.service | grep 'dead'|grep -v grep"
ssh_status = mw.execShell(cmd)
if ssh_status[0] != '':
status = False
data['pass_prohibit_status'] = False
# 密码登陆配置检查
pass_rep = "#PasswordAuthentication\s+(\w*)\s*\n"
pass_status = re.search(pass_rep, conf)
if pass_status:
data['pass_prohibit_status'] = True
if not data['pass_prohibit_status']:
pass_rep = "PasswordAuthentication\s+(\w*)\s*\n"
pass_status = re.search(pass_rep, conf)
if pass_status and pass_status.groups(0)[0].strip() == 'no':
data['pass_prohibit_status'] = True
data['port'] = port
data['status'] = status
data['ping'] = isPing
if mw.isAppleSystem():
data['firewall_status'] = False
else:
data['firewall_status'] = self.getFwStatus()
return mw.getJson(data)
def setSshPortApi(self):
port = request.form.get('port', '1').strip()
if int(port) < 22 or int(port) > 65535:
return mw.returnJson(False, '端口范围必需在22-65535之间!')
ports = ['21', '25', '80', '443', '888']
if port in ports:
return mw.returnJson(False, '(' + port + ')' + '特殊端口不可设置!')
file = '/etc/ssh/sshd_config'
conf = mw.readFile(file)
rep = "#*Port\s+([0-9]+)\s*\n"
conf = re.sub(rep, "Port " + port + "\n", conf)
mw.writeFile(file, conf)
self.addAcceptPortArgs(port, 'SSH端口修改', 'port')
if self.__isUfw:
mw.execShell("service ssh restart")
elif self.__isIptables:
mw.execShell("/etc/init.d/sshd restart")
elif self.__isFirewalld:
mw.execShell("systemctl restart sshd.service")
else:
return mw.returnJson(False, '修改失败!')
return mw.returnJson(True, '修改成功!')
def setSshStatusApi(self):
if mw.isAppleSystem():
return mw.returnJson(True, '开发机不能操作!')
status = request.form.get('status', '1').strip()
msg = 'SSH服务已启用'
act = 'start'
if status == "1":
msg = 'SSH服务已停用'
act = 'stop'
ssh_service = mw.systemdCfgDir() + '/sshd.service'
if os.path.exists(ssh_service):
mw.execShell("systemctl " + act + " sshd.service")
else:
mw.execShell('service sshd ' + act)
if os.path.exists('/etc/init.d/sshd'):
mw.execShell('/etc/init.d/sshd ' + act)
mw.writeLog("防火墙管理", msg)
return mw.returnJson(True, '操作成功!')
def setSshPassStatusApi(self):
if mw.isAppleSystem():
return mw.returnJson(True, '开发机不能操作!')
status = request.form.get('status', '1').strip()
msg = '禁止密码登陆成功'
if status == "1":
msg = '开启密码登陆成功'
file = '/etc/ssh/sshd_config'
if not os.path.exists(file):
return mw.returnJson(False, '无法设置!')
conf = mw.readFile(file)
if status == '1':
rep = "(#)?PasswordAuthentication\s+(\w*)\s*\n"
conf = re.sub(rep, "PasswordAuthentication yes\n", conf)
else:
rep = "(#)?PasswordAuthentication\s+(\w*)\s*\n"
conf = re.sub(rep, "PasswordAuthentication no\n", conf)
mw.writeFile(file, conf)
mw.execShell("systemctl restart sshd.service")
mw.writeLog("SSH管理", msg)
return mw.returnJson(True, msg)
def setPingApi(self):
if mw.isAppleSystem():
return mw.returnJson(True, '开发机不能操作!')
status = request.form.get('status')
filename = '/etc/sysctl.conf'
conf = mw.readFile(filename)
if conf.find('net.ipv4.icmp_echo') != -1:
rep = u"net\.ipv4\.icmp_echo.*"
conf = re.sub(rep, 'net.ipv4.icmp_echo_ignore_all=' + status, conf)
else:
conf += "\nnet.ipv4.icmp_echo_ignore_all=" + status
mw.writeFile(filename, conf)
mw.execShell('sysctl -p')
return mw.returnJson(True, '设置成功!')
def setFwApi(self):
if mw.isAppleSystem():
return mw.returnJson(True, '开发机不能设置!')
status = request.form.get('status', '1')
return mw.getJson(self.setFw(status))
def setFwIptables(self, status):
# iptables特殊处理
if status == '1':
mw.execShell('service iptables save')
mw.execShell('service iptables stop')
else:
# 重新导入数据
_list = mw.M('firewall').field('id,port,ps,addtime').limit(
'0,1000').order('id desc').select()
mw.execShell('iptables -P INPUT DROP')
mw.execShell('iptables -P OUTPUT ACCEPT')
for x in _list:
port = x['port']
if mw.isIpAddr(port):
cmd = 'iptables -I INPUT -s ' + port + ' -j DROP'
mw.execShell(cmd)
else:
self.addAcceptPort(port)
mw.execShell('service iptables save')
mw.execShell('service iptables start')
def setFw(self, status):
if self.__isIptables:
self.setFwIptables(status)
return mw.returnData(True, '设置成功!')
if status == '1':
if self.__isUfw:
mw.execShell('/usr/sbin/ufw disable')
elif self.__isFirewalld:
mw.execShell('systemctl stop firewalld.service')
mw.execShell('systemctl disable firewalld.service')
else:
pass
else:
if self.__isUfw:
mw.execShell("echo 'y'| ufw enable")
elif self.__isFirewalld:
mw.execShell('systemctl start firewalld.service')
mw.execShell('systemctl enable firewalld.service')
else:
pass
return mw.returnData(True, '设置成功!')
def delPanelLogsApi(self):
mw.M('logs').where('id>?', (0,)).delete()
mw.writeLog('面板设置', '面板操作日志已清空!')
return mw.returnJson(True, '面板操作日志已清空!')
##### ----- start ----- ###
def getList(self, page, limit):
start = (page - 1) * limit
_list = mw.M('firewall').field('id,port,ps,addtime').limit(
str(start) + ',' + str(limit)).order('id desc').select()
data = {}
data['data'] = _list
count = mw.M('firewall').count()
_page = {}
_page['count'] = count
_page['tojs'] = 'showAccept'
_page['p'] = page
data['page'] = mw.getPage(_page)
return mw.getJson(data)
def getLogList(self, page, limit, search=''):
find_search = ''
if search != '':
find_search = "type like '%" + search + "%' or log like '%" + \
search + "%' or addtime like '%" + search + "%'"
start = (page - 1) * limit
_list = mw.M('logs').where(find_search, ()).field(
'id,type,log,addtime').limit(str(start) + ',' + str(limit)).order('id desc').select()
data = {}
data['data'] = _list
count = mw.M('logs').where(find_search, ()).count()
_page = {}
_page['count'] = count
_page['tojs'] = 'getLogs'
_page['p'] = page
data['page'] = mw.getPage(_page)
return mw.getJson(data)
def addAcceptPort(self, port):
if self.__isUfw:
mw.execShell('ufw allow ' + port + '/tcp')
elif self.__isFirewalld:
port = port.replace(':', '-')
cmd = 'firewall-cmd --permanent --zone=public --add-port=' + port + '/tcp'
mw.execShell(cmd)
elif self.__isIptables:
cmd = 'iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ' + port + ' -j ACCEPT'
mw.execShell(cmd)
else:
pass
return True
def firewallReload(self):
if self.__isUfw:
mw.execShell('/usr/sbin/ufw reload')
return
elif self.__isIptables:
mw.execShell('service iptables save')
mw.execShell('service iptables restart')
elif self.__isFirewalld:
mw.execShell('firewall-cmd --reload')
else:
pass
def getFwStatus(self):
if self.__isUfw:
cmd = "/usr/sbin/ufw status| grep Status | awk -F ':' '{print $2}'"
data = mw.execShell(cmd)
if data[0].strip() == 'inactive':
return False
return True
elif self.__isIptables:
cmd = "systemctl status iptables | grep 'inactive'"
data = mw.execShell(cmd)
if data[0] != '':
return False
return True
elif self.__isFirewalld:
cmd = "ps -ef|grep firewalld |grep -v grep | awk '{print $2}'"
data = mw.execShell(cmd)
if data[0] == '':
return False
return True
else:
return False

File diff suppressed because it is too large Load Diff

View File

@@ -1,237 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 分页库操作
# ---------------------------------------------------------------------------------
import math
import string
class Page():
#--------------------------
# 分页类 - JS回调版
#--------------------------
__PREV = '上一页'
__NEXT = '下一页'
__START = '首页'
__END = '尾页'
__COUNT_START = '共'
__COUNT_END = '条数据'
__FO = '从'
__LINE = '条'
__LIST_NUM = 4
SHIFT = None # 偏移量
ROW = None # 每页行数
__C_PAGE = None # 当前页
__COUNT_PAGE = None # 总页数
__COUNT_ROW = None # 总行数
__URI = None # URI
__RTURN_JS = False # 是否返回JS回调
__START_NUM = None # 起始行
__END_NUM = None # 结束行
def __init__(self):
if False:
self.__PREV = tmp['PREV']
self.__NEXT = tmp['NEXT']
self.__START = tmp['START']
self.__END = tmp['END']
self.__COUNT_START = tmp['COUNT_START']
self.__COUNT_END = tmp['COUNT_END']
self.__FO = tmp['FO']
self.__LINE = tmp['LINE']
def GetPage(self, pageInfo, limit='1,2,3,4,5,6,7,8'):
# 取分页信息
# @param pageInfo 传入分页参数字典
# @param limit 返回系列
self.__RTURN_JS = pageInfo['return_js']
self.__COUNT_ROW = pageInfo['count']
self.ROW = pageInfo['row']
self.__C_PAGE = self.__GetCpage(pageInfo['p'])
self.__START_NUM = self.__StartRow()
self.__END_NUM = self.__EndRow()
self.__COUNT_PAGE = self.__GetCountPage()
self.__URI = self.__SetUri(pageInfo['uri'])
self.SHIFT = self.__START_NUM - 1
keys = limit.split(',')
pages = {}
# 起始页
pages['1'] = self.__GetStart()
# 上一页
pages['2'] = self.__GetPrev()
# 分页
pages['3'] = self.__GetPages()
# 下一页
pages['4'] = self.__GetNext()
# 尾页
pages['5'] = self.__GetEnd()
# 当前显示页与总页数
pages['6'] = "<span class='Pnumber'>" + \
str(self.__C_PAGE) + "/" + \
str(self.__COUNT_PAGE) + "</span>"
# 本页显示开始与结束行
pages['7'] = "<span class='Pline'>" + str(self.__FO) + \
str(self.__START_NUM) + "-" + \
str(self.__END_NUM) + str(self.__LINE) + "</span>"
# 行数
pages['8'] = "<span class='Pcount'>" + str(self.__COUNT_START) + \
str(self.__COUNT_ROW) + str(self.__COUNT_END) + "</span>"
# 构造返回数据
retuls = '<div>'
for value in keys:
retuls += pages[value]
retuls += '</div>'
# 返回分页数据
return retuls
def __GetEnd(self):
# 构造尾页
endStr = ""
if self.__C_PAGE >= self.__COUNT_PAGE:
endStr = ''
else:
if self.__RTURN_JS == "":
endStr = "<a class='Pend' href='" + self.__URI + "p=" + \
str(self.__COUNT_PAGE) + "'>" + str(self.__END) + "</a>"
else:
endStr = "<a class='Pend' onclick='" + self.__RTURN_JS + \
"(" + str(self.__COUNT_PAGE) + ")'>" + \
str(self.__END) + "</a>"
return endStr
def __GetNext(self):
# 构造下一页
nextStr = ""
if self.__C_PAGE >= self.__COUNT_PAGE:
nextStr = ''
else:
if self.__RTURN_JS == "":
nextStr = "<a class='Pnext' href='" + self.__URI + "p=" + \
str(self.__C_PAGE + 1) + "'>" + str(self.__NEXT) + "</a>"
else:
nextStr = "<a class='Pnext' onclick='" + self.__RTURN_JS + \
"(" + str(self.__C_PAGE + 1) + ")'>" + \
str(self.__NEXT) + "</a>"
return nextStr
def __GetPages(self):
# 构造分页
pages = ''
num = 0
# 当前页之前
if (self.__COUNT_PAGE - self.__C_PAGE) < self.__LIST_NUM:
num = self.__LIST_NUM + \
(self.__LIST_NUM - (self.__COUNT_PAGE - self.__C_PAGE))
else:
num = self.__LIST_NUM
n = 0
for i in range(num):
n = num - i
page = self.__C_PAGE - n
if page > 0:
if self.__RTURN_JS == "":
pages += "<a class='Pnum' href='" + self.__URI + \
"p=" + str(page) + "'>" + str(page) + "</a>"
else:
pages += "<a class='Pnum' onclick='" + self.__RTURN_JS + \
"(" + str(page) + ")'>" + str(page) + "</a>"
# 当前页
if self.__C_PAGE > 0:
pages += "<span class='Pcurrent'>" + \
str(self.__C_PAGE) + "</span>"
# 当前页之后
if self.__C_PAGE <= self.__LIST_NUM:
num = self.__LIST_NUM + (self.__LIST_NUM - self.__C_PAGE) + 1
else:
num = self.__LIST_NUM
for i in range(num):
if i == 0:
continue
page = self.__C_PAGE + i
if page > self.__COUNT_PAGE:
break
if self.__RTURN_JS == "":
pages += "<a class='Pnum' href='" + self.__URI + \
"p=" + str(page) + "'>" + str(page) + "</a>"
else:
pages += "<a class='Pnum' onclick='" + self.__RTURN_JS + \
"(" + str(page) + ")'>" + str(page) + "</a>"
return pages
def __GetPrev(self):
# 构造上一页
startStr = ''
if self.__C_PAGE == 1:
startStr = ''
else:
if self.__RTURN_JS == "":
startStr = "<a class='Ppren' href='" + self.__URI + "p=" + \
str(self.__C_PAGE - 1) + "'>" + str(self.__PREV) + "</a>"
else:
startStr = "<a class='Ppren' onclick='" + self.__RTURN_JS + \
"(" + str(self.__C_PAGE - 1) + ")'>" + \
str(self.__PREV) + "</a>"
return startStr
def __GetStart(self):
# 构造起始分页
startStr = ''
if self.__C_PAGE == 1:
startStr = ''
else:
if self.__RTURN_JS == "":
startStr = "<a class='Pstart' href='" + \
self.__URI + "p=1'>" + str(self.__START) + "</a>"
else:
startStr = "<a class='Pstart' onclick='" + \
self.__RTURN_JS + "(1)'>" + str(self.__START) + "</a>"
return startStr
def __GetCpage(self, p):
# 取当前页
if p:
return p
return 1
def __StartRow(self):
# 从多少行开始
return (self.__C_PAGE - 1) * self.ROW + 1
def __EndRow(self):
# 从多少行结束
if self.ROW > self.__COUNT_ROW:
return self.__COUNT_ROW
return self.__C_PAGE * self.ROW
def __GetCountPage(self):
# 取总页数
return int(math.ceil(self.__COUNT_ROW / float(self.ROW)))
def __SetUri(self, sinput):
# 构造URI
uri = '?'
for key in sinput:
if key == 'p':
continue
uri += key + '=' + sinput[key] + '&'
return str(uri)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,456 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# SSH终端操作
# ---------------------------------------------------------------------------------
import json
import time
import os
import sys
import socket
import threading
import re
from io import BytesIO, StringIO
import mw
import paramiko
from flask_socketio import SocketIO, emit, send
class ssh_terminal:
__debug_file = 'logs/terminal.log'
__log_type = 'SSH终端'
# websocketio 唯一标识
__sid = ''
__host = None
__type = '0'
__port = 22
__user = None
__pass = None
__pkey = None
__key_passwd = None
__rep_ssh_config = False
__rep_ssh_service = False
__sshd_config_backup = None
__ssh = None
__tp = None
__ps = None
__ssh_list = {}
__ssh_last_request_time = {}
def __init__(self):
ht = threading.Thread(target=self.heartbeat)
ht.start()
def debug(self, msg):
msg = "{} - {}:{} => {} \n".format(mw.formatDate(),
self.__host, self.__port, msg)
if not mw.isDebugMode():
return
mw.writeFile(self.__debug_file, msg, 'a+')
def returnMsg(self, status, msg):
return {'status': status, 'msg': msg}
def restartSsh(self, act='reload'):
'''
重启ssh 无参数传递
'''
version = mw.readFile('/etc/redhat-release')
if not os.path.exists('/etc/redhat-release'):
mw.execShell('service ssh ' + act)
elif version.find(' 7.') != -1 or version.find(' 8.') != -1:
mw.execShell("systemctl " + act + " sshd.service")
else:
mw.execShell("/etc/init.d/sshd " + act)
def isRunning(self, rep=False):
try:
if rep and self.__rep_ssh_service:
self.restartSsh('stop')
return True
status = self.getSshStatus()
if not status:
self.restartSsh('start')
self.__rep_ssh_service = True
return True
return False
except:
return False
def setSshdConfig(self, rep=False):
self.isRunning(rep)
if rep and not self.__rep_ssh_config:
return False
try:
sshd_config_file = '/etc/ssh/sshd_config'
if not os.path.exists(sshd_config_file):
return False
sshd_config = mw.readFile(sshd_config_file)
if not sshd_config:
return False
if rep:
if self.__sshd_config_backup:
mw.writeFile(sshd_config_file, self.__sshd_config_backup)
self.restartSsh()
return True
pin = r'^\s*PubkeyAuthentication\s+(yes|no)'
pubkey_status = re.findall(pin, sshd_config, re.I)
if pubkey_status:
if pubkey_status[0] == 'yes':
pubkey_status = True
else:
pubkey_status = False
pin = r'^\s*RSAAuthentication\s+(yes|no)'
rsa_status = re.findall(pin, sshd_config, re.I)
if rsa_status:
if rsa_status[0] == 'yes':
rsa_status = True
else:
rsa_status = False
self._sshd_config_backup = sshd_config
is_write = False
if not pubkey_status:
sshd_config = re.sub(
r'\n#?PubkeyAuthentication\s\w+', '\nPubkeyAuthentication yes', sshd_config)
is_write = True
if not rsa_status:
sshd_config = re.sub(
r'\n#?RSAAuthentication\s\w+', '\nRSAAuthentication yes', sshd_config)
is_write = True
if is_write:
mw.writeFile(sshd_config_file, sshd_config)
self.__rep_ssh_config = True
self.restartSsh()
else:
self.__sshd_config_backup = None
return True
except:
return False
def setSid(self, sid):
self.__sid = sid
def connect(self, sid):
# self.connectBySocket()
if self.__host in ['127.0.0.1', 'localhost']:
return self.connectLocalSsh(sid)
else:
return self.connectBySocket(sid)
def connectLocalSsh(self, sid):
mw.createSshInfo()
self.__ps = paramiko.SSHClient()
self.__ps.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.__port = mw.getSSHPort()
try:
self.__ps.connect(self.__host, self.__port, timeout=60)
except Exception as e:
self.__ps.connect('127.0.0.1', self.__port)
except Exception as e:
self.__ps.connect('localhost', self.__port)
except Exception as e:
self.setSshdConfig(True)
self.__ps.close()
e = str(e)
if e.find('websocket error!') != -1:
return self.returnMsg(True, '连接成功')
if e.find('Authentication timeout') != -1:
self.debug("认证超时{}".format(e))
return self.returnMsg(False, '认证超时,请按回车重试!{}'.format(e))
if e.find('Connection reset by peer') != -1:
self.debug('目标服务器主动拒绝连接')
return self.returnMsg(False, '目标服务器主动拒绝连接')
if e.find('Error reading SSH protocol banner') != -1:
self.debug('协议头响应超时')
return self.returnMsg(False, '协议头响应超时,与目标服务器之间的网络质量太糟糕:' + e)
if not e:
self.debug('SSH协议握手超时')
return self.returnMsg(False, "SSH协议握手超时,与目标服务器之间的网络质量太糟糕")
err = mw.getTracebackInfo()
self.debug(err)
return self.returnMsg(False, "未知错误: {}".format(err))
self.debug('local-ssh:认证成功,正在构建会话通道')
ssh = self.__ps.invoke_shell(
term='xterm', width=83, height=21)
ssh.setblocking(0)
self.__ssh_list[sid] = ssh
mw.writeLog(self.__log_type, '成功登录到SSH服务器 [{}:{}]'.format(
self.__host, self.__port))
self.debug('local-ssh:通道已构建')
return self.returnMsg(True, '连接成功!')
def connectBySocket(self, sid):
if not self.__host:
return self.returnMsg(False, '错误的连接地址')
if not self.__user:
self.__user = 'root'
if not self.__port:
self.__port = 22
self.setSshdConfig(True)
num = 0
while num < 5:
num += 1
try:
self.debug('正在尝试第{}次连接'.format(num))
if self.__rep_ssh_config:
time.sleep(0.1)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2 + num)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8192)
sock.connect((self.__host, self.__port))
break
except Exception as e:
if num == 5:
self.setSshdConfig(True)
self.debug('重试连接失败,{}'.format(e))
return self.returnMsg(False, '连接目标服务器失败, {}:{}'.format(self.__host, self.__port))
else:
time.sleep(0.2)
# print(self.__host, sock)
self.__tp = paramiko.Transport(sock)
try:
self.__tp.start_client()
self.__tp.banner_timeout = 60
if not self.__pass and not self.__pkey:
return self.returnMsg(False, '密码或私钥不能都为空: {}:{}'.format(self.__host, self.__port))
if self.__pkey != '' and self.__type != '0':
self.debug('正在认证私钥')
p_file = StringIO(str(self.__pkey.replace('\\n', '\n')))
# p_file = "/tmp/t_ssh_pkey.txt"
# mw.writeFile(p_file, self.__pkey.replace('\\n', '\n'))
# mw.execShell('chmod 600 ' + p_file)
try:
p_file.seek(0)
pkey = paramiko.RSAKey.from_private_key(p_file)
except:
try:
p_file.seek(0) # 重置游标
pkey = paramiko.Ed25519Key.from_private_key(
p_file)
except:
try:
p_file.seek(0)
pkey = paramiko.ECDSAKey.from_private_key(p_file)
except:
p_file.seek(0)
pkey = paramiko.DSSKey.from_private_key(p_file)
self.__tp.auth_publickey(username=self.__user, key=pkey)
else:
try:
self.__tp.auth_none(self.__user)
except Exception as e:
e = str(e)
if e.find('keyboard-interactive') >= 0:
self._auth_interactive()
else:
self.debug('正在认证密码')
self.__tp.auth_password(
username=self.__user, password=self.__pass)
except Exception as e:
self.setSshdConfig(True)
self.__tp.close()
e = str(e)
# print(e)
if e.find('Authentication timeout') != -1:
self.debug("认证超时{}".format(e))
return self.returnMsg(False, '认证超时,请按回车重试!{}'.format(e))
if e.find('Authentication failed') != -1:
self.debug('认证失败{}'.format(e))
return self.returnMsg(False, '帐号或密码错误: {}'.format(e + "," + self.__user + "@" + self.__host + ":" + str(self.__port)))
if e.find('Bad authentication type; allowed types') != -1:
self.debug('认证失败{}'.format(e))
if self.__host in ['127.0.0.1', 'localhost'] and self.__pass == 'none':
return self.returnMsg(False, '帐号或密码错误: {}'.format("Authentication failed ," + self.__user + "@" + self.__host + ":" + str(self.__port)))
return self.returnMsg(False, '不支持的身份验证类型: {}'.format(e))
if e.find('Connection reset by peer') != -1:
self.debug('目标服务器主动拒绝连接')
return self.returnMsg(False, '目标服务器主动拒绝连接')
if e.find('Error reading SSH protocol banner') != -1:
self.debug('协议头响应超时')
return self.returnMsg(False, '协议头响应超时,与目标服务器之间的网络质量太糟糕:' + e)
if not e:
self.debug('SSH协议握手超时')
return self.returnMsg(False, "SSH协议握手超时,与目标服务器之间的网络质量太糟糕")
err = mw.getTracebackInfo()
self.debug(err)
return self.returnMsg(False, "未知错误: {}".format(err))
self.debug('认证成功,正在构建会话通道')
ssh = self.__tp.open_session()
ssh.get_pty(term='xterm', width=100, height=34)
ssh.invoke_shell()
self.__ssh_list[sid] = ssh
mw.writeLog(self.__log_type, '成功登录到SSH服务器 [{}:{}]'.format(
self.__host, self.__port))
self.debug('通道已构建')
return self.returnMsg(True, '连接成功.')
def getSshInfo(self, file):
rdata = mw.readFile(file)
destr = mw.enDoubleCrypt('mdserver-web', rdata)
return json.loads(destr)
def setAttr(self, sid, info):
self.__host = info['host'].strip()
# 外部连接获取
if not self.__host in ['127.0.0.1', 'localhost']:
dst_info = mw.getServerDir() + '/webssh/host/' + self.__host + '/info.json'
if os.path.exists(dst_info):
info = self.getSshInfo(dst_info)
if 'type' in info:
self.__type = info['type']
if 'port' in info:
self.__port = int(info['port'])
if 'username' in info:
self.__user = info['username']
if 'pkey' in info:
self.__pkey = info['pkey']
if 'password' in info:
self.__pass = info['password']
if 'pkey_passwd' in info:
self.__key_passwd = info['pkey_passwd']
# print(self.__host, self.__pass, self.__key_passwd)
try:
result = self.connect(sid)
# print(result)
except Exception as ex:
if str(ex).find("NoneType") == -1:
raise ex
return result
def send(self):
pass
def close(self):
try:
if self.__ssh:
self.__ssh.close()
if self.__tp: # 关闭宿主服务
self.__tp.close()
if self.__ps:
self.__ps.close()
except:
pass
def resize(self, sid, data):
try:
self.__ssh_list[sid].resize_pty(
width=data['cols'], height=data['rows'])
return True
except:
return False
def wsSend(self, recv):
try:
t = recv.decode("utf-8")
return emit('server_response', {'data': t})
except Exception as e:
return emit('server_response', {'data': recv})
def wsSendConnect(self):
return emit('connect', {'data': 'ok'})
def wsSendReConnect(self):
return emit('reconnect', {'data': 'ok'})
def heartbeat(self):
# limit_cos = 10
while True:
time.sleep(3)
cur_time = time.time()
for x in list(self.__ssh_list.keys()):
ssh_last_time = self.__ssh_last_request_time[x]
sid_off_cos = cur_time - ssh_last_time
# print("heartbeat off cos :", x, sid_off_cos)
if sid_off_cos > 3:
cur_ssh = self.__ssh_list[x]
if not cur_ssh:
del(self.__ssh_list[x])
del(self.__ssh_last_request_time[x])
continue
if cur_ssh.exit_status_ready():
del(self.__ssh_list[x])
del(self.__ssh_last_request_time[x])
continue
cur_ssh.send("exit\r\n")
del(self.__ssh_list[x])
del(self.__ssh_last_request_time[x])
def run(self, sid, info):
self.__sid = sid
if not self.__sid:
return self.wsSend('WebSocketIO无效')
self.__ssh_last_request_time[sid] = time.time()
if not sid in self.__ssh_list:
if type(info) == dict and 'host' in info:
result = self.setAttr(sid, info)
if result['status']:
return self.wsSendConnect()
else:
return self.wsSend(result['msg'])
else:
return self.wsSendReConnect()
result = self.returnMsg(False, '')
if sid in self.__ssh_list:
if 'resize' in info:
self.resize(sid, info)
result = self.returnMsg(True, '已连接')
if result['status']:
if type(info) == str:
time.sleep(0.1)
cur_ssh = self.__ssh_list[sid]
if cur_ssh.exit_status_ready():
self.wsSend("logout\r\n")
del(self.__ssh_list[sid])
return
cur_ssh.send(info)
try:
time.sleep(0.005)
recv = cur_ssh.recv(8192)
return self.wsSend(recv)
except Exception as ex:
return self.wsSend('')
else:
return self.wsSend(result['msg'])

View File

@@ -1,791 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 系统信息操作
# ---------------------------------------------------------------------------------
import psutil
import time
import os
import re
import math
import sys
import json
from flask import Flask, session
from flask import request
import db
import mw
import config_api
import requests
from threading import Thread
from time import sleep
def mw_async(f):
def wrapper(*args, **kwargs):
thr = Thread(target=f, args=args, kwargs=kwargs)
thr.start()
return wrapper
class system_api:
setupPath = None
pids = None
def __init__(self):
self.setupPath = mw.getServerDir()
##### ----- start ----- ###
def networkApi(self):
data = self.getNetWork()
return mw.getJson(data)
def updateServerApi(self):
stype = request.args.get('type', 'check')
version = request.args.get('version', '')
return self.updateServer(stype, version)
def systemTotalApi(self):
data = self.getSystemTotal()
return mw.getJson(data)
def diskInfoApi(self):
diskInfo = self.getDiskInfo()
return mw.getJson(diskInfo)
def setControlApi(self):
stype = request.form.get('type', '')
day = request.form.get('day', '')
data = self.setControl(stype, day)
return data
def getLoadAverageApi(self):
start = request.args.get('start', '')
end = request.args.get('end', '')
data = self.getLoadAverageData(start, end)
return mw.getJson(data)
def getCpuIoApi(self):
start = request.args.get('start', '')
end = request.args.get('end', '')
data = self.getCpuIoData(start, end)
return mw.getJson(data)
def getDiskIoApi(self):
start = request.args.get('start', '')
end = request.args.get('end', '')
data = self.getDiskIoData(start, end)
return mw.getJson(data)
def getNetworkIoApi(self):
start = request.args.get('start', '')
end = request.args.get('end', '')
data = self.getNetWorkIoData(start, end)
return mw.getJson(data)
def rememoryApi(self):
os.system('sync')
scriptFile = mw.getRunDir() + '/script/rememory.sh'
mw.execShell("/bin/bash " + scriptFile)
data = self.getMemInfo()
return mw.getJson(data)
# 重启面板
def restartApi(self):
self.restartMw()
return mw.returnJson(True, '面板已重启!')
def restartServerApi(self):
if mw.isAppleSystem():
return mw.returnJson(False, "开发环境不可重起")
self.restartServer()
return mw.returnJson(True, '正在重启服务器!')
##### ----- end ----- ###
def restartTask(self):
initd = mw.getRunDir() + '/scripts/init.d/mw'
if os.path.exists(initd):
os.system(initd + ' ' + 'restart_task')
return True
def restartMw(self):
mw.writeFile('data/restart.pl', 'True')
return True
@mw_async
def restartServer(self):
if not mw.isRestart():
return mw.returnJson(False, '请等待所有安装任务完成再执行!')
mw.execShell("sync && init 6 &")
return mw.returnJson(True, '命令发送成功!')
# 名取PID
def getPid(self, pname):
try:
if not self.pids:
self.pids = psutil.pids()
for pid in self.pids:
if psutil.Process(pid).name() == pname:
return True
return False
except:
return False
# 检查端口是否占用
def isOpen(self, port):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('127.0.0.1', int(port)))
s.shutdown(2)
return True
except:
return False
# 检测指定进程是否存活
def checkProcess(self, pid):
try:
if not self.pids:
self.pids = psutil.pids()
if int(pid) in self.pids:
return True
return False
except:
return False
def getEnvInfoApi(self, get=None):
serverInfo = {}
serverInfo['status'] = True
sdir = mw.getServerDir()
serverInfo['webserver'] = '未安装'
if os.path.exists(sdir + '/openresty/nginx/sbin/nginx'):
serverInfo['webserver'] = 'OpenResty'
serverInfo['php'] = []
phpversions = ['52', '53', '54', '55', '56', '70', '71',
'72', '73', '74', '80', '81', '82', '83', '84']
phpPath = sdir + '/php/'
for pv in phpversions:
if not os.path.exists(phpPath + pv + '/bin/php'):
continue
serverInfo['php'].append(pv)
serverInfo['mysql'] = False
if os.path.exists(sdir + '/mysql/bin/mysql'):
serverInfo['mysql'] = True
import psutil
try:
diskInfo = psutil.disk_usage('/www')
except:
diskInfo = psutil.disk_usage('/')
serverInfo['disk'] = diskInfo[2]
return mw.returnJson(True, 'ok', serverInfo)
def getPanelInfo(self, get=None):
# 取面板配置
address = mw.GetLocalIp()
try:
try:
port = web.ctx.host.split(':')[1]
except:
port = mw.readFile('data/port.pl')
except:
port = '7200'
domain = ''
if os.path.exists('data/domain.conf'):
domain = mw.readFile('data/domain.conf')
autoUpdate = ''
if os.path.exists('data/autoUpdate.pl'):
autoUpdate = 'checked'
limitip = ''
if os.path.exists('data/limitip.conf'):
limitip = mw.readFile('data/limitip.conf')
templates = []
for template in os.listdir('templates/'):
if os.path.isdir('templates/' + template):
templates.append(template)
template = mw.readFile('data/templates.pl')
check502 = ''
if os.path.exists('data/502Task.pl'):
check502 = 'checked'
return {'port': port, 'address': address, 'domain': domain, 'auto': autoUpdate, '502': check502, 'limitip': limitip, 'templates': templates, 'template': template}
def getSystemTotal(self, interval=1):
# 取系统统计信息
data = self.getMemInfo()
cpu = self.getCpuInfo(interval)
data['cpuNum'] = cpu[1]
data['cpuRealUsed'] = cpu[0]
data['time'] = self.getBootTime()
data['system'] = self.getSystemVersion()
data['isuser'] = mw.M('users').where(
'username=?', ('admin',)).count()
data['version'] = '0.0.1'
return data
def getLoadAverage(self):
c = os.getloadavg()
data = {}
data['one'] = round(float(c[0]), 2)
data['five'] = round(float(c[1]), 2)
data['fifteen'] = round(float(c[2]), 2)
data['max'] = psutil.cpu_count() * 2
data['limit'] = data['max']
data['safe'] = data['max'] * 0.75
return data
def getAllInfo(self, get):
data = {}
data['load_average'] = self.GetLoadAverage(get)
data['title'] = self.GetTitle()
data['network'] = self.GetNetWorkApi(get)
data['panel_status'] = not os.path.exists(
'/www/server/mdserver-web/data/close.pl')
import firewalls
ssh_info = firewalls.firewalls().GetSshInfo(None)
data['enable_ssh_status'] = ssh_info['status']
data['disable_ping_status'] = not ssh_info['ping']
data['time'] = self.GetBootTime()
# data['system'] = self.GetSystemVersion();
# data['mem'] = self.GetMemInfo();
data['version'] = web.ctx.session.version
return data
def getTitle(self):
titlePl = 'data/title.pl'
title = 'Linux面板'
if os.path.exists(titlePl):
title = mw.readFile(titlePl).strip()
return title
def getSystemVersion(self):
# 取操作系统版本
if mw.getOs() == 'darwin':
data = mw.execShell('sw_vers')[0]
data_list = data.strip().split("\n")
mac_version = ''
for x in data_list:
mac_version += x.split("\t")[1] + ' '
return mac_version
redhat_series = '/etc/redhat-release'
if os.path.exists(redhat_series):
version = mw.readFile('/etc/redhat-release')
version = version.replace('release ', '').strip()
return version
os_series = '/etc/os-release'
if os.path.exists(os_series):
version = mw.execShell(
"cat /etc/*-release | grep PRETTY_NAME | awk -F = '{print $2}' | awk -F '\"' '{print $2}'")
return version[0].strip()
return '未识别系统信息'
def getBootTime(self):
# 取系统启动时间
uptime = mw.readFile('/proc/uptime')
if uptime == False:
start_time = psutil.boot_time()
run_time = time.time() - start_time
else:
run_time = uptime.split()[0]
tStr = float(run_time)
min = tStr / 60
hours = min / 60
days = math.floor(hours / 24)
hours = math.floor(hours - (days * 24))
min = math.floor(min - (days * 60 * 24) - (hours * 60))
return mw.getInfo('已不间断运行: {1}天{2}小时{3}分钟', (str(int(days)), str(int(hours)), str(int(min))))
def getCpuInfo(self, interval=1):
# 取CPU信息
cpuCount = psutil.cpu_count()
cpuLogicalNum = psutil.cpu_count(logical=False)
used = psutil.cpu_percent(interval=interval)
if os.path.exists('/proc/cpuinfo'):
c_tmp = mw.readFile('/proc/cpuinfo')
d_tmp = re.findall("physical id.+", c_tmp)
cpuLogicalNum = len(set(d_tmp))
used_all = psutil.cpu_percent(percpu=True)
cpu_name = mw.getCpuType() + " * {}".format(cpuLogicalNum)
return used, cpuCount, used_all, cpu_name, cpuCount, cpuLogicalNum
def getMemInfo(self):
# 取内存信息
mem = psutil.virtual_memory()
if mw.getOs() == 'darwin':
memInfo = {
'memTotal': mem.total / 1024 / 1024
}
memInfo['memRealUsed'] = memInfo['memTotal'] * (mem.percent / 100)
else:
memInfo = {
'memTotal': mem.total / 1024 / 1024,
'memFree': mem.free / 1024 / 1024,
'memBuffers': mem.buffers / 1024 / 1024,
'memCached': mem.cached / 1024 / 1024
}
memInfo['memRealUsed'] = memInfo['memTotal'] - \
memInfo['memFree'] - memInfo['memBuffers'] - \
memInfo['memCached']
return memInfo
def getMemUsed(self):
# 取内存使用率
try:
import psutil
mem = psutil.virtual_memory()
if mw.getOs() == 'darwin':
return mem.percent
memInfo = {'memTotal': mem.total / 1024 / 1024, 'memFree': mem.free / 1024 / 1024,
'memBuffers': mem.buffers / 1024 / 1024, 'memCached': mem.cached / 1024 / 1024}
tmp = memInfo['memTotal'] - memInfo['memFree'] - \
memInfo['memBuffers'] - memInfo['memCached']
tmp1 = memInfo['memTotal'] / 100
return (tmp / tmp1)
except Exception as ex:
return 1
def getDiskInfo(self):
info = self.getDiskInfo2()
if len(info) != 0:
return info
# 取磁盘分区信息
diskIo = psutil.disk_partitions()
diskInfo = []
for disk in diskIo:
if disk[1] == '/mnt/cdrom':
continue
if disk[1] == '/boot':
continue
tmp = {}
tmp['path'] = disk[1]
size_tmp = psutil.disk_usage(disk[1])
tmp['size'] = [mw.toSize(size_tmp[0]), mw.toSize(
size_tmp[1]), mw.toSize(size_tmp[2]), str(size_tmp[3]) + '%']
diskInfo.append(tmp)
return diskInfo
def getDiskInfo2(self):
# 取磁盘分区信息
temp = mw.execShell(
"df -h -P|grep '/'|grep -v tmpfs | grep -v devfs")[0]
tempInodes = mw.execShell(
"df -i -P|grep '/'|grep -v tmpfs | grep -v devfs")[0]
temp1 = temp.split('\n')
tempInodes1 = tempInodes.split('\n')
diskInfo = []
n = 0
cuts = ['/mnt/cdrom', '/boot', '/boot/efi', '/dev',
'/dev/shm', '/zroot', '/run/lock', '/run', '/run/shm', '/run/user']
for tmp in temp1:
n += 1
inodes = tempInodes1[n - 1].split()
disk = tmp.split()
if len(disk) < 5:
continue
if disk[1].find('M') != -1:
continue
if disk[1].find('K') != -1:
continue
if len(disk[5].split('/')) > 4:
continue
if disk[5] in cuts:
continue
arr = {}
arr['path'] = disk[5]
tmp1 = [disk[1], disk[2], disk[3], disk[4]]
arr['size'] = tmp1
arr['inodes'] = [inodes[1], inodes[2], inodes[3], inodes[4]]
diskInfo.append(arr)
return diskInfo
# 清理系统垃圾
def clearSystem(self, get):
count = total = 0
tmp_total, tmp_count = self.ClearMail()
count += tmp_count
total += tmp_total
tmp_total, tmp_count = self.ClearOther()
count += tmp_count
total += tmp_total
return count, total
# 清理邮件日志
def clearMail(self):
rpath = '/var/spool'
total = count = 0
import shutil
con = ['cron', 'anacron', 'mail']
for d in os.listdir(rpath):
if d in con:
continue
dpath = rpath + '/' + d
time.sleep(0.2)
num = size = 0
for n in os.listdir(dpath):
filename = dpath + '/' + n
fsize = os.path.getsize(filename)
size += fsize
if os.path.isdir(filename):
shutil.rmtree(filename)
else:
os.remove(filename)
print('mail clear ok')
num += 1
total += size
count += num
return total, count
# 清理其它
def clearOther(self):
clearPath = [
{'path': '/www/server/mdserver-web', 'find': 'testDisk_'},
{'path': '/www/wwwlogs', 'find': 'log'},
{'path': '/tmp', 'find': 'panelBoot.pl'},
{'path': '/www/server/mdserver-web/install', 'find': '.rpm'}
]
total = count = 0
for c in clearPath:
for d in os.listdir(c['path']):
if d.find(c['find']) == -1:
continue
filename = c['path'] + '/' + d
fsize = os.path.getsize(filename)
total += fsize
if os.path.isdir(filename):
shutil.rmtree(filename)
else:
os.remove(filename)
count += 1
mw.restartWeb()
os.system('echo > /tmp/panelBoot.pl')
return total, count
def psutilNetIoCounters(self):
'''
统计网卡流量
'''
stat_pl = 'data/only_netio_counters.pl'
if os.path.exists(stat_pl):
local_lo = (0, 0, 0, 0)
ioName = psutil.net_io_counters(pernic=True).keys()
for x in ioName:
if x.find("lo") > -1:
local_lo = psutil.net_io_counters(
pernic=True).get(x)[:4]
all_io = psutil.net_io_counters()[:4]
result_io = tuple([all_io[i] - local_lo[i]
for i in range(0, len(all_io))])
# print(local_lo)
# print(all_io)
# print(result_io)
return result_io
return psutil.net_io_counters()[:4]
def getNetWork(self):
# 取网络流量信息
try:
# 取网络流量信息
networkIo = self.psutilNetIoCounters()
if not "otime" in session:
session['up'] = networkIo[0]
session['down'] = networkIo[1]
session['otime'] = time.time()
ntime = time.time()
networkInfo = {}
networkInfo['upTotal'] = networkIo[0]
networkInfo['downTotal'] = networkIo[1]
networkInfo['up'] = round(float(
networkIo[0] - session['up']) / 1024 / (ntime - session['otime']), 2)
networkInfo['down'] = round(
float(networkIo[1] - session['down']) / 1024 / (ntime - session['otime']), 2)
networkInfo['downPackets'] = networkIo[3]
networkInfo['upPackets'] = networkIo[2]
# print networkIo[1], session['down'], ntime, session['otime']
session['up'] = networkIo[0]
session['down'] = networkIo[1]
session['otime'] = time.time()
networkInfo['cpu'] = self.getCpuInfo()
networkInfo['load'] = self.getLoadAverage()
networkInfo['mem'] = self.getMemInfo()
return networkInfo
except Exception as e:
print("getNetWork error:", e)
return None
def getNetWorkIoData(self, start, end):
# 取指定时间段的网络Io
data = mw.M('network').dbfile('system').where("addtime>=? AND addtime<=?", (start, end)).field(
'id,up,down,total_up,total_down,down_packets,up_packets,addtime').order('id asc').select()
return self.toAddtime(data)
def getDiskIoData(self, start, end):
# 取指定时间段的磁盘Io
data = mw.M('diskio').dbfile('system').where("addtime>=? AND addtime<=?", (start, end)).field(
'id,read_count,write_count,read_bytes,write_bytes,read_time,write_time,addtime').order('id asc').select()
return self.toAddtime(data)
def getCpuIoData(self, start, end):
# 取指定时间段的CpuIo
data = mw.M('cpuio').dbfile('system').where("addtime>=? AND addtime<=?",
(start, end)).field('id,pro,mem,addtime').order('id asc').select()
return self.toAddtime(data, True)
def getLoadAverageData(self, start, end):
data = mw.M('load_average').dbfile('system').where("addtime>=? AND addtime<=?", (
start, end)).field('id,pro,one,five,fifteen,addtime').order('id asc').select()
return self.toAddtime(data)
# 格式化addtime列
def toAddtime(self, data, tomem=False):
import time
if tomem:
import psutil
mPre = (psutil.virtual_memory().total / 1024 / 1024) / 100
length = len(data)
he = 1
if length > 100:
he = 1
if length > 1000:
he = 3
if length > 10000:
he = 15
if he == 1:
for i in range(length):
data[i]['addtime'] = time.strftime(
'%m/%d %H:%M', time.localtime(float(data[i]['addtime'])))
if tomem and data[i]['mem'] > 100:
data[i]['mem'] = data[i]['mem'] / mPre
return data
else:
count = 0
tmp = []
for value in data:
if count < he:
count += 1
continue
value['addtime'] = time.strftime(
'%m/%d %H:%M', time.localtime(float(value['addtime'])))
if tomem and value['mem'] > 100:
value['mem'] = value['mem'] / mPre
tmp.append(value)
count = 0
return tmp
def setControl(self, stype, day):
filename = 'data/control.conf'
stat_pl = 'data/only_netio_counters.pl'
if stype == '0':
mw.execShell("rm -rf " + filename)
elif stype == '1':
_day = int(day)
if _day < 1:
return mw.returnJson(False, "设置失败!")
mw.writeFile(filename, day)
elif stype == '2':
mw.execShell("rm -rf " + stat_pl)
elif stype == '3':
mw.execShell("echo 'True' > " + stat_pl)
elif stype == 'del':
if not mw.isRestart():
return mw.returnJson(False, '请等待所有安装任务完成再执行')
os.remove("data/system.db")
sql = db.Sql().dbfile('system')
csql = mw.readFile('data/sql/system.sql')
csql_list = csql.split(';')
for index in range(len(csql_list)):
sql.execute(csql_list[index], ())
return mw.returnJson(True, "监控服务已关闭")
else:
data = {}
if os.path.exists(filename):
try:
data['day'] = int(mw.readFile(filename))
except:
data['day'] = 30
data['status'] = True
else:
data['day'] = 30
data['status'] = False
if os.path.exists(stat_pl):
data['stat_all_status'] = True
else:
data['stat_all_status'] = False
return mw.getJson(data)
return mw.returnJson(True, "设置成功!")
def versionDiff(self, old, new):
'''
test 测试
new 有新版本
none 没有新版本
'''
new_list = new.split('.')
if len(new_list) > 3:
return 'test'
old_list = old.split('.')
ret = 'none'
isHasNew = True
if int(new_list[0]) == int(old_list[0]) and int(new_list[1]) == int(old_list[1]) and int(new_list[2]) == int(old_list[2]):
isHasNew = False
if isHasNew:
return 'new'
return ret
def getServerInfo(self):
import urllib.request
import ssl
upAddr = 'https://api.github.com/repos/midoks/mdserver-web/releases/latest'
try:
context = ssl._create_unverified_context()
req = urllib.request.urlopen(upAddr, context=context, timeout=3)
result = req.read().decode('utf-8')
version = json.loads(result)
return version
except Exception as e:
print('getServerInfo', e)
return {}
def updateServer(self, stype, version=''):
# 更新服务
try:
if not mw.isRestart():
return mw.returnJson(False, '请等待所有安装任务完成再执行!')
version_new_info = self.getServerInfo()
version_now = config_api.config_api().getVersion()
new_ver = version_new_info['name']
if stype == 'check':
if not 'name' in version_new_info:
return mw.returnJson(False, '服务器数据或网络有问题!')
diff = self.versionDiff(version_now, new_ver)
if diff == 'new':
return mw.returnJson(True, '有新版本!', new_ver)
elif diff == 'test':
return mw.returnJson(True, '有测试版本!', new_ver)
else:
return mw.returnJson(False, '已经是最新,无需更新!')
if stype == 'info':
if not 'name' in version_new_info:
return mw.returnJson(False, '服务器数据有问题!')
diff = self.versionDiff(version_now, new_ver)
data = {}
data['version'] = new_ver
data['content'] = version_new_info[
'body'].replace("\n", "<br/>")
return mw.returnJson(True, '更新信息!', data)
if stype == 'update':
if version == '':
return mw.returnJson(False, '缺少版本信息!')
if new_ver != version:
return mw.returnJson(False, '更新失败,请重试!')
toPath = mw.getRootDir() + '/temp'
if not os.path.exists(toPath):
mw.execShell('mkdir -p ' + toPath)
newUrl = "https://github.com/midoks/mdserver-web/archive/refs/tags/" + version + ".zip"
dist_mw = toPath + '/mw.zip'
if not os.path.exists(dist_mw):
mw.execShell(
'wget --no-check-certificate -O ' + dist_mw + ' ' + newUrl)
dist_to = toPath + "/mdserver-web-" + version
if not os.path.exists(dist_to):
os.system('unzip -o ' + toPath +
'/mw.zip' + ' -d ' + toPath)
cmd_cp = 'cp -rf ' + toPath + '/mdserver-web-' + \
version + '/* ' + mw.getServerDir() + '/mdserver-web'
mw.execShell(cmd_cp)
mw.execShell('rm -rf ' + toPath + '/mdserver-web-' + version)
mw.execShell('rm -rf ' + toPath + '/mw.zip')
update_env = '''
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
if [ ! -f /www/server/mdserver-web/bin/activate ];then
cd /www/server/mdserver-web && python3 -m venv .
cd /www/server/mdserver-web && source /www/server/mdserver-web/bin/activate
else
cd /www/server/mdserver-web && source /www/server/mdserver-web/bin/activate
fi
cn=$(curl -fsSL -m 10 http://ipinfo.io/json | grep "\"country\": \"CN\"")
PIPSRC="https://pypi.python.org/simple"
if [ ! -z "$cn" ];then
PIPSRC="https://pypi.tuna.tsinghua.edu.cn/simple"
fi
cd /www/server/mdserver-web && pip3 install -r /www/server/mdserver-web/requirements.txt -i $PIPSRC
'''
os.system(update_env)
self.restartMw()
return mw.returnJson(True, '安装更新成功!')
return mw.returnJson(False, '已经是最新,无需更新!')
except Exception as ex:
# print('updateServer', ex)
return mw.returnJson(False, "连接服务器失败!" + str(ex))
# 修复面板
def repPanel(self, get):
vp = ''
if mw.readFile('/www/server/mdserver-web/class/common.py').find('checkSafe') != -1:
vp = '_pro'
mw.ExecShell("wget -O update.sh " + mw.get_url() +
"/install/update" + vp + ".sh && bash update.sh")
if hasattr(web.ctx.session, 'getCloudPlugin'):
del(web.ctx.session['getCloudPlugin'])
return True

View File

@@ -1,103 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 任务页操作
# ---------------------------------------------------------------------------------
import psutil
import time
import os
import sys
import mw
import re
import json
import pwd
from flask import request
class task_api:
def __init__(self):
pass
def countApi(self):
c = mw.M('tasks').where("status!=?", ('1',)).count()
return str(c)
def listApi(self):
p = request.form.get('p', '1')
limit = request.form.get('limit', '10').strip()
search = request.form.get('search', '').strip()
start = (int(p) - 1) * int(limit)
limit_str = str(start) + ',' + str(limit)
_list = mw.M('tasks').where('', ()).field(
'id,name,type,status,addtime,start,end').limit(limit_str).order('id desc').select()
_ret = {}
_ret['data'] = _list
count = mw.M('tasks').where('', ()).count()
_page = {}
_page['count'] = count
_page['tojs'] = 'remind'
_page['p'] = p
# return data
_ret['count'] = count
_ret['page'] = mw.getPage(_page)
return mw.getJson(_ret)
def getExecLogApi(self):
file = os.getcwd() + "/tmp/panelExec.log"
v = mw.getLastLine(file, 100)
return v
def getTaskSpeedApi(self):
tempFile = mw.getRunDir() + '/tmp/panelExec.log'
freshFile = mw.getRunDir() + '/tmp/panelFresh'
find = mw.M('tasks').where('status=? OR status=?',
('-1', '0')).field('id,type,name,execstr').find()
if not len(find):
return mw.returnJson(False, '当前没有任务队列在执行-2!')
mw.triggerTask()
data = {}
data['name'] = find['name']
data['execstr'] = find['execstr']
if find['type'] == 'download':
readLine = ""
for i in range(3):
try:
readLine = mw.readFile(tempFile)
if len(readLine) > 10:
data['msg'] = json.loads(readLine)
data['isDownload'] = True
break
except Exception as e:
if i == 2:
mw.M('tasks').where("id=?", (find['id'],)).save(
'status', ('0',))
return mw.returnJson(False, '当前没有任务队列在执行-4:' + str(e))
time.sleep(0.5)
else:
data['msg'] = mw.getLastLine(tempFile, 10)
data['isDownload'] = False
data['task'] = mw.M('tasks').where("status!=?", ('1',)).field(
'id,status,name,type').order("id asc").select()
return mw.getJson(data)

View File

@@ -1,143 +0,0 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 验证码操作
# ---------------------------------------------------------------------------------
import random
import math
from PIL import Image, ImageDraw, ImageFont, ImageFilter
class vieCode:
__fontSize = 20 # 字体大小
__width = 120 # 画布宽度
__heigth = 45 # 画布高度
__length = 4 # 验证码长度
__draw = None # 画布
__img = None # 图片资源
__code = None # 验证码字符
__str = None # 自定义验证码字符集
__inCurve = True # 是否画干扰线
__inNoise = True # 是否画干扰点
__type = 2 # 验证码类型 1、纯字母 2、数字字母混合
__fontPatn = 'class/fonts/2.ttf' # 字体
def GetCodeImage(self, size=80, length=4):
'''获取验证码图片
@param int size 验证码大小
@param int length 验证码长度
'''
# 准备基础数据
self.__length = length
self.__fontSize = size
self.__width = self.__fontSize * self.__length
self.__heigth = int(self.__fontSize * 1.5)
# 生成验证码图片
self.__createCode()
self.__createImage()
self.__createNoise()
self.__printString()
self.__cerateFilter()
return self.__img, self.__code
def __cerateFilter(self):
'''模糊处理'''
self.__img = self.__img.filter(ImageFilter.BLUR)
filter = ImageFilter.ModeFilter(8)
self.__img = self.__img.filter(filter)
def __createCode(self):
'''创建验证码字符'''
# 是否自定义字符集合
if not self.__str:
# 源文本
number = "3456789"
srcLetter = "qwertyuipasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
srcUpper = srcLetter.upper()
if self.__type == 1:
self.__str = number
else:
self.__str = srcLetter + srcUpper + number
# 构造验证码
self.__code = random.sample(self.__str, self.__length)
def __createImage(self):
'''创建画布'''
bgColor = (random.randint(200, 255), random.randint(
200, 255), random.randint(200, 255))
self.__img = Image.new('RGB', (self.__width, self.__heigth), bgColor)
self.__draw = ImageDraw.Draw(self.__img)
def __createNoise(self):
'''画干扰点'''
if not self.__inNoise:
return
font = ImageFont.truetype(self.__fontPatn, int(self.__fontSize / 1.5))
for i in range(5):
# 杂点颜色
noiseColor = (random.randint(150, 200), random.randint(
150, 200), random.randint(150, 200))
putStr = random.sample(self.__str, 2)
for j in range(2):
# 绘杂点
size = (random.randint(-10, self.__width),
random.randint(-10, self.__heigth))
self.__draw.text(size, putStr[j], font=font, fill=noiseColor)
pass
def __createCurve(self):
'''画干扰线'''
if not self.__inCurve:
return
x = y = 0
# 计算曲线系数
a = random.uniform(1, self.__heigth / 2)
b = random.uniform(-self.__width / 4, self.__heigth / 4)
f = random.uniform(-self.__heigth / 4, self.__heigth / 4)
t = random.uniform(self.__heigth, self.__width * 2)
xend = random.randint(self.__width / 2, self.__width * 2)
w = (2 * math.pi) / t
# 画曲线
color = (random.randint(30, 150), random.randint(
30, 150), random.randint(30, 150))
for x in range(xend):
if w != 0:
for k in range(int(self.__heigth / 10)):
y = a * math.sin(w * x + f) + b + self.__heigth / 2
i = int(self.__fontSize / 5)
while i > 0:
px = x + i
py = y + i + k
self.__draw.point((px, py), color)
i -= i
def __printString(self):
'''打印验证码字符串'''
font = ImageFont.truetype(self.__fontPatn, self.__fontSize)
x = 0
# 打印字符到画板
for i in range(self.__length):
# 设置字体随机颜色
color = (random.randint(30, 150), random.randint(
30, 150), random.randint(30, 150))
# 计算座标
x = random.uniform(self.__fontSize * i * 0.95,
self.__fontSize * i * 1.1)
y = self.__fontSize * random.uniform(0.3, 0.5)
# 打印字符
self.__draw.text((x, y), self.__code[i], font=font, fill=color)

View File

@@ -1,5 +0,0 @@
- fcgi-client.py
```
https://pypi.org/project/flup6/1.1.1/#files
```

View File

@@ -1,208 +0,0 @@
# coding:utf-8
import json
import os
import time
import re
import sys
import time
import struct
import fcgi_client
FCGI_Header = '!BBHHBx'
if sys.version_info[0] == 2:
try:
from cStringIO import StringIO
except:
from StringIO import StringIO
else:
from io import BytesIO as StringIO
def get_header_data(sock):
'''
@name 获取头部32KB数据
@param sock socketobject(fastcgi套接字对象)
@return bytes
'''
headers_data = b''
total_len = 0
header_len = 1024 * 128
while True:
fastcgi_header = sock.recv(8)
if not fastcgi_header:
break
if len(fastcgi_header) != 8:
headers_data += fastcgi_header
break
fast_pack = struct.unpack(FCGI_Header, fastcgi_header)
if fast_pack[1] == 3:
break
tlen = fast_pack[3]
while tlen > 0:
sd = sock.recv(tlen)
if not sd:
break
headers_data += sd
tlen -= len(sd)
total_len += fast_pack[3]
if fast_pack[4]:
sock.recv(fast_pack[4])
if total_len > header_len:
break
return headers_data
def format_header_data(headers_data):
'''
@name 格式化响应头
@param headers_data bytes(fastcgi头部32KB数据)
@return status int(响应状态), headers dict(响应头), bdata bytes(格式化响应头后的多余数据)
'''
status = '200 OK'
headers = {}
pos = 0
while True:
eolpos = headers_data.find(b'\n', pos)
if eolpos < 0:
break
line = headers_data[pos:eolpos - 1]
pos = eolpos + 1
line = line.strip()
if len(line) < 2:
break
if line.find(b':') == -1:
continue
header, value = line.split(b':', 1)
header = header.strip()
value = value.strip()
if isinstance(header, bytes):
header = header.decode()
value = value.decode()
if header == 'Status':
status = value
if status.find(' ') < 0:
status += ' BTPanel'
else:
headers[header] = value
bdata = headers_data[pos:]
status = int(status.split(' ')[0])
return status, headers, bdata
def resp_sock(sock, bdata):
'''
@name 以流的方式发送剩余数据
@param sock socketobject(fastcgi套接字对象)
@param bdata bytes(格式化响应头后的多余数据)
@return yield bytes
'''
# 发送除响应头以外的多余头部数据
yield bdata
while True:
fastcgi_header = sock.recv(8)
if not fastcgi_header:
break
if len(fastcgi_header) != 8:
yield fastcgi_header
break
fast_pack = struct.unpack(FCGI_Header, fastcgi_header)
if fast_pack[1] == 3:
break
tlen = fast_pack[3]
while tlen > 0:
sd = sock.recv(tlen)
if not sd:
break
tlen -= len(sd)
if sd:
yield sd
if fast_pack[4]:
sock.recv(fast_pack[4])
sock.close()
class fpm(object):
def __init__(self, sock=None, document_root='', last_path=''):
'''
@name 实例化FPM对象
@param sock string(unixsocket路径)
@param document_root string(PHP文档根目录)
@return FPM
'''
if sock:
self.fcgi_sock = sock
if document_root[-1:] != '/':
document_root += '/'
self.document_root = document_root
self.last_path = last_path
def load_url_public(self, url, content=b'', method='GET', content_type='application/x-www-form-urlencoded'):
'''
@name 转发URL到PHP-FPM 公共
@param url string(URI地址)
@param content stream(POST数据io对象)
@return fastcgi-socket
'''
fcgi = fcgi_client.FCGIApp(connect=self.fcgi_sock)
try:
script_name, query_string = url.split('?')
except ValueError:
script_name = url
query_string = ''
content_length = len(content)
if content:
content = StringIO(content)
env = {
'SCRIPT_FILENAME': '%s%s' % (self.document_root, script_name),
'QUERY_STRING': query_string,
'REQUEST_METHOD': method,
'SCRIPT_NAME': self.last_path + script_name,
'REQUEST_URI': url,
'GATEWAY_INTERFACE': 'CGI/1.1',
'SERVER_SOFTWARE': 'MW-Panel',
'REDIRECT_STATUS': '200',
'CONTENT_TYPE': content_type,
'CONTENT_LENGTH': str(content_length),
'DOCUMENT_URI': script_name,
'DOCUMENT_ROOT': self.document_root,
'SERVER_PROTOCOL': 'HTTP/1.1',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '7200',
'SERVER_ADDR': '127.0.0.1',
'SERVER_PORT': '80',
'SERVER_NAME': 'MW-Panel'
}
fpm_sock = fcgi(env, content)
_data = b''
while True:
fastcgi_header = fpm_sock.recv(8)
if not fastcgi_header:
break
if len(fastcgi_header) != 8:
_data += fastcgi_header
break
fast_pack = struct.unpack(FCGI_Header, fastcgi_header)
if fast_pack[1] == 3:
break
tlen = fast_pack[3]
while tlen > 0:
sd = fpm_sock.recv(tlen)
if not sd:
break
tlen -= len(sd)
_data += sd
if fast_pack[4]:
fpm_sock.recv(fast_pack[4])
status, headers, data = format_header_data(_data)
return data

View File

@@ -1,116 +0,0 @@
# coding: utf-8
import re
import os
import sys
import pymysql.cursors
class ORM:
__DB_PASS = None
__DB_USER = 'root'
__DB_PORT = 3306
__DB_NAME = ''
__DB_HOST = 'localhost'
__DB_CONN = None
__DB_CUR = None
__DB_ERR = None
__DB_CNF = '/etc/my.cnf'
__DB_SOCKET = '/www/server/mysql/mysql.sock'
__DB_CHARSET = "utf8"
def __Conn(self):
'''连接数据库'''
try:
if os.path.exists(self.__DB_SOCKET):
try:
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
database=self.__DB_NAME,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
except Exception as e:
self.__DB_HOST = '127.0.0.1'
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
database=self.__DB_NAME,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
unix_socket=self.__DB_SOCKET, cursorclass=pymysql.cursors.DictCursor)
else:
try:
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
database=self.__DB_NAME,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
cursorclass=pymysql.cursors.DictCursor)
except Exception as e:
self.__DB_HOST = '127.0.0.1'
self.__DB_CONN = pymysql.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
database=self.__DB_NAME,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1,
cursorclass=pymysql.cursors.DictCursor)
self.__DB_CUR = self.__DB_CONN.cursor()
return True
except Exception as e:
self.__DB_ERR = e
return False
def setDbConf(self, conf):
self.__DB_CNF = conf
def setSocket(self, sock):
self.__DB_SOCKET = sock
def setCharset(self, charset):
self.__DB_CHARSET = charset
def setHost(self, host):
self.__DB_HOST = host
def setPort(self, port):
self.__DB_PORT = port
def setUser(self, user):
self.__DB_USER = user
def setPwd(self, pwd):
self.__DB_PASS = pwd
def getPwd(self):
return self.__DB_PASS
def setDbName(self, name):
self.__DB_NAME = name
def execute(self, sql):
# 执行SQL语句返回受影响行
if not self.__Conn():
return self.__DB_ERR
try:
result = self.__DB_CUR.execute(sql)
self.__DB_CONN.commit()
self.__Close()
return result
except Exception as ex:
return ex
def query(self, sql):
# 执行SQL语句返回数据集
if not self.__Conn():
return self.__DB_ERR
try:
self.__DB_CUR.execute(sql)
result = self.__DB_CUR.fetchall()
# print(result)
# 将元组转换成列表
# data = map(list, result)
self.__Close()
return result
except Exception as ex:
return ex
def __Close(self):
# 关闭连接
self.__DB_CUR.close()
self.__DB_CONN.close()

View File

@@ -1,115 +0,0 @@
# coding: utf-8
import re
import os
import sys
class ORM:
__DB_PASS = None
__DB_USER = 'root'
__DB_PORT = 3306
__DB_HOST = 'localhost'
__DB_CONN = None
__DB_CUR = None
__DB_ERR = None
__DB_CNF = '/etc/my.cnf'
__DB_SOCKET = '/www/server/mysql/mysql.sock'
__DB_CHARSET = 'utf8'
def __Conn(self):
'''连接MYSQL数据库'''
try:
try:
import MySQLdb
except Exception as ex:
self.__DB_ERR = ex
return False
# print(self.__DB_HOST)
# print(self.__DB_USER)
# print(self.__DB_PASS)
# print(self.__DB_PORT)
# print(self.__DB_CHARSET)
# print(self.__DB_SOCKET)
if os.path.exists(self.__DB_SOCKET):
try:
self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, unix_socket=self.__DB_SOCKET)
except Exception as e:
print(e)
self.__DB_HOST = '127.0.0.1'
self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1, unix_socket=self.__DB_SOCKET)
else:
try:
self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1)
except Exception as e:
self.__DB_HOST = '127.0.0.1'
self.__DB_CONN = MySQLdb.connect(host=self.__DB_HOST, user=self.__DB_USER, passwd=self.__DB_PASS,
port=int(self.__DB_PORT), charset=self.__DB_CHARSET, connect_timeout=1)
self.__DB_CUR = self.__DB_CONN.cursor()
return True
except MySQLdb.Error as e:
self.__DB_ERR = e
return False
def setDbConf(self, conf):
self.__DB_CNF = conf
def setSocket(self, sock):
self.__DB_SOCKET = sock
def setCharset(self, charset):
self.__DB_CHARSET = charset
def setPort(self, port):
self.__DB_PORT = port
def setPwd(self, pwd):
self.__DB_PASS = pwd
def getPwd(self):
return self.__DB_PASS
def setDbName(self, name):
self.__DB_NAME = name
def setUser(self, user):
self.__DB_USER = user
def execute(self, sql):
# 执行SQL语句返回受影响行
if not self.__Conn():
return self.__DB_ERR
try:
result = self.__DB_CUR.execute(sql)
self.__DB_CONN.commit()
self.__Close()
return result
except Exception as ex:
return ex
def query(self, sql):
# 执行SQL语句返回数据集
if not self.__Conn():
return self.__DB_ERR
try:
self.__DB_CUR.execute(sql)
result = self.__DB_CUR.fetchall()
# 将元组转换成列表
data = map(list, result)
self.__Close()
return data
except Exception as ex:
return ex
# 关闭连接
def __Close(self):
self.__DB_CUR.close()
self.__DB_CONN.close()

View File

@@ -3,5 +3,6 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/loc
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
find . -name .DS_Store | xargs rm -rf
find . -type d -name "*.pyc" | xargs rm -rf

95
cli.sh
View File

@@ -1,76 +1,107 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
DIR=$(cd "$(dirname "$0")"; pwd)
MDIR=$(dirname "$DIR")
PATH=$PATH:$DIR/bin
if [ -f bin/activate ];then
source bin/activate
fi
export LC_ALL="en_US.UTF-8"
# echo $DIR
PATH=$PATH:$DIR/bin
if [ -f ${DIR}/bin/activate ];then
source ${DIR}/bin/activate
if [ "$?" != "0" ];then
echo "load local python env fail!"
fi
fi
mw_start_task()
{
isStart=$(ps aux |grep 'task.py'|grep -v grep|awk '{print $2}')
isStart=$(ps aux |grep 'panel_task.py'|grep -v grep|awk '{print $2}')
if [ "$isStart" == '' ];then
echo -e "Starting mw-tasks... \c"
cd $DIR && python3 task.py >> ${DIR}/logs/task.log 2>&1 &
echo -e "starting mw-tasks... \c"
cd $DIR && python3 panel_task.py >> ${DIR}/logs/panel_task.log 2>&1 &
sleep 0.3
isStart=$(ps aux |grep 'task.py'|grep -v grep|awk '{print $2}')
isStart=$(ps aux |grep 'panel_task.py'|grep -v grep|awk '{print $2}')
if [ "$isStart" == '' ];then
echo -e "\033[31mfailed\033[0m"
echo '------------------------------------------------------'
tail -n 20 $DIR/logs/task.log
tail -n 20 $DIR/logs/panel_task.log
echo '------------------------------------------------------'
echo -e "\033[31mError: mw-tasks service startup failed.\033[0m"
return;
fi
echo -e "\033[32mdone\033[0m"
else
echo "Starting mw-tasks... mw-tasks (pid $(echo $isStart)) already running"
echo "starting mw-tasks... mw-tasks (pid $(echo $isStart)) already running"
fi
}
mw_start(){
gunicorn -c setting.py app:app
#安全启动
# 后台任务
mw_start_task
cd ${DIR}/web && gunicorn -c setting.py app:app
}
mw_start_debug(){
python3 task.py >> $DIR/logs/task.log 2>&1 &
port=7200
if [ ! -f $DIR/logs/panel_task.log ];then
echo '' > $DIR/logs/panel_task.log
fi
python3 panel_task.py >> $DIR/logs/panel_task.log 2>&1 &
port=7200
if [ -f /www/server/mdserver-web/data/port.pl ];then
port=$(cat /www/server/mdserver-web/data/port.pl)
fi
# gunicorn -b :${port} -k gevent -w 1 app:app
gunicorn -b :${port} -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
if [ -f ${DIR}/data/port.pl ];then
port=$(cat ${DIR}/data/port.pl)
fi
cd ${DIR}/web && gunicorn -b :${port} -k eventlet -w 1 app:app
# cd ${DIR}/web && gunicorn -b :${port} -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
}
mw_start_debug2(){
python3 task.py >> $DIR/logs/task.log 2>&1 &
gunicorn -b :7200 -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
mw_start_panel(){
port=7200
if [ -f ${DIR}/data/port.pl ];then
port=$(cat ${DIR}/data/port.pl)
fi
cd ${DIR}/web && gunicorn -b :${port} -k eventlet -w 1 app:app
# cd ${DIR}/web && gunicorn -b :${port} -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
}
mw_start_bgtask(){
cd ${DIR}/web && gunicorn -c setting.py app:app
cd ${DIR} && python3 panel_task.py
}
mw_stop()
{
PLIST=`ps -ef|grep app:app |grep -v grep|awk '{print $2}'`
for i in $PLIST
APP_LIST=`ps -ef|grep app:app |grep -v grep|awk '{print $2}'`
APP_LIST=($APP_LIST)
for p in ${APP_LIST[@]}
do
kill -9 $i > /dev/null 2>&1
kill -9 $p > /dev/null 2>&1
done
pids=`ps -ef|grep task.py | grep -v grep |awk '{print $2}'`
arr=($pids)
for p in ${arr[@]}
TASK_LIST=`ps -ef|grep panel_task.py | grep -v grep |awk '{print $2}'`
TASK_LIST=($TASK_LIST)
for p in ${TASK_LIST[@]}
do
kill -9 $p > /dev/null 2>&1
done
zzpids=`ps -A -o stat,ppid,pid | grep -e '^[Zz]' | awk '{print $2}'`
zzpids=($zzpids)
for p in ${zzpids[@]}
do
kill -9 ${p} > /dev/null 2>&1
done
}
case "$1" in
@@ -84,8 +115,12 @@ case "$1" in
mw_stop
mw_start_debug
;;
'debug2')
'panel')
mw_stop
mw_start_debug2
mw_start_panel
;;
'task')
# mw_stop
mw_start_bgtask
;;
esac

20
cmd.md
View File

@@ -4,7 +4,25 @@
- 面板相关命令
```
/etc/init.d/mw default
mw start | 启动面板服务器
mw stop | 停止面板服务器
mw restart | 重启面板服务器
mw default | 显示登录信息
mw db | 快捷连接MySQL
mw redis | 快捷连接Redis
mw valkey | 快捷连接valkey
mw mongodb | 快捷连接MongoDB
mw pgdb | 快捷连接PostgreSQL
----------------------------------------
mw open | 开启面板
mw close | 关闭面板
mw debug | 开发测试
mw venv | 进入虚拟环境
mw mirror | 切换镜像
mw install_app | 快捷安装常用软件
mw update | 更新到正式
mw dev/update_dev | 更新到开发
service mw [start|stop|reload|restart|status]
```

View File

@@ -16,6 +16,7 @@ cd /www/server/mdserver-web/plugins/php/versions && bash all_test.sh
| CentOS 9 Stream |✅ |✅ |
| Debian 10.3 |✅ |✅ |
| Debian 11.3 |✅ |✅ |
| Debian 12.0 |✅ |✅ |
| Ubuntu 18.04 |✅ |✅ |
| Ubuntu 20.04 |✅ |✅ |
| Ubuntu 22.04 |✅ |✅ |
@@ -28,23 +29,24 @@ cd /www/server/mdserver-web/plugins/php/versions && bash all_test.sh
| 系统名称 |PHP53 |PHP54 |PHP55 |PHP56 |PHP70 |PHP71 |PHP72 |PHP73 |PHP74 |PHP80 |PHP81 |
| ----------------- |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
| CentOS 7.9 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 8.4 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 8 Stream |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 9 Stream |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Debian 10.3 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Debian 11.3 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 18.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 20.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 22.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Fedora 31 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Fedora 32 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| AlmaLinux 9 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| RockyLinux 8.6 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Arch Linux |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| openSUSE 15.4 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| 系统名称 |PHP53 |PHP54 |PHP55 |PHP56 |PHP70 |PHP71 |PHP72 |PHP73 |PHP74 |PHP80 |PHP81 |PHP82 |PHP83 |PHP84 |
| ----------------- |-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
| CentOS 7.9 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 8.4 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 8 Stream |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| CentOS 9 Stream |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Debian 10.3 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Debian 11.3 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Debian 12 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 18.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 20.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Ubuntu 22.04 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Fedora 31 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Fedora 32 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| AlmaLinux 9 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| RockyLinux 8.6 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| Arch Linux |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
| openSUSE 15.4 |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |✅ |
@@ -56,6 +58,7 @@ cd /www/server/mdserver-web/plugins/php/versions && bash all_test.sh
| CentOS 9 Stream |✅ |✅ |✅ |✅ |
| Debian 10.3 |✅ |✅ |✅ |✅ |
| Debian 11.3 |✅ |✅ |✅ |✅ |
| Debian 12 |✅ |✅ |✅ |✅ |
| Ubuntu 18.04 |✅ |✅ |✅ |✅ |
| Ubuntu 20.04 |✅ |✅ |✅ |✅ |
| Ubuntu 22.04 |✅ |✅ |✅ |✅ |

4
data/README.md Normal file
View File

@@ -0,0 +1,4 @@
# 自动生成
certificate.pem - 证书信息
privateKey.pem - 私钥

View File

@@ -1,42 +0,0 @@
[
{
"title":"全部",
"type":0,
"ps":""
},
{
"title":"已安装",
"type":-1,
"ps":""
},
{
"title":"运行环境",
"type":1,
"ps":""
},
{
"title":"数据软件",
"type":2,
"ps":""
},
{
"title":"代码管理",
"type":3,
"ps":""
},
{
"title":"系统工具",
"type":4,
"ps":""
},
{
"title":"其他插件",
"type":5,
"ps":""
},
{
"title":"辅助插件",
"type":6,
"ps":""
}
]

View File

@@ -1 +0,0 @@
True

View File

@@ -1,134 +0,0 @@
CREATE TABLE IF NOT EXISTS `backup` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`type` INTEGER,
`name` TEXT,
`pid` INTEGER,
`filename` TEXT,
`size` INTEGER,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `binding` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`pid` INTEGER,
`domain` TEXT,
`path` TEXT,
`port` INTEGER,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `crontab` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`type` TEXT,
`where1` TEXT,
`where_hour` INTEGER,
`where_minute` INTEGER,
`echo` TEXT,
`addtime` TEXT,
`status` INTEGER DEFAULT '1',
`save` INTEGER DEFAULT '3',
`backup_to` TEXT DEFAULT 'off',
`sname` TEXT,
`sbody` TEXT,
'stype' TEXT,
`urladdress` TEXT
);
CREATE TABLE IF NOT EXISTS `firewall` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`port` TEXT,
`ps` TEXT,
`addtime` TEXT
);
INSERT INTO `firewall` (`id`, `port`, `ps`, `addtime`) VALUES
(1, '80', '网站默认端口', '0000-00-00 00:00:00'),
(2, '22', 'SSH远程管理服务', '0000-00-00 00:00:00'),
(3, '443', 'HTTPS', '0000-00-00 00:00:00'),
(4, '888', 'phpMyAdmin默认端口', '0000-00-00 00:00:00');
CREATE TABLE IF NOT EXISTS `logs` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`type` TEXT,
`log` TEXT,
`uid` TEXT,
`addtime` TEXT
);
ALTER TABLE `logs` ADD COLUMN `uid` INTEGER DEFAULT '1';
CREATE TABLE IF NOT EXISTS `sites` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`path` TEXT,
`status` TEXT,
`index` TEXT,
`type_id` INTEGER,
`ps` TEXT,
`edate` TEXT,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `site_types` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT
);
CREATE TABLE IF NOT EXISTS `domain` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`pid` INTEGER,
`name` TEXT,
`port` INTEGER,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `users` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` TEXT,
`password` TEXT,
`login_ip` TEXT,
`login_time` TEXT,
`phone` TEXT,
`email` TEXT
);
INSERT INTO `users` (`id`, `username`, `password`, `login_ip`, `login_time`, `phone`, `email`) VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3', '192.168.0.10', '2022-02-02 00:00:00', 0, 'midoks@163.com');
CREATE TABLE IF NOT EXISTS `tasks` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`type` TEXT,
`status` TEXT,
`addtime` TEXT,
`start` INTEGER,
`end` INTEGER,
`execstr` TEXT
);
CREATE TABLE IF NOT EXISTS `temp_login` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`token` REAL,
`salt` REAL,
`state` INTEGER,
`login_time` INTEGER,
`login_addr` REAL,
`logout_time` INTEGER,
`expire` INTEGER,
`addtime` INTEGER
);
CREATE TABLE IF NOT EXISTS `panel` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`title` TEXT,
`url` TEXT,
`username` TEXT,
`password` TEXT,
`click` INTEGER,
`addtime` INTEGER
);

View File

@@ -1,37 +0,0 @@
CREATE TABLE IF NOT EXISTS `network` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`up` INTEGER,
`down` INTEGER,
`total_up` INTEGER,
`total_down` INTEGER,
`down_packets` INTEGER,
`up_packets` INTEGER,
`addtime` INTEGER
);
CREATE TABLE IF NOT EXISTS `cpuio` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`pro` INTEGER,
`mem` INTEGER,
`addtime` INTEGER
);
CREATE TABLE IF NOT EXISTS `diskio` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`read_count` INTEGER,
`write_count` INTEGER,
`read_bytes` INTEGER,
`write_bytes` INTEGER,
`read_time` INTEGER,
`write_time` INTEGER,
`addtime` INTEGER
);
CREATE TABLE IF NOT EXISTS `load_average` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`pro` REAL,
`one` REAL,
`five` REAL,
`fifteen` REAL,
`addtime` INTEGER
);

View File

@@ -1,58 +0,0 @@
server
{
listen {$PORT};
listen [::]:{$PORT};
server_name {$SERVER_NAME};
index index.php index.html index.htm default.php default.htm default.html;
root {$ROOT_DIR};
#SSL-START
#error_page 404/404.html;
#SSL-END
#301-START
#PROXY-START
#ERROR-PAGE-START
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START
include {$PHP_DIR}/conf/enable-php-{$PHPVER}.conf;
#PHP-INFO-END
#REWRITE-START
include {$OR_REWRITE}/{$SERVER_NAME}.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log {$LOGPATH}/{$SERVER_NAME}.log main;
error_log {$LOGPATH}/{$SERVER_NAME}.error.log;
}

View File

@@ -1,55 +0,0 @@
#BINDING-{$DIRBIND}-START
server
{
listen {$PORT};
server_name {$DIRBIND};
index index.php index.html index.htm default.php default.htm default.html;
root {$ROOT_DIR};
#SSL-START
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START
include {$PHP_DIR}/conf/enable-php-{$PHPVER}.conf;
#PHP-INFO-END
#REWRITE-START
include {$OR_REWRITE}/{$SERVER_MAIN}.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log {$LOGPATH}/{$SERVER_MAIN}_{$DIRBIND}.log;
error_log {$LOGPATH}/{$SERVER_MAIN}_{$DIRBIND}.error.log;
}
#BINDING-{$DIRBIND}-END

View File

@@ -40,7 +40,7 @@ RUN apt update -y && \
RUN cd /www/server/mdserver-web/plugins/php && \
bash install.sh install 74 && \
cd /www/server/mdserver-web/plugins/openresty && \
bash install.sh install 1.21.4.1 && \
bash install.sh install 1.21.4 && \
cd /www/server/mdserver-web/plugins/mysql && \
bash install.sh install 5.6 && \
cd /www/server/mdserver-web/plugins/phpmyadmin && \

1
logs/README.md Normal file
View File

@@ -0,0 +1 @@
logs

361
panel_task.py Executable file
View File

@@ -0,0 +1,361 @@
# coding: utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 计划任务
# ---------------------------------------------------------------------------------
import sys
import os
import json
import time
import threading
import psutil
web_dir = os.getcwd() + "/web"
os.chdir(web_dir)
sys.path.append(web_dir)
import core.mw as mw
import thisdb
from admin import setup
setup.init()
g_log_file = mw.getPanelTaskExecLog()
if not os.path.exists(g_log_file):
os.system("touch " + g_log_file)
def execShell(cmdstring, cwd=None, timeout=None, shell=True):
cmd = cmdstring + ' > ' + g_log_file + ' 2>&1'
return mw.execShell(cmd)
def writeLogs(data):
# 写输出日志
try:
fp = open(g_log_file, 'w+')
fp.write(data)
fp.close()
except:
pass
def downloadFile(url, filename):
# 下载文件
try:
import urllib
import socket
socket.setdefaulttimeout(300)
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36')
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(url, filename=filename, reporthook=downloadHook)
if not mw.isAppleSystem():
os.system('chown www.www ' + filename)
writeLogs(filename + ' download success!')
except Exception as e:
writeLogs(str(e))
return True
def downloadHook(count, blockSize, totalSize):
# 下载文件进度回调
used = count * blockSize
pre = int((100.0 * used / totalSize))
speed = {'total': totalSize, 'used': used, 'pre': pre}
writeLogs(json.dumps(speed))
def runPanelTask():
# 站点过期检查
siteEdateCheck()
lock_file = mw.getTriggerTaskLockFile()
try:
if os.path.exists(lock_file):
bash_list = thisdb.getTaskList(status=-1)
for task in bash_list:
thisdb.setTaskStatus(task['id'], 0)
run_list = thisdb.getTaskList(status=0)
for run_task in run_list:
start = int(time.time())
thisdb.setTaskData(run_task['id'], start=start)
thisdb.setTaskStatus(run_task['id'], -1)
if run_task['type'] == 'download':
argv = run_task['cmd'].split('|mw|')
downloadFile(argv[0], argv[1])
elif run_task['type'] == 'execshell':
execShell(run_task['cmd'])
end = int(time.time())
thisdb.setTaskData(run_task['id'], end=end)
thisdb.setTaskStatus(run_task['id'], 1)
if thisdb.getTaskUnexecutedCount() < 1:
os.remove(lock_file)
except Exception as e:
print('runPanelTask:',mw.getTracebackInfo())
# 网站到期处理
def siteEdateCheck():
try:
from utils.site import sites as MwSites
website_edate = thisdb.getOption('website_edate', default='0000-00-00')
now_time_ymd = time.strftime('%Y-%m-%d', time.localtime())
if website_edate == now_time_ymd:
return False
site_list = thisdb.getSitesEdateList(now_time_ymd)
for site in site_list:
MwSites.instance().stop(site['id'])
thisdb.setOption('website_edate', now_time_ymd)
except Exception as e:
print('siteEdateCheck:',mw.getTracebackInfo())
# 任务队列
def startPanelTask():
try:
while True:
runPanelTask()
time.sleep(5)
except Exception as e:
print('startPanelTask:',mw.getTracebackInfo())
time.sleep(30)
startPanelTask()
def systemTask():
# 系统监控任务
from utils.system import monitor
try:
while True:
monitor_status = thisdb.getOption('monitor_status',type='monitor',default='open')
if monitor_status == 'open':
monitor.instance().run()
time.sleep(5)
except Exception as ex:
print('systemTask:',mw.getTracebackInfo())
time.sleep(30)
systemTask()
def panelPluginStatusCheck():
# 系统监控任务
from utils.plugin import plugin
try:
while True:
# start_t = time.time()
plugin.instance().autoCachePluginStatus()
# end_t = time.time()
time.sleep(60)
except Exception as ex:
print('panelPluginStatusCheck:',mw.getTracebackInfo())
time.sleep(120)
panelPluginStatusCheck()
# -------------------------------------- PHP监控 start --------------------------------------------- #
# 502错误检查线程
def check502Task():
try:
check_file = mw.getPanelDir() + '/data/502Task.pl'
while True:
if os.path.exists(check_file):
check502()
time.sleep(10)
except:
time.sleep(30)
check502Task()
def check502():
try:
verlist = [
'52', '53', '54', '55', '56', '70',
'71', '72', '73', '74', '80', '81',
'82', '83', '84'
]
for ver in verlist:
server_dir = mw.getServerDir()
php_path = server_dir + '/php/' + ver + '/sbin/php-fpm'
if not os.path.exists(php_path):
continue
if checkPHPVersion(ver):
continue
if startPHPVersion(ver):
print('检测到PHP-' + ver + '处理异常,已自动修复!')
mw.writeLog('PHP守护程序', '检测到PHP-' + ver + '处理异常,已自动修复!')
except Exception as e:
mw.writeLog('PHP守护程序', '自动修复异常:'+str(e))
# 处理指定PHP版本
def startPHPVersion(version):
server_dir = mw.getServerDir()
try:
# system
phpService = mw.systemdCfgDir() + '/php' + version + '.service'
if os.path.exists(phpService):
mw.execShell("systemctl restart php" + version)
if checkPHPVersion(version):
return True
# initd
fpm = server_dir + '/php/init.d/php' + version
php_path = server_dir + '/php/' + version + '/sbin/php-fpm'
if not os.path.exists(php_path):
if os.path.exists(fpm):
os.remove(fpm)
return False
if not os.path.exists(fpm):
return False
# 尝试重载服务
os.system(fpm + ' reload')
if checkPHPVersion(version):
return True
# 尝试重启服务
cgi = '/tmp/php-cgi-' + version + '.sock'
pid = server_dir + '/php/' + version + '/var/run/php-fpm.pid'
data = mw.execShell("ps -ef | grep php/" + version +" | grep -v grep|grep -v python |awk '{print $2}'")
if data[0] != '':
os.system("ps -ef | grep php/" + version + " | grep -v grep|grep -v python |awk '{print $2}' | xargs kill ")
time.sleep(0.5)
if not os.path.exists(cgi):
os.system('rm -f ' + cgi)
if not os.path.exists(pid):
os.system('rm -f ' + pid)
os.system(fpm + ' start')
if checkPHPVersion(version):
return True
# 检查是否正确启动
if os.path.exists(cgi):
return True
except Exception as e:
print('startPHPVersion:',mw.getTracebackInfo())
mw.writeLog('PHP守护程序', '自动修复异常:'+str(e))
return True
def checkPHPVersion(version):
# 检查指定PHP版本
try:
sock = mw.getFpmAddress(version)
data = mw.requestFcgiPHP(sock, '/phpfpm_status_' + version + '?json')
result = str(data, encoding='utf-8')
except Exception as e:
result = 'Bad Gateway'
# 检查openresty
if result.find('Bad Gateway') != -1:
return False
if result.find('HTTP Error 404: Not Found') != -1:
return False
# 检查Web服务是否启动
if result.find('Connection refused') != -1:
return False
return True
# -------------------------------------- PHP监控 end --------------------------------------------- #
# --------------------------------------OpenResty Auto Restart Start --------------------------------------------- #
# 解决acme.sh续签后,未起效。
def openrestyAutoRestart():
try:
while True:
# 检查是否安装
odir = mw.getServerDir() + '/openresty'
if not os.path.exists(odir):
time.sleep(86400)
continue
mw.opWeb('reload')
time.sleep(86400)
except Exception as e:
mw.writeLog('OpenResty检测', '自动修复异常:'+str(e))
time.sleep(86400)
# --------------------------------------OpenResty Auto Restart End --------------------------------------------- #
# ------------------------------------ OpenResty Restart At Once Start ------------------------------------------ #
def openrestyRestartAtOnce():
restart_nginx_tip = mw.getPanelDir()+'/data/restart_nginx.pl'
while True:
if os.path.exists(restart_nginx_tip):
os.remove(restart_nginx_tip)
mw.opWeb('reload')
time.sleep(1)
# ----------------------------------- OpenResty Restart At Once End ------------------------------------------ #
# --------------------------------------Panel Restart Start --------------------------------------------- #
def restartPanelService():
restart_tip = mw.getPanelDir()+'/data/restart.pl'
while True:
if os.path.exists(restart_tip):
print("restart panel")
os.remove(restart_tip)
mw.panelCmd('restart_panel')
time.sleep(1)
# --------------------------------------Panel Restart End --------------------------------------------- #
def setDaemon(t):
if sys.version_info.major == 3 and sys.version_info.minor >= 10:
t.daemon = True
else:
t.setDaemon(True)
return t
def run():
# 系统监控
sysTask = threading.Thread(target=systemTask)
sysTask = setDaemon(sysTask)
sysTask.start()
# PHP 502错误检查线程
php502 = threading.Thread(target=check502Task)
php502 = setDaemon(php502)
php502.start()
# OpenResty Restart At Once Start
oraos = threading.Thread(target=openrestyRestartAtOnce)
oraos = setDaemon(oraos)
oraos.start()
# OpenResty Auto Restart Start
oar = threading.Thread(target=openrestyAutoRestart)
oar = setDaemon(oar)
oar.start()
# Panel Plugin Status Check
pps = threading.Thread(target=panelPluginStatusCheck)
pps = setDaemon(pps)
pps.start()
# Panel Restart Start
rps = threading.Thread(target=restartPanelService)
rps = setDaemon(rps)
rps.start()
# 面板后台任务
startPanelTask()
if __name__ == "__main__":
run()

391
panel_tools.py Executable file
View File

@@ -0,0 +1,391 @@
# coding=utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------
# 工具箱
# ---------------------------------------------------------------------------------
import sys
import os
import json
import time
import re
web_dir = os.getcwd() + "/web"
os.chdir(web_dir)
sys.path.append(web_dir)
from utils.firewall import Firewall as MwFirewall
import core.mw as mw
import thisdb
INIT_DIR = "/etc/rc.d/init.d"
if mw.isAppleSystem():
INIT_DIR = mw.getPanelDir() + "/scripts/init.d"
INIT_CMD = INIT_DIR + "/mw"
def mw_input_cmd(msg):
if sys.version_info[0] == 2:
in_val = raw_input(msg)
else:
in_val = input(msg)
return in_val
def getRemainLen(cmd, max_length=100):
cmd_len = len(cmd)
cmd_u8_len = len(cmd.encode('utf-8'))
return max_length-int((cmd_u8_len - cmd_len)/2+cmd_len)
def mwcli(mw_input=0):
panel_dir = mw.getPanelDir()
raw_tip = "========================================================================"
if not mw_input:
print("========================mdserver-web cli tools==========================")
cmd_list = [
'(1) 重启面板服务',
'(2) 停止面板服务',
'(3) 启动面板服务',
'(4) 重载面板服务',
'(5) 修改面板IP',
'(6) 修改面板端口',
'(7) 关闭安全入口',
'(10) 查看面板默认信息',
'(11) 修改面板密码',
'(12) 修改面板用户名',
'(13) 显示面板错误日志',
'(14) 关闭面板访问',
'(15) 开启面板访问',
'(20) 关闭BasicAuth认证',
'(21) 解除域名绑定',
'(22) 解除面板SSL绑定',
'(23) 开启IPV6支持',
'(24) 关闭IPV6支持',
'(25) 开启防火墙SSH端口',
'(26) 关闭二次验证',
'(27) 查看防火墙信息',
'(28) 自动识别防火墙端口到面板',
'(29) 自动识别配置站点信息',
'(100) 开启PHP52显示',
'(101) 关闭PHP52显示',
'(200) 切换Linux系统软件源',
'(201) 简单速度测试',
'(0) 取消'
]
cmd_list_num = len(cmd_list)
for index in range(cmd_list_num):
cmd = cmd_list[index]
if index % 2 == 0:
if index == (cmd_list_num-1):
print(cmd)
else:
print(cmd + " " * getRemainLen(cmd, 40), end="")
if index % 2 == 1:
print(cmd)
print(raw_tip)
try:
mw_input = input("请输入命令编号:")
if sys.version_info[0] == 3:
mw_input = int(mw_input)
except:
mw_input = 0
nums = [
1, 2, 3, 4, 5, 6, 7,
10, 11, 12, 13, 14, 15,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
100, 101,
200, 201
]
if not mw_input in nums:
print(raw_tip)
print("已取消!")
exit()
if mw_input == 1:
os.system(INIT_CMD + " restart")
elif mw_input == 2:
os.system(INIT_CMD + " stop")
elif mw_input == 3:
os.system(INIT_CMD + " start")
elif mw_input == 4:
os.system(INIT_CMD + " reload")
elif mw_input == 5:
in_ip = mw_input_cmd("请输入设置的面板IP:")
in_ip = in_ip.strip()
ip_text = panel_dir + '/data/iplist.txt'
if not mw.isVaildIp(in_ip):
mw.echoInfo("【"+in_ip+"】: IP不合法")
return
mw.writeFile(ip_text, in_ip)
thisdb.setOption('server_ip', in_ip)
mw.echoInfo("设置面板IP: " + in_ip)
elif mw_input == 6:
in_port = mw_input_cmd("请输入新的面板端口:")
in_port_int = int(in_port.strip())
if in_port_int < 65536 and in_port_int > 0:
MwFirewall.instance().addAcceptPort(in_port, 'WEB面板[TOOLS修改]', 'port')
panel_port = panel_dir + '/data/port.pl'
mw.writeFile(panel_port, in_port)
os.system(INIT_CMD + " restart_panel")
os.system(INIT_CMD + " default")
else:
mw.echoInfo("端口范围在0-65536之间")
return
elif mw_input == 7:
thisdb.setOption('admin_path', '')
mw.echoInfo("关闭安全入口成功!")
elif mw_input == 10:
os.system(INIT_CMD + " default")
elif mw_input == 11:
input_pwd = mw_input_cmd("请输入新的面板密码:")
if len(input_pwd.strip()) < 5:
mw.echoInfo("错误,密码长度不能小于5位")
return
set_panel_pwd(input_pwd.strip(), True)
elif mw_input == 12:
input_user = mw_input_cmd("请输入新的面板用户名(>=5位):")
set_panel_username(input_user.strip())
elif mw_input == 13:
os.system('tail -100 ' + panel_dir + '/logs/panel_error.log')
elif mw_input == 14:
admin_close = thisdb.getOption('admin_close')
if admin_close == 'no':
thisdb.setOption('admin_close', 'yes')
mw.echoInfo("关闭面板访问成功!")
else:
mw.echoInfo("已关闭面板访问!")
elif mw_input == 15:
admin_close = thisdb.getOption('admin_close')
if admin_close == 'yes':
thisdb.setOption('admin_close', 'no')
mw.echoInfo("开启面板访问成功!")
else:
mw.echoInfo("已开启面板访问!")
elif mw_input == 20:
basic_auth = thisdb.getOptionByJson('basic_auth', default={'open':False})
if basic_auth['open']:
basic_auth['open'] = False
thisdb.setOption('basic_auth', json.dumps(basic_auth))
os.system(INIT_CMD + " restart")
mw.echoInfo("关闭basic_auth成功")
elif mw_input == 21:
panel_domain = thisdb.getOption('panel_domain', default='')
if panel_domain != '':
thisdb.setOption('panel_domain', '')
os.system(INIT_CMD + " unbind_domain")
mw.echoInfo("解除域名绑定成功")
else:
mw.echoInfo("面板未绑定域名!")
elif mw_input == 22:
panel_ssl = thisdb.getOptionByJson('panel_ssl', default={'open':False})
if panel_ssl['open']:
panel_ssl['open'] = False
thisdb.setOption('panel_ssl', json.dumps(panel_ssl))
os.system(INIT_CMD + " unbind_ssl")
mw.echoInfo("解除面板SSL绑定成功")
elif mw_input == 23:
listen_ipv6 = panel_dir + '/data/ipv6.pl'
if not os.path.exists(listen_ipv6):
mw.writeFile(listen_ipv6, 'True')
os.system(INIT_CMD + " restart")
mw.echoInfo("开启IPv6支持了")
else:
mw.echoInfo("已开启IPv6支持!")
elif mw_input == 24:
listen_ipv6 = panel_dir + '/data/ipv6.pl'
if not os.path.exists(listen_ipv6):
mw.echoInfo("已关闭IPv6支持!")
else:
os.remove(listen_ipv6)
os.system(INIT_CMD + " restart")
mw.echoInfo("关闭IPv6支持了")
elif mw_input == 25:
open_ssh_port()
mw.echoInfo("已开启!")
elif mw_input == 26:
two_step_verification = thisdb.getOptionByJson('two_step_verification', default={'open':False})
if two_step_verification['open']:
two_step_verification['open'] = False
thisdb.setOption('two_step_verification', json.dumps(two_step_verification))
mw.echoInfo("关闭二次验证成功!")
else:
mw.echoInfo("二次验证已关闭!")
elif mw_input == 27:
cmd = 'which ufw'
run_cmd = False
find_cmd = mw.execShell(cmd)
if find_cmd[0].strip() != '':
run_cmd = True
os.system('ufw status')
cmd = 'which firewall-cmd'
find_cmd = mw.execShell(cmd)
if find_cmd[0].strip() != '':
run_cmd = True
os.system('firewall-cmd --list-all')
if not run_cmd:
mw.echoInfo("未检测到防火墙!")
elif mw_input == 28:
MwFirewall.instance().aIF()
mw.echoInfo("执行自动识别防火墙端口到面板成功!")
elif mw_input == 29:
from utils.site_reflect import parse as MwParse
MwParse()
mw.echoInfo("自动识别配置站点信息成功!")
elif mw_input == 100:
php_conf = panel_dir + '/plugins/php/info.json'
if os.path.exists(php_conf):
cont = mw.readFile(php_conf)
cont = re.sub("\"53\"", "\"52\",\"53\"", cont)
cont = re.sub("\"5.3.29\"", "\"5.2.17\",\"5.3.29\"", cont)
mw.writeFile(php_conf, cont)
mw.echoInfo("执行PHP52显示成功!")
elif mw_input == 101:
php_conf = panel_dir + '/plugins/php/info.json'
if os.path.exists(php_conf):
cont = mw.readFile(php_conf)
cont = re.sub("\"52\",", "", cont)
cont = re.sub("\"5.2.17\",", cont)
mw.writeFile(php_conf, cont)
mw.echoInfo("执行PHP52隐藏成功!")
elif mw_input == 200:
os.system("bash <(curl -sSL https://linuxmirrors.cn/main.sh)")
# os.system(INIT_CMD + " mirror")
elif mw_input == 201:
os.system('curl -Lso- bench.sh | bash')
def open_ssh_port():
find_ssh_port_cmd = "cat /etc/ssh/sshd_config | grep '^Port \\d*' | tail -1"
cmd_data = mw.execShell(find_ssh_port_cmd)
ssh_port = cmd_data[0].replace("Port ", '').strip()
if ssh_port == '':
ssh_port = '22'
mw.echoInfo("SSH端口: "+ str(ssh_port))
MwFirewall.instance().addAcceptPort(ssh_port, 'SSH远程管理服务', 'port')
return True
def set_panel_pwd(password, ncli=False):
info = thisdb.getUserByRoot()
thisdb.setUserByRoot(password=password)
if ncli:
mw.echoInfo("username: " + info['name'])
mw.echoInfo("password: " + password)
else:
print(username)
def show_panel_pwd():
# 面板密码展示
info = thisdb.getUserByRoot()
defailt_pwd_file = mw.getPanelDir()+'/data/default.pl'
pwd = ''
if os.path.exists(defailt_pwd_file):
pwd = mw.readFile(defailt_pwd_file).strip()
if mw.md5(pwd) == info['password']:
mw.echoInfo('password: ' + pwd)
return
print("*-password has been changed!")
def show_panel_adminpath():
admin_path = thisdb.getOption('admin_path')
if admin_path == '':
print('/login')
else:
print('/'+admin_path)
def set_panel_username(username=None):
# 随机面板用户名
if username:
if len(username) < 5:
mw.echoInfo("错误,用户名长度不能少于5位")
return
if username in ['admin', 'root']:
mw.echoInfo("错误,不能使用过于简单的用户名")
return
thisdb.setUserByRoot(name=username)
mw.echoInfo("username: %s" % username)
return
info = thisdb.getUserByRoot()
if info['name'] == 'admin':
username = mw.getRandomString(8).lower()
thisdb.setUserByRoot(name=username)
mw.echoInfo('username: ' + info['name'])
def getServerIp():
version = sys.argv[2]
# ip = mw.execShell(
# "curl --insecure -{} -sS --connect-timeout 5 -m 60 https://v6r.ipip.net/?format=text".format(version))
ip = mw.execShell(
"curl --insecure -{} -sS --connect-timeout 5 -m 60 https://ip.cachecha.com/?format=text".format(version))
# print(ip[0])
return ip[0]
def getPanelSslType():
scheme = 'http'
panel_ssl = thisdb.getOptionByJson('panel_ssl', default={'open':False})
if panel_ssl['open']:
scheme = 'https'
return scheme
def getPanelBindDomain():
return thisdb.getOption('panel_domain', default='')
def main():
if len(sys.argv) == 1:
print('ERROR: Parameter error!')
exit(-2)
method = sys.argv[1]
if method == 'panel':
set_panel_pwd(sys.argv[2])
elif method == 'username':
if len(sys.argv) > 2:
set_panel_username(sys.argv[2])
else:
set_panel_username()
elif method == 'password':
show_panel_pwd()
elif method == 'test':
thisdb.getOption('admin_path')
elif method == 'admin_path':
show_panel_adminpath()
elif method == 'getServerIp':
print(getServerIp())
elif method == 'panel_ssl_type':
print(getPanelSslType())
elif method == 'panel_bind_domain':
print(getPanelBindDomain())
elif method == "cli":
clinum = 0
try:
if len(sys.argv) > 2:
clinum = int(sys.argv[2]) if sys.argv[2][:6] else sys.argv[2]
except:
clinum = sys.argv[2]
mwcli(clinum)
else:
print('ERROR: Parameter error')
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,34 @@
CREATE TABLE IF NOT EXISTS `dnsapi` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` TEXT,
`type` TEXT,
`val` TEXT,
`remark` TEXT,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `email` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`addr` TEXT,
`remark` TEXT,
`addtime` TEXT
);
CREATE TABLE IF NOT EXISTS `domain` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`domain` TEXT,
`dnsapi_id` TEXT,
`email` TEXT,
`remark` TEXT,
`effective_date` TEXT default '',
`expiration_date` TEXT default '',
`error` TEXT,
`status` INTEGER default '0',
`addtime` TEXT
);
-- ALTER TABLE `domain` ADD COLUMN `effective_date` TEXT DEFAULT '';
-- ALTER TABLE `domain` ADD COLUMN `expiration_date` TEXT DEFAULT '';
-- ALTER TABLE `domain` ADD COLUMN `error` TEXT DEFAULT '';
-- ALTER TABLE `domain` ADD COLUMN `status` INTEGER DEFAULT '0';

View File

@@ -0,0 +1,136 @@
# coding:utf-8
import sys
import io
import os
import time
import re
import requests
import base64
# 8001 / 7788
goedge_addr = 'http://127.0.0.2:8009'
access_keyid = "xxx"
access_key = "xxx"
# 指定用户
userId = 1
if sys.platform != "darwin":
os.chdir("/www/server/mdserver-web")
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
domain = sys.argv[1]
ssl_path = sys.argv[2]
def getToken():
api_url = goedge_addr+'/APIAccessTokenService/getAPIAccessToken'
post_data = {
"type": "admin",
"accessKeyId": access_keyid,
"accessKey": access_key
}
data = requests.post(api_url,json=post_data)
data_obj = data.json()
return data_obj['data']['token']
token = getToken()
def commonReq(url, data):
headers = {
'X-Edge-Access-Token': token
}
api_url = goedge_addr+url
resp_data = requests.post(api_url,json=data, headers=headers)
return resp_data.json()
def listSSLCerts(domain):
request_data = {
"userId":userId,
"isCA":False,
"keyword": "ACME泛域名自动上传",
"domains":[domain,"*."+domain],
"size":1
}
response_data = commonReq('/SSLCertService/listSSLCerts', request_data)
data = response_data['data']['sslCertsJSON']
data = mw.base64StrDecode(data)
data = mw.getObjectByJson(data)
# print(data)
return data
# createSSLCert(domain)
def createSSLCert(domain, did=0):
ssl_cer_file = ssl_path + '/'+domain+'.cer'
if not os.path.exists(ssl_cer_file):
print("没有有效证书!")
return ''
# print(ssl_cer_file)
ssl_info = mw.getCertName(ssl_cer_file)
cer_data = mw.readFile(ssl_cer_file)
cer_data = mw.base64StrEncode(cer_data)
# print('cer',cer_data)
ssl_key_file = ssl_path + '/'+domain+'.key'
key_data = mw.readFile(ssl_key_file)
key_data = mw.base64StrEncode(key_data)
# print('ssl_info',ssl_info)
timeBeginAt = int(time.mktime(time.strptime(ssl_info['notBefore'], "%Y-%m-%d")))
timeEndAt = int(time.mktime(time.strptime(ssl_info['notAfter'], "%Y-%m-%d")))
request_data = {
"isOn":True,
"userId":userId,
"name": "ACME泛域名自动上传",
"isCA":False,
"description":domain,
"serverName":domain,
"certData":cer_data,
"keyData":key_data,
"timeBeginAt":timeBeginAt,
"timeEndAt": timeEndAt,
"dnsNames":[domain,"*."+domain],
"commonNames":[ssl_info['issuer']]
}
if did>0:
request_data['sslCertId'] = did
# print(request_data)
response_data = commonReq('/SSLCertService/updateSSLCert', request_data)
print('更新成功',domain,response_data)
return response_data
else:
# print(request_data)
response_data = commonReq('/SSLCertService/createSSLCert', request_data)
print('创建成功',domain,response_data)
return response_data
return response_data
def autoSyncDomain(domain):
data = listSSLCerts(domain)
if len(data) > 0 :
did = data[0]['id']
createSSLCert(domain,did)
else:
createSSLCert(domain)
print(data)
autoSyncDomain(domain)
print(domain,ssl_path)

View File

@@ -0,0 +1,12 @@
# coding:utf-8
import sys
import io
import os
import time
import re
domain = sys.argv[1]
path = sys.argv[2]
print(domain,path)

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,34 @@
<style>
.overflow_hide {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
</style>
<div class="bt-form">
<div class='plugin_version'></div>
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('acme_pandominassl_apply');">服务</p>
<p onclick="dnsapiList();">DNSAPI *</p>
<p onclick="emailList();">邮件地址 </p>
<p onclick="domainList()">域名SSL *</p>
<p onclick="pluginConfigTpl('acme_pandominassl_apply',$('.plugin_version').attr('version'));">HOOK</p>
<p onclick="pluginLogs('acme_pandominassl_apply','','run_log');">日志</p>
<p onclick="apaReadme();">相关说明</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con"></div>
</div>
</div>
</div>
<script type="text/javascript">
resetPluginWinWidth(1000);
resetPluginWinHeight(550);
$.getScript( "/plugins/file?name=acme_pandominassl_apply&f=js/common.js", function(){
pluginService('acme_pandominassl_apply', $('.plugin_version').attr('version'));
});
</script>

View File

@@ -0,0 +1,863 @@
# coding:utf-8
import sys
import io
import os
import time
import re
import requests
import json
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'acme_pandominassl_apply'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getInitDFile():
current_os = mw.getOs()
if current_os == 'darwin':
return '/tmp/' + getPluginName()
if current_os.startswith('freebsd'):
return '/etc/rc.d/' + getPluginName()
return '/etc/init.d/' + getPluginName()
def getConf():
path = getServerDir() + "/hook.py"
return path
def getInitDTpl():
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
return path
def runLog():
return getServerDir() + '/hook.log'
def getArgs():
args = sys.argv[3:]
# print(args)
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
if t.strip() == '':
tmp = []
else:
t = t.split(':')
tmp[t[0]] = t[1]
tmp[t[0]] = t[1]
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def checkArgs(data, ck=[]):
for i in range(len(ck)):
if not ck[i] in data:
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
return (True, mw.returnJson(True, 'ok'))
def getHomeDir():
if mw.isAppleSystem():
user = mw.execShell(
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
return '/Users/' + user
else:
return '/root'
def getRunUser():
if mw.isAppleSystem():
user = mw.execShell(
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
return user
else:
return 'root'
def configTpl():
path = getPluginDir() + '/hooks'
pathFile = os.listdir(path)
tmp = []
for one in pathFile:
file = path + '/' + one
tmp.append(file)
return mw.getJson(tmp)
def readConfigTpl():
args = getArgs()
data = checkArgs(args, ['file'])
if not data[0]:
return data[1]
content = mw.readFile(args['file'])
content = contentReplace(content)
return mw.returnJson(True, 'ok', content)
def getPidFile():
file = getConf()
content = mw.readFile(file)
rep = r'pidfile\s*(.*)'
tmp = re.search(rep, content)
return tmp.groups()[0].strip()
def status():
return 'start'
def contentReplace(content):
service_path = mw.getServerDir()
content = content.replace('{$ROOT_PATH}', mw.getFatherDir())
content = content.replace('{$SERVER_PATH}', service_path)
content = content.replace('{$SERVER_APP}', service_path + '/redis')
content = content.replace('{$REDIS_PASS}', mw.getRandomString(10))
return content
def pSqliteDb(dbname='dnsapi'):
file = getServerDir() + '/acme.db'
name = 'acme'
import_sql = mw.readFile(getPluginDir() + '/conf/acme.sql')
md5_sql = mw.md5(import_sql)
import_sign = False
save_md5_file = getServerDir() + '/acme.md5'
if os.path.exists(save_md5_file):
save_md5_sql = mw.readFile(save_md5_file)
if save_md5_sql != md5_sql:
import_sign = True
mw.writeFile(save_md5_file, md5_sql)
else:
mw.writeFile(save_md5_file, md5_sql)
if not os.path.exists(file) or import_sql:
conn = mw.M(dbname).dbPos(getServerDir(), name)
csql_list = import_sql.split(';')
for index in range(len(csql_list)):
conn.execute(csql_list[index], ())
conn = mw.M(dbname).dbPos(getServerDir(), name)
return conn
def initDreplace():
file_tpl = getInitDTpl()
initD_path = getServerDir() + '/init.d'
if not os.path.exists(initD_path):
os.mkdir(initD_path)
file_bin = initD_path + '/' + getPluginName()
run_log_file = runLog()
if not os.path.exists(run_log_file):
mw.writeFile(run_log_file,'')
hook_file = getConf()
if not os.path.exists(hook_file):
mw.writeFile(hook_file,'')
return file_bin
def apaOp(method):
file = initDreplace()
return 'ok'
# current_os = mw.getOs()
# if current_os == "darwin":
# data = mw.execShell(file + ' ' + method)
# if data[1] == '':
# return 'ok'
# return data[1]
# if current_os.startswith("freebsd"):
# data = mw.execShell('service ' + getPluginName() + ' ' + method)
# if data[1] == '':
# return 'ok'
# return data[1]
# data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
# if data[1] == '':
# return 'ok'
# return data[1]
def start():
import tool_cron
tool_cron.createBgTask()
return apaOp('start')
def stop():
import tool_cron
tool_cron.removeBgTask()
return apaOp('stop')
def restart():
status = apaOp('restart')
return status
def reload():
return apaOp('reload')
def dnsapiAdd():
conn = pSqliteDb('dnsapi')
args = getArgs()
data = checkArgs(args,['id','name', 'type', 'remark'])
if not data[0]:
return data[1]
name = args['name'].strip()
remark = args['remark'].strip()
stype = args['type'].strip()
val = args['val'].strip()
sid = args['id'].strip()
if name == '':
return mw.returnJson(False, '名称不能为空!')
if sid != '0' : #修改操作
conn.where("id=?", (sid,)).update({
'name':name,
'type':stype,
'val':val,
'remark':remark,
})
return mw.returnJson(True, '修改成功!')
if conn.where("name=?", (name,)).count():
return mw.returnJson(False, name+'已存在!')
addTime = time.strftime('%Y-%m-%d %X', time.localtime())
err = conn.add('name,type,val,remark,addtime', (name, stype, val,remark, addTime))
# print(err)
return mw.returnJson(True, '添加成功!')
def dnsapiDel():
args = getArgs()
data = checkArgs(args, ['id', 'name'])
if not data[0]:
return data[1]
conn = pSqliteDb('dnsapi')
try:
sid = args['id']
name = args['name']
conn.where("id=?", (sid,)).delete()
return mw.returnJson(True, '删除成功!')
except Exception as ex:
return mw.returnJson(False, '删除失败!' + str(ex))
def dnsapiList():
args = getArgs()
page = 1
page_size = 10
search = ''
data = {}
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
if 'search' in args:
search = args['search']
conn = pSqliteDb('dnsapi')
limit = str((page - 1) * page_size) + ',' + str(page_size)
condition = ''
if not search == '':
condition = "name like '%" + search + "%'"
field = 'id,name,type,val,remark,addtime'
clist = conn.where(condition, ()).field(
field).limit(limit).order('id desc').select()
count = conn.where(condition, ()).count()
_page = {}
_page['count'] = count
_page['p'] = page
_page['row'] = page_size
_page['tojs'] = 'dbList'
data['page'] = mw.getPage(_page)
data['data'] = clist
return mw.getJson(data)
def dnsapiListAll():
conn = pSqliteDb('dnsapi')
field = 'id,name,type,val,remark,addtime'
data = conn.field(field).limit('1000').select()
return mw.getJson(data)
def emailList():
args = getArgs()
page = 1
page_size = 10
search = ''
data = {}
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
if 'search' in args:
search = args['search']
conn = pSqliteDb('email')
limit = str((page - 1) * page_size) + ',' + str(page_size)
condition = ''
if not search == '':
condition = "addr like '%" + search + "%'"
field = 'id,addr,remark,addtime'
clist = conn.where(condition, ()).field(
field).limit(limit).order('id desc').select()
count = conn.where(condition, ()).count()
_page = {}
_page['count'] = count
_page['p'] = page
_page['row'] = page_size
_page['tojs'] = 'dbList'
data['page'] = mw.getPage(_page)
data['data'] = clist
return mw.getJson(data)
def emailAdd():
args = getArgs()
data = checkArgs(args,['addr', 'remark'])
if not data[0]:
return data[1]
addr = args['addr'].strip()
remark = args['remark'].strip()
if addr == '':
return mw.returnJson(False, '邮件地址不能为空!')
conn = pSqliteDb('email')
addTime = time.strftime('%Y-%m-%d %X', time.localtime())
conn.add('addr,remark,addtime', (addr, remark, addTime))
return mw.returnJson(True, '添加成功!')
def emailDel():
args = getArgs()
data = checkArgs(args, ['id', 'name'])
if not data[0]:
return data[1]
conn = pSqliteDb('email')
try:
sid = args['id']
name = args['name']
conn.where("id=?", (sid,)).delete()
return mw.returnJson(True, '删除成功!')
except Exception as ex:
return mw.returnJson(False, '删除失败!' + str(ex))
def domainAdd():
args = getArgs()
data = checkArgs(args,['id','domain', 'dnsapi_id','email','remark'])
if not data[0]:
return data[1]
sid = args['id'].strip()
domain = args['domain'].strip()
remark = args['remark'].strip()
email = args['email'].strip()
dnsapi_id = args['dnsapi_id'].strip()
if domain == '':
return mw.returnJson(False, '域名不能为空!')
if email == '':
return mw.returnJson(False, '邮件不能为空!')
conn = pSqliteDb('domain')
if sid != '0' : #修改操作
conn.where("id=?", (sid,)).update({
'domain':domain,
'dnsapi_id':dnsapi_id,
'email':email,
'remark':remark,
})
return mw.returnJson(True, '修改成功!')
if conn.where("domain=?", (domain,)).count():
return mw.returnJson(False, domain+'已存在!')
addTime = time.strftime('%Y-%m-%d %X', time.localtime())
conn.add('domain,dnsapi_id,email,remark,addtime', (domain, dnsapi_id,email,remark, addTime))
return mw.returnJson(True, '添加成功!')
def domainDel():
args = getArgs()
data = checkArgs(args, ['id', 'name'])
if not data[0]:
return data[1]
conn = pSqliteDb('domain')
try:
sid = args['id']
name = args['name']
conn.where("id=?", (sid,)).delete()
return mw.returnJson(True, '删除成功!')
except Exception as ex:
return mw.returnJson(False, '删除失败!' + str(ex))
def domainStatusToggle():
args = getArgs()
data = checkArgs(args, ['id'])
if not data[0]:
return data[1]
conn = pSqliteDb('domain')
field = 'id,status'
fdata = conn.field(field).where('id=?',(args['id'],)).find()
fstatus = fdata['status']
if fstatus == 0:
fstatus = 1
else:
fstatus = 0
# print(fdata['status'],fstatus)
conn.where("id=?", (args['id'],)).update({
'status':fstatus,
})
return mw.returnJson(True, '切换成功!')
def domainList():
args = getArgs()
page = 1
page_size = 10
search = ''
data = {}
if 'page' in args:
page = int(args['page'])
if 'page_size' in args:
page_size = int(args['page_size'])
if 'search' in args:
search = args['search']
conn = pSqliteDb('domain')
conn_dnsapi = pSqliteDb('dnsapi')
limit = str((page - 1) * page_size) + ',' + str(page_size)
condition = ''
if not search == '':
condition = "domain like '%" + search + "%'"
field = 'id,domain,dnsapi_id,email,status,effective_date,expiration_date,remark,addtime'
clist = conn.where(condition, ()).field(
field).limit(limit).order('id desc').select()
for i in range(len(clist)):
tdata = conn_dnsapi.field('id,name').where('id=?',(clist[i]['dnsapi_id'],)).select()
if len(tdata) > 0:
# print(tdata[0]['name'])
clist[i]['dnsapi_id_alias'] = clist[i]['dnsapi_id']+'('+ tdata[0]['name'] +')'
else:
clist[i]['dnsapi_id_alias'] = clist[i]['dnsapi_id']+' (无)'
count = conn.where(condition, ()).count()
_page = {}
_page['count'] = count
_page['p'] = page
_page['row'] = page_size
_page['tojs'] = 'dbList'
data['page'] = mw.getPage(_page)
data['data'] = clist
return mw.getJson(data)
def getDnsapiData(dnsapi_id):
if dnsapi_id == '0':
return {}
conn_dnsapi = pSqliteDb('dnsapi')
tdata = conn_dnsapi.field('id,name,type,val').where('id=?',(dnsapi_id,)).select()
if len(tdata)>0:
return tdata[0]
return {}
def getDnsapiExportVar(val):
cmd_list = val.split('~')
def_var = ''
for x in range(len(cmd_list)):
v = cmd_list[x]
vlist = v.split('|')
def_var += 'export '+vlist[0]+'="'+vlist[1]+'"\n'
return def_var
def getDnsapiKv(val):
cmd_list = val.split('~')
def_var = {}
for x in range(len(cmd_list)):
v = cmd_list[x]
vlist = v.split('|')
kk = vlist[0]
vv = vlist[1]
def_var[kk] = vv
return def_var
def domainApplyPathJudge(domain):
acme_dir = "/root/.acme.sh"
if mw.isAppleSystem():
user = getRunUser()
acme_dir = "/Users/"+user+"/.acme.sh"
abs_domain_path = acme_dir+'/'+domain+'_ecc'
# print(abs_domain_path)
if os.path.exists(abs_domain_path):
return True, abs_domain_path
abs_domain_path = acme_dir+'/'+domain
# print(abs_domain_path)
if os.path.exists(abs_domain_path):
return True, abs_domain_path
return False,''
def hookWriteLog(line):
hook_file = runLog()
mdate = time.strftime('%Y-%m-%d %X', time.localtime())
log = "["+mdate+"]:"+line
print(log)
return mw.writeFile(hook_file,log+"\n",'a+')
def runHookPy(domain,path):
# print(domain,path)
run_log = runLog()
hook_file = getConf()
cmd = 'cd '+mw.getPanelDir()
cmd += ' && python3 '+hook_file + ' ' + domain + ' ' + path
cmd += ' >> '+ run_log
print(cmd)
return mw.execShell(cmd)
def autoUpdateSslData(domain, path):
ssl_cer_file = path + '/'+domain+'.cer'
ssl_info = mw.getCertName(ssl_cer_file)
time_begin = int(time.mktime(time.strptime(ssl_info['notBefore'], "%Y-%m-%d")))
time_end = int(time.mktime(time.strptime(ssl_info['notAfter'], "%Y-%m-%d")))
# print(ssl_info)
# print(time_begin,time_end)
conn = pSqliteDb('domain')
conn.where('domain=?', (domain,)).update({
'effective_date':str(time_begin),
'expiration_date':str(time_end),
})
return True
def runHookDstDomain(row):
domain = row['domain']
email = str(row['email'])
if row['effective_date'] != '':
effective_date = int(row['effective_date'])
now_int = int(time.time())
day = (now_int - effective_date)/86400
if int(day) < 8:
common_log = '【'+domain+'】未过期'
hookWriteLog(common_log)
return
hookWriteLog('开始申请【'+domain+'】SSL证书')
cmd = "#!/bin/bash\n"
cmd += "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin:/root/.acme.sh\n"
cmd += "export PATH\n"
if mw.isAppleSystem():
user = getRunUser()
cmd += "source /Users/"+user+"/.zshrc\n"
cmd_data = getDnsapiData(row['dnsapi_id'])
# print(cmd_data)
export_val = getDnsapiExportVar(cmd_data['val'])
cmd += export_val
# acme.sh --register-account -m my@example.com
cmd_register = 'acme.sh --register-account -m '+ email + '\n'
cmd += cmd_register
# acme.sh --issue -d "example.com" -d "*.example.com" --dns dns_cf
cmd_apply = 'acme.sh --issue --dns '+str(cmd_data['type'])+' -d '+domain+' -d "*.'+domain+'"'
if row['effective_date'] != '':
effective_date = int(row['effective_date'])
now_int = int(time.time())
day = (now_int - effective_date)/86400
if int(day) > 7:
cmd_apply = 'acme.sh --issue --dns '+str(cmd_data['type'])+' -d '+domain+' -d "*.'+domain+'" --force'
cmd += cmd_apply
run_log = runLog()
cmd += ' >> '+ run_log
print(cmd)
os.system(cmd)
hookWriteLog('结束申请【'+domain+'】SSL证书')
isok, path = domainApplyPathJudge(domain)
print(isok,path)
if isok:
autoUpdateSslData(domain, path)
hookWriteLog('开始执行【'+domain+'】Hook脚本')
runHookPy(domain,path)
hookWriteLog('结束执行【'+domain+'】Hook脚本')
def getHookIdCmd():
args = getArgs()
data = checkArgs(args, ['id'])
if not data[0]:
return data[1]
cmd = "cd "+mw.getPanelDir()+" "
cmd += '&& python3 plugins/acme_pandominassl_apply/index.py run_hook_id 1.0 {"id":"'+args['id']+'"}'
return mw.returnJson(True, 'ok',cmd)
def runHookId():
args = getArgs()
data = checkArgs(args, ['id'])
if not data[0]:
return data[1]
conn = pSqliteDb('domain')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
row = conn.field(field).where('id=?',(args['id'],)).find()
runHookDstDomain(row)
return 'run hook '+args['id']+' end'
def runHookCmd():
cmd = "cd "+mw.getPanelDir()+" "
cmd += '&& python3 plugins/acme_pandominassl_apply/index.py run_hook'
return mw.returnJson(True, 'ok',cmd)
def runHook():
conn = pSqliteDb('domain')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
clist = conn.field(field).where('status=?',(1,)).limit('1000').order('id desc').select()
for idx in range(len(clist)):
row = clist[idx]
# print(row)
runHookDstDomain(row)
time.sleep(1)
return 'run hook end'
def autoSyncDomain(domain, dnsapi_id, email):
conn = pSqliteDb('domain')
field = 'id,domain,dnsapi_id,email,effective_date,expiration_date,remark'
fdata = conn.field(field).where('domain=?',(domain,)).select()
# print(fdata)
mdate = time.strftime('%Y-%m-%d %X', time.localtime())
if len(fdata) == 0:
conn.add('domain,dnsapi_id,email,remark,addtime', (domain, dnsapi_id, email,"备注", mdate))
print(domain+" 同步成功!")
return True
def runSyncCfDataRow(row, page = 1):
# print(row, page)
cf_key = row['kv']['CF_Key']
cf_mail = row['kv']['CF_Email']
header = {
'X-Auth-Email': cf_mail,
'X-Auth-Key': cf_key,
'Content-Type': 'application/json'
}
url = "https://api.cloudflare.com/client/v4/zones?status=active&page="+str(page)+"&per_page=20&order=status&direction=desc&match=all"
try:
r = requests.get(url, timeout=30, headers=header)
r.raise_for_status()
r.encoding = r.apparent_encoding
# print(r.text)
jdata = json.loads(r.text)
result = jdata['result']
result_info = jdata['result_info']
# print(len(result))
for i in result:
autoSyncDomain(i['name'], row['id'], cf_mail)
if result_info['total_pages'] > page:
page += 1
runSyncCfDataRow(row, page)
# print(result)
except Exception as e:
print(e)
# 同步CloudFlare数据
def runSyncCfData():
print("同步CloudFlare数据开始")
conn_dnsapi = pSqliteDb('dnsapi')
field = "id,name,type,val"
fdata = conn_dnsapi.field(field).where('type=?', ('dns_cf',)).limit('10').select()
for x in range(len(fdata)):
row = fdata[x]
dnsapi_kv = getDnsapiKv(row['val'])
row['kv'] = dnsapi_kv
runSyncCfDataRow(row)
print("同步CloudFlare数据结束")
return ''
def runSyncCfCmd():
cmd = "cd "+mw.getPanelDir()+" "
cmd += '&& python3 plugins/acme_pandominassl_apply/index.py run_sync_cf_data'
return mw.returnJson(True, 'ok',cmd)
def runSyncDnspodDataRow(row, page = 1):
# print(row, page)
DPI_Id = row['kv']['DPI_Id']
DPI_Key = row['kv']['DPI_Key']
data = {
'login_token': DPI_Id+','+DPI_Key,
'length':5,
'format':'json',
}
url = "https://api.dnspod.com/Domain.List"
try:
r = requests.post(url, timeout=30, data=data)
r.raise_for_status()
r.encoding = r.apparent_encoding
# print(r.text)
jdata = json.loads(r.text)
info = jdata['info']
domains = jdata['domains']
# print(jdata)
for i in domains:
autoSyncDomain(i['name'], row['id'], i['owner'])
page_total = int(info['domain_total']/data['length'])
if page_total > page:
page += 1
runSyncDnspodDataRow(row, page)
except Exception as e:
print(e)
# 同步DnsPod数据
def runSyncDnsPodData():
print("同步DnsPod数据开始")
conn_dnsapi = pSqliteDb('dnsapi')
field = "id,name,type,val"
fdata = conn_dnsapi.field(field).where('type=?', ('dns_dpi',)).limit('10').select()
for x in range(len(fdata)):
row = fdata[x]
dnsapi_kv = getDnsapiKv(row['val'])
row['kv'] = dnsapi_kv
runSyncDnspodDataRow(row)
print(fdata)
print("同步DnsPod数据结束")
return ''
def runSyncDnsPodCmd():
cmd = "cd "+mw.getPanelDir()+" "
cmd += '&& python3 plugins/acme_pandominassl_apply/index.py run_sync_dnspod_data'
return mw.returnJson(True, 'ok',cmd)
if __name__ == "__main__":
func = sys.argv[1]
# print(func)
if func == 'status':
print(status())
elif func == 'start':
print(start())
elif func == 'stop':
print(stop())
elif func == 'restart':
print(restart())
elif func == 'reload':
print(reload())
elif func == 'run_info':
print(runInfo())
elif func == 'conf':
print(getConf())
elif func == 'run_log':
print(runLog())
elif func == 'config_tpl':
print(configTpl())
elif func == 'read_config_tpl':
print(readConfigTpl())
elif func == 'dnsapi_list':
print(dnsapiList())
elif func == 'dnsapi_list_all':
print(dnsapiListAll())
elif func == 'dnsapi_add':
print(dnsapiAdd())
elif func == 'dnsapi_del':
print(dnsapiDel())
elif func == 'email_list':
print(emailList())
elif func == 'email_add':
print(emailAdd())
elif func == 'email_del':
print(emailDel())
elif func == 'domain_list':
print(domainList())
elif func == 'domain_add':
print(domainAdd())
elif func == 'domain_del':
print(domainDel())
elif func == 'domain_status_toggle':
print(domainStatusToggle())
elif func == 'run_hook':
print(runHook())
elif func == 'run_hook_cmd':
print(runHookCmd())
elif func == 'get_run_hook_id_cmd':
print(getHookIdCmd())
elif func == 'run_hook_id':
print(runHookId())
elif func == 'run_sync_cf_data':
print(runSyncCfData())
elif func == 'run_sync_cf_cmd':
print(runSyncCfCmd())
elif func == 'run_sync_dnspod_data':
print(runSyncDnsPodData())
elif func == 'run_sync_dnspod_cmd':
print(runSyncDnsPodCmd())
else:
print('error')

View File

@@ -0,0 +1,17 @@
{
"sort": 7,
"ps": "ACME泛域名SSL申请/管理",
"name": "acme_pandominassl_apply",
"title": "ACME泛域名SSL",
"shell": "install.sh",
"versions":["1.0"],
"tip": "soft",
"checks": "server/acme_pandominassl_apply",
"path": "server/acme_pandominassl_apply",
"display": 1,
"author": "ACME",
"date": "2024-09-12",
"home": "https://github.com/acmesh-official/acme.sh",
"type": 0,
"pid": "5"
}

View File

@@ -0,0 +1,54 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
export PATH
curPath=`pwd`
rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
VERSION=$2
# curl https://get.acme.sh | sh
# acme.sh --uninstall
# source /Users/xxx/.zshrc
# https://github.com/acmesh-official/acme.sh/wiki/dnsapi
# https://docs.dnspod.com/api-legacy/domains.html#get-the-domain-list
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_hook
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_sync_cf_data
# cd /www/server/mdserver-web && python3 plugins/acme_pandominassl_apply/index.py run_sync_dnspod_data
if [ -f ${rootPath}/bin/activate ];then
source ${rootPath}/bin/activate
fi
# pip install cloudflare
Install_App()
{
echo '正在安装脚本文件...'
mkdir -p $serverPath/source
mkdir -p $serverPath/acme_pandominassl_apply
echo "${VERSION}" > $serverPath/acme_pandominassl_apply/version.pl
cd ${rootPath} && python3 ${rootPath}/plugins/acme_pandominassl_apply/index.py start
echo '安装[ACME泛域名SSL]完成'
}
Uninstall_App()
{
cd ${rootPath} && python3 ${rootPath}/plugins/acme_pandominassl_apply/index.py stop
rm -rf $serverPath/acme_pandominassl_apply
echo "卸载[ACME泛域名SSL]成功"
}
action=$1
if [ "${1}" == 'install' ];then
Install_App
else
Uninstall_App
fi

View File

@@ -0,0 +1,801 @@
function apaPost(method, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'acme_pandominassl_apply';
req_data['func'] = method;
req_data['version'] = $('.plugin_version').attr('version');
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function apaPostN(method, args,callback){
var req_data = {};
req_data['name'] = 'acme_pandominassl_apply';
req_data['func'] = method;
req_data['version'] = $('.plugin_version').attr('version');
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function apaPostCallbak(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'acme_pandominassl_apply';
req_data['func'] = method;
args['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function apaReadme(){
var readme = '<ul class="help-info-text c7">';
readme += '<li>ACME泛域名SSL申请/管理/HOOK</li>';
readme += '<li>通过DNS验证获取SSL证书!</li>';
readme += '<li>HOOK: ssl发生变动时调用!</li>';
readme += '<li>暂时仅支持1000个域名管理!</li>';
readme += '<li>DNSAPI文档: https://github.com/acmesh-official/acme.sh/wiki/dnsapi</li>';
readme += '<li>默认7天强制更新!</li>';
readme += '</ul>';
$('.soft-man-con').html(readme);
}
function emailDel(id, name){
safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){
var data='id='+id+'&name='+name;
apaPost('email_del', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
emailList();
},{icon: rdata.status ? 1 : 2}, 600);
});
});
}
function emailAdd(type){
layer.open({
type: 1,
area: '500px',
title: '添加邮件地址',
closeBtn: 1,
shift: 5,
shadeClose: true,
btn:["提交","关闭"],
content: "<form class='bt-form pd20' id='email_add'>\
<div class='line'>\
<span class='tname'>邮件地址</span>\
<div class='info-r'><input name='addr' class='bt-input-text mr5' style='width:100%;' placeholder='邮件地址' type='text'></div>\
</div>\
<div class='line'>\
<span class='tname'>备注</span>\
<div class='info-r'><input name='remark' class='bt-input-text mr5' style='width:100%;' placeholder='备注' type='text'></div>\
</div>\
</form>",
success:function(){
$("input[name='addr']").keyup(function(){
var v = $(this).val();
$("input[name='remark']").val(v);
});
},
yes:function(index) {
var data = $("#email_add").serialize();
data = decodeURIComponent(data);
// data = toArrayObject(data);
apaPost('email_add', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
if (rdata.status){
layer.close(index);
emailList();
}
},{icon: rdata.status ? 1 : 2}, 2000);
});
}
});
}
function emailList(page, search){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
_data['page'] = page;
_data['page_size'] = 10;
if(typeof(search) != 'undefined'){
_data['search'] = search;
}
apaPost('email_list', _data, function(data){
var rdata = $.parseJSON(data.data);
var list = '';
for(i in rdata.data){
list += '<tr>';
list +='<td><input value="'+rdata.data[i]['id']+'" class="check" onclick="checkSelect();" type="checkbox"></td>';
list += '<td>' + rdata.data[i]['addr'] +'</td>';
list += '<td>' + rdata.data[i]['remark'] +'</td>';
list += '<td style="text-align:right">';
list += '<a href="javascript:;" class="btlink" onclick="emailDel(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['addr']+'\')" title="删除">删除</a>' +
'</td>';
list += '</tr>';
}
var con = '<div class="safe bgw">\
<button onclick="emailAdd()" title="添加邮件地址" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加邮件地址</button>\
<span style="float:right"> \
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
</span>\
<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
<thead><tr><th width="30"><input class="check" onclick="checkSelect();" type="checkbox"></th>\
<th>邮件地址</th>\
<th>备注</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>'+ list +'</tbody>\
</table>\
</div>\
<div class="dataTables_paginate paging_bootstrap page"></div>\
</div>\
</div>';
$(".soft-man-con").html(con);
$('.dataTables_paginate').html(rdata.page);
readerTableChecked();
});
}
function dnsapiDel(id, name){
safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){
var data='id='+id+'&name='+name;
apaPost('dnsapi_del', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
dnsapiList();
},{icon: rdata.status ? 1 : 2}, 600);
});
});
}
var dnsapi_option = [
{"name":"dns_cf", "title":'cloudflare', 'key':'CF_Key:CF_Email'},
{"name":"dns_dp", "title":'dnspod/国内', 'key':'DP_Id:DP_Key'},
{"name":"dns_dpi", "title":'dnspod/国际', 'key':'DPI_Id:DPI_Key'},
{"name":"dns_gd", "title":'GoDaddy', 'key':'GD_Key:GD_Secret'},
{"name":"dns_pdns", "title":'PowerDNS', 'key':'PDNS_Url:PDNS_ServerId:PDNS_Token:PDNS_Ttl'},
{"name":"dns_lua", "title":'LuaDNS', 'key':'LUA_Key:LUA_Email'},
{"name":"dns_me", "title":'DNSMadeEasy', 'key':'ME_Key:ME_Secret'},
{"name":"dns_aws", "title":'Amazon Route53', 'key':'AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY'},
{"name":"dns_ali", "title":'Aliyun', 'key':'Ali_Key:Ali_Secret'},
{"name":"dns_ispconfig", "title":'ISPConfig', 'key':'ISPC_User:ISPC_Password:ISPC_Api:ISPC_Api_Insecure'},
{"name":"dns_ad", "title":'Alwaysdata', 'key':'AD_API_KEY'},
{"name":"dns_linode_v4", "title":'Linode', 'key':'LINODE_V4_API_KEY'},
{"name":"dns_freedns", "title":'FreeDNS', 'key':'FREEDNS_User:FREEDNS_Password'},
{"name":"dns_cyon", "title":'cyon.ch', 'key':'CY_Username:CY_Password:CY_OTP_Secret'},
{"name":"dns_gandi_livedns", "title":'LiveDNS', 'key':'GANDI_LIVEDNS_TOKEN'},
{"name":"dns_knot", "title":'Knot', 'key':'KNOT_SERVER:KNOT_KEY'},
{"name":"dns_dgon", "title":'DigitalOcean', 'key':'DO_API_KEY'},
{"name":"dns_cloudns", "title":'ClouDNS.net', 'key':'CLOUDNS_SUB_AUTH_ID:CLOUDNS_AUTH_PASSWORD'},
{"name":"dns_namesilo", "title":'Namesilo', 'key':'Namesilo_Key'},
{"name":"dns_azure", "title":'Azure', 'key':'AZUREDNS_SUBSCRIPTIONID:AZUREDNS_TENANTID:AZUREDNS_APPID:AZUREDNS_CLIENTSECRET'},
{"name":"dns_selectel", "title":'selectel.com', 'key':'SL_Key'},
{"name":"dns_zonomi", "title":'zonomi.com', 'key':'ZM_Key'},
{"name":"dns_kinghost", "title":'KingHost', 'key':'KINGHOST_Username:KINGHOST_Password'},
{"name":"dns_zilore", "title":'Zilore', 'key':'Zilore_Key'},
{"name":"dns_gcloud", "title":'Google Cloud DNS', 'key':'CLOUDSDK_ACTIVE_CONFIG_NAME'},
{"name":"dns_mydnsjp", "title":'MyDNS.JP', 'key':'MYDNSJP_MasterID:MYDNSJP_Password'},
{"name":"dns_doapi", "title":'do.de', 'key':'DO_LETOKEN'},
{"name":"dns_online", "title":'Online', 'key':'ONLINE_API_KEY'},
{"name":"dns_cn", "title":'Core-Networks', 'key':'CN_User:CN_Password'},
{"name":"dns_ultra", "title":'UltraDNS', 'key':'ULTRA_USR:ULTRA_PWD'},
{"name":"dns_hetzner", "title":'Hetzner', 'key':'HETZNER_Token'},
{"name":"dns_ddnss", "title":'DDNSS.de', 'key':'DDNSS_Token'},
];
function getDnsapiKey(name){
for (var i = 0; i < dnsapi_option.length; i++) {
if (dnsapi_option[i]['name'] == name){
return dnsapi_option[i]['key'];
}
}
return '';
}
function getDnsapiTitle(name){
for (var i = 0; i < dnsapi_option.length; i++) {
if (dnsapi_option[i]['name'] == name){
return dnsapi_option[i]['title'];
}
}
return '其他';
}
function dnsapiAdd(row){
// console.log(row);
var option_name = '';
var option_remark = '';
var option_type = 'dns_cf';
var option_val = '';
var option_id = 0;
if (typeof(row) != 'undefined'){
option_name = row['name'];
option_remark = row['remark'];
option_type = row['type'];
option_val = row['val'];
option_id = row['id'];
}
function renderDnsapiOption(name, val){
var vlist = {};
if (val != ''){
var t = val.split('~');
for (var i = 0; i < t.length; i++) {
var kv = t[i].split('|');
if (kv.length == 2){
vlist[kv[0]] = kv[1];
} else {
vlist[kv[0]] = '';
}
}
// console.log(vlist);
}
var key = getDnsapiKey(name);
var klist = key.split(':');
var option_html = '';
for (var i = 0; i < klist.length; i++) {
var klist_val = '';
if (klist[i] in vlist){
klist_val = vlist[klist[i]];
}
option_html += "<span class='tname'>"+klist[i]+"</span>\
<div class='info-r'>\
<input name='"+klist[i]+"' class='bt-input-text mr5' style='width:100%;' value='"+klist_val+"' placeholder='请输入对应值' type='text'>\
</div>";
}
$('#dnsapi_option').html(option_html);
}
layer.open({
type: 1,
area: '500px',
title: '添加DNSAPI',
closeBtn: 1,
shift: 5,
shadeClose: true,
btn:["提交","关闭"],
content: "<form class='bt-form pd20' id='dnsapi_add'>\
<div class='line'>\
<span class='tname'>名称</span>\
<div class='info-r'><input name='name' class='bt-input-text mr5' style='width:100%;' placeholder='名称' value='"+option_name+"' type='text'></div>\
</div>\
<div class='line'>\
<span class='tname'>DNSAPI类型</span>\
<div class='info-r'>\
<select class='bt-input-text mr5' name='type'>\
<option name='cf'>cloudflare</option>\
</select>\
</div>\
</div>\
<div class='line' id='dnsapi_option'>\
<span class='tname'>CF_Key</span>\
<div class='info-r'>\
<input name='v1' class='bt-input-text mr5' style='width:100%;' placeholder='请输入对应值' type='text'>\
</div>\
<span class='tname'>CF_Email</span>\
<div class='info-r'>\
<input name='v2' class='bt-input-text mr5' style='width:100%;' placeholder='请输入对应值' type='text'>\
</div>\
</div>\
<div class='line'>\
<span class='tname'>备注</span>\
<div class='info-r'><input name='remark' class='bt-input-text mr5' style='width:100%;' placeholder='备注' value='"+option_remark+"' type='text'></div>\
</div>\
<input name='id' value='"+option_id+"' type='hidden'>\
</form>",
success:function(){
$("input[name='name']").keyup(function(){
var v = $(this).val();
$("input[name='remark']").val(v);
});
var option = '';
for (var i = 0; i<dnsapi_option.length; i++) {
if (dnsapi_option[i]['name'] == option_type){
option += "<option value='"+dnsapi_option[i]['name']+"' key='"+dnsapi_option[i]['key']+"' selected>"+dnsapi_option[i]['title']+"</option>";
} else {
option += "<option value='"+dnsapi_option[i]['name']+"' key='"+dnsapi_option[i]['key']+"'>"+dnsapi_option[i]['title']+"</option>";
}
}
renderDnsapiOption(option_type, option_val);
$('select[name="type"]').html(option);
$('select[name="type"]').change(function(){
var name = $(this).val();
if (option_type == name){
renderDnsapiOption(name, option_val);
} else {
renderDnsapiOption(name,'');
}
});
},
yes:function(index) {
var data = $("#dnsapi_add").serialize();
data = decodeURIComponent(data);
data = toArrayObject(data);
var key = getDnsapiKey(data['type']);
var klist = key.split(':');
var val = '';
for (var i = 0; i < klist.length; i++) {
var k = klist[i];
if (k in data){
if (klist.length - 1 == i){
val += k + '|' + data[k];
} else {
val += k + '|' + data[k]+'~';
}
}
}
data['val'] = val;
apaPost('dnsapi_add', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
if (rdata.status){
layer.close(index);
dnsapiList();
}
},{icon: rdata.status ? 1 : 2}, 2000);
});
}
});
}
function dnsapiList(page, search){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
_data['page'] = page;
_data['page_size'] = 10;
if(typeof(search) != 'undefined'){
_data['search'] = search;
}
apaPost('dnsapi_list', _data, function(data){
var rdata = $.parseJSON(data.data);
var list = '';
for(i in rdata.data){
list += '<tr>';
list +='<td><input value="'+rdata.data[i]['id']+'" class="check" onclick="checkSelect();" type="checkbox"></td>';
list += '<td>' + rdata.data[i]['name'] +'</td>';
list += '<td>' + getDnsapiTitle(rdata.data[i]['type']) +'</td>';
list += '<td>' + rdata.data[i]['val'].split('~').join("<br/>") +'</td>';
list += '<td>' + rdata.data[i]['remark'] +'</td>';
list += '<td style="text-align:right">';
list += '<a href="javascript:;" index="'+i+'" class="btlink edit" title="编辑">编辑</a> | ';
list += '<a href="javascript:;" class="btlink" onclick="dnsapiDel(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['name']+'\')" title="删除">删除</a>';
list += '</td></tr>';
}
var con = '<div class="safe bgw">\
<button onclick="dnsapiAdd()" title="DNSAPI" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加DNSAPI</button>\
<span style="float:right"> \
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
</span>\
<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
<thead><tr><th width="30"><input class="check" onclick="checkSelect();" type="checkbox"></th>\
<th>名称</th>\
<th>类型</th>\
<th>值</th>\
<th>备注</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>'+ list +'</tbody>\
</table>\
</div>\
<div class="dataTables_paginate paging_bootstrap page"></div>\
</div>\
</div>';
$(".soft-man-con").html(con);
$('.dataTables_paginate').html(rdata.page);
$('.edit').click(function(){
var idx = $(this).attr('index');
var row = rdata.data[idx];
// console.log(row);
dnsapiAdd(row);
})
readerTableChecked();
});
}
function domainDel(id, name){
safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){
var data='id='+id+'&name='+name;
apaPost('domain_del', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
domainList();
},{icon: rdata.status ? 1 : 2}, 600);
});
});
}
function domainStatusToggle(id){
var data='id='+id;
apaPost('domain_status_toggle', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
domainList();
},{icon: rdata.status ? 1 : 2}, 600);
});
}
function domainIdCmd(id){
var data='id='+id;
apaPost('get_run_hook_id_cmd', data, function(data){
var rdata = $.parseJSON(data.data);
// console.log(rdata);
layer.open({
title: "手动同步命令",
area: ['600px', '180px'],
type:1,
closeBtn: 1,
shadeClose: false,
btn:["复制","取消"],
content: '<div class="pd15">\
<div class="divtable">\
<pre class="layui-code">'+rdata.data+'</pre>\
</div>\
</div>',
success:function(){
copyText(rdata.data);
},
yes:function(){
copyText(rdata.data);
}
});
});
}
function domainHookCmd(){
apaPost('run_hook_cmd', {}, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
title: "手动同步全部命令",
area: ['600px', '180px'],
type:1,
closeBtn: 1,
shadeClose: false,
btn:["复制","取消"],
content: '<div class="pd15">\
<div class="divtable">\
<pre class="layui-code">'+rdata.data+'</pre>\
</div>\
</div>',
success:function(){
copyText(rdata.data);
},
yes:function(){
copyText(rdata.data);
}
});
});
}
function syncCfCmd(){
apaPost('run_sync_cf_cmd', {}, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
title: "手动同步CloudFlare全部域名命令",
area: ['600px', '180px'],
type:1,
closeBtn: 1,
shadeClose: false,
btn:["复制","取消"],
content: '<div class="pd15">\
<div class="divtable">\
<pre class="layui-code">'+rdata.data+'</pre>\
</div>\
</div>',
success:function(){
copyText(rdata.data);
},
yes:function(){
copyText(rdata.data);
}
});
});
}
function syncDnsPodCmd(){
apaPost('run_sync_dnspod_cmd', {}, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
title: "手动同步DnsPod全部域名命令",
area: ['600px', '180px'],
type:1,
closeBtn: 1,
shadeClose: false,
btn:["复制","取消"],
content: '<div class="pd15">\
<div class="divtable">\
<pre class="layui-code">'+rdata.data+'</pre>\
</div>\
</div>',
success:function(){
copyText(rdata.data);
},
yes:function(){
copyText(rdata.data);
}
});
});
}
function domainAdd(row){
var option_domian = '';
var option_remark = '备注';
var option_email = '';
var option_id = 0;
var option_dnsapi_id = 0;
if (typeof(row) != 'undefined'){
option_domian = row['domain'];
option_remark = row['remark'];
option_email = row['email'];
option_id = row['id'];
option_dnsapi_id = row['dnsapi_id'];
}
layer.open({
type: 1,
area: '500px',
title: '添加顶级域名',
closeBtn: 1,
shift: 5,
shadeClose: true,
btn:["提交","关闭"],
content: "<form class='bt-form pd20' id='domain_add'>\
<div class='line'>\
<span class='tname'>域名</span>\
<div class='info-r'><input name='domain' class='bt-input-text mr5' style='width:100%;' value='"+option_domian+"' placeholder='域名' type='text'></div>\
</div>\
<div class='line'>\
<span class='tname'>DNSAPI</span>\
<div class='info-r'>\
<select class='bt-input-text mr5' name='dnsapi_id'>\
<option name='0'>无设置</option>\
</select>\
</div>\
</div>\
<div class='line'>\
<span class='tname'>邮件</span>\
<div class='info-r'><input name='email' class='bt-input-text mr5' style='width:100%;' value='"+option_email+"' placeholder='邮件' type='text'></div>\
</div>\
<div class='line'>\
<span class='tname'>备注</span>\
<div class='info-r'><input name='remark' class='bt-input-text mr5' style='width:100%;' value='"+option_remark+"' placeholder='备注' type='text'></div>\
</div>\
<input name='id' value='"+option_id+"' type='hidden'>\
</form>",
success:function(){
// $("input[name='domain']").keyup(function(){
// var v = $(this).val();
// $("input[name='remark']").val(v);
// });
var dnsapi_id_html = "<option value='0'>无设置</option>";
apaPostN('dnsapi_list_all', {}, function(data){
var rdata = $.parseJSON(data.data);
for (var i = 0; i < rdata.length; i++) {
if (option_dnsapi_id == rdata[i]['id']){
dnsapi_id_html += "<option value='"+rdata[i]['id']+"' val='"+rdata[i]['val']+"' selected>"+rdata[i]['name']+"</option>";
} else {
dnsapi_id_html += "<option value='"+rdata[i]['id']+"' val='"+rdata[i]['val']+"'>"+rdata[i]['name']+"</option>";
}
}
$('select[name="dnsapi_id"]').change(function(){
var val = $('select[name="dnsapi_id"]').find("option:selected").attr('val');
var val_arr = val.split("|");
for (var i = 0; i < val_arr.length; i++) {
var param = val_arr[i];
var strictEmailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if(strictEmailRegex.test(param)){
$('input[name="email"]').val(param);
}
}
});
$('select[name="dnsapi_id"]').html(dnsapi_id_html);
});
},
yes:function(index) {
var data = $("#domain_add").serialize();
data = decodeURIComponent(data);
apaPost('domain_add', data, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg,function(){
if (rdata.status){
layer.close(index);
domainList();
}
},{icon: rdata.status ? 1 : 2}, 2000);
});
}
});
}
function domainList(page, search){
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
}
_data['page'] = page;
_data['page_size'] = 10;
if(typeof(search) != 'undefined'){
_data['search'] = search;
}
apaPost('domain_list', _data, function(data){
var rdata = $.parseJSON(data.data);
// console.log(rdata);
var list = '';
for(i in rdata.data){
list += '<tr>';
list +='<td><input value="'+rdata.data[i]['id']+'" class="check" onclick="checkSelect();" type="checkbox"></td>';
list += '<td>' + rdata.data[i]['domain'] +'</td>';
list += '<td>' + rdata.data[i]['dnsapi_id_alias'] +'</td>';
list += '<td>' + rdata.data[i]['email'] +'</td>';
list += '<td>' + rdata.data[i]['remark'] +'</td>';
if (rdata.data[i]['effective_date'] == ''){
list += '<td>空/未申请</td>';
} else {
list += '<td>'+getFormatTime(rdata.data[i]['effective_date'],'yyyy/MM/dd')+'</td>';
}
if (rdata.data[i]['expiration_date'] == ''){
list += '<td>空/未申请</td>';
} else {
list += '<td>'+getFormatTime(rdata.data[i]['expiration_date'],'yyyy/MM/dd')+'</td>';
}
if (rdata.data[i]['status'] == '0'){
list += '<td><a href="javascript:;" index="'+i+'" class="btlink status">否</a></td>';
} else {
list += '<td><a href="javascript:;" index="'+i+'" class="btlink status">是</a></td>';
}
list += '<td style="text-align:right">';
list += '<a href="javascript:;" index="'+i+'" class="btlink cmd" title="命令">命令</a> | ';
list += '<a href="javascript:;" index="'+i+'" class="btlink edit" title="编辑">编辑</a> | ';
list += '<a href="javascript:;" class="btlink" onclick="domainDel(\''+rdata.data[i]['id']+'\',\''+rdata.data[i]['domain']+'\')" title="删除">删除</a>';
list += '</td></tr>';
}
var con = '<div class="safe bgw">\
<button onclick="domainAdd()" title="添加顶级域名" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加域名</button>\
<button onclick="domainHookCmd()" title="全部同步命令" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">全部同步命令</button>\
<button onclick="syncCfCmd()" title="cloudflare同步命令" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">cloudflare同步命令</button>\
<button onclick="syncDnsPodCmd()" title="DnsPod国际同步命令" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">DnsPod国际同步命令</button>\
<div class="divtable mtb10">\
<div class="tablescroll">\
<table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
<thead><tr><th width="30"><input class="check" onclick="checkSelect();" type="checkbox"></th>\
<th>域名</th>\
<th>DNSAPI</th>\
<th>邮件</th>\
<th>备注</th>\
<th>开始</th>\
<th>结束</th>\
<th>同步</th>\
<th style="text-align:right;">操作</th></tr></thead>\
<tbody>'+ list +'</tbody>\
</table>\
</div>\
<div class="dataTables_paginate paging_bootstrap page"></div>\
</div>\
</div>';
$(".soft-man-con").html(con);
$('.dataTables_paginate').html(rdata.page);
$('.edit').click(function(){
var idx = $(this).attr('index');
var row = rdata.data[idx];
domainAdd(row);
});
$('.status').click(function(){
var idx = $(this).attr('index');
var row = rdata.data[idx];
domainStatusToggle(row['id']);
});
$('.cmd').click(function(){
var idx = $(this).attr('index');
var row = rdata.data[idx];
domainIdCmd(row['id']);
});
readerTableChecked();
});
}

View File

@@ -0,0 +1,142 @@
# coding:utf-8
import sys
import io
import os
import time
import json
# print(sys.platform)
if sys.platform != "darwin":
os.chdir("/www/server/mdserver-web")
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
from utils.crontab import crontab as MwCrontab
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'acme_pandominassl_apply'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getTaskConf():
conf = getServerDir() + "/cron_config.json"
return conf
def getTaskDeltaConf():
conf = getServerDir() + "/cron_delta_config.json"
return conf
def getConfigData():
try:
return json.loads(mw.readFile(getTaskConf()))
except:
pass
return {
"task_id": -1,
"period": "day-n",
"where1": "1",
"hour": "0",
"minute": "15",
}
def createBgTask():
removeBgTask()
createBgTaskByName(getPluginName())
return True
def createBgTaskByName(name):
args = getConfigData()
_name = "[勿删]ACME泛域名SSL[APA]"
res = mw.M("crontab").field("id, name").where("name=?", (_name,)).find()
if res:
return True
if "task_id" in args and args["task_id"] > 0:
res = mw.M("crontab").field("id, name").where(
"id=?", (args["task_id"],)).find()
if res and res["id"] == args["task_id"]:
print("计划任务已经存在!")
return True
mw_dir = mw.getPanelDir()
cmd = '''
mw_dir=%s
rname=%s
plugin_path=%s
script_path=%s
logs_file=$plugin_path/${rname}.log
''' % (mw_dir, name, getServerDir(), getPluginDir())
cmd += 'echo "★【`date +"%Y-%m-%d %H:%M:%S"`】 STSRT★" >> $logs_file' + "\n"
cmd += 'echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" >> $logs_file' + "\n"
cmd += 'echo "python3 $script_path/index.py run_hook"' + "\n"
cmd += 'cd $mw_dir && python3 $script_path/index.py run_hook' + "\n"
cmd += 'echo "【`date +"%Y-%m-%d %H:%M:%S"`】 END★" >> $logs_file' + "\n"
cmd += 'echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" >> $logs_file' + "\n"
params = {
'name': _name,
'type': args['period'],
'week': "",
'where1': args['where1'],
'hour': args['hour'],
'minute': args['minute'],
'save': "",
'backup_to': "",
'stype': "toShell",
'sname': '',
'sbody': cmd,
'url_address': '',
}
task_id = MwCrontab.instance().add(params)
if task_id > 0:
args["task_id"] = task_id
args["name"] = name
mw.writeFile(getTaskConf(), json.dumps(args))
def removeBgTask():
cfg = getConfigData()
if "task_id" in cfg and cfg["task_id"] > 0:
res = mw.M("crontab").field("id, name").where(
"id=?", (cfg["task_id"],)).find()
if res and res["id"] == cfg["task_id"]:
import crontab_api
api = crontab_api.crontab_api()
data = api.delete(cfg["task_id"])
if data[0]:
cfg["task_id"] = -1
mw.writeFile(getTaskConf(), json.dumps(cfg))
return True
return False
if __name__ == "__main__":
if len(sys.argv) > 1:
action = sys.argv[1]
if action == "remove":
removeBgTask()
elif action == "add":
createBgTask()

BIN
plugins/alist/ico.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

31
plugins/alist/index.html Executable file
View File

@@ -0,0 +1,31 @@
<style>
.overflow_hide {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
</style>
<div class="bt-form">
<div class='plugin_version'></div>
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('alist');">服务</p>
<p onclick="pluginInitD('alist');">自启动</p>
<p onclick="alistCommonFunc();">常用功能</p>
<p onclick="pluginConfigTpl('alist',$('.plugin_version').attr('version'));">配置修改</p>
<p onclick="pluginLogs('alist','','run_log');">运行日志</p>
<p onclick="alistReadme();">相关说明</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con" style="height: 520px; overflow: auto;"></div>
</div>
</div>
</div>
<script type="text/javascript">
$.getScript( "/plugins/file?name=alist&f=js/alist.js", function(){
pluginService('alist', $('.plugin_version').attr('version'));
});
</script>

319
plugins/alist/index.py Executable file
View File

@@ -0,0 +1,319 @@
# coding:utf-8
import sys
import io
import os
import time
import re
import json
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'alist'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getInitDFile():
current_os = mw.getOs()
if current_os == 'darwin':
return '/tmp/' + getPluginName()
if current_os.startswith('freebsd'):
return '/etc/rc.d/' + getPluginName()
return '/etc/init.d/' + getPluginName()
def getInitDTpl():
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
return path
def getArgs():
args = sys.argv[3:]
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
if t.strip() == '':
tmp = []
else:
t = t.split(':')
tmp[t[0]] = t[1]
tmp[t[0]] = t[1]
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def checkArgs(data, ck=[]):
for i in range(len(ck)):
if not ck[i] in data:
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
return (True, mw.returnJson(True, 'ok'))
def getConf():
path = getServerDir() + "/data/config.json"
return path
def configTpl():
path = getPluginDir() + '/tpl'
pathFile = os.listdir(path)
tmp = []
for one in pathFile:
file = path + '/' + one
tmp.append(file)
return mw.getJson(tmp)
def readConfigTpl():
args = getArgs()
data = checkArgs(args, ['file'])
if not data[0]:
return data[1]
content = mw.readFile(args['file'])
content = contentReplace(content)
return mw.returnJson(True, 'ok', content)
def __release_port(port, ps = '开启端口'):
try:
from utils.firewall import Firewall as MwFirewall
MwFirewall.instance().addAcceptPort(port, ps, 'port')
return port
except Exception as e:
return "Release failed {}".format(e)
def __delete_port(port):
try:
from utils.firewall import Firewall as MwFirewall
MwFirewall.instance().delAcceptPortCmd(port, 'tcp')
return port
except Exception as e:
return "Delete failed {}".format(e)
def openPort():
content = mw.readFile(getConf())
data = json.loads(content)
http_port = data['scheme']['http_port']
__release_port(http_port, 'alist')
return True
def status():
cmd = "ps aux|grep alist |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'"
data = mw.execShell(cmd)
if data[0] == '':
return 'stop'
return 'start'
def contentReplace(content):
service_path = mw.getServerDir()
content = content.replace('{$ROOT_PATH}', mw.getFatherDir())
content = content.replace('{$SERVER_PATH}', service_path)
content = content.replace('{$SERVER_APP}', service_path + '/'+getPluginName())
return content
def initDreplace():
file_tpl = getInitDTpl()
service_path = mw.getServerDir()
initD_path = getServerDir() + '/init.d'
if not os.path.exists(initD_path):
os.mkdir(initD_path)
file_bin = initD_path + '/' + getPluginName()
# initd replace
if not os.path.exists(file_bin):
content = mw.readFile(file_tpl)
content = content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(file_bin, content)
mw.execShell('chmod +x ' + file_bin)
# systemd
systemDir = mw.systemdCfgDir()
systemService = systemDir + '/' + getPluginName() + '.service'
if os.path.exists(systemDir) and not os.path.exists(systemService):
systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl'
service_path = mw.getServerDir()
se_content = mw.readFile(systemServiceTpl)
se_content = se_content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(systemService, se_content)
mw.execShell('systemctl daemon-reload')
time.sleep(1)
return file_bin
def alistOp(method):
file = initDreplace()
current_os = mw.getOs()
if current_os == "darwin":
data = mw.execShell(file + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
if current_os.startswith("freebsd"):
data = mw.execShell('service ' + getPluginName() + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
if data[1] == '':
return 'ok'
return data[1]
def start():
return alistOp('start')
def stop():
return alistOp('stop')
def restart():
status = alistOp('restart')
return status
def reload():
return alistOp('reload')
def initdStatus():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
if os.path.exists(initd_bin):
return 'ok'
shell_cmd = 'systemctl status ' + \
getPluginName() + ' | grep loaded | grep "enabled;"'
data = mw.execShell(shell_cmd)
if data[0] == '':
return 'fail'
return 'ok'
def initdInstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
# freebsd initd install
if current_os.startswith('freebsd'):
import shutil
source_bin = initDreplace()
initd_bin = getInitDFile()
shutil.copyfile(source_bin, initd_bin)
mw.execShell('chmod +x ' + initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="YES"')
return 'ok'
mw.execShell('systemctl enable ' + getPluginName())
return 'ok'
def initdUinstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
os.remove(initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="NO"')
return 'ok'
mw.execShell('systemctl disable ' + getPluginName())
return 'ok'
def runLog():
return getServerDir() + '/data/log/log.log'
def pSqliteDb(dbname='databases'):
pos_file = getServerDir() + '/data/'
file = pos_file + '/data.db'
name = 'data'
conn = mw.M(dbname).dbPos(pos_file, name)
return conn
def clearCopyTask():
conn = pSqliteDb('x_task_items')
conn.where('key=?', ('copy',)).setField('persist_data','[]')
restart()
return mw.returnJson(True, '清空成功并重启服务!')
def homePage():
content = mw.readFile(getConf())
data = json.loads(content)
http_port = data['scheme']['http_port']
ip = mw.getLocalIp()
if mw.isAppleSystem():
ip = '127.0.0.1'
url = 'http://'+ip+":"+str(http_port)
# print(url)
return mw.returnJson(True, 'ok!', url)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
print(status())
elif func == 'start':
print(start())
elif func == 'stop':
print(stop())
elif func == 'restart':
print(restart())
elif func == 'reload':
print(reload())
elif func == 'initd_status':
print(initdStatus())
elif func == 'initd_install':
print(initdInstall())
elif func == 'initd_uninstall':
print(initdUinstall())
elif func == 'conf':
print(getConf())
elif func == 'run_log':
print(runLog())
elif func == 'config_tpl':
print(configTpl())
elif func == 'read_config_tpl':
print(readConfigTpl())
elif func == 'clear_copy_task':
print(clearCopyTask())
elif func == 'home_page':
print(homePage())
else:
print('error')

17
plugins/alist/info.json Executable file
View File

@@ -0,0 +1,17 @@
{
"sort": 7,
"ps": "一个支持多种存储的文件列表程序",
"name": "alist",
"title": "Alist",
"shell": "install.sh",
"versions":["3.37.4","3.38.0","3.45.0"],
"tip": "soft",
"checks": "server/alist",
"path": "server/alist",
"display": 1,
"author": "alist",
"date": "2022-10-09",
"home": "https://alist.nn.ci",
"type": 0,
"pid": "5"
}

View File

@@ -0,0 +1,13 @@
[Unit]
Description=A file list program that supports multiple storage
After=network.target
[Service]
Type=simple
WorkingDirectory={$SERVER_PATH}/alist
ExecStart={$SERVER_PATH}/alist/alist server
ExecReload=/bin/kill -USR2 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,46 @@
#!/bin/sh
# chkconfig: 2345 55 25
# description: alist Service
### BEGIN INIT INFO
# Provides: alist
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts alist
# Description: starts the MDW-Web
### END INIT INFO
# Simple alist init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
app_start(){
echo "Starting alist server..."
cd {$SERVER_PATH}/alist
./alist server >> {$SERVER_PATH}/alist/logs.pl 2>&1 &
}
app_stop(){
echo "dztasks stopped"
ps -ef| grep alist | grep -v grep | grep -v python | grep -v sh | awk '{print $2}'| xargs kill -9
}
case "$1" in
start)
app_start
;;
stop)
app_stop
;;
restart|reload)
app_stop
sleep 0.3
app_start
;;
*)
echo "Please use start or stop as first argument"
;;
esac

93
plugins/alist/install.sh Executable file
View File

@@ -0,0 +1,93 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
export PATH
curPath=`pwd`
rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
# cd /Users/midoks/Desktop/mwdev/server/mdserver-web/plugins/alist && bash install.sh install 3.37.4
# cd /www/server/mdserver-web/plugins/alist && bash install.sh install 3.45.0
VERSION=$2
sysArch=`arch`
sysName=`uname`
ALIST_ARCH_NAME=amd64
if [ "$sysArch" == "arm64" ];then
ALIST_ARCH_NAME=arm64
elif [ "$sysArch" == "x86_64" ]; then
ALIST_ARCH_NAME=amd64
elif [ "$sysArch" == "aarch64" ]; then
ALIST_ARCH_NAME=arm64
fi
ALIST_NAME=linux
if [ "$sysName" == "Darwin" ];then
ALIST_NAME=darwin
fi
Install_App()
{
echo '正在安装脚本文件...'
mkdir -p $serverPath/source
mkdir -p $serverPath/source/alist
FILE_TGZ=alist-${ALIST_NAME}-${ALIST_ARCH_NAME}.tar.gz
ALIST_DIR=$serverPath/source/alist
if [ ! -f $ALIST_DIR/${FILE_TGZ} ];then
wget --no-check-certificate -O $ALIST_DIR/${FILE_TGZ} https://github.com/alist-org/alist/releases/download/v${VERSION}/${FILE_TGZ}
fi
mkdir -p $serverPath/alist
cd $ALIST_DIR && tar -zxvf ${FILE_TGZ} -C $serverPath/alist
echo "${VERSION}" > $serverPath/alist/version.pl
cd ${rootPath} && python3 ${rootPath}/plugins/alist/index.py start
cd ${rootPath} && python3 ${rootPath}/plugins/alist/index.py initd_install
cd $serverPath/alist && ./alist admin set admin
# cd /www/server/alist && ./alist admin set admin
echo '安装完成'
}
Uninstall_App()
{
if [ -f /usr/lib/systemd/system/alist.service ];then
systemctl stop alist
systemctl disable alist
rm -rf /usr/lib/systemd/system/alist.service
systemctl daemon-reload
fi
if [ -f /lib/systemd/system/alist.service ];then
systemctl stop alist
systemctl disable alist
rm -rf /lib/systemd/system/alist.service
systemctl daemon-reload
fi
if [ -f $serverPath/alist/initd/alist ];then
$serverPath/alist/initd/alist stop
fi
if [ -d $serverPath/alist ];then
rm -rf $serverPath/alist
fi
echo "卸载alist成功"
}
action=$1
if [ "${1}" == 'install' ];then
Install_App
else
Uninstall_App
fi

93
plugins/alist/js/alist.js Executable file
View File

@@ -0,0 +1,93 @@
function alistPost(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'alist';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function alistPostCallbak(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'alist';
req_data['func'] = method;
args['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function clearTaskCopy(){
layer.confirm('您真的要清空复制任务吗?', { icon: 3, closeBtn: 2 }, function() {
alistPost('clear_copy_task', '', {}, function(data){
var rdata = $.parseJSON(data.data);
showMsg(rdata.msg, function(){},{ icon: rdata.status ? 1 : 2 });
});
});
}
function commonHomePage(){
alistPost('home_page', '', {}, function(data){
var rdata = $.parseJSON(data.data);
window.open(rdata.data);
});
}
function alistCommonFunc(){
var con = '';
con += '<hr/><p class="conf_p" style="text-align:center;">\
<button class="btn btn-default btn-sm" onclick="commonHomePage()">主页</button>\
<button class="btn btn-default btn-sm" onclick="clearTaskCopy()">清空复制任务</button>\
</p>';
$(".soft-man-con").html(con);
}
function alistReadme(){
var readme = '<ul class="help-info-text c7">';
readme += '<li>手动开启默认端口:5244</li>';
readme += '<li>默认admin:admin</li>';
readme += '<li>手动改密码: cd /www/server/alist && ./alist admin set NEW_PASSWORD</li>';
readme += '</ul>';
$('.soft-man-con').html(readme);
}

View File

@@ -14,8 +14,12 @@ import json
import paramiko
import ftplib
sys.path.append(os.getcwd() + "/class/core")
import mw
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
DEBUG = True
BLOCK_SIZE = 1024 * 1024 * 2
@@ -58,7 +62,7 @@ class FtpPSClient:
default_backup_path = "/backup/"
config_file = "cfg.json"
def __init__(self, load_config=True, timeout=10):
def __init__(self, load_config=True, timeout=600):
self.timeout = timeout
if load_config:
data = self.get_config()
@@ -136,7 +140,7 @@ class FtpPSClient:
"database": "db",
"path": "path",
}
file_regx = prefix_dict.get(data_type) + "_(.+)_20\d+_\d+\."
file_regx = prefix_dict.get(data_type) + r"_(.+)_20\d+_\d+\."
sub_search = re.search(file_regx, file_name)
sub_path_name = ""
if sub_search:

View File

@@ -12,18 +12,13 @@ if sys.platform != "darwin":
os.chdir("/www/server/mdserver-web")
sys.path.append(os.getcwd() + "/class/core")
import mw
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
_ver = sys.version_info
is_py2 = (_ver[0] == 2)
is_py3 = (_ver[0] == 3)
DEBUG = False
if is_py2:
reload(sys)
sys.setdefaultencoding('utf-8')
import core.mw as mw
import core.db as db
app_debug = False
if mw.isAppleSystem():
@@ -76,7 +71,10 @@ def status():
def getConf():
cfg = getServerDir() + "/cfg.json"
if not os.path.exists(cfg):
return mw.returnJson(False, "未配置", [])
rdata = {
'use_sftp':False,
}
return mw.returnJson(False, "未配置", rdata)
data = mw.readFile(cfg)
data = json.loads(data)
return mw.returnJson(True, "OK", data)
@@ -172,9 +170,17 @@ def deleteFile():
return mw.returnJson(True, "删除成功")
return mw.returnJson(False, "删除失败")
def findPathName(path, filename):
f = os.scandir(path)
l = []
for ff in f:
t = {}
if ff.name.find(filename) > -1:
t['filename'] = path + '/' + ff.name
l.append(t)
return l
def backupAllFunc(stype):
os.chdir(mw.getRunDir())
name = sys.argv[2]
num = sys.argv[3]
@@ -185,13 +191,35 @@ def backupAllFunc(stype):
"path": "path",
}
backups = []
# print("stype:", stype)
# 提前获取-清理多余备份
if stype == 'site':
pid = mw.M('sites').where('name=?', (name,)).getField('id')
backups = mw.M('backup').where('type=? and pid=?', ('0', pid)).field('id,filename').select()
if stype == 'database':
db_path = mw.getServerDir() + '/mysql'
pid = mw.M('databases').dbPos(db_path, 'mysql').where('name=?', (name,)).getField('id')
backups = mw.M('backup').where('type=? and pid=?', ('1', pid)).field('id,filename').select()
if stype == 'path':
backup_dir = mw.getBackupDir()
backup_path = backup_dir + '/path'
_name = 'path_{}'.format(os.path.basename(name))
backups = findPathName(backup_path, _name)
# 其他类型关系性数据库(mysql类的)
if stype.find('database_') > -1:
plugin_name = stype.replace('database_', '')
db_path = mw.getServerDir() + '/' + plugin_name
pid = mw.M('databases').dbPos(db_path, 'mysql').where('name=?', (name,)).getField('id')
backups = mw.M('backup').where('type=? and pid=?', ('1', pid)).field('id,filename').select()
args = stype + " " + name + " " + num
cmd = 'python3 ' + mw.getRunDir() + '/scripts/backup.py ' + args
cmd = 'python3 ' + mw.getPanelDir() + '/scripts/backup.py ' + args
if stype.find('database_') > -1:
plugin_name = stype.replace('database_', '')
args = "database " + name + " " + num
cmd = 'python3 ' + mw.getRunDir() + '/plugins/' + plugin_name + \
'/scripts/backup.py ' + args
cmd = 'python3 ' + mw.getPanelDir() + '/plugins/' + plugin_name + '/scripts/backup.py ' + args
os.system(cmd)
@@ -207,25 +235,40 @@ def backupAllFunc(stype):
bk_name = stype
find_path = mw.getBackupDir() + '/' + bk_name + '/' + bk_prefix + '_' + name
find_new_file = "ls " + find_path + \
"_* | grep '.gz' | cut -d \ -f 1 | awk 'END {print}'"
if stype == 'path':
_name = 'path_{}'.format(os.path.basename(name))
find_path = mw.getBackupDir() + '/path/'+_name
find_new_file = "ls " + find_path + "_* | grep '.gz' | cut -d \\ -f 1 | awk 'END {print}'"
filename = mw.execShell(find_new_file)[0].strip()
if filename == "":
mw.echoInfo("not find upload file!")
return False
return ''
print("|-准备上传文件 {}".format(filename))
mw.echoInfo("准备上传文件 {}".format(filename))
ftp = FtpPSClient()
ftp.uploadFile(filename, stype)
# print(backups)
backups = sorted(backups, key=lambda x: x['filename'], reverse=False)
mw.echoStart('开始删除远程备份')
num = int(num)
sep = len(backups) - num
if sep > -1:
for backup in backups:
fn = os.path.basename(backup['filename'])
object_name = ftp.buildDirName(stype, fn)
ftp.deleteFile(object_name)
mw.echoInfo("已清理远程过期备份文件:" + object_name)
sep -= 1
if sep < 0:
break
mw.echoEnd('结束删除远程备份')
return ''
def backupSite():
# 备份站点
pass
def in_array(name, arr=[]):
for x in arr:
if name == x:

View File

@@ -1,4 +1,5 @@
{
"sort":6,
"title":"FTP存储空间",
"hook":["backup"],
"tip":"soft",
@@ -13,5 +14,5 @@
"author":"midoks",
"home":"https://github.com/midoks/mdserver-web",
"date":"2022-10-23",
"pid": "4"
"pid": "5"
}

View File

@@ -7,7 +7,6 @@ rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
install_tmp=${rootPath}/tmp/mw_install.pl
sys_os=`uname`
@@ -15,7 +14,7 @@ Install_App()
{
mkdir -p ${serverPath}/backup_ftp
echo "${1}" > ${serverPath}/backup_ftp/version.pl
echo '安装完成' > $install_tmp
echo '安装完成'
}

View File

@@ -3,6 +3,7 @@
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('clean');">服务</p>
<p onclick="pluginConfig('clean');">配置修改</p>
<p onclick="commonFunc();">常用功能</p>
<p onclick="pluginLogs('clean',null,'run_log');">运行日志</p>
<p onclick="pRead()">说明</p>
</div>
@@ -12,12 +13,57 @@
</div>
</div>
<script type="text/javascript">
pluginService('clean');
function cleanPost(method, version, args, callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'clean';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function cleanRun(){
cleanPost('clean_run', '', {}, function(rdata){
// var rdata = $.parseJSON(rdata.data);
// layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
layer.msg("执行成功!", { icon: 1});
}
function commonFunc(){
con = '<hr/><p class="conf_p" style="text-align:center;">\
<button class="btn btn-default btn-sm" onclick="cleanRun()">手动执行</button> \
</p>';
$(".soft-man-con").html(con);
}
function pRead(){
var readme = '<ul class="help-info-text c7">';
readme += '<li>启动后,加入到计划中[2:30]执行。</li>';
readme += '<li>启动后,加入到计划任务每隔7天[0:15]执行。</li>';
readme += '<li>【*】代表要删除。</li>';
readme += '<li>添加/删除清除日志,可在`配置修改`中添加/删除。</li>';
readme += '<li>如果是目录,会寻找【.log】后缀的文件清空。</li>';

View File

@@ -5,8 +5,12 @@ import io
import os
import time
sys.path.append(os.getcwd() + "/class/core")
import mw
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
app_debug = False
if mw.isAppleSystem():
@@ -74,7 +78,6 @@ def initConf():
content = ""
clog = [
"/var/spool/clientmqueue/*",
"/var/log/cron-*",
"/var/log/maillog-*",
"/var/log/secure-*",
@@ -82,11 +85,43 @@ def initConf():
"/var/log/yum.log-*",
"/var/log/messages-*",
"/var/log/btmp-*",
"/var/log/auth.*",
"/var/log/messages.*",
"/var/log/debug.*",
"/var/log/syslog.*",
"/var/log/syslog",
"/var/log/mail.*",
"/var/log/btmp.*",
"/var/log/sa/sa*",
"/var/log/sysstat/sa*",
"/var/log/atop/atop*",
"/var/log/anaconda/*.log",
"/var/log/dpkg.log.*",
"/var/log/alternatives.log.*",
"/var/log/user.log.*",
"/var/log/kern.log.*",
"/var/log/daemon.log.*",
"/var/log/*.gz",
"/var/log/*.xz",
"/var/log/*.log.*",
"/var/log/audit/audit.log.*",
"/var/log/hawkey.log-*",
"/var/log/apt/*.gz",
"/var/log/apt/*.xz",
"/var/log/rhsm/rhsm.log-*",
"/var/log/rhsm/rhsmcertd.log-*",
"/var/log/exim4/*.gz",
"/var/log/journal/*",
"/var/spool/clientmqueue/*",
"/tmp/yum_save_*",
"/tmp/tmp.*",
"/www/server/dztasks/logs/dztasks.*.log",
"/www/server/dztasks/logs/dztasks_*",
]
for i in clog:
content += i + "\n"
@@ -98,8 +133,34 @@ def initConf():
"/var/log/wtmp",
"/var/log/secure",
"/var/log/lastlog",
"/var/log/syslog",
"/var/log/cron",
"/www/server/cron"
"/www/wwwlogs",
"/www/server/rsyncd",
"/www/server/acme_pandominassl_apply",
"/www/server/sphinx/index",
"/www/server/mongodb/logs",
"/www/server/php/53/var/log",
"/www/server/php/54/var/log",
"/www/server/php/55/var/log",
"/www/server/php/56/var/log",
"/www/server/php/70/var/log",
"/www/server/php/71/var/log",
"/www/server/php/72/var/log",
"/www/server/php/73/var/log",
"/www/server/php/74/var/log",
"/www/server/php/80/var/log",
"/www/server/php/81/var/log",
"/www/server/php/82/var/log",
"/www/server/php/83/var/log",
"/www/server/php/84/var/log",
"/www/server/openresty/nginx/logs",
"/www/server/phpmyadmin",
"/www/server/redis/data",
"/www/server/alist/data/log",
"/www/server/dztasks/logs",
"/www/server/rsyncd/lsyncd.log"
"/www/server/cron",
]
for i in clogcom:
if os.path.exists(i):
@@ -181,6 +242,13 @@ def cleanDirLog(path):
cleanDirLog(abspath)
def cleanRun():
plugin_dir = getPluginDir()
log_file = getServerDir()+'/clean.log'
cmd = 'cd '+mw.getPanelDir()+' && python3 '+plugin_dir+'/index.py clean > '+log_file
os.system(cmd)
return mw.returnJson(True, '执行成功!')
def cleanLog():
conf = getConf()
clist = mw.readFile(conf).strip()
@@ -205,6 +273,7 @@ def cleanLog():
cleanDirLog(abspath)
continue
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
@@ -223,5 +292,7 @@ if __name__ == "__main__":
print(runLog())
elif func == 'clean':
cleanLog()
elif func == 'clean_run':
print(cleanRun())
else:
print('error')

View File

@@ -1,4 +1,5 @@
{
"sort":2,
"title":"日志清理",
"tip":"soft",
"name":"clean",

View File

@@ -10,7 +10,6 @@ rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
install_tmp=${rootPath}/tmp/mw_install.pl
VERSION=$2
if [ -f ${rootPath}/bin/activate ];then
@@ -20,19 +19,19 @@ fi
Install_app()
{
echo '正在安装脚本文件...' > $install_tmp
echo '正在安装脚本文件...'
mkdir -p $serverPath/clean
cd ${rootPath} && python3 ${rootPath}/plugins/clean/index.py start
echo "${VERSION}" > $serverPath/clean/version.pl
echo '安装完成' > $install_tmp
echo '安装完成'
}
Uninstall_app()
{
cd ${rootPath} && python3 ${rootPath}/plugins/clean/index.py stop
rm -rf $serverPath/clean
echo "Uninstall_clean" > $install_tmp
echo "Uninstall_clean"
}
action=$1

View File

@@ -6,8 +6,13 @@ import os
import time
import json
sys.path.append(os.getcwd() + "/class/core")
import mw
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
from utils.crontab import crontab as MwCrontab
app_debug = False
@@ -33,62 +38,38 @@ def getTaskConf():
def getConfigData():
try:
conf = getTaskConf()
if os.path.exists(conf):
return json.loads(mw.readFile(getTaskConf()))
except:
pass
return []
def getConfigTpl():
tpl = {
"name": "",
return {
"task_id": -1,
"period": "day-n",
"where1": "7",
"hour": "0",
"minute": "15",
}
return tpl
def createBgTask():
removeBgTask()
args = {
"period": "day",
"hour": "2",
"minute": "30",
}
createBgTaskByName(getPluginName(), args)
createBgTaskByName(getPluginName())
def createBgTaskByName(name, args):
cfg = getConfigTpl()
def createBgTaskByName(name):
args = getConfigData()
_name = "[勿删]日志清理[" + name + "]"
res = mw.M("crontab").field("id, name").where("name=?", (_name,)).find()
if res:
return True
if "task_id" in cfg.keys() and cfg["task_id"] > 0:
if "task_id" in args and args["task_id"] > 0:
res = mw.M("crontab").field("id, name").where(
"id=?", (cfg["task_id"],)).find()
if res and res["id"] == cfg["task_id"]:
"id=?", (args["task_id"],)).find()
if res and res["id"] == args["task_id"]:
print("计划任务已经存在!")
return True
import crontab_api
api = crontab_api.crontab_api()
period = args['period']
_hour = ''
_minute = ''
_where1 = ''
_type_day = "day"
if period == 'day':
_type_day = 'day'
_hour = args['hour']
_minute = args['minute']
elif period == 'minute-n':
_type_day = 'minute-n'
_where1 = args['minute-n']
_minute = ''
mw_dir = mw.getRunDir()
mw_dir = mw.getPanelDir()
cmd = '''
mw_dir=%s
rname=%s
@@ -105,45 +86,37 @@ logs_file=$plugin_path/${rname}.log
params = {
'name': _name,
'type': _type_day,
'type': args['period'],
'week': "",
'where1': _where1,
'hour': _hour,
'minute': _minute,
'where1': args['where1'],
'hour': args['hour'],
'minute': args['minute'],
'save': "",
'backup_to': "",
'stype': "toShell",
'sname': '',
'sbody': cmd,
'urladdress': '',
'url_address': '',
}
task_id = api.add(params)
task_id = MwCrontab.instance().add(params)
if task_id > 0:
cfg["task_id"] = task_id
cfg["name"] = name
_dd = getConfigData()
_dd.append(cfg)
mw.writeFile(getTaskConf(), json.dumps(_dd))
args["task_id"] = task_id
args["name"] = name
mw.writeFile(getTaskConf(), json.dumps(args))
def removeBgTask():
cfg_list = getConfigData()
for x in range(len(cfg_list)):
cfg = cfg_list[x]
if "task_id" in cfg.keys() and cfg["task_id"] > 0:
res = mw.M("crontab").field("id, name").where(
"id=?", (cfg["task_id"],)).find()
if res and res["id"] == cfg["task_id"]:
import crontab_api
api = crontab_api.crontab_api()
data = api.delete(cfg["task_id"])
if data[0]:
cfg["task_id"] = -1
cfg_list[x] = cfg
mw.writeFile(getTaskConf(), '[]')
return True
cfg = getConfigData()
if "task_id" in cfg and cfg["task_id"] > 0:
res = mw.M("crontab").field("id, name").where(
"id=?", (cfg["task_id"],)).find()
if res and res["id"] == cfg["task_id"]:
data = MwCrontab.instance().delete(cfg["task_id"])
if data[0]:
cfg["task_id"] = -1
mw.writeFile(getTaskConf(), json.dumps(cfg))
return True
return False

BIN
plugins/cloudreve/ico.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

31
plugins/cloudreve/index.html Executable file
View File

@@ -0,0 +1,31 @@
<style>
.overflow_hide {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
</style>
<div class="bt-form">
<div class='plugin_version'></div>
<div class="bt-w-main">
<div class="bt-w-menu">
<p class="bgw" onclick="pluginService('cloudreve');">服务</p>
<p onclick="pluginInitD('cloudreve');">自启动</p>
<p onclick="alistCommonFunc();">常用功能</p>
<p onclick="pluginConfigTpl('cloudreve',$('.plugin_version').attr('version'));">配置修改</p>
<p onclick="pluginLogs('cloudreve','','run_log');">运行日志</p>
<p onclick="alistReadme();">相关说明</p>
</div>
<div class="bt-w-con pd15">
<div class="soft-man-con" style="height: 520px; overflow: auto;"></div>
</div>
</div>
</div>
<script type="text/javascript">
$.getScript( "/plugins/file?name=cloudreve&f=js/cloudreve.js", function(){
pluginService('cloudreve', $('.plugin_version').attr('version'));
});
</script>

292
plugins/cloudreve/index.py Executable file
View File

@@ -0,0 +1,292 @@
# coding:utf-8
import sys
import io
import os
import time
import re
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'cloudreve'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getInitDFile():
current_os = mw.getOs()
if current_os == 'darwin':
return '/tmp/' + getPluginName()
if current_os.startswith('freebsd'):
return '/etc/rc.d/' + getPluginName()
return '/etc/init.d/' + getPluginName()
def getInitDTpl():
path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl"
return path
def getArgs():
args = sys.argv[3:]
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
if t.strip() == '':
tmp = []
else:
t = t.split(':')
tmp[t[0]] = t[1]
tmp[t[0]] = t[1]
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def checkArgs(data, ck=[]):
for i in range(len(ck)):
if not ck[i] in data:
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
return (True, mw.returnJson(True, 'ok'))
def getConf():
path = getServerDir() + "/conf.ini"
return path
def configTpl():
path = getPluginDir() + '/tpl'
pathFile = os.listdir(path)
tmp = []
for one in pathFile:
file = path + '/' + one
tmp.append(file)
return mw.getJson(tmp)
def readConfigTpl():
args = getArgs()
data = checkArgs(args, ['file'])
if not data[0]:
return data[1]
content = mw.readFile(args['file'])
content = contentReplace(content)
return mw.returnJson(True, 'ok', content)
def status():
data = mw.execShell(
"ps aux|grep cloudreve |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'")
if data[0] == '':
return 'stop'
return 'start'
def contentReplace(content):
service_path = mw.getServerDir()
content = content.replace('{$ROOT_PATH}', mw.getFatherDir())
content = content.replace('{$SERVER_PATH}', service_path)
content = content.replace('{$SERVER_APP}', service_path + '/'+getPluginName())
return content
def initDreplace():
file_tpl = getInitDTpl()
service_path = mw.getServerDir()
initD_path = getServerDir() + '/init.d'
if not os.path.exists(initD_path):
os.mkdir(initD_path)
file_bin = initD_path + '/' + getPluginName()
# initd replace
if not os.path.exists(file_bin):
content = mw.readFile(file_tpl)
content = content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(file_bin, content)
mw.execShell('chmod +x ' + file_bin)
# systemd
systemDir = mw.systemdCfgDir()
systemService = systemDir + '/' + getPluginName() + '.service'
if os.path.exists(systemDir) and not os.path.exists(systemService):
systemServiceTpl = getPluginDir() + '/init.d/' + getPluginName() + '.service.tpl'
service_path = mw.getServerDir()
se_content = mw.readFile(systemServiceTpl)
se_content = se_content.replace('{$SERVER_PATH}', service_path)
mw.writeFile(systemService, se_content)
mw.execShell('systemctl daemon-reload')
return file_bin
def alistOp(method):
file = initDreplace()
current_os = mw.getOs()
if current_os == "darwin":
data = mw.execShell(file + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
if current_os.startswith("freebsd"):
data = mw.execShell('service ' + getPluginName() + ' ' + method)
if data[1] == '':
return 'ok'
return data[1]
data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
if data[1] == '':
return 'ok'
return data[1]
def start():
return alistOp('start')
def stop():
return alistOp('stop')
def restart():
status = alistOp('restart')
return status
def reload():
return alistOp('reload')
def initdStatus():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
if os.path.exists(initd_bin):
return 'ok'
shell_cmd = 'systemctl status ' + \
getPluginName() + ' | grep loaded | grep "enabled;"'
data = mw.execShell(shell_cmd)
if data[0] == '':
return 'fail'
return 'ok'
def initdInstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
# freebsd initd install
if current_os.startswith('freebsd'):
import shutil
source_bin = initDreplace()
initd_bin = getInitDFile()
shutil.copyfile(source_bin, initd_bin)
mw.execShell('chmod +x ' + initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="YES"')
return 'ok'
mw.execShell('systemctl enable ' + getPluginName())
return 'ok'
def initdUinstall():
current_os = mw.getOs()
if current_os == 'darwin':
return "Apple Computer does not support"
if current_os.startswith('freebsd'):
initd_bin = getInitDFile()
os.remove(initd_bin)
mw.execShell('sysrc ' + getPluginName() + '_enable="NO"')
return 'ok'
mw.execShell('systemctl disable ' + getPluginName())
return 'ok'
def runLog():
return getServerDir() + '/logs.pl'
def pSqliteDb(dbname='databases'):
pos_file = getServerDir() + '/data/'
file = pos_file + '/data.db'
name = 'data'
conn = mw.M(dbname).dbPos(pos_file, name)
return conn
def getCloudrevePort():
file = getConf()
content = mw.readFile(file)
rep = r'Listen\s*=\s*(.*)'
tmp = re.search(rep, content)
return tmp.groups()[0].strip()
def homePage():
http_port = getCloudrevePort()
ip = mw.getLocalIp()
if mw.isAppleSystem():
ip = '127.0.0.1'
url = 'http://'+ip+""+str(http_port)
# print(url)
return mw.returnJson(True, 'ok!', url)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
print(status())
elif func == 'start':
print(start())
elif func == 'stop':
print(stop())
elif func == 'restart':
print(restart())
elif func == 'reload':
print(reload())
elif func == 'initd_status':
print(initdStatus())
elif func == 'initd_install':
print(initdInstall())
elif func == 'initd_uninstall':
print(initdUinstall())
elif func == 'conf':
print(getConf())
elif func == 'run_log':
print(runLog())
elif func == 'config_tpl':
print(configTpl())
elif func == 'read_config_tpl':
print(readConfigTpl())
elif func == 'home_page':
print(homePage())
else:
print('error')

17
plugins/cloudreve/info.json Executable file
View File

@@ -0,0 +1,17 @@
{
"sort": 7,
"ps": "一个支持多种存储的文件列表程序",
"name": "cloudreve",
"title": "cloudreve",
"shell": "install.sh",
"versions":["3.8.3"],
"tip": "soft",
"checks": "server/cloudreve",
"path": "server/cloudreve",
"display": 1,
"author": "cloudreve",
"date": "2024-10-14",
"home": "https://cloudreve.org/",
"type": 0,
"pid": "5"
}

View File

@@ -0,0 +1,13 @@
[Unit]
Description=A file list program that supports multiple storage
After=network.target
[Service]
Type=simple
WorkingDirectory={$SERVER_PATH}/cloudreve
ExecStart={$SERVER_PATH}/cloudreve/cloudreve
ExecReload=/bin/kill -USR2 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,46 @@
#!/bin/sh
# chkconfig: 2345 55 25
# description: cloudreve Service
### BEGIN INIT INFO
# Provides: cloudreve
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts cloudreve
# Description: starts the MDW-Web
### END INIT INFO
# Simple cloudreve init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
app_start(){
echo "Starting cloudreve server..."
cd {$SERVER_PATH}/cloudreve
./cloudreve >> {$SERVER_PATH}/cloudreve/logs.pl 2>&1 &
}
app_stop(){
echo "dztasks stopped"
ps -ef| grep cloudreve | grep -v grep | grep -v python | grep -v sh | awk '{print $2}'| xargs kill
}
case "$1" in
start)
app_start
;;
stop)
app_stop
;;
restart|reload)
app_stop
sleep 0.3
app_start
;;
*)
echo "Please use start or stop as first argument"
;;
esac

90
plugins/cloudreve/install.sh Executable file
View File

@@ -0,0 +1,90 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/opt/homebrew/bin
export PATH
curPath=`pwd`
rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
serverPath=$(dirname "$rootPath")
# cd /Users/midoks/Desktop/mwdev/server/mdserver-web/plugins/cloudreve && bash install.sh install 3.8.3
# cd /www/server/mdserver-web/plugins/cloudreve && bash install.sh install 3.8.3
VERSION=$2
sysArch=`arch`
sysName=`uname`
ALIST_ARCH_NAME=amd64
if [ "$sysArch" == "arm64" ];then
ALIST_ARCH_NAME=arm64
elif [ "$sysArch" == "x86_64" ]; then
ALIST_ARCH_NAME=amd64
elif [ "$sysArch" == "aarch64" ]; then
ALIST_ARCH_NAME=aarch64
fi
ALIST_NAME=linux
if [ "$sysName" == "Darwin" ];then
ALIST_NAME=darwin
fi
Install_App()
{
echo '正在安装脚本文件...'
mkdir -p $serverPath/source
mkdir -p $serverPath/source/cloudreve
FILE_TGZ=cloudreve_${VERSION}_${ALIST_NAME}_${ALIST_ARCH_NAME}.tar.gz
CLOUDREVE_DIR=$serverPath/source/cloudreve
if [ ! -f $CLOUDREVE_DIR/${FILE_TGZ} ];then
wget -O $CLOUDREVE_DIR/${FILE_TGZ} https://github.com/cloudreve/Cloudreve/releases/download/${VERSION}/${FILE_TGZ}
fi
mkdir -p $serverPath/cloudreve
cd $CLOUDREVE_DIR && tar -zxvf ${FILE_TGZ} -C $serverPath/cloudreve
echo "${VERSION}" > $serverPath/cloudreve/version.pl
cd ${rootPath} && python3 ${rootPath}/plugins/cloudreve/index.py start
cd ${rootPath} && python3 ${rootPath}/plugins/cloudreve/index.py initd_install
# cd $serverPath/cloudreve && ./alist admin set admin
echo '安装cloudreve完成'
}
Uninstall_App()
{
if [ -f /usr/lib/systemd/system/cloudreve.service ];then
systemctl stop cloudreve
systemctl disable cloudreve
rm -rf /usr/lib/systemd/system/cloudreve.service
systemctl daemon-reload
fi
if [ -f /lib/systemd/system/cloudreve.service ];then
systemctl stop cloudreve
systemctl disable cloudreve
rm -rf /lib/systemd/system/cloudreve.service
systemctl daemon-reload
fi
if [ -f $serverPath/cloudreve/initd/cloudreve ];then
$serverPath/cloudreve/initd/cloudreve stop
fi
if [ -d $serverPath/cloudreve ];then
rm -rf $serverPath/cloudreve
fi
echo "卸载cloudreve成功"
}
action=$1
if [ "${1}" == 'install' ];then
Install_App
else
Uninstall_App
fi

View File

@@ -0,0 +1,82 @@
function alistPost(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'cloudreve';
req_data['func'] = method;
req_data['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/run', req_data, function(data) {
layer.close(loadT);
if (!data.status){
//错误展示10S
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function alistPostCallbak(method, version, args,callback){
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
var req_data = {};
req_data['name'] = 'cloudreve';
req_data['func'] = method;
args['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function commonHomePage(){
alistPost('home_page', '', {}, function(data){
var rdata = $.parseJSON(data.data);
window.open(rdata.data);
});
}
function alistCommonFunc(){
var con = '';
con += '<hr/><p class="conf_p" style="text-align:center;">\
<button class="btn btn-default btn-sm" onclick="commonHomePage()">主页</button>\
</p>';
$(".soft-man-con").html(con);
}
function alistReadme(){
var readme = '<ul class="help-info-text c7">';
readme += '<li>记住安装时生成的用户+密码</li>';
readme += '</ul>';
$('.soft-man-con').html(readme);
}

View File

@@ -0,0 +1,78 @@
# plugins_cryptocurrency_trade
- https://docs.ccxt.com/en/latest/install.html#python-proxies
数字货币量化交易插件
```
cd /www/server/mdserver-web && python3 plugins/cryptocurrency_trade/ccxt/okex/strategy/st_demo.py
python3 plugins/cryptocurrency_trade/ccxt/okex/strategy/st_demo.py
miniconda3
```
# 免费TV策略
https://cn.tradingview.com/scripts/?script_type=strategies
### tradingview pine 指标
```
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TenCloud
//@version=5
indicator("第一个指标",shorttitle = "开心吧")
ema10 = ta.ema(close, 25)
ema100 = ta.ema(close, 100)
l1=plot(ema10, color=color.red,title = "ema10")
l2=plot(ema100,color = color.green, title = "ema100")
buy = ta.crossover(ema10,ema100)
sell = ta.crossunder(ema10,ema100)
plotchar(buy, text = "buy", color=color.green)
plotchar(sell, text="sell", color=color.red)
l_color = ema10>ema100 ? color.green:color.red
fill(l1,l2,color=color.new(l_color,70))
```
### tradingview pine 策略
```
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TenCloud
//@version=5
strategy("第一个指标",shorttitle = "开心吧", overlay = true, initial_capital = 1000)
ema10 = ta.ema(close, 25)
ema100 = ta.ema(close, 100)
l1=plot(ema10, color=color.red,title = "ema10")
l2=plot(ema100,color = color.green, title = "ema100")
buy = ta.crossover(ema10,ema100)
sell = ta.crossunder(ema10,ema100)
if buy
strategy.entry("long1", strategy.long,1)
if sell
strategy.close("long1", qty_percent = 100,comment = "平仓多单")
// plotchar(buy, text = "buy", color=color.green)
// plotchar(sell, text="sell", color=color.red)
// l_color = ema10>ema100 ? color.green:color.red
// fill(l1,l2,color=color.new(l_color,70))
```

View File

@@ -0,0 +1,555 @@
import ccxt
from datetime import datetime
import time
import sys
import json
import os
import glob
import threading
from pprint import pprint
# print(os.getcwd())
sys.path.append(os.getcwd() + "/class/core")
import mw
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/public_data/data.py run
# python3 plugins/cryptocurrency_trade/ccxt/public_data/data.py long
# 查看支持的交易所
# print(ccxt.exchanges)
# 代理设置
# exchange = ccxt.poloniex({
# 'proxies': {
# 'http': 'http://127.0.0.1:1088'
# },
# })
# exchange = ccxt.poloniex()
exchange = ccxt.okex()
def getPluginName():
return 'cryptocurrency_trade'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getConfigData():
cfg_path = getServerDir() + "/data.cfg"
if not os.path.exists(cfg_path):
mw.writeFile(cfg_path, '{}')
t = mw.readFile(cfg_path)
return json.loads(t)
def writeLog(log_str):
if __name__ == "__main__":
print(log_str)
log_file = getServerDir() + '/logs/datasource.log'
mw.writeFileLog(log_str, log_file, 1 * 1024 * 1024)
return True
def isSetDbConf():
data = getConfigData()
if 'db' in data:
return True
return False
def beforeDate(day=360):
dd = time.time() - day * 86400
d = datetime.fromtimestamp(dd)
day = d.strftime("%Y-%m-%d")
return day
def getTextTimeShow(time):
d = datetime.fromtimestamp(time)
day = d.strftime("%Y-%m-%d %H:%M:%S")
return day
def isSqlError(mysqlMsg):
# 检测数据库执行错误
mysqlMsg = str(mysqlMsg)
if "MySQLdb" in mysqlMsg:
return mw.returnJson(False, 'MySQLdb组件缺失! <br>进入SSH命令行输入: pip install mysql-python | pip install mysqlclient==2.0.3')
if "2002," in mysqlMsg:
return mw.returnJson(False, '数据库连接失败,请检查数据库服务是否启动!')
if "2003," in mysqlMsg:
return mw.returnJson(False, "Can't connect to MySQL server on '127.0.0.1' (61)")
if "using password:" in mysqlMsg:
return mw.returnJson(False, '数据库密码错误')
if "1045" in mysqlMsg:
return mw.returnJson(False, '连接错误!')
if "SQL syntax" in mysqlMsg:
return mw.returnJson(False, 'SQL语法错误!')
if "Connection refused" in mysqlMsg:
return mw.returnJson(False, '数据库连接失败,请检查数据库服务是否启动!')
if "1133" in mysqlMsg:
return mw.returnJson(False, '数据库用户不存在!')
if "1007" in mysqlMsg:
return mw.returnJson(False, '数据库已经存在!')
return None
def pMysqlDb():
# pymysql
db = mw.getMyORM()
data = getConfigData()
db_data = data['db']
db.setHost(db_data['db_host'])
db.setPort(db_data['db_port'])
db.setUser(db_data['db_user'])
db.setPwd(db_data['db_pass'])
db.setDbName(db_data['db_name'])
return db
def makeInsertSql(table, item):
sql = "insert into " + table
keyStr = '('
valueStr = ' values('
for i in item:
# print i, item[i]
keyStr += '`' + str(i) + '`,'
valueStr += "'" + str(item[i]) + "',"
keyStrLen = len(keyStr)
keyStr = keyStr[0:keyStrLen - 1]
keyStr += ') '
valueStrLen = len(valueStr)
valueStr = valueStr[0:valueStrLen - 1]
valueStr += ') '
sql += keyStr
sql += valueStr
return sql
def makeReplaceSql(table, item):
sql = "replace into " + table
keyStr = '('
valueStr = ' values('
for i in item:
# print i, item[i]
keyStr += '`' + str(i) + '`,'
valueStr += "'" + str(item[i]) + "',"
keyStrLen = len(keyStr)
keyStr = keyStr[0:keyStrLen - 1]
keyStr += ') '
valueStrLen = len(valueStr)
valueStr = valueStr[0:valueStrLen - 1]
valueStr += ') '
sql += keyStr
sql += valueStr
return sql
def makeUpdateSql(table, item, mid):
sql = "update " + table + " set "
keyStr = ''
for i in item:
keyStr += '`' + str(i) + '`=' + "'" + item[i] + "',"
keyStrLen = len(keyStr)
keyStr = keyStr[0:keyStrLen - 1]
sql += keyStr
sql += " where id = '" + str(mid) + "'"
return sql
def dataToDb(table_name, data):
pdb = pMysqlDb()
for i in data:
rdata = {
'addtime': int(i[0] / 1000),
'open': i[1],
'high': i[2],
'low': i[3],
'close': i[4],
'vol': i[5],
}
# sql = """SELECT id FROM %s where addtime='%s' LIMIT 1""" % (
# table_name, rdata['addtime'])
# fdata = pdb.query(sql)
# if fdata:
# print(table_name + ":" + str(rdata['addtime']) + ", old to db ok")
# else:
# isql = makeReplaceSql(table_name, rdata)
# r = pdb.execute(isql)
# print(table_name + ":" + str(rdata['addtime']) + ", go to db ok")
isql = makeReplaceSql(table_name, rdata)
r = pdb.execute(isql)
# print(table_name + ":" + str(rdata['addtime']) + ", go to db ok")
return True
def makeTableName(input_type="btc", input_tf="1m"):
table_name = "ct_%s_%s" % (input_type, input_tf)
return table_name
def isHasTable(input_type="btc", input_tf="1m"):
pdb = pMysqlDb()
# input_type = 'btc'
# input_tf = '1m'
table_name = makeTableName(input_type, input_tf)
mtable = pdb.query("show tables like '%s'" % (table_name,))
if len(mtable) != 0:
return True
return False
def createSql(input_type="btc", input_tf="1m"):
pdb = pMysqlDb()
# input_type = 'btc'
# input_tf = '1m'
table_name = makeTableName(input_type, input_tf)
mtable = pdb.query("show tables like '%s'" % (table_name,))
if len(mtable) != 0:
return True
sql_tpl = getPluginDir() + "/conf/create.sql"
content = mw.readFile(sql_tpl)
content = content.replace("xx1", input_type)
content = content.replace("xx2", input_tf)
res = pdb.execute(content)
# pprint(res)
return True
def getDataFetch(symbol, start_time="2023-3-1", input_tf="1m", limit=500):
start_time = datetime.strptime(start_time, '%Y-%m-%d')
end_time = datetime.strptime(end_time, '%Y-%m-%d')
start_time_stamp = int(time.mktime(start_time.timetuple())) * 1000
data = exchange.fetch_ohlcv(symbol, timeframe=input_tf,
since=start_time_stamp, limit=limit)
return data
def getPointData(symbol, start_time=1677713220000, input_tf="1m", limit=500):
data = exchange.fetch_ohlcv(
symbol, timeframe=input_tf, since=start_time, limit=limit)
return data
def toUnixTimeSecond(tf="1m"):
if tf.find("m") > -1:
v = int(tf.replace("m", ''))
return v * 60
if tf.find("h") > -1:
v = int(tf.replace("h", ''))
return v * 3600
if tf.find("d") > -1:
v = int(tf.replace("d", ''))
return v * 86400
return 0
def findAndUpdateData(tag, input_tf="1m", start_time="2023-1-1", limit=300):
pdb = pMysqlDb()
table_name = makeTableName(tag, input_tf)
sql = 'SELECT addtime FROM ' + table_name + ' order by addtime desc LIMIT 1'
qdata = pdb.query(sql)
start_time = datetime.strptime(start_time, '%Y-%m-%d')
start_time = int(time.mktime(start_time.timetuple())) * 1000
if len(qdata) != 0:
start_time = int(qdata[0]['addtime']) * 1000
pre_time = toUnixTimeSecond(input_tf) * 5 * 1000
start_time = start_time - pre_time
# pprint(start_time)
symbol = tag.upper() + "/USDT"
data = getPointData(symbol, start_time, input_tf, limit)
# pprint(data)
# print("------------lini===========")
# pprint(data[1:])
if len(qdata) == 1:
data = data[1:]
dataToDb(table_name, data)
now = time.strftime("%m/%d %H:%M:%S")
data_len = len(data)
msg_head = now + "|虚拟币:" + tag + ",tf:" + \
input_tf + "!,总数:" + str(data_len)
writeLog(msg_head)
if data_len > 0:
# print("new data time", data[data_len - 1][0])
dt = getTextTimeShow(data[data_len - 1][0] / 1000)
msg = now + "|最新日期:" + dt
writeLog(msg)
table_name = makeTableName(tag, input_tf)
sql = "SELECT addtime FROM " + table_name + \
" order by addtime desc limit 10000,1"
qdata = pdb.query(sql)
if len(qdata) > 0:
print(qdata)
# input_tf_time = toUnixTimeSecond(input_tf)
# now_t = int(time.time())
# del_before_t = now_t - input_tf_time * 1000
sql = "delete from %s where addtime<'%d' " % (
table_name, qdata[0]['addtime'],)
writeLog("删除冗余数据:" + str(sql))
pdb.execute(sql)
return True
def dataToDbTpl(tag='btc', input_tf="1m", start_time="2023-1-1", limit=300):
# tag = "btc"
# tf = "1m"
# start_time = "2023-1-1"
# end_time = "2023-3-2"
symbol = tag.lower() + '/USDT'
if not isHasTable(tag, input_tf):
createSql(tag, input_tf)
data = getDataFetch(symbol, start_time, input_tf, limit)
table_name = makeTableName(tag, input_tf)
dataToDb(table_name, data)
now = time.strftime("%m/%d %H:%M:%S")
data_len = len(data)
writeLog(now + "|数据获取成功!,总数:" + str(data_len))
else:
findAndUpdateData(tag, input_tf, start_time, limit)
return True
def dataToDbList(input_tf="1m", start_time="2023-1-1"):
data = getConfigData()
if not 'token' in data:
writeLog("未设置同步配置,需要添加币种!")
return
for t in data['token']:
dataToDbTpl(t, input_tf, start_time)
time.sleep(4)
def dataRunToDb():
data = getConfigData()
if not 'db' in data:
writeLog("数据库未设置!")
return
tag = "btc"
symbol = tag.upper() + '/USDT'
# pprint(exchange.fetch_ticker('XRP/USDT'))
limit_count = 1
start_time = "2023-1-1"
end_time = "2023-3-2"
tf = "1m"
if not isHasTable(tag, tf):
createSql(tag, tf)
data = getDataFetch(symbol, start_time, end_time, tf, limit_count)
table_name = makeTableName(tag, tf)
dataToDb(table_name, data)
china_datetime = str(datetime.now())
data_len = len(data)
writeLog(china_datetime + ":数据获取成功!,总数:" + str(data_len))
else:
findAndUpdateData(tag, tf, start_time, 30)
return data
def startTask():
# 任务队列
try:
while True:
time.sleep(5)
except Exception as e:
time.sleep(60)
startTask()
def setDaemon(t):
if sys.version_info.major == 3 and sys.version_info.minor >= 10:
t.daemon = True
else:
t.setDaemon(True)
return t
def dataDay():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(2 * 365)
dataToDbList("1d", start_time=start_time)
time.sleep(3600)
# time.sleep(10)
except Exception as e:
time.sleep(60)
dataDay()
def data4h():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(365)
dataToDbList("4h", start_time=start_time)
time.sleep(10)
except Exception as e:
time.sleep(60)
data4h()
def data1h():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(365)
dataToDbList("1h", start_time=start_time)
time.sleep(10)
except Exception as e:
print(e)
time.sleep(60)
data1h()
def data15m():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(365)
dataToDbList("15m", start_time=start_time)
time.sleep(10)
except Exception as e:
time.sleep(60)
data15m()
def data5m():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(180)
dataToDbList("5m", start_time=start_time)
time.sleep(10)
except Exception as e:
time.sleep(60)
data5m()
def data1m():
try:
while True:
if not isSetDbConf():
print("数据库未设置!")
else:
start_time = beforeDate(30)
dataToDbList("1m", start_time=start_time)
time.sleep(10)
except Exception as e:
time.sleep(60)
data1m()
def longRun():
# 日线
d1_tt = threading.Thread(target=dataDay)
d1_tt = setDaemon(d1_tt)
d1_tt.start()
# 4h
h4_tt = threading.Thread(target=data4h)
h4_tt = setDaemon(h4_tt)
h4_tt.start()
# 1h
h1_tt = threading.Thread(target=data1h)
h1_tt = setDaemon(h1_tt)
h1_tt.start()
# 15m
m15_tt = threading.Thread(target=data15m)
m15_tt = setDaemon(m15_tt)
m15_tt.start()
# 5m
m5_tt = threading.Thread(target=data5m)
m5_tt = setDaemon(m5_tt)
m5_tt.start()
# 1m
# h1m_tt = threading.Thread(target=data1m)
# h1m_tt = setDaemon(h1m_tt)
# h1m_tt.start()
startTask()
def dataRun():
do_num = 0
while True:
if do_num > 1:
break
do_num = do_num + 1
dataRunToDb()
time.sleep(6)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'run':
data5m()()
elif func == 'long':
longRun()
elif func == 'demo':
writeLog('111')
else:
print('error')

View File

@@ -0,0 +1,12 @@
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
curPath=`pwd`
# bash plugins/cryptocurrency_trade/ccxt/public_data/data.sh
if [ -f ${curPath}/bin/activate ];then
source ${curPath}/bin/activate
fi
python3 plugins/cryptocurrency_trade/ccxt/public_data/data.py long

View File

@@ -0,0 +1,19 @@
import time
from datetime import datetime
china_datetime = datetime.now()
print(china_datetime)
# date()
tt = time.time() - 180 * 86400
# print(date("%Y-%m-%d", time.time()))
# t = datetime.strptime(str(time.time() - 180 * 86400), "%Y-%m-%d")
# print(t)
d = datetime.fromtimestamp(tt)
# 精确到毫秒
str1 = d.strftime("%Y-%m-%d")
print(str1)

View File

@@ -0,0 +1,352 @@
import ccxt
import time
import sys
import json
import os
import glob
import threading
import pandas as pd
from decimal import Decimal
from pprint import pprint
from datetime import datetime
# print(os.getcwd())
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = ccxt.poloniex()
def calc_ClosingPriceWithOutStopLossPrice(open_price, stype='buy', profit=0.5):
# profit 百分比 %
v = 0
vf_len = len(str(open_price).split('.')[1])
if stype == 'buy':
v = open_price * (100 + profit) / 100
else:
v = open_price * (100 - profit) / 100
return round(v, vf_len)
def roundVal(price, compare_price):
price = float(price)
csplite = str(compare_price).split('.')
clen = len(csplite)
if clen == 2:
vf_len = len(csplite[1])
return round(price, vf_len)
return price
def roundValCeil(price, compare_price):
price = float(price)
csplite = str(compare_price).split('.')
clen = len(csplite)
if clen == 2:
vf_len = len(csplite[1]) - 1
return round(price, vf_len)
return price
def multiply(a1, a2):
v = Decimal(str(a1)) * Decimal(str(a2))
return v
def addition(a1, a2):
v = Decimal(str(a1)) + Decimal(str(a2))
return v
def subtract(a1, a2):
v = Decimal(str(a1)) - Decimal(str(a2))
return v
def divided(a1, a2):
v = Decimal(str(a1)) / Decimal(str(a2))
return v
def calc_ClosingPrice(open_price, stop_loss_price, stype='buy', profit=0.5):
# profit 百分比 %
v = 0
vf_len = len(str(open_price).split('.')[1])
if stype == 'buy':
v = open_price * (100 + profit) / 100
diff = open_price - stop_loss_price
profit_price = open_price + diff * 1.5
if profit_price > v:
return round(profit_price, vf_len)
else:
v = open_price * (100 - profit) / 100
diff = stop_loss_price - open_price
profit_price = open_price - diff * 1.5
if profit_price < v:
return round(profit_price, vf_len)
return round(v, vf_len)
def toDateFromInt(time_unix, tf_format="%Y-%m-%d %H:%M:%S", time_zone="Asia/Shanghai"):
# 取格式时间
import time
os.environ['TZ'] = time_zone
time_str = time.localtime(time_unix)
time.tzset()
return time.strftime(tf_format, time_str)
def getPluginName():
return 'cryptocurrency_trade'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getConfigData():
cfg_path = getServerDir() + "/data.cfg"
if not os.path.exists(cfg_path):
mw.writeFile(cfg_path, '{}')
t = mw.readFile(cfg_path)
return json.loads(t)
def getUserCfgData():
data = getConfigData()
if 'user' in data:
try:
udata = mw.deDoubleCrypt('mw', data['user'])
udata = json.loads(udata)
return udata
except Exception as e:
pass
return []
def initEx():
data = getUserCfgData()
# print(data)
if (len(data) > 0):
exchange = ccxt.okex({
"apiKey": data['app_key'],
"secret": data['secret'],
"password": data['password'],
})
return exchange
else:
print("初始化失败,检查原因!")
exchange = ccxt.poloniex()
return exchange
def toUnixTimeSecond(tf="1m"):
if tf.find("m") > -1:
v = int(tf.replace("m", ''))
return v * 60
if tf.find("h") > -1:
v = int(tf.replace("h", ''))
return v * 3600
if tf.find("d") > -1:
v = int(tf.replace("d", ''))
return v * 86400
return 0
def notifyMsg(msg, tf='15m', tag='btc'):
trigger_time = toUnixTimeSecond(tf)
return mw.notifyMessage(msg, '量化交易/' + tag, trigger_time)
def makeTableName(input_type="btc", input_tf="1m"):
table_name = "ct_%s_%s" % (input_type, input_tf,)
return table_name
def writeLog(log_str):
if __name__ == "__main__":
print(log_str)
log_file = getServerDir() + '/logs/strategy.log'
mw.writeFileLog(log_str, log_file)
return True
def writeLogEx(log_str, tag='btc'):
tag = tag.replace('/', '_')
# 各种币的详细API日志
if __name__ == "__main__":
print(log_str)
log_file = getServerDir() + '/logs/strategy_' + tag + '.log'
mw.writeFileLog(log_str, log_file)
return True
def writeLogErrorEx(log_str, tag='btc'):
tag = tag.replace('/', '_')
# 各种币的详细API日志
if __name__ == "__main__":
print(log_str)
log_file = getServerDir() + '/logs/strategy_' + tag + '.err.log'
mw.writeFileLog(log_str, log_file)
return True
def pMysqlDb():
# pymysql
db = mw.getMyORM()
data = getConfigData()
db_data = data['db']
# print(db_data)
db.setHost(db_data['db_host'])
db.setPort(db_data['db_port'])
db.setUser(db_data['db_user'])
db.setPwd(db_data['db_pass'])
db.setDbName(db_data['db_name'])
return db
def getOnlineData(symbol, input_tf="15m", limit=200):
bars = exchange.fetch_ohlcv(symbol, timeframe=input_tf, limit=limit)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
return df
def toDataFrame(data):
# print(data)
data = sorted(data, key=lambda x: x["addtime"], reverse=False)
dfield = ['addtime', 'open', 'high', 'low', 'close']
v = {}
for dx in dfield:
v[dx] = []
for x in data:
for i in range(len(x)):
field = dfield[i]
# print(i, field)
v[field].append(x[field])
# pprint(data)
frame = pd.DataFrame(v)
# frame = frame.sort_values(by=['addtime'])
frame['dt'] = pd.to_datetime(frame['addtime'], unit='s')
frame.set_index('dt', inplace=True)
frame.index = frame.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
return frame
def getDataFromDb(tf="1m", tag='btc', limit=1000):
tn = makeTableName(tag, tf)
sql = 'select addtime,open,high,low,close from ' + \
tn + ' order by addtime desc limit ' + str(limit)
pdb = pMysqlDb()
fdata = pdb.query(sql)
# print(fdata)
return fdata
def getDataFromDb_DF(tf="5m", tag='btc', limit=1000):
data = getDataFromDb(tf, tag, limit)
rdata = toDataFrame(data)
return rdata
# 消息模板类
class MsgTpl():
__name = ''
__strategy_name = ''
__time_frame = ''
__content = ''
__open_time = ''
__strategy_dt = ''
__stop_loss_price = ''
__closing_price = ''
__open_price = ''
__msg = ''
def setName(self, name):
self.__name = name
def setStrategyName(self, name):
self.__strategy_name = name
def setTimeFrame(self, tf):
self.__time_frame = tf
def setContent(self, content):
self.__content = content
def setOpenTime(self, time):
self.__open_time = toDateFromInt(time)
def setStrategicDt(self, stype='buy'):
if stype == 'buy':
self.__strategy_dt = '做多'
else:
self.__strategy_dt = '做空'
def setStopLossPrice(self, price):
self.__stop_loss_price = price
def setClosingPrice(self, price):
self.__closing_price = price
def setOpenPrice(self, price):
self.__open_price = price
def setMsg(self, msg):
self.__msg = msg
def toText(self):
msg = ''
msg += '名称:' + self.__name + "\n"
if self.__strategy_name != '':
msg += '策略名称:' + self.__strategy_name + "\n"
if self.__time_frame != '':
msg += '时间周期:' + self.__time_frame + "\n"
if self.__content != '':
msg += '策略描述:' + self.__content + "\n"
if self.__open_time != '':
msg += '开盘时间:' + self.__open_time + "\n"
if self.__strategy_dt != '':
msg += '开仓方向:' + self.__strategy_dt + "\n"
if self.__open_price != '':
msg += '开仓价:' + str(self.__open_price) + "\n"
if self.__stop_loss_price != '':
msg += '止损价:' + str(self.__stop_loss_price) + "\n"
if self.__closing_price != '':
msg += '止盈价:' + str(self.__closing_price) + "\n"
msg += '发送时间:' + mw.getDateFromNow() + "\n"
if self.__msg != '':
msg += __msg
return msg

View File

@@ -0,0 +1,57 @@
# import ccxt
# import talib
import sys
import os
import time
# import pandas as pd
from pprint import pprint
from decimal import Decimal
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/func_test.py run
# common.notifyMsg("任务开始")
def toUnixTimeSecond(tf="1m"):
if tf.find("m") > -1:
v = int(tf.replace("m", ''))
return v * 60
if tf.find("h") > -1:
v = int(tf.replace("h", ''))
return v * 3600
if tf.find("d") > -1:
v = int(tf.replace("d", ''))
return v * 86400
return 0
def multiply(a1, a2):
v = Decimal(str(a1)) * Decimal(str(a2))
return v
# print(toUnixTimeSecond("1d"))
# f = 19911.2
# s = common.calc_ClosingPrice(f, 19890.2, 'buy')
# print(s)
# print(sys.version_info)
# os.environ['TZ'] = 'Europe/London'
# time.tzset()
# t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
# print(t)
# v = multiply(26236.8, 0.003)
# print(float(v))
# print(v)
print(float('0.00255234') + float('-0.00000255234'))
v1 = common.addition('0.00255234', '-0.00000255234')
print(v1)

View File

@@ -0,0 +1,440 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/gate_100.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/gate_100.py long
import ccxt
import talib
import sys
import os
import time
import json
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = ccxt.gate({
"apiKey": '756e1ff80526cb0ac9620c75680fc506',
"secret": '95ac89362056bcf12ce37aabff6eb7ec78185483105f39b4a35e8dc8db8b4d3c',
})
exchange.load_markets()
# 默认开仓数据
# default_open_num = 10
default_open = {
"BTC/USDT": 0.01,
'ETH/USDT': 30,
'DOT/USDT': 30,
'CEL/USDT': 30,
}
default_sell = {
"BTC/USDT": 0.01,
'ETH/USDT': 0.01,
'DOT/USDT': 5,
'CEL/USDT': 85,
}
# 做多开仓
def onBuyOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做多----------------------------------', symbol)
default_open_num = default_open[symbol]
# 做多开仓 | 市价
data = exchange.createMarketBuyOrder(
symbol, default_open_num, {"tdMode": "cross"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 做多-止损价大于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 - 0.003))
# property_val = float(order_data['info']['accFillSz']) + float(order_data['info']['fee'])
property_val = common.addition(
order_data['info']['accFillSz'], order_data['info']['fee'])
property_val = float(property_val)
# 可平仓的数量
property_val = common.roundValCeil(
property_val, order_data['info']['accFillSz'])
common.writeLogEx('可平仓资产:' + str(property_val), symbol)
# 止盈价
diff = float(open_price) - float(stop_loss_price)
closing_price_c = float(open_price) + (diff * 2)
closing_price = float(open_price) * float((1 + profit))
# 选择盈利多的
if closing_price_c > closing_price:
closing_price = closing_price_c
closing_price = common.roundVal(closing_price, stop_loss_price)
# stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价/止盈价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
# 止损条件单
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
# 止赢条件单
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, closing_price, tp_exchange_params)
common.writeLogEx('止赢数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做多 end----------------------------------', symbol)
return True, open_price, closing_price
def onBuyOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做多开仓
# profit 百分比
try:
return onBuyOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def onSellOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做空----------------------------------', symbol)
# 计算借币卖币多多少,以USDT为基准
# sell_num = float(default_open_num) / float(stop_loss_price)
# sell_num = round(sell_num, 8)
sell_num = default_sell[symbol]
# 做空开仓 | 市价
data = exchange.createMarketSellOrder(
symbol, sell_num, {"tdMode": "cross", 'ccy': "USDT"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
common.writeLogEx('可平仓资产:' + str(sell_num), symbol)
# 做空-止损价小于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 + 0.003))
# 止盈价
diff = float(stop_loss_price) - float(open_price)
closing_price_c = float(open_price) - (diff * 2)
closing_price = float(open_price) * float((1 - profit))
# 选择盈利多的
if closing_price_c < closing_price:
closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
sl_amount = common.multiply(stop_loss_price, sell_num)
# 解决平仓时,未全部平仓
sl_amount = common.addition(sl_amount, 0.1)
common.writeLogEx('止损总价值:' + str(sl_amount), symbol)
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'buy', float(
sl_amount), stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'buy', sl_amount, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
# 设置 -止盈价
tp_amount = common.multiply(closing_price, sell_num)
# 解决平仓时,未全部平仓
tp_amount = common.addition(tp_amount, 0.1)
common.writeLogEx('止盈总价值:' + str(tp_amount), symbol)
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'buy', float(
tp_amount), closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'buy', tp_amount, closing_price, tp_exchange_params)
common.writeLogEx('止盈价数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做空 end----------------------------------', symbol)
return True, open_price, closing_price
def onSellOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做空开仓
# profit 百分比
try:
return onSellOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def getOnlineData(symbol, input_tf="15m", limit=230):
bars = exchange.fetch_ohlcv(symbol, timeframe=input_tf, limit=limit)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('dt', inplace=True)
df.index = df.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
return df
def isKdj(last, last_pre):
# 判断是否是金叉
if (float(last_pre['macd']) < 0) and (float(last['macd']) > 0):
return True
return False
def isDeadFork(last, last_pre):
# 判断是否是死叉
if (float(last_pre['macd']) > 0) and (float(last['macd']) < 0):
return True
return False
def getMACD(df, lenght=-60):
if len(df['close'].values) < 100:
return False, None
close_p = df['close'].values
df['dif'], df['dea'], df['macd'] = talib.MACD(close_p,
fastperiod=12,
slowperiod=26,
signalperiod=9)
return df[lenght:]
def getEMA(df):
close_p = df['close'].values
df['ema'] = talib.EMA(np.array(close_p), timeperiod=200)
return df
def doneMacd(data, tag, timeframe):
data = getEMA(data)
ma_data = getMACD(data)
# alen = len(data)
# print(ma_data)
t_data = ma_data.tail(3)
print(t_data)
last_pre = t_data.iloc[0]
last = t_data.iloc[1]
print(last)
# print(last.index)
# print('close:', last['close'], 'ema:', last['ema'])
obj = common.MsgTpl()
symbol = tag.upper() + '/USDT'
obj.setName(symbol)
obj.setStrategyName("MACD检查")
obj.setTimeFrame(timeframe)
obj.setOpenTime(last['timestamp'] / 1000)
now_data = t_data.iloc[2]
# print('now_data:', now_data)
# msg = obj.toText()
# print(msg)
if isKdj(last, last_pre) and last['close'] > last['ema']:
# if isKdj(last, last_pre):
# closing_price = common.calc_ClosingPrice(
# now_data['close'], last_pre['low'], 'buy')
# # print('closing_price:', closing_price)
# 做多止损点
stop_loss_price = last_pre['low']
buy_status, open_price, closing_price = onBuyOrder(
symbol, stop_loss_price, 0.005, timeframe)
if buy_status:
obj.setStrategicDt('buy')
# 做多止损点
obj.setStopLossPrice(str(stop_loss_price))
obj.setOpenPrice(str(open_price))
obj.setClosingPrice(str(closing_price))
obj.setContent("检查到金叉状态")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
if isDeadFork(last, last_pre) and last['close'] < last['ema']:
# if isDeadFork(last, last_pre):
# closing_price = common.calc_ClosingPrice(
# now_data['close'], last_pre['high'], 'sell')
# 做空止损点
stop_loss_price = last_pre['high']
sell_status, open_price, closing_price = onSellOrder(
symbol, stop_loss_price, 0.005, timeframe)
if sell_status:
obj.setStopLossPrice(str(stop_loss_price))
obj.setOpenPrice(str(open_price))
obj.setClosingPrice(str(closing_price))
obj.setStrategicDt('sell')
obj.setContent("检查到死叉状态")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
def mainProcess(tag, timeframe='15m'):
symbol = tag.upper() + '/USDT'
data = getOnlineData(symbol, timeframe)
doneMacd(data, tag, timeframe)
def foreachList():
tag_list = ['btc']
for tag in tag_list:
mainProcess(tag, '15m')
time.sleep(1)
def longRun():
while True:
foreachList()
time.sleep(3)
def debug():
while True:
mainProcess('xrp', '1m')
time.sleep(3)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
else:
print('error')

View File

@@ -0,0 +1,138 @@
import ccxt
import talib
import sys
import os
import time
import pandas as pd
import pandas_ta as ta
from pprint import pprint
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/hammer_robot.py run
pd.set_option('display.max_rows', None)
exchange = common.initEx()
exchange.load_markets()
entry_rsi = 30
exit_rsi = 40
symbol = 'XRP/USDT'
timeframe = '15m'
tf_mult = exchange.parse_timeframe(timeframe) * 1000
def indicators(data):
data['rsi'] = data.ta.rsi(length=10)
data['ema'] = data.ta.ema(length=200)
# close_p = data['close'].values
# data['rsi'] = talib.RSI(close_p, timeperiod=10)
# data['ema'] = talib.EMA(close_p, timeperiod=200)
return data
def check_buy_sell_signals(df):
last_row_index = len(df.index) - 1
lastest_rsi = round(df['rsi'].iloc[-1], 2)
lastest_price = round(df['close'].iloc[-1], 5)
lastest_ema = round(df['ema'].iloc[-1], 5)
lastest_ts = df['timestamp'].iloc[-1]
msg = "lastest_rsi:" + str(lastest_rsi) + " < entry_rsi:" + str(entry_rsi)
msg += ",lastest_price:" + \
str(lastest_price) + " > lastest_ema:" + str(lastest_ema)
print(msg)
long_cond = (lastest_rsi < entry_rsi) and (lastest_price > lastest_ema)
if long_cond:
print("买入")
order = exchange.create_market_buy_order(symbol, 1)
closed_orders = exchange.fetchClosedOrders(symbol, limit=2)
if len(closed_orders) > 0:
print("closed_orders:", closed_orders)
most_recent_closed_order = closed_orders[-1]
diff = lastest_ts - most_recent_closed_order['timestamp']
last_buy_signal_cnt = int(diff / tf_mult)
exit_cond = (lastest_rsi > exit_rsi) and (last_buy_signal_cnt > 10)
if exit_cond:
print("卖出")
order = exchange.create_market_sell_order(symbol, 1)
return
def get_hammer(df, lenght):
# 影线要大于body的多少倍
factor = 2
hl_range = df['high'] - df['low']
body_hi = df.apply(lambda x: max(x['close'], x['open']), axis=1)
body_lo = df.apply(lambda x: min(x['close'], x['open']), axis=1)
body = body_hi - body_lo
body_avg = ta.ema(body, lenght=lenght)
small_body = body < body_avg
# 上下影线站body的百分比
shadow_percent = 10
# 上影线
up_shadow = df['high'] - body_hi
dn_shadow = body_lo - df['low']
has_up_shadow = up_shadow > shadow_percent / 100 * body
has_dn_shadow = dn_shadow > shadow_percent / 100 * body
downtrend = df['close'] < ta.ema(df['close'], 50)
bullish_hammer = downtrend & small_body & (body > 0) & (
dn_shadow >= factor * body) & (has_up_shadow == False)
return bullish_hammer
def runBot():
bars = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=200)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
# format='%Y-%m-%d %H:%M:%S',
df['dt'] = pd.to_datetime(
df['timestamp'], unit="ms")
df['hammer'] = get_hammer(df, 10)
lastest_hammer = df.iloc[-1, -1]
lastest_price = df.iloc[-1, 0]
print("lastest_price:" + str(lastest_price))
print("lastest_hammer:" + str(lastest_hammer))
print(df.tail())
if lastest_hammer:
print("购买,做多")
notifyMsg("购买,做多")
def longRunBot():
common.notifyMsg("任务开始")
while True:
runBot()
time.sleep(10)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'run':
longRunBot()
else:
print('error')

View File

@@ -0,0 +1,33 @@
[
{
"id":"01",
"name": "MACD-KDJ策略检测|1h",
"file": "macd_kdj.py"
},
{
"id":"02",
"name": "通知测试|60s",
"file": "notify_demo.py"
},
{
"id":"03",
"name": "okex|macd交易策略|15m",
"file": "online_macd_trade.py"
},
{
"id":"04",
"name": "okex|动量交易策略|5m",
"file": "momentun_trade.py"
},
{
"id":"05",
"name": "gate.io|动量交易策略|5m",
"file": "gate_100.py"
},
{
"id":"06",
"name": "仅提醒|Vega交易策略|5m",
"file": "vega_trade.py"
}
]

View File

@@ -0,0 +1,121 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/macd_kdj.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/macd_kdj.py long
import ccxt
import talib
import pandas as pd
import time
import sys
import os
from pprint import pprint
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
pd.set_option('display.max_rows', None)
# import warnings
# warnings.filterwarnings('error')
def getMACD(df, lenght=-60):
if len(df['close'].values) < 100:
return False, None
close_p = df['close'].values
df['dif'], df['dea'], df['macd'] = talib.MACD(close_p,
fastperiod=12,
slowperiod=26,
signalperiod=9)
return True, df[lenght:]
def isKdj(last, last_pre):
# 判断是否是金叉
if (float(last_pre['macd']) < 0) and (float(last['macd']) > 0):
return True
return False
def isDeadFork(last, last_pre):
# 判断是否是死叉
if (float(last_pre['macd']) > 0) and (float(last['macd']) < 0):
return True
return False
def checkData():
tag = 'btc'
tf_frame = '1h'
data = common.getDataFromDb_DF(tf_frame, tag, 300)
# print(data)
b, r = getMACD(data)
if b:
# rlen = len(r)
# r = r.copy()
# r['dt'] = pd.to_datetime(
# r['addtime'], unit='s')
# r['dt'] = r['dt'].dt.tz_convert('Asia/Shanghai')
# print(r)
rlen = len(r)
t_data = r.tail(2)
# print(r.tail(2))
last_pre = t_data.iloc[0]
last = t_data.iloc[1]
# print(last_pre)
# print(last)
# print(last_pre['addtime'])
# print(last_pre['open'])
# print(last_pre['high'])
# print(last_pre['low'])
# print(last_pre['close'])
# print(last['addtime'])
# print(last['open'])
# print(last['high'])
# print(last['low'])
# print(last['close'])
now = mw.getDateFromNow()
if isKdj(last, last_pre):
msg = now + "|{}|{}|检查到金叉状态!".format(tag, tf_frame)
common.notifyMsg(msg, tf_frame, tag)
common.writeLog(msg)
if isDeadFork(last, last_pre):
msg = now + "|{}|{}|检查到死叉状态!".format(tag, tf_frame)
common.notifyMsg(msg, tf_frame, tag)
common.writeLog(msg)
def run():
checkData()
def longRun():
while True:
checkData()
time.sleep(3)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'run':
run()
elif func == 'long':
longRun()
else:
print('error')

View File

@@ -0,0 +1,505 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/momentun_trade.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/momentun_trade.py long
# 动量策略交易
import ccxt
import talib
import sys
import os
import time
import json
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = common.initEx()
exchange.load_markets()
# 默认开仓数据
# default_open_num = 70
# default_sell_num = 0.003
default_open = {
'BTC/USDT': 30,
'XRP/USDT': 30,
}
default_sell = {
'BTC/USDT': 0.001,
'XRP/USDT': 100,
}
# 做多开仓
def onBuyOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做多----------------------------------', symbol)
default_open_num = default_open[symbol]
# 做多开仓 | 市价
data = exchange.createMarketBuyOrder(
symbol, default_open_num, {"tdMode": "cross"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 修正小数点位数
open_price = common.roundVal(open_price, stop_loss_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
# 做多-止损价大于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 - 0.003))
# property_val = float(order_data['info']['accFillSz']) + float(order_data['info']['fee'])
property_val = common.addition(order_data['info'][
'accFillSz'], order_data['info']['fee'])
property_val = float(property_val)
# 可平仓的数量
# property_val = common.roundValCeil(
# property_val, order_data['info']['accFillSz'])
common.writeLogEx('可平仓资产:' + str(property_val), symbol)
# 止盈价
diff = float(open_price) - float(stop_loss_price)
closing_price = float(open_price) + (diff * 1.5)
# closing_price = float(open_price) * float((1 + profit))
# # 选择盈利多的
# if closing_price_c > closing_price:
# closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价/止盈价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
# 止损条件单
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
# 止赢条件单
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, closing_price, tp_exchange_params)
common.writeLogEx('止盈数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做多 end----------------------------------', symbol)
return True, open_price, closing_price
def onBuyOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做多开仓
# profit 百分比
try:
return onBuyOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def onSellOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做空----------------------------------', symbol)
# 计算借币卖币多多少,以USDT为基准
# sell_num = float(default_open_num) / float(stop_loss_price)
# sell_num = round(sell_num, 8)
# sell_num = default_sell_num
sell_num = default_sell[symbol]
# 做空开仓 | 市价
data = exchange.createMarketSellOrder(
symbol, sell_num, {"tdMode": "cross", 'ccy': "USDT"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 修正
open_price = common.roundVal(open_price, stop_loss_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('可平仓资产:' + str(sell_num), symbol)
# 做空-止损价小于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 + 0.003))
# 止盈价
diff = float(stop_loss_price) - float(open_price)
closing_price = float(open_price) - (diff * 1.5)
# closing_price = float(open_price) * float((1 - profit))
# 选择盈利多的
# if closing_price_c < closing_price:
# closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
sl_amount = common.multiply(stop_loss_price, sell_num)
# 解决平仓时,未全部平仓
sl_amount = common.addition(sl_amount, 0.1)
common.writeLogEx('止损总价值:' + str(sl_amount), symbol)
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'buy', float(
sl_amount), stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'buy', float(sl_amount), stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
# 设置 -止盈价
# tp_amount = closing_price * sell_num
tp_amount = common.multiply(closing_price, sell_num)
# 解决平仓时,未全部平仓
tp_amount = common.addition(tp_amount, 0.1)
common.writeLogEx('止盈总价值:' + str(tp_amount), symbol)
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'buy', float(
tp_amount), closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'buy', float(tp_amount), closing_price, tp_exchange_params)
common.writeLogEx('止盈价数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做空 end----------------------------------', symbol)
return True, open_price, closing_price
def onSellOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做空开仓
# profit 百分比
try:
return onSellOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def getOnlineData(symbol, input_tf="15m", limit=230):
bars = exchange.fetch_ohlcv(symbol, timeframe=input_tf, limit=limit)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('dt', inplace=True)
df.index = df.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
return df
def isKdj(last, last_pre):
# 判断是否是金叉
if (float(last_pre['macd']) < 0) and (float(last['macd']) > 0):
return True
return False
def isDeadFork(last, last_pre):
# 判断是否是死叉
if (float(last_pre['macd']) > 0) and (float(last['macd']) < 0):
return True
return False
def getMACD(df, lenght=-60):
if len(df['close'].values) < 100:
return False, None
close_p = df['close'].values
df['dif'], df['dea'], df['macd'] = talib.MACD(close_p,
fastperiod=12,
slowperiod=26,
signalperiod=9)
return df[lenght:]
def getTarget(df):
close = df['close'].values
df['ema'] = talib.EMA(np.array(close), timeperiod=10)
df['ema_200'] = talib.EMA(np.array(close), timeperiod=200)
df['ma'] = talib.MA(close, timeperiod=10)
df['rsi'] = talib.RSI(close, timeperiod=14)
return df
# 多头信号
def isBuyCrondSignal(last):
if last['ema'] > last['ma'] and (last['rsi'] > 50 and last['rsi'] < 70) and last['low'] >= last['ma'] and last['close'] > last['open']:
return True
return False
def isBuyFristSignal(data):
data = data.sort_values(by=['timestamp'], ascending=False)
# print(data)
data_len = len(data)
signal_num = 0
first_data = data.iloc[1]
# print(1, first_data['close'], first_data['ema'])
is_buy_signal = isBuyCrondSignal(first_data)
for x in range(2, data_len):
tmp = data.iloc[x]
# print(data.iloc[x])
# print(x, tmp['close'], tmp['ema'])
if isBuyCrondSignal(tmp):
signal_num = + 1
# print('signal_num:', signal_num)
if (tmp['ema'] < tmp['ma']):
break
if str(tmp['ema']) == 'nan':
break
print("is_buy_signal:", is_buy_signal, 'signal_num:', signal_num)
if is_buy_signal and signal_num == 0:
return True
return False
# 空头信号
def isSellCrondSignal(last):
if last['ema'] < last['ma'] and (last['rsi'] > 30 and last['rsi'] < 50) and last['high'] <= last['ema'] and last['close'] < last['open']:
return True
return False
def isSellFristSignal(data):
data = data.sort_values(by=['timestamp'], ascending=False)
# print(data)
data_len = len(data)
signal_num = 0
first_data = data.iloc[1]
# print(1, first_data['close'], first_data['ema'])
is_sell_signal = isSellCrondSignal(first_data)
for x in range(2, data_len):
tmp = data.iloc[x]
# print(data.iloc[x])
# print(x, tmp['close'], tmp['ema'])
if isSellCrondSignal(tmp):
signal_num = + 1
# print('signal_num:', signal_num)
if (tmp['ema'] < tmp['ma']):
break
if str(tmp['ema']) == 'nan':
break
print("is_sell_signal:", is_sell_signal, 'signal_num:', signal_num)
if is_sell_signal and signal_num == 0:
return True
return False
def monentunTrade(data, tag, timeframe):
data = getTarget(data)
# print(data)
key_data = data.tail(3)
print(key_data)
last_pre = key_data.iloc[0]
last = key_data.iloc[1]
obj = common.MsgTpl()
symbol = tag.upper() + '/USDT'
obj.setName(symbol)
obj.setStrategyName("动量交易策略")
obj.setTimeFrame(timeframe)
obj.setOpenTime(last['timestamp'] / 1000)
# 买入信号,并且收盘价要大于200 ema
if isBuyFristSignal(data) and last['close'] > last['ema_200']:
obj.setStrategicDt('buy')
# 做多止损点
stop_loss_price = last['ma']
stop_loss_price = common.roundVal(stop_loss_price, last['open'])
buy_status, open_price, closing_price = onBuyOrder(
symbol, stop_loss_price, 0.005, timeframe)
if buy_status:
# 做多止损点
obj.setStopLossPrice(str(stop_loss_price))
obj.setOpenPrice(str(open_price))
obj.setClosingPrice(str(closing_price))
obj.setContent("动量交易策略做多!")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
# 卖出信号,并且收盘价要小于200 ema
# if isSellFristSignal(data) and last['close'] < last['ema_200']:
# obj.setStrategicDt('sell')
# stop_loss_price = last['ma']
# stop_loss_price = common.roundVal(stop_loss_price, last['open'])
# sell_status, open_price, closing_price = onSellOrder(
# symbol, stop_loss_price, 0.005, timeframe)
# if sell_status:
# obj.setStopLossPrice(str(stop_loss_price))
# obj.setOpenPrice(str(open_price))
# obj.setClosingPrice(str(closing_price))
# obj.setStrategicDt('sell')
# obj.setContent("动量交易策略作空!")
# msg = obj.toText()
# print(msg)
# common.notifyMsg(msg, timeframe, tag)
# common.writeLog(msg)
def mainProcess(tag, timeframe='15m'):
symbol = tag.upper() + '/USDT'
data = getOnlineData(symbol, timeframe)
monentunTrade(data, tag, timeframe)
def foreachList():
tag_list = ['btc', 'xrp']
for tag in tag_list:
mainProcess(tag, '15m')
time.sleep(1)
def longRun():
while True:
foreachList()
time.sleep(1)
def debug():
while True:
mainProcess('btc', '5m')
time.sleep(1)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
else:
print('error')

View File

@@ -0,0 +1,48 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/notify_demo.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/notify_demo.py long
import ccxt
import talib
import pandas as pd
import time
import sys
import os
from pprint import pprint
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
def run():
print('debug')
def longRun():
while True:
obj = common.MsgTpl()
obj.setName("通知测试")
obj.setStrategyName("无")
obj.setTimeFrame("1m")
obj.setContent("60s通知测试")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, '1m', 'debug')
common.writeLog(msg)
time.sleep(3)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'run':
run()
if func == 'long':
longRun()
else:
print('error')

View File

@@ -0,0 +1,294 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/on_g_test.py t_buy_open
# python3 plugins/cryptocurrency_trade/ccxt/strategy/on_g_test.py t_buy_close
# python3 plugins/cryptocurrency_trade/ccxt/strategy/on_g_test.py t_sell_open
# python3 plugins/cryptocurrency_trade/ccxt/strategy/on_g_test.py t_sell_cloe
# 获取仓位数据
# python3 plugins/cryptocurrency_trade/ccxt/strategy/on_g_test.py t_get_trade
# API地址
# https://www.gate.io/docs/developers/apiv4/zh_CN/#api
import ccxt
import talib
import sys
import os
import time
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = ccxt.gate({
"apiKey": '756e1ff80526cb0ac9620c75680fc506',
"secret": '95ac89362056bcf12ce37aabff6eb7ec78185483105f39b4a35e8dc8db8b4d3c',
})
exchange.load_markets()
def t_get_trade():
data = exchange.fetchPositions()
print(data)
def btc_test():
closing_price = 24599.9
stop_loss_price = 24740.4
# ---------------------------
stop_loss_args = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
print('---------止损价 执行 START ----------------------------------')
sl_amount = stop_loss_price * 0.001
print(amount)
data = exchange.create_order(
'BTC/USDT', 'limit', 'buy', sl_amount, stop_loss_price, stop_loss_args)
print(data)
print('---------止损价 执行 END ----------------------------------')
print('---------止盈价 执行 START ----------------------------------')
closing_price_args = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
cp_amount = closing_price * 0.001
print(amount)
data = exchange.create_order(
'BTC/USDT', 'limit', 'buy', cp_amount, closing_price, closing_price_args)
print(data)
print('---------止盈价 执行 END ----------------------------------')
def testK_buy_open_sz():
# 做多开仓
data = exchange.fetchTicker('BTC/USDT')
print(data)
# data = exchange.createMarketBuyOrder('DOT/USDT', 1, {"tdMode": "cross"})
# print(data)
# print(type(data))
def testK_buy_open():
# 做多开仓
# print(dir(exchange))
# exchange['options']['createMarketBuyOrderRequiresPrice'] = False
data = exchange.fetch_ticker('BTC/USDT')
print("now price:", data['ask'])
amount = 0.001
price = data['ask']
cost = amount * float(price)
print('total price:', cost)
print('amount price:', amount)
# a_amount = round(amount / data['ask'], 5)
# print('amount :', amount)
# print('amount :', str(amount))
#
data = exchange.createOrder(
"BTC/USDT", type="limit", side="buy", amount=amount, price=price, params={'account': "cross_margin"})
# data = exchange.createMarketBuyOrder('BTC/USDT', amount)
print(data)
print(type(data))
# 数据
# {'info': {'clOrdId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'ordId': '554437054223302656', 'sCode': '0', 'sMsg': 'Order placed', 'tag': 'e847386590ce4dBC'}, 'id': '554437054223302656', 'clientOrderId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'timestamp': None, 'datetime': None, 'lastTradeTimestamp': None, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': None, 'postOnly': None, 'side': 'buy', 'price': None, 'stopPrice': None, 'triggerPrice': None, 'average': None, 'cost': None, 'amount': None, 'filled': None, 'remaining': None, 'status': None, 'fee': None, 'trades': [], 'reduceOnly': None, 'fees': []}
# 查询委托单
# order_id = data['info']['ordId']
# order_id = '554437054223302656'
# data = exchange.fetchOrder(order_id, 'BTC/USDT')
# print(data['info'])
# {'info': {'accFillSz': '0.190548', 'algoClOrdId': '', 'algoId': '', 'avgPx': '5.248', 'cTime': '1678441709955', 'cancelSource': '', 'cancelSourceReason': '', 'category': 'normal', 'ccy': 'USDT', 'clOrdId': 'e847386590ce4dBCeaddfd1494dc7080', 'fee': '-0.000190548', 'feeCcy': 'DOT', 'fillPx': '5.248', 'fillSz': '0.190548', 'fillTime': '1678441709957', 'instId': 'DOT-USDT', 'instType': 'MARGIN', 'lever': '10', 'ordId': '554359943143833600', 'ordType': 'market', 'pnl': '0', 'posSide': 'net', 'px': '', 'quickMgnType': '', 'rebate': '0', 'rebateCcy': 'USDT', 'reduceOnly': 'false', 'side': 'buy', 'slOrdPx': '', 'slTriggerPx': '', 'slTriggerPxType': '', 'source': '', 'state': 'filled', 'sz': '1', 'tag': 'e847386590ce4dBC', 'tdMode': 'cross', 'tgtCcy': '', 'tpOrdPx': '', 'tpTriggerPx': '', 'tpTriggerPxType': '', 'tradeId': '81184616', 'uTime': '1678441709960'}, 'id': '554359943143833600', 'clientOrderId': 'e847386590ce4dBCeaddfd1494dc7080', 'timestamp': 1678441709955, 'datetime': '2023-03-10T09:48:29.955Z', 'lastTradeTimestamp': 1678441709957, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': 'IOC', 'postOnly': None, 'side': 'buy', 'price': 5.248, 'stopPrice': None, 'triggerPrice': None, 'average': 5.248, 'cost': 0.999995904, 'amount': 1.0, 'filled': 0.190548, 'remaining': 0.809452, 'status': 'closed', 'fee': {'cost': 0.000190548, 'currency': 'DOT'}, 'trades': [], 'reduceOnly': False, 'fees': [{'cost': 0.000190548, 'currency': 'DOT'}]}
# open_price = data['info']['avgPx']
# print("开仓平均价", open_price)
# # 止盈价
# closing_price = float(open_price) * float((1 + 0.005))
# closing_price = common.roundVal(closing_price, open_price)
# print("止盈价", closing_price)
# # 止损价
# stop_loss_price = float(open_price) * float((1 - 0.01))
# stop_loss_price = common.roundVal(stop_loss_price, open_price)
# print("止损价", stop_loss_price)
# property_val = float(data['info']['accFillSz']) + \
# float(data['info']['fee'])
# # 相同位数
# property_val = common.roundValCeil(property_val, data['info']['accFillSz'])
# print("可平仓资产", property_val)
# closed_orders = exchange.fetchClosedOrders('DOT/USDT', limit=2)
# print('closed_orders', closed_orders)
# print(exchange.fetchBalance())
# 可以用,限价单
# time.sleep(1)
# data = exchange.createLimitSellOrder(
# 'DOT/USDT', property_val, closing_price, {"tdMode": "cross", 'ccy': 'USDT', "reduceOnly": True})
# print(data)
# print(type(data))
# 止损价
# 止盈价
# exchange_params = {
# 'ccy': "USDT",
# 'reduceOnly': True,
# 'tdMode': "cross",
# 'tpOrdPx': "-1",
# 'tpTriggerPx': closing_price,
# 'slOrdPx': "-1",
# 'slTriggerPx': stop_loss_price,
# }
# print('---------止损价 执行----------------------------------')
# data = exchange.create_order(
# 'BTC/USDT', 'limit', 'sell', property_val, closing_price, exchange_params)
# print(data)
# print(type(data))
# print('---------止盈价 执行----------------------------------')
# exchange_params = {
# 'stopPrice': closing_price,
# 'type': 'stopLimit',
# }
# data = exchange.create_order(
# 'DOT/USDT', 'limit', 'sell', property_val, closing_price, exchange_params)
# print(data)
# print(type(data))
def testK_buy_close():
# 平多
data = exchange.create_limit_buy_order(
'DOT/USDT', 1, 5, {"tdMode": "cross"})
print(data)
print(type(data))
# closed_orders = exchange.fetchClosedOrders('BTC/USDT', limit=2)
# print(closed_orders)
# closed_orders = exchange.fetchMyTrades('ETH/USDT', limit=2)
# print(closed_orders)
def testK_sell_open():
# 做空开仓
# data = exchange.createMarketSellOrder(
# 'DOT/USDT', 1, {"tdMode": "cross", 'ccy': "USDT", })
# print(data)
# print(type(data))
# 数据
# {'info': {'clOrdId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'ordId': '554437054223302656', 'sCode': '0', 'sMsg': 'Order placed', 'tag': 'e847386590ce4dBC'}, 'id': '554437054223302656', 'clientOrderId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'timestamp': None, 'datetime': None, 'lastTradeTimestamp': None, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': None, 'postOnly': None, 'side': 'buy', 'price': None, 'stopPrice': None, 'triggerPrice': None, 'average': None, 'cost': None, 'amount': None, 'filled': None, 'remaining': None, 'status': None, 'fee': None, 'trades': [], 'reduceOnly': None, 'fees': []}
# # 查询委托单
# order_id = data['info']['ordId']
order_id = '554516809819832320'
data = exchange.fetchOrder(order_id, 'DOT/USDT')
print(data['info'])
# {'info': {'accFillSz': '0.190548', 'algoClOrdId': '', 'algoId': '', 'avgPx': '5.248', 'cTime': '1678441709955', 'cancelSource': '', 'cancelSourceReason': '', 'category': 'normal', 'ccy': 'USDT', 'clOrdId': 'e847386590ce4dBCeaddfd1494dc7080', 'fee': '-0.000190548', 'feeCcy': 'DOT', 'fillPx': '5.248', 'fillSz': '0.190548', 'fillTime': '1678441709957', 'instId': 'DOT-USDT', 'instType': 'MARGIN', 'lever': '10', 'ordId': '554359943143833600', 'ordType': 'market', 'pnl': '0', 'posSide': 'net', 'px': '', 'quickMgnType': '', 'rebate': '0', 'rebateCcy': 'USDT', 'reduceOnly': 'false', 'side': 'buy', 'slOrdPx': '', 'slTriggerPx': '', 'slTriggerPxType': '', 'source': '', 'state': 'filled', 'sz': '1', 'tag': 'e847386590ce4dBC', 'tdMode': 'cross', 'tgtCcy': '', 'tpOrdPx': '', 'tpTriggerPx': '', 'tpTriggerPxType': '', 'tradeId': '81184616', 'uTime': '1678441709960'}, 'id': '554359943143833600', 'clientOrderId': 'e847386590ce4dBCeaddfd1494dc7080', 'timestamp': 1678441709955, 'datetime': '2023-03-10T09:48:29.955Z', 'lastTradeTimestamp': 1678441709957, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': 'IOC', 'postOnly': None, 'side': 'buy', 'price': 5.248, 'stopPrice': None, 'triggerPrice': None, 'average': 5.248, 'cost': 0.999995904, 'amount': 1.0, 'filled': 0.190548, 'remaining': 0.809452, 'status': 'closed', 'fee': {'cost': 0.000190548, 'currency': 'DOT'}, 'trades': [], 'reduceOnly': False, 'fees': [{'cost': 0.000190548, 'currency': 'DOT'}]}
open_price = data['info']['avgPx']
print("开仓平均价", open_price)
# 止盈价
closing_price = float(open_price) * float((1 - 0.005))
closing_price = common.roundVal(closing_price, open_price)
print("止盈价", closing_price)
# 止损价
stop_loss_price = float(open_price) * float((1 + 0.01))
stop_loss_price = common.roundVal(stop_loss_price, open_price)
print("止损价", stop_loss_price)
property_val = float(data['info']['accFillSz'])
# 相同位数
print("可平仓资产", property_val)
# 止损价
# 止盈价
exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
print('---------止损价 执行----------------------------------')
data = exchange.create_order(
'DOT/USDT', 'limit', 'buy', property_val, closing_price, exchange_params)
print(data)
print(type(data))
def testK_sell_close():
# 平多
data = exchange.create_limit_buy_order(
'DOT/USDT', 1, 5, {"tdMode": "cross"})
print(data)
print(type(data))
# closed_orders = exchange.fetchClosedOrders('BTC/USDT', limit=2)
# print(closed_orders)
# closed_orders = exchange.fetchMyTrades('ETH/USDT', limit=2)
# print(closed_orders)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
elif func == 'test':
testKdan()
elif func == 't_get_trade':
t_get_trade()
elif func == 't_buy_open':
testK_buy_open()
elif func == 't_buy_close':
testK_buy_close()
elif func == 't_sell_open':
testK_sell_open()
elif func == 't_sell_cloe':
testK_sell_close()
else:
print('error')

View File

@@ -0,0 +1,437 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_macd_trade.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_macd_trade.py long
import ccxt
import talib
import sys
import os
import time
import json
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = common.initEx()
exchange.load_markets()
# 默认开仓数据
# default_open_num = 10
default_open = {
'ETH/USDT': 30,
'DOT/USDT': 30,
'CEL/USDT': 30,
}
default_sell = {
'ETH/USDT': 0.02,
'DOT/USDT': 5,
'CEL/USDT': 85,
}
# 做多开仓
def onBuyOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做多----------------------------------', symbol)
default_open_num = default_open[symbol]
# 做多开仓 | 市价
data = exchange.createMarketBuyOrder(
symbol, default_open_num, {"tdMode": "cross"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 做多-止损价大于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 - 0.003))
# property_val = float(order_data['info']['accFillSz']) + float(order_data['info']['fee'])
property_val = common.addition(
order_data['info']['accFillSz'], order_data['info']['fee'])
property_val = float(property_val)
# 可平仓的数量
property_val = common.roundValCeil(
property_val, order_data['info']['accFillSz'])
common.writeLogEx('可平仓资产:' + str(property_val), symbol)
# 止盈价
diff = float(open_price) - float(stop_loss_price)
closing_price_c = float(open_price) + (diff * 2)
closing_price = float(open_price) * float((1 + profit))
# 选择盈利多的
if closing_price_c > closing_price:
closing_price = closing_price_c
closing_price = common.roundVal(closing_price, stop_loss_price)
# stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价/止盈价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
# 止损条件单
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
# 止赢条件单
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, closing_price, tp_exchange_params)
common.writeLogEx('止赢数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做多 end----------------------------------', symbol)
return True, open_price, closing_price
def onBuyOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做多开仓
# profit 百分比
try:
return onBuyOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def onSellOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做空----------------------------------', symbol)
# 计算借币卖币多多少,以USDT为基准
# sell_num = float(default_open_num) / float(stop_loss_price)
# sell_num = round(sell_num, 8)
sell_num = default_sell[symbol]
# 做空开仓 | 市价
data = exchange.createMarketSellOrder(
symbol, sell_num, {"tdMode": "cross", 'ccy': "USDT"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
common.writeLogEx('可平仓资产:' + str(sell_num), symbol)
# 做空-止损价小于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 + 0.003))
# 止盈价
diff = float(stop_loss_price) - float(open_price)
closing_price_c = float(open_price) - (diff * 2)
closing_price = float(open_price) * float((1 - profit))
# 选择盈利多的
if closing_price_c < closing_price:
closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
sl_amount = common.multiply(stop_loss_price, sell_num)
# 解决平仓时,未全部平仓
sl_amount = common.addition(sl_amount, 0.1)
common.writeLogEx('止损总价值:' + str(sl_amount), symbol)
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'buy', float(
sl_amount), stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'buy', sl_amount, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
# 设置 -止盈价
tp_amount = common.multiply(closing_price, sell_num)
# 解决平仓时,未全部平仓
tp_amount = common.addition(tp_amount, 0.1)
common.writeLogEx('止盈总价值:' + str(tp_amount), symbol)
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'buy', float(
tp_amount), closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'buy', tp_amount, closing_price, tp_exchange_params)
common.writeLogEx('止盈价数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做空 end----------------------------------', symbol)
return True, open_price, closing_price
def onSellOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做空开仓
# profit 百分比
try:
return onSellOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def getOnlineData(symbol, input_tf="15m", limit=230):
bars = exchange.fetch_ohlcv(symbol, timeframe=input_tf, limit=limit)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('dt', inplace=True)
df.index = df.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
return df
def isKdj(last, last_pre):
# 判断是否是金叉
if (float(last_pre['macd']) < 0) and (float(last['macd']) > 0):
return True
return False
def isDeadFork(last, last_pre):
# 判断是否是死叉
if (float(last_pre['macd']) > 0) and (float(last['macd']) < 0):
return True
return False
def getMACD(df, lenght=-60):
if len(df['close'].values) < 100:
return False, None
close_p = df['close'].values
df['dif'], df['dea'], df['macd'] = talib.MACD(close_p,
fastperiod=12,
slowperiod=26,
signalperiod=9)
return df[lenght:]
def getEMA(df):
close_p = df['close'].values
df['ema'] = talib.EMA(np.array(close_p), timeperiod=200)
return df
def doneMacd(data, tag, timeframe):
data = getEMA(data)
ma_data = getMACD(data)
# alen = len(data)
# print(ma_data)
t_data = ma_data.tail(3)
# print(t_data)
last_pre = t_data.iloc[0]
last = t_data.iloc[1]
# print(last)
# print(last.index)
# print('close:', last['close'], 'ema:', last['ema'])
obj = common.MsgTpl()
symbol = tag.upper() + '/USDT'
obj.setName(symbol)
obj.setStrategyName("MACD检查")
obj.setTimeFrame(timeframe)
obj.setOpenTime(last['timestamp'] / 1000)
now_data = t_data.iloc[2]
# print('now_data:', now_data)
# msg = obj.toText()
# print(msg)
if isKdj(last, last_pre) and last['close'] > last['ema']:
# if isKdj(last, last_pre):
# closing_price = common.calc_ClosingPrice(
# now_data['close'], last_pre['low'], 'buy')
# # print('closing_price:', closing_price)
# 做多止损点
stop_loss_price = last_pre['low']
buy_status, open_price, closing_price = onBuyOrder(
symbol, stop_loss_price, 0.005, timeframe)
if buy_status:
obj.setStrategicDt('buy')
# 做多止损点
obj.setStopLossPrice(str(stop_loss_price))
obj.setOpenPrice(str(open_price))
obj.setClosingPrice(str(closing_price))
obj.setContent("检查到金叉状态")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
if isDeadFork(last, last_pre) and last['close'] < last['ema']:
# if isDeadFork(last, last_pre):
# closing_price = common.calc_ClosingPrice(
# now_data['close'], last_pre['high'], 'sell')
# 做空止损点
stop_loss_price = last_pre['high']
sell_status, open_price, closing_price = onSellOrder(
symbol, stop_loss_price, 0.005, timeframe)
if sell_status:
obj.setStopLossPrice(str(stop_loss_price))
obj.setOpenPrice(str(open_price))
obj.setClosingPrice(str(closing_price))
obj.setStrategicDt('sell')
obj.setContent("检查到死叉状态")
msg = obj.toText()
print(msg)
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
def mainProcess(tag, timeframe='15m'):
symbol = tag.upper() + '/USDT'
data = getOnlineData(symbol, timeframe)
doneMacd(data, tag, timeframe)
def foreachList():
tag_list = [
'eth', 'dot'
]
for tag in tag_list:
mainProcess(tag, '15m')
time.sleep(1)
def longRun():
while True:
foreachList()
time.sleep(3)
def debug():
while True:
mainProcess('xrp', '1m')
time.sleep(3)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
else:
print('error')

View File

@@ -0,0 +1,273 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_test.py t_buy_open
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_test.py t_buy_close
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_test.py t_sell_open
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_test.py t_sell_cloe
# 获取仓位数据
# python3 plugins/cryptocurrency_trade/ccxt/strategy/online_test.py t_get_trade
import ccxt
import talib
import sys
import os
import time
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = common.initEx()
exchange.load_markets()
def t_get_trade():
data = exchange.fetchPositions()
print(data)
def btc_test():
closing_price = 24599.9
stop_loss_price = 24740.4
# ---------------------------
stop_loss_args = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
print('---------止损价 执行 START ----------------------------------')
sl_amount = stop_loss_price * 0.003
print(amount)
data = exchange.create_order(
'BTC/USDT', 'limit', 'buy', sl_amount, stop_loss_price, stop_loss_args)
print(data)
print('---------止损价 执行 END ----------------------------------')
print('---------止盈价 执行 START ----------------------------------')
closing_price_args = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
cp_amount = closing_price * 0.003
print(amount)
data = exchange.create_order(
'BTC/USDT', 'limit', 'buy', cp_amount, closing_price, closing_price_args)
print(data)
print('---------止盈价 执行 END ----------------------------------')
def testK_buy_open_sz():
# 做多开仓
data = exchange.fetchTicker('DOT/USDT')
print(data)
# data = exchange.createMarketBuyOrder('DOT/USDT', 1, {"tdMode": "cross"})
# print(data)
# print(type(data))
def testK_buy_open():
# 做多开仓
data = exchange.createMarketBuyOrder(
'DOT/USDT', 1, {"tdMode": "cross"})
print(data)
print(type(data))
# 数据
# {'info': {'clOrdId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'ordId': '554437054223302656', 'sCode': '0', 'sMsg': 'Order placed', 'tag': 'e847386590ce4dBC'}, 'id': '554437054223302656', 'clientOrderId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'timestamp': None, 'datetime': None, 'lastTradeTimestamp': None, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': None, 'postOnly': None, 'side': 'buy', 'price': None, 'stopPrice': None, 'triggerPrice': None, 'average': None, 'cost': None, 'amount': None, 'filled': None, 'remaining': None, 'status': None, 'fee': None, 'trades': [], 'reduceOnly': None, 'fees': []}
# 查询委托单
order_id = data['info']['ordId']
# order_id = '554437054223302656'
data = exchange.fetchOrder(order_id, 'DOT/USDT')
print(data['info'])
# {'info': {'accFillSz': '0.190548', 'algoClOrdId': '', 'algoId': '', 'avgPx': '5.248', 'cTime': '1678441709955', 'cancelSource': '', 'cancelSourceReason': '', 'category': 'normal', 'ccy': 'USDT', 'clOrdId': 'e847386590ce4dBCeaddfd1494dc7080', 'fee': '-0.000190548', 'feeCcy': 'DOT', 'fillPx': '5.248', 'fillSz': '0.190548', 'fillTime': '1678441709957', 'instId': 'DOT-USDT', 'instType': 'MARGIN', 'lever': '10', 'ordId': '554359943143833600', 'ordType': 'market', 'pnl': '0', 'posSide': 'net', 'px': '', 'quickMgnType': '', 'rebate': '0', 'rebateCcy': 'USDT', 'reduceOnly': 'false', 'side': 'buy', 'slOrdPx': '', 'slTriggerPx': '', 'slTriggerPxType': '', 'source': '', 'state': 'filled', 'sz': '1', 'tag': 'e847386590ce4dBC', 'tdMode': 'cross', 'tgtCcy': '', 'tpOrdPx': '', 'tpTriggerPx': '', 'tpTriggerPxType': '', 'tradeId': '81184616', 'uTime': '1678441709960'}, 'id': '554359943143833600', 'clientOrderId': 'e847386590ce4dBCeaddfd1494dc7080', 'timestamp': 1678441709955, 'datetime': '2023-03-10T09:48:29.955Z', 'lastTradeTimestamp': 1678441709957, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': 'IOC', 'postOnly': None, 'side': 'buy', 'price': 5.248, 'stopPrice': None, 'triggerPrice': None, 'average': 5.248, 'cost': 0.999995904, 'amount': 1.0, 'filled': 0.190548, 'remaining': 0.809452, 'status': 'closed', 'fee': {'cost': 0.000190548, 'currency': 'DOT'}, 'trades': [], 'reduceOnly': False, 'fees': [{'cost': 0.000190548, 'currency': 'DOT'}]}
open_price = data['info']['avgPx']
print("开仓平均价", open_price)
# 止盈价
closing_price = float(open_price) * float((1 + 0.005))
closing_price = common.roundVal(closing_price, open_price)
print("止盈价", closing_price)
# 止损价
stop_loss_price = float(open_price) * float((1 - 0.01))
stop_loss_price = common.roundVal(stop_loss_price, open_price)
print("止损价", stop_loss_price)
property_val = float(data['info']['accFillSz']) + \
float(data['info']['fee'])
# 相同位数
property_val = common.roundValCeil(property_val, data['info']['accFillSz'])
print("可平仓资产", property_val)
# closed_orders = exchange.fetchClosedOrders('DOT/USDT', limit=2)
# print('closed_orders', closed_orders)
# print(exchange.fetchBalance())
# 可以用,限价单
# time.sleep(1)
# data = exchange.createLimitSellOrder(
# 'DOT/USDT', property_val, closing_price, {"tdMode": "cross", 'ccy': 'USDT', "reduceOnly": True})
# print(data)
# print(type(data))
# 止损价
# 止盈价
exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
print('---------止损价 执行----------------------------------')
data = exchange.create_order(
'DOT/USDT', 'limit', 'sell', property_val, closing_price, exchange_params)
print(data)
print(type(data))
# print('---------止盈价 执行----------------------------------')
# exchange_params = {
# 'stopPrice': closing_price,
# 'type': 'stopLimit',
# }
# data = exchange.create_order(
# 'DOT/USDT', 'limit', 'sell', property_val, closing_price, exchange_params)
# print(data)
# print(type(data))
def testK_buy_close():
# 平多
data = exchange.create_limit_buy_order(
'DOT/USDT', 1, 5, {"tdMode": "cross"})
print(data)
print(type(data))
# closed_orders = exchange.fetchClosedOrders('BTC/USDT', limit=2)
# print(closed_orders)
# closed_orders = exchange.fetchMyTrades('ETH/USDT', limit=2)
# print(closed_orders)
def testK_sell_open():
# 做空开仓
# data = exchange.createMarketSellOrder(
# 'DOT/USDT', 1, {"tdMode": "cross", 'ccy': "USDT", })
# print(data)
# print(type(data))
# 数据
# {'info': {'clOrdId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'ordId': '554437054223302656', 'sCode': '0', 'sMsg': 'Order placed', 'tag': 'e847386590ce4dBC'}, 'id': '554437054223302656', 'clientOrderId': 'e847386590ce4dBC58e8b0afb0fe70cc', 'timestamp': None, 'datetime': None, 'lastTradeTimestamp': None, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': None, 'postOnly': None, 'side': 'buy', 'price': None, 'stopPrice': None, 'triggerPrice': None, 'average': None, 'cost': None, 'amount': None, 'filled': None, 'remaining': None, 'status': None, 'fee': None, 'trades': [], 'reduceOnly': None, 'fees': []}
# # 查询委托单
# order_id = data['info']['ordId']
order_id = '554516809819832320'
data = exchange.fetchOrder(order_id, 'DOT/USDT')
print(data['info'])
# {'info': {'accFillSz': '0.190548', 'algoClOrdId': '', 'algoId': '', 'avgPx': '5.248', 'cTime': '1678441709955', 'cancelSource': '', 'cancelSourceReason': '', 'category': 'normal', 'ccy': 'USDT', 'clOrdId': 'e847386590ce4dBCeaddfd1494dc7080', 'fee': '-0.000190548', 'feeCcy': 'DOT', 'fillPx': '5.248', 'fillSz': '0.190548', 'fillTime': '1678441709957', 'instId': 'DOT-USDT', 'instType': 'MARGIN', 'lever': '10', 'ordId': '554359943143833600', 'ordType': 'market', 'pnl': '0', 'posSide': 'net', 'px': '', 'quickMgnType': '', 'rebate': '0', 'rebateCcy': 'USDT', 'reduceOnly': 'false', 'side': 'buy', 'slOrdPx': '', 'slTriggerPx': '', 'slTriggerPxType': '', 'source': '', 'state': 'filled', 'sz': '1', 'tag': 'e847386590ce4dBC', 'tdMode': 'cross', 'tgtCcy': '', 'tpOrdPx': '', 'tpTriggerPx': '', 'tpTriggerPxType': '', 'tradeId': '81184616', 'uTime': '1678441709960'}, 'id': '554359943143833600', 'clientOrderId': 'e847386590ce4dBCeaddfd1494dc7080', 'timestamp': 1678441709955, 'datetime': '2023-03-10T09:48:29.955Z', 'lastTradeTimestamp': 1678441709957, 'symbol': 'DOT/USDT', 'type': 'market', 'timeInForce': 'IOC', 'postOnly': None, 'side': 'buy', 'price': 5.248, 'stopPrice': None, 'triggerPrice': None, 'average': 5.248, 'cost': 0.999995904, 'amount': 1.0, 'filled': 0.190548, 'remaining': 0.809452, 'status': 'closed', 'fee': {'cost': 0.000190548, 'currency': 'DOT'}, 'trades': [], 'reduceOnly': False, 'fees': [{'cost': 0.000190548, 'currency': 'DOT'}]}
open_price = data['info']['avgPx']
print("开仓平均价", open_price)
# 止盈价
closing_price = float(open_price) * float((1 - 0.005))
closing_price = common.roundVal(closing_price, open_price)
print("止盈价", closing_price)
# 止损价
stop_loss_price = float(open_price) * float((1 + 0.01))
stop_loss_price = common.roundVal(stop_loss_price, open_price)
print("止损价", stop_loss_price)
property_val = float(data['info']['accFillSz'])
# 相同位数
print("可平仓资产", property_val)
# 止损价
# 止盈价
exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
print('---------止损价 执行----------------------------------')
data = exchange.create_order(
'DOT/USDT', 'limit', 'buy', property_val, closing_price, exchange_params)
print(data)
print(type(data))
def testK_sell_close():
# 平多
data = exchange.create_limit_buy_order(
'DOT/USDT', 1, 5, {"tdMode": "cross"})
print(data)
print(type(data))
# closed_orders = exchange.fetchClosedOrders('BTC/USDT', limit=2)
# print(closed_orders)
# closed_orders = exchange.fetchMyTrades('ETH/USDT', limit=2)
# print(closed_orders)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
elif func == 'test':
testKdan()
elif func == 't_get_trade':
t_get_trade()
elif func == 't_buy_open':
btc_test()
elif func == 't_buy_close':
testK_buy_close()
elif func == 't_sell_open':
testK_sell_open()
elif func == 't_sell_cloe':
testK_sell_close()
else:
print('error')

View File

@@ -0,0 +1,102 @@
import ccxt
import talib
import sys
import os
import time
import pandas as pd
import pandas_ta as ta
from pprint import pprint
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/rsi_robot.py run
pd.set_option('display.max_rows', None)
exchange = common.initEx()
# 查看隐形方法
# print(dir(exchange))
exchange.load_markets()
entry_rsi = 30
exit_rsi = 40
symbol = 'XRP/USDT'
timeframe = '15m'
tf_mult = exchange.parse_timeframe(timeframe) * 1000
def indicators(data):
data['rsi'] = data.ta.rsi(length=10)
data['ema'] = data.ta.ema(length=200)
# close_p = data['close'].values
# data['rsi'] = talib.RSI(close_p, timeperiod=10)
# data['ema'] = talib.EMA(close_p, timeperiod=200)
return data
def check_buy_sell_signals(df):
last_row_index = len(df.index) - 1
lastest_rsi = round(df['rsi'].iloc[-1], 2)
lastest_price = round(df['close'].iloc[-1], 5)
lastest_ema = round(df['ema'].iloc[-1], 5)
lastest_ts = df['timestamp'].iloc[-1]
msg = "lastest_rsi:" + str(lastest_rsi) + " < entry_rsi:" + str(entry_rsi)
msg += ",lastest_price:" + \
str(lastest_price) + " > lastest_ema:" + str(lastest_ema)
print(msg)
long_cond = (lastest_rsi < entry_rsi) and (lastest_price > lastest_ema)
if long_cond:
print("买入")
order = exchange.create_market_buy_order(symbol, 1)
closed_orders = exchange.fetchClosedOrders(symbol, limit=2)
if len(closed_orders) > 0:
print("closed_orders:", closed_orders)
most_recent_closed_order = closed_orders[-1]
diff = lastest_ts - most_recent_closed_order['timestamp']
last_buy_signal_cnt = int(diff / tf_mult)
exit_cond = (lastest_rsi > exit_rsi) and (last_buy_signal_cnt > 10)
if exit_cond:
print("卖出")
order = exchange.create_market_sell_order(symbol, 1)
return
def runBot():
bars = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=200)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
df = indicators(df).tail(30)
check_buy_sell_signals(df)
def longRunBot():
while True:
runBot()
time.sleep(10)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'run':
longRunBot()
else:
print('error')

View File

@@ -0,0 +1,536 @@
# cd /www/server/mdserver-web && source bin/activate
# python3 plugins/cryptocurrency_trade/ccxt/strategy/vega_trade.py run
# python3 plugins/cryptocurrency_trade/ccxt/strategy/vega_trade.py long
# 动量策略交易
################
import ccxt
import talib
import sys
import os
import time
import json
import pandas as pd
# import pandas_ta as ta
from pprint import pprint
import numpy as np
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/strategy")
import common
sys.path.append(os.getcwd() + "/class/core")
import mw
exchange = common.initEx()
exchange.load_markets()
# 默认开仓数据
# default_open_num = 70
# default_sell_num = 0.003
default_open = {
'BTC/USDT': 70,
'XRP/USDT': 70,
}
default_sell = {
'BTC/USDT': 0.003,
'XRP/USDT': 185,
}
# 做多开仓
def onBuyOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做多----------------------------------', symbol)
default_open_num = default_open[symbol]
# 做多开仓 | 市价
data = exchange.createMarketBuyOrder(
symbol, default_open_num, {"tdMode": "cross"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 修正小数点位数
open_price = common.roundVal(open_price, stop_loss_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
# 做多-止损价大于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 - 0.003))
# property_val = float(order_data['info']['accFillSz']) + float(order_data['info']['fee'])
property_val = common.addition(order_data['info'][
'accFillSz'], order_data['info']['fee'])
property_val = float(property_val)
# 可平仓的数量
# property_val = common.roundValCeil(
# property_val, order_data['info']['accFillSz'])
common.writeLogEx('可平仓资产:' + str(property_val), symbol)
# 止盈价
diff = float(open_price) - float(stop_loss_price)
closing_price = float(open_price) + (diff * 1.5)
# closing_price = float(open_price) * float((1 + profit))
# # 选择盈利多的
# if closing_price_c > closing_price:
# closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价/止盈价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
# 止损条件单
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
# 止赢条件单
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'sell',
property_val, closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'sell', property_val, closing_price, tp_exchange_params)
common.writeLogEx('止盈数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做多 end----------------------------------', symbol)
return True, open_price, closing_price
def onBuyOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做多开仓
# profit 百分比
try:
return onBuyOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def onSellOrderTry(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 信号只在一个周期内执行一次|start
lock_file = common.getServerDir() + '/signal.json'
if not os.path.exists(lock_file):
mw.writeFile(lock_file, '{}')
stype = symbol.replace('/', '_') + '_' + timeframe
trigger_time = common.toUnixTimeSecond(timeframe)
lock_data = json.loads(mw.readFile(lock_file))
if stype in lock_data:
diff_time = time.time() - lock_data[stype]['do_time']
if diff_time >= trigger_time:
lock_data[stype]['do_time'] = time.time()
else:
return False, 0, 0
else:
lock_data[stype] = {'do_time': time.time()}
mw.writeFile(lock_file, json.dumps(lock_data))
# 信号只在一个周期内执行一次|end
common.writeLogEx('------做空----------------------------------', symbol)
# 计算借币卖币多多少,以USDT为基准
# sell_num = float(default_open_num) / float(stop_loss_price)
# sell_num = round(sell_num, 8)
# sell_num = default_sell_num
sell_num = default_sell[symbol]
# 做空开仓 | 市价
data = exchange.createMarketSellOrder(
symbol, sell_num, {"tdMode": "cross", 'ccy': "USDT"})
common.writeLogEx('开仓数据:', symbol)
common.writeLogEx(json.dumps(data), symbol)
order_id = data['info']['ordId']
order_data = exchange.fetchOrder(order_id, symbol)
common.writeLogEx('订单数据:', symbol)
common.writeLogEx(json.dumps(order_data), symbol)
# 实际开场平均价
open_price = order_data['info']['avgPx']
# 修正
open_price = common.roundVal(open_price, stop_loss_price)
common.writeLogEx('实际开仓价:' + str(open_price), symbol)
common.writeLogEx('可平仓资产:' + str(sell_num), symbol)
# 做空-止损价小于开仓价,重设止损价
if float(stop_loss_price) <= float(open_price):
stop_loss_price = float(open_price) * float((1 + 0.003))
# 止盈价
diff = float(stop_loss_price) - float(open_price)
closing_price = float(open_price) - (diff * 1.5)
# closing_price = float(open_price) * float((1 - profit))
# 选择盈利多的
# if closing_price_c < closing_price:
# closing_price = closing_price_c
closing_price = common.roundVal(closing_price, open_price)
stop_loss_price = common.roundVal(stop_loss_price, open_price)
common.writeLogEx('止盈价:' + str(closing_price), symbol)
common.writeLogEx('止损价:' + str(stop_loss_price), symbol)
# 设置 - 止损价
sl_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'slOrdPx': "-1",
'slTriggerPx': stop_loss_price,
}
sl_amount = common.multiply(stop_loss_price, sell_num)
# 解决平仓时,未全部平仓
sl_amount = common.addition(sl_amount, 0.1)
common.writeLogEx('止损总价值:' + str(sl_amount), symbol)
common.writeLogEx('止损参数:' + json.dumps([symbol, 'limit', 'buy', float(
sl_amount), stop_loss_price, sl_exchange_params]), symbol)
sl_cond_data = exchange.create_order(
symbol, 'limit', 'buy', float(sl_amount), stop_loss_price, sl_exchange_params)
common.writeLogEx('止损价数据:', symbol)
common.writeLogEx(json.dumps(sl_cond_data), symbol)
tp_exchange_params = {
'ccy': "USDT",
'reduceOnly': True,
'tdMode': "cross",
'tpOrdPx': "-1",
'tpTriggerPx': closing_price,
}
# 设置 -止盈价
# tp_amount = closing_price * sell_num
tp_amount = common.multiply(closing_price, sell_num)
# 解决平仓时,未全部平仓
tp_amount = common.addition(tp_amount, 0.1)
common.writeLogEx('止盈总价值:' + str(tp_amount), symbol)
common.writeLogEx('止盈参数:' + json.dumps([symbol, 'limit', 'buy', float(
tp_amount), closing_price, tp_exchange_params]), symbol)
tp_cond_data = exchange.create_order(
symbol, 'limit', 'buy', float(tp_amount), closing_price, tp_exchange_params)
common.writeLogEx('止盈价数据:', symbol)
common.writeLogEx(json.dumps(tp_cond_data), symbol)
common.writeLogEx('------做空 end----------------------------------', symbol)
return True, open_price, closing_price
def onSellOrder(symbol, stop_loss_price, profit=0.005, timeframe='15m'):
# 做空开仓
# profit 百分比
try:
return onSellOrderTry(symbol, stop_loss_price, profit, timeframe)
except Exception as e:
common.writeLogErrorEx(mw.getTracebackInfo(), symbol)
return False, 0, 0
def getOnlineData(symbol, input_tf="15m", limit=500):
bars = exchange.fetch_ohlcv(symbol, timeframe=input_tf, limit=500)
df = pd.DataFrame(bars[:], columns=['timestamp',
'open', 'high', 'low', 'close', 'volume'])
df['dt'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('dt', inplace=True)
df.index = df.index.tz_localize('UTC').tz_convert('Asia/Shanghai')
return df
def isKdj(last, last_pre):
# 判断是否是金叉
if (float(last_pre['macd']) < 0) and (float(last['macd']) > 0):
return True
return False
def isDeadFork(last, last_pre):
# 判断是否是死叉
if (float(last_pre['macd']) > 0) and (float(last['macd']) < 0):
return True
return False
def getTarget(df):
close = df['close'].values
# vega
df['ema144'] = talib.EMA(np.array(close), timeperiod=144)
df['ema169'] = talib.EMA(np.array(close), timeperiod=169)
df['ema288'] = talib.EMA(np.array(close), timeperiod=288)
df['ema388'] = talib.EMA(np.array(close), timeperiod=388)
df['rsi'] = talib.RSI(close, timeperiod=14)
return df
# 多头信号
def isBuyCrondSignal(last):
if last['ema'] > last['ma'] and (last['rsi'] > 50 and last['rsi'] < 70) and last['low'] >= last['ma'] and last['close'] > last['open']:
return True
return False
def isBuyFristSignal(data):
data = data.sort_values(by=['timestamp'], ascending=False)
# print(data)
data_len = len(data)
signal_num = 0
first_data = data.iloc[1]
# print(1, first_data['close'], first_data['ema'])
is_buy_signal = isBuyCrondSignal(first_data)
for x in range(2, data_len):
tmp = data.iloc[x]
# print(data.iloc[x])
# print(x, tmp['close'], tmp['ema'])
if isBuyCrondSignal(tmp):
signal_num = + 1
# print('signal_num:', signal_num)
if (tmp['ema'] < tmp['ma']):
break
if str(tmp['ema']) == 'nan':
break
print("is_buy_signal:", is_buy_signal, 'signal_num:', signal_num)
if is_buy_signal and signal_num == 0:
return True
return False
# 空头信号
def isSellCrondSignal(last):
if last['ema'] < last['ma'] and (last['rsi'] > 30 and last['rsi'] < 50) and last['high'] <= last['ema'] and last['close'] < last['open']:
return True
return False
def isSellFristSignal(data):
data = data.sort_values(by=['timestamp'], ascending=False)
# print(data)
data_len = len(data)
signal_num = 0
first_data = data.iloc[1]
# print(1, first_data['close'], first_data['ema'])
is_sell_signal = isSellCrondSignal(first_data)
for x in range(2, data_len):
tmp = data.iloc[x]
# print(data.iloc[x])
# print(x, tmp['close'], tmp['ema'])
if isSellCrondSignal(tmp):
signal_num = + 1
# print('signal_num:', signal_num)
if (tmp['ema'] < tmp['ma']):
break
if str(tmp['ema']) == 'nan':
break
print("is_sell_signal:", is_sell_signal, 'signal_num:', signal_num)
if is_sell_signal and signal_num == 0:
return True
return False
def isDownTrendCover(data, tag, timeframe):
# print(tag, timeframe, "开始检测是否下跌趋势")
# 下跌趋势回调
key_data = data.tail(2)
last_pre = key_data.iloc[0]
last = key_data.iloc[1]
pdata = data.tail(11)
for x in range(10):
t = pdata.iloc[x]
if t['low'] > t['ema388']:
print(tag, timeframe, "上升震荡行情过滤")
# print(t)
return False
if last['ema144'] > last['ema388']:
return False
print(tag, timeframe, "检查是下跌趋势!")
# 检查是否是下跌趋势
if last['high'] > last['ema388']:
return True
return False
def isUpTrendAndCover(data, tag, timeframe):
# print(tag, timeframe, "开始检测是否上升趋势")
# 上升趋势回调
key_data = data.tail(2)
# print(key_data)
last_pre = key_data.iloc[0]
last = key_data.iloc[1]
pdata = data.tail(11)
for x in range(10):
t = pdata.iloc[x]
if t['low'] < t['ema144']:
print(tag, timeframe, "上升震荡行情过滤")
return False
if last['ema144'] < last['ema388']:
return False
print(tag, timeframe, "检查是上升趋势")
# 检查是否是上升趋势
if last['low'] < last['ema144']:
return True
return False
def vegaTrade(data, tag, timeframe):
data = getTarget(data)
# print(data)
key_data = data.tail(2)
# print(key_data)
# last_pre = key_data.iloc[0]
last = key_data.iloc[1]
# print(last)
obj = common.MsgTpl()
symbol = tag.upper() + '/USDT'
obj.setName(symbol)
obj.setStrategyName("VEGA交易策略|仅具有指导作用")
obj.setTimeFrame(timeframe)
obj.setOpenTime(last['addtime'])
if isUpTrendAndCover(data, tag, timeframe):
obj.setStrategicDt('buy')
obj.setContent("VEGA上升趋势!回调做多~建议!")
msg = obj.toText()
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
if isDownTrendCover(data, tag, timeframe):
obj.setStrategicDt('sell')
obj.setContent("Vega下跌趋势!回调做空~建议!")
msg = obj.toText()
common.notifyMsg(msg, timeframe, tag)
common.writeLog(msg)
def mainProcess(tag, timeframe='5m'):
symbol = tag.upper() + '/USDT'
data = common.getDataFromDb_DF(timeframe, tag.lower())
vegaTrade(data, tag, timeframe)
return True
def foreachList():
tag_list = ['btc', 'xrp', 'eth', 'ltc', 'okb']
for tag in tag_list:
trame_list = ['5m', '15m', '1h', '4h']
for tf in trame_list:
mainProcess(tag, tf)
# time.sleep(1)
def longRun():
while True:
try:
foreachList()
time.sleep(1)
except Exception as e:
print(mw.getTracebackInfo())
time.sleep(3)
def debug():
while True:
mainProcess('btc', '5m')
time.sleep(1)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'long':
longRun()
elif func == 'run':
debug()
else:
print('error')

View File

@@ -0,0 +1,128 @@
'''
pip install git+https://github.com/catalyst-team/catalyst@master --upgrade
cd /www/server/mdserver-web && python3 plugins/cryptocurrency_trade/ccxt/test/p1.py
cd /Users/midoks/Desktop/mwdev/server/mdserver-web && source bin/activate
python3 plugins/cryptocurrency_trade/ccxt/test/p1.py
'''
from datetime import datetime
import akshare as ak
import pandas as pd
import backtrader as bt
class BollStrategy(bt.Strategy): # BOLL策略程序
params = (("nk", 13), # 求均值的天数
('printlog', False),) # 打印log
def __init__(self): # 初始化
self.data_close = self.datas[0].close # 指定价格序列
# 初始化交易指令、买卖价格和手续费
self.order = None
self.buy_price = None
self.buy_comm = None
# Boll指标计算
self.top = bt.indicators.BollingerBands(
self.datas[0], period=self.params.nk).top
self.bot = bt.indicators.BollingerBands(
self.datas[0], period=self.params.nk).bot
# 添加移动均线指标
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.nk)
def next(self): # 买卖策略
if self.order: # 检查是否有指令等待执行
return
# 检查是否持仓
"""
if not self.position: # 没有持仓
if self.data_close[0] > self.sma[0]: # 执行买入条件判断:收盘价格上涨突破20日均线
self.order = self.buy(size=100) # 执行买入
else:
if self.data_close[0] < self.sma[0]: # 执行卖出条件判断:收盘价格跌破20日均线
self.order = self.sell(size=100) # 执行卖出
"""
if not self.position: # 没有持仓
if self.data_close[0] < self.bot[0]: # 收盘价格跌破下轨
self.log("BUY CREATE, %.2f" % self.data_close[0])
self.order = self.buy() # 执行买入
else:
if self.data_close[0] > self.top[0]: # 收盘价格上涨突破上轨
self.log("SELL CREATE, %.2f" % self.data_close[0])
self.order = self.sell() # 执行卖出
def log(self, txt, dt=None, do_print=False): # 日志函数
if self.params.printlog or do_print:
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def notify_order(self, order): # 记录交易执行情况
# 如果order为submitted/accepted,返回空
if order.status in [order.Submitted, order.Accepted]:
return
# 指令为buy/sell,报告价格结果
if order.status in [order.Completed]:
if order.isbuy():
self.log(
f"买入:\n价格:{order.executed.price},\
成本:{order.executed.value},\
手续费:{order.executed.comm}"
)
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else:
self.log(
f"卖出:\n价格:{order.executed.price},\
成本: {order.executed.value},\
手续费{order.executed.comm}"
)
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log("交易失败") # 指令取消/交易失败, 报告结果
self.order = None
def notify_trade(self, trade): # 记录交易收益情况
if not trade.isclosed:
return
self.log(f"策略收益:\n毛收益 {trade.pnl:.2f}, 净收益 {trade.pnlcomm:.2f}")
def stop(self): # 回测结束后输出结果
self.log("(BOLL线: %2d日) 期末总资金 %.2f" %
(self.params.nk, self.broker.getvalue()), do_print=True)
code = "600036" # 股票代码
start_cash = 1000000 # 初始自己为1000000
stake = 100 # 单次交易数量为1手
commfee = 0.0005 # 佣金为万5
sdate = '20210101' # 回测时间段
edate = '20220930'
cerebro = bt.Cerebro() # 创建回测系统实例
# 利用AKShare获取股票的前复权数据的前6列
df_qfq = ak.stock_zh_a_hist(
symbol=code, adjust="qfq", start_date=sdate, end_date=edate).iloc[:, :6]
# 处理字段命名,以符合Backtrader的要求
df_qfq.columns = ['date', 'open', 'close', 'high', 'low', 'volume', ]
# 把date作为日期索引,以符合Backtrader的要求
df_qfq.index = pd.to_datetime(df_qfq['date'])
start_date = datetime.strptime(sdate, "%Y%m%d") # 转换日期格式
end_date = datetime.strptime(edate, "%Y%m%d")
# start_date=datetime(2022,1,4)
# end_date=datetime(2022,9,16)
data = bt.feeds.PandasData(
dataname=df_qfq, fromdate=start_date, todate=end_date) # 规范化数据格式
cerebro.adddata(data) # 加载数据
cerebro.addstrategy(BollStrategy, nk=13, printlog=True) # 加载交易策略
cerebro.broker.setcash(start_cash) # broker设置资金
cerebro.broker.setcommission(commission=commfee) # broker手续费
cerebro.addsizer(bt.sizers.FixedSize, stake=stake) # 设置买入数量
print("期初总资金: %.2f" % start_cash)
cerebro.run() # 运行回测
end_value = cerebro.broker.getvalue() # 获取回测结束后的总资金
print("期末总资金: %.2f" % end_value)
cerebro.plot()

View File

@@ -0,0 +1,154 @@
'''
pip install git+https://github.com/catalyst-team/catalyst@master --upgrade
cd /www/server/mdserver-web && python3 plugins/cryptocurrency_trade/ccxt/test/p1.py
cd /Users/midoks/Desktop/mwdev/server/mdserver-web && source bin/activate
python3 plugins/cryptocurrency_trade/ccxt/test/p1.py
'''
from datetime import datetime
import akshare as ak
import pandas as pd
import backtrader as bt
import sys
import os
sys.path.append(os.getcwd() + "/plugins/cryptocurrency_trade/ccxt/strategy")
import common
class BollStrategy(bt.Strategy): # BOLL策略程序
params = (("nk", 13), # 求均值的天数
('printlog', False),) # 打印log
def __init__(self): # 初始化
self.data_close = self.datas[0].close # 指定价格序列
# 初始化交易指令、买卖价格和手续费
self.order = None
self.buy_price = None
self.buy_comm = None
# Boll指标计算
self.top = bt.indicators.BollingerBands(
self.datas[0], period=self.params.nk).top
self.bot = bt.indicators.BollingerBands(
self.datas[0], period=self.params.nk).bot
# 添加移动均线指标
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.nk)
def next(self): # 买卖策略
if self.order: # 检查是否有指令等待执行
return
# 检查是否持仓
"""
if not self.position: # 没有持仓
if self.data_close[0] > self.sma[0]: # 执行买入条件判断:收盘价格上涨突破20日均线
self.order = self.buy(size=100) # 执行买入
else:
if self.data_close[0] < self.sma[0]: # 执行卖出条件判断:收盘价格跌破20日均线
self.order = self.sell(size=100) # 执行卖出
"""
if not self.position: # 没有持仓
if self.data_close[0] < self.bot[0]: # 收盘价格跌破下轨
self.log("BUY CREATE, %.2f" % self.data_close[0])
self.order = self.buy() # 执行买入
else:
if self.data_close[0] > self.top[0]: # 收盘价格上涨突破上轨
self.log("SELL CREATE, %.2f" % self.data_close[0])
self.order = self.sell() # 执行卖出
def log(self, txt, dt=None, do_print=False): # 日志函数
if self.params.printlog or do_print:
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def notify_order(self, order): # 记录交易执行情况
# 如果order为submitted/accepted,返回空
if order.status in [order.Submitted, order.Accepted]:
return
# 指令为buy/sell,报告价格结果
if order.status in [order.Completed]:
if order.isbuy():
self.log(
f"买入:\n价格:{order.executed.price},\
成本:{order.executed.value},\
手续费:{order.executed.comm}"
)
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else:
self.log(
f"卖出:\n价格:{order.executed.price},\
成本: {order.executed.value},\
手续费{order.executed.comm}"
)
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log("交易失败") # 指令取消/交易失败, 报告结果
self.order = None
def notify_trade(self, trade): # 记录交易收益情况
if not trade.isclosed:
return
self.log(f"策略收益:\n毛收益 {trade.pnl:.2f}, 净收益 {trade.pnlcomm:.2f}")
def stop(self): # 回测结束后输出结果
self.log("(BOLL线: %2d日) 期末总资金 %.2f" %
(self.params.nk, self.broker.getvalue()), do_print=True)
code = "600036" # 股票代码
start_cash = 1000000 # 初始自己为1000000
stake = 100 # 单次交易数量为1手
commfee = 0.0005 # 佣金为万5
sdate = '20210101' # 回测时间段
edate = '20220930'
cerebro = bt.Cerebro() # 创建回测系统实例
# 利用AKShare获取股票的前复权数据的前6列
# df_qfq = ak.stock_zh_a_hist(
# symbol=code, adjust="qfq", start_date=sdate, end_date=edate).iloc[:, :6]
# 日期 开盘 收盘 最高 最低 成交量
# 0 2021-01-04 40.46 40.40 41.01 39.25 1549523
# 1 2021-01-05 39.99 39.41 40.03 38.67 1387177
# 2 2021-01-06 39.33 41.38 41.43 39.23 1200646
# 3 2021-01-07 41.52 43.13 43.20 41.49 1078322
# 4 2021-01-08 43.52 43.83 44.25 43.04 1299595
# .. ... ... ... ... ... ...
# 420 2022-09-26 34.02 33.95 34.52 33.84 525491
# 421 2022-09-27 33.89 33.90 34.05 33.44 475414
# 422 2022-09-28 33.79 33.67 34.00 33.42 487299
# 423 2022-09-29 33.99 33.15 34.32 33.00 617859
# 424 2022-09-30 33.26 33.65 33.95 33.12 539717
tag = 'btc'
symbol = tag.upper() + '/USDT'
df_qfq = common.getDataFromDb_DF('15m', tag.lower())
print(df_qfq)
# # 处理字段命名,以符合Backtrader的要求
# df_qfq.columns = ['date', 'open', 'close', 'high', 'low', 'volume', ]
# # 把date作为日期索引,以符合Backtrader的要求
# df_qfq.index = pd.to_datetime(df_qfq['date'])
# start_date = datetime.strptime(sdate, "%Y%m%d") # 转换日期格式
# end_date = datetime.strptime(edate, "%Y%m%d")
start_date = datetime(2023, 4, 6)
end_date = datetime(2023, 4, 9)
data = bt.feeds.PandasData(dataname=df_qfq, fromdate=start_date,
todate=end_date) # 规范化数据格式
cerebro.adddata(data) # 加载数据
cerebro.addstrategy(BollStrategy, nk=13, printlog=True) # 加载交易策略
cerebro.broker.setcash(start_cash) # broker设置资金
cerebro.broker.setcommission(commission=commfee) # broker手续费
cerebro.addsizer(bt.sizers.FixedSize, stake=stake) # 设置买入数量
print("期初总资金: %.2f" % start_cash)
cerebro.run() # 运行回测
end_value = cerebro.broker.getvalue() # 获取回测结束后的总资金
print("期末总资金: %.2f" % end_value)
# cerebro.plot(style='candle')

Some files were not shown because too many files have changed in this diff Show More