InPanel 1.2.6__tar.gz → 1.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/PKG-INFO +55 -39
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/SOURCES.txt +29 -3
- inpanel-1.2.8/MANIFEST.in +6 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/PKG-INFO +55 -39
- {inpanel-1.2.6 → inpanel-1.2.8}/README.md +53 -6
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/app.py +2 -1
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/base.py +14 -8
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/config.py +1 -1
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/filelock.py +1 -1
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/pxssh.py +2 -2
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/acme.py +16 -18
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/aliyuncs.py +3 -4
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/apt.py +35 -35
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/brew.py +46 -46
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/certificate.py +7 -7
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/config.py +3 -3
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/cron.py +7 -7
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/disk.py +19 -22
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/dnf.py +25 -25
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/docker_source.py +30 -30
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/file.py +443 -154
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/ftp.py +19 -19
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/httpd.py +10 -10
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/login.py +7 -8
- inpanel-1.2.8/inpanel/mod/logs.py +840 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/mysql.py +68 -69
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/nginx.py +2326 -2326
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/php.py +7 -7
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/pip.py +13 -13
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/process.py +3 -3
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/query.py +4 -4
- inpanel-1.2.8/inpanel/mod/redis.py +518 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/remote.py +10 -10
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/server.py +93 -97
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/service.py +15 -14
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/setting.py +3 -3
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/ssh.py +324 -324
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/task.py +2 -1
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/user.py +5 -5
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/yum.py +50 -50
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/css/global.css +5 -14
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/index.html +6 -2
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/controllers.js +0 -9
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/database.js +258 -12
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/file.js +139 -42
- inpanel-1.2.8/inpanel/public/js/controllers/logs.js +291 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/utils.js +182 -23
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/core.js +247 -246
- inpanel-1.2.8/inpanel/public/lib/codemirror/addon/edit/matchbrackets.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/addon/search/match-highlighter.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/addon/selection/active-line.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/codemirror.min.css +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/codemirror.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/css/css.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/diff/diff.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/dockerfile/dockerfile.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/go/go.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/htmlmixed/htmlmixed.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/javascript/javascript.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/lua/lua.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/markdown/markdown.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/nginx/nginx.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/perl/perl.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/php/php.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/properties/properties.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/python/python.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/ruby/ruby.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/rust/rust.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/shell/shell.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/sql/sql.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/toml/toml.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/xml/xml.min.js +1 -0
- inpanel-1.2.8/inpanel/public/lib/codemirror/mode/yaml/yaml.min.js +1 -0
- inpanel-1.2.8/inpanel/public/partials/database/index.html +401 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/file/trash.html +4 -2
- inpanel-1.2.8/inpanel/public/partials/logs.html +442 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/index.html +20 -20
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/sources.html +181 -126
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/templates/index.html +6 -2
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/utils.py +9 -10
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/web.py +65 -40
- {inpanel-1.2.6 → inpanel-1.2.8}/pyproject.toml +8 -7
- inpanel-1.2.6/MANIFEST.in +0 -2
- inpanel-1.2.6/inpanel/public/lib/codemirror/codemirror-compressed.js +0 -1
- inpanel-1.2.6/inpanel/public/lib/codemirror/codemirror.css +0 -173
- inpanel-1.2.6/inpanel/public/partials/database/index.html +0 -172
- inpanel-1.2.6/inpanel/public/partials/log.html +0 -83
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/dependency_links.txt +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/entry_points.txt +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/requires.txt +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/InPanel.egg-info/top_level.txt +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/LICENSE +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/async_process.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/magic.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/lib/pyDes.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/docker.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall_base.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall_firewalld.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall_iptables.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall_macos.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/firewall_ufw.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/lighttpd.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/named.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_apt.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_base.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_brew.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_dnf.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_map.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/package_yum.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/plugins.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/proftpd.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/pureftpd.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/service_manager.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/shell.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/system.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/mod/vsftpd.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/plugin.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/favicon.ico +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/images/alipay.jpg +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/images/loading.gif +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/images/weixin.jpg +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/container.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/ecs.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/plugins.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/service.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/controllers/site.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/directives.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/filters.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/js/services.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/angular/1.0.2/angular-resource.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/angular/1.0.2/angular.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/angular/1.0.8/angular.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap.css +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap.css.map +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap.min.css +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/js/bootstrap.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/js/bootstrap.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/bootstrap/js/npm.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/jquery/jquery-1.12.4.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/md5/md5.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/lib/md5/md5.min.js +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/message.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/navbar.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/selector.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvbase.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvext.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvfile.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvinstall.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvlog.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvminiop.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvuninstall.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/directives/srvupdate.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/container/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/database/mysql/dbedit.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/database/mysql/dbnew.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/database/mysql/useredit.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/database/mysql/usernew.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/ecs/account.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/ecs/ecs.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/ecs/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/ecs/setings.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/file/file.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/ftp.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/login.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/logout.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/main.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/plugins/config.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/plugins/detail.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/plugins/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/plugins/info.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/secure.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/apache.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/cron.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/fail2ban.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/firewalld.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/iptables.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/java11.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/java17.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/java21.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/java8.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/lighttpd.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/mariadb.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/memcache.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/minio.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/mongodb.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/mysql.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/named.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/nginx.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/nodejs18.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/nodejs20.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/nodejs22.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/nodejs24.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/ntp.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php56.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php74.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php80.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php81.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php82.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php83.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/php84.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/proftpd.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/pureftpd.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/redis.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/samba.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/sendmail.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/ssh.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/tomcat.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/ufw.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/service/vsftpd.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/setting.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/site/apache/site.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/site/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/site/nginx/site.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/sorry.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/autofm.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/backup.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/index.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/migrate.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/movedata.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/storage/remote.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/cron.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/firewall.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/network.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/process.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/shell.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/ssl.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/task.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/time.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/partials/utils/user.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/robots.txt +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/public/templates/file/preview.html +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/_common.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/categories.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/database.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/ftp.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/http.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/java.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/mail.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/nodejs.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/php.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/security.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/storage.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/services/system.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/__init__.py +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/apt.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/brew.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/dnf.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/docker.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/package_map.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/pip.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/third_party.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/inpanel/templates/sources/yum.json +0 -0
- {inpanel-1.2.6 → inpanel-1.2.8}/setup.cfg +0 -0
|
@@ -1,40 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.8
|
|
4
4
|
Summary: InPanel - A Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
7
|
-
License: BSD
|
|
8
|
-
|
|
9
|
-
Copyright (c) 2017-2026, Jackson Dou
|
|
10
|
-
Copyright (c) 2012-2013, VPSMate development team
|
|
11
|
-
All rights reserved.
|
|
12
|
-
|
|
13
|
-
Redistribution and use in source and binary forms, with or without
|
|
14
|
-
modification, are permitted provided that the following conditions are met:
|
|
15
|
-
|
|
16
|
-
1. Redistributions of source code must retain the above copyright notice, this
|
|
17
|
-
list of conditions and the following disclaimer.
|
|
18
|
-
|
|
19
|
-
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
20
|
-
this list of conditions and the following disclaimer in the documentation
|
|
21
|
-
and/or other materials provided with the distribution.
|
|
22
|
-
|
|
23
|
-
3. Neither the name of the copyright holder nor the names of its
|
|
24
|
-
contributors may be used to endorse or promote products derived from
|
|
25
|
-
this software without specific prior written permission.
|
|
26
|
-
|
|
27
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
28
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
29
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
30
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
31
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
32
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
33
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
34
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
35
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
|
-
|
|
7
|
+
License: BSD-3-Clause
|
|
38
8
|
Project-URL: Homepage, https://inpanel.org
|
|
39
9
|
Project-URL: Repository, https://github.com/inpanel/inpanel
|
|
40
10
|
Project-URL: Documentation, https://inpanel.org
|
|
@@ -44,7 +14,6 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
44
14
|
Classifier: Environment :: Web Environment
|
|
45
15
|
Classifier: Framework :: AsyncIO
|
|
46
16
|
Classifier: Intended Audience :: System Administrators
|
|
47
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
48
17
|
Classifier: Operating System :: POSIX :: Linux
|
|
49
18
|
Classifier: Programming Language :: Python :: 3
|
|
50
19
|
Classifier: Programming Language :: Python :: 3.6
|
|
@@ -370,18 +339,65 @@ inpanel run
|
|
|
370
339
|
|
|
371
340
|
### 构建安装包
|
|
372
341
|
|
|
342
|
+
使用项目提供的构建脚本构建各类安装包:
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# 进入项目目录
|
|
346
|
+
cd inpanel
|
|
347
|
+
|
|
348
|
+
# 构建 pip 包(wheel + sdist)
|
|
349
|
+
bash scripts/build_pip.sh
|
|
350
|
+
|
|
351
|
+
# 构建并上传 pip 包到 PyPI
|
|
352
|
+
bash scripts/build_pip.sh upload
|
|
353
|
+
|
|
354
|
+
# 一键构建 RPM 和 DEB 包
|
|
355
|
+
bash scripts/build_package.sh
|
|
356
|
+
|
|
357
|
+
# 或单独构建
|
|
358
|
+
bash scripts/build_rpm.sh # 仅构建 RPM
|
|
359
|
+
bash scripts/build_deb.sh # 仅构建 DEB
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
#### 构建依赖
|
|
363
|
+
|
|
364
|
+
构建脚本依赖以下工具,请根据系统安装:
|
|
365
|
+
|
|
366
|
+
| 依赖 | 用途 | 安装命令 |
|
|
367
|
+
|------|------|----------|
|
|
368
|
+
| `python3` | Python 运行环境 | 系统通常已自带 |
|
|
369
|
+
| `python3-build` | 构建 Python 包(wheel/sdist) | `pip install build` |
|
|
370
|
+
| `twine` | 上传 pip 包到 PyPI | `pip install twine` |
|
|
371
|
+
| `rpmbuild` | RPM 包构建(CentOS/RHEL) | `yum install rpm-build` |
|
|
372
|
+
| `dpkg-buildpackage` | DEB 包构建(Debian/Ubuntu) | `apt-get install dpkg-dev` |
|
|
373
|
+
| `debhelper` | DEB 包构建辅助工具 | `apt-get install debhelper` |
|
|
374
|
+
| `python3-all` | DEB 包 Python 兼容性 | `apt-get install python3-all` |
|
|
375
|
+
| `python3-setuptools` | DEB 包 setuptools 支持 | `apt-get install python3-setuptools` |
|
|
376
|
+
|
|
377
|
+
#### 完整依赖安装示例
|
|
378
|
+
|
|
379
|
+
**所有平台**(构建 pip 包 / 上传 PyPI):
|
|
380
|
+
|
|
373
381
|
```bash
|
|
374
|
-
|
|
382
|
+
pip install build twine
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**Debian / Ubuntu**(构建 DEB 包):
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
sudo apt-get install -y debhelper python3-all python3-setuptools dpkg-dev
|
|
375
389
|
pip install build
|
|
376
|
-
|
|
390
|
+
```
|
|
377
391
|
|
|
378
|
-
|
|
379
|
-
rpmbuild -bb rpmbuild.spec
|
|
392
|
+
**CentOS / RHEL**(构建 RPM 包):
|
|
380
393
|
|
|
381
|
-
|
|
382
|
-
|
|
394
|
+
```bash
|
|
395
|
+
sudo yum install -y rpm-build
|
|
396
|
+
pip install build
|
|
383
397
|
```
|
|
384
398
|
|
|
399
|
+
构建产物默认输出到项目目录下的 `packages/` 目录。
|
|
400
|
+
|
|
385
401
|
## 账号和密码
|
|
386
402
|
|
|
387
403
|
默认用户名:`admin`
|
|
@@ -44,6 +44,7 @@ inpanel/mod/ftp.py
|
|
|
44
44
|
inpanel/mod/httpd.py
|
|
45
45
|
inpanel/mod/lighttpd.py
|
|
46
46
|
inpanel/mod/login.py
|
|
47
|
+
inpanel/mod/logs.py
|
|
47
48
|
inpanel/mod/mysql.py
|
|
48
49
|
inpanel/mod/named.py
|
|
49
50
|
inpanel/mod/nginx.py
|
|
@@ -61,6 +62,7 @@ inpanel/mod/process.py
|
|
|
61
62
|
inpanel/mod/proftpd.py
|
|
62
63
|
inpanel/mod/pureftpd.py
|
|
63
64
|
inpanel/mod/query.py
|
|
65
|
+
inpanel/mod/redis.py
|
|
64
66
|
inpanel/mod/remote.py
|
|
65
67
|
inpanel/mod/server.py
|
|
66
68
|
inpanel/mod/service.py
|
|
@@ -89,6 +91,7 @@ inpanel/public/js/controllers/controllers.js
|
|
|
89
91
|
inpanel/public/js/controllers/database.js
|
|
90
92
|
inpanel/public/js/controllers/ecs.js
|
|
91
93
|
inpanel/public/js/controllers/file.js
|
|
94
|
+
inpanel/public/js/controllers/logs.js
|
|
92
95
|
inpanel/public/js/controllers/plugins.js
|
|
93
96
|
inpanel/public/js/controllers/service.js
|
|
94
97
|
inpanel/public/js/controllers/site.js
|
|
@@ -114,15 +117,38 @@ inpanel/public/lib/bootstrap/img/glyphicons-halflings.png
|
|
|
114
117
|
inpanel/public/lib/bootstrap/js/bootstrap.js
|
|
115
118
|
inpanel/public/lib/bootstrap/js/bootstrap.min.js
|
|
116
119
|
inpanel/public/lib/bootstrap/js/npm.js
|
|
117
|
-
inpanel/public/lib/codemirror/codemirror
|
|
118
|
-
inpanel/public/lib/codemirror/codemirror.
|
|
120
|
+
inpanel/public/lib/codemirror/codemirror.min.css
|
|
121
|
+
inpanel/public/lib/codemirror/codemirror.min.js
|
|
122
|
+
inpanel/public/lib/codemirror/addon/edit/matchbrackets.min.js
|
|
123
|
+
inpanel/public/lib/codemirror/addon/search/match-highlighter.min.js
|
|
124
|
+
inpanel/public/lib/codemirror/addon/selection/active-line.min.js
|
|
125
|
+
inpanel/public/lib/codemirror/mode/css/css.min.js
|
|
126
|
+
inpanel/public/lib/codemirror/mode/diff/diff.min.js
|
|
127
|
+
inpanel/public/lib/codemirror/mode/dockerfile/dockerfile.min.js
|
|
128
|
+
inpanel/public/lib/codemirror/mode/go/go.min.js
|
|
129
|
+
inpanel/public/lib/codemirror/mode/htmlmixed/htmlmixed.min.js
|
|
130
|
+
inpanel/public/lib/codemirror/mode/javascript/javascript.min.js
|
|
131
|
+
inpanel/public/lib/codemirror/mode/lua/lua.min.js
|
|
132
|
+
inpanel/public/lib/codemirror/mode/markdown/markdown.min.js
|
|
133
|
+
inpanel/public/lib/codemirror/mode/nginx/nginx.min.js
|
|
134
|
+
inpanel/public/lib/codemirror/mode/perl/perl.min.js
|
|
135
|
+
inpanel/public/lib/codemirror/mode/php/php.min.js
|
|
136
|
+
inpanel/public/lib/codemirror/mode/properties/properties.min.js
|
|
137
|
+
inpanel/public/lib/codemirror/mode/python/python.min.js
|
|
138
|
+
inpanel/public/lib/codemirror/mode/ruby/ruby.min.js
|
|
139
|
+
inpanel/public/lib/codemirror/mode/rust/rust.min.js
|
|
140
|
+
inpanel/public/lib/codemirror/mode/shell/shell.min.js
|
|
141
|
+
inpanel/public/lib/codemirror/mode/sql/sql.min.js
|
|
142
|
+
inpanel/public/lib/codemirror/mode/toml/toml.min.js
|
|
143
|
+
inpanel/public/lib/codemirror/mode/xml/xml.min.js
|
|
144
|
+
inpanel/public/lib/codemirror/mode/yaml/yaml.min.js
|
|
119
145
|
inpanel/public/lib/jquery/jquery-1.12.4.min.js
|
|
120
146
|
inpanel/public/lib/md5/md5.js
|
|
121
147
|
inpanel/public/lib/md5/md5.min.js
|
|
122
148
|
inpanel/public/partials/ftp.html
|
|
123
|
-
inpanel/public/partials/log.html
|
|
124
149
|
inpanel/public/partials/login.html
|
|
125
150
|
inpanel/public/partials/logout.html
|
|
151
|
+
inpanel/public/partials/logs.html
|
|
126
152
|
inpanel/public/partials/main.html
|
|
127
153
|
inpanel/public/partials/secure.html
|
|
128
154
|
inpanel/public/partials/setting.html
|
|
@@ -1,40 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InPanel
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.8
|
|
4
4
|
Summary: InPanel - A Server Management Tool
|
|
5
5
|
Author-email: Jackson Dou <jksdou@qq.com>
|
|
6
6
|
Maintainer-email: Jackson Dou <jksdou@qq.com>
|
|
7
|
-
License: BSD
|
|
8
|
-
|
|
9
|
-
Copyright (c) 2017-2026, Jackson Dou
|
|
10
|
-
Copyright (c) 2012-2013, VPSMate development team
|
|
11
|
-
All rights reserved.
|
|
12
|
-
|
|
13
|
-
Redistribution and use in source and binary forms, with or without
|
|
14
|
-
modification, are permitted provided that the following conditions are met:
|
|
15
|
-
|
|
16
|
-
1. Redistributions of source code must retain the above copyright notice, this
|
|
17
|
-
list of conditions and the following disclaimer.
|
|
18
|
-
|
|
19
|
-
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
20
|
-
this list of conditions and the following disclaimer in the documentation
|
|
21
|
-
and/or other materials provided with the distribution.
|
|
22
|
-
|
|
23
|
-
3. Neither the name of the copyright holder nor the names of its
|
|
24
|
-
contributors may be used to endorse or promote products derived from
|
|
25
|
-
this software without specific prior written permission.
|
|
26
|
-
|
|
27
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
28
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
29
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
30
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
31
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
32
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
33
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
34
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
35
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
|
-
|
|
7
|
+
License: BSD-3-Clause
|
|
38
8
|
Project-URL: Homepage, https://inpanel.org
|
|
39
9
|
Project-URL: Repository, https://github.com/inpanel/inpanel
|
|
40
10
|
Project-URL: Documentation, https://inpanel.org
|
|
@@ -44,7 +14,6 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
44
14
|
Classifier: Environment :: Web Environment
|
|
45
15
|
Classifier: Framework :: AsyncIO
|
|
46
16
|
Classifier: Intended Audience :: System Administrators
|
|
47
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
48
17
|
Classifier: Operating System :: POSIX :: Linux
|
|
49
18
|
Classifier: Programming Language :: Python :: 3
|
|
50
19
|
Classifier: Programming Language :: Python :: 3.6
|
|
@@ -370,18 +339,65 @@ inpanel run
|
|
|
370
339
|
|
|
371
340
|
### 构建安装包
|
|
372
341
|
|
|
342
|
+
使用项目提供的构建脚本构建各类安装包:
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# 进入项目目录
|
|
346
|
+
cd inpanel
|
|
347
|
+
|
|
348
|
+
# 构建 pip 包(wheel + sdist)
|
|
349
|
+
bash scripts/build_pip.sh
|
|
350
|
+
|
|
351
|
+
# 构建并上传 pip 包到 PyPI
|
|
352
|
+
bash scripts/build_pip.sh upload
|
|
353
|
+
|
|
354
|
+
# 一键构建 RPM 和 DEB 包
|
|
355
|
+
bash scripts/build_package.sh
|
|
356
|
+
|
|
357
|
+
# 或单独构建
|
|
358
|
+
bash scripts/build_rpm.sh # 仅构建 RPM
|
|
359
|
+
bash scripts/build_deb.sh # 仅构建 DEB
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
#### 构建依赖
|
|
363
|
+
|
|
364
|
+
构建脚本依赖以下工具,请根据系统安装:
|
|
365
|
+
|
|
366
|
+
| 依赖 | 用途 | 安装命令 |
|
|
367
|
+
|------|------|----------|
|
|
368
|
+
| `python3` | Python 运行环境 | 系统通常已自带 |
|
|
369
|
+
| `python3-build` | 构建 Python 包(wheel/sdist) | `pip install build` |
|
|
370
|
+
| `twine` | 上传 pip 包到 PyPI | `pip install twine` |
|
|
371
|
+
| `rpmbuild` | RPM 包构建(CentOS/RHEL) | `yum install rpm-build` |
|
|
372
|
+
| `dpkg-buildpackage` | DEB 包构建(Debian/Ubuntu) | `apt-get install dpkg-dev` |
|
|
373
|
+
| `debhelper` | DEB 包构建辅助工具 | `apt-get install debhelper` |
|
|
374
|
+
| `python3-all` | DEB 包 Python 兼容性 | `apt-get install python3-all` |
|
|
375
|
+
| `python3-setuptools` | DEB 包 setuptools 支持 | `apt-get install python3-setuptools` |
|
|
376
|
+
|
|
377
|
+
#### 完整依赖安装示例
|
|
378
|
+
|
|
379
|
+
**所有平台**(构建 pip 包 / 上传 PyPI):
|
|
380
|
+
|
|
373
381
|
```bash
|
|
374
|
-
|
|
382
|
+
pip install build twine
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**Debian / Ubuntu**(构建 DEB 包):
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
sudo apt-get install -y debhelper python3-all python3-setuptools dpkg-dev
|
|
375
389
|
pip install build
|
|
376
|
-
|
|
390
|
+
```
|
|
377
391
|
|
|
378
|
-
|
|
379
|
-
rpmbuild -bb rpmbuild.spec
|
|
392
|
+
**CentOS / RHEL**(构建 RPM 包):
|
|
380
393
|
|
|
381
|
-
|
|
382
|
-
|
|
394
|
+
```bash
|
|
395
|
+
sudo yum install -y rpm-build
|
|
396
|
+
pip install build
|
|
383
397
|
```
|
|
384
398
|
|
|
399
|
+
构建产物默认输出到项目目录下的 `packages/` 目录。
|
|
400
|
+
|
|
385
401
|
## 账号和密码
|
|
386
402
|
|
|
387
403
|
默认用户名:`admin`
|
|
@@ -302,18 +302,65 @@ inpanel run
|
|
|
302
302
|
|
|
303
303
|
### 构建安装包
|
|
304
304
|
|
|
305
|
+
使用项目提供的构建脚本构建各类安装包:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# 进入项目目录
|
|
309
|
+
cd inpanel
|
|
310
|
+
|
|
311
|
+
# 构建 pip 包(wheel + sdist)
|
|
312
|
+
bash scripts/build_pip.sh
|
|
313
|
+
|
|
314
|
+
# 构建并上传 pip 包到 PyPI
|
|
315
|
+
bash scripts/build_pip.sh upload
|
|
316
|
+
|
|
317
|
+
# 一键构建 RPM 和 DEB 包
|
|
318
|
+
bash scripts/build_package.sh
|
|
319
|
+
|
|
320
|
+
# 或单独构建
|
|
321
|
+
bash scripts/build_rpm.sh # 仅构建 RPM
|
|
322
|
+
bash scripts/build_deb.sh # 仅构建 DEB
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
#### 构建依赖
|
|
326
|
+
|
|
327
|
+
构建脚本依赖以下工具,请根据系统安装:
|
|
328
|
+
|
|
329
|
+
| 依赖 | 用途 | 安装命令 |
|
|
330
|
+
|------|------|----------|
|
|
331
|
+
| `python3` | Python 运行环境 | 系统通常已自带 |
|
|
332
|
+
| `python3-build` | 构建 Python 包(wheel/sdist) | `pip install build` |
|
|
333
|
+
| `twine` | 上传 pip 包到 PyPI | `pip install twine` |
|
|
334
|
+
| `rpmbuild` | RPM 包构建(CentOS/RHEL) | `yum install rpm-build` |
|
|
335
|
+
| `dpkg-buildpackage` | DEB 包构建(Debian/Ubuntu) | `apt-get install dpkg-dev` |
|
|
336
|
+
| `debhelper` | DEB 包构建辅助工具 | `apt-get install debhelper` |
|
|
337
|
+
| `python3-all` | DEB 包 Python 兼容性 | `apt-get install python3-all` |
|
|
338
|
+
| `python3-setuptools` | DEB 包 setuptools 支持 | `apt-get install python3-setuptools` |
|
|
339
|
+
|
|
340
|
+
#### 完整依赖安装示例
|
|
341
|
+
|
|
342
|
+
**所有平台**(构建 pip 包 / 上传 PyPI):
|
|
343
|
+
|
|
305
344
|
```bash
|
|
306
|
-
|
|
345
|
+
pip install build twine
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**Debian / Ubuntu**(构建 DEB 包):
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
sudo apt-get install -y debhelper python3-all python3-setuptools dpkg-dev
|
|
307
352
|
pip install build
|
|
308
|
-
|
|
353
|
+
```
|
|
309
354
|
|
|
310
|
-
|
|
311
|
-
rpmbuild -bb rpmbuild.spec
|
|
355
|
+
**CentOS / RHEL**(构建 RPM 包):
|
|
312
356
|
|
|
313
|
-
|
|
314
|
-
|
|
357
|
+
```bash
|
|
358
|
+
sudo yum install -y rpm-build
|
|
359
|
+
pip install build
|
|
315
360
|
```
|
|
316
361
|
|
|
362
|
+
构建产物默认输出到项目目录下的 `packages/` 目录。
|
|
363
|
+
|
|
317
364
|
## 账号和密码
|
|
318
365
|
|
|
319
366
|
默认用户名:`admin`
|
|
@@ -125,7 +125,7 @@ def cmd_start():
|
|
|
125
125
|
force_https = config.getboolean('server', 'forcehttps')
|
|
126
126
|
print(f'InPanel: running on: http{"s" if force_https else ""}://*:{server_port}')
|
|
127
127
|
else:
|
|
128
|
-
print('InPanel: failed to start, check log file:
|
|
128
|
+
print(f'InPanel: failed to start, check log file: {logfile}')
|
|
129
129
|
sys.exit(1)
|
|
130
130
|
return
|
|
131
131
|
except OSError as e:
|
|
@@ -384,6 +384,7 @@ def run_server():
|
|
|
384
384
|
(r'/api/service/(.+?)(?:/(.+))?', web.ServiceHandler),
|
|
385
385
|
(r'/api/firewall/(.+)', web.FirewallHandler),
|
|
386
386
|
(r'/api/setting/(.+)', web.SettingHandler),
|
|
387
|
+
(r'/api/logs/(.+)', web.LogsHandler),
|
|
387
388
|
(r'/api/operation/(.+)', web.OperationHandler),
|
|
388
389
|
(r'/api/task/(.+)', web.TaskHandler),
|
|
389
390
|
(r'/api/sitepackage/(.+)', web.SitePackageHandler),
|
|
@@ -40,8 +40,8 @@ __author__ = 'Jackson Dou'
|
|
|
40
40
|
__license__ = 'BSD'
|
|
41
41
|
|
|
42
42
|
app_name = 'InPanel'
|
|
43
|
-
releasetime = '2026-07-
|
|
44
|
-
DEBUG =
|
|
43
|
+
releasetime = '2026-07-28'
|
|
44
|
+
DEBUG = False
|
|
45
45
|
COMMENTFLAG = '#INPANEL#'
|
|
46
46
|
GENBY = 'AUTOMATICALLY GENERATED BY INPANEL'
|
|
47
47
|
|
|
@@ -62,14 +62,15 @@ app_api = {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
execfile = '/usr/bin/inpanel'
|
|
65
|
-
data_path = '/var/lib/inpanel/'
|
|
66
65
|
config_path = '/etc/inpanel/'
|
|
66
|
+
data_path = '/var/lib/inpanel/'
|
|
67
|
+
logging_path = '/var/log/inpanel/'
|
|
67
68
|
config_file = '/etc/inpanel/config.ini'
|
|
68
69
|
lastfile_path = '/etc/inpanel/lastfile.ini'
|
|
69
70
|
bookmarks_path = '/etc/inpanel/bookmarks.ini'
|
|
70
71
|
upgrade_path = '/etc/inpanel/upgrade.ini'
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
files_log = '/var/log/inpanel/files.log'
|
|
73
|
+
filespath_log = '/var/log/inpanel/filespath.log'
|
|
73
74
|
logfile = '/var/log/inpanel/main.log'
|
|
74
75
|
logerror = '/var/log/inpanel/error.log'
|
|
75
76
|
pidfile = '/var/run/inpanel.pid'
|
|
@@ -83,7 +84,11 @@ if hasattr(sys, 'frozen') and hasattr(sys, '_MEIPASS'):
|
|
|
83
84
|
root_path = sys._MEIPASS
|
|
84
85
|
else:
|
|
85
86
|
package_dir = Path(__file__).parent.resolve()
|
|
87
|
+
is_develop_mode = False
|
|
86
88
|
if package_dir.parts[-2] == 'site-packages' or 'dist-packages' in str(package_dir):
|
|
89
|
+
if Path(__file__).is_symlink():
|
|
90
|
+
is_develop_mode = True
|
|
91
|
+
if not is_develop_mode and (package_dir.parts[-2] == 'site-packages' or 'dist-packages' in str(package_dir)):
|
|
87
92
|
run_type = 'system'
|
|
88
93
|
root_path = str(package_dir)
|
|
89
94
|
pkg_str = str(package_dir)
|
|
@@ -101,12 +106,13 @@ else:
|
|
|
101
106
|
execfile = str(Path(root_path) / 'app.py')
|
|
102
107
|
data_path = str(Path(root_path) / 'data')
|
|
103
108
|
config_path = str(Path(root_path) / 'data')
|
|
109
|
+
logging_path = str(Path(root_path) / 'data')
|
|
104
110
|
config_file = str(Path(root_path) / 'data' / 'config.ini')
|
|
105
111
|
lastfile_path = str(Path(root_path) / 'data' / 'lastfile.ini')
|
|
106
112
|
bookmarks_path = str(Path(root_path) / 'data' / 'bookmarks.ini')
|
|
107
113
|
upgrade_path = str(Path(root_path) / 'data' / 'upgrade.ini')
|
|
108
|
-
|
|
109
|
-
|
|
114
|
+
files_log = str(Path(root_path) / 'data' / 'files.log')
|
|
115
|
+
filespath_log = str(Path(root_path) / 'data' / 'filespath.log')
|
|
110
116
|
logfile = str(Path(root_path) / 'data' / 'main.log')
|
|
111
117
|
logerror = str(Path(root_path) / 'data' / 'error.log')
|
|
112
118
|
pidfile = str(Path(root_path) / 'data' / 'inpanel.pid')
|
|
@@ -199,7 +205,7 @@ __all__ = [
|
|
|
199
205
|
'releasetime', 'version_info', 'server_info', 'os_name', 'os_title',
|
|
200
206
|
'os_version', 'os_versint', 'os_platform', 'kernel_name', 'kernel_release',
|
|
201
207
|
'kernel_version', 'hostname', 'machine', 'lastfile_path', 'bookmarks_path', 'upgrade_path',
|
|
202
|
-
'
|
|
208
|
+
'files_log', 'filespath_log', 'logfile', 'logerror', 'pidfile', 'processor'
|
|
203
209
|
]
|
|
204
210
|
|
|
205
211
|
if __name__ == '__main__':
|
|
@@ -119,7 +119,7 @@ Examples:
|
|
|
119
119
|
key = md5(randstr().encode('utf-8')).hexdigest()
|
|
120
120
|
md5_password = md5(value.encode('utf-8')).hexdigest()
|
|
121
121
|
pwd = hmac_new(key.encode('utf-8'), md5_password.encode('utf-8'), md5).hexdigest()
|
|
122
|
-
value = '
|
|
122
|
+
value = f'{pwd}:{key}'
|
|
123
123
|
logger.info(f'Password hash generated, key length: {len(key)}, hash length: {len(pwd)}')
|
|
124
124
|
|
|
125
125
|
result = config.set(section, option, value)
|
|
@@ -21,7 +21,7 @@ class FileLock(object):
|
|
|
21
21
|
the maximum timeout and the delay between each attempt to lock.
|
|
22
22
|
"""
|
|
23
23
|
self.is_locked = False
|
|
24
|
-
self.lockfile = str(Path.cwd() / ("
|
|
24
|
+
self.lockfile = str(Path.cwd() / (f"{file_name}.lock"))
|
|
25
25
|
self.file_name = file_name
|
|
26
26
|
self.timeout = timeout
|
|
27
27
|
self.delay = delay
|
|
@@ -186,8 +186,8 @@ class pxssh (spawn):
|
|
|
186
186
|
if self.force_password:
|
|
187
187
|
ssh_options = ssh_options + ' ' + self.SSH_OPTS
|
|
188
188
|
if port is not None:
|
|
189
|
-
ssh_options = ssh_options + ' -p
|
|
190
|
-
cmd = "ssh
|
|
189
|
+
ssh_options = ssh_options + f' -p {port!s}'
|
|
190
|
+
cmd = f"ssh {ssh_options} -l {username} {server}"
|
|
191
191
|
|
|
192
192
|
# This does not distinguish between a remote server 'password' prompt
|
|
193
193
|
# and a local ssh 'passphrase' prompt (for unlocking a private key).
|
|
@@ -57,7 +57,7 @@ class ACME():
|
|
|
57
57
|
proc = Popen(cmd_list, stdin=stdin, stdout=PIPE, stderr=PIPE)
|
|
58
58
|
out, err = proc.communicate(cmd_input)
|
|
59
59
|
if proc.returncode != 0:
|
|
60
|
-
raise IOError("{
|
|
60
|
+
raise IOError(f"{err_msg}\n{err}")
|
|
61
61
|
return out
|
|
62
62
|
|
|
63
63
|
def _b64(self, b):
|
|
@@ -85,8 +85,7 @@ class ACME():
|
|
|
85
85
|
if depth < 100 and code == 400 and res_data['type'] == 'urn:ietf:params:acme:error:badNonce':
|
|
86
86
|
raise IndexError(res_data) # 允许对无效 nonce 重试 100 次
|
|
87
87
|
if code not in [200, 201, 204]:
|
|
88
|
-
raise ValueError("{
|
|
89
|
-
err_msg, url, data, code, res_data))
|
|
88
|
+
raise ValueError(f"{err_msg}:\nUrl: {url}\nData: {data}\nResponse Code: {code}\nResponse: {res_data}")
|
|
90
89
|
return res_data, code, headers
|
|
91
90
|
|
|
92
91
|
def _s_request(self, url, payload, err_msg, depth=0):
|
|
@@ -96,7 +95,7 @@ class ACME():
|
|
|
96
95
|
protected = {'url': url, 'alg': self.alg, "nonce": new_nonce}
|
|
97
96
|
protected.update({"jwk": self.jwk} if self.acct_headers is None else {"kid": self.acct_headers['Location']})
|
|
98
97
|
protected64 = self._b64(dumps(protected).encode('utf8'))
|
|
99
|
-
protected_input = "{
|
|
98
|
+
protected_input = f"{protected64}.{payload64}".encode('utf8')
|
|
100
99
|
cmd = ['openssl', 'dgst', '-sha256', '-sign', self.account_key]
|
|
101
100
|
out = self._cmd(cmd, stdin=PIPE, cmd_input=protected_input, err_msg='OpenSSL Error')
|
|
102
101
|
data = dumps({
|
|
@@ -146,8 +145,8 @@ class ACME():
|
|
|
146
145
|
out = self._cmd(cmd, err_msg='openssl error')
|
|
147
146
|
pub_pattern = r"modulus:\n\s+00:([a-f0-9\:\s]+?)\npublicExponent: ([0-9]+)"
|
|
148
147
|
pub_hex, pub_exp = re.search(pub_pattern, out.decode('utf8'), re.MULTILINE | re.DOTALL).groups()
|
|
149
|
-
pub_exp = "{
|
|
150
|
-
pub_exp = "0{
|
|
148
|
+
pub_exp = f"{int(pub_exp):x}"
|
|
149
|
+
pub_exp = f"0{pub_exp}" if len(pub_exp) % 2 else pub_exp
|
|
151
150
|
self.jwk = {
|
|
152
151
|
'e': self._b64(unhexlify(pub_exp.encode('utf-8'))),
|
|
153
152
|
'kty': 'RSA',
|
|
@@ -182,7 +181,7 @@ class ACME():
|
|
|
182
181
|
# 查找域名
|
|
183
182
|
print('Domains CSR parsing...')
|
|
184
183
|
cmd = ['openssl', 'req', '-in', self.csr, '-noout', '-text']
|
|
185
|
-
out = self._cmd(cmd, err_msg="Error loading {
|
|
184
|
+
out = self._cmd(cmd, err_msg=f"Error loading {self.csr}")
|
|
186
185
|
domains = set([])
|
|
187
186
|
common_name = re.search(r"Subject:.*? CN\s?=\s?([^\s,;/]+)", out.decode('utf8'))
|
|
188
187
|
if common_name is not None:
|
|
@@ -193,7 +192,7 @@ class ACME():
|
|
|
193
192
|
for san in subject_alt_names.group(1).split(", "):
|
|
194
193
|
if san.startswith("DNS:"):
|
|
195
194
|
domains.add(san[4:])
|
|
196
|
-
print("Found domains: {
|
|
195
|
+
print(f"Found domains: {', '.join(domains)}")
|
|
197
196
|
# print('domains', domains)
|
|
198
197
|
if order == True:
|
|
199
198
|
self.create_new_order(domains)
|
|
@@ -213,32 +212,31 @@ class ACME():
|
|
|
213
212
|
for auth_url in order['authorizations']:
|
|
214
213
|
authorization, _, _ = self._request(auth_url, err_msg='Error getting challenges')
|
|
215
214
|
domain = authorization['identifier']['value']
|
|
216
|
-
print("Domain {
|
|
215
|
+
print(f"Domain {domain} Verifying...")
|
|
217
216
|
|
|
218
217
|
# 找到 http-01 挑战并写入挑战文件
|
|
219
218
|
challenge = [c for c in authorization['challenges'] if c['type'] == "http-01"][0]
|
|
220
219
|
token = re.sub(r"[^A-Za-z0-9_\-]", "_", challenge['token'])
|
|
221
|
-
key_auth = "{
|
|
220
|
+
key_auth = f"{token}.{self.thumbprint}"
|
|
222
221
|
wellknown_path = str(Path(self.acme_check_dir) / token)
|
|
223
222
|
with open(wellknown_path, 'w', encoding='utf-8') as f:
|
|
224
223
|
f.write(key_auth)
|
|
225
224
|
|
|
226
225
|
# 检查 wellknown 文件是否在指定位置
|
|
227
226
|
try:
|
|
228
|
-
wellknown_url = "http://{
|
|
227
|
+
wellknown_url = f"http://{domain}/.well-known/acme-challenge/{token}"
|
|
229
228
|
assert(disable_check or self._request(wellknown_url)[0] == key_auth)
|
|
230
229
|
except (AssertionError, ValueError) as e:
|
|
231
230
|
Path(wellknown_path).unlink()
|
|
232
|
-
raise ValueError("Wrote file to {
|
|
233
|
-
wellknown_path, wellknown_url, e))
|
|
231
|
+
raise ValueError(f"Wrote file to {wellknown_path}, but couldn't download {wellknown_url}: {e}")
|
|
234
232
|
|
|
235
233
|
# 告知挑战已完成
|
|
236
234
|
self._s_request(
|
|
237
|
-
challenge['url'], {}, "Error submitting challenges: {
|
|
238
|
-
authorization = self._poll_until_not(auth_url, ["pending"], "Error checking challenge status for {
|
|
235
|
+
challenge['url'], {}, f"Error submitting challenges: {domain}")
|
|
236
|
+
authorization = self._poll_until_not(auth_url, ["pending"], f"Error checking challenge status for {domain}")
|
|
239
237
|
if authorization['status'] != "valid":
|
|
240
|
-
raise ValueError("Challenge did not pass for {
|
|
241
|
-
print("Domain {
|
|
238
|
+
raise ValueError(f"Challenge did not pass for {domain}: {authorization}")
|
|
239
|
+
print(f"Domain {domain} verified!")
|
|
242
240
|
|
|
243
241
|
# 使用 CSR 完成订单
|
|
244
242
|
print('Certificate signing...')
|
|
@@ -247,7 +245,7 @@ class ACME():
|
|
|
247
245
|
# 轮询订单以监控其完成状态
|
|
248
246
|
order = self._poll_until_not(order_headers['Location'], ['pending', 'processing'], 'Error checking order status')
|
|
249
247
|
if order['status'] != 'valid':
|
|
250
|
-
raise ValueError("Order failed: {
|
|
248
|
+
raise ValueError(f"Order failed: {order}")
|
|
251
249
|
self.certificate = order['certificate']
|
|
252
250
|
|
|
253
251
|
def get_certificate(self, certificate=None):
|
|
@@ -32,8 +32,7 @@ class ECS(object):
|
|
|
32
32
|
def _sign(self, params):
|
|
33
33
|
paramstrings = []
|
|
34
34
|
for k, v in sorted(params.items()):
|
|
35
|
-
paramstrings.append('
|
|
36
|
-
(ECS._urlencode(k), ECS._urlencode(v)))
|
|
35
|
+
paramstrings.append(f'{ECS._urlencode(k)}={ECS._urlencode(v)}')
|
|
37
36
|
datastrings = [
|
|
38
37
|
ECS._urlencode('GET'),
|
|
39
38
|
ECS._urlencode('/'),
|
|
@@ -240,7 +239,7 @@ if __name__ == '__main__':
|
|
|
240
239
|
print()
|
|
241
240
|
|
|
242
241
|
for region in regions['Regions']:
|
|
243
|
-
print(
|
|
242
|
+
print(f"## Zones in {region['RegionCode']}\n")
|
|
244
243
|
zones = ecs.DescribeZones(region['RegionCode'])
|
|
245
244
|
if not zones[0]:
|
|
246
245
|
pp.pprint(zones)
|
|
@@ -250,7 +249,7 @@ if __name__ == '__main__':
|
|
|
250
249
|
print()
|
|
251
250
|
|
|
252
251
|
for zone in zones['Zones']:
|
|
253
|
-
print(
|
|
252
|
+
print(f"## Instances in {zone['ZoneCode']}\n")
|
|
254
253
|
instances = ecs.DescribeInstanceStatus(
|
|
255
254
|
region['RegionCode'], zone['ZoneCode'])[1]
|
|
256
255
|
pp.pprint(instances)
|