Files
biji/sql/mysql/biji_db.sql
ikmkj 90f63d9df1 feat(api): 初始化笔记应用后端基础架构
- 添加环境配置文件 .env.example 包含数据库、JWT、CORS等配置
- 创建 .gitignore 文件忽略敏感文件和临时文件
- 配置 Apache 重写规则支持路由转发
- 实现 JWT 认证中间件提供用户身份验证功能
- 添加 MySQL 数据库初始化脚本包含分组、图片、笔记表结构
2026-01-26 08:49:10 +08:00

173 lines
68 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
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 和 containerdnerdctl的镜像存储路径是分开的它们不共享镜像缓存。\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 v2plugin 优先,否则二进制)\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 CLOUDFLARE_API_TOKEN: m-4Ph7InLvQ_xSo-v2y72Cmp6ZgazBz3bH14dKO3\n 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部署mysqlredis', 'docker部署mysqlredis.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: 123456 #root密码\n MYSQL_DATABASE: usera #创建的数据库\n MYSQL_USER: usera #创建数据库的用户\n MYSQL_PASSWORD: 123456 #创建数据库的密码\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;