[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-info":3,"card-styles":85,"article-blog-system-architecture":119,"neighbors-blog-system-architecture":141},{"background_url":4,"author_name":5,"github_url":6,"email":7,"site_name":8,"author_avatar":9,"author_tags":10,"social_links":11,"friend_links":12,"about_content":13,"protected_uploads":14,"favicon":15,"signature":16,"mobile_hover_disabled":17,"smtp_user":18,"notify_email":7,"smtp_host":19,"notify_enabled":17,"smtp_port":20,"smtp_pass_set":17,"visible_status_items":21,"status_custom_values":22,"status_card_sides":23,"show_friend_links":17,"about_page_title":24,"friend_links_title":25,"summary_title_color":26,"summary_content_color":27,"custom_font_url":28,"notice_active":29,"notice_content":30,"notice_title":31,"notice_expire":32,"notice_bg_color":33,"notice_btn_text":32,"notice_btn_url":32,"notice_click_count":34,"log_record_page":17,"log_query_location":17,"log_enabled":17,"log_max_records":35,"log_location_cache_threshold":36,"ip_location_apis":37,"log_blocked_ips":38,"log_watched_ips":39,"monitor_enabled":17,"monitor_interval":40,"monitor_memory_threshold":41,"monitor_disk_threshold":41,"footer_text":42,"pan_notify_enabled":17,"license_api_key":43,"mobile_tab_menus":44,"show_footer":17,"article_content_color":32,"article_inline_code_color":45,"protected_folders":46,"about_show_resume":17,"about_show_content1":29,"about_content_title":47,"about_page_content_title":48,"about_page_content":49,"captcha_params":50,"log_retention_days":51,"security_my_ips":52,"security_params":53,"font_backend_enabled":29,"moment_templates":54,"about_content_weight":55,"security_fail_counts":56,"monitor_cpu_threshold":51,"monitor_service_check":17,"monitor_alerts":57,"comment_throttle_params":58,"nav_menus":59,"comment_notify_enabled":17,"login_failure_notify_enabled":17,"new_device_notify_enabled":29,"alert_failure_threshold":60,"alert_cooldown_minutes":61,"pan_notify_min_size_mb":62,"comment_notify_pending_only":17,"font_frontend_enabled":17,"speedtest_enabled":17,"article_code_bg_color":63,"notice_poll":64,"notice_poll_gen":65,"notice_hide_minutes":66,"notice_delay_secs":67,"notice_show_scope":68,"speedtest_label":69,"dashboard_refresh_seconds":70,"dashboard_sections":71,"dashboard_prefs":72,"mail_last_error":32,"mail_rate_limit_per_minute":40,"notify_local_mute":73,"background_gallery":74,"notify_env_mode":75,"attack_alert_cooldown_minutes":76,"attack_alert_window_minutes":40,"attack_notify_enabled":17,"attack_alert_threshold":70,"article_title_size":32,"article_toc_size":32,"article_summary_size":32,"article_content_size":32,"code_collapse_px":32,"home_page_size":77,"author_tags_off":78,"articles_page_size":77,"author_tag_colors":79,"beian_icp":32,"banner_hide_minutes":80,"banner_mode":81,"banner_closable":29,"banner_scroll_speed":82,"beian_extra":32,"beian_gongan":32,"admin_sidebar_menus":83,"background_url_dark":84},"\u002Fuploads\u002Fbed\u002Fbackground\u002Fleaves.png","Leap","111","vue2@qq.com","跃点收容所|这里住了一只野猴子","data:image\u002Fpng;base64,UklGRswXAABXRUJQVlA4IMAXAABw\u002FQCdASpYAlgCPpFInUslq6+spVM5QfASCWdu\u002FADZos5pBcI8ObypUEg27P288x0\u002Flw18mvr3mW77yzOtvWym1EyDjkIGQZCAorHIQMgyEBRWOQgZBkICischAyDIQFFY5CBkGQgKKxyEDIMhAUVjkIGQZCAorHIQMgyEBRWOQgW5HTDvbqP2co2l63DIMhAUVjkIGQZCAorE+tTDsa7H7CYW\u002F\u002F5sqPlbt3UDQ4H6\u002FgpnuiWanwNfRAvHWKRZwE1+VFY5CBkGQgKKxyD\u002FC6OE7\u002FvCaQazeX\u002Fm8IaTbC0fjeELKrzq8N87yrQaqQaoq532T2wBAyDIQFFY5CBkGKOGIU+bn86NBiV0jyb6vVwwIKKjkjg\u002FzdtKNqE7EyxyEDIMhAUVjkGPzAfqQs07tVN5ExoTFAF+NyuZ7mM9+fm1MOyorHIQMgmAuFvHW4\u002FbiryQD\u002FhxFNbEqAL7UbLAVCgGeMqIdY3KrxcNvF\u002F3y4HEfo6\u002FFNT\u002FRY1MOyorHIQMd6OIx0wftiov9cCFGrPi8tA9Q31jicwmQa\u002FhbfbkYxYpsZYxwCCJvVcc24806eXBObJ5LREnFj9tq6braiEDIMhAUVjkGPP2lNE4frv5PHSdyxKT7MsS7sA+rNL7cbKlkPE3vYm61Jwm4ZaH1ZZU5gJ8re+vcgyEBRWOQcNRVlQoMTyhTQveG4fKYlQQqou4yv3r+q7OxqC3KLKuYFAWouIGG6CSf2y2hX0kPMsGQgKKxyDR4sBms4BvpSy08mtskgE4ThoHAwuhMxDL6s8oCEkwv7zkLt1nvoO3dlnIA2sZ9T4KxyEBOwp6x6u5VWjkp0J5G8SDqPwuhvUHCQiBcyRFFF7wIFlNI9yDiBB9+ufRivcO2R\u002FfDczWwSCXOBWph2VFY4GTiaCs9kiE\u002FHib\u002Fte9GTD2rfRVQnP\u002FKWZUeVK5x4RMVL7lcnzaJGaNmZ2p0IgaGgbeBZpG0zPwVjkIGQYcHw2zChQPgRrw4MokVa6HioUipR1rWgzyysakFdcLT\u002FnYooYAW6fq+QrZau6XjkIGQZB3kar+i63J1sEb95Bgk6eVlhMieK61tD4SWOKwQXEnuD88u5GujCZEYK+KbKEZ8mqF4DniU6+lVF8pBS8QP+pVCusg9bTnDIMhATHE\u002FH620zvswAHhRP55dUHmFliXbsepwkja7BmpjtwhvxvvEpjd2pJagIarsi2Jc\u002FLE7sHvLYG3A+iNUahvQVjkIGQYo7R5EQTo+qqyqZ8Kx\u002F8aOyIoD+uxVwxcjf5POOgTaC1LMH8s\u002FlEu0oFQDpCreLM0UL5wExmOboSfgSjcUJc\u002F3XyuHAxQFFY5CBjiVHiLFhvEdh\u002FP53xYvztfZ1Uj1tS\u002FE1kHSqpIyG4HyYfYlQr2RBmGuKn8FEIG9SsPG0YqDnKkdaQqzyS1DZjkIGQZCAmPsdfOZm19JVpbf\u002FHl8iAfS3O5\u002FF1CbpeEy4y4e1FgSxbjx\u002F1Ezw4umRNnh9ltVN6yQoTb+pNFI6cplQxjIdvOwj2lCInU+CschAx1SdFoexRiT9nuqxPrtrEG9igqDFLAeu3V4MS3+X358HmjsWlh0eZX+QJSJW+2QgKKxyEDIIHHJhOhHYZim5BYw\u002FVPtaLQRtlCb8ZqHWIVZircwug8LdTsnit\u002FQhEbir1uGQZCAorHJHSVYiCJ3b3vbWMpFHF5MTeX7G5yPu0XZ2X8UqCABkYjpoYkbhkGQgKKxyEC3cHsDjYwvBzhEFPdxGpjsgi80jtMHvlWkudvNfRIht3+AtvEs9efj0S9K1Q3f0P37MSo5xMX\u002F\u002F2uNXLU2YUgyEBRWOQgZBkICWH\u002F8saTZgcWp4gvFj8foBsmXnIIyo+DpoxyYvcIQsLA3BPQPZpWBOUM+rU+RZHJsSW7EdvCMgyEBRWOQgZBkICZemM7oODg3V+Fqr0Stxnn4yd9IKGOZSFVlSAwBIavoFb9Qv1QxFJ7zpsyA+kCtDh2sms8hAyDIQFFY5CBkGHCWBKkix9foKkSzH7R5FCdGOwjyiEW\u002FqQ\u002FlMXGPI2ps3DDaCjQvcvxIUgfcBFSrUw7KischAyDIOt6suP0o5QuAycj+xdSKETBlD8MKo5aH9Y2LT5Mua+fQ75bIEqPfhvOOu8VZpHUBYdGrngAeEMPwKM6eyW1MOyorHIQMgyDspnyqRykvd\u002FkcxBQsxVWgNmZhaux7M4p03nBH0E4jp+cF3ariW1cOsSj7rAYX2\u002FySqimq7OPHevICj4lzvofUf1FIQMgyEBRWOQgY4+SQ1CIXdYAK75jUIuq+v0xs3koWYHdk\u002FuqB59oxU\u002FXAAuO\u002FvbJepLcl79MfYQrLEMZ0n5kICischAyDIQEuljA1neO6vC7LpxWVBrebNu4qeGOaWyRiwLq7kx+QSPzjCDi+6H5Bm99OnafjVWph2VFY5CBkFlKSEnXsFpn0CbpO\u002FUYtojRl7dtDmVhTkJBBKo4xnOciP1fOZ62pU+ZBsL8peOuS9VjkIGQZCAorHIQMgjTo0yPPF4STLevY7joI+qNBuDthmplDgVXH4zH0y4V9IN6IX5CdKtTDsqKxyEDIMhAUV7nJ0hfA7QGmnsDgIZpKthgLH2yQoSCFw5zs4ALFcQHZqwpuZAeA+p8FY5CBkGQgKKxyEC3jP3b2+JIT2gGxnF3QiLkIGQZCAorHIQMgyEBRWOQgZBkICischAyDIQFFY5CBkGQgKKxyEDIMhASwAD+\u002F26YAAAAAAAAAAAAAABvtmztoRm3doU0FREFcxfGQDfyTZrARfDLIM56ckAuwAAAeRQzpXEORa1U8ZSbgIeSwwTSxnSPgwGxxzXe2bN8JxHfoDVf4Nn1KNVBLFpS5XvAPe6eT663F461uopKosssvGQ2itcpxZKI0eRTXXtsAMCbP0DpilTSgte3Z24WETY\u002F6sTDeXJ7pwjIEObU\u002FAHZzxoMQfbx2p3+r3gH1gJul0uDXGAB\u002FAAAOKBrhLqlNMNk0LW0w9KIVOUhwx\u002F9zbIDvh9eEG2XAr\u002FKoA0BqP9mSQFvTH4neiAy7\u002FipYZQ2Vlq5+yPI59+Kgnhl6MYvzoSmUGRCGAFWtf2w1BMnLmLB0YHr589IfpH88Ik3fX\u002FocoAGfoggAC717Zd1TMI9LeRpLmxYzl9\u002FRy90g65wCClUD86NJYxaPZX4qp6\u002Fn03zYGcy5YsvXX6eiT\u002F8eJiz9lf7pRNbjnovWQr8Pxjx602d1XPbHS0ABPTNcrXPqkQp9WYmxcurlYATz2n9brSZc9Zw0PwbgM4dfHpUOoeB3ZWT1clpdQrJE9QEnhyzb9RLJbKGSQVCUMTIXzcUebUj4L9MjUgJ+1AAJeN\u002Flb1IiHrmVxKy9xKrwup5rB13J+f9Q7I5X\u002FW698V3UxFnoLUsTnwNyYApx+ieLx5xBg+jTegpgRuvpiOaUAAi65qi\u002Fk9zKjoJe9NB\u002FsmaUGS4PW39fUlMb7XcI5N2ZfKsIeIB+BWVIwQfNeIctN6Psud1zbCnM8ZgFsftjpHGsowdBv3MB8d9OgUWF1ADAvhfYgyclEF6D2BZ+PH6ftHdSJSsjEAHq5ZQlmhhLM2WRj1SuQA16orz79eA6kav07C5oTteUje\u002FAk0GRSdy6WEsbF9we0Mr6lDZoX3S8x9jsdSxVqWLannqH6HmoX9DCUygn2TEVCZUyPqvlhboEp6c9QqGo+WeBl9xZsZYd09Hnsts7109ziooijy5uPhpTehw\u002FwFhyt03MA47ZW9p80VKiaDoNTmAECRXOx\u002FLCnVV\u002FqtxgfXfJ6S3j5v9v+mrY8AQwYxshWsqU8O79we8daDCUrnpKJ7igo6wuecnyNNSUW68bEqfltDF7pR9C0BPdlod3cdSYzFLPbknfB2P+KvojiC5mh6XKaK6Sb5qi0Y6hmLYwLBC1lLMQu0NArwuluyUgFeZE3jSmJz0eDl4KGKyjHmXeq\u002FI8DiQSr1Kl0t9dyQZxIANfoNKkBFsAAWIbLODYTlWXTZeBsNAc91rBpx\u002F4GoW2+aCKhNjeFmrVLx8cOE5V1tLBTzrIsHwqcxixMShrfW4iPsAtOpx8\u002FbYVCwvg\u002FAZTvQz\u002FqaQDJK8SAE6QYtXUYUQijph81WKinKOmjacyF9gdXXGJTPbE7L+Jvm6c+7qz+GA9nqaRAAHM6pVyBsaNDHVASJFFKAUmJGS\u002F\u002F04zDDNTmeE0Z9Ymy+X21Hqj85ihlCIVaP708ytZbvxHH9Kp6MHiz7oExafZB90vQPVP+i5xiTiDQaVxjQnq3wPyMof2XxxZAj3FpK927R2ZC6PpH8TSf\u002FcD4RAXjhDrNm\u002FiPHHO0RlziiTo6tmtlsn3MMQ7AYMCwvP8VLdQWPCumnmxKKAENm\u002FLjh7Cc8d1bN\u002FoLHFDG5nGLqj43yySROOVaEhOMwTO63psccuOD\u002Fv8yIYx\u002FrOIV7UPSxJt1scr\u002Fqpj75WGpsTN0aoIvWdhGEQ3K1TekhEfvc4ZJnGgqKVhirX\u002FFyIWbZ9MEvvYLFJN31JmST7UoXeYjEfPNkD0EpZ\u002F8dSwtraF2ZDabNIctOHpNqbtnXQWqkqTjxtEa0SMYYBP+yjx5YW7cyvGBeJGLWsJw+qZ9TWteOqdNQ1ZxVAheDI+FmwwAVuDb4I\u002FE+Cde4KlrywMi9KH\u002Fxd2l5jjhBEWR5PMiqgNUDv5DiGDAD7aB7puFQiShzUKoag+NdN82pV3\u002FIb\u002FRXecrAcWYTdZYBFeCVyN11DVGc9U6eNPoQzw4Bj2PhtbZ5YP\u002Fp4YuCG\u002FpdJxav3XiyUAO2WqyLP414lNAFMYbdq5wbipXvXNSva7EwEZNURcylLnsB91HOm3+3WhUD9aCJrAKNjzl3pq46Ar8aWJFdzvzzmHXNDGq3Dm99IDMJ\u002FB\u002FOEHH6agR4d4hleRoAzNnhTewOgk\u002FkS8vWkX2RmOXemCMLWd6WaMoT+IDJHdgbh7OpjM3Mvh7UsjgMow2SXUQsN5+UpHRvc+nrPtKaE76JW\u002FRnY1o9q7XNvZmg3gTMwWvmh87gVOHnjninIbjch4D0TMVrgtbqZb959RVMkjpcbbe9py4o+0HIf9YAAW2+L0qH5SdwNdkOOq7l8uecDY7SfCtYCOZXyutUqHbn2T7tcciuHuadc7u4Q3ejeVqgKuJOY8IM1Y+ASFyrxjHpzppyeCPFVnzYKrHeAtGjjLNfZMXD8uvnT7AS5v\u002FzTt93NyVra3SUfia\u002FLewRJ2PQfIvhPDjc4t3nwimKJzb+jlKf08JMt1Dj4owu14o\u002FgPCU0qQ+OqWkcbNMfSRGRCSohyxcRbI5T6GkEx\u002FzbRByngv7\u002FSOSt\u002FNYqlsAESJpyIum\u002Ft7VxeIBVEb7fUpD+iCNENZtws3ZUjMSgt+IhHLac0CosuEtyfSxJ7KivjycSXJ4F0xU9u0y1oZm4FrPmi87wtVzFlKsnfWpOrZWs7BWKyBp5bQ5eoH7xzXMfINfcuPl60OnGS42A8SxL0A5niAl0raZE+srs5\u002FsBqCmSnWZ\u002FkOHd4tubvJRY0nm86JDC\u002FNN0QfHVSt8mPgKO3bR4ojIIYwf34O4nPQAW+sBtWncoxzhFlBbF9e0MZAP+lo5Dscu2IDeABMp6lYXbgfa3XCp6qqGMCygQjEL5M17GJPV1gCyzescBehJzHWQGoSH1X3NN7bNq\u002F58oau2rib0zgLpYa\u002FfFF6gi4JA9fGtiCGl6Th88MHoLNXXE59hHdQBZ3U1Jx\u002FQS9tBL8Gl3T01sLDeSEQCRKPSdMnYQCWaWR2XHTY2EL0X22asymPCKj1AjahWB9PxVJsYPc53qg02lEhrT5tzDs2jfKw4KHuFTBKX6tmoj1GV0\u002FdlVi7djnksSWXk\u002Fnt4ehJF8DOrG669kY18WIGSpVvT8UwP5q44jZ6m58ysEvA3vGoFn948SYc4IEqKe7kLeNrL7EqpM269wr27CqsEKH0gl6rC7iaS6Jk\u002FI4RlX5AABhL7QS8oXVMeeViE2TLgs6afxiTiMMrR4\u002FQnt8gphxssEgcPXr4rzyWmbNei0NMcL3UU1Hr14XiCVOJlipDw4ITaKIFXaaHDsFiy1pNdPJ\u002F8qTHgeuj0CC8M3fLXoRoEOoeFD9PwZ7oVyPuhVCBEf9Cj3k5R9bQtoKzch1SGXQy1J9wSbKGnnSLvGmLvl7\u002FeGLD8vZsBP4ssS0tJJE1SQIL4PAAIGzz+aiPi8x7vO0C0MXdiraRjJcM3YS1sS0PFa0WTI3BtNK8GnLtAPrp7I3GGlok9zE+6Gh9FrQ0CdGCFB8Eoouw5r9EnU4Gw2LoOd9GLJZpgFlaRSEXvMvZwbup0\u002F\u002FLFeNFjMiGal7Kfh6+M\u002FRToHXE9AC3je12\u002FSAf3nuAOt8C4IWMOHzYiVrK377gBGoFxMhJycwgmGCI8UYg67LLgU8WscBUU3pze3d7VX9tI8njwtEU49RFn4E4A1oYQQAR6xbSRmifwInnVGNakQi76gd7PCjNmIKu75r5tSJMyApKjfdO1DuN4L34AAABJdpeZZSISZQ8JjQakY2xE5rjc72g+QRwci6+KsdgFWrpwJQ4bwjRhq2RpMilU4pY+7pxxat13INbLH2BPeMwp3SQWvKqz\u002Ftjjw7OvXN7jILC2gfd2OU33q45ByyYtlgt4yPRAE+Nfsf6j6skj8fzBXpsgvzPd6L45AAApgrxLyDKXVlMgGKpS9gwFUlfK\u002F44XwWmpXyRUib7y5DGSDH58BYT8TB3aXtvPsNUszgY6V1lqqnDGOzLuknTzT8KTADTuz29bw9PTJVNKQUwrNATghqCuPCkGS52YKy67oSMPhOq8b+Z1ZmZ5TYS+wvVbstRzUALYAoxFhtciqYZz033oqM74kUEwlJpGwFAoAA44GUL8hsXeSEPHUFUU\u002FgAvH74eGMcuuae7pxSR2gcfaPbJmHhX79zl+nf5+DvPHo0ARiErzH6VdeC7CBHViZfUtmYrNCMYpr6jKx1bnqcAV7IJTPQw5EHOQUbWgSq\u002Fams5nbgACjqZwKhZTGMBWMAk88wQLJQAANyHAASfWk4S8HGdIG+4a1P0rFZqluTqEzqeRNyNIoMmJEFfmaS0FWS56okrWoRLZDMewHTS+zIeZb\u002Fd2NoxlHz2CGh4U8256BVmuR1z4j\u002FSrGJWUHFxIskjOEqepjyQnV+Z3fAACfoaeCafDLnfslJIM9xMhPIOsNCAarM6rdKgs4+MK+cwraWAtZGSWkSdTOZjN4DptzAfcEUueZRYbGjZ9GouHL\u002FTbAVHVL2WTxdj46BP\u002F6jHqe6R4IAAcoF3QWUv6eXmwoyeLNRH7ZCpVjwPgddtbcYgQRwXLWSQaeeXEB\u002FoboQD27mAP5ZPeZEvWG\u002FYh8XoQtn2jwwInUdIpMyFO2+8UprahC\u002FTIwGEzTwyKPHqhQ5HbHICyF5NXbDxHfGgoIkJdOAAZqAufNAOXLSE32G\u002F5O2uLOm9WToDsxgJfoSksWd3YTw500JqwVHJm59\u002FqF9h1ctL9Ff8BkVlhsrcbDFdGc9LK830ZmO9KRrgqyBKAvbttgi4w1OpQLK6KNNch+AkHaUnbl\u002FN04ACPfNgGuTXji6Khd4tpECcAs65RTOoBsahJAw9CsTXPo1Nr72tMAxkn+ZpGHYod2jdnYVRrJ7fLfzBvQXPPyIqULFjLrwZ3\u002FfVerTgcZcKzaMf39r+79mCgvAAEsCsACRoPc8eyDJA4DLBB0dp6qqIRQTWjF7Td+L3\u002FsYqYfOSA6A0RjBy48iLvTCg\u002FVUaN5P1IczPM3LzjDrLR8WoRDQPecsS2OEB3yR4w+4AAAFmfIA0D7GgK6yZCkm2925Y3o8JzprBBt3MB0EK93tKWPa5oFaowSzU6pRn1AQTXsgOHI1YqtCpRpdiQRrdwFpyHen1bBsM\u002FlgDb42A\u002FjFteZ70bY7edxBHtTRUGQAAAhIYGTS2oXlf6B51vcNiQqjdbNQmVvJYmqf3M4QwgQ3rUuZhFx05eeF\u002F7RJ\u002FadR+SfJOn1wkQqqA9oqV4BtfI8hLFaP6YKgPtbI4o9jt0RIAAABlpzEVzMNVIqnB4rWWLFZxIRQjpt1pmNMDuUFrQLhOjevsbVHYq8VqxXLlkHNWDNVJjyWqmirXfSgr31Ot4OgbEi\u002FmNqH20xGAAAAAr22MrLh7Q1XbMkiUAJ4mFTZBAAAAAAAAAAAAAAA==","[\"不想熬夜\",\"很不想熬夜\",\"真的\"]","[{\"platform\":\"email\",\"url\":\"vue2@qq.com\"},{\"platform\":\"email\",\"url\":\"toleap0203@gmail.com\"}]","[{\"name\":\"个人工具Mychat\",\"url\":\"https:\u002F\u002Fchat.vue2.xyz\",\"desc\":\"我的Web_ai构建\",\"image\":\"\",\"enabled\":false},{\"name\":\"个人工具Proxy_Control\",\"url\":\"https:\u002F\u002Fchat.vue2.xyz\u002Feaa1c83fbe48\u002F\",\"desc\":\"Proxy控制开关\",\"image\":\"\",\"enabled\":false},{\"name\":\"OpenClaw\",\"url\":\"https:\u002F\u002Fclaw.leap289.xyz\u002Fchat?session=agent%3Amain%3Amain\",\"desc\":\"我的龙虾\",\"image\":\"\",\"enabled\":false},{\"name\":\"Hermes后台\",\"url\":\"https:\u002F\u002Fhms.leap289.xyz\u002Fsessions\",\"desc\":\"QQ端机器人管理\",\"image\":\"\",\"enabled\":false},{\"name\":\"leap的邮箱\",\"url\":\"mailto:vue2@qq.com\",\"desc\":\"leap的邮箱\",\"image\":\"\",\"enabled\":true}]","\u003Cdiv class=\"flex flex-col items-center mb-6 md:mb-8\">\n  \u003C!-- 头像容器：改为3:4竖版比例 -->\n  \u003Cdiv class=\"w-20 md:w-24 aspect-[3\u002F4] rounded-2xl border-2 border-white\u002F50 dark:border-gray-300\u002F30 shadow-2xl bg-white\u002F20 dark:bg-gray-800\u002F20 backdrop-blur-sm overflow-hidden flex items-center justify-center text-3xl md:text-4xl mb-3 md:mb-4\">\n    \u003Cimg src=\"https:\u002F\u002Fvue2.xyz\u002Fuploads\u002Fbed\u002Fdefault\u002Fa1d9c7b8040e40d585e0692142d8cad1.jpg\" class=\"w-full h-full object-cover\">\n  \u003C\u002Fdiv>\n  \u003Ch2 class=\"text-xl md:text-2xl font-bold text-white\">郑成龙\u003C\u002Fh2>\n  \u003Cp class=\"text-xs md:text-sm text-white\u002F70 mt-1 text-center\">运维工程师 | Linux服务器运维 | Docker容器化 | (已按照iPhone14Promax理论分辨率适配移动端,桌面端浏览最佳)\u003C\u002Fp>\n\u003C\u002Fdiv>\n\n\u003C!-- 技术栈 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">🛠️ 技术栈\u003C\u002Fh3>\n  \u003Cdiv class=\"flex flex-wrap gap-1.5 md:gap-2\">\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Linux\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Nginx\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Docker\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Shell\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Python\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">MySQL\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">阿里云ECS\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">FastAPI\u003C\u002Fspan>\n    \u003Cspan class=\"px-2.5 py-1 md:px-3 md:py-1 rounded-full text-xs md:text-sm font-medium bg-white\u002F20 text-white\">Nuxt.js\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C!-- 个人简介 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Cp class=\"text-white\u002F90 font-bold text-sm md:text-[16px] leading-[1.5rem] md:leading-[1.75rem] tracking-wide\">\n    你好，我是 \u003Cstrong>leap\u003C\u002Fstrong>，一名运维工程师。拥有1年多Linux服务器运维经验，熟悉Docker容器化部署、Nginx配置管理、Shell\u002FPython自动化脚本编写。具备线上故障独立排查能力，熟悉服务器安全加固与监控体系建设。\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003C!-- 工作经历 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">💼 工作经历\u003C\u002Fh3>\n  \u003Cdiv class=\"space-y-3 md:space-y-4\">\n    \u003Cdiv class=\"bg-white\u002F10 rounded-xl p-3 md:p-4\">\n      \u003Cdiv class=\"flex justify-between items-start mb-1.5 md:mb-2\">\n        \u003Ch4 class=\"font-bold text-white text-sm md:text-base\">武汉途迪汽车服务有限公司\u003C\u002Fh4>\n        \u003Cspan class=\"text-xs md:text-sm text-white\u002F60 whitespace-nowrap ml-2\">2025.7 - 2026.3\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"text-xs md:text-sm text-white\u002F70 mb-2\">运维工程师\u003C\u002Fp>\n      \u003Cul class=\"space-y-1 text-xs md:text-sm text-white\u002F80\">\n        \u003Cli>• 负责公司3台阿里云ECS服务器日常运维，涵盖Nginx配置管理、Docker服务部署、防火墙策略配置及SSH安全加固\u003C\u002Fli>\n        \u003Cli>• 主导项目Docker容器化改造，编写Dockerfile和docker-compose实现多服务编排，部署时间从30分钟缩短至5分钟\u003C\u002Fli>\n        \u003Cli>• 使用curl、tcpdump等工具排查线上请求异常，独立定位并解决Nginx配置错误及后端接口异常，月均处理故障5-8次\u003C\u002Fli>\n        \u003Cli>• 搭建基于\u002Fapi\u002Fhealth接口的轻量监控方案，实时采集服务运行指标，服务可用性达99.5%\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"bg-white\u002F10 rounded-xl p-3 md:p-4\">\n      \u003Cdiv class=\"flex justify-between items-start mb-1.5 md:mb-2\">\n        \u003Ch4 class=\"font-bold text-white text-sm md:text-base\">校内工作室\u003C\u002Fh4>\n        \u003Cspan class=\"text-xs md:text-sm text-white\u002F60 whitespace-nowrap ml-2\">2021.9 - 2025.6\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"text-xs md:text-sm text-white\u002F70 mb-2\">Web开发兼运维\u003C\u002Fp>\n      \u003Cul class=\"space-y-1 text-xs md:text-sm text-white\u002F80\">\n        \u003Cli>• 负责工作室3台Linux服务器的日常运维，包括Nginx反向代理配置、数据库备份恢复、防火墙策略配置及SSH安全加固\u003C\u002Fli>\n        \u003Cli>• 使用Shell和Python编写自动化脚本20余个，涵盖日志切割、数据定时备份、服务健康检查等\u003C\u002Fli>\n        \u003Cli>• 参与处理502\u002F504网关超时、磁盘空间写满、DNS解析异常等线上故障的定位与修复，平均响应时间30分钟内\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- 运维能力 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">🔧 运维能力\u003C\u002Fh3>\n  \u003Cul class=\"space-y-1.5 md:space-y-2 text-xs md:text-[15px] text-white\u002F90 leading-relaxed\">\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>\u003Cstrong>服务器运维\u003C\u002Fstrong>：熟练管理阿里云ECS服务器，负责Nginx配置优化、防火墙策略配置及SSH安全加固\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>\u003Cstrong>容器化部署\u003C\u002Fstrong>：熟练使用Docker、Docker Compose，编写Dockerfile实现多服务编排，提升部署效率\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>\u003Cstrong>自动化运维\u003C\u002Fstrong>：熟练使用Python编写运维脚本，掌握日志切割、数据备份、健康检查等自动化工具\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>\u003Cstrong>故障排查\u003C\u002Fstrong>：具备线上故障独立排查能力，熟悉使用curl、tcpdump、netstat等工具定位问题\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>\u003Cstrong>安全加固\u003C\u002Fstrong>：掌握ufw\u002Fiptables防火墙配置、SSH密钥登录、fail2ban防暴力破解等安全措施\u003C\u002Fspan>\n    \u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Chr class=\"border-white\u002F20 my-3 md:my-4\">\n\n\u003C!-- 项目展示 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">🚀 项目展示：本博客系统\u003C\u002Fh3>\n  \u003Cp class=\"text-white\u002F90 font-bold text-xs md:text-[15px] leading-[1.5rem] md:leading-[1.75rem] tracking-wide mb-2\">\n    \u003Cstrong>技术栈\u003C\u002Fstrong>：Nuxt 3 + FastAPI + Docker + Nginx + SQLite\n  \u003C\u002Fp>\n  \u003Cul class=\"space-y-1.5 md:space-y-2 text-xs md:text-[15px] text-white\u002F90 leading-relaxed\">\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>独立完成架构设计与线上部署运维，部署在阿里云ECS服务器\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>Docker容器化部署前后端服务，编写Dockerfile和docker-compose.yml\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>配置Nginx反向代理、SSL证书自动续期、ufw防火墙策略\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>自建健康检查接口，实时采集服务器状态指标\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>独立处理OOM宕机恢复、防火墙排查、SSL证书验证失败等复杂故障\u003C\u002Fspan>\n    \u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cdiv class=\"mt-2 md:mt-3 flex gap-3 md:gap-4\">\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmycl0203\" target=\"_blank\" class=\"text-xs md:text-sm text-white\u002F80 hover:text-white hover:underline\">GitHub\u003C\u002Fa>\n    \u003Cspan class=\"text-xs md:text-sm text-white\u002F40\">|\u003C\u002Fspan>\n    \u003Cspan class=\"text-xs md:text-sm text-white\u002F60\">线上运行中\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003Chr class=\"border-white\u002F20 my-3 md:my-4\">\n\n\u003C!-- 教育背景 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">🎓 教育背景\u003C\u002Fh3>\n  \u003Cdiv class=\"bg-white\u002F10 rounded-xl p-3 md:p-4\">\n    \u003Cdiv class=\"flex justify-between items-start\">\n      \u003Cdiv>\n        \u003Ch4 class=\"font-bold text-white text-sm md:text-base\">华中科技大学文华学院\u003C\u002Fh4>\n        \u003Cp class=\"text-xs md:text-sm text-white\u002F70\">软件工程 | 本科\u003C\u002Fp>\n      \u003C\u002Fdiv>\n      \u003Cspan class=\"text-xs md:text-sm text-white\u002F60 whitespace-nowrap ml-2\">2021.9 - 2025.6\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\u003C!-- 其他信息 -->\n\u003Cdiv class=\"mb-5 md:mb-6\">\n  \u003Ch3 class=\"text-base md:text-lg font-bold text-white mb-2 md:mb-3\">📋 其他信息\u003C\u002Fh3>\n  \u003Cul class=\"space-y-1.5 md:space-y-2 text-xs md:text-[15px] text-white\u002F90 leading-relaxed\">\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>英语四级（CET-4），可流畅阅读英文技术文档\u003C\u002Fspan>\n    \u003C\u002Fli>\n    \u003Cli class=\"flex items-start gap-2\">\n      \u003Cspan class=\"text-white\u002F60 mt-0.5\">•\u003C\u002Fspan>\n      \u003Cspan>持C1驾驶证，可配合现场工作及差旅\u003C\u002Fspan>\n    \u003C\u002Fli>\n  \u003C\u002Ful>\n\u003C\u002Fdiv>\n\n\u003Chr class=\"border-white\u002F20 my-3 md:my-4\">\n\n\u003C!-- 关于这个项目 -->\n\u003Cdiv>\n  \u003Cp class=\"text-white\u002F90 font-bold text-xs md:text-[15px] leading-[1.5rem] md:leading-[1.75rem] tracking-wide\">\n    \u003Cstrong>关于这个项目：\u003C\u002Fstrong>\n  \u003C\u002Fp>\n  \u003Cp class=\"text-white\u002F90 font-bold text-xs md:text-[15px] leading-[1.5rem] md:leading-[1.75rem] tracking-wide\">\n    这是我独立开发并运维的线上博客系统，从服务器配置到上线部署全程自己完成。选择 Nuxt 3 + FastAPI 技术栈，采用Docker容器化部署，实现一键部署与迁移。\n  \u003C\u002Fp>\n\u003C\u002Fdiv>\n","[\"bed\u002Farticles\u002F0084589e4b184b308f39d8897bef26bf.png\", \"bed\u002Farticles\u002F0171cb9bf26a4b1ba88d7fbc17468614.png\", \"bed\u002Farticles\u002F01e9c48b64744f5980d4ebe81b580ccc.png\", \"bed\u002Farticles\u002F01fdbbceabca411cab07b2220270e0a8.png\", \"bed\u002Farticles\u002F034de911.png\", \"bed\u002Farticles\u002F041e8d83e9744de7be62fda330d035e7.png\", \"bed\u002Farticles\u002F05348caf.png\", \"bed\u002Farticles\u002F06cf386d20904cb0b5148bf850bf2b77.png\", \"bed\u002Farticles\u002F0753f81543f94db88a58dee9ab1f1e9c.png\", \"bed\u002Farticles\u002F07d90524.png\", \"bed\u002Farticles\u002F0875c465.png\", \"bed\u002Farticles\u002F0898412ca50447479d3be3e251f3b9b0.png\", \"bed\u002Farticles\u002F0a69833157b64ecd9139ae8b5b015ed9.png\", \"bed\u002Farticles\u002F0b7eccfa3e074a91a27d2a8e513ddc86.png\", \"bed\u002Farticles\u002F0bd452cd8aa44b6d90afb4d1b27e7e8a.png\", \"bed\u002Farticles\u002F0d0cf4c6b3c7465e8e90997792ab8ee8.png\", \"bed\u002Farticles\u002F0d24e63dab434e5397a7a905e32871e2.png\", \"bed\u002Farticles\u002F0db7ecf20df94444b42061ba62b8ab9e.png\", \"bed\u002Farticles\u002F0e95f144e1114154889b3f8fa143035a.png\", \"bed\u002Farticles\u002F0f7ffa2a89c74980a5aa07fa39cafc7c.png\", \"bed\u002Farticles\u002F0fb452d4f5864fa9b6e7ddb9f00ad4b6.png\", \"bed\u002Farticles\u002F1073168f94424aea99f77421615d219d.png\", \"bed\u002Farticles\u002F11580f08.png\", \"bed\u002Farticles\u002F1184a174e0454a7bb75e90b54fc52e16.png\", \"bed\u002Farticles\u002F11bb41881da94641b2fb335c46e5fe54.png\", \"bed\u002Farticles\u002F1209c39bbba549dc8afb852e5db076f4.png\", \"bed\u002Farticles\u002F1220bf6e350447d7a9735987d0f54e56.png\", \"bed\u002Farticles\u002F12418beef64942e791e969efdb208e11.png\", \"bed\u002Farticles\u002F12fe5fb7924047fcb788081d1382ee40.png\", \"bed\u002Farticles\u002F13000820.png\", \"bed\u002Farticles\u002F133c5dabf3b749cdb48137990400ae49.png\", \"bed\u002Farticles\u002F13a1434ec8d34dfc8c1230ec72965ee9.png\", \"bed\u002Farticles\u002F14087c1961d94763bad772ed888e9107.png\", \"bed\u002Farticles\u002F145cd7507ae9497f8d24346103f52c76.png\", \"bed\u002Farticles\u002F150e237a3d22431a871ebc289a842505.png\", \"bed\u002Farticles\u002F155da0c036b0445483c97aa69e074633.png\", \"bed\u002Farticles\u002F17c51fb0ced04693b7aadf1508442b92.png\", \"bed\u002Farticles\u002F187b035f86804d7e826816519dd3b742.png\", \"bed\u002Farticles\u002F18aab4c3330c42169cf8aabc183be5e2.png\", \"bed\u002Farticles\u002F19275ecb.png\", \"bed\u002Farticles\u002F1968c33bf97040b7a3054bc470f360bd.png\", \"bed\u002Farticles\u002F19eac8ab.jpeg\", \"bed\u002Farticles\u002F1aa643b54372473f820dc73f911b034a.png\", \"bed\u002Farticles\u002F1b78f32d458446a49687f74f382bbc46.png\", \"bed\u002Farticles\u002F1cbbc9b7.png\", \"bed\u002Farticles\u002F1e0f4db6aea7441a90dae0cd6690f1a2.png\", \"bed\u002Farticles\u002F1e2f2c14fdf343808c4bc5d63632ca82.png\", \"bed\u002Farticles\u002F1e9799bf78964038b6c49883f438dc04.png\", \"bed\u002Farticles\u002F1f00e6c3.png\", \"bed\u002Farticles\u002F1f190b3f9f1b433d976e9cb47534c3cd.png\", \"bed\u002Farticles\u002F1f2dc4330c044063be85c58ce3ff9218.png\", \"bed\u002Farticles\u002F20369fa409dd4812b1e3b635ce29ea0a.png\", \"bed\u002Farticles\u002F208753df9d854ad39616b3dd62823c40.png\", \"bed\u002Farticles\u002F212f3d05958b4e24877298214e481cc8.png\", \"bed\u002Farticles\u002F2397bfaab5aa4b5aa67271791a85e39e.png\", \"bed\u002Farticles\u002F23a44518.png\", \"bed\u002Farticles\u002F25029c22e66247a39418ace31e28c3d1.png\", \"bed\u002Farticles\u002F26c640c469c34f0697afe94f28981cc4.png\", \"bed\u002Farticles\u002F26eb0e985c004325bdfd315abcd6e02c.png\", \"bed\u002Farticles\u002F28082dc42d584e969e26cb68049b3e93.png\", \"bed\u002Farticles\u002F2828ea09f33647a2bd82d32e91609aed.png\", \"bed\u002Farticles\u002F291c872c46f74da0998659483055fd91.png\", \"bed\u002Farticles\u002F2a56aac7d9a1441c87ee8e77dc619c50.png\", \"bed\u002Farticles\u002F2a7d70050d4343338eda6cd9252b344b.png\", \"bed\u002Farticles\u002F2bdbf3bf.png\", \"bed\u002Farticles\u002F2deb813d552f4f64b4b0cbbe8fc7eeb7.png\", \"bed\u002Farticles\u002F2e66e0157ca44a1a9eaff23a17b909fb.png\", \"bed\u002Farticles\u002F2ee8ae3543d44c72b7358d977aa4909c.png\", \"bed\u002Farticles\u002F2f443b03a14d4d438373a25463ddaed3.png\", \"bed\u002Farticles\u002F2f6adbbe.png\", \"bed\u002Farticles\u002F2f93f0a5.png\", \"bed\u002Farticles\u002F3170251859c64675ab6f236405987771.png\", \"bed\u002Farticles\u002F32b74a1f80b142a28087cb61f63375ef.png\", \"bed\u002Farticles\u002F3334863832cf46b2a11ea41e2841c687.png\", \"bed\u002Farticles\u002F339b2023e10e4aafaf7d24fa6b52a4a6.png\", \"bed\u002Farticles\u002F346ba0f4da9a486f828c2fe8f683bf16.png\", \"bed\u002Farticles\u002F34c4195c.png\", \"bed\u002Farticles\u002F35647319eb074197b658f5573eda21e5.png\", \"bed\u002Farticles\u002F36ffa03877454bcba88ca10640f60839.png\", \"bed\u002Farticles\u002F37ffd2d5cf50425f9bad8c5f6a8bc535.png\", \"bed\u002Farticles\u002F396075c57c054166bc563c6c660b0bd6.png\", \"bed\u002Farticles\u002F39d490f1ffcb42adb11f36241b756341.png\", \"bed\u002Farticles\u002F3ad1676e6a1f44daa5f057515b9e6b4c.png\", \"bed\u002Farticles\u002F3d1475e7.png\", \"bed\u002Farticles\u002F3f4dd5368a004a7f91c6def2cf2bacc7.png\", \"bed\u002Farticles\u002F3fc8817b869c40728c7f4ddae0551443.png\", \"bed\u002Farticles\u002F4208e460.png\", \"bed\u002Farticles\u002F426cbf4dbe4a4c84a5792d361f4fbc15.png\", \"bed\u002Farticles\u002F439e7ada64e541dfb74f18b55e7012f1.png\", \"bed\u002Farticles\u002F43f3e4a6.png\", \"bed\u002Farticles\u002F44cb59f5c56e4693b30c5ef57dc52a79.png\", \"bed\u002Farticles\u002F4570f907ec2f4d9b8fca32f73871d73e.png\", \"bed\u002Farticles\u002F46b93a3c.png\", \"bed\u002Farticles\u002F4801552158084f8487fd3396c696bb0b.png\", \"bed\u002Farticles\u002F48b2cb62866e4ea890c4d59d68557e1c.png\", \"bed\u002Farticles\u002F49082910.png\", \"bed\u002Farticles\u002F4972bc0f61744126864ca0c26e4af28d.png\", \"bed\u002Farticles\u002F49b679c8918e4743aa320f8b954cc699.png\", \"bed\u002Farticles\u002F4aadda4090e24cc2aab8ad00b5d7bdfb.png\", \"bed\u002Farticles\u002F4ab43411f1ad4b98a9698e3ddba13c37.png\", \"bed\u002Farticles\u002F4ad48518.png\", \"bed\u002Farticles\u002F4b175857.png\", \"bed\u002Farticles\u002F4b6010cb.png\", \"bed\u002Farticles\u002F4c0a1158a53d4841b321365d24d9c524.png\", \"bed\u002Farticles\u002F4d2fbdeb.png\", \"bed\u002Farticles\u002F4e0fd7b873934af6ab02edc6b551e2e4.png\", \"bed\u002Farticles\u002F4e800c1deffd4971958129141133cf04.png\", \"bed\u002Farticles\u002F4f2aade0.png\", \"bed\u002Farticles\u002F5055aebb5c2c413b84d9e88504ea6800.png\", \"bed\u002Farticles\u002F507a6fdf637f4e50abde7e0e25cbee2d.png\", \"bed\u002Farticles\u002F5101e114e52343a097057ba89abc703b.png\", \"bed\u002Farticles\u002F51774c0cccef4ad9be3934ff6c5c422d.png\", \"bed\u002Farticles\u002F5287688b.png\", \"bed\u002Farticles\u002F5455d7c6fbbe4a4f83957ba55af68952.png\", \"bed\u002Farticles\u002F5463e7b19c314fb0925c2e464ec75df6.png\", \"bed\u002Farticles\u002F5468c6669fb64fe19781ad7a58c77f4d.png\", \"bed\u002Farticles\u002F556eecc9b4c347dd818cd95c580f7860.png\", \"bed\u002Farticles\u002F55e7ac1bfa18459684e7f1ac6704a200.png\", \"bed\u002Farticles\u002F56c65dde366b492abbdfbf7a331b9699.png\", \"bed\u002Farticles\u002F5743c013062c404e8aff252a5e39f3ed.png\", \"bed\u002Farticles\u002F58e427916bdd4ec4bc82681183cbb7fc.png\", \"bed\u002Farticles\u002F596a3ea5c02245f189f1cb915d67cc94.png\", \"bed\u002Farticles\u002F5a80a4efda1c42fcaa7244577562a5c9.png\", \"bed\u002Farticles\u002F5b39df03b8474219a0568141b40939a4.png\", \"bed\u002Farticles\u002F5c24001e8c604ab98d4a373611c1831c.png\", \"bed\u002Farticles\u002F5cb0668ab0874d708513dfc8a30290ca.png\", \"bed\u002Farticles\u002F5ebb1aecaa864629bdad6be8a7ae49a4.png\", \"bed\u002Farticles\u002F5f0edd32a61943fc9af37503abcde57e.png\", \"bed\u002Farticles\u002F5f47a5fc.png\", \"bed\u002Farticles\u002F5f862b98d415463b8b706ed8ec64394b.png\", \"bed\u002Farticles\u002F604a6dd6c9d24f86895d7732b0476cf3.png\", \"bed\u002Farticles\u002F609efb4629e648edab205477118c3499.png\", \"bed\u002Farticles\u002F60a8572e.png\", \"bed\u002Farticles\u002F60d9a7356dc5449d813a14198fa4eaa4.png\", \"bed\u002Farticles\u002F60e002dc1e7f437589bdabf8de29d170.png\", \"bed\u002Farticles\u002F610f9b601a1a48a0aadb42ab6734eacd.png\", \"bed\u002Farticles\u002F6145b8ae9d024d048a56565694a6e971.png\", \"bed\u002Farticles\u002F62e4921f372d47559ab85e69df6bdd29.png\", \"bed\u002Farticles\u002F634e2152d70440e5a960b511d939ca6c.png\", \"bed\u002Farticles\u002F6390c051.png\", \"bed\u002Farticles\u002F64517569f2d245fca1bea9b187eeb469.png\", \"bed\u002Farticles\u002F64548b62c5374b5b888436c9009c2dc1.png\", \"bed\u002Farticles\u002F66a284f050314c1a831ac13b87111175.png\", \"bed\u002Farticles\u002F66a4078ebe664d86be08c226312ac518.png\", \"bed\u002Farticles\u002F66aaadf2b40e45b88afe6e10bf4df35c.png\", \"bed\u002Farticles\u002F67a41989.png\", \"bed\u002Farticles\u002F68f4b0d8.png\", \"bed\u002Farticles\u002F69cdcc56.png\", \"bed\u002Farticles\u002F6aa45a9f054f495798aec5a3614e1a50.png\", \"bed\u002Farticles\u002F6b61a478c4cc4dff88a5187db87f2630.png\", \"bed\u002Farticles\u002F6c9df1fd9102489388a2edbe6ba7cc6e.png\", \"bed\u002Farticles\u002F6ce22c315257418da55875483668c806.png\", \"bed\u002Farticles\u002F6f82da9a7b9047db82cc1b347afeb04b.png\", \"bed\u002Farticles\u002F6fb4afa1aae842c68806256875ce7a45.png\", \"bed\u002Farticles\u002F6fd43d32185e459d83fffcfbd84a3120.png\", \"bed\u002Farticles\u002F6fe08092f1164c05a4d3462cc77b68e5.png\", \"bed\u002Farticles\u002F700b9ad0d1554dbcbc99cb567f29ef7b.png\", \"bed\u002Farticles\u002F70778ed1f2854c909cdf18d50ba76bf9.png\", \"bed\u002Farticles\u002F71442419ee664de2b64b6c30d359c775.png\", \"bed\u002Farticles\u002F72764f58.png\", \"bed\u002Farticles\u002F72850a03f9e24d8b847841211661e0c9.png\", \"bed\u002Farticles\u002F7287b218d9124b49b39805fdb7ddc758.png\", \"bed\u002Farticles\u002F72ba41dbfd8642028190762289101aea.png\", \"bed\u002Farticles\u002F72c6e4dd.png\", \"bed\u002Farticles\u002F7466bd16fba942bbb73f48c403e00d59.png\", \"bed\u002Farticles\u002F74a0f1c9ac4c48418e21808c8c0e888f.png\", \"bed\u002Farticles\u002F74b6c189c71242aba255880fe93899f9.png\", \"bed\u002Farticles\u002F74ebb653c6c846fe8d2fb787e4fbe94b.png\", \"bed\u002Farticles\u002F7536e30f79e842668d216fdc7f33350f.png\", \"bed\u002Farticles\u002F7977b13e.png\", \"bed\u002Farticles\u002F7998d3ed.png\", \"bed\u002Farticles\u002F79a7890366b14a11a7a2d301d8c8aaaa.png\", \"bed\u002Farticles\u002F79f16554745a4d77a79b10a095e91fc5.png\", \"bed\u002Farticles\u002F7a3be68eed034f088b55fb949606b539.png\", \"bed\u002Farticles\u002F7a814e91121f480aa79fd19919b8d116.png\", \"bed\u002Farticles\u002F7aa1de23.png\", \"bed\u002Farticles\u002F7aee0d11df844d5faa3804b2d6d0b6ac.png\", \"bed\u002Farticles\u002F7b04ff48875b46cc897da932cd11a0ff.png\", \"bed\u002Farticles\u002F7b05eb12da0f4406b29af378604844b6.png\", \"bed\u002Farticles\u002F7b226ebb.png\", \"bed\u002Farticles\u002F7b94ffd8eb3148caa47ce0daf5631ff2.png\", \"bed\u002Farticles\u002F7b97b2e9.png\", \"bed\u002Farticles\u002F7c2a254b5d6a43b38425fa6b64494773.png\", \"bed\u002Farticles\u002F7c7b937ed4974826af54a8aaccc1147d.png\", \"bed\u002Farticles\u002F7ec0d495.png\", \"bed\u002Farticles\u002F7f52e63f4e04421aa7466eae338a1e1b.png\", \"bed\u002Farticles\u002F80c71500.png\", \"bed\u002Farticles\u002F81150f90690146aba92cbf1574369f75.png\", \"bed\u002Farticles\u002F8141ce0f32a744a99385fc216a6ac865.png\", \"bed\u002Farticles\u002F822dd33a6b3249c4b493b693c59222fa.png\", \"bed\u002Farticles\u002F8256453d14534717b1861166942e2a14.png\", \"bed\u002Farticles\u002F82705cde.png\", \"bed\u002Farticles\u002F83d5e23f.png\", \"bed\u002Farticles\u002F83dc200334e148cb990766468bb54afb.png\", \"bed\u002Farticles\u002F8494f265.png\", \"bed\u002Farticles\u002F8539fa2c8a614492b97daf2cf40ae95e.png\", \"bed\u002Farticles\u002F858940bad0e647d09c22d44516ddb8c6.png\", \"bed\u002Farticles\u002F85b06c798f0f43109f32723d78d9d568.png\", \"bed\u002Farticles\u002F85f87277981f47f1820c00ab3d5ecfc2.png\", \"bed\u002Farticles\u002F861de2a9d75c4e4785784e12139c3323.png\", \"bed\u002Farticles\u002F88d7b13070094e7da0e2dffae3d14d25.png\", \"bed\u002Farticles\u002F899317c139064933988f52096f94d513.png\", \"bed\u002Farticles\u002F89afd6c3a3dc4f799b667c2bc2314f58.png\", \"bed\u002Farticles\u002F89e4861c.png\", \"bed\u002Farticles\u002F8abb40e30c1a48329144b0f43f0a504e.png\", \"bed\u002Farticles\u002F8baeecf6e12d4a93a7ddac7abd6e88cb.png\", \"bed\u002Farticles\u002F8bc6b9314e154315bf74fc92fa8d01fb.png\", \"bed\u002Farticles\u002F8d11deba311a401c9de983e6e501bcb8.png\", \"bed\u002Farticles\u002F8d1b9f621d384adab19e2f9069e16231.png\", \"bed\u002Farticles\u002F8dfe206889ea4086845c67b3f35f3df6.png\", \"bed\u002Farticles\u002F8e96a955acff4abfb94e829773330e06.png\", \"bed\u002Farticles\u002F8ef2e53f.png\", \"bed\u002Farticles\u002F90da0c3ff2224d4687de49e7d319a728.png\", \"bed\u002Farticles\u002F91fab46b00e14c97b464616eba6c9ecc.png\", \"bed\u002Farticles\u002F9373e42b.png\", \"bed\u002Farticles\u002F938d844338ed4babaa42c8807350b3c2.png\", \"bed\u002Farticles\u002F9419fa07473640f79419931ad32311bb.png\", \"bed\u002Farticles\u002F9423c882e10e4194bc0c54e74f7f1584.png\", \"bed\u002Farticles\u002F946cf1976b3f488a80645f6f8168afac.png\", \"bed\u002Farticles\u002F94a98ed10af74b59a9575d6bdbb11fb0.png\", \"bed\u002Farticles\u002F94de0cf476f7439391ef15b29e6d5e9d.png\", \"bed\u002Farticles\u002F94ea4a21.png\", \"bed\u002Farticles\u002F9532aafd75734d928f270877d4d9de76.png\", \"bed\u002Farticles\u002F96b32f58657c4290a787afe6af005fd2.png\", \"bed\u002Farticles\u002F96fdfd7f34d744b9a4f089b297c4aa9a.png\", \"bed\u002Farticles\u002F97c507b67d5a4d9286425206c967d3c1.png\", \"bed\u002Farticles\u002F988361d911c74779a636e2ddc0861989.png\", \"bed\u002Farticles\u002F9928f239dc1049a8a7a76dee8f54d6d8.png\", \"bed\u002Farticles\u002F996faaa650464f9b9664d711ebc1b2c1.png\", \"bed\u002Farticles\u002F998a0bb6501842bfb504441d510f14e8.png\", \"bed\u002Farticles\u002F99da84d250114f20bbb71b3ed6b6bbe9.png\", \"bed\u002Farticles\u002F9aa04f13145543a284607c7d13f233e2.png\", \"bed\u002Farticles\u002F9b319083.png\", \"bed\u002Farticles\u002F9b4d36a0.png\", \"bed\u002Farticles\u002F9c0e6abb.png\", \"bed\u002Farticles\u002F9cc6461986f24057a1fa6acaa004b6b5.png\", \"bed\u002Farticles\u002F9cd18da57d284a1288713b76248892f1.png\", \"bed\u002Farticles\u002F9dd87040721748c1bd2c7a3b43a68ae3.png\", \"bed\u002Farticles\u002F9e13fe37.png\", \"bed\u002Farticles\u002F9e2f3079b45e4e7fa1cab2036e845338.png\", \"bed\u002Farticles\u002F9e79f7638763417a848d24934d56c1ec.png\", \"bed\u002Farticles\u002F9ea947d8669f43c6a7618d3be9227a6d.png\", \"bed\u002Farticles\u002F9ee3250116f24c2b967bf62cb8b703d5.png\", \"bed\u002Farticles\u002F9f252b4a585842cb907990b2af83af88.png\", \"bed\u002Farticles\u002F9f5004b3d15440d08900b5c95f8f4905.png\", \"bed\u002Farticles\u002F9f889e1519d748cb8b6d8251c69db09d.gif\", \"bed\u002Farticles\u002Fa18f4999.png\", \"bed\u002Farticles\u002Fa28e7ce4.png\", \"bed\u002Farticles\u002Fa54dc726a2864c5b8c292eec32af3052.png\", \"bed\u002Farticles\u002Fa57ec4961327481d9e1dcbc6a85cb03a.png\", \"bed\u002Farticles\u002Fa5dcfaf7b59745d4b830d009566554a0.png\", \"bed\u002Farticles\u002Fa6a1e8caf142481aa1cad520909d3d2d.png\", \"bed\u002Farticles\u002Fa6abf03c9925490997b1759cac0ab556.png\", \"bed\u002Farticles\u002Fa6da435e.png\", \"bed\u002Farticles\u002Fa6e51af7ff904911b528e5b94ab6fc32.png\", \"bed\u002Farticles\u002Fa7e4be3297154298804df4f8dfb55d8d.png\", \"bed\u002Farticles\u002Fa8373a7debd34855a463ec800544b0ac.png\", \"bed\u002Farticles\u002Fa85617d1f8144396b6718a060fbac415.png\", \"bed\u002Farticles\u002Fa88321a7.png\", \"bed\u002Farticles\u002Fa90dcdc523554d16a54333b1ffd9810e.png\", \"bed\u002Farticles\u002Fa92b424d.png\", \"bed\u002Farticles\u002Fa99436929f2c419a94ee6c6e2da8cc07.png\", \"bed\u002Farticles\u002Fa9c8db07ec554f18a220cd56a7c4b952.png\", \"bed\u002Farticles\u002Faac9624338a64806bfcd09af447551c7.png\", \"bed\u002Farticles\u002Fabd67a6e9c11465ba93888d52cf8c14d.png\", \"bed\u002Farticles\u002Fac178a9872ae446da2f29d7cf3c3d353.png\", \"bed\u002Farticles\u002Fae145d3d.png\", \"bed\u002Farticles\u002Fafc04840d0e044a9bce78d13e296d0db.png\", \"bed\u002Farticles\u002Fafdd59be.png\", \"bed\u002Farticles\u002Fb080ca60.png\", \"bed\u002Farticles\u002Fb11ed0dc85d744d289365702440bac32.png\", \"bed\u002Farticles\u002Fb1ea6487.png\", \"bed\u002Farticles\u002Fb215abe45cb54041969ce36e58089284.png\", \"bed\u002Farticles\u002Fb276157f0b8c4293b2bfee524a45a4d2.png\", \"bed\u002Farticles\u002Fb313126151cb4f729047593e3eb22ea0.png\", \"bed\u002Farticles\u002Fb41c955c506d4aceb810837fd17ac643.png\", \"bed\u002Farticles\u002Fb439581461bb4dd2b71b04d4b2c57bc8.png\", \"bed\u002Farticles\u002Fb5285df693f54b9eaf6e7c48a70c929b.png\", \"bed\u002Farticles\u002Fb5bc151aeed94064bfcd729af2c59a90.png\", \"bed\u002Farticles\u002Fb6a38bb143484f8f96a1c10ba73ec107.png\", \"bed\u002Farticles\u002Fb70a702550444f6686f04d9fde38975c.png\", \"bed\u002Farticles\u002Fb78a30defc9e409994e51763ff200d30.png\", \"bed\u002Farticles\u002Fb7b0c47db9d84f63856daa197e8aedb2.png\", \"bed\u002Farticles\u002Fb8110422c75040ddb9cb8d8c8b25de31.png\", \"bed\u002Farticles\u002Fb892cb2e68a34a9098753554c47bce68.png\", \"bed\u002Farticles\u002Fb916a72feea143c9b04bc69b4626c301.png\", \"bed\u002Farticles\u002Fb9ee5172.png\", \"bed\u002Farticles\u002Fba648a66087c474890d9ba3ba7a28f9f.png\", \"bed\u002Farticles\u002Fbab12fc0.png\", \"bed\u002Farticles\u002Fbac9b21264364092b1539d492c44ac0e.png\", \"bed\u002Farticles\u002Fbadd9284c5bd4ee893a558d76f306d24.png\", \"bed\u002Farticles\u002Fbb9b73b7a0544d9694e6bd3f86295cbf.png\", \"bed\u002Farticles\u002Fbd50789f6b614211ba18df922988cc43.png\", \"bed\u002Farticles\u002Fbdff5f9f148f4c42ab3a2d4168006fb6.png\", \"bed\u002Farticles\u002Fbe14b516e06a4d5f80443cb822176989.png\", \"bed\u002Farticles\u002Fbe6c9297d3a243719ba5636bbd913c75.png\", \"bed\u002Farticles\u002Fc0c21f144daf445490f04ce96020928f.png\", \"bed\u002Farticles\u002Fc1e50146.png\", \"bed\u002Farticles\u002Fc2c876161aca4deb9bcc7d5ca00b255a.png\", \"bed\u002Farticles\u002Fc3aa1ee5.png\", \"bed\u002Farticles\u002Fc6285af6b9ac40a6b2c27599d6ea63fd.png\", \"bed\u002Farticles\u002Fc63eb1f2d7684d23b6bb6a388a7acded.png\", \"bed\u002Farticles\u002Fc67a20cef7704793832b5d26d90aeb5b.png\", \"bed\u002Farticles\u002Fc782f9edfcc84ff2960d33c45d1d2daf.png\", \"bed\u002Farticles\u002Fc79a2627.png\", \"bed\u002Farticles\u002Fc7ab5a6511c247ffaf227b46fe798fc0.png\", \"bed\u002Farticles\u002Fc8051345.png\", \"bed\u002Farticles\u002Fc82fcfa777c64112af32e7a7c03e5b74.png\", \"bed\u002Farticles\u002Fc84b93c1.png\", \"bed\u002Farticles\u002Fc956addc90074190a1b7241d1c9ffdb3.png\", \"bed\u002Farticles\u002Fc9e8a0c64e5d48cb82434f84ba0d1a0f.png\", \"bed\u002Farticles\u002Fca55787c76a348f697c69944e569f44d.png\", \"bed\u002Farticles\u002Fca6dca39.png\", \"bed\u002Farticles\u002Fcb07e92bb8b646e2b005fedff38d4f33.png\", \"bed\u002Farticles\u002Fcb3797bd0f9f474196795f93ea65e429.png\", \"bed\u002Farticles\u002Fcc3aae33.png\", \"bed\u002Farticles\u002Fcc3ab11d.png\", \"bed\u002Farticles\u002Fcd3706326e524d5bb2e695908097b1c5.png\", \"bed\u002Farticles\u002Fcd7a795c9c6e4bb099fc0a68339c2599.png\", \"bed\u002Farticles\u002Fcdea6c86feb04fc6ba8e04f17d1a66fa.png\", \"bed\u002Farticles\u002Fceb7c6c318334f1d9b3bb44cc8748569.png\", \"bed\u002Farticles\u002Fcef76743c63e470ab846803857cfd167.png\", \"bed\u002Farticles\u002Fcf1c4e0677ee44c6b6e862250c7bf0dd.png\", \"bed\u002Farticles\u002Fcfa08c55.png\", \"bed\u002Farticles\u002Fcovers\u002F6dd75bb7397043a186c001faca908fca.png\", \"bed\u002Farticles\u002Fd008810436634a80aa7f32794be41b48.png\", \"bed\u002Farticles\u002Fd0cbe86e92bf4f31945b4f0e75cea109.png\", \"bed\u002Farticles\u002Fd1d6bd49.png\", \"bed\u002Farticles\u002Fd29445e7efb446b5a7bf42aa80567b97.png\", \"bed\u002Farticles\u002Fd39a03163b4f4594a14a432e94aa2ce6.png\", \"bed\u002Farticles\u002Fd3b38059c7c74dc19e2a83be50880d85.png\", \"bed\u002Farticles\u002Fd4f19b5736cb41228abf9f40dc584753.png\", \"bed\u002Farticles\u002Fd58121fb65fe488781431519a17888a3.png\", \"bed\u002Farticles\u002Fd58b76144a8e474286c5ed3a376aee54.png\", \"bed\u002Farticles\u002Fd5957d6b5fbc4326a81a9e625adc2abd.png\", \"bed\u002Farticles\u002Fd5cdebd71c1d4e13be1e6bd4f1b46558.png\", \"bed\u002Farticles\u002Fd5fab1a2a1864544ac7ec1060f025650.png\", \"bed\u002Farticles\u002Fd695fd32e53e4be6bf8e0b81c3fe992b.png\", \"bed\u002Farticles\u002Fd701138610ef42c9a17f8002d8b7d8ac.png\", \"bed\u002Farticles\u002Fd74967da10a54e9a886efbb07b939066.png\", \"bed\u002Farticles\u002Fd8451d56640a48a5a1d2067f269564ed.png\", \"bed\u002Farticles\u002Fd87f4782.png\", \"bed\u002Farticles\u002Fd8cf96c53c354296b39db9afbe0cb431.png\", \"bed\u002Farticles\u002Fd955311a.png\", \"bed\u002Farticles\u002Fd960986053cc4f339ad29aae5daf1523.png\", \"bed\u002Farticles\u002Fd9c3a075a1ac4aadb5f05798cf48f70b.png\", \"bed\u002Farticles\u002Fd9daf9188f664d5bbc6ed90fabd070af.png\", \"bed\u002Farticles\u002Fd9f79a023c9e45c9a4577e2d5fce1128.png\", \"bed\u002Farticles\u002Fdad10216ba924782ba852f2fa331d975.png\", \"bed\u002Farticles\u002Fdbba953c17614063be68ea4498fd52f6.png\", \"bed\u002Farticles\u002Fdeb73293de1a4c258b7cef81cc21ab22.png\", \"bed\u002Farticles\u002Fe07c246b094247f6b1559adb44c3e504.png\", \"bed\u002Farticles\u002Fe0a1beb3e21e4bd8973c3566f255e7ad.png\", \"bed\u002Farticles\u002Fe10c83c6425a48e388faa4c044d9d2b0.png\", \"bed\u002Farticles\u002Fe1e06a0cacf44cbdb77ba9c140b2bd5e.png\", \"bed\u002Farticles\u002Fe20392c4e1004dd0a303d70c6b953610.png\", \"bed\u002Farticles\u002Fe3159d4d36c94d22bde150269f9e10b7.png\", \"bed\u002Farticles\u002Fe3f040b361dc4b119a4c3afbaa1866af.png\", \"bed\u002Farticles\u002Fe47aabdeb84949dcbbcb076d77995346.png\", \"bed\u002Farticles\u002Fe4881d21.webp\", \"bed\u002Farticles\u002Fe59f7f96460a4aa3b78fbe5e28cbfcee.png\", \"bed\u002Farticles\u002Fe608c92995d74400966a740d2f91b7e8.png\", \"bed\u002Farticles\u002Fe716cb18784b48549097284321ff07d2.png\", \"bed\u002Farticles\u002Fe8697dad166c4e148812977d6bc03f0b.png\", \"bed\u002Farticles\u002Fe988ee2baa694dd991969b77183f2dd2.png\", \"bed\u002Farticles\u002Fea14dae1bb624632bf15d20092e92d74.png\", \"bed\u002Farticles\u002Fecb25eaf704644429801443332e80e2f.png\", \"bed\u002Farticles\u002Fed5c2832b5e84827a5751f3d50a58036.png\", \"bed\u002Farticles\u002Fee0f407b13a2441fa21cbd34bdcb8c39.png\", \"bed\u002Farticles\u002Feefecc21920548b4857af96365ac1876.png\", \"bed\u002Farticles\u002Ff0119a775f1a43ad9cfdcd9a39f57dd8.png\", \"bed\u002Farticles\u002Ff044ca151123471596b2fb420ced8776.png\", \"bed\u002Farticles\u002Ff0978fa5c320473ca1509c2e10cd68fe.png\", \"bed\u002Farticles\u002Ff10741fb802a45acb114ae886af34186.png\", \"bed\u002Farticles\u002Ff2adf134e5ab47c6be246f64119256d7.png\", \"bed\u002Farticles\u002Ff36c654f40ff4633a29865cb98c38ddc.png\", \"bed\u002Farticles\u002Ff3b38c9ec9e241f69a98ab3d4aab6efc.png\", \"bed\u002Farticles\u002Ff3c05963062f4e1f8a45d21511579551.png\", \"bed\u002Farticles\u002Ff441fa6573f4447cb879c135d777a899.png\", \"bed\u002Farticles\u002Ff456762157204e338ba07096589b3df1.png\", \"bed\u002Farticles\u002Ff72a6cf3.png\", \"bed\u002Farticles\u002Ff758ce1b313e443c9c4386ded9c10c61.png\", \"bed\u002Farticles\u002Ff79e779b818146e0ac2ce75dd4633e19.png\", \"bed\u002Farticles\u002Ff8711ddacf804fca8160547482312f10.png\", \"bed\u002Farticles\u002Ff8987560.png\", \"bed\u002Farticles\u002Ff8dcdf76d2124302b598d3680eb71ce1.png\", \"bed\u002Farticles\u002Ffab66757.png\", \"bed\u002Farticles\u002Ffaf4d358f31a4e4293cba513d3823d60.png\", \"bed\u002Farticles\u002Ffaf8181b48ce4975a243c098ea93204d.png\", \"bed\u002Farticles\u002Ffb3019ca.png\", \"bed\u002Farticles\u002Ffb6488078b904bb8a0a68bebd770f51c.png\", \"bed\u002Farticles\u002Ffbd43bf9afbc4cb8b84c3b2fde4a5ff9.png\", \"bed\u002Farticles\u002Ffc07f95c36514ebda7a704a1e6b64f21.png\", \"bed\u002Farticles\u002Ffc4bd6d91191471f9ea6d38aa4bb6435.png\", \"bed\u002Farticles\u002Ffc66651577e243a09a1aaf41df260a07.png\", \"bed\u002Farticles\u002Ffc7e1b2951ac49c4b22f8cb5ab58d68c.png\", \"bed\u002Farticles\u002Ffd78c90167b54461a61ad0d335c0fe11.png\", \"bed\u002Farticles\u002Ffd9b363698804cf8bc94167e3cd8ba1c.png\", \"bed\u002Farticles\u002Ffdf231d5db3149e4aee3e09c1fed0ef3.png\", \"bed\u002Farticles\u002Ffe1fd4635e124b5eb8f5d4e34db6102f.png\", \"bed\u002Farticles\u002Fff2d0518c4b1491c853f43412c3afbd0.png\", \"bed\u002Fbackground\u002F3D\\u62bd\\u8c61-\\u6781\\u7b80\\u4e3b\\u4e49.jpg\", \"bed\u002Fbackground\u002Fb666b21659cc477daea62833a78c841f.jpeg\", \"bed\u002Fbackground\u002Fcustom_font.8159be3b.woff2\", \"bed\u002Fbackground\u002Fcustom_font.ttf\", \"bed\u002Fbackground\u002Fcustom_font.woff2\", \"bed\u002Fbackground\u002Fimg_2d9435d1856ba181_ZE1qdG1Belp4MmRNeWF.jpg\", \"bed\u002Fbackground\u002Fleaves.png\", \"bed\u002Fbackground\u002F\\u4e91\\u6d77-\\u597d\\u770b-\\u5c71\\u5cf0.jpg\", \"bed\u002Fbackground\u002F\\u5012\\u5f71-\\u5929\\u7a7a-\\u5c71\\u8109.jpg\", \"bed\u002Fdefault\u002F758a72eb0fe74a2295aeaee906a9503c.png\", \"bed\u002Fdefault\u002Fa1d9c7b8040e40d585e0692142d8cad1.jpg\", \"bed\u002Fmoments\u002F19cead66c3d84b07a9a45f71ca3acb87.png\", \"bed\u002Fmoments\u002F64fca5d30e274020b47fda48ae69f19f.png\", \"bed\u002Fmoments\u002F8006301cc8c946c8baa6133fc3ed69f0.png\", \"bed\u002Fmoments\u002Fa5a1a2827515402b9c5715defbb37d02.png\", \"bed\u002Fmoments\u002Fd07dbb946ed246d8bcc5bf7c4736b393.png\", \"bed\u002Fmoments\u002Fe9c778effd324af6a06c3e86bdbfb4ce.png\", \"bed\u002Fsite\u002F1d7c500ed7a049f282b7e6e83b6b40f4.png\", \"bed\u002Fsite\u002F1eada21961444b36a2de539a7c336b51.png\"]","\u002Fuploads\u002Fbed\u002Fsite\u002F1eada21961444b36a2de539a7c336b51.png","一只野猴子,没有个性,所以没有签名","true","vue3@foxmail.com","smtp.qq.com","465","[\"articles\",\"views\",\"runtime\",\"api\",\"nuxt\",\"disk\",\"memory\",\"moments\",\"comments\",\"uptime\",\"words\",\"db\"]","{\"articles\":0,\"uptime\":3000,\"runtime\":3000,\"memory\":24,\"disk\":0,\"comments\":50}","{\"articles\":\"left\",\"views\":\"right\",\"runtime\":\"right\",\"words\":\"right\",\"moments\":\"left\",\"tags\":\"right\",\"comments\":\"left\",\"disk\":\"right\",\"memory\":\"right\",\"uptime\":\"right\",\"api\":\"right\",\"db\":\"right\",\"nuxt\":\"right\"}","关于本站和我","🤝友情链接(个人链接)","#0ea5e9","#0284c7","\u002Fuploads\u002Fbed\u002Fbackground\u002Fcustom_font.8159be3b.woff2","false","    欢迎！这里没有华丽的包装,只有一个年轻人真实的成长和记录，一起学习，所有功能独立开发部署，堆积着个人生活和技术的小仓库，后续慢慢补充以前的文档；\n    无登录，均匿名，海内存知己，欢迎各位的来访！","👋 你好","","#334155","128","10000","1000","[{\"name\": \"ShowAPI IP查询\", \"url\": \"https:\u002F\u002Froute.showapi.com\u002F20-1?appKey={token}&ip={ip}\", \"token\": \"94c826C59DAf4678a17308f3f0C56644\", \"note\": \"万维易源,精确到县区100次\u002F天\", \"enabled\": true}, {\"name\": \"ipgeolocation.io\", \"url\": \"https:\u002F\u002Fapi.ipgeolocation.io\u002Fv3\u002Fipgeo?apiKey={token}&ip={ip}\", \"token\": \"07a5c93b3cb2459b90ef377cad9dc41d\", \"note\": \"精度到城市;此key曾硬编码进代码,已经换新-1k\u002F月\", \"enabled\": true}, {\"name\": \"ip-api.com\", \"url\": \"http:\u002F\u002Fip-api.com\u002Fjson\u002F{ip}?lang=zh-CN\", \"token\": \"\", \"note\": \"免费接口,精度一般\", \"enabled\": false}]","[{\"ip\": \"118.212.158.13\", \"note\": \"\"}, {\"ip\": \"223.160.216.231\", \"note\": \"\"}, {\"ip\": \"66.249.79.76\", \"note\": \"\"}, {\"ip\": \"66.249.79.64\", \"note\": \"\"}, {\"ip\": \"66.249.79.65\", \"note\": \"\"}, {\"ip\": \"223.160.218.70\", \"note\": \"\"}, {\"ip\": \"44.222.133.103\", \"note\": \"\"}, {\"ip\": \"47.243.76.182\", \"note\": \"\"}, {\"ip\": \"34.122.147.229\", \"note\": \"\"}, {\"ip\": \"35.172.150.50\", \"note\": \"\"}, {\"ip\": \"42.194.240.188\", \"note\": \"\"}, {\"ip\": \"66.249.68.3\", \"note\": \"\"}, {\"ip\": \"36.255.112.149\", \"note\": \"\"}, {\"ip\": \"223.160.219.64\", \"note\": \"\"}, {\"ip\": \"127.0.0.1\", \"note\": \"\\u672c\\u5730\"}, {\"ip\": \"223.160.217.23\", \"note\": \"\"}, {\"ip\": \"115.152.4.59\", \"note\": \"\"}, {\"ip\": \"118.212.158.206\", \"note\": \"\"}, {\"ip\": \"223.160.219.94\", \"note\": \"\"}, {\"ip\": \"223.160.217.101\", \"note\": \"\"}, {\"ip\": \"115.152.5.186\", \"note\": \"\"}, {\"ip\": \"223.160.216.113\", \"note\": \"\"}]","[{\"ip\": \"46.152.18.192\", \"note\": \"\"}]","5","75","Stop fucking scanning and brute-forcing admin panels all the time. What commercially valuable stuff could a personal blog even have? If you've got that kind of time, you'd be better off scanning a couple of porn sites","my-test-key-289354","[\"articles\",\"moments\",\"pan\",\"short-links\",\"web-hosting\"]","#38e288","[\"moments\",\"site\",\"articles\",\"background\"]","个人简介","关于本站","\u003Cdiv>\n\n  \u003Cdiv style=\"background: linear-gradient(135deg, rgba(59,130,246,.14), rgba(139,92,246,.10)); border: 1px solid rgba(255,255,255,.12); border-radius: 16px; padding: 22px 24px; margin-bottom: 18px;\">\n    \u003Ch3 style=\"margin: 0 0 10px; font-size: 20px; letter-spacing: .5px;\">👋 你好，欢迎来到我的站点\u003C\u002Fh3>\n    \u003Cp style=\"margin: 0; line-height: 1.9; font-size: 15px;\">这里是我亲手搭建的个人博客 —— 由 \u003Ccode style=\"background: rgba(0,0,0,.28); padding: 2px 7px; border-radius: 5px; font-size: 13px;\">Nuxt 3 + FastAPI + SQLite\u003C\u002Fcode> 驱动，前后端、部署、运维全部自己动手。写代码、踩坑、记录，也分享一些有意思的个人项目。\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Ch3 style=\"font-size: 17px; margin: 22px 0 10px;\">📖 关于本站\u003C\u002Fh3>\n  \u003Cp style=\"line-height: 1.9; font-size: 15px; margin: 0;\">博客的每一行代码、每一次部署都由我独立完成。文章以「实战」为主 —— 不只讲怎么做，更讲为什么这么做、以及踩过的坑，希望能给同样在路上的你一些参考。\u003C\u002Fp>\n\n  \u003Ch3 style=\"font-size: 17px; margin: 22px 0 10px;\">🧰 博客里有什么\u003C\u002Fh3>\n  \u003Cdiv style=\"display: flex; flex-wrap: wrap; gap: 10px;\">\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">✍️\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">技术文章\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">Vue \u002F Nuxt、FastAPI、Linux 运维、nginx 等实战经验\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">💬\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">碎念与随笔\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">简短的心情记录与随想，随手记下瞬间\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">🔗\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">短链\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">把长链接压缩成好记的短码，分享更轻松\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">🖼️\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">图床\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">图片托管，一键上传复制外链\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">📦\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">网盘\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">加密分享文件，设密码、限次数、可过期\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv style=\"flex: 1 1 45%; min-width: 150px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.10); border-radius: 12px; padding: 14px;\">\n      \u003Cdiv style=\"font-size: 20px;\">🌐\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-weight: 600; margin-top: 6px;\">网页托管\u003C\u002Fdiv>\n      \u003Cdiv style=\"font-size: 13px; opacity: .8; margin-top: 4px; line-height: 1.6;\">上传静态网页 zip，一键发布访问\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Ch3 style=\"font-size: 17px; margin: 22px 0 10px;\">🧭 内容方向\u003C\u002Fh3>\n  \u003Cul style=\"line-height: 1.9; font-size: 15px; margin: 0; padding-left: 20px;\">\n    \u003Cli>前后端开发与个人项目实践\u003C\u002Fli>\n    \u003Cli>解决问题的思路与踩坑记录\u003C\u002Fli>\n    \u003Cli>效率工具与折腾心得\u003C\u002Fli>\n    \u003Cli>偶尔的生活随笔与碎念\u003C\u002Fli>\n  \u003C\u002Ful>\n\n  \u003Cdiv style=\"background: rgba(34,197,94,.08); border: 1px solid rgba(34,197,94,.18); border-radius: 12px; padding: 14px 18px; margin-top: 20px;\">\n    \u003Cp style=\"margin: 0; line-height: 1.8; font-size: 14px;\">💡 \u003Cb>交流\u003C\u002Fb>：欢迎在文章评论区留言，或通过首页的社交链接找到我。如果你也喜欢折腾技术，随时来聊聊。\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n\u003C\u002Fdiv>","{\"lines\":25,\"arcs\":25,\"wave_lines\":8,\"noise\":1500,\"amplitude\":15,\"rotation\":34,\"char_len\":4}","90","[\"127.0.0.1\", \"118.212.158.206\", \"152.32.212.152\", \"223.160.216.153\", \"223.160.219.60\", \"113.195.49.14\", \"223.160.218.52\", \"223.160.219.16\"]","{\"lock_threshold\": \"5\", \"lock_duration\": \"300\", \"auto_ban_threshold\": \"10\", \"auto_ban_duration\": \"86400\", \"middleware_enabled\": \"True\", \"block_on_malicious_ua\": \"True\"}","[{\"name\": \"今日总结\", \"content\": \"今日总结:\\n    1.\\n    \"}, {\"name\": \"技术备忘\", \"content\": \"记录一个开发小技巧：\"}, {\"name\": \"心情随笔\", \"content\": \"此刻的心情是：\"}, {\"name\": \"生活日常\", \"content\": \"今天发生了这样一件事：\"}]","normal","{\"8.156.84.203\": 1}","[{\"time\": \"2026-09-21 14:04:59\", \"type\": \"memory\", \"message\": \"内存使用率 80.4% 超过阈值 75.0%\", \"value\": 80.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:59:59\", \"type\": \"memory\", \"message\": \"内存使用率 82.9% 超过阈值 75.0%\", \"value\": 82.9, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:54:59\", \"type\": \"memory\", \"message\": \"内存使用率 88.0% 超过阈值 75.0%\", \"value\": 88.0, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:54:56\", \"type\": \"memory\", \"message\": \"内存使用率 88.3% 超过阈值 75.0%\", \"value\": 88.3, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:49:56\", \"type\": \"memory\", \"message\": \"内存使用率 88.1% 超过阈值 75.0%\", \"value\": 88.1, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:44:56\", \"type\": \"memory\", \"message\": \"内存使用率 86.4% 超过阈值 75.0%\", \"value\": 86.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:39:56\", \"type\": \"memory\", \"message\": \"内存使用率 91.4% 超过阈值 75.0%\", \"value\": 91.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:39:53\", \"type\": \"memory\", \"message\": \"内存使用率 90.5% 超过阈值 75.0%\", \"value\": 90.5, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:34:53\", \"type\": \"memory\", \"message\": \"内存使用率 89.9% 超过阈值 75.0%\", \"value\": 89.9, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:29:53\", \"type\": \"memory\", \"message\": \"内存使用率 90.7% 超过阈值 75.0%\", \"value\": 90.7, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:24:53\", \"type\": \"memory\", \"message\": \"内存使用率 91.6% 超过阈值 75.0%\", \"value\": 91.6, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:19:53\", \"type\": \"memory\", \"message\": \"内存使用率 91.2% 超过阈值 75.0%\", \"value\": 91.2, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:14:53\", \"type\": \"memory\", \"message\": \"内存使用率 88.4% 超过阈值 75.0%\", \"value\": 88.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:09:53\", \"type\": \"memory\", \"message\": \"内存使用率 86.7% 超过阈值 75.0%\", \"value\": 86.7, \"threshold\": 75.0}, {\"time\": \"2026-09-21 13:04:53\", \"type\": \"memory\", \"message\": \"内存使用率 86.4% 超过阈值 75.0%\", \"value\": 86.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:59:53\", \"type\": \"memory\", \"message\": \"内存使用率 84.3% 超过阈值 75.0%\", \"value\": 84.3, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:54:53\", \"type\": \"memory\", \"message\": \"内存使用率 85.6% 超过阈值 75.0%\", \"value\": 85.6, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:54:50\", \"type\": \"memory\", \"message\": \"内存使用率 85.8% 超过阈值 75.0%\", \"value\": 85.8, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:49:50\", \"type\": \"memory\", \"message\": \"内存使用率 83.0% 超过阈值 75.0%\", \"value\": 83.0, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:44:50\", \"type\": \"memory\", \"message\": \"内存使用率 81.4% 超过阈值 75.0%\", \"value\": 81.4, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:39:50\", \"type\": \"memory\", \"message\": \"内存使用率 75.3% 超过阈值 75.0%\", \"value\": 75.3, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:32:35\", \"type\": \"memory\", \"message\": \"内存使用率 80.3% 超过阈值 75.0%\", \"value\": 80.3, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:27:35\", \"type\": \"memory\", \"message\": \"内存使用率 79.9% 超过阈值 75.0%\", \"value\": 79.9, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:27:29\", \"type\": \"memory\", \"message\": \"内存使用率 79.6% 超过阈值 75.0%\", \"value\": 79.6, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:22:29\", \"type\": \"memory\", \"message\": \"内存使用率 81.1% 超过阈值 75.0%\", \"value\": 81.1, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:17:28\", \"type\": \"memory\", \"message\": \"内存使用率 80.7% 超过阈值 75.0%\", \"value\": 80.7, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:12:28\", \"type\": \"memory\", \"message\": \"内存使用率 79.1% 超过阈值 75.0%\", \"value\": 79.1, \"threshold\": 75.0}, {\"time\": \"2026-09-21 12:07:28\", \"type\": \"memory\", \"message\": \"内存使用率 76.6% 超过阈值 75.0%\", \"value\": 76.6, \"threshold\": 75.0}, {\"time\": \"2026-09-21 11:57:28\", \"type\": \"memory\", \"message\": \"内存使用率 77.2% 超过阈值 75.0%\", \"value\": 77.2, \"threshold\": 75.0}, {\"time\": \"2026-09-20 21:26:03\", \"type\": \"memory\", \"message\": \"内存使用率 97.6% 超过阈值 75.0%\", \"value\": 97.6, \"threshold\": 75.0}, {\"time\": \"2026-09-20 21:16:03\", \"type\": \"memory\", \"message\": \"内存使用率 78.9% 超过阈值 75.0%\", \"value\": 78.9, \"threshold\": 75.0}, {\"time\": \"2026-09-20 21:15:28\", \"type\": \"memory\", \"message\": \"内存使用率 77.8% 超过阈值 75.0%\", \"value\": 77.8, \"threshold\": 75.0}, {\"time\": \"2026-09-20 17:15:51\", \"type\": \"memory\", \"message\": \"内存使用率 82.9% 超过阈值 75.0%\", \"value\": 82.9, \"threshold\": 75.0}, {\"time\": \"2026-09-20 17:10:51\", \"type\": \"memory\", \"message\": \"内存使用率 78.9% 超过阈值 75.0%\", \"value\": 78.9, \"threshold\": 75.0}, {\"time\": \"2026-09-20 17:05:51\", \"type\": \"memory\", \"message\": \"内存使用率 78.5% 超过阈值 75.0%\", \"value\": 78.5, \"threshold\": 75.0}, {\"time\": \"2026-09-20 17:05:27\", \"type\": \"memory\", \"message\": \"内存使用率 78.0% 超过阈值 75.0%\", \"value\": 78.0, \"threshold\": 75.0}, {\"time\": \"2026-09-20 17:00:32\", \"type\": \"memory\", \"message\": \"内存使用率 76.8% 超过阈值 75.0%\", \"value\": 76.8, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:55:32\", \"type\": \"memory\", \"message\": \"内存使用率 78.1% 超过阈值 75.0%\", \"value\": 78.1, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:50:32\", \"type\": \"memory\", \"message\": \"内存使用率 76.2% 超过阈值 75.0%\", \"value\": 76.2, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:45:32\", \"type\": \"memory\", \"message\": \"内存使用率 84.2% 超过阈值 75.0%\", \"value\": 84.2, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:45:28\", \"type\": \"memory\", \"message\": \"内存使用率 84.3% 超过阈值 75.0%\", \"value\": 84.3, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:40:28\", \"type\": \"memory\", \"message\": \"内存使用率 75.1% 超过阈值 75.0%\", \"value\": 75.1, \"threshold\": 75.0}, {\"time\": \"2026-09-20 16:25:28\", \"type\": \"memory\", \"message\": \"内存使用率 76.6% 超过阈值 75.0%\", \"value\": 76.6, \"threshold\": 75.0}, {\"time\": \"2026-09-20 15:01:43\", \"type\": \"memory\", \"message\": \"内存使用率 81.4% 超过阈值 75.0%\", \"value\": 81.4, \"threshold\": 75.0}, {\"time\": \"2026-09-20 14:56:42\", \"type\": \"memory\", \"message\": \"内存使用率 80.9% 超过阈值 75.0%\", \"value\": 80.9, \"threshold\": 75.0}, {\"time\": \"2026-09-20 14:51:42\", \"type\": \"memory\", \"message\": \"内存使用率 78.7% 超过阈值 75.0%\", \"value\": 78.7, \"threshold\": 75.0}, {\"time\": \"2026-09-20 14:36:42\", \"type\": \"memory\", \"message\": \"内存使用率 75.7% 超过阈值 75.0%\", \"value\": 75.7, \"threshold\": 75.0}, {\"time\": \"2026-09-20 11:52:51\", \"type\": \"memory\", \"message\": \"内存使用率 91.6% 超过阈值 75.0%\", \"value\": 91.6, \"threshold\": 75.0}, {\"time\": \"2026-09-20 11:47:51\", \"type\": \"memory\", \"message\": \"内存使用率 90.6% 超过阈值 75.0%\", \"value\": 90.6, \"threshold\": 75.0}, {\"time\": \"2026-09-19 14:43:44\", \"type\": \"memory\", \"message\": \"内存使用率 75.4% 超过阈值 75.0%\", \"value\": 75.4, \"threshold\": 75.0}]","{\"window\":60,\"max\":2}","[{\"key\":\"home\",\"to\":\"\u002F\",\"label\":\"首页\",\"enabled\":true},{\"key\":\"categories\",\"to\":\"\u002Fcategories\",\"label\":\"分类\",\"enabled\":true},{\"key\":\"tags\",\"to\":\"\u002Ftags\",\"label\":\"标签\",\"enabled\":false},{\"key\":\"pan\",\"to\":\"\u002Fpan\",\"label\":\"网盘\",\"enabled\":true},{\"key\":\"uploads\",\"to\":\"\u002Fuploads\",\"label\":\"图床\",\"enabled\":true},{\"key\":\"host\",\"to\":\"\u002Fhost\",\"label\":\"托管\",\"enabled\":true},{\"key\":\"short\",\"to\":\"\u002Fshort\",\"label\":\"短链\",\"enabled\":true},{\"key\":\"moments\",\"to\":\"\u002Fmoments\",\"label\":\"碎念\",\"enabled\":true},{\"key\":\"about\",\"to\":\"\u002Fabout\",\"label\":\"关于\",\"enabled\":true}]","3","60","0","#1a1a1a","{\"enabled\": false, \"question\": \"手机电量刚好卡在“73%”时，你的内心潜台词是？\", \"type\": \"single\", \"max\": null, \"options\": [\"73%≈满电，今天不用带充电器了（乐观主义）\", \"73%看着好难受，我必须给它充到80%整（整数强迫症）\", \"7+3=10，这是个吉利的完美数字，保持住别动\", \"什么？我手机还有电？我还以为早该自动关机了...\"], \"comment_enabled\": true, \"show_result\": true, \"bypass_ips\": [], \"start_at\": \"2026-09-07T09:18\", \"expire_at\": \"2026-09-14T09:18\"}","12","15","1","all","站点测速","10","[\"server\",\"quick\",\"todos\",\"visits\",\"categories\",\"topArticles\"]","{\"quick\":[\"articles\",\"comments\",\"moments\",\"uploads\",\"pan\",\"short-links\",\"categories\",\"web-hosting\",\"licenses\",\"tools\",\"access-logs\",\"settings\"],\"todos\":[\"comments\",\"drafts\",\"trash\"],\"alertCpuSoft\":75,\"alertCpuHard\":85,\"alertDiskSoft\":75,\"alertDiskHard\":85,\"alertMemSoft\":75,\"alertMemHard\":85,\"showPv\":true,\"showUv\":true,\"showCpu\":true,\"showNet\":false,\"showDbSize\":true}","[\"resource\",\"service\"]","[{\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002F%E4%BA%91%E6%B5%B7-%E5%A5%BD%E7%9C%8B-%E5%B1%B1%E5%B3%B0.jpg\", \"name\": \"云海-好看-山峰.jpg\", \"size\": 851319, \"mtime\": \"2026-09-14T20:30:09.127912\"}, {\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002Fb666b21659cc477daea62833a78c841f.jpeg\", \"name\": \"b666b21659cc477daea62833a78c841f.jpeg\", \"size\": 78346, \"mtime\": \"2026-07-19T06:28:48.549580\"}, {\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002F%E5%80%92%E5%BD%B1-%E5%A4%A9%E7%A9%BA-%E5%B1%B1%E8%84%89.jpg\", \"name\": \"倒影-天空-山脉.jpg\", \"size\": 1388908, \"mtime\": \"2026-09-20T14:55:03.435790\"}, {\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002F3D%E6%8A%BD%E8%B1%A1-%E6%9E%81%E7%AE%80%E4%B8%BB%E4%B9%89.jpg\", \"name\": \"3D抽象-极简主义.jpg\", \"size\": 115227, \"mtime\": \"2026-09-20T16:15:14.377162\"}, {\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002Fimg_2d9435d1856ba181_ZE1qdG1Belp4MmRNeWF.jpg\", \"name\": \"img_2d9435d1856ba181_ZE1qdG1Belp4MmRNeWF.jpg\", \"size\": 821740, \"mtime\": \"2026-09-20T16:15:52.191378\"}, {\"url\": \"\u002Fuploads\u002Fbed\u002Fbackground\u002Fleaves.png\", \"name\": \"leaves.png\", \"size\": 759938, \"mtime\": \"2026-09-21T19:20:45.395697\"}]","auto","30","18","[{\"n\":\"时间管理大师\",\"i\":0},{\"n\":\"ECS爱好者\",\"i\":0},{\"n\":\"Ubuntu\",\"i\":0},{\"n\":\"Nginx\",\"i\":0},{\"n\":\"systemd\",\"i\":0},{\"n\":\"CI-CD\",\"i\":0},{\"n\":\"SSH\",\"i\":0},{\"n\":\"FastAPI\",\"i\":0},{\"n\":\"Docker\",\"i\":0},{\"n\":\"Hysteria2\",\"i\":0},{\"n\":\"Gunicorn\",\"i\":0},{\"n\":\"琐碎内容写多了冗余,不写了\",\"i\":0}]","{\"很不想熬夜\":\"violet\"}","1440","scroll","150","[{\"key\":\"overview\",\"enabled\":true},{\"key\":\"articles\",\"enabled\":true},{\"key\":\"categories\",\"enabled\":true},{\"key\":\"tags\",\"enabled\":false},{\"key\":\"comments\",\"enabled\":true},{\"key\":\"moments\",\"enabled\":true},{\"key\":\"uploads\",\"enabled\":true},{\"key\":\"pan\",\"enabled\":true},{\"key\":\"short-links\",\"enabled\":true},{\"key\":\"web-hosting\",\"enabled\":false},{\"key\":\"licenses\",\"enabled\":true},{\"key\":\"tools\",\"enabled\":false},{\"key\":\"access-logs\",\"enabled\":true},{\"key\":\"settings\",\"enabled\":true}]","\u002Fuploads\u002Fbed\u002Fbackground\u002F%E4%BA%91%E6%B5%B7-%E5%A5%BD%E7%9C%8B-%E5%B1%B1%E5%B3%B0.jpg",{"active_scale":67,"active_translate_y":62,"bare_bg_opacity":86,"bare_bg_opacity_dark":87,"bare_blur":88,"bg_opacity":89,"bg_opacity_dark":90,"blur":91,"border_opacity":92,"border_radius":76,"hover_scale":67,"hover_translate_y":67,"l_bg_opacity":93,"l_bg_opacity_dark":94,"l_blur":40,"l_border_opacity":95,"mobile_flat_card":96,"nav_border_radius":97,"nav_padding_x":98,"nav_padding_y":99,"padding":100,"shadow_intensity":61,"t_bg_opacity":101,"t_bg_opacity_dark":92,"t_blur":76,"t_border_opacity":92,"t_shadow_intensity":61,"avatar_glow_animate":102,"mobile_layer_opt":103,"mobile_cvis":103,"mobile_skip_webfont":103,"entrance_animation":102,"toc_style_desktop":104,"toc_style_mobile":105,"nav_menu_bg_opacity":106,"nav_menu_bg_opacity_dark":107,"bubble_bg_opacity":108,"bubble_bg_opacity_dark":92,"bubble_blur":109,"bubble_radius":76,"bubble_tail":97,"bubble_padding":67,"bubble_border_opacity":92,"bubble_shadow":90,"bubble_collapse":110,"poem_bg_opacity":87,"poem_bg_opacity_dark":95,"poem_blur":111,"poem_radius":76,"poem_tail":97,"poem_padding":112,"poem_border_opacity":92,"poem_font_scale":67,"poem_line_height":113,"poem_collapse":114,"nav_menu_padding_x":115,"nav_menu_padding_y":99,"nav_menu_item_radius":116,"nav_menu_radius":117,"nav_menu_width":118,"nav_menu_item_width":51,"nav_menu_blur":62,"tip_bg_opacity":101,"tip_bg_opacity_dark":92,"tip_border_opacity":92,"tip_blur":76,"tip_radius":65,"tip_padding_x":98,"tip_padding_y":99},"0.15","0.06","8","0.2","0.6","50","0.4","0.05","0.03","0.3","flat","0.5","0.75","0.375","1.5","0.1","desktop","on","glass","glass-t","0.38","0.8","0.12","26","200","14","0.85","1.95","320","0.25","1.125","1.25","5.75",{"title":120,"slug":121,"content_md":122,"summary":123,"cover_image":32,"category_id":124,"is_published":125,"is_top":126,"top_order":127,"is_deleted":126,"allow_comment":125,"meta":128,"id":129,"created_at":130,"updated_at":131,"published_at":130,"category":132,"tags":137},"博客系统架构与设计","blog-system-architecture","# Blog 项目架构与开发部署文档\n\n> [blog.vue2.xyz](https:\u002F\u002Fblog.vue2.xyz) — 个人博客系统\n> 技术栈：Nuxt.js 3 (SSR) + FastAPI + SQLite\n> 文档日期：2026-06-23\n\n---\n\n## 1. 项目概况\n\n个人博客系统，支持文章发布、标签分类、评论审核、全文搜索、RSS 订阅、后台管理、临时网盘等功能。部署在韩国首尔服务器（\u003C服务器IP>），与 MyChat 项目同机共存。\n\n---\n\n## 2. 技术栈\n\n| 层级 | 技术 | 说明 |\n|------|------|------|\n| 前端框架 | Nuxt.js 3 (SSR) | Vue 3 全栈框架，服务端渲染支持 SEO |\n| 样式 | Tailwind CSS | 响应式设计，参考 MapleBlog 毛玻璃质感 |\n| 后端框架 | FastAPI (Python) | 类型安全，自动 Swagger 文档 |\n| 数据库 | SQLite + SQLAlchemy | 单用户博客零运维成本 |\n| WSGI 服务器 | Gunicorn + Uvicorn | 生产级 Python Web 服务 |\n| 反向代理 | Nginx | HTTPS 卸载、静态文件直出、请求分发 |\n| 进程管理 | systemd | blog-api、blog-web 各一个 service |\n| 认证 | JWT (python-jose) | 无状态 token，7 天有效期 |\n\n---\n\n## 3. 系统架构\n\n### 请求流程\n\n```\n用户 → blog.vue2.xyz:443\n           ↓\n        Nginx (SSL 终止)\n       \u002F        |        \\\n      \u002Fapi\u002F*   \u002F_nuxt\u002F*   \u002F(其他页面)\n      |        |          |\n   FastAPI   Nuxt SSR    Nuxt SSR\n   :8001      :3000       :3000\n      |        |             |\n    SQLite   静态资源     FastAPI (SSR 时拉数据)\n```\n\n1. 用户访问 `https:\u002F\u002Fblog.vue2.xyz\u002F`\n2. Nginx 443 端口接收，SSL 终止\n3. Nginx 路径分发：\n   - `\u002Fapi\u002F*` → 反向代理到 FastAPI (127.0.0.1:8001)\n   - `\u002F_nuxt\u002F*` → 反向代理到 Nuxt SSR (127.0.0.1:3000) 的构建资源\n   - `\u002Fuploads\u002F*` → Nginx 直出静态文件（缓存 3 天）\n   - 其余路径 → Nuxt.js SSR (127.0.0.1:3000)\n4. Nuxt SSR 阶段，需要数据的页面（如文章详情）内部请求 FastAPI API\n5. FastAPI 操作 SQLite 数据库，返回 JSON\n6. Nuxt 将数据嵌入完整 HTML，返回给浏览器\u002F爬虫\n\n### 端口映射\n\n| 服务 | 端口 | 绑定地址 | 说明 |\n|------|------|----------|------|\n| Nginx | 443\u002F80 | 0.0.0.0 | HTTPS\u002FHTTP，对外公开 |\n| FastAPI | 8001 | 127.0.0.1 | 仅 Nginx 访问 |\n| Nuxt SSR | 3000 | 127.0.0.1 | 仅 Nginx 访问 |\n| SSH | 2894 | 0.0.0.0 | 非默认端口 |\n\n---\n\n## 4. 数据库设计\n\n### 4.1 Article（文章）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| title | VARCHAR | 文章标题 |\n| slug | VARCHAR UNIQUE | URL 标识 |\n| content_md | TEXT | Markdown 原文 |\n| content_html | TEXT | 缓存渲染后的 HTML |\n| summary | VARCHAR | 摘要 |\n| cover_image | VARCHAR | 封面图 URL |\n| category_id | INT FK | 所属分类 |\n| is_published | BOOL | 是否发布 |\n| is_top | BOOL | 是否置顶 |\n| allow_comment | BOOL | 允许评论 |\n| meta | JSON | 扩展信息 |\n| created_at | DATETIME | 创建时间 |\n| updated_at | DATETIME | 更新时间 |\n| published_at | DATETIME | 发布时间 |\n\n### 4.2 Category（分类）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| name | VARCHAR | 名称 |\n| slug | VARCHAR | URL 标识 |\n| description | TEXT | 描述 |\n| type | VARCHAR | 默认 'blog' |\n\n### 4.3 Tag（标签）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| name | VARCHAR | 名称 |\n| slug | VARCHAR | URL 标识 |\n| type | VARCHAR | 默认 'blog' |\n\n### 4.4 Comment（评论）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| article_id | INT FK | 所属文章 |\n| parent_id | INT FK | 父评论（楼中楼预留） |\n| author | VARCHAR | 昵称 |\n| email | VARCHAR | 邮箱 |\n| content | TEXT | 评论内容 |\n| is_approved | BOOL | 审核通过 |\n| is_pinned | BOOL | 置顶 |\n| created_at | DATETIME | 创建时间 |\n\n### 4.5 Admin（管理员）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| username | VARCHAR | 用户名 |\n| password_hash | VARCHAR | 密码哈希（SHA256） |\n| nickname | VARCHAR | 显示名 |\n| avatar | VARCHAR | 头像 URL |\n\n### 4.6 SiteSetting（站点配置 key-value）\n\n| 常用 key | 说明 |\n|----------|------|\n| site_name | 站点名称 |\n| author_name | 作者名 |\n| author_avatar | 头像 base64 或 URL |\n| author_tags | 技能标签 JSON 数组 |\n| social_links | 社交链接 JSON 数组 |\n| background_url | 背景图 URL |\n| github_url \u002F email | 旧版社交链接 |\n\n### 4.7 Share（网盘文件）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| file_name | VARCHAR | 原始文件名 |\n| file_path | VARCHAR | 服务器路径 |\n| file_size | INT | 字节数 |\n| password_hash | VARCHAR | 下载密码 SHA256 |\n| password_plain | VARCHAR | 下载密码明文 |\n| download_limit | INT | 下载限制（0=不限） |\n| download_count | INT | 已下载次数 |\n| expire_at | DATETIME | 过期时间 |\n| created_at | DATETIME | 创建时间 |\n\n### 4.8 DownloadLog（下载记录）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| id | INT PK | 自增主键 |\n| share_id | INT FK | 所属文件 |\n| downloaded_at | DATETIME | 下载时间 |\n\n---\n\n## 5. API 接口\n\n### 公开接口\n\n```\nGET    \u002Fapi\u002Farticles             文章列表（分页，支持 ?page=&size=&category=&tag=）\nGET    \u002Fapi\u002Farticles\u002F{slug}      文章详情\nGET    \u002Fapi\u002Fcategories           分类列表\nGET    \u002Fapi\u002Ftags                 标签列表\nGET    \u002Fapi\u002Fsearch?q=xxx         全文搜索\nPOST   \u002Fapi\u002Fcomments             提交评论\nGET    \u002Fapi\u002Fcomments\u002F{id}        评论列表\nGET    \u002Fapi\u002Ffeed\u002Frss             RSS 订阅\nGET    \u002Fapi\u002Fsite                 站点信息（名称、头像、背景图等）\nGET    \u002Fapi\u002Fsitemap.xml          SEO sitemap\n```\n\n### 网盘接口\n\n```\nPOST   \u002Fapi\u002Fpan\u002Fupload                   上传（需管理员密码验证）\nPOST   \u002Fapi\u002Fpan\u002F{id}\u002Fverify              验证下载密码，返回临时 token\nGET    \u002Fapi\u002Fpan\u002F{id}\u002Fdownload            下载文件（需 token，5min 有效）\nGET    \u002Fapi\u002Fpan                          文件列表（需 JWT）\nGET    \u002Fapi\u002Fpan\u002F{id}\u002Flogs                下载记录（需 JWT）\nDELETE \u002Fapi\u002Fpan\u002F{id}                     删除文件（需 JWT）\n```\n\n### 管理接口（需 JWT）\n\n```\nPOST   \u002Fapi\u002Fauth\u002Flogin                   登录\nPOST   \u002Fapi\u002Fauth\u002Fchange-password         修改密码\nPOST   \u002Fapi\u002Fadmin\u002Farticles               创建文章\nPUT    \u002Fapi\u002Fadmin\u002Farticles\u002F{id}          编辑文章\nDELETE \u002Fapi\u002Fadmin\u002Farticles\u002F{id}          删除\nGET    \u002Fapi\u002Fadmin\u002Farticles               列表（支持 ?q= 标题搜索）\nPATCH  \u002Fapi\u002Fadmin\u002Farticles\u002F{id}\u002Fpublish  发布\u002F下架\nPOST   \u002Fapi\u002Fadmin\u002Fcategories             新增分类\nDELETE \u002Fapi\u002Fadmin\u002Fcategories\u002F{id}        删除\nPOST   \u002Fapi\u002Fadmin\u002Ftags                   新增标签\nDELETE \u002Fapi\u002Fadmin\u002Ftags\u002F{id}              删除\nGET    \u002Fapi\u002Fadmin\u002Fcomments               评论列表\nPOST   \u002Fapi\u002Fadmin\u002Fcomments\u002F{id}\u002Fapprove  审核通过\nDELETE \u002Fapi\u002Fadmin\u002Fcomments\u002F{id}          删除\nPOST   \u002Fapi\u002Fadmin\u002Fupload                 上传图片（压缩 + quality 优化）\nPUT    \u002Fapi\u002Fadmin\u002Fsite                   更新站点配置\n```\n\n### 安全机制\n\n- JWT 7 天有效期，存 cookie\n- API 401 自动清除 cookie 跳转登录页\n- 评论默认不显示，需后台审核通过\n- 网盘双重验证：密码 → token（5min 窗口）→ 文件下载\n- 密码 SHA256 存储\n- 上传图片缩放 + quality 压缩\n\n---\n\n## 6. 前端页面\n\n```\npages\u002F\n├── index.vue            首页（个人名片 + 文章瀑布流）\n├── p\u002F[slug].vue         文章详情（TOC + 分享 + 目录锚点）\n├── categories.vue       分类列表\n├── c\u002F[slug].vue         分类文章列表（分页）\n├── tags.vue             标签云\n├── t\u002F[slug].vue         标签文章列表（分页）\n├── search.vue           搜索\n├── about.vue            关于页\n├── pan\u002F\n│   ├── index.vue        网盘上传（需管理员密码）\n│   └── [id].vue         网盘下载（需密码验证）\n└── admin\u002F\n    ├── login.vue        登录\n    ├── index.vue        文章管理（搜索 + 列表）\n    ├── edit\u002F[id].vue    编辑器（分栏实时预览）\n    ├── comments.vue     评论审核\n    ├── pan.vue          网盘管理\n    ├── settings.vue     站点设置（含修改密码）\n    ├── categories.vue   分类管理\n    └── tags.vue         标签管理\n```\n\n### 核心组件\n\n| 组件 | 作用 |\n|------|------|\n| `AppHeader.vue` | 导航栏（桌面完整 + 移动端折叠菜单） |\n| `BackButton.vue` | 粘性返回按钮，根据路由名称显示对应标签 |\n| `GlassCard.vue` | 毛玻璃卡片容器 |\n| `BackToTop.vue` | 滚动 300px 后显示返回顶部按钮 |\n| `ArticleCard.vue` | 文章摘要卡片（整张可点击） |\n| `ArticleMeta.vue` | 文章元信息（日期、阅读量、标签） |\n| `ContentRenderer.vue` | Markdown 转 HTML 渲染 |\n| `TagBadge.vue` | 标签徽章（循环配色） |\n| `CommentSection.vue` | 评论区 |\n| `SearchBar.vue` | 搜索输入框 |\n| `ThemeToggle.vue` | 主题切换（亮\u002F暗\u002F跟随系统） |\n| `Pagination.vue` | 分页导航（7 页截断模式） |\n\n---\n\n## 7. 样式体系\n\n### 毛玻璃（Glassmorphism）\n\n| 类名 | blur | 背景 | 用途 |\n|------|------|------|------|\n| `.glass` | 20px | 18% 白 | 导航栏、主卡片 |\n| `.glass-t` | 10px | 10% 白 | 侧边栏、二级面板 |\n| `.glass-l` | 5px | 5% 白 | 标签、小元素 |\n| `.glass-bare` | 8px | 15% 白 | 浮动层 |\n\n- 双 inset 高光 + 弹性缓动曲线 `cubic-bezier(0.175, 0.885, 0.32, 2.2)`\n- SVG 液态玻璃滤镜（`#glass-distortion`）：`feTurbulence` + `feDisplacementMap`\n- 渐变背景 `#1a1a2e → #0d0d14`，支持自定义背景图覆盖\n- 文章卡片渐入动画（`stagger-fade-in`），hover 悬停效果\n- 标签循环配色：6 种低饱和颜色轮换（blue\u002Femerald\u002Fviolet\u002Famber\u002Frose\u002Fcyan），20% 不透明度\n\n---\n\n## 8. 目录结构\n\n```\n\u003C项目路径>\\\n├── frontend\u002F\n│   ├── pages\u002F              # 14 个页面\n│   │   ├── pan\u002F            # 网盘页面\n│   │   └── admin\u002F          # 后台管理\n│   ├── components\u002F\n│   │   ├── base\u002F           # 通用组件（AppHeader, BackButton 等）\n│   │   ├── blog\u002F           # 博客组件（ArticleCard, CommentSection 等）\n│   │   ├── search\u002F         # 搜索组件\n│   │   └── admin\u002F          # 后台组件\n│   ├── composables\u002F        # useApi, useAuth\n│   ├── layouts\u002F            # default.vue, admin.vue\n│   ├── middleware\u002F         # auth.ts 路由守卫\n│   ├── assets\u002Fcss\u002F         # main.css（毛玻璃 + 组件样式）\n│   ├── public\u002F             # robots.txt 等静态文件\n│   └── nuxt.config.ts\n├── backend\u002F\n│   ├── main.py             # FastAPI 入口 + CORS + 路由注册\n│   ├── config.py           # 配置（DB、JWT、上传路径）\n│   ├── database.py         # SQLAlchemy 引擎 + 会话管理\n│   ├── models.py           # 8 个 ORM 模型\n│   ├── schemas.py          # Pydantic 请求\u002F响应模型\n│   ├── auth.py             # JWT 认证工具\n│   ├── routers\u002F\n│   │   ├── articles.py     # 公开文章接口\n│   │   ├── categories.py   # 公开分类接口\n│   │   ├── tags.py         # 公开标签接口\n│   │   ├── comments.py     # 公开评论接口\n│   │   ├── search.py       # 搜索接口\n│   │   ├── feed.py         # RSS 订阅\n│   │   ├── site.py         # 站点信息\n│   │   ├── pan.py          # 网盘\n│   │   ├── sitemap.py      # SEO\n│   │   └── admin\u002F          # 后台管理接口\n│   ├── utils\u002Fmarkdown.py   # Markdown 渲染工具\n│   └── requirements.txt\n├── data\u002F                   # 运行时数据（不提交 git）\n│   ├── blog.db             # SQLite 数据库\n│   ├── uploads\u002F            # 上传的图片\n│   └── pan\u002F                # 网盘文件\n├── deploy\u002F\n│   ├── deploy.py           # 一键部署工具\n│   ├── sync-db.py          # 数据库同步（旧版，建议用 deploy.py）\n│   ├── blog-api.service    # systemd 后端服务配置\n│   ├── blog-web.service    # systemd 前端 SSR 服务配置\n│   └── nginx-blog.conf     # Nginx 站点配置\n├── docs\u002F\n│   └── architecture.md     # 本文档\n├── start.bat               # 本地一键启动前后端\n└── README.md\n```\n\n---\n\n## 9. 本地开发\n\n### 环境需求\n\n- Python 3.11+\n- Node.js 20+\n- npm\n\n### 方式一：一键启动\n\n双击 `start.bat`，同时启动后端（:8001）和前端（:3000）。\n\n### 方式二：分别启动\n\n**后端：**\n```bash\ncd \u003C项目路径>\\backend\nsource venv\u002FScripts\u002Factivate\nuvicorn main:app --reload --host 0.0.0.0 --port 8001\n```\n\n**前端：**\n```bash\ncd \u003C项目路径>\\frontend\nnpm install\nnpm run dev\n```\n\n访问 `http:\u002F\u002Flocalhost:3000`，后台 `http:\u002F\u002Flocalhost:3000\u002Fadmin`\n\n**注意：** 本地开发通过 Vite proxy 转接 `\u002Fapi` 和 `\u002Fuploads` 到后端 8001 端口，无需 Nginx。\n\n### 首次运行初始化\n\n```bash\n# 后端依赖\ncd \u003C项目路径>\\backend\npython -m venv venv\npip install -r requirements.txt\n\n# 前端依赖\ncd \u003C项目路径>\\frontend\nnpm install\n```\n\n---\n\n## 10. 部署\n\n详见 [deploy.md](deploy.md) — 包含服务器信息、首次部署、日常更新、数据库同步、服务器维护等完整流程。\n\n### 快速部署\n\n```bash\ncd \u003C项目路径>\npython deploy\u002Fdeploy.py\n```\n\n菜单选项：\n- **1 - 完整部署**：构建前端 → 打包前后端 → SCP 上传 → 服务器解压重启\n- **2 - 数据库同步**：下载（服务器→本地）\u002F 上传（本地→服务器）\n\n---\n\n## 11. 功能清单\n\n### 前台\n\n| 功能 | 说明 |\n|------|------|\n| 个人名片 | 毛玻璃卡片 + 头像 + 技能标签 + 社交图标 |\n| 技能标签 | 后台可编辑，前台循环配色 |\n| 社交图标 | 10+ 平台，后台管理增删 |\n| 文章卡片 | 渐入动画 + 标签 + 蓝色边框悬停效果 |\n| 文章目录 | 自动提取 h2-h4，锚点跳转带偏移补偿 |\n| 返回顶部 | 滚动 300px 后出现 |\n| 粘性返回按钮 | 根据路由显示对应上下文标签 |\n| 毛玻璃质感 | SVG 液态滤镜 + 双 inset 高光 |\n| 页面动画 | 淡入 + 上移入场 |\n| 分页导航 | 7 页截断模式（1 ... n-1 n n+1 ... last） |\n| SEO | Nuxt SSR + robots.txt + sitemap.xml |\n| 临时网盘 | 上传\u002F密码验证\u002Ftoken 下载 |\n\n### 后台\n\n| 功能 | 说明 |\n|------|------|\n| 文章搜索 | 标题模糊搜索 + 防抖 |\n| Markdown 编辑器 | 分栏实时预览 |\n| 文章状态 | 草稿 \u002F 已发布 \u002F 置顶 |\n| 移动端适配 | 汉堡菜单 + 卡片式布局 |\n| 评论审核 | 待审核 → 通过\u002F删除 |\n| 修改密码 | 需原密码验证 |\n| 退出登录 | 清除 token + 跳转 |\n| 401 自动跳转 | 全局 axios 拦截器 |\n| 图片上传 | gif\u002Fjpg\u002Fpng\u002Fwebp，自动缩放 + quality 优化 |\n| 站点配置 | 名称\u002F头像\u002F背景图\u002F技能标签\u002F社交链接 |\n| 网盘管理 | 查看文件\u002F下载记录\u002F复制链接\u002F删除 |\n\n---\n\n## 12. 踩坑记录\n\n1. **bcrypt 版本**：passlib 1.7.4 与 bcrypt 5.x 不兼容，需 `pip install bcrypt==4.0.1`\n2. **Node.js 版本**：Nuxt 3.13+ 需要 Node.js ≥ v20，Ubuntu apt 上的 v18 不够，需从 nodesource 安装\n3. **SQLAlchemy cascade**：自引用 Comment.replies 的 `cascade=\"all, delete-orphan\"` 会报错，去掉即可\n4. **相对导入**：`from . import models` 在 uvicorn main:app 模式下失败，需用绝对导入 `import models`\n5. **Windows 路径**：SQLite URL 需要 `.as_posix()` 转正斜杠\n6. **平台绑定依赖**：npm install 在 Windows 上产生的 native binding，服务器上需 `rm -rf node_modules package-lock.json` 后重新 install\n7. **Pydantic v2**：NULL 值字段（如 summary=None）会被严格模式拒绝，schema 定义需设 `= \"\"` 默认值\n8. **Nginx body 大小**：默认 1MB，上传图片需在 server 块加 `client_max_body_size 20m`\n9. **useAsyncData 分页**：需要 `{ watch: [page] }` 才能响应 query 变化重新 fetch\n10. **CSS animation-fill-mode**：stagger 动画中的 transform 会覆盖 hover transform，两种效果不要混在同一个属性上\n11. **Windows 文件锁**：SQLite 被本地 dev server 占用时不能 `os.remove`，改用 `shutil.copy2` 覆盖写入\n12. **scp 路径格式**：Git Bash 下用 MSYS2 路径（`\u002Fd\u002FProjects\u002F...`）或 cmd 格式（`D:\u002F...`），不要混用\n\n---\n\n## 13. 后续规划\n\n- 评论楼中楼（Comment.parent_id 已预留）\n- 封面图管理（Article.cover_image 已预留，但编辑器未支持）\n- Docker 化部署\n- 数据库自动备份脚本\n- 日志轮转配置\n- 站点统计（PV\u002FUV）","详细的技术架构文档：系统设计、请求流程、数据库表结构、API 接口、前端页面路由、样式体系、目录结构。",2,true,false,0,{},137,"2026-06-23T09:08:10.226438","2026-09-22T05:46:49.784163",{"name":133,"slug":134,"description":135,"type":136,"id":124,"article_count":127},"blogTech","blog-tech","本博客自身的技术架构与运维实践","blog",[138],{"name":139,"slug":139,"type":136,"id":140,"article_count":127},"项目实战",16,{"prev":142,"next":145},{"slug":143,"title":144},"blog-project-intro","个人博客项目简介(Readme)",{"slug":146,"title":147},"database-design-and-orm-practice","数据库设计与 ORM 实践——个人博客项目复盘"]