vault backup: 2025-07-11 06:37:21

This commit is contained in:
CrazyJasonwell committed 2025-07-11 06:37:21 +08:00
1 parent 791d0ff1db
commit c5c6d21816
3 files changed
+220 -28

No files matched your search

+22 -22
View File
@@ -2377,28 +2377,6 @@
"image": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6R9F6X8Eb8tVejfJCiakD29MChuQFDuov2qvEjw72cxfg/0", "image": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6R9F6X8Eb8tVejfJCiakD29MChuQFDuov2qvEjw72cxfg/0",
"description": "", "description": "",
"items": [ "items": [
{
"title": "IntelliSSH:AI驱动的远程服务器管理软件",
"description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"946555259\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"946555259\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509587\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"df4248eea569923f43f773ef649506dd\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uiLine truncated
"content": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"946555259\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"946555259\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509587\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"df4248eea569923f43f773ef649506dd\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uin = Line truncated
"category": "",
"link": "https://mp.weixin.qq.com/s/OQujCpu9iGz2VLn3EiwbGg",
"creator": "",
"pubDate": "2025-07-09T11:01:21.000Z",
"enclosure": "",
"enclosureType": "",
"image": "",
"id": "OQujCpu9iGz2VLn3EiwbGg",
"language": "",
"folder": "IT技术",
"feed": "各种折腾",
"read": false,
"favorite": false,
"created": false,
"tags": [],
"hash": "290eeedc7d45ee8faa23fab84d6ac371",
"highlights": []
},
{ {
"title": "自托管的云文件存储解决方案Phylum", "title": "自托管的云文件存储解决方案Phylum",
"description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"1626685441\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"1626685441\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"1626685441\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509537\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"ac26447ad37a4bd1e3b05159a69bd74d\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"1626685441\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n thiLine truncated "description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"1626685441\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"1626685441\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"1626685441\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509537\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"ac26447ad37a4bd1e3b05159a69bd74d\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"1626685441\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n thiLine truncated
@@ -2421,6 +2399,28 @@
"hash": "37e8086261b53a64d0e3494743fc98a7", "hash": "37e8086261b53a64d0e3494743fc98a7",
"highlights": [] "highlights": []
}, },
{
"title": "IntelliSSH:AI驱动的远程服务器管理软件",
"description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"946555259\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"946555259\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509587\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"df4248eea569923f43f773ef649506dd\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uiLine truncated
"content": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"946555259\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"946555259\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509587\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"df4248eea569923f43f773ef649506dd\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"946555259\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uin = Line truncated
"category": "",
"link": "https://mp.weixin.qq.com/s/OQujCpu9iGz2VLn3EiwbGg",
"creator": "",
"pubDate": "2025-07-09T11:01:21.000Z",
"enclosure": "",
"enclosureType": "",
"image": "",
"id": "OQujCpu9iGz2VLn3EiwbGg",
"language": "",
"folder": "IT技术",
"feed": "各种折腾",
"read": false,
"favorite": false,
"created": false,
"tags": [],
"hash": "290eeedc7d45ee8faa23fab84d6ac371",
"highlights": []
},
{ {
"title": "开源服务运行监控工具Lunalytics", "title": "开源服务运行监控工具Lunalytics",
"description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"80449066\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"80449066\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"80449066\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509514\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"e7ec6a4073404fe8edfc53f3fe950552\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"80449066\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uin = Line truncated "description": "<!DOCTYPE html>\n<html class=\"\n\">\n <head>\n <meta name=\"wechat-enable-text-zoom-em\" content=\"true\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"color-scheme\" content=\"light dark\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0,viewport-fit=cover\">\n<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico\" reportloaderror>\n<link rel=\"mask-icon\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/MjliNWVm.svg\" color=\"#4C4C4C\" reportloaderror>\n<link rel=\"apple-touch-icon-precomposed\" href=\"//res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png\" reportloaderror>\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n<meta name=\"format-detection\" content=\"telephone=no\">\n<meta name=\"referrer\" content=\"origin-when-cross-origin\">\n<meta name=\"referrer\" content=\"strict-origin-when-cross-origin\">\n<script nonce=\"80449066\" reportloaderror>try{document.getElementsByTagName('html').item(0).style.webkitTextSizeAdjust=JSON.parse(window.__wxWebEnv.getEnv()).fontScale+'%'}catch(e){}</script>\n<script type=\"text/javascript\" nonce=\"80449066\" reportloaderror>\n window.logs = { pagetime: {} };\n window.logs.pagetime['html_begin'] = (+new Date());\n window.LANG = \"en\";\n</script>\n\n \n<script nonce=\"80449066\" reportloaderror>\nwindow.__moon_initcallback = function () {\n if (!!window.__initCatch) {\n window.__initCatch({\n idkey: 27611 + 2,\n startKey: 0,\n limit: 128,\n badjsId: 43,\n reportOpt: {\n uin: '',\n biz: \"MzI1NTQxMzc3MA==\" || \"\",\n mid: \"2247509514\" || \"\" || \"\",\n idx: \"1\" || \"\" || \"\",\n sn: \"e7ec6a4073404fe8edfc53f3fe950552\" || \"\" || \"\",\n },\n extInfo: {\n network_rate: 0.01, \n badjs_rate: 0.1\n }\n });\n }\n}\n</script>\n\n <script type=\"text/javascript\" nonce=\"80449066\" reportloaderror>\n \n \n var WX_BJ_REPORT = window.WX_BJ_REPORT || {};\n (function(_) {\n if (_.BadJs) {\n return;\n }\n \n var BADJS_WIN_ERR = 'BadjsWindowError';\n var extend = function(source, destination) {\n for (var property in destination) {\n source[property] = destination[property]\n }\n return source\n }\n \n _.BadJs = {\n uin: 0,\n mid: \"\",\n view: \"wap\",\n _cache: {},\n _info: {},\n _hookCallback: null,\n ignorePath: true,\n throw: function(e, extData) {\n this.onError(e, extData);\n throw e;\n },\n \n \n onError: function(e, extData) {\n try {\n \n if (e.BADJS_EXCUTED == true) {\n return;\n }\n e.BADJS_EXCUTED = true;\n var data = errToData(e);\n data.uin = this.uin;\n data.mid = this.mid;\n data.view = this.view;\n data.cmdb_module = 'mmbizwap';\n \n if (!!extData) {\n data = extend(data, extData);\n }\n \n if (data.cid) {\n data.key = \"[\" + data.cid + \"]:\" + data.key;\n }\n \n if (data._info) {\n if (Object.prototype.toString.call(data._info) == \"[object Object]\") {\n data.msg += \" || info:\" + JSON.stringify(data._info);\n } else if (Object.prototype.toString.call(data._info) == \"[object String]\") {\n data.msg += \" || info:\" + data._info;\n } else {\n data.msg += \" || info:\" + data._info;\n }\n }\n if (typeof this._hookCallback == \"function\") {\n if (this._hookCallback(data) === false) {\n return\n }\n }\n this._send(data);\n return _.BadJs;\n } catch (e) {\n console.error(e);\n }\n },\n winErr: function(event) {\n if (event.error && event.error.BADJS_EXCUTED) {\n return;\n }\n if (event.type === 'unhandledrejection') {\n if (event.reason instanceof Error) {\n var e = event.reason || {};\n _.BadJs.onError(createError(event.type, e.message || \"\", e.sourceURL || \"\", e.line || \"\", e.column || \"\", event.reason));\n } else {\n var message = typeof event.reason === 'object' ? JSON.stringify(event.reason) : event.reason;\n _.BadJs.onError(createError(event.type, message, \"\", \"\", \"\", event.reason));\n }\n }else{\n _.BadJs.onError(createError(BADJS_WIN_ERR, event.message, event.filename, event.lineno, event.colno, event.error));\n }\n },\n init: function(uin, mid, view) {\n this.uin = Line truncated
+6 -6
View File
@@ -13,12 +13,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01-工作日记/2025-07-10.md", "file": "10-WebClipper/AList的开源替代:OpenList.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "2025-07-10" "title": "AList的开源替代:OpenList"
} }
} }
] ]
@@ -175,13 +175,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "01-工作日记/2025-07-10.md", "file": "10-WebClipper/AList的开源替代:OpenList.md",
"followCursor": false, "followCursor": false,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "2025-07-10 的大纲" "title": "AList的开源替代:OpenList 的大纲"
} }
}, },
{ {
@@ -277,8 +277,9 @@
}, },
"active": "6142e96e86443372", "active": "6142e96e86443372",
"lastOpenFiles": [ "lastOpenFiles": [
"01-工作日记/2025-07-11.md",
"01-工作日记/2025-07-10.md", "01-工作日记/2025-07-10.md",
"10-WebClipper/AList的开源替代:OpenList.md",
"01-工作日记/2025-07-11.md",
"01-工作日记/2025-07-09.md", "01-工作日记/2025-07-09.md",
"00-待办计划/2025-07 待办事宜.md", "00-待办计划/2025-07 待办事宜.md",
"30-RSS/网文精选/从皮甲到铁铠:蒙古战马的防护升级与骑兵巅峰.md", "30-RSS/网文精选/从皮甲到铁铠:蒙古战马的防护升级与骑兵巅峰.md",
@@ -307,7 +308,6 @@
"screenshot.png", "screenshot.png",
"工作日记", "工作日记",
"08-Inbox/99-黑曜石玩家指南/3-obsidian做课题/工作小结与周汇报.md", "08-Inbox/99-黑曜石玩家指南/3-obsidian做课题/工作小结与周汇报.md",
"08-Inbox/99-黑曜石玩家指南/1-obsidian入门/obsidian撰写草稿.md",
"30-RSS/RSS阅读", "30-RSS/RSS阅读",
"08-Inbox/assets/68691ee74ca1b.png", "08-Inbox/assets/68691ee74ca1b.png",
"08-Inbox/assets/yy88496nfr.png", "08-Inbox/assets/yy88496nfr.png",
@@ -0,0 +1,192 @@
前一阵 `Alist` 的商业化事件闹的挺大,尽管商业化在一定程度上是为了维持项目的长期发展,但过程还是引发了广泛的争议和担忧。主要是原开发者在未充分告知的情况下出售了项目,剥夺了社区成员的知情权和选择权。同时也没有明确说明商业化版本与开源版本之间的区别,没有给存量用户足够的时间来迁移,严重违背了开源社区的核心价值观:信任和透明。
作为普通用户,我们更关心的是 `Alist` 的开源替代,目前看来,最可靠的继任者可能就是 `OpenList`
**什么是 OpenList ?**
> `OpenList` 是一个支持多存储的文件列表程序,使用 `Gin` 框架和 `Solidjs` 库,基于 `AList` 项目 `fork` 开发,是一个更可信、可持续的 `AList` 开源替代方案。
目前 `OpenList` 已经发布了 `4.0` 正式版,但依然存在一些已知问题,不过大部分功能已可稳定使用,具体迁移进度可在 OpenList 迁移工作总结 中查看。
在群晖上以 Docker 方式安装。
在注册表中搜索 `openlist` ,选择第一个 `openlistteam/openlist`,版本选择 `latest`。
> 本文写作时, `latest` 版本对应为  `v4.0.1`;
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicsMdyzkoVZdm8BuVHpRfHZvSR5trp6OUFAZzoNv21K5ibiby4icazaSMSA/640?wx_fmt=png&from=appmsg&watermark=1)
卷
-
在 `docker` 文件夹中,创建一个新文件夹 `openlist`,并在其中建两个子文件夹 `data` 和 `share`
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicQZSicnaNapqiba9eiavJUSCsIHEQnevDYUXbaOxicPqVr60Viciaia8wcDicNg/640?wx_fmt=png&from=appmsg&watermark=1)
|
文件夹
|
装载路径
|
说明
|
| --- | --- | --- |
| `docker/openlist/data` | `/opt/openlist/data` |
存放设置等
|
| `docker/openlist/share` | `/opt/openlist/share` |
用作本地存储
|
如果你不打算用群晖的本地存储,可以只映射 `data` 卷,用于存放设置文件和数据库
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicXmdgYSKEliawpzicIXUg1vZyGf1O4NibPatoCtJYSI23icc1ox7OW7xyJw/640?wx_fmt=png&from=appmsg&watermark=1)
如果你打算启用群晖的本地存储,需要先映射才能更方便的从容器中使用,但是考虑到容器内外用户的差异,建议映射空的文件夹而不是已经有文件的,避免出现权限问题
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicLzxo8nVvd0O587DPxGFnswWnUG3jib5OKZ0SjjduG8pXicKJ0qPekficg/640?wx_fmt=png&from=appmsg&watermark=1)
端口
--
本地端口不冲突就行,不确定的话可以用命令查一下
```
`# 查看端口占用
netstat -tunlp | grep 端口号
`
```
|
本地端口
|
容器端口
|
| --- | --- |
| `5244` | `5244` |
默认暴露了两个端口,其中
* `5244` 端口是 `http` 协议;
* `5245` 端口是  `https` 协议;
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicia0ibtcro6btlGoUticOyCz49WDHmDgXK0Lf9f0zO4lvrfMvgCPiaqLxeA/640?wx_fmt=png&from=appmsg&watermark=1)
用不上的可以删了
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicgxsWgyKEcwQmQSbcUOnwZBic4bFmTtbBUvdKleMztrgralOatKt1mlQ/640?wx_fmt=png&from=appmsg&watermark=1)
如果你熟悉命令行,可能用 `docker cli` 更快捷
```
`# 新建文件夹 openlist 和 子目录
mkdir -p /volume1/docker/openlist/{data,share}
# 进入 openlist 目录
cd /volume1/docker/openlist
# 运行容器
docker run -d \
   --name="openlist" \
   --restart=always \
   -p 5244:5244 \
   -v $(pwd)/data:/opt/openlist/data \
   -v $(pwd)/share:/opt/openlist/share \
   openlistteam/openlist:latest
`
```
也可以用 `docker-compose` 安装,将下面的内容保存为 `docker-compose.yml` 文件
```
`version:'3'
services:
openlist:
image:openlistteam/openlist:latest
container_name:openlist
restart:always
ports:
-5244:5244
volumes:
-./data:/opt/openlist/data
-./share:/opt/openlist/share
`
```
然后执行下面的命令
```
`# 新建文件夹 openlist 和 子目录
mkdir -p /volume1/docker/openlist/{data,share}
# 进入 openlist 目录
cd /volume1/docker/openlist
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
`
```
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicNCwQaicK50lJXtzKbRW66vDoljjFb3CtIp1Injug7yUHzz9f0aVh04A/640?wx_fmt=png&from=appmsg&watermark=1)
在浏览器中输入 `http://群晖IP:5244` 就能看到主界面
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicIsUP1tqQ8TpnYVrfcSYaPeJx4uvZIJbts0tm2RpL9XLe03Ux5XS6yg/640?wx_fmt=png&from=appmsg&watermark=1)
第一次运行,管理员 `admin` 的初始密码,可以在日志中找到
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJicv1b98W5lMoAmb15SGOW2SSnMRtQia3KLE227fclicmEia1hvRg9tQojbg/640?wx_fmt=png&from=appmsg&watermark=1)
用命令 `docker logs openlist` 也是可以的
![](https://mmbiz.qpic.cn/sz_mmbiz_png/Cibq2rFYLAaFftHfhdUnHzjBibrDlBAIJic5v4RYL4AUUUNm8VAmMwibU787Q0olTbqrQpB8aubUVmJBvTFKHnDYvg/640?wx_fmt=png&from=appmsg&watermark=1)
更多获取密码的方法或者软件使用可以参考老苏之前写的 `AList` 的相关部分
> 文章传送门: 支持本地挂载的网盘文件列表工具AList
>
> 杨浦老苏,公众号:各种折腾[支持本地挂载的网盘文件列表工具AList](http://mp.weixin.qq.com/s?__biz=MzI1NTQxMzc3MA==&mid=2247494995&idx=1&sn=bf22b8e5ef5ec93fbd5a1904a8d9e7b3&chksm=ea34f636dd437f20c818b727608b7abb59471e2d0a30aa509bd94ad58dbe42bd7bfc43f0058b#rd)
如果之前安装过 `Alist`,只要修改两处:
1. 镜像名从 `xhofe/alist` 改为 `openlistteam/openlist`
2. 映射的容器内的路径,由 `/opt/alist/` 改为 `/opt/openlist/`
运行之前,最好对原来的数据进行一次备份
运行之后,原来怎么使用,现在还是一样的
1\. OpenListTeam/OpenList: A new AList Fork to Anti Trust Crisis
地址:https://github.com/OpenListTeam/OpenList
2\. Home | OpenList 文档
地址:https://docs.oplist.org/zh/
3\. Home | OpenList Docs(临时)
地址:https://openlistteam.github.io/docs/
4\. 支持本地挂载的网盘文件列表工具AList | 老苏的blog
地址:https://laosu.tech/2022/12/09/支持本地挂载的网盘文件列表工具AList
@所有人:写文不易,如果你都看到了这里,请点个`赞`和`在看`,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。