/*
 Navicat Premium Dump SQL

 Source Server         : 日本中转狐帝云4-4MySQL
 Source Server Type    : MySQL
 Source Server Version : 50744 (5.7.44)
 Source Host           : panel-jp.998521.xyz:37857
 Source Schema         : biji_db

 Target Server Type    : MySQL
 Target Server Version : 50744 (5.7.44)
 File Encoding         : 65001

 Date: 08/01/2026 17:53:56
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for grouping
-- ----------------------------
DROP TABLE IF EXISTS `grouping`;
CREATE TABLE `grouping`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `grouping` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `parentId` bigint(11) NULL DEFAULT NULL,
  `is_deleted` tinyint(1) NULL DEFAULT 0,
  `deleted_at` datetime NULL DEFAULT NULL,
  `deleted_by` bigint(20) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 399468715122495489 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of grouping
-- ----------------------------
INSERT INTO `grouping` VALUES (399187436334354432, '测试', 0, 0, NULL, NULL);
INSERT INTO `grouping` VALUES (399217651215372288, '你好', 0, 1, '2026-01-07 07:09:59', NULL);
INSERT INTO `grouping` VALUES (399217655514533888, '你好', 0, 1, '2026-01-07 07:10:01', NULL);
INSERT INTO `grouping` VALUES (399217657649434624, '你好', 0, 1, '2026-01-07 07:20:11', NULL);
INSERT INTO `grouping` VALUES (399461168948842496, '科技', 0, 0, NULL, NULL);
INSERT INTO `grouping` VALUES (399461225492254720, '魔法', 399461168948842496, 0, NULL, NULL);
INSERT INTO `grouping` VALUES (399462299703840768, 'Linux软件', 0, 0, NULL, NULL);
INSERT INTO `grouping` VALUES (399468715122495488, '各种命令', 0, 0, NULL, NULL);

-- ----------------------------
-- Table structure for image
-- ----------------------------
DROP TABLE IF EXISTS `image`;
CREATE TABLE `image`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `markdown_id` bigint(20) NULL DEFAULT NULL,
  `original_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `stored_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `size` bigint(20) NOT NULL,
  `content_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_stored_name`(`stored_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 26 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of image
-- ----------------------------

-- ----------------------------
-- Table structure for image_name
-- ----------------------------
DROP TABLE IF EXISTS `image_name`;
CREATE TABLE `image_name`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `markdown_id` bigint(20) NOT NULL,
  `file_name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of image_name
-- ----------------------------

-- ----------------------------
-- Table structure for markdown_file
-- ----------------------------
DROP TABLE IF EXISTS `markdown_file`;
CREATE TABLE `markdown_file`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `grouping_id` bigint(20) NOT NULL DEFAULT 1,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` tinyint(1) NULL DEFAULT 0,
  `deleted_at` datetime NULL DEFAULT NULL,
  `deleted_by` bigint(20) NULL DEFAULT NULL,
  `is_private` tinyint(1) NULL DEFAULT 0,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 399812978381295617 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of markdown_file
-- ----------------------------
INSERT INTO `markdown_file` VALUES (399461629332426752, 399461225492254720, 'v2ray自己的全部节点连接', 'v2ray自己的全部节点连接.md', 'trojan://ikmkj@1.cloudflare.182682.xyz:443?security=tls&sni=jcmei.311169.xyz&fp=randomized&alpn=h3&insecure=0&allowInsecure=0&type=ws&host=jcmei.311169.xyz&path=%2F%3Fproxyip%3D168.138.165.174#tor%E2%80%94%E2%80%94%E7%BE%8E%E5%9B%BD\nvless://91658e42-f7e2-48e5-8d19-f7cbab273cde@www.visa.com.sg:8880?encryption=none&security=none&type=ws&host=nihao888.lol1980299316.workers.dev&path=%2F%3Fed%3D2560#nihao888.lol1980299316.workers.dev\nvless://91658e42-f7e2-48e5-8d19-f7cbab273cde@www.visa.com.sg:8443?encryption=none&security=tls&sni=mei.311169.xyz&fp=random&insecure=0&allowInsecure=0&type=ws&host=mei.311169.xyz&path=%2F%3Fed%3D2560#mei.311169.xyz\nvless://e613109b-6b91-4703-a11a-1c648f305678@ukv6.311169.xyz:8443?encryption=none&security=tls&fp=chrome&alpn=h3%2Ch2%2Chttp%2F1.1&insecure=0&allowInsecure=0&type=ws&path=%2Fe613109b#v6-uk-vless-c7qtqypo\ntrojan://ikmkj@1.cloudflare.182682.xyz:443?security=tls&sni=jcmei.311169.xyz&fp=randomized&alpn=h3&insecure=1&allowInsecure=1&type=ws&host=jcmei.311169.xyz&path=%2F%3Fproxyip%3D168.138.165.174#tor%E2%80%94%E2%80%94%E7%BE%8E%E5%9B%BD\nvless://12915e0e-e144-4cda-a6e7-9cb281e14358@8.163.48.245:5004?encryption=none&security=none&type=tcp&headerType=none#%E9%98%BF%E9%87%8C%E5%B9%BF%E5%B7%9E-IXA2-%E6%97%A5%E6%9C%AC%E8%90%BD%E5%9C%B0\nvless://12915e0e-e144-4cda-a6e7-9cb281e14358@119.23.79.195:17843?encryption=none&security=none&type=tcp&headerType=none#LXC%E6%B7%B1%E5%9C%B3-%E9%98%BF%E9%87%8C%E5%B9%BF%E5%B7%9E-IXA2-%E6%97%A5%E6%9C%AC%E8%90%BD%E5%9C%B0\nvless://3ac79030-a996-4172-bd6b-e66e44e7d014@151.242.85.19:46134?encryption=none&security=reality&sni=yahoo.com&fp=chrome&pbk=hZ1ZeNMNYN30Go81VZ5EbeBucHjDXmekqxIROYnY3ws&sid=1f08427ed7fd4048&spx=%2F&type=tcp&headerType=none#LXC%E9%A6%99%E6%B8%AF\nss://MjAyMi1ibGFrZTMtYWVzLTI1Ni1nY206Y1IySkJNUGlod0xCV1hwWFRteDVLRXpqeHVyZlllUWduclhHNFYzaTNWRT06U0pHYzJOOVFINFVDekJzcUcxWlBvbFBIS2VMSVVZSGZ0U09vUjUrOTZqbz0@119.23.79.195:15249?#LXC%E6%B7%B1%E5%9C%B3-%E6%B5%81%E9%87%8F%E4%B8%AD%E8%BD%AC%E6%97%A5%E6%9C%AC-LXC%E9%A6%99%E6%B8%AFss\nss://MjAyMi1ibGFrZTMtYWVzLTI1Ni1nY206Y1IySkJNUGlod0xCV1hwWFRteDVLRXpqeHVyZlllUWduclhHNFYzaTNWRT06U0pHYzJOOVFINFVDekJzcUcxWlBvbFBIS2VMSVVZSGZ0U09vUjUrOTZqbz0@panel-jp.998521.xyz:39074?#%E6%B5%81%E9%87%8F%E4%B8%AD%E8%BD%AC-%E6%97%A5%E6%9C%AC-LXC%E9%A6%99%E6%B8%AFss\nvless://783c96b4-43c8-4e33-af6e-5629a7d5c33e@103.189.141.119:15565?encryption=mlkem768x25519plus.native.0rtt.HK3E6afKcTURqiOAWUlL1Uq2_zJ4TS5xgsLdBBrS8F4&security=reality&sni=www.icloud.com&fp=chrome&pbk=mk5o206PNEsv3og1pMY4B5vJOIbqaNqoBMWLcu1-zF0&sid=17a7cf7ac73104&spx=%2F&pqv=9ZKPgxeXWLj8Pcl4nF4PA0wvhQFfpL7TgmOxJ6veD1m4rkQX_TnVYnJb3U-F-My_s18KRUpCHAjC27GZxgSfC0tRuO69np-o2Ah091sRolp4jyel9BA8_eVaA-P-ORCSdJy_lUWzqNc2uWm3KTARWmujkuWeuwzghrQy4PF_HPECcB6YV8f3RnJKnHdOAVfV6scbt55xEJBmff1w5-H7LJrh5qMjTnl8yM7SsqHGrHgaC9IwiAxUP3-8cr3yc9VzvbbEZPJjQMlitQz_LlcXiT_KgBWPQB2Wcy2zDK7mFnkoxnPvizThlm3hi1888-eFgLaEmS8itvc98Z1c5TYwgjoOY6nzL6eXiVMJrwEI7SUY8vQ1gxIxL8WNOy6bDRNQ2tfdsItfxQol_2_UFwy6mr9JeVFSDFXDKMjbE9lfZPPRPxMxR2Y8FVsHg2v4RQaMv0K57aY8a5Zlo2R7kWG41QpavscAoxLmL2vdvINk4FsPVinvhKiQL8snT_zz4DhNhOPYft4b53Farr270uZRBaN6YztyJVF1L9HQyDB7-01CBT0YkSg4bQgx9QaVV5ZnYgnrSDgm8p1_1OX_D4p6spRog-CrcoHGAaoo3BzLuEBJa-NiIVNPBL-Ow0apSWH08XYjwZDEWGPDIUZpqPfapQCBRjs9aHpOUIlvCHl1DrtdJyFZfRWv7dHnCTtiAJ4rJoA_D2ZCuGyVtNSBbqGDugGOJ0kW0uxk0UJAjf-VAJSAdhMCBDY4Xw2733U4r6zzR37cT6jro7dl-glxpb8ro8fdrGNUl8OjhWyh0qcBMMS4XP44sTX6374uFdAjXmhQMPOUnJRIxiffZWtpAV4k-j22SV5coaJ5DikHAe86i0tNfyapj3Q80q1Z_CfTBxtnO_8ORuwqSybYiFZr0DyFq2JUQzU23XI8bxzsNwlA6Se75oNJdjkaSHv2ynW83F-yuy79sUR4f0GUZUM_Cs-Sy-bocH_zPc4aBt2MMrbKS4vpATfl6SGCU1jIofOOAvFtGXR8_jjVDwqNEFLSDbOt-f5t0eiXiOg-yibImd5Eoy5Zw1z0OmZUdL0-lw3r9aMgWiBIbRaadhhFrzcMUZ_4Rmr_NtilrccQK9PKfXo7r18umlrowc_j82lZA9Lo4S1xW3kgzYBKw2n8LUtWpzwlY3KQTERGwJT-ETDZO2YIuww1El3OMM5YCTv2cg9uBEtsez5rC0ApranaIXWNYTvqqQOhkP9Nugf7yCcY_qsB1SOov4pnRfZV0y895TPevb-pTChjuaFAdP2heKveB-Us7J0Jv_nLECWaa8MbIrU4cbwpvf6Tj1txYfZLAlwre8wr0EXqGTrzok-0P61d2sz8evVhszf4YmAI0fQFdPXVBhAhcb8H4c00-BbfpZGoIdSH8tn-tj95SHrUseGOSpOL8mrT94mbYEfRCCbx0-13DgpA9Eu3qmpiXocdM-O9C_SvNWy6d6Yf6Zgk_P5bFwnbSGygtZZj8hBX-_Z45Mw34JzC3qX81t0NdCutJALdH0Q_mZb4FZoRuhU5-NfASfgMgPNo90Hq0eMnVEStRWPq39HqQO4nZSD1MdM5GPkZ8fT_zUAQ5Bsx5o7YubL4pA9MzL0EWNgXQ-7cykrXBmmgZv6zwsQY5-N4keLLR9iTXDV42p3IoW26oFd8kkzaEKfXjYoMW5rXXCOcKyJuGEJ8oRFsy4_zf4qZfm_edsjcJrunEhTFZ0tpb-U5_j-AdZ4eVYm-d20C3nexb1WBwt3s01c837yyCnkcCPCtBJ-G3ONPx7Vtt0txSViACuCmXwFrLlGG_arWj3D2jasY6pe1KjC2LyhVi5Li8YWP4ANFIKZLLegzK1QAXMoYXX4pY2McC6gaaL8wkJuht1CRzR9vm7qsxGFlvNSonpgoPjMLBbyjGNQ7BAxJqsEdfprj8qnbXgTCTSZQShirC73-AhLMjUOvqy_KS_vwVnb1cYJ4E4_R_wes9f1ZcUDWi1gMpQRm2EQ-OvWL3T_V7jBMaQckNbosD9IU4qIU40dwTE6GVNeJPS83Pl596-AhUPWuH1tsgCH6WDI_2drXxhiSNr8IOO8FoAJQC8gqp6qNfR1wEAWd_dQ3HWZ-zIhQyswz5juRujE9MnH8FbzN9WxaDBF4os--WUveUcV5UiwRvLVyqHc0Q5_uZc5DeiMZXTLGm5Iz4fccc4HzpkoNocbOT1taurUo0lc6r9cCMZ9Otn3F6o29usxAdY_zp0NVkcCidNiMX8ufVYf0r1hRd8oig6brUHoIPg9idOPQCuXPGktt1gmXCL-bGLtTC2H1QsQ-RzlsZQutRZkqFUiXtk3tQE85BmW2PQJ4xqmPuG7VsmsTo3TF8NdjLAkaRMTbD4P0B5BM9Llj0xwI2xuFWj1a2DwYBww5-of-Erxmim6m0HXqYy7cDfaulJXcZC40y69HhEUXMJZ8i9vfzQ5xbvO-WS3lmwjSH43IFQZv_NUcE6kQp82-bmjjSqsfMWEfoFMIgWJp8MaGRvKBavyk8ZDCIdiXRuTsPVmy1EDjdMhzsPeCGZUaKqBAvGwyFY_9gIFL3ZwDbGjuN5uua8ht0AyIamiYp1I&type=xhttp&path=%2Fmlkem768&mode=auto#%E6%9E%97%E6%9F%9A%E4%BA%91%E9%A6%99%E6%B8%AF\nvless://783c96b4-43c8-4e33-af6e-5629a7d5c33e@119.23.79.195:39957?encryption=mlkem768x25519plus.native.0rtt.HK3E6afKcTURqiOAWUlL1Uq2_zJ4TS5xgsLdBBrS8F4&security=reality&sni=www.icloud.com&fp=chrome&pbk=mk5o206PNEsv3og1pMY4B5vJOIbqaNqoBMWLcu1-zF0&sid=17a7cf7ac73104&spx=%2F&pqv=9ZKPgxeXWLj8Pcl4nF4PA0wvhQFfpL7TgmOxJ6veD1m4rkQX_TnVYnJb3U-F-My_s18KRUpCHAjC27GZxgSfC0tRuO69np-o2Ah091sRolp4jyel9BA8_eVaA-P-ORCSdJy_lUWzqNc2uWm3KTARWmujkuWeuwzghrQy4PF_HPECcB6YV8f3RnJKnHdOAVfV6scbt55xEJBmff1w5-H7LJrh5qMjTnl8yM7SsqHGrHgaC9IwiAxUP3-8cr3yc9VzvbbEZPJjQMlitQz_LlcXiT_KgBWPQB2Wcy2zDK7mFnkoxnPvizThlm3hi1888-eFgLaEmS8itvc98Z1c5TYwgjoOY6nzL6eXiVMJrwEI7SUY8vQ1gxIxL8WNOy6bDRNQ2tfdsItfxQol_2_UFwy6mr9JeVFSDFXDKMjbE9lfZPPRPxMxR2Y8FVsHg2v4RQaMv0K57aY8a5Zlo2R7kWG41QpavscAoxLmL2vdvINk4FsPVinvhKiQL8snT_zz4DhNhOPYft4b53Farr270uZRBaN6YztyJVF1L9HQyDB7-01CBT0YkSg4bQgx9QaVV5ZnYgnrSDgm8p1_1OX_D4p6spRog-CrcoHGAaoo3BzLuEBJa-NiIVNPBL-Ow0apSWH08XYjwZDEWGPDIUZpqPfapQCBRjs9aHpOUIlvCHl1DrtdJyFZfRWv7dHnCTtiAJ4rJoA_D2ZCuGyVtNSBbqGDugGOJ0kW0uxk0UJAjf-VAJSAdhMCBDY4Xw2733U4r6zzR37cT6jro7dl-glxpb8ro8fdrGNUl8OjhWyh0qcBMMS4XP44sTX6374uFdAjXmhQMPOUnJRIxiffZWtpAV4k-j22SV5coaJ5DikHAe86i0tNfyapj3Q80q1Z_CfTBxtnO_8ORuwqSybYiFZr0DyFq2JUQzU23XI8bxzsNwlA6Se75oNJdjkaSHv2ynW83F-yuy79sUR4f0GUZUM_Cs-Sy-bocH_zPc4aBt2MMrbKS4vpATfl6SGCU1jIofOOAvFtGXR8_jjVDwqNEFLSDbOt-f5t0eiXiOg-yibImd5Eoy5Zw1z0OmZUdL0-lw3r9aMgWiBIbRaadhhFrzcMUZ_4Rmr_NtilrccQK9PKfXo7r18umlrowc_j82lZA9Lo4S1xW3kgzYBKw2n8LUtWpzwlY3KQTERGwJT-ETDZO2YIuww1El3OMM5YCTv2cg9uBEtsez5rC0ApranaIXWNYTvqqQOhkP9Nugf7yCcY_qsB1SOov4pnRfZV0y895TPevb-pTChjuaFAdP2heKveB-Us7J0Jv_nLECWaa8MbIrU4cbwpvf6Tj1txYfZLAlwre8wr0EXqGTrzok-0P61d2sz8evVhszf4YmAI0fQFdPXVBhAhcb8H4c00-BbfpZGoIdSH8tn-tj95SHrUseGOSpOL8mrT94mbYEfRCCbx0-13DgpA9Eu3qmpiXocdM-O9C_SvNWy6d6Yf6Zgk_P5bFwnbSGygtZZj8hBX-_Z45Mw34JzC3qX81t0NdCutJALdH0Q_mZb4FZoRuhU5-NfASfgMgPNo90Hq0eMnVEStRWPq39HqQO4nZSD1MdM5GPkZ8fT_zUAQ5Bsx5o7YubL4pA9MzL0EWNgXQ-7cykrXBmmgZv6zwsQY5-N4keLLR9iTXDV42p3IoW26oFd8kkzaEKfXjYoMW5rXXCOcKyJuGEJ8oRFsy4_zf4qZfm_edsjcJrunEhTFZ0tpb-U5_j-AdZ4eVYm-d20C3nexb1WBwt3s01c837yyCnkcCPCtBJ-G3ONPx7Vtt0txSViACuCmXwFrLlGG_arWj3D2jasY6pe1KjC2LyhVi5Li8YWP4ANFIKZLLegzK1QAXMoYXX4pY2McC6gaaL8wkJuht1CRzR9vm7qsxGFlvNSonpgoPjMLBbyjGNQ7BAxJqsEdfprj8qnbXgTCTSZQShirC73-AhLMjUOvqy_KS_vwVnb1cYJ4E4_R_wes9f1ZcUDWi1gMpQRm2EQ-OvWL3T_V7jBMaQckNbosD9IU4qIU40dwTE6GVNeJPS83Pl596-AhUPWuH1tsgCH6WDI_2drXxhiSNr8IOO8FoAJQC8gqp6qNfR1wEAWd_dQ3HWZ-zIhQyswz5juRujE9MnH8FbzN9WxaDBF4os--WUveUcV5UiwRvLVyqHc0Q5_uZc5DeiMZXTLGm5Iz4fccc4HzpkoNocbOT1taurUo0lc6r9cCMZ9Otn3F6o29usxAdY_zp0NVkcCidNiMX8ufVYf0r1hRd8oig6brUHoIPg9idOPQCuXPGktt1gmXCL-bGLtTC2H1QsQ-RzlsZQutRZkqFUiXtk3tQE85BmW2PQJ4xqmPuG7VsmsTo3TF8NdjLAkaRMTbD4P0B5BM9Llj0xwI2xuFWj1a2DwYBww5-of-Erxmim6m0HXqYy7cDfaulJXcZC40y69HhEUXMJZ8i9vfzQ5xbvO-WS3lmwjSH43IFQZv_NUcE6kQp82-bmjjSqsfMWEfoFMIgWJp8MaGRvKBavyk8ZDCIdiXRuTsPVmy1EDjdMhzsPeCGZUaKqBAvGwyFY_9gIFL3ZwDbGjuN5uua8ht0AyIamiYp1I&type=xhttp&path=%2Fmlkem768&mode=auto#%E6%B7%B1%E5%9C%B3LXC-%E6%9E%97%E6%9F%9A%E4%BA%91%E9%A6%99%E6%B8%AF\nvless://63c3e73a-f54a-4978-b7d9-8579adf34988@panel-us-cn2.998521.xyz:17154?encryption=mlkem768x25519plus.native.0rtt.iagOuteMjLYYhMLJRFWLUrZdKUBl1rNjgNit7EkT2gGgPWROxFpnkcag4IyZb_dKi9Rl9LKYoZAbPbuG8cmjMlA3G7eqW5emzGQgQ8OBq4tWQFWVWadhityWgEuaw0yPPMAGs_FYonS6m3i-KGRQNeNtO2aUM6pNYqO_QbozFdoeZkab0oSiYSUR4WFBpeWBc9lVWosryKFaI-Er7OS2FgYQaYTKqvYqb0bIhOqC3lARVqRse3YclheyzZJLFNWmP9eAmwNf-KQUzik-fqEGV1e20bmb7SEzGQZs6KkbJrxej6Y48fxBuRAS89myDAlw_PVEQRNH-rzOadtnBelf_HGq9fZjzosmhyawgGHE3Vk2q_U-1wIXEeUsvNQFXTaCcAi5SZdgFGtPCFcfoop-tvN6OWRMOXdw_FaEspcVgUo9z5FPM4dmdRZxP_R_DkG0j5ZTJWNNZfjF0ICdKohFPppJ4YCzHCq6YySt4bOHuFEdg4mpylIRX8Us97JrOrw_90tQF4st6jlphiZ5KlgF70BghlkMAZWDCnF3OWTA6JBuwSe1Slsb8tCa3cYovhwEWiMhIktaMkASsIUjVJMxmAp9pxQo7ogcIPq9XBYZ7QCGiSzAQjKzWeU6RMirEsqZurkpbZE9LoiAAInMdvds0fSGVYl3-7NnhDy92pp35lOU4oIXkNckMBZRBVsDkLuB--ADocZiSSRKayShkICICDVGb-CNcxmDcHnBH5zNzgrQlReEqbYy4IGt0mF2x1OB80J5gwvLf4siPugfcmGlSDIlIqu_X8IbAYJ30igzw5aPVUo4kpwzzhQSobSFBnOAaNsa0CVtzHasICltFne2melutzOpqLOomfiGXitCHcGi5jilHnM0t0Mc2lCrkeofvewUZFg_vDGy-QQc2ue57lpVFqRpXxt02Io2zFWRzhgp9pAlJTcUe4Y-5GIX0hm-cDITCZiBdbWdkyiT_Oyrf2l5MYQKGjcF7FQKh1ZF1gSonOklGpu60tU4pOljqYRLoGtz8AR7hcKQgStPptIPXAa0CkAKs7TKemXB9Gdfm2V_AVhWbjcW8uqX-SWLTWKxHStNlLkJ18IrvnMfVEBk9pa3COZCtKuiHOKzwBIo1sx2W9rIU5yl7YrEz3tAh1IRumi2-bBcL-MFkESxkVxCvAaZAWWzbTxQ5Uoywmi1LuQUjBVjHtoud1EhwAwjLfnJi5qrpVQHI4UrBnp8mpwwCkyl-ti-_sRIbwcZH-J2wSpoRHoXLQYrGSg5N7xum7WqT_JQa5Smhwys4jprOAOLP2BbK_dACFnAxqgykIQ28CMX4HjAPXvGtVR-YRQrFgGPu-tzh6A-6ZDIlxpH-JubfdBEwWF0cRyQjEUzKeyxWdxLIxaYTvEsBGugNwZPGtFfw_uEtyOxPJLPRqfFblpmJOe9B2i2jFtbJoO-iDlCAQCVJWg4DUgn91avTOM3zWwHGmW5IflVtxmZpUl5TilMWLCQPJKswMZd4neHVlqzYNVgzWQ_yutOtMOAUzOKePd6fZtssOsOk0KUz26J6EuK3fFgw_8i-TZEB7X65DXGsOg&security=reality&sni=www.oracle.com&fp=chrome&pbk=K2HdlaIKpLeP7bV1BWJktk2OvbGbXpUKEIBLvpKAo10&sid=045a002d21&spx=%2F&pqv=VGFSAZ_u0ensou9dfXRaTUiPugqDXI83xELepQtraXPglG5Vkj3RyqcyaizSvfrsSFUyY8tiqwElk-0XblPPKS44RHt1vgHzeB1Z5hq4MaMC6xjUvvpSi-HwmheQIdj3dd-frvblVYhRzuc-hZtiQZczhkuLlMW1dL-62IjNd30jrbzNxBk4KI0yWwmgpnNCGnXhu7rH6B8ED5zS-pUyGw3LS1Ro1aEdMRosdEqITAoI2M_MK89PcSIKfoHrmLSXy8YO89X7GzHSo4iE7G-iZUvuXCswCmn2l8rz8_kT-7AASbJ50_XZnq83YMVdVinfbcNpnzi59tZ6QE9pYUswppULtDqqYBxxeTyXjkKbRJcoQjuDsFp8SQImZw1On6_11p77LwmTlwUWmtk38uKkpJ2kU6sPzubWEX-I7IWjZd45idoPGPOXhmsWGeOJe4GFUL92ZT9cpW_uCSPmdgiSxiN5RKUXHcw2jq7rRrMsgwwZA6RxkTDArkld6MYoBYfi7Ozc2rX0QHPmHNYZWoDW6UR7XmFFLYj5maGb_AO6P0XUlw54leDHoQfyu9NKKDNBcgsMz8oCgCMgiEdlTFDo38QOloAf1QfBFw-YhQxCsEEZOWPEL-K9fw7Y742vd1RZVG2eIyuNYKvdFh3uI5v_h_LQ0vZpAJLCtd9bPS6L2RSKZ1I8zQFOL4DWrZw7_DZz0H3NVVR52kYYGeV6Dh4Q3yecgslS65WHcxAYgWy1gZD7qQM-7p5D_2Ki70haIrpBihRlG0J4fDAj-FzN-IwilYlFdBk22jT4ZhM1v9-CeUkeVrMzDbqIyeC0T0mQnKpnmnenEDwcPm0coxuTeS6NKRv_XmPKxtkiYisJiO6ESqyylEbn8lXjuLr7ArRrAeY5iZ96z4VZ1ZPh6Cl0-YgfavA9EZqjraDId0sqeqCyCth1kW4adh6kWskGu9kjccqs44y1G099rkt5UaNfHFQM4sk-gdqYRnBt-uc_vTXALLWiFB4hzrc6vLUNxsswmPsHkY8lRLRtBz1S9PmUfuQj2LZZFky4UAjOUbwSeXYPw2_zhUcbcExWs0BEUimfzeq3-KBvJvkLSarr_UEy-Plf7hm5ADObFL4EAfb3UCMg2LA4DX-WAyd_6VYyhF1ATwGzLDg-Qpx5DZBcCtTz-veL0b3RWbHc9el6I4sy_i-tAE7kypViUXvldJGILFIrRR6p22PJgs4ULOrYEV0C7nQ7JjWsMEYK6PJssRkjuToIBnUYSvY48dWleFN1lpSuCCDZTCqlT3NjLHSP1xNcPUkdsOqG43WbUB-b32ofnug56QsLLrYosw3rxCg3APbYrTmOrzX6R4bZwdWiHwWQWtMk-_U81eAYA3eTykKym3stDk4ue3HkRNJ8PvjQQMWImWrYGbI7gmX1B7yZbAkg6kF7RjgSXx47sQqz8dg4RJWrc6vI6_1XCFZ0nU7XxKIbMWoKdktu5FGFJQkIv9bPUReyrvcWevFLIMXevDGXLeNlw48u9QeY619ra_D07Q_BVom07ea1YZ8VFajXyfoQj2jE3Iq3Vsz2ZAmclriNIzh54OR6MoYIBIAr5cA56Af9BIigonpSg4ec12oyNBH9O3WDnpOK2jNuwRC4y2tpX27BnfEaMXCjVswzJbjvIS1QkvUMgWDwY5uuZeAFiPFXuyKJ941rdJ9Zo88GE1_iThmHJPdjwSRKl6JaSzIY80tnUQtCowvh7CQgnKMV61-NbBdnzSBDCmmvdlHvUdW2FSPQbl_jn7BwfDnW58XOppUUESpAEf9NULvdXPrq2rNTmgMY9qYrHNHrE0MjoXRJL_C_rJKRgkU_A8FkvF9PfLWfPHGtVpMHszXpgex8IKwUTE6zGQ7iHimVqLWkP1N7LMgZjavqL8Jn8rvP-RutQURe2iAU9MDxn5bDWg1beZEePEhtzncnEQMqLhT2mQTlCWuPErKbvYLbHKA677GajO2s4Y7ur2VbWXrm2Kjvxr-Jz2RGAtjJXqpW2k_8n7w2xj-jv06eROaakFokg53d23VwY3odTPm1P3-MFc1IvBkVLaXfIry3i2Pd5xJ9ugG9JnaHEDJXtU6WFnSqZuorRK1exMckOlsXevY69hAfV0TS58WF5F4Pp_60G9dQfH-iu98htr1H7sEWsKSNusjUQ4_Qar_JOON1992nCwC1Ui_9cuwgH6FlSGNl03OptCiGrLR9Yd4ih4KSFD4Ye4rnjymgE8symxDDY893WW0ma9A_IorUrsPHK3tv45BkJeNRqyNYUAaRHogxRxkX9gR_V5yYpyFpbv9Y-E3by3DzN4g7rpY7sldAHSaQ_UlnQsNxzFC3-gr1c8C5RXQ0I_cOTv03uiMOtfnsMTQYD66Ml-0BDLLDT7HgASQd2_trlyenAFNepNayPdWtKpFu3D8NaQrqoABN3t8fwHWVkl3-HJF4LetnlAdWmnJVUaMEWWgsMNMxZEVGkl0w_5VzHpDiUAuaHM1SjpsSoRJST-RiTy2bsScRJgcFh2EajWg66qZYmlzZ5sNQY1p6fIw_rmJhLIBgow9t3HG1Gzq3f3O5dS3ZFmsFRAhJhiPDPYjqsGi8FW9stHQ&type=xhttp&path=%2Fmlkem76&mode=auto#%E6%B5%81%E9%87%8F%E9%9D%A2%E6%9D%BFUS-%E7%8B%90%E5%B8%9D%E4%BA%91%E7%BE%8E%E5%9B%BD4-4\nvless://63c3e73a-f54a-4978-b7d9-8579adf34988@38.55.178.226:43640?encryption=mlkem768x25519plus.native.0rtt.iagOuteMjLYYhMLJRFWLUrZdKUBl1rNjgNit7EkT2gGgPWROxFpnkcag4IyZb_dKi9Rl9LKYoZAbPbuG8cmjMlA3G7eqW5emzGQgQ8OBq4tWQFWVWadhityWgEuaw0yPPMAGs_FYonS6m3i-KGRQNeNtO2aUM6pNYqO_QbozFdoeZkab0oSiYSUR4WFBpeWBc9lVWosryKFaI-Er7OS2FgYQaYTKqvYqb0bIhOqC3lARVqRse3YclheyzZJLFNWmP9eAmwNf-KQUzik-fqEGV1e20bmb7SEzGQZs6KkbJrxej6Y48fxBuRAS89myDAlw_PVEQRNH-rzOadtnBelf_HGq9fZjzosmhyawgGHE3Vk2q_U-1wIXEeUsvNQFXTaCcAi5SZdgFGtPCFcfoop-tvN6OWRMOXdw_FaEspcVgUo9z5FPM4dmdRZxP_R_DkG0j5ZTJWNNZfjF0ICdKohFPppJ4YCzHCq6YySt4bOHuFEdg4mpylIRX8Us97JrOrw_90tQF4st6jlphiZ5KlgF70BghlkMAZWDCnF3OWTA6JBuwSe1Slsb8tCa3cYovhwEWiMhIktaMkASsIUjVJMxmAp9pxQo7ogcIPq9XBYZ7QCGiSzAQjKzWeU6RMirEsqZurkpbZE9LoiAAInMdvds0fSGVYl3-7NnhDy92pp35lOU4oIXkNckMBZRBVsDkLuB--ADocZiSSRKayShkICICDVGb-CNcxmDcHnBH5zNzgrQlReEqbYy4IGt0mF2x1OB80J5gwvLf4siPugfcmGlSDIlIqu_X8IbAYJ30igzw5aPVUo4kpwzzhQSobSFBnOAaNsa0CVtzHasICltFne2melutzOpqLOomfiGXitCHcGi5jilHnM0t0Mc2lCrkeofvewUZFg_vDGy-QQc2ue57lpVFqRpXxt02Io2zFWRzhgp9pAlJTcUe4Y-5GIX0hm-cDITCZiBdbWdkyiT_Oyrf2l5MYQKGjcF7FQKh1ZF1gSonOklGpu60tU4pOljqYRLoGtz8AR7hcKQgStPptIPXAa0CkAKs7TKemXB9Gdfm2V_AVhWbjcW8uqX-SWLTWKxHStNlLkJ18IrvnMfVEBk9pa3COZCtKuiHOKzwBIo1sx2W9rIU5yl7YrEz3tAh1IRumi2-bBcL-MFkESxkVxCvAaZAWWzbTxQ5Uoywmi1LuQUjBVjHtoud1EhwAwjLfnJi5qrpVQHI4UrBnp8mpwwCkyl-ti-_sRIbwcZH-J2wSpoRHoXLQYrGSg5N7xum7WqT_JQa5Smhwys4jprOAOLP2BbK_dACFnAxqgykIQ28CMX4HjAPXvGtVR-YRQrFgGPu-tzh6A-6ZDIlxpH-JubfdBEwWF0cRyQjEUzKeyxWdxLIxaYTvEsBGugNwZPGtFfw_uEtyOxPJLPRqfFblpmJOe9B2i2jFtbJoO-iDlCAQCVJWg4DUgn91avTOM3zWwHGmW5IflVtxmZpUl5TilMWLCQPJKswMZd4neHVlqzYNVgzWQ_yutOtMOAUzOKePd6fZtssOsOk0KUz26J6EuK3fFgw_8i-TZEB7X65DXGsOg&security=reality&sni=www.oracle.com&fp=chrome&pbk=K2HdlaIKpLeP7bV1BWJktk2OvbGbXpUKEIBLvpKAo10&sid=045a002d21&spx=%2F&pqv=VGFSAZ_u0ensou9dfXRaTUiPugqDXI83xELepQtraXPglG5Vkj3RyqcyaizSvfrsSFUyY8tiqwElk-0XblPPKS44RHt1vgHzeB1Z5hq4MaMC6xjUvvpSi-HwmheQIdj3dd-frvblVYhRzuc-hZtiQZczhkuLlMW1dL-62IjNd30jrbzNxBk4KI0yWwmgpnNCGnXhu7rH6B8ED5zS-pUyGw3LS1Ro1aEdMRosdEqITAoI2M_MK89PcSIKfoHrmLSXy8YO89X7GzHSo4iE7G-iZUvuXCswCmn2l8rz8_kT-7AASbJ50_XZnq83YMVdVinfbcNpnzi59tZ6QE9pYUswppULtDqqYBxxeTyXjkKbRJcoQjuDsFp8SQImZw1On6_11p77LwmTlwUWmtk38uKkpJ2kU6sPzubWEX-I7IWjZd45idoPGPOXhmsWGeOJe4GFUL92ZT9cpW_uCSPmdgiSxiN5RKUXHcw2jq7rRrMsgwwZA6RxkTDArkld6MYoBYfi7Ozc2rX0QHPmHNYZWoDW6UR7XmFFLYj5maGb_AO6P0XUlw54leDHoQfyu9NKKDNBcgsMz8oCgCMgiEdlTFDo38QOloAf1QfBFw-YhQxCsEEZOWPEL-K9fw7Y742vd1RZVG2eIyuNYKvdFh3uI5v_h_LQ0vZpAJLCtd9bPS6L2RSKZ1I8zQFOL4DWrZw7_DZz0H3NVVR52kYYGeV6Dh4Q3yecgslS65WHcxAYgWy1gZD7qQM-7p5D_2Ki70haIrpBihRlG0J4fDAj-FzN-IwilYlFdBk22jT4ZhM1v9-CeUkeVrMzDbqIyeC0T0mQnKpnmnenEDwcPm0coxuTeS6NKRv_XmPKxtkiYisJiO6ESqyylEbn8lXjuLr7ArRrAeY5iZ96z4VZ1ZPh6Cl0-YgfavA9EZqjraDId0sqeqCyCth1kW4adh6kWskGu9kjccqs44y1G099rkt5UaNfHFQM4sk-gdqYRnBt-uc_vTXALLWiFB4hzrc6vLUNxsswmPsHkY8lRLRtBz1S9PmUfuQj2LZZFky4UAjOUbwSeXYPw2_zhUcbcExWs0BEUimfzeq3-KBvJvkLSarr_UEy-Plf7hm5ADObFL4EAfb3UCMg2LA4DX-WAyd_6VYyhF1ATwGzLDg-Qpx5DZBcCtTz-veL0b3RWbHc9el6I4sy_i-tAE7kypViUXvldJGILFIrRR6p22PJgs4ULOrYEV0C7nQ7JjWsMEYK6PJssRkjuToIBnUYSvY48dWleFN1lpSuCCDZTCqlT3NjLHSP1xNcPUkdsOqG43WbUB-b32ofnug56QsLLrYosw3rxCg3APbYrTmOrzX6R4bZwdWiHwWQWtMk-_U81eAYA3eTykKym3stDk4ue3HkRNJ8PvjQQMWImWrYGbI7gmX1B7yZbAkg6kF7RjgSXx47sQqz8dg4RJWrc6vI6_1XCFZ0nU7XxKIbMWoKdktu5FGFJQkIv9bPUReyrvcWevFLIMXevDGXLeNlw48u9QeY619ra_D07Q_BVom07ea1YZ8VFajXyfoQj2jE3Iq3Vsz2ZAmclriNIzh54OR6MoYIBIAr5cA56Af9BIigonpSg4ec12oyNBH9O3WDnpOK2jNuwRC4y2tpX27BnfEaMXCjVswzJbjvIS1QkvUMgWDwY5uuZeAFiPFXuyKJ941rdJ9Zo88GE1_iThmHJPdjwSRKl6JaSzIY80tnUQtCowvh7CQgnKMV61-NbBdnzSBDCmmvdlHvUdW2FSPQbl_jn7BwfDnW58XOppUUESpAEf9NULvdXPrq2rNTmgMY9qYrHNHrE0MjoXRJL_C_rJKRgkU_A8FkvF9PfLWfPHGtVpMHszXpgex8IKwUTE6zGQ7iHimVqLWkP1N7LMgZjavqL8Jn8rvP-RutQURe2iAU9MDxn5bDWg1beZEePEhtzncnEQMqLhT2mQTlCWuPErKbvYLbHKA677GajO2s4Y7ur2VbWXrm2Kjvxr-Jz2RGAtjJXqpW2k_8n7w2xj-jv06eROaakFokg53d23VwY3odTPm1P3-MFc1IvBkVLaXfIry3i2Pd5xJ9ugG9JnaHEDJXtU6WFnSqZuorRK1exMckOlsXevY69hAfV0TS58WF5F4Pp_60G9dQfH-iu98htr1H7sEWsKSNusjUQ4_Qar_JOON1992nCwC1Ui_9cuwgH6FlSGNl03OptCiGrLR9Yd4ih4KSFD4Ye4rnjymgE8symxDDY893WW0ma9A_IorUrsPHK3tv45BkJeNRqyNYUAaRHogxRxkX9gR_V5yYpyFpbv9Y-E3by3DzN4g7rpY7sldAHSaQ_UlnQsNxzFC3-gr1c8C5RXQ0I_cOTv03uiMOtfnsMTQYD66Ml-0BDLLDT7HgASQd2_trlyenAFNepNayPdWtKpFu3D8NaQrqoABN3t8fwHWVkl3-HJF4LetnlAdWmnJVUaMEWWgsMNMxZEVGkl0w_5VzHpDiUAuaHM1SjpsSoRJST-RiTy2bsScRJgcFh2EajWg66qZYmlzZ5sNQY1p6fIw_rmJhLIBgow9t3HG1Gzq3f3O5dS3ZFmsFRAhJhiPDPYjqsGi8FW9stHQ&type=xhttp&path=%2Fmlkem76&mode=auto#%E7%8B%90%E5%B8%9D%E4%BA%91%E7%BE%8E%E5%9B%BD4-4\nvless://29dfa560-29ee-4280-9ed1-fa8830cf49ff@38.12.22.253:50010?encryption=mlkem768x25519plus.native.0rtt.wIGxOPmJqAPMUzLO27KrFHtvKURNvyrNYYq9UZQd8_UWbOiX_RAUSjBa42gVR_EtGLsLTASdCduQXxPPveife6a7jUddKmh1q-oFGBJ3eUNfKcuW-KnI9zZQWMgzdEG1VYSiOmOunbXKEfpa4wgMk6iIGmfKKIuyGrjBQWQzXoxqa2GVYiMFeQh26MUdZVuvYkkDnTEqn_wr0EGTAzWz0Gp95DpEWhOQW1PBdARFyoKb-FlybUhXjvd96JxDNumAPOpvA9x5qziO9SKWX_BQC2sR_ytVrYKpGTuqn7p6HooSsGJrYIQmm4GhvkchOGIZCUUxCia8cOQh4kdis3jCduSkcYJnsMZHSwoc9hGjN2ERffJhVikseIvHqHVMiMcwyOVc6UEJSum2hGs0UEtR6nxJY1et_QDNZEjAkJFCFJiqFLBumKwjC9YRxqdO84g76PWuEgo81IODUFoxxzOZtOQyreK_cvyatEEPu6eOcByst8kljIgH7JmgvqQfo0SjQMgeOuMsdzp0fsLPC-NcB4U3tlckZ8N7jYV_WCaOCUe1yevPWtZQuqYs9rtEkfk3UeQk2LRTdyFhlFBMX_Z1s6ZsQVZ-QDFe5uufzUK4HppYSdWM_kPCt8qSRQii9QMfIWp_HTcu4_pJQHQz2UKohZMTL8k8i9BswUm0RWkWmYNCmjOJTqt0iOiKaWCeYXhIiWJB3cS5_gZKdRQrXjCY-ldiFAwLKImK7ogsrGQ2SEk6IOkeKXDJrUsmjcw3SAu6GaynowTEl_d_wFzN3bGIOJt791QqPnk4ALRhm6Jz_KhTHJEeGggpkuZQxVgTXnDKxtJFa-me-qk9anio8KR3cAWL2KkbFQVIOVVmpGZZm_mPXjihs0otJlm5lAJyPABxZDMhd6G679ZV_vZdsCUwKmSZYUmAS5SmfGoj-8YoTdViwhJG6ntjO8S2fXox9udwctM6FzUgvLhrquK62GEbuNJNZDwh9jphetxN9Uq9_1sgDDpYVdmqsZha6bgiAfQBxao6kihSmfFMdsUNgyBwaCYgIvQuQYSCspEOg4pTxYs6mtVP0zu9UQNyM-MBzDARYnBZNwqHFyYSabRm5JQGwFZGl2AT3aXL6SS4lxqkT4oRmWyvN5qbZrgxzmOTKVe3KjqB8NBZfnlEAUKz_JlXlAwX0jNLKBBfjCZYKoCB0VRReigLZ_KfTbWi8qQws5YetGoxq8MQ55IDh5PLR4MEPFIzTPWanyaom1ZuuOhVM7dSyuRCa5sblgZwO0xVwByBcmOMZRQa5dSv5eEMeCfNiUZ0vfQ-r8pFEKJh80G6ZSsnwfxlBNipKdOPVrCMrLAEjeomxNNAoZlhhWldf4ZrYLZDrYEEPbByW3BoCKeIbLiJ8AqJ1ac8YTgcj4JbTqnOjFkrUJV1bLILKYhYM1sEFgLLU1kVOXi8c9w6MtlMzWy5feRlRww12cxEqOcGZ2NINweF-8hwaaMPCsLEfleABAiCgbabT5xJxDuZY_Qx3twxR1cn9eK7SKoJ7Ie-JlxPrI1NBTfErarhzzR095j6vaWLMBqd92HxqPXEk3Xvvy0&security=reality&sni=www.sony.com&fp=chrome&pbk=bCZzpVyXlz2OGkubjhmMZKV6U0z3kh9tdPAvyVZgUgA&sid=09fe05253e&spx=%2F&pqv=Z5MTiNHztMhjKRtMP78ArIuTcVo2BeCW2EeGFjA01x-E1Eqq6xMcvvbxToQk6pniWTxfvc5t6SzODM78vkhdo0So6-A5MPdm1Sth6j86Eq49evMTxy28kNdt-I7XUuPxmF6pVAKORGU21VhtdP5cRcGwLM8ED_azM2KXXPPDDQAypykrIaRLvLWLj54WgITy_YP4wPjsg77qJg0Tw6R79HFiFMTYukWW7ANjaQRSL57vk9CKd_VSY64uodoZwlmR7mX7XpDw_5ApLT5elDiY0-e-UaTUvXQn2PRevo1pn7ayzcpc-hgshUZnrJx-MLp_4Kk39B-wQjXlEj0iA4o2VLDCUrWDj9hC-NChA4vR-GlKu0lhm8faoq8ysviyX4BvyKpc9Qk962KFL-dXBxP12wCyP5Lttbw7tJ8cQY3vLM3XG2bjh1EFRpmHa3hLA-31q2LOCM0Br1qc8nRGJxxIjfRaWgz-9AEGc-2geDO8ob09c8v8zCePLhNpCQ3gKv1ki7sl7FdkL3aAToXbs0AtIN9LjEgqbLHLfq3gmWw2HWQID9R2yGr-Gl3DhPVr96rVxYA9MgWaW9a6RkekdoqrJeh0NIMLRFlH_ePPQfUNrBoeEDmzrb-k4B1PWBe-nlrIlC9A2PfX_tjCdsQne9olKrC3XjikuUfK0QLRMarmlS-wDbi_au3aNqx-m-4-P6RcgyBoQU48nsWKyJmM3aI1YUM5iDev8bGoLZWG1H_AgS2NUdfAgCfQZ9oWuNlN1yvVbVRxQfusmuO60tH1q0K6wEglxwXqNIa-dKiPMS8fxVQCU0GmesEgsv_hOgDT0WIIKqkwoJIS0rhGmiNuCNPKL13MlF9zGhjPaiBsWOn3eBI32inbfd6uDQlywj0jxLp0c_JHKfm9FNK3p1TKvYfHH2k173gXWVUT5TAxyotPIJjsCi3Q7LqXsFckPysLwiCdricLsbnjlOtM-76lJGZEuEIrKPRUQK7Md_7FTkjqchG55AiK1XMCRh1vNCTNMvMRmQQYfD1PkHriLXCcc73G96xRZuLJmbQrR3sF7hhtuFW9oN2vHaWI5XIkdTbI6mkjqQ3h2q6CK9ddP9rDr2QBeUReMiqnVEmF8mJaBXS8Aege2xiJJYfF5SWNxtdXi9VccO8bPkqKZ7WUVO2NlwPyl8Wgmqdh318nUlIhPC2xpw8xu4Q2FJqoKHiAvMp2Cnvca4F8CNtiAv66XXAj7AknX3XDLKBH_Rh_XX6Dq1wc09qWYA2pAEqJr7jqXqyHyMZr8kY_-lR8M7Jlh5qx5olbavu4Cm1jtU_DpJpFXTHP3qtT8Zdrt8V34x-64zCwb7_inGsg-gMxiX2TPoF7IA4tWZL2yTZBYikOwZkoZsX_b7xeB6T1TenV7dSBdYkHH5dbFNPNKGXg7mJGHtK3lsn95R8vqnGrCJljIJ6qHNyyAKEuyee8N4i0r31X3fOQoblYAYvGa0IKmMZ3jsDp3GhvINwfZiumlY6Z01DLay9jys3a9S212iIaWdKtJtjUdbbrD_VXm9TsmqZi531DxpkDiD05OmN611LeB4oBhDXUTbrIISMgVEkAmGm85YsNwbwDusPsdaH6ue72u0tyIJVePgfIT4zwN8ePzuNbeAgU-H0rDS1KjU4WCJkqNo86TY7pR1x33fmhEL13PiY5SnYKabd8nD0kI4t-AmdBlnXXLbTirFmSI3uQ6hOOGSBM38Fbs_K5L0HlSMiyG7yRfFQ83__PtTuA4RBstLMx6uocBVwM1FqR0qAYSynEjnMUxwPkUkEeQiTt4UA_DMN_x3dSm5hAkm4D3fkQgliMO3WIsBqcd9oynzxjNiMC9xhxXADCDyEO9CVmojY9rPuqlgOOadCkbRjhDEsPeU-b3ZYOoxkPK3k-pG3RwDmQRax5fwMi3Lgt1Wwb3-VVa7YsBA8YKe3SdPa8c39DeQED6pZE0aLgrtsyPEQdVQD4QOu1VcP5J7ATOe0fsyLaNZCQE0C67ZR0zOTMZYpZusvnPA1uNLsMyepCz6ulXF2k3yyIE66qNE4NBdOWfrLu4b0Dh3r4BmWjA3wiXCJljEZjXdr5eIi10RtEUgNFcDSUROEV1wKiAOohOkdQzlhngWh-sA9R9torMtzzgdaPObTtjeKKu27tgLHMQF5CQ_QyHCh3as3zI3sUCYsGc_CZ9ojZ8dARjAogw9OuOkp0oLhv091ShnL66osc7J8-LW6QMF_y5s0PdmBMjWHHdEtp9eRTJDfHMzL9DBFimbiqBc4juvg6aB2vPA42HtgUt_HuaP5S-4s2S8qRAXZYun62Yb_LF8Zpff3KlYm4pVl2fEP4ekxSfP-mB-eGOrM0yAuS72fh6EAqwwJQ9E_lL56c8fvz0Qfv7a_vwQgyZOBlugwW8VBAH1AiarU9pnyzPBRulDfuYjK9Jtt-XxzvRa68zvX7xlX5KhjpwaTP8386iAl1m-KfLC6zDS5JGrstMUPua84Fc6uW63iWavHTaHfQxY_wHLGRv07vdG3KC51C--EPA-gBhTz-w32XT5XmIIAE6eif6PXhKCrpS42yNB4jRZfNNdR7xR_RGs4ib-YOb7FBLIdCE3A&type=xhttp&path=%2Fmlkem76&mode=auto#%E7%8B%90%E5%B8%9D%E4%BA%91%E7%BE%8E%E5%9B%BD2-4\nvless://29dfa560-29ee-4280-9ed1-fa8830cf49ff@panel-jp.998521.xyz:29073?encryption=mlkem768x25519plus.native.0rtt.wIGxOPmJqAPMUzLO27KrFHtvKURNvyrNYYq9UZQd8_UWbOiX_RAUSjBa42gVR_EtGLsLTASdCduQXxPPveife6a7jUddKmh1q-oFGBJ3eUNfKcuW-KnI9zZQWMgzdEG1VYSiOmOunbXKEfpa4wgMk6iIGmfKKIuyGrjBQWQzXoxqa2GVYiMFeQh26MUdZVuvYkkDnTEqn_wr0EGTAzWz0Gp95DpEWhOQW1PBdARFyoKb-FlybUhXjvd96JxDNumAPOpvA9x5qziO9SKWX_BQC2sR_ytVrYKpGTuqn7p6HooSsGJrYIQmm4GhvkchOGIZCUUxCia8cOQh4kdis3jCduSkcYJnsMZHSwoc9hGjN2ERffJhVikseIvHqHVMiMcwyOVc6UEJSum2hGs0UEtR6nxJY1et_QDNZEjAkJFCFJiqFLBumKwjC9YRxqdO84g76PWuEgo81IODUFoxxzOZtOQyreK_cvyatEEPu6eOcByst8kljIgH7JmgvqQfo0SjQMgeOuMsdzp0fsLPC-NcB4U3tlckZ8N7jYV_WCaOCUe1yevPWtZQuqYs9rtEkfk3UeQk2LRTdyFhlFBMX_Z1s6ZsQVZ-QDFe5uufzUK4HppYSdWM_kPCt8qSRQii9QMfIWp_HTcu4_pJQHQz2UKohZMTL8k8i9BswUm0RWkWmYNCmjOJTqt0iOiKaWCeYXhIiWJB3cS5_gZKdRQrXjCY-ldiFAwLKImK7ogsrGQ2SEk6IOkeKXDJrUsmjcw3SAu6GaynowTEl_d_wFzN3bGIOJt791QqPnk4ALRhm6Jz_KhTHJEeGggpkuZQxVgTXnDKxtJFa-me-qk9anio8KR3cAWL2KkbFQVIOVVmpGZZm_mPXjihs0otJlm5lAJyPABxZDMhd6G679ZV_vZdsCUwKmSZYUmAS5SmfGoj-8YoTdViwhJG6ntjO8S2fXox9udwctM6FzUgvLhrquK62GEbuNJNZDwh9jphetxN9Uq9_1sgDDpYVdmqsZha6bgiAfQBxao6kihSmfFMdsUNgyBwaCYgIvQuQYSCspEOg4pTxYs6mtVP0zu9UQNyM-MBzDARYnBZNwqHFyYSabRm5JQGwFZGl2AT3aXL6SS4lxqkT4oRmWyvN5qbZrgxzmOTKVe3KjqB8NBZfnlEAUKz_JlXlAwX0jNLKBBfjCZYKoCB0VRReigLZ_KfTbWi8qQws5YetGoxq8MQ55IDh5PLR4MEPFIzTPWanyaom1ZuuOhVM7dSyuRCa5sblgZwO0xVwByBcmOMZRQa5dSv5eEMeCfNiUZ0vfQ-r8pFEKJh80G6ZSsnwfxlBNipKdOPVrCMrLAEjeomxNNAoZlhhWldf4ZrYLZDrYEEPbByW3BoCKeIbLiJ8AqJ1ac8YTgcj4JbTqnOjFkrUJV1bLILKYhYM1sEFgLLU1kVOXi8c9w6MtlMzWy5feRlRww12cxEqOcGZ2NINweF-8hwaaMPCsLEfleABAiCgbabT5xJxDuZY_Qx3twxR1cn9eK7SKoJ7Ie-JlxPrI1NBTfErarhzzR095j6vaWLMBqd92HxqPXEk3Xvvy0&security=reality&sni=www.sony.com&fp=chrome&pbk=bCZzpVyXlz2OGkubjhmMZKV6U0z3kh9tdPAvyVZgUgA&sid=09fe05253e&spx=%2F&pqv=Z5MTiNHztMhjKRtMP78ArIuTcVo2BeCW2EeGFjA01x-E1Eqq6xMcvvbxToQk6pniWTxfvc5t6SzODM78vkhdo0So6-A5MPdm1Sth6j86Eq49evMTxy28kNdt-I7XUuPxmF6pVAKORGU21VhtdP5cRcGwLM8ED_azM2KXXPPDDQAypykrIaRLvLWLj54WgITy_YP4wPjsg77qJg0Tw6R79HFiFMTYukWW7ANjaQRSL57vk9CKd_VSY64uodoZwlmR7mX7XpDw_5ApLT5elDiY0-e-UaTUvXQn2PRevo1pn7ayzcpc-hgshUZnrJx-MLp_4Kk39B-wQjXlEj0iA4o2VLDCUrWDj9hC-NChA4vR-GlKu0lhm8faoq8ysviyX4BvyKpc9Qk962KFL-dXBxP12wCyP5Lttbw7tJ8cQY3vLM3XG2bjh1EFRpmHa3hLA-31q2LOCM0Br1qc8nRGJxxIjfRaWgz-9AEGc-2geDO8ob09c8v8zCePLhNpCQ3gKv1ki7sl7FdkL3aAToXbs0AtIN9LjEgqbLHLfq3gmWw2HWQID9R2yGr-Gl3DhPVr96rVxYA9MgWaW9a6RkekdoqrJeh0NIMLRFlH_ePPQfUNrBoeEDmzrb-k4B1PWBe-nlrIlC9A2PfX_tjCdsQne9olKrC3XjikuUfK0QLRMarmlS-wDbi_au3aNqx-m-4-P6RcgyBoQU48nsWKyJmM3aI1YUM5iDev8bGoLZWG1H_AgS2NUdfAgCfQZ9oWuNlN1yvVbVRxQfusmuO60tH1q0K6wEglxwXqNIa-dKiPMS8fxVQCU0GmesEgsv_hOgDT0WIIKqkwoJIS0rhGmiNuCNPKL13MlF9zGhjPaiBsWOn3eBI32inbfd6uDQlywj0jxLp0c_JHKfm9FNK3p1TKvYfHH2k173gXWVUT5TAxyotPIJjsCi3Q7LqXsFckPysLwiCdricLsbnjlOtM-76lJGZEuEIrKPRUQK7Md_7FTkjqchG55AiK1XMCRh1vNCTNMvMRmQQYfD1PkHriLXCcc73G96xRZuLJmbQrR3sF7hhtuFW9oN2vHaWI5XIkdTbI6mkjqQ3h2q6CK9ddP9rDr2QBeUReMiqnVEmF8mJaBXS8Aege2xiJJYfF5SWNxtdXi9VccO8bPkqKZ7WUVO2NlwPyl8Wgmqdh318nUlIhPC2xpw8xu4Q2FJqoKHiAvMp2Cnvca4F8CNtiAv66XXAj7AknX3XDLKBH_Rh_XX6Dq1wc09qWYA2pAEqJr7jqXqyHyMZr8kY_-lR8M7Jlh5qx5olbavu4Cm1jtU_DpJpFXTHP3qtT8Zdrt8V34x-64zCwb7_inGsg-gMxiX2TPoF7IA4tWZL2yTZBYikOwZkoZsX_b7xeB6T1TenV7dSBdYkHH5dbFNPNKGXg7mJGHtK3lsn95R8vqnGrCJljIJ6qHNyyAKEuyee8N4i0r31X3fOQoblYAYvGa0IKmMZ3jsDp3GhvINwfZiumlY6Z01DLay9jys3a9S212iIaWdKtJtjUdbbrD_VXm9TsmqZi531DxpkDiD05OmN611LeB4oBhDXUTbrIISMgVEkAmGm85YsNwbwDusPsdaH6ue72u0tyIJVePgfIT4zwN8ePzuNbeAgU-H0rDS1KjU4WCJkqNo86TY7pR1x33fmhEL13PiY5SnYKabd8nD0kI4t-AmdBlnXXLbTirFmSI3uQ6hOOGSBM38Fbs_K5L0HlSMiyG7yRfFQ83__PtTuA4RBstLMx6uocBVwM1FqR0qAYSynEjnMUxwPkUkEeQiTt4UA_DMN_x3dSm5hAkm4D3fkQgliMO3WIsBqcd9oynzxjNiMC9xhxXADCDyEO9CVmojY9rPuqlgOOadCkbRjhDEsPeU-b3ZYOoxkPK3k-pG3RwDmQRax5fwMi3Lgt1Wwb3-VVa7YsBA8YKe3SdPa8c39DeQED6pZE0aLgrtsyPEQdVQD4QOu1VcP5J7ATOe0fsyLaNZCQE0C67ZR0zOTMZYpZusvnPA1uNLsMyepCz6ulXF2k3yyIE66qNE4NBdOWfrLu4b0Dh3r4BmWjA3wiXCJljEZjXdr5eIi10RtEUgNFcDSUROEV1wKiAOohOkdQzlhngWh-sA9R9torMtzzgdaPObTtjeKKu27tgLHMQF5CQ_QyHCh3as3zI3sUCYsGc_CZ9ojZ8dARjAogw9OuOkp0oLhv091ShnL66osc7J8-LW6QMF_y5s0PdmBMjWHHdEtp9eRTJDfHMzL9DBFimbiqBc4juvg6aB2vPA42HtgUt_HuaP5S-4s2S8qRAXZYun62Yb_LF8Zpff3KlYm4pVl2fEP4ekxSfP-mB-eGOrM0yAuS72fh6EAqwwJQ9E_lL56c8fvz0Qfv7a_vwQgyZOBlugwW8VBAH1AiarU9pnyzPBRulDfuYjK9Jtt-XxzvRa68zvX7xlX5KhjpwaTP8386iAl1m-KfLC6zDS5JGrstMUPua84Fc6uW63iWavHTaHfQxY_wHLGRv07vdG3KC51C--EPA-gBhTz-w32XT5XmIIAE6eif6PXhKCrpS42yNB4jRZfNNdR7xR_RGs4ib-YOb7FBLIdCE3A&type=xhttp&path=%2Fmlkem76&mode=auto#%E6%B5%81%E9%87%8F%E9%9D%A2%E6%9D%BFJP-%E7%8B%90%E5%B8%9D%E4%BA%91%E7%BE%8E%E5%9B%BD2-4\ntuic://7cdf7f94-ea0b-44b1-99a3-51c03a305e10%3A7cdf7f94-ea0b-44b1-99a3-51c03a305e10@47.79.145.248:43464?sni=www.bing.com&alpn=h3&insecure=1&allowInsecure=1&congestion_control=bbr#%E7%88%AA%E4%BA%91%E6%97%A5%E6%9C%AC-https%3A%2F%2Frun.claw.cloud%2F\nvless://7cdf7f94-ea0b-44b1-99a3-51c03a305e10@ffgzhcgzwuzm.ap-northeast-1.clawcloudrun.com:443?encryption=none&security=tls&sni=ffgzhcgzwuzm.ap-northeast-1.clawcloudrun.com&fp=chrome&insecure=1&allowInsecure=1&type=ws&host=ffgzhcgzwuzm.ap-northeast-1.clawcloudrun.com&path=%2F#%E7%88%AA%E4%BA%91%E6%97%A5%E6%9C%AC-https%3A%2F%2Frun.claw.cloud%2F\n', '2026-01-07 07:17:54', '2026-01-07 07:17:57', 0, NULL, NULL, 1);
INSERT INTO `markdown_file` VALUES (399462116077211648, 399461225492254720, '节点订阅链接', '节点订阅链接.md', 'https://jcmei.311169.xyz/ikmkj\n\nhttps://mei.311169.xyz/91658e42-f7e2-48e5-8d19-f7cbab273cde\n\nhttps://huggingface.ikmkj.dpdns.org/sub\n\nhttps://joey-mf.pages.dev/ef1f6415-2664-4460-8688-1d83c3b68548/sub\n', '2026-01-07 07:19:50', '2026-01-07 07:19:50', 0, NULL, NULL, 1);
INSERT INTO `markdown_file` VALUES (399462427638501376, 399462299703840768, 'containerd安装', 'containerd安装.md', '# 下载 nerdctl-full 包（含 containerd、runc、CNI 插件）\n\nwget https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-full-1.7.7-linux-amd64.tar.gz\n\n# 解压到 /usr/local\n\nsudo tar Cxzvf /usr/local nerdctl-full-1.7.7-linux-amd64.tar.gz\n\n# 启动 containerd（如果尚未启动）\n\nsudo systemctl enable --now containerd\n\n# 验证安装\n\nnerdctl version\n\n**nerdctl 和 docker 的使用方法是一致的。**\n\n因为你Docker 和 containerd（nerdctl）的镜像存储路径是分开的，它们不共享镜像缓存。\nDocker 的镜像默认存储在 /var/lib/docker，而 nerdctl 使用的是 containerd 的镜像存储路径 /var/lib/containerd/io.containerd.content.v1.content。\n\n如何让 nerdctl 使用 Docker 的镜像？\n方法1：导出 Docker 镜像 → 导入 nerdctl\n\n# 1. 导出 Docker 镜像\n\ndocker save myimage:latest -o myimage.tar\n\n# 2. 导入到 nerdctl\n\nnerdctl load -i myimage.tar\n\n# 3. 验证\n\nnerdctl images | grep myimage\n\n方法2：重新拉取镜像到 nerdctl\n\nnerdctl pull myimage:latest\n\n# 基础版的\n\n说明		containerd命令\n查看本地镜像		ctr images ls\n拉取镜像		ctr images pull imagename\n推送镜像		ctr images push imagename\n给镜像打标签	 	ctr images tag imagename tagname\n导出镜像		ctr images export filename imagename\n导入镜像		ctr image import filename\n运行并创建容器	ctr  run [options]  imagenamecontainername\n\n进入容器	docker exec [options] names commond	 ctr task exec  [options]   names commond\n查看运行的容器	docker ps 	ctr task list\n删除容器	docker rm [options] names	ctr task rm -f names  /  ctr c rm -f  names\n', '2026-01-07 07:21:04', '2026-01-07 07:21:10', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399462537969668096, 399462299703840768, 'sqlit初始化', 'sqlit初始化.md', '# 输入创建数据库命令\n\n~~~sql\n在目录中运行该文件\nsqlite3 mydatabase.db\n~~~\n\n# 输入命令后\n\n~~~sql\nC:\\it\\houtaigunli\\liu>sqlite3 mydatabase.db\n-- 显示下面的\nSQLite version 3.49.2 2025-05-07 10:39:52\nEnter \".help\" for usage hints.\nsqlite>\n~~~\n\n# 后续输入下面命令才显示\n\n~~~sql\nsqlite> .databases\n-- 显示下面的\nmain: C:\\it\\houtaigunli\\liu\\mydatabase.db r/w\nsqlite>\n~~~\n\n# 使用可视化工具连接后创建数据库\n\n~~~sql\n运行sql.sql文件\n~~~\n', '2026-01-07 07:21:31', '2026-01-07 07:21:31', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399462674594926592, 399462299703840768, 'ssh修改端口脚本', 'ssh修改端口脚本.md', '```\n#!/bin/bash\n# 2. 赋予执行权限\n#chmod +x ssh_port_change.sh    (或者把-x改成777)\n# SSH安全加固脚本 (仅修改端口)\n# 功能：交互式修改SSH端口，保留root登录和密码认证\n# 兼容: CentOS/RHEL/Rocky, Debian/Ubuntu, Kylin V10\n\n# 检查root权限\nif [ \"$EUID\" -ne 0 ]; then\n    echo \"请使用sudo或root用户运行此脚本\"\n    exit 1\nfi\n\n# 颜色定义\nRED=\'\\033[0;31m\'\nGREEN=\'\\033[0;32m\'\nYELLOW=\'\\033[1;33m\'\nNC=\'\\033[0m\'\n\n# 获取当前SSH端口\nCURRENT_PORT=$(grep -E \"^#?Port\\s+\" /etc/ssh/sshd_config | awk \'{print $2}\')\nCURRENT_PORT=${CURRENT_PORT:-22}\n\necho -e \"${YELLOW}当前SSH端口: ${CURRENT_PORT}${NC}\"\n\n# 备份原始配置\nBACKUP_FILE=\"/etc/ssh/sshd_config.bak-$(date +%Y%m%d%H%M%S)\"\ncp /etc/ssh/sshd_config \"$BACKUP_FILE\"\necho -e \"${YELLOW}已创建SSH配置备份: $BACKUP_FILE${NC}\"\n\n# 1. 修改SSH端口\nread -p \"是否要修改SSH默认端口? [y/N] \" change_port\nif [[ $change_port =~ ^[Yy]$ ]]; then\n    while true; do\n        read -p \"请输入新的SSH端口 (1024-49151, 当前: $CURRENT_PORT): \" new_port\n\n        # 验证端口范围\n        if ! [[ \"$new_port\" =~ ^[0-9]+$ ]] || [ \"$new_port\" -lt 1024 ] || [ \"$new_port\" -gt 49151 ]; then\n            echo -e \"${RED}错误: 端口号必须在1024-49151范围内${NC}\"\n            continue\n        fi\n\n        # 检查端口是否已使用\n        if ss -tuln | grep -q \":$new_port\\b\"; then\n            echo -e \"${RED}错误: 端口 $new_port 已被占用${NC}\"\n        else\n            break\n        fi\n    done\n\n    # 更新配置\n    if grep -qE \"^#?Port\\s+\" /etc/ssh/sshd_config; then\n        sed -i \"s/^#*Port\\s\\+.*/Port $new_port/\" /etc/ssh/sshd_config\n    else\n        echo \"Port $new_port\" >> /etc/ssh/sshd_config\n    fi\n\n    # 确保保留root登录和密码认证\n    sed -i \'s/^#*PermitRootLogin\\s\\+.*/PermitRootLogin yes/\' /etc/ssh/sshd_config\n    sed -i \'s/^#*PasswordAuthentication\\s\\+.*/PasswordAuthentication yes/\' /etc/ssh/sshd_config\n\n    # 应用配置\n    systemctl restart sshd\n\n    echo -e \"${GREEN}已设置SSH端口为: $new_port${NC}\"\n    echo -e \"${GREEN}保留root登录和密码认证${NC}\"\n    echo -e \"${YELLOW}重要: 请在新终端测试SSH连接 (端口 $new_port) 后再关闭当前会话!${NC}\"\n    echo -e \"${YELLOW}提示: 使用防火墙管理脚本开放新端口${NC}\"\nelse\n    echo -e \"${YELLOW}未修改SSH端口，保持当前设置${NC}\"\nfi\n\n# 显示最终配置\necho -e \"\\n${YELLOW}=== 当前SSH配置 ===\"\ngrep -E \"Port|PermitRootLogin|PasswordAuthentication\" /etc/ssh/sshd_config\necho -e \"==================${NC}\"\n\necho -e \"\\n${GREEN}SSH配置更新完成!${NC}\"\n```\n', '2026-01-07 07:22:03', '2026-01-07 07:22:10', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399462924118265856, 399462299703840768, 'linux初始化脚本', 'linux初始化脚本.md', '~~~bash\n#!/bin/bash\n# ============================================================\n# Linux 初始化脚本（CentOS / RHEL / Rocky / Debian / Ubuntu / KylinV10）\n#https://zhichao.org/posts/0b9dfa  这里面有常用的\n# ============================================================\nset -euo pipefail\n\n# =======================\n# 0. 必须以 root 执行\n# =======================\n[[ $EUID -ne 0 ]] && { echo \"请使用 root 运行此脚本\"; exit 1; }\n\n# =======================\n# 1. 通用变量\n# =======================\nTIMEZONE=\"Asia/Shanghai\"\nREG_MIRROR=\"https://docker.1ms.run\"      # 官方中国区镜像，更稳定\nREG_MIRROR1=\"https://docker.ikmkj.dpdns.org\"\nDOCKER_COMPOSE_VERSION=\"v2.27.1\"               # 仅当下载二进制时生效，plugin 版本跟随仓库\nSKIP_DOCKER_INSTALL=0   # 默认不跳过\n\n\n# =======================\n# 0.1 交互式确认函数\n# =======================\nask_yes_or_no() {\n    while true; do\n        read -p \"$1 [y/N] \" answer\n        case $answer in\n            [Yy]*) return 0 ;;\n            [Nn]*|\"\" ) return 1 ;;\n        esac\n    done\n}\n# 判断包管理器(这里不能注释，用来判断是哪个系统的，只能注释有 =========的)\nif command -v apt-get >/dev/null 2>&1; then\n    PM=\"apt\"\nelif command -v yum >/dev/null 2>&1; then\n    PM=\"yum\"\nelif command -v dnf >/dev/null 2>&1; then\n    PM=\"dnf\"\nelse\n    echo \"未知包管理器，退出\"; exit 1\nfi\n\n# 检测 Rocky Linux\nIS_ROCKY=0\nif [[ -f /etc/rocky-release ]] || \n   ([[ -f /etc/redhat-release ]] && grep -qi \'rocky\' /etc/redhat-release); then\n    IS_ROCKY=1\nfi\n\n# =======================\n# 2. 更新系统 & 缓存\n# =======================\necho \">> 1. 更新系统软件包 ...\"\ncase $PM in\n    apt)\n        apt-get update\n        apt-get -y full-upgrade\n        ;;\n    yum|dnf)\n        $PM -y update\n        ;;\nesac\n\n# =======================\n# 3. 安装常用工具\n# =======================\necho \">> 2. 安装常用工具 ...\"\ncase $PM in\n    apt)\n        apt-get -y install curl wget vim git htop tree lrzsz unzip net-tools lsof tar\n        ;;\n    yum|dnf)\n        $PM -y install epel-release\n        $PM -y install curl wget vim git htop tree lrzsz unzip net-tools lsof tar\n        ;;\nesac\n\n# =======================\n# 4. 设置时区 & 时间同步\n# =======================\necho \">> 3. 设置时区 Asia/Shanghai ...\"\n# ---------- 1. 确保时区文件存在 ----------\nzone_file=\"/usr/share/zoneinfo/${TIMEZONE}\"\nif [[ ! -e \"$zone_file\" ]]; then\n    echo \"⚠️  时区文件缺失，尝试安装 tzdata ...\"\n    case \"$PM\" in\n        apt) apt-get -y install tzdata ;;\n        yum|dnf) $PM -y install tzdata ;;\n    esac\nfi\ntimedatectl set-timezone \"$TIMEZONE\"\n\n# ---------- 2. 时间同步 ----------\necho \">> 配置时间同步 ...\"\nif command -v chronyd >/dev/null 2>&1; then\n    systemctl enable --now chronyd\nelif systemctl list-unit-files | grep -q systemd-timesyncd; then\n    sed -i \"s/^#NTP=.*/NTP=ntp.aliyun.com cn.pool.ntp.org/\" /etc/systemd/timesyncd.conf\n    systemctl enable --now systemd-timesyncd\nelse\n    # 最简方案：ntpdate 定时\n    case \"$PM\" in\n        apt) apt-get -y install ntpdate ;;\n        yum|dnf) $PM -y install ntpdate ;;\n    esac\n    ntpdate ntp.aliyun.com\n    echo \"0 */6 * * * root ntpdate ntp.aliyun.com >/dev/null 2>&1\" >> /etc/crontab\nfi\n\n# =======================\n# 5. 彻底关闭 SELinux & Firewalld\n# =======================\necho \">> 4. 关闭 SELinux、防火墙 ...\"\n\nif ask_yes_or_no \"警告：是否要彻底关闭防火墙 (firewalld, ufw) 和 SELinux？这是一个高风险操作，仅建议在安全的内网环境中使用。\"; then\n    # 1. 关闭并禁用防火墙服务\n    if systemctl list-unit-files | grep -q firewalld; then\n        systemctl stop firewalld\n        systemctl disable firewalld\n        echo \"已关闭并禁用 firewalld\"\n    fi\n    if command -v ufw >/dev/null 2>&1; then\n        ufw --force disable\n        ufw --force reset\n        echo \"已关闭并重置 ufw\"\n    fi\n\n    # 2. 清空所有防火墙规则\n    for iptables_cmd in iptables ip6tables; do\n        if command -v $iptables_cmd >/dev/null 2>&1; then\n            $iptables_cmd -F; $iptables_cmd -X; $iptables_cmd -t nat -F; $iptables_cmd -t nat -X; $iptables_cmd -t mangle -F; $iptables_cmd -t mangle -X;\n            $iptables_cmd -P INPUT ACCEPT; $iptables_cmd -P FORWARD ACCEPT; $iptables_cmd -P OUTPUT ACCEPT;\n            echo \"已清空 $iptables_cmd 规则\"\n        fi\n    done\n\n    # 3. 永久禁用 SELinux\n    if [[ -f /etc/selinux/config ]]; then\n        [ ! -f /etc/selinux/config.bak ] && cp /etc/selinux/config /etc/selinux/config.bak\n        sed -i \'s/^SELINUX=.*/SELINUX=disabled/\' /etc/selinux/config\n        setenforce 0 >/dev/null 2>&1 || true\n    fi\n\n    # 3.3 修改 GRUB 内核参数\n    if [[ -f /etc/default/grub ]]; then\n        [ ! -f /etc/default/grub.bak ] && cp /etc/default/grub /etc/default/grub.bak\n        # 确保 GRUB_CMDLINE_LINUX 存在\n        if ! grep -q \'^GRUB_CMDLINE_LINUX=\' /etc/default/grub; then\n            echo \'GRUB_CMDLINE_LINUX=\"\"\' >> /etc/default/grub\n        fi\n  \n        # 添加 selinux=0 参数（如果不存在）\n        if ! grep -q \'selinux=0\' /etc/default/grub; then\n            sed -i \'/^GRUB_CMDLINE_LINUX=/s/\"$/ selinux=0\"/\' /etc/default/grub\n        fi\n  \n        # 更新 GRUB 配置\n        if command -v grub2-mkconfig >/dev/null 2>&1; then\n            if [[ -d /sys/firmware/efi ]]; then\n                # UEFI 系统\n                [[ -d /boot/efi/EFI/centos ]] && grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg\n                [[ -d /boot/efi/EFI/redhat ]] && grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg\n                [[ -d /boot/efi/EFI/rocky ]] && grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg\n                [[ -d /boot/efi/EFI/ubuntu ]] && grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg\n                [[ -d /boot/efi/EFI/debian ]] && grub2-mkconfig -o /boot/efi/EFI/debian/grub.cfg\n            else\n                # Legacy BIOS 系统\n                [[ -f /boot/grub2/grub.cfg ]] && grub2-mkconfig -o /boot/grub2/grub.cfg\n                [[ -f /boot/grub/grub.cfg ]] && grub2-mkconfig -o /boot/grub/grub.cfg\n            fi\n        elif command -v update-grub >/dev/null 2>&1; then\n            update-grub\n        else\n            echo \"⚠️ 无法自动更新 GRUB 配置，请手动执行相应命令！\"\n        fi\n    else\n        echo \"⚠️ 未找到 /etc/default/grub 文件，跳过 GRUB 配置更新\"\n    fi\n\n    # 4. 对于 Kylin V10 等特殊系统，额外处理\n    if [[ -f /etc/kylin-release ]]; then\n        systemctl stop secpaver 2>/dev/null || true\n        systemctl disable secpaver 2>/dev/null || true\n    fi\n    echo \">> SELinux 和防火墙已按您的选择进行处理 <<\"\nelse\n    echo \">> 已跳过关闭防火墙和 SELinux 的操作 <<\"\nfi\n\n\n# =======================\n# 6. 内核参数优化\n# =======================\necho \">> 5. 优化内核参数 ...\"\ncat >/etc/sysctl.d/99-init.conf <<\'EOF\'\n# 网络\nnet.core.somaxconn = 32768\nnet.ipv4.tcp_max_syn_backlog = 16384\nnet.ipv4.ip_forward = 1\nnet.ipv4.tcp_timestamps = 0\nnet.ipv4.tcp_tw_reuse = 1\nnet.ipv4.tcp_fin_timeout = 10\nfs.file-max = 6553560\n# 内存\nvm.swappiness = 10\nEOF\nsysctl -p /etc/sysctl.d/99-init.conf\n\n# =======================\n# 7. SSH 优化\n# =======================\necho \">> 6. 优化 SSH ...\"\n[ ! -f /etc/ssh/sshd_config.bak ] && cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak\nsed -i -e \'s/^#UseDNS yes/UseDNS no/\' \\\n       -e \'s/^GSSAPIAuthentication yes/GSSAPIAuthentication no/\' \\\n       -e \'s/^#PermitRootLogin .*/#PermitRootLogin prohibit-password/\' \\\n       -e \'s/^#ClientAliveInterval.*/ClientAliveInterval 300/\' \\\n       -e \'s/^#ClientAliveCountMax.*/ClientAliveCountMax 2/\' \\\n       /etc/ssh/sshd_config\nsystemctl restart sshd\n\n# =======================\n# 8. 字符集中文\n# =======================\necho \">> 7. 设置系统字符集为 zh_CN.UTF-8 ...\"\ncase $PM in\n    apt)\n        apt-get -y install locales\n        sed -i \'/zh_CN.UTF-8/s/^# //g\' /etc/locale.gen\n        locale-gen zh_CN.UTF-8\n        update-locale LANG=zh_CN.UTF-8\n        ;;\n    yum|dnf)\n        $PM -y install glibc-langpack-zh\n        ;;\nesac\nlocalectl set-locale LANG=zh_CN.UTF-8\n\n# =======================\n# 9. 安装 Docker（官方脚本，最新稳定版）[^1^]\n# =======================\n\n\n# 下载 nerdctl-full 包（含 containerd、runc、CNI 插件）\nwget https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-full-1.7.7-linux-amd64.tar.gz\n\n# 解压到 /usr/local\nsudo tar Cxzvf /usr/local nerdctl-full-1.7.7-linux-amd64.tar.gz\n\n# 启动 containerd（如果尚未启动）\nsudo systemctl enable --now containerd\n\n# 验证安装\nnerdctl version\n\n# 确保配置目录存在\nmkdir -p /etc/containerd/certs.d/docker.io\n\ncat <<EOF > /etc/containerd/config.toml\n[plugins.\"io.containerd.grpc.v1.cri\".registry]\n  config_path  = \"/etc/containerd/certs.d\"\nEOF\n\n# 写入 hosts.toml 配置\ncat <<EOF > /etc/containerd/certs.d/docker.io/hosts.toml\nserver = \"https://registry-1.docker.io\"\n\n[host.\"$REG_MIRROR1\"]\n  capabilities = [\"pull\", \"resolve\"]\nEOF\n\n# 重启 containerd 服务\nsystemctl restart containerd\n\necho \"Containerd 镜像加速器配置完成，加速器地址为: $REG_MIRROR1\"\n\n#\n## CentOS 7 特殊处理\n#if [[ -f /etc/centos-release ]] && grep -q \'CentOS Linux release 7\' /etc/centos-release; then\n#    echo \">> CentOS 7 补丁：改用官方脚本安装 Docker ...\"\n#    yum -y remove docker* containerd.io\n#    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun\n#    systemctl enable --now docker\n#    SKIP_DOCKER_INSTALL=1\n#fi\n#\n## 其他系统安装\n#if [[ $SKIP_DOCKER_INSTALL -eq 0 ]]; then\n#    echo \">> 安装最新 Docker ...\"\n#    case $PM in\n#        yum|dnf)\n#            echo \">> 移除可能冲突的旧版 Docker 及相关软件包...\"\n#            # 增加移除 Podman 及其相关组件\n#            $PM -y remove docker docker-client docker-client-latest docker-common \\\n#                  docker-latest docker-latest-logrotate docker-logrotate \\\n#                  docker-engine podman buildah cri-o runc containerd \\\n#                  >/dev/null 2>&1 || true\n#            $PM -y install dnf-plugins-core yum-utils\n#            # 处理 Rocky 标识\n#            if [[ $IS_ROCKY -eq 1 ]]; then\n#                echo \">> 为 Rocky Linux 启用 Docker CE 仓库...\"\n#                $PM config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo\n#                 # 添加 SELinux 策略包\n#                $PM -y install container-selinux\n#            fi\n#\n#            # 安装前加载内核模块\n#            modprobe overlay || true\n#            modprobe br_netfilter || true\n#            $PM -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin\n#            ;;\n#        apt)\n#            curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun\n#            ;;\n#    esac\n#fi\n#\n## Docker 通用配置\n#echo \">> 配置 Docker 镜像加速器及 cgroup 驱动...\"\n#mkdir -p /etc/docker\n#cat >/etc/docker/daemon.json <<EOF\n#{\n#  \"registry-mirrors\": [\"https://docker.xuanyuan.me/\"],\n#  \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n#  \"log-driver\": \"json-file\",\n#  \"log-opts\": {\"max-size\": \"100m\", \"max-file\": \"3\"}\n#}\n#EOF\n#\n## 加载内核设置\n#cat > /etc/modules-load.d/docker.conf <<EOF\n#overlay\n#br_netfilter\n#EOF\n#\n#cat > /etc/sysctl.d/docker.conf <<EOF\n#net.bridge.bridge-nf-call-iptables  = 1\n#net.bridge.bridge-nf-call-ip6tables = 1\n#net.ipv4.ip_forward                 = 1\n#EOF\n#\n#sysctl --system >/dev/null 2>&1\n#\n#systemctl daemon-reload\n#systemctl enable --now docker\n#systemctl restart docker\n\n# =======================\n# 10. 安装 docker-compose v2（plugin 优先，否则二进制）\n# =======================\necho \">> 9. 安装 docker-compose ...\"\nif docker compose version >/dev/null 2>&1; then\n    echo \"docker compose plugin 已存在\"\nelse\n     # 设置版本号（你可以改成你需要的版本）\n        DOCKER_COMPOSE_VERSION=\"${DOCKER_COMPOSE_VERSION:-v2.24.5}\"\n\n        # 正确的 URL 拼接\n        curl -L \"https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)\" \\\n             -o /usr/local/bin/docker-compose\n    chmod +x /usr/local/bin/docker-compose\n    # 软链接，兼容老命令\n    ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose || true\nfi\n\n# =======================\n# 11. 安装 CrowdSec\n# =======================\necho \">> 安装并配置 CrowdSec ...\"\ncase $PM in\n    apt)\n        curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash\n        apt-get update\n        apt-get -y install crowdsec\n        ;;\n    yum|dnf)\n        rpm --import https://packagecloud.io/crowdsec/crowdsec/gpgkey\n        cat > /etc/yum.repos.d/crowdsec.repo <<\'EOF\'\n[crowdsec]\nname=crowdsec\nbaseurl=https://packagecloud.io/crowdsec/crowdsec/el/$releasever/$basearch\ngpgcheck=1\nenabled=1\nEOF\n        $PM -y install crowdsec\n        ;;\nesac\n\n# 启动并启用 CrowdSec 服务\nsystemctl enable --now crowdsec\nsystemctl enable --now crowdsec-firewall-bouncer-iptables\n\n# ---------- CrowdSec 配置结束 ----------\n# =======================\n# 13. 清理无用内核 / 缓存包\n# =======================\necho \">> 11. 清理旧内核及缓存 ...\"\ncase $PM in\n    apt)\n        apt-get -y autoremove --purge\n        apt-get clean\n        update-grub\n        ;;\n    yum)\n        yum -y install yum-utils\n        yum -y autoremove --oldkernels --count=1 || true\n        yum clean all\n        ;;\n    dnf)\n        dnf -y autoremove\n        dnf clean all\n        ;;\nesac\n\n# =======================\n# 14. 设置默认编辑器\n# =======================\necho \">> 12. 设置默认编辑器为 vim ...\"\nVIM_PATH=$(command -v vim 2>/dev/null || command -v vi 2>/dev/null)\nif [[ -n \"$VIM_PATH\" ]]; then\n    # 兼容 Debian/Ubuntu\n    if command -v update-alternatives &>/dev/null; then\n        update-alternatives --set editor \"$VIM_PATH\" >/dev/null 2>&1 || true\n    fi\n    echo \"export EDITOR=$VIM_PATH\" >>/etc/profile\nelse\n    echo \"⚠️ 未找到 vim 或 vi 编辑器\"\nfi\n\n\necho \"==== 初始化完成，请手动执行 reboot 重启系统 ====\"\n~~~\n', '2026-01-07 07:23:03', '2026-01-07 07:23:03', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399463926930214912, 399462299703840800, 'Caddy', 'Caddy.md', '## 创建所需要的目录文件\n\n~~~bash\nmkdir -p /docker/caddy/{config/caddy.d,config/l4-enabled,html,certs,caddy_data,caddy_config}\n~~~\n\n### Caddyfile（主配置）\n\n```\n~~~ Caddyfile\n{\n	# 全局选项：可关掉自动 HTTPS（测试环境）\n	# auto_https off\n\n    # tcp/udp流量的\n    layer4 {\n        # 引入所有 TCP/UDP 子配置\n        import /etc/caddy/l4-enabled/*.caddy\n    }\n\n}\n\n# 自动引入子配置\nimport /etc/caddy/sites-enabled/*.caddy\n```\n\n### 反向代理一个已经创建好的网站\n\n```\n~~~ Caddyfile\n# 将 your-proxy-domain.com 替换为代理服务器的域名（或IP）\nyour-proxy-domain.com {\n    # 反向代理到目标服务器https://biji2.311169.xyz\n    reverse_proxy https://biji2.311169.xyz {\n        # 使用 {upstream_hostport} 自动获取目标网站的主机名\n        header_up Host {upstream_hostport}\n  \n        # 其他推荐头部设置\n        header_up X-Forwarded-For {remote_host}\n        header_up X-Real-IP {remote}\n        header_up X-Forwarded-Proto {scheme}\n    }\n}\n~~~\n\n### 反向代理，需要跨域的\n~~~ Caddyfile\n# 在代理层处理CORS的配置\napp.example.com {\n    # 处理预检请求 (OPTIONS)\n    @options {\n        method OPTIONS\n    }\n    respond @options 204 {\n        header Access-Control-Allow-Origin \"*\"\n        header Access-Control-Allow-Methods \"GET, POST, PUT, DELETE\"\n        header Access-Control-Allow-Headers \"Content-Type, Authorization\"\n    }\n\n    # 代理到后端\n    reverse_proxy https://api.example.com {\n        header_up Host {upstream_hostport}\n  \n        # 添加CORS响应头\n        header_down Access-Control-Allow-Origin \"*\"\n        header_down Access-Control-Allow-Credentials \"true\"\n        header_down Access-Control-Expose-Headers \"X-Custom-Header\"\n        header_down Access-Control-Allow-Headers \"Content-Type, Authorization\"\n        header_down Access-Control-Max-Age \"3600\"\n    }\n}\n~~~\n\n\n\n### 创建站点\n~~~ Caddyfile\nbiji2.311169.xyz {  # 自己的域名\n    # 开启 Gzip / zstd 压缩\n    encode zstd gzip\n\n    # 1. 配置API反向代理\n    # 匹配 /api/ 开头的请求，并保留完整路径进行转发\n\n    handle_path /api/* {\n        reverse_proxy http://huanan.311169.xyz:8084\n    }\n\n    # 2. 配置前端静态文件服务\n    root * /usr/share/caddy\n    file_server browse\n}\n~~~\n```\n\n### 反向代理+负载均衡\n\n~~~yaml\naaa.com {\n    encode gzip zstd\n\n    reverse_proxy {\n        # 后端列表，权重 5:3:2\n        to  A1.com:443{weight=5}\n        to  B1.com:443{weight=3}\n        to  C1.com:443{weight=2}\n\n        lb_policy weighted_round_robin\n\n        # 健康检查（任选一台机吐的静态路径）\n        health {\n            uri          /healthz\n            interval     15s\n            timeout      3s\n            passes       2\n            fails        2\n        }\n\n        fail_duration 30s\n        max_fails     3\n\n        # 关键：向后端握手时使用它自己的域名\n        transport http {\n            tls\n            tls_server_name {upstream_hostport}   # 自动取 A1.com / B1.com / C1.com\n            keepalive 30s\n        }\n    }\n\n    # 日志，可以不用\n    log {\n        output file /data/logs/aaa.com_access.log\n        format json\n    }\n}\n~~~\n\n### 反代tcp/udp流量\n\n~~~bash\n# 把 3307 端口收到的纯 TCP 流量转到后端 3306\n0.0.0.0:3307 {\n    route {\n        proxy {\n            upstream 10.0.0.55:3306\n        }\n    }\n}\n~~~\n\n## docker-compose\n\n~~~yaml\nservices:\n  caddy:\n    image: local/caddy-l4:2.7  #能TCP反代\n    container_name: caddy-rp\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    environment:\n      TZ: Asia/Shanghai\n      [REDACTED]    networks: [caddy-net]\n    volumes:\n      - /docker/caddy/config/Caddyfile:/etc/caddy/Caddyfile:ro  #主配置文件\n      - /docker/caddy/config/caddy.d:/etc/caddy/sites-enabled:ro  # http/https子配置文件\n      - /docker/caddy/config/l4-enabled:/etc/caddy/l4-enabled:ro  # tcp/udp子配置文件\n      - /docker/caddy/html:/usr/share/caddy:ro   # 站点静态文件\n      - /docker/caddy/certs:/certs:ro          # ← 手动证书\n      - caddy_data:/data                      #申请的证书\n      - caddy_config:/config               # caddy的内置文件\n\nvolumes:\n  caddy_data:\n    driver: local\n    driver_opts:\n      type: none\n      device: /docker/caddy/caddy_data\n      o: bind\n  caddy_config:\n    driver: local\n    driver_opts:\n      type: none\n      device: /docker/caddy/caddy_config\n      o: bind\n\nnetworks:\n  caddy-net:\n    driver: bridge\n~~~\n', '2026-01-07 07:27:02', '2026-01-07 08:27:43', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399468868004876288, 399468715122495488, '各种打包命令', '各种打包命令.md', '```\n\n# 后端打包\n\n## 需要push到远程仓库\n`mvn clean package docker:build docker:push`\n\n## 忽略测试用例\n`mvn clean package  -D maven.test.skip=true -am docker:build`\n## 忽略测试用例,指定环境\n`mvn clean package -P prod  -D maven.test.skip=true -am docker:build`\n\n# 在dockerfile中已经设置好了启动哪个配置文件\nENV SPRING_PROFILES_ACTIVE=test \\\nJAVA_OPTS=\"-Xmx512m -XX:MaxRAMPercentage=75\"\n\n# 前端\n\n## 直接在根目录运行\n- 开发环境：进入 liu-vue 目录运行 `npm run dev` → 使用开发 API \n  cd liu-vue\n  npm run dev  # 使用开发API\n\n- 生产环境：在根目录运行 `npm run build:frontend` → 使用生产 API\n- 主要是看package.json在哪里，在该文件夹中(运行、构建等地方)添加 `build:frontend\": \"vite build`\n  npm run build:frontend  # 使用生产API\n\n# lunix命令\n\n## 查看内存\nfree -h\ntotal表示内存总量，used表示已使用的内存量，free表示空闲的内存量\n\n## 查看cpu\n查看使用\ntop\n\n查看型号\ncat /proc/cpuinfo | grep \"model name\" | uniq -c\n\n\n# windows将本地镜像导入服务器中\n## windows上\n查看当前镜像\ndocker images\n\n 导出镜像为tar文件\ndocker save biji-houdaun:0.0.1-SNAPSHOT -o biji-houdaun.tar\n## 在Linux服务器上导入镜像\ndocker load -i biji-houdaun.tar\n\n验证镜像是否导入成功\ndocker images\n\n\n# MySQL数据库创建用户单独使用一个数据库\n-- 创建用户\nCREATE USER \'用户名称\'@\'localhost\'(本地)/\'%\'(所有主机) IDENTIFIED BY \'密码\';\n\n-- 授予对biji_db数据库的权限\nGRANT ALL PRIVILEGES ON biji_db.* TO \'用户名称\'@\'%\';\n\n-- 刷新权限\nFLUSH PRIVILEGES;\n\n\n\n# docker启动命令\n\n## 运行命令\n\n--name 名称，-p 机器端口:容器端口，--memory 内存限制，--cpus CPU限制，--restart 重启策略，\n-v 本地路径:容器路径，-d 运行后台\n--log-opt max-size=10m 日志大小限制，--log-opt max-file=3 日志文件数量限制，liu:latest 镜像名称\n~~~bash\ndocker run -d \\\n  --name myapp-container \\\n  -p 80:8082 \\\n  -v /root/docker/liu/data:/data \\\n  --memory 600m \\\n  --cpus 1.0 \\\n  --restart unless-stopped \\\n  --log-opt max-size=5m \\\n  --log-opt max-file=3 \\\n  liu:latest\n ~~~\n\n## 查看启动日志\nmyapp-container 容器名称\n`docker logs -f myapp-container`\n\n## 强制删除启动中的容器\n`docker rm -f myapp-container`\n\n## 停止并删除容器\n`docker stop  myapp-container`\n\n## 删除镜像\n`docker rmi liu:latest`\n\n\n\n# docker compose启动命令\n\n##  启动docker-compose.yml中的所有容器\n`docker-compose up -d`\n\n## 启动某一个容器\n\ndocker-compose up -d [服务名称]\n\n`docker-compose up -d myapp-container`\n\n~~~yaml\nversion: \'3.8\'\nmyapp-container:\n  myapp:\n    image: liu:latest\n~~~\n```\n', '2026-01-07 07:46:40', '2026-01-07 07:46:44', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399479402179727360, 399462299703840768, 'caddy能反代tcp/udp编译', 'caddy能反代tcp/udp编译.md', '~~~dockerfile\n# ① 用 2.10 分支的 builder（已带 Go 1.22）\nFROM caddy:2.10-builder-alpine AS builder\nRUN xcaddy build --with github.com/mholt/caddy-l4\n\nFROM caddy:2.10-alpine\nCOPY --from=builder /usr/bin/caddy /usr/bin/caddy\nENTRYPOINT [\"caddy\"]\nCMD [\"run\", \"--config\", \"/etc/caddy/Caddyfile\", \"--adapter\", \"caddyfile\"]\n~~~\n', '2026-01-07 08:28:31', '2026-01-07 08:28:35', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399812465187229696, 399462299703840768, 'docker部署mysql，redis', 'docker部署mysql，redis.md', '## docker-compose.yml\n\n```yaml\nversion: \"3.9\"\n\nservices:\n  mysql:\n    image: mysql:8.0-oraclelinux8   # 官方镜像，体积稍小\n    container_name: mysql\n    restart: always\n    ports:\n      - \"3306:3306\"\n    environment:\n      MYSQL_ROOT_PASSWORD: [REDACTED]  #root密码\n      MYSQL_DATABASE: usera    #创建的数据库\n      MYSQL_USER: usera        #创建数据库的用户\n      MYSQL_PASSWORD: [REDACTED]   #创建数据库的密码\n    volumes:\n      - /docker/mysql/conf:/etc/mysql/conf.d:ro  #配置文件\n      - /docker/mysql/data:/var/lib/mysql        #数据库文件\n    command:\n      - \"--defaults-file=/etc/mysql/conf.d/my.cnf\"\n    deploy:\n      resources:\n        limits:\n          memory: 1.5G        # 硬上限 1.5 GB\n        reservations:\n          memory: 1G\n\n  redis:\n    image: redis:7-alpine\n    container_name: redis\n    restart: always\n    ports:\n      - \"6379:6379\"\n    command: redis-server /usr/local/etc/redis/redis.conf\n    volumes:\n      - /docker/redis/config/redis.conf:/usr/local/etc/redis/redis.conf:ro\n      - /docker/redis/data:/data\n    deploy:\n      resources:\n        limits:\n          memory: 1.5G        # 硬上限 600 MB\n        reservations:\n          memory: 1G\n\n```\n\n### mysql.cnf\n\n```yaml\n[mysqld]\n# 基础\nuser=mysql\ndatadir=/var/lib/mysql\nsocket=/var/run/mysqld/mysqld.sock\n\n# 字符集\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci\n\n# 认证插件（兼容老客户端）\ndefault-authentication-plugin=mysql_native_password\n\n# 内存池（4G 机器给 1G 足够）\ninnodb_buffer_pool_size = 1G\ninnodb_log_buffer_size  = 16M\ninnodb_log_file_size    = 256M\nkey_buffer_size         = 32M\ntmp_table_size          = 32M\nmax_heap_table_size     = 32M\n\n# 连接数\nmax_connections         = 100\n\n# 其他\nexplicit_defaults_for_timestamp = 1\n\n\n```\n\n### redis.conf\n\n```yaml\n# 网络\nbind 0.0.0.0\nport 6379\nprotected-mode yes\n# 密码\nrequirepass 123456\n\n# 内存上限 & 淘汰策略\nmaxmemory 1G\nmaxmemory-policy allkeys-lru\n\n# 持久化（混合 RDB + AOF，量小机子可关闭 AOF 省 IO）\nsave 900 1\nsave 300 10\nsave 60  10000\nappendonly yes\nappendfsync everysec \n  # 如果磁盘 IO 吃紧可改成 no\n\n# 日志\nloglevel notice\nlogfile \"\"\n\n# 工作目录\ndir /data\n```\n', '2026-01-08 06:32:00', '2026-01-08 06:32:12', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399812718460276736, 399462299703840768, 'docker镜像', 'docker镜像.md', '~~~bash\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<\'EOF\'\n{\n  \"registry-mirrors\": [\n    \"https://registry.aliyuncs.com\",\n    \"https://docker.mirrors.ustc.edu.cn\",\n    \"https://docker.1ms.run\",\n    \"https://docker.xuanyuan.me\",\n    \"https://0dj0t5fb.mirror.aliyuncs.com\",\n    \"https://docker.mirrors.ustc.edu.cn\",\n    \"https://registry.docker-cn.com\"\n  ]\n}\nEOF\n~~~\n', '2026-01-08 06:33:00', '2026-01-08 06:33:03', 0, NULL, NULL, 0);
INSERT INTO `markdown_file` VALUES (399812978381295616, 399462299703840768, 'docker部署nginx+域名ssl', 'docker部署nginx+域名ssl.md', '## docker-compose.yml\n\n```yaml\n\nversion: \"3.8\"\nservices:\n  nginx:\n    image: nginx:alpine\n    container_name: nginx\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - /docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro  #主配置文件\n      - /docker/nginx/conf.d:/etc/nginx/conf.d:ro          #子配置文件(tcp/udp)\n     # - /docker/nginx/conf.d/sites:/etc/nginx/sites:ro     #站点配置文件\n      - /docker/nginx/ssl:/etc/nginx/ssl:ro				   # Let\'s Encrypt 落盘\n      - /docker/nginx/html:/etc/nginx/html:ro			   # 前端静态文件\n      - /docker/nginx/certbot/www:/var/www/certbot:ro      # 验证文件\n    depends_on:\n      - mysql\n      - redis\n      - certbot\n    restart: unless-stopped\n\n  certbot:\n    image: certbot/certbot:latest\n    container_name: certbot\n    volumes:\n      - ./docker/nginx/ssl:/etc/letsencrypt\n      - /docker/nginx/certbot/www:/var/www/certbot\n    entrypoint: \"/bin/sh -c \'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;\'\"\n\nvolumes:\n  redis_data:\n\n```\n\n## 首先创建一个基础的配置文件\n\n```dsconfig\nserver {\n    listen 80;\n    server_name  hdyg-mysql.311169.xyz hdyg-redis.311169.xyz; 要申请的域名\n  \n    location ^~ /.well-known/acme-challenge/ {\n        root /var/www/certbot;  #重要，必须和容器内的路径一样\n        try_files $uri =404;\n    }\n\n    root /etc/nginx/html;\n    index index.html;\n\n    location / {\n        try_files $uri $uri/ =404;\n    }\n}\n\n```\n\n## 申请 Let\'s Encrypt 证书（替换域名 & 邮箱）。\n\n```bash\ndocker compose exec certbot certbot certonly \\\n  --webroot -w /var/www/certbot \\\n  -d hdyg-mysql.311169.xyz -d hdyg-redis.311169.xyz \\\n  --email 1@qq.com --agree-tos --no-eff-email\n```\n', '2026-01-08 06:34:02', '2026-01-08 06:34:02', 0, NULL, NULL, 0);

-- ----------------------------
-- Table structure for registration_codes
-- ----------------------------
DROP TABLE IF EXISTS `registration_codes`;
CREATE TABLE `registration_codes`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `expiry_time` datetime NOT NULL,
  `created_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_code`(`code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of registration_codes
-- ----------------------------

-- ----------------------------
-- Table structure for system_settings
-- ----------------------------
DROP TABLE IF EXISTS `system_settings`;
CREATE TABLE `system_settings`  (
  `setting_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `setting_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  PRIMARY KEY (`setting_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of system_settings
-- ----------------------------

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `token_enddata` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `uk_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (4, 'admin', '$2a$10$apE9cmOHi4022KK0hfJnbOS6dGZEibYVhItK7UYCHGyl.JYl8bIse', NULL, '2025-07-31 02:56:59', '2025-07-31 02:56:59', NULL, NULL);

SET FOREIGN_KEY_CHECKS = 1;
