[{"data":1,"prerenderedAt":2877},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fgetting-started\u002Fdocker":117,"\u002Fdocs\u002Fgetting-started\u002Fdocker-surround":2872},[4,28,69,103],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"快速开始","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"简介","i-lucide-home",{"title":13,"path":14,"stem":15,"icon":16},"一键部署","\u002Fdocs\u002Fgetting-started\u002Finstall","1.docs\u002F1.getting-started\u002F2.install","i-lucide-rocket",{"title":18,"path":19,"stem":20,"icon":21},"Docker 部署","\u002Fdocs\u002Fgetting-started\u002Fdocker","1.docs\u002F1.getting-started\u002F3.docker","i-lucide-container",{"title":23,"path":24,"stem":25,"icon":26},"宝塔面板部署","\u002Fdocs\u002Fgetting-started\u002Fbt-panel","1.docs\u002F1.getting-started\u002F4.bt-panel","i-lucide-panel-top",null,{"title":29,"path":30,"stem":31,"children":32,"page":68},"基础配置","\u002Fdocs\u002Fconfig","1.docs\u002F2.config",[33,38,43,48,53,58,63],{"title":34,"path":35,"stem":36,"icon":37},"基本配置","\u002Fdocs\u002Fconfig\u002Fbasic","1.docs\u002F2.config\u002F1.basic","i-lucide-settings",{"title":39,"path":40,"stem":41,"icon":42},"主题配置","\u002Fdocs\u002Fconfig\u002Ftheme","1.docs\u002F2.config\u002F2.theme","i-lucide-palette",{"title":44,"path":45,"stem":46,"icon":47},"通知配置","\u002Fdocs\u002Fconfig\u002Fnotification","1.docs\u002F2.config\u002F3.notification","i-lucide-bell",{"title":49,"path":50,"stem":51,"icon":52},"AI 配置","\u002Fdocs\u002Fconfig\u002Fai","1.docs\u002F2.config\u002F4.ai","i-lucide-sparkles",{"title":54,"path":55,"stem":56,"icon":57},"OAuth 配置","\u002Fdocs\u002Fconfig\u002Foauth","1.docs\u002F2.config\u002F5.oauth","i-lucide-key-round",{"title":59,"path":60,"stem":61,"icon":62},"上传配置","\u002Fdocs\u002Fconfig\u002Fupload","1.docs\u002F2.config\u002F6.upload","i-lucide-cloud-upload",{"title":64,"path":65,"stem":66,"icon":67},"导入导出","\u002Fdocs\u002Fconfig\u002Fimport-export","1.docs\u002F2.config\u002F7.import-export","i-lucide-arrow-right-left",false,{"title":70,"path":71,"stem":72,"children":73,"page":68},"使用指南","\u002Fdocs\u002Fguide","1.docs\u002F3.guide",[74,78,83,88,93,98],{"title":75,"path":76,"stem":77,"icon":16},"快速入门","\u002Fdocs\u002Fguide\u002Fquick-start","1.docs\u002F3.guide\u002F1.quick-start",{"title":79,"path":80,"stem":81,"icon":82},"用户管理","\u002Fdocs\u002Fguide\u002Fuser","1.docs\u002F3.guide\u002F2.user","i-lucide-users",{"title":84,"path":85,"stem":86,"icon":87},"文章管理","\u002Fdocs\u002Fguide\u002Farticle","1.docs\u002F3.guide\u002F3.article","i-lucide-file-text",{"title":89,"path":90,"stem":91,"icon":92},"文章编辑","\u002Fdocs\u002Fguide\u002Feditor","1.docs\u002F3.guide\u002F4.editor","i-lucide-pen-line",{"title":94,"path":95,"stem":96,"icon":97},"动态管理","\u002Fdocs\u002Fguide\u002Fmoment","1.docs\u002F3.guide\u002F5.moment","i-lucide-message-circle",{"title":99,"path":100,"stem":101,"icon":102},"友链管理","\u002Fdocs\u002Fguide\u002Ffriend","1.docs\u002F3.guide\u002F6.friend","i-lucide-link",{"title":104,"path":105,"stem":106,"children":107,"page":68},"获得帮助","\u002Fdocs\u002Fhelp","1.docs\u002F4.help",[108,113],{"title":109,"path":110,"stem":111,"icon":112},"常见问题","\u002Fdocs\u002Fhelp\u002Ffaq","1.docs\u002F4.help\u002F1.faq","i-lucide-circle-help",{"title":114,"path":115,"stem":116,"icon":97},"取得联系","\u002Fdocs\u002Fhelp\u002Fcontact","1.docs\u002F4.help\u002F2.contact",{"id":118,"title":18,"body":119,"description":2866,"extension":2867,"meta":2868,"navigation":2869,"path":19,"seo":2870,"stem":20,"__hash__":2871},"docs\u002F1.docs\u002F1.getting-started\u002F3.docker.md",{"type":120,"value":121,"toc":2844},"minimark",[122,127,131,135,145,148,178,181,190,214,221,274,281,945,952,967,974,986,993,996,1010,1026,1029,1161,1165,1168,1171,1188,1192,1284,1287,1417,1420,1423,1428,1491,1496,1558,1564,1574,1577,1582,1593,1598,1643,1648,1686,1691,1726,1731,1766,1769,1772,1775,1778,1798,1802,1991,1996,2027,2031,2076,2080,2083,2087,2102,2114,2118,2124,2146,2148,2160,2163,2173,2179,2192,2195,2240,2243,2246,2251,2254,2299,2301,2306,2312,2320,2327,2330,2336,2339,2351,2362,2364,2369,2372,2388,2391,2406,2416,2418,2423,2426,2432,2456,2459,2462,2474,2477,2479,2488,2493,2496,2508,2511,2527,2529,2534,2537,2543,2546,2552,2559,2562,2581,2583,2588,2594,2599,2602,2607,2610,2612,2617,2620,2623,2693,2695,2700,2703,2724,2727,2749,2752,2754,2759,2762,2765,2771,2774,2776,2781,2784,2798,2801,2820,2823,2837,2840],[123,124,126],"h2",{"id":125},"docker-compose","Docker Compose",[128,129,130],"p",{},"Docker Compose 是最推荐的部署方式，一行命令即可启动全部服务。",[132,133,134],"h3",{"id":134},"前置要求",[136,137,138,142],"ul",{},[139,140,141],"li",{},"已安装 Docker",[139,143,144],{},"已安装 Docker Compose",[128,146,147],{},"验证安装：",[149,150,155],"pre",{"className":151,"code":152,"language":153,"meta":154,"style":154},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker --version\ndocker-compose --version\n","bash","",[156,157,158,171],"code",{"__ignoreMap":154},[159,160,163,167],"span",{"class":161,"line":162},"line",1,[159,164,166],{"class":165},"sBMFI","docker",[159,168,170],{"class":169},"sfazB"," --version\n",[159,172,174,176],{"class":161,"line":173},2,[159,175,125],{"class":165},[159,177,170],{"class":169},[132,179,180],{"id":180},"配置步骤",[182,183,184],"ol",{},[139,185,186],{},[187,188,189],"strong",{},"创建项目目录",[149,191,193],{"className":151,"code":192,"language":153,"meta":154,"style":154},"mkdir -p \u002Fsrv\u002Fflecblog\ncd \u002Fsrv\u002Fflecblog\n",[156,194,195,206],{"__ignoreMap":154},[159,196,197,200,203],{"class":161,"line":162},[159,198,199],{"class":165},"mkdir",[159,201,202],{"class":169}," -p",[159,204,205],{"class":169}," \u002Fsrv\u002Fflecblog\n",[159,207,208,212],{"class":161,"line":173},[159,209,211],{"class":210},"s2Zo4","cd",[159,213,205],{"class":169},[182,215,216],{"start":173},[139,217,218],{},[187,219,220],{},"创建 .env 配置文件",[149,222,226],{"className":223,"code":224,"language":225,"meta":154,"style":154},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 数据库密码（请修改为强密码）\nDB_PASSWORD=your_database_password\n\n# JWT 密钥（请修改为随机字符串）\nJWT_SECRET=your_jwt_secret\n\n# API 对外访问地址\nAPI_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1\n","toml",[156,227,228,233,238,245,251,257,262,268],{"__ignoreMap":154},[159,229,230],{"class":161,"line":162},[159,231,232],{},"# 数据库密码（请修改为强密码）\n",[159,234,235],{"class":161,"line":173},[159,236,237],{},"DB_PASSWORD=your_database_password\n",[159,239,241],{"class":161,"line":240},3,[159,242,244],{"emptyLinePlaceholder":243},true,"\n",[159,246,248],{"class":161,"line":247},4,[159,249,250],{},"# JWT 密钥（请修改为随机字符串）\n",[159,252,254],{"class":161,"line":253},5,[159,255,256],{},"JWT_SECRET=your_jwt_secret\n",[159,258,260],{"class":161,"line":259},6,[159,261,244],{"emptyLinePlaceholder":243},[159,263,265],{"class":161,"line":264},7,[159,266,267],{},"# API 对外访问地址\n",[159,269,271],{"class":161,"line":270},8,[159,272,273],{},"API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1\n",[182,275,276],{"start":240},[139,277,278],{},[187,279,280],{},"创建 docker-compose.yml",[149,282,286],{"className":283,"code":284,"language":285,"meta":154,"style":154},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  postgres:\n    image: postgres:15-alpine\n    container_name: flec_postgres\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: postgres\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n    networks:\n      - flec-network\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U postgres\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  server:\n    image: talen8\u002Fflec-server:latest\n    container_name: flec_server\n    restart: unless-stopped\n    environment:\n      DB_HOST: postgres\n      DB_PORT: 5432\n      DB_NAME: postgres\n      DB_USER: postgres\n      DB_PASSWORD: ${DB_PASSWORD}\n      JWT_SECRET: ${JWT_SECRET}\n      API_URL: ${API_URL}\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - \u002Fsrv\u002Fflecblog:\u002Fapp\u002Fdata\n    networks:\n      - flec-network\n    depends_on:\n      postgres:\n        condition: service_healthy\n\n  blog:\n    image: talen8\u002Fflec-blog:latest\n    container_name: flec_blog\n    restart: unless-stopped\n    environment:\n      NUXT_PUBLIC_API_URL: ${API_URL}\n    ports:\n      - \"3000:3000\"\n    networks:\n      - flec-network\n    depends_on:\n      - server\n\n  admin:\n    image: talen8\u002Fflec-admin:latest\n    container_name: flec_admin\n    restart: unless-stopped\n    environment:\n      API_URL: ${API_URL}\n    ports:\n      - \"4000:4000\"\n    networks:\n      - flec-network\n    depends_on:\n      - server\n\nnetworks:\n  flec-network:\n    driver: bridge\n\nvolumes:\n  postgres_data:\n","yaml",[156,287,288,298,305,316,326,336,343,353,362,373,381,390,398,406,414,447,458,469,481,486,494,504,514,523,530,540,551,561,571,581,592,603,611,624,631,639,646,653,661,669,680,685,693,703,713,722,729,739,746,758,765,772,779,787,792,800,810,820,829,836,845,852,864,871,878,885,892,897,905,913,924,929,937],{"__ignoreMap":154},[159,289,290,294],{"class":161,"line":162},[159,291,293],{"class":292},"swJcz","services",[159,295,297],{"class":296},"sMK4o",":\n",[159,299,300,303],{"class":161,"line":173},[159,301,302],{"class":292},"  postgres",[159,304,297],{"class":296},[159,306,307,310,313],{"class":161,"line":240},[159,308,309],{"class":292},"    image",[159,311,312],{"class":296},":",[159,314,315],{"class":169}," postgres:15-alpine\n",[159,317,318,321,323],{"class":161,"line":247},[159,319,320],{"class":292},"    container_name",[159,322,312],{"class":296},[159,324,325],{"class":169}," flec_postgres\n",[159,327,328,331,333],{"class":161,"line":253},[159,329,330],{"class":292},"    restart",[159,332,312],{"class":296},[159,334,335],{"class":169}," unless-stopped\n",[159,337,338,341],{"class":161,"line":259},[159,339,340],{"class":292},"    environment",[159,342,297],{"class":296},[159,344,345,348,350],{"class":161,"line":264},[159,346,347],{"class":292},"      POSTGRES_DB",[159,349,312],{"class":296},[159,351,352],{"class":169}," postgres\n",[159,354,355,358,360],{"class":161,"line":270},[159,356,357],{"class":292},"      POSTGRES_USER",[159,359,312],{"class":296},[159,361,352],{"class":169},[159,363,365,368,370],{"class":161,"line":364},9,[159,366,367],{"class":292},"      POSTGRES_PASSWORD",[159,369,312],{"class":296},[159,371,372],{"class":169}," ${DB_PASSWORD}\n",[159,374,376,379],{"class":161,"line":375},10,[159,377,378],{"class":292},"    volumes",[159,380,297],{"class":296},[159,382,384,387],{"class":161,"line":383},11,[159,385,386],{"class":296},"      -",[159,388,389],{"class":169}," postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n",[159,391,393,396],{"class":161,"line":392},12,[159,394,395],{"class":292},"    networks",[159,397,297],{"class":296},[159,399,401,403],{"class":161,"line":400},13,[159,402,386],{"class":296},[159,404,405],{"class":169}," flec-network\n",[159,407,409,412],{"class":161,"line":408},14,[159,410,411],{"class":292},"    healthcheck",[159,413,297],{"class":296},[159,415,417,420,422,425,428,431,433,436,439,442,444],{"class":161,"line":416},15,[159,418,419],{"class":292},"      test",[159,421,312],{"class":296},[159,423,424],{"class":296}," [",[159,426,427],{"class":296},"\"",[159,429,430],{"class":169},"CMD-SHELL",[159,432,427],{"class":296},[159,434,435],{"class":296},",",[159,437,438],{"class":296}," \"",[159,440,441],{"class":169},"pg_isready -U postgres",[159,443,427],{"class":296},[159,445,446],{"class":296},"]\n",[159,448,450,453,455],{"class":161,"line":449},16,[159,451,452],{"class":292},"      interval",[159,454,312],{"class":296},[159,456,457],{"class":169}," 10s\n",[159,459,461,464,466],{"class":161,"line":460},17,[159,462,463],{"class":292},"      timeout",[159,465,312],{"class":296},[159,467,468],{"class":169}," 5s\n",[159,470,472,475,477],{"class":161,"line":471},18,[159,473,474],{"class":292},"      retries",[159,476,312],{"class":296},[159,478,480],{"class":479},"sbssI"," 5\n",[159,482,484],{"class":161,"line":483},19,[159,485,244],{"emptyLinePlaceholder":243},[159,487,489,492],{"class":161,"line":488},20,[159,490,491],{"class":292},"  server",[159,493,297],{"class":296},[159,495,497,499,501],{"class":161,"line":496},21,[159,498,309],{"class":292},[159,500,312],{"class":296},[159,502,503],{"class":169}," talen8\u002Fflec-server:latest\n",[159,505,507,509,511],{"class":161,"line":506},22,[159,508,320],{"class":292},[159,510,312],{"class":296},[159,512,513],{"class":169}," flec_server\n",[159,515,517,519,521],{"class":161,"line":516},23,[159,518,330],{"class":292},[159,520,312],{"class":296},[159,522,335],{"class":169},[159,524,526,528],{"class":161,"line":525},24,[159,527,340],{"class":292},[159,529,297],{"class":296},[159,531,533,536,538],{"class":161,"line":532},25,[159,534,535],{"class":292},"      DB_HOST",[159,537,312],{"class":296},[159,539,352],{"class":169},[159,541,543,546,548],{"class":161,"line":542},26,[159,544,545],{"class":292},"      DB_PORT",[159,547,312],{"class":296},[159,549,550],{"class":479}," 5432\n",[159,552,554,557,559],{"class":161,"line":553},27,[159,555,556],{"class":292},"      DB_NAME",[159,558,312],{"class":296},[159,560,352],{"class":169},[159,562,564,567,569],{"class":161,"line":563},28,[159,565,566],{"class":292},"      DB_USER",[159,568,312],{"class":296},[159,570,352],{"class":169},[159,572,574,577,579],{"class":161,"line":573},29,[159,575,576],{"class":292},"      DB_PASSWORD",[159,578,312],{"class":296},[159,580,372],{"class":169},[159,582,584,587,589],{"class":161,"line":583},30,[159,585,586],{"class":292},"      JWT_SECRET",[159,588,312],{"class":296},[159,590,591],{"class":169}," ${JWT_SECRET}\n",[159,593,595,598,600],{"class":161,"line":594},31,[159,596,597],{"class":292},"      API_URL",[159,599,312],{"class":296},[159,601,602],{"class":169}," ${API_URL}\n",[159,604,606,609],{"class":161,"line":605},32,[159,607,608],{"class":292},"    ports",[159,610,297],{"class":296},[159,612,614,616,618,621],{"class":161,"line":613},33,[159,615,386],{"class":296},[159,617,438],{"class":296},[159,619,620],{"class":169},"8080:8080",[159,622,623],{"class":296},"\"\n",[159,625,627,629],{"class":161,"line":626},34,[159,628,378],{"class":292},[159,630,297],{"class":296},[159,632,634,636],{"class":161,"line":633},35,[159,635,386],{"class":296},[159,637,638],{"class":169}," \u002Fsrv\u002Fflecblog:\u002Fapp\u002Fdata\n",[159,640,642,644],{"class":161,"line":641},36,[159,643,395],{"class":292},[159,645,297],{"class":296},[159,647,649,651],{"class":161,"line":648},37,[159,650,386],{"class":296},[159,652,405],{"class":169},[159,654,656,659],{"class":161,"line":655},38,[159,657,658],{"class":292},"    depends_on",[159,660,297],{"class":296},[159,662,664,667],{"class":161,"line":663},39,[159,665,666],{"class":292},"      postgres",[159,668,297],{"class":296},[159,670,672,675,677],{"class":161,"line":671},40,[159,673,674],{"class":292},"        condition",[159,676,312],{"class":296},[159,678,679],{"class":169}," service_healthy\n",[159,681,683],{"class":161,"line":682},41,[159,684,244],{"emptyLinePlaceholder":243},[159,686,688,691],{"class":161,"line":687},42,[159,689,690],{"class":292},"  blog",[159,692,297],{"class":296},[159,694,696,698,700],{"class":161,"line":695},43,[159,697,309],{"class":292},[159,699,312],{"class":296},[159,701,702],{"class":169}," talen8\u002Fflec-blog:latest\n",[159,704,706,708,710],{"class":161,"line":705},44,[159,707,320],{"class":292},[159,709,312],{"class":296},[159,711,712],{"class":169}," flec_blog\n",[159,714,716,718,720],{"class":161,"line":715},45,[159,717,330],{"class":292},[159,719,312],{"class":296},[159,721,335],{"class":169},[159,723,725,727],{"class":161,"line":724},46,[159,726,340],{"class":292},[159,728,297],{"class":296},[159,730,732,735,737],{"class":161,"line":731},47,[159,733,734],{"class":292},"      NUXT_PUBLIC_API_URL",[159,736,312],{"class":296},[159,738,602],{"class":169},[159,740,742,744],{"class":161,"line":741},48,[159,743,608],{"class":292},[159,745,297],{"class":296},[159,747,749,751,753,756],{"class":161,"line":748},49,[159,750,386],{"class":296},[159,752,438],{"class":296},[159,754,755],{"class":169},"3000:3000",[159,757,623],{"class":296},[159,759,761,763],{"class":161,"line":760},50,[159,762,395],{"class":292},[159,764,297],{"class":296},[159,766,768,770],{"class":161,"line":767},51,[159,769,386],{"class":296},[159,771,405],{"class":169},[159,773,775,777],{"class":161,"line":774},52,[159,776,658],{"class":292},[159,778,297],{"class":296},[159,780,782,784],{"class":161,"line":781},53,[159,783,386],{"class":296},[159,785,786],{"class":169}," server\n",[159,788,790],{"class":161,"line":789},54,[159,791,244],{"emptyLinePlaceholder":243},[159,793,795,798],{"class":161,"line":794},55,[159,796,797],{"class":292},"  admin",[159,799,297],{"class":296},[159,801,803,805,807],{"class":161,"line":802},56,[159,804,309],{"class":292},[159,806,312],{"class":296},[159,808,809],{"class":169}," talen8\u002Fflec-admin:latest\n",[159,811,813,815,817],{"class":161,"line":812},57,[159,814,320],{"class":292},[159,816,312],{"class":296},[159,818,819],{"class":169}," flec_admin\n",[159,821,823,825,827],{"class":161,"line":822},58,[159,824,330],{"class":292},[159,826,312],{"class":296},[159,828,335],{"class":169},[159,830,832,834],{"class":161,"line":831},59,[159,833,340],{"class":292},[159,835,297],{"class":296},[159,837,839,841,843],{"class":161,"line":838},60,[159,840,597],{"class":292},[159,842,312],{"class":296},[159,844,602],{"class":169},[159,846,848,850],{"class":161,"line":847},61,[159,849,608],{"class":292},[159,851,297],{"class":296},[159,853,855,857,859,862],{"class":161,"line":854},62,[159,856,386],{"class":296},[159,858,438],{"class":296},[159,860,861],{"class":169},"4000:4000",[159,863,623],{"class":296},[159,865,867,869],{"class":161,"line":866},63,[159,868,395],{"class":292},[159,870,297],{"class":296},[159,872,874,876],{"class":161,"line":873},64,[159,875,386],{"class":296},[159,877,405],{"class":169},[159,879,881,883],{"class":161,"line":880},65,[159,882,658],{"class":292},[159,884,297],{"class":296},[159,886,888,890],{"class":161,"line":887},66,[159,889,386],{"class":296},[159,891,786],{"class":169},[159,893,895],{"class":161,"line":894},67,[159,896,244],{"emptyLinePlaceholder":243},[159,898,900,903],{"class":161,"line":899},68,[159,901,902],{"class":292},"networks",[159,904,297],{"class":296},[159,906,908,911],{"class":161,"line":907},69,[159,909,910],{"class":292},"  flec-network",[159,912,297],{"class":296},[159,914,916,919,921],{"class":161,"line":915},70,[159,917,918],{"class":292},"    driver",[159,920,312],{"class":296},[159,922,923],{"class":169}," bridge\n",[159,925,927],{"class":161,"line":926},71,[159,928,244],{"emptyLinePlaceholder":243},[159,930,932,935],{"class":161,"line":931},72,[159,933,934],{"class":292},"volumes",[159,936,297],{"class":296},[159,938,940,943],{"class":161,"line":939},73,[159,941,942],{"class":292},"  postgres_data",[159,944,297],{"class":296},[182,946,947],{"start":247},[139,948,949],{},[187,950,951],{},"启动服务",[149,953,955],{"className":151,"code":954,"language":153,"meta":154,"style":154},"docker-compose up -d\n",[156,956,957],{"__ignoreMap":154},[159,958,959,961,964],{"class":161,"line":162},[159,960,125],{"class":165},[159,962,963],{"class":169}," up",[159,965,966],{"class":169}," -d\n",[182,968,969],{"start":253},[139,970,971],{},[187,972,973],{},"验证服务状态",[149,975,977],{"className":151,"code":976,"language":153,"meta":154,"style":154},"docker-compose ps\n",[156,978,979],{"__ignoreMap":154},[159,980,981,983],{"class":161,"line":162},[159,982,125],{"class":165},[159,984,985],{"class":169}," ps\n",[128,987,988,989,992],{},"正常情况下会看到四个服务都处于 ",[156,990,991],{},"Up"," 状态。",[132,994,995],{"id":995},"访问服务",[136,997,998,1004],{},[139,999,1000,1001],{},"博客端：",[156,1002,1003],{},"http:\u002F\u002F服务器IP:3000",[139,1005,1006,1007],{},"管理端：",[156,1008,1009],{},"http:\u002F\u002F服务器IP:4000",[1011,1012,1013],"blockquote",{},[128,1014,1015,1018,1019,1022,1023],{},[187,1016,1017],{},"初始账号","\n初始账号密码为 ",[156,1020,1021],{},"admin@example.com"," \u002F ",[156,1024,1025],{},"123456",[132,1027,1028],{"id":1028},"常用操作",[149,1030,1032],{"className":151,"code":1031,"language":153,"meta":154,"style":154},"# 查看所有服务日志\ndocker-compose logs -f\n\n# 查看指定服务日志\ndocker-compose logs -f server\ndocker-compose logs -f blog\ndocker-compose logs -f admin\n\n# 重启服务\ndocker-compose restart\n\n# 停止服务\ndocker-compose down\n\n# 更新版本\n# 拉取最新镜像\ndocker-compose pull\n\n# 重启服务\ndocker-compose up -d\n",[156,1033,1034,1040,1050,1054,1059,1070,1081,1092,1096,1101,1108,1112,1117,1124,1128,1133,1138,1145,1149,1153],{"__ignoreMap":154},[159,1035,1036],{"class":161,"line":162},[159,1037,1039],{"class":1038},"sHwdD","# 查看所有服务日志\n",[159,1041,1042,1044,1047],{"class":161,"line":173},[159,1043,125],{"class":165},[159,1045,1046],{"class":169}," logs",[159,1048,1049],{"class":169}," -f\n",[159,1051,1052],{"class":161,"line":240},[159,1053,244],{"emptyLinePlaceholder":243},[159,1055,1056],{"class":161,"line":247},[159,1057,1058],{"class":1038},"# 查看指定服务日志\n",[159,1060,1061,1063,1065,1068],{"class":161,"line":253},[159,1062,125],{"class":165},[159,1064,1046],{"class":169},[159,1066,1067],{"class":169}," -f",[159,1069,786],{"class":169},[159,1071,1072,1074,1076,1078],{"class":161,"line":259},[159,1073,125],{"class":165},[159,1075,1046],{"class":169},[159,1077,1067],{"class":169},[159,1079,1080],{"class":169}," blog\n",[159,1082,1083,1085,1087,1089],{"class":161,"line":264},[159,1084,125],{"class":165},[159,1086,1046],{"class":169},[159,1088,1067],{"class":169},[159,1090,1091],{"class":169}," admin\n",[159,1093,1094],{"class":161,"line":270},[159,1095,244],{"emptyLinePlaceholder":243},[159,1097,1098],{"class":161,"line":364},[159,1099,1100],{"class":1038},"# 重启服务\n",[159,1102,1103,1105],{"class":161,"line":375},[159,1104,125],{"class":165},[159,1106,1107],{"class":169}," restart\n",[159,1109,1110],{"class":161,"line":383},[159,1111,244],{"emptyLinePlaceholder":243},[159,1113,1114],{"class":161,"line":392},[159,1115,1116],{"class":1038},"# 停止服务\n",[159,1118,1119,1121],{"class":161,"line":400},[159,1120,125],{"class":165},[159,1122,1123],{"class":169}," down\n",[159,1125,1126],{"class":161,"line":408},[159,1127,244],{"emptyLinePlaceholder":243},[159,1129,1130],{"class":161,"line":416},[159,1131,1132],{"class":1038},"# 更新版本\n",[159,1134,1135],{"class":161,"line":449},[159,1136,1137],{"class":1038},"# 拉取最新镜像\n",[159,1139,1140,1142],{"class":161,"line":460},[159,1141,125],{"class":165},[159,1143,1144],{"class":169}," pull\n",[159,1146,1147],{"class":161,"line":471},[159,1148,244],{"emptyLinePlaceholder":243},[159,1150,1151],{"class":161,"line":483},[159,1152,1100],{"class":1038},[159,1154,1155,1157,1159],{"class":161,"line":488},[159,1156,125],{"class":165},[159,1158,963],{"class":169},[159,1160,966],{"class":169},[123,1162,1164],{"id":1163},"docker-cli","Docker CLI",[128,1166,1167],{},"如果你需要更灵活地控制各个服务，或者只想部署其中部分服务，可以使用 Docker 逐个部署。",[132,1169,1170],{"id":1170},"创建网络",[149,1172,1174],{"className":151,"code":1173,"language":153,"meta":154,"style":154},"docker network create flec-network\n",[156,1175,1176],{"__ignoreMap":154},[159,1177,1178,1180,1183,1186],{"class":161,"line":162},[159,1179,166],{"class":165},[159,1181,1182],{"class":169}," network",[159,1184,1185],{"class":169}," create",[159,1187,405],{"class":169},[132,1189,1191],{"id":1190},"部署-postgresql","部署 PostgreSQL",[149,1193,1195],{"className":151,"code":1194,"language":153,"meta":154,"style":154},"docker run -d \\\n  --name flec_postgres \\\n  --restart unless-stopped \\\n  --network flec-network \\\n  -e POSTGRES_DB=postgres \\\n  -e POSTGRES_USER=postgres \\\n  -e POSTGRES_PASSWORD=your_database_password \\\n  -v postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata \\\n  postgres:15-alpine\n",[156,1196,1197,1211,1221,1231,1241,1251,1260,1269,1279],{"__ignoreMap":154},[159,1198,1199,1201,1204,1207],{"class":161,"line":162},[159,1200,166],{"class":165},[159,1202,1203],{"class":169}," run",[159,1205,1206],{"class":169}," -d",[159,1208,1210],{"class":1209},"sTEyZ"," \\\n",[159,1212,1213,1216,1219],{"class":161,"line":173},[159,1214,1215],{"class":169},"  --name",[159,1217,1218],{"class":169}," flec_postgres",[159,1220,1210],{"class":1209},[159,1222,1223,1226,1229],{"class":161,"line":240},[159,1224,1225],{"class":169},"  --restart",[159,1227,1228],{"class":169}," unless-stopped",[159,1230,1210],{"class":1209},[159,1232,1233,1236,1239],{"class":161,"line":247},[159,1234,1235],{"class":169},"  --network",[159,1237,1238],{"class":169}," flec-network",[159,1240,1210],{"class":1209},[159,1242,1243,1246,1249],{"class":161,"line":253},[159,1244,1245],{"class":169},"  -e",[159,1247,1248],{"class":169}," POSTGRES_DB=postgres",[159,1250,1210],{"class":1209},[159,1252,1253,1255,1258],{"class":161,"line":259},[159,1254,1245],{"class":169},[159,1256,1257],{"class":169}," POSTGRES_USER=postgres",[159,1259,1210],{"class":1209},[159,1261,1262,1264,1267],{"class":161,"line":264},[159,1263,1245],{"class":169},[159,1265,1266],{"class":169}," POSTGRES_PASSWORD=your_database_password",[159,1268,1210],{"class":1209},[159,1270,1271,1274,1277],{"class":161,"line":270},[159,1272,1273],{"class":169},"  -v",[159,1275,1276],{"class":169}," postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata",[159,1278,1210],{"class":1209},[159,1280,1281],{"class":161,"line":364},[159,1282,1283],{"class":169},"  postgres:15-alpine\n",[132,1285,1286],{"id":1286},"部署后端",[149,1288,1290],{"className":151,"code":1289,"language":153,"meta":154,"style":154},"docker run -d \\\n  --name flec_server \\\n  --restart unless-stopped \\\n  --network flec-network \\\n  -e DB_HOST=flec_postgres \\\n  -e DB_PORT=5432 \\\n  -e DB_NAME=postgres \\\n  -e DB_USER=postgres \\\n  -e DB_PASSWORD=your_database_password \\\n  -e JWT_SECRET=your_jwt_secret \\\n  -e API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1 \\\n  -p 8080:8080 \\\n  -v \u002Fsrv\u002Fflecblog:\u002Fapp\u002Fdata \\\n  talen8\u002Fflec-server:latest\n",[156,1291,1292,1302,1311,1319,1327,1336,1348,1357,1366,1375,1384,1393,1403,1412],{"__ignoreMap":154},[159,1293,1294,1296,1298,1300],{"class":161,"line":162},[159,1295,166],{"class":165},[159,1297,1203],{"class":169},[159,1299,1206],{"class":169},[159,1301,1210],{"class":1209},[159,1303,1304,1306,1309],{"class":161,"line":173},[159,1305,1215],{"class":169},[159,1307,1308],{"class":169}," flec_server",[159,1310,1210],{"class":1209},[159,1312,1313,1315,1317],{"class":161,"line":240},[159,1314,1225],{"class":169},[159,1316,1228],{"class":169},[159,1318,1210],{"class":1209},[159,1320,1321,1323,1325],{"class":161,"line":247},[159,1322,1235],{"class":169},[159,1324,1238],{"class":169},[159,1326,1210],{"class":1209},[159,1328,1329,1331,1334],{"class":161,"line":253},[159,1330,1245],{"class":169},[159,1332,1333],{"class":169}," DB_HOST=flec_postgres",[159,1335,1210],{"class":1209},[159,1337,1338,1340,1343,1346],{"class":161,"line":259},[159,1339,1245],{"class":169},[159,1341,1342],{"class":169}," DB_PORT=",[159,1344,1345],{"class":479},"5432",[159,1347,1210],{"class":1209},[159,1349,1350,1352,1355],{"class":161,"line":264},[159,1351,1245],{"class":169},[159,1353,1354],{"class":169}," DB_NAME=postgres",[159,1356,1210],{"class":1209},[159,1358,1359,1361,1364],{"class":161,"line":270},[159,1360,1245],{"class":169},[159,1362,1363],{"class":169}," DB_USER=postgres",[159,1365,1210],{"class":1209},[159,1367,1368,1370,1373],{"class":161,"line":364},[159,1369,1245],{"class":169},[159,1371,1372],{"class":169}," DB_PASSWORD=your_database_password",[159,1374,1210],{"class":1209},[159,1376,1377,1379,1382],{"class":161,"line":375},[159,1378,1245],{"class":169},[159,1380,1381],{"class":169}," JWT_SECRET=your_jwt_secret",[159,1383,1210],{"class":1209},[159,1385,1386,1388,1391],{"class":161,"line":383},[159,1387,1245],{"class":169},[159,1389,1390],{"class":169}," API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1",[159,1392,1210],{"class":1209},[159,1394,1395,1398,1401],{"class":161,"line":392},[159,1396,1397],{"class":169},"  -p",[159,1399,1400],{"class":169}," 8080:8080",[159,1402,1210],{"class":1209},[159,1404,1405,1407,1410],{"class":161,"line":400},[159,1406,1273],{"class":169},[159,1408,1409],{"class":169}," \u002Fsrv\u002Fflecblog:\u002Fapp\u002Fdata",[159,1411,1210],{"class":1209},[159,1413,1414],{"class":161,"line":408},[159,1415,1416],{"class":169},"  talen8\u002Fflec-server:latest\n",[132,1418,1419],{"id":1419},"部署前端",[128,1421,1422],{},"后端服务启动成功后，即可部署博客端和管理端，这两个服务没有先后顺序要求，可以按需部署。",[128,1424,1425],{},[187,1426,1427],{},"1. 博客端：",[149,1429,1431],{"className":151,"code":1430,"language":153,"meta":154,"style":154},"docker run -d \\\n  --name flec_blog \\\n  --restart unless-stopped \\\n  --network flec-network \\\n  -e NUXT_PUBLIC_API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1 \\\n  -p 3000:3000 \\\n  talen8\u002Fflec-blog:latest\n",[156,1432,1433,1443,1452,1460,1468,1477,1486],{"__ignoreMap":154},[159,1434,1435,1437,1439,1441],{"class":161,"line":162},[159,1436,166],{"class":165},[159,1438,1203],{"class":169},[159,1440,1206],{"class":169},[159,1442,1210],{"class":1209},[159,1444,1445,1447,1450],{"class":161,"line":173},[159,1446,1215],{"class":169},[159,1448,1449],{"class":169}," flec_blog",[159,1451,1210],{"class":1209},[159,1453,1454,1456,1458],{"class":161,"line":240},[159,1455,1225],{"class":169},[159,1457,1228],{"class":169},[159,1459,1210],{"class":1209},[159,1461,1462,1464,1466],{"class":161,"line":247},[159,1463,1235],{"class":169},[159,1465,1238],{"class":169},[159,1467,1210],{"class":1209},[159,1469,1470,1472,1475],{"class":161,"line":253},[159,1471,1245],{"class":169},[159,1473,1474],{"class":169}," NUXT_PUBLIC_API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1",[159,1476,1210],{"class":1209},[159,1478,1479,1481,1484],{"class":161,"line":259},[159,1480,1397],{"class":169},[159,1482,1483],{"class":169}," 3000:3000",[159,1485,1210],{"class":1209},[159,1487,1488],{"class":161,"line":264},[159,1489,1490],{"class":169},"  talen8\u002Fflec-blog:latest\n",[128,1492,1493],{},[187,1494,1495],{},"2. 管理端：",[149,1497,1499],{"className":151,"code":1498,"language":153,"meta":154,"style":154},"docker run -d \\\n  --name flec_admin \\\n  --restart unless-stopped \\\n  --network flec-network \\\n  -e API_URL=http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1 \\\n  -p 4000:4000 \\\n  talen8\u002Fflec-admin:latest\n",[156,1500,1501,1511,1520,1528,1536,1544,1553],{"__ignoreMap":154},[159,1502,1503,1505,1507,1509],{"class":161,"line":162},[159,1504,166],{"class":165},[159,1506,1203],{"class":169},[159,1508,1206],{"class":169},[159,1510,1210],{"class":1209},[159,1512,1513,1515,1518],{"class":161,"line":173},[159,1514,1215],{"class":169},[159,1516,1517],{"class":169}," flec_admin",[159,1519,1210],{"class":1209},[159,1521,1522,1524,1526],{"class":161,"line":240},[159,1523,1225],{"class":169},[159,1525,1228],{"class":169},[159,1527,1210],{"class":1209},[159,1529,1530,1532,1534],{"class":161,"line":247},[159,1531,1235],{"class":169},[159,1533,1238],{"class":169},[159,1535,1210],{"class":1209},[159,1537,1538,1540,1542],{"class":161,"line":253},[159,1539,1245],{"class":169},[159,1541,1390],{"class":169},[159,1543,1210],{"class":1209},[159,1545,1546,1548,1551],{"class":161,"line":259},[159,1547,1397],{"class":169},[159,1549,1550],{"class":169}," 4000:4000",[159,1552,1210],{"class":1209},[159,1554,1555],{"class":161,"line":264},[159,1556,1557],{"class":169},"  talen8\u002Fflec-admin:latest\n",[128,1559,1560,1563],{},[156,1561,1562],{},"http:\u002F\u002F服务器IP:8080\u002Fapi\u002Fv1"," 为 API 对外访问地址，暂时使用端口访问。",[1011,1565,1566],{},[128,1567,1568,1018,1570,1022,1572],{},[187,1569,1017],{},[156,1571,1021],{},[156,1573,1025],{},[132,1575,1028],{"id":1576},"常用操作-1",[128,1578,1579],{},[187,1580,1581],{},"查看状态",[149,1583,1585],{"className":151,"code":1584,"language":153,"meta":154,"style":154},"docker ps\n",[156,1586,1587],{"__ignoreMap":154},[159,1588,1589,1591],{"class":161,"line":162},[159,1590,166],{"class":165},[159,1592,985],{"class":169},[128,1594,1595],{},[187,1596,1597],{},"查看日志",[149,1599,1601],{"className":151,"code":1600,"language":153,"meta":154,"style":154},"docker logs -f flec_server\ndocker logs -f flec_blog\ndocker logs -f flec_admin\ndocker logs -f flec_postgres\n",[156,1602,1603,1613,1623,1633],{"__ignoreMap":154},[159,1604,1605,1607,1609,1611],{"class":161,"line":162},[159,1606,166],{"class":165},[159,1608,1046],{"class":169},[159,1610,1067],{"class":169},[159,1612,513],{"class":169},[159,1614,1615,1617,1619,1621],{"class":161,"line":173},[159,1616,166],{"class":165},[159,1618,1046],{"class":169},[159,1620,1067],{"class":169},[159,1622,712],{"class":169},[159,1624,1625,1627,1629,1631],{"class":161,"line":240},[159,1626,166],{"class":165},[159,1628,1046],{"class":169},[159,1630,1067],{"class":169},[159,1632,819],{"class":169},[159,1634,1635,1637,1639,1641],{"class":161,"line":247},[159,1636,166],{"class":165},[159,1638,1046],{"class":169},[159,1640,1067],{"class":169},[159,1642,325],{"class":169},[128,1644,1645],{},[187,1646,1647],{},"重启服务",[149,1649,1651],{"className":151,"code":1650,"language":153,"meta":154,"style":154},"docker restart flec_server\ndocker restart flec_blog\ndocker restart flec_admin\ndocker restart flec_postgres\n",[156,1652,1653,1662,1670,1678],{"__ignoreMap":154},[159,1654,1655,1657,1660],{"class":161,"line":162},[159,1656,166],{"class":165},[159,1658,1659],{"class":169}," restart",[159,1661,513],{"class":169},[159,1663,1664,1666,1668],{"class":161,"line":173},[159,1665,166],{"class":165},[159,1667,1659],{"class":169},[159,1669,712],{"class":169},[159,1671,1672,1674,1676],{"class":161,"line":240},[159,1673,166],{"class":165},[159,1675,1659],{"class":169},[159,1677,819],{"class":169},[159,1679,1680,1682,1684],{"class":161,"line":247},[159,1681,166],{"class":165},[159,1683,1659],{"class":169},[159,1685,325],{"class":169},[128,1687,1688],{},[187,1689,1690],{},"停止和删除",[149,1692,1694],{"className":151,"code":1693,"language":153,"meta":154,"style":154},"docker stop flec_blog flec_admin flec_server flec_postgres\ndocker rm flec_blog flec_admin flec_server flec_postgres\n",[156,1695,1696,1711],{"__ignoreMap":154},[159,1697,1698,1700,1703,1705,1707,1709],{"class":161,"line":162},[159,1699,166],{"class":165},[159,1701,1702],{"class":169}," stop",[159,1704,1449],{"class":169},[159,1706,1517],{"class":169},[159,1708,1308],{"class":169},[159,1710,325],{"class":169},[159,1712,1713,1715,1718,1720,1722,1724],{"class":161,"line":173},[159,1714,166],{"class":165},[159,1716,1717],{"class":169}," rm",[159,1719,1449],{"class":169},[159,1721,1517],{"class":169},[159,1723,1308],{"class":169},[159,1725,325],{"class":169},[128,1727,1728],{},[187,1729,1730],{},"更新版本",[149,1732,1734],{"className":151,"code":1733,"language":153,"meta":154,"style":154},"docker pull talen8\u002Fflec-server:latest\ndocker stop flec_server\ndocker rm flec_server\n# 之后重新执行部署命令\n",[156,1735,1736,1745,1753,1761],{"__ignoreMap":154},[159,1737,1738,1740,1743],{"class":161,"line":162},[159,1739,166],{"class":165},[159,1741,1742],{"class":169}," pull",[159,1744,503],{"class":169},[159,1746,1747,1749,1751],{"class":161,"line":173},[159,1748,166],{"class":165},[159,1750,1702],{"class":169},[159,1752,513],{"class":169},[159,1754,1755,1757,1759],{"class":161,"line":240},[159,1756,166],{"class":165},[159,1758,1717],{"class":169},[159,1760,513],{"class":169},[159,1762,1763],{"class":161,"line":247},[159,1764,1765],{"class":1038},"# 之后重新执行部署命令\n",[123,1767,1768],{"id":1768},"外部访问",[128,1770,1771],{},"Docker 部署完成后，服务运行在服务器的 3000、4000、8080 端口。要让外部用户通过域名访问，需要进行以下配置。",[132,1773,1774],{"id":1774},"域名准备",[128,1776,1777],{},"将域名解析到服务器 IP（以下用于对应参考）：",[136,1779,1780,1786,1792],{},[139,1781,1782,1785],{},[156,1783,1784],{},"blog.yourdomain.com"," → 博客端",[139,1787,1788,1791],{},[156,1789,1790],{},"admin.yourdomain.com"," → 管理端",[139,1793,1794,1797],{},[156,1795,1796],{},"api.yourdomain.com"," → 后端",[132,1799,1801],{"id":1800},"nginx-反向代理","Nginx 反向代理",[149,1803,1807],{"className":1804,"code":1805,"language":1806,"meta":154,"style":154},"language-nginx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 博客端\nserver {\n    listen 80;\n    server_name blog.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\n# 管理端\nserver {\n    listen 80;\n    server_name admin.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:4000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\n# 后端 API\nserver {\n    listen 80;\n    server_name api.yourdomain.com;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n","nginx",[156,1808,1809,1814,1819,1824,1829,1833,1838,1843,1848,1853,1858,1863,1868,1873,1877,1882,1886,1890,1895,1899,1903,1908,1912,1916,1920,1924,1928,1932,1936,1941,1945,1949,1954,1958,1962,1967,1971,1975,1979,1983,1987],{"__ignoreMap":154},[159,1810,1811],{"class":161,"line":162},[159,1812,1813],{},"# 博客端\n",[159,1815,1816],{"class":161,"line":173},[159,1817,1818],{},"server {\n",[159,1820,1821],{"class":161,"line":240},[159,1822,1823],{},"    listen 80;\n",[159,1825,1826],{"class":161,"line":247},[159,1827,1828],{},"    server_name blog.yourdomain.com;\n",[159,1830,1831],{"class":161,"line":253},[159,1832,244],{"emptyLinePlaceholder":243},[159,1834,1835],{"class":161,"line":259},[159,1836,1837],{},"    location \u002F {\n",[159,1839,1840],{"class":161,"line":264},[159,1841,1842],{},"        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n",[159,1844,1845],{"class":161,"line":270},[159,1846,1847],{},"        proxy_set_header Host $host;\n",[159,1849,1850],{"class":161,"line":364},[159,1851,1852],{},"        proxy_set_header X-Real-IP $remote_addr;\n",[159,1854,1855],{"class":161,"line":375},[159,1856,1857],{},"        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n",[159,1859,1860],{"class":161,"line":383},[159,1861,1862],{},"        proxy_set_header X-Forwarded-Proto $scheme;\n",[159,1864,1865],{"class":161,"line":392},[159,1866,1867],{},"    }\n",[159,1869,1870],{"class":161,"line":400},[159,1871,1872],{},"}\n",[159,1874,1875],{"class":161,"line":408},[159,1876,244],{"emptyLinePlaceholder":243},[159,1878,1879],{"class":161,"line":416},[159,1880,1881],{},"# 管理端\n",[159,1883,1884],{"class":161,"line":449},[159,1885,1818],{},[159,1887,1888],{"class":161,"line":460},[159,1889,1823],{},[159,1891,1892],{"class":161,"line":471},[159,1893,1894],{},"    server_name admin.yourdomain.com;\n",[159,1896,1897],{"class":161,"line":483},[159,1898,244],{"emptyLinePlaceholder":243},[159,1900,1901],{"class":161,"line":488},[159,1902,1837],{},[159,1904,1905],{"class":161,"line":496},[159,1906,1907],{},"        proxy_pass http:\u002F\u002F127.0.0.1:4000;\n",[159,1909,1910],{"class":161,"line":506},[159,1911,1847],{},[159,1913,1914],{"class":161,"line":516},[159,1915,1852],{},[159,1917,1918],{"class":161,"line":525},[159,1919,1857],{},[159,1921,1922],{"class":161,"line":532},[159,1923,1862],{},[159,1925,1926],{"class":161,"line":542},[159,1927,1867],{},[159,1929,1930],{"class":161,"line":553},[159,1931,1872],{},[159,1933,1934],{"class":161,"line":563},[159,1935,244],{"emptyLinePlaceholder":243},[159,1937,1938],{"class":161,"line":573},[159,1939,1940],{},"# 后端 API\n",[159,1942,1943],{"class":161,"line":583},[159,1944,1818],{},[159,1946,1947],{"class":161,"line":594},[159,1948,1823],{},[159,1950,1951],{"class":161,"line":605},[159,1952,1953],{},"    server_name api.yourdomain.com;\n",[159,1955,1956],{"class":161,"line":613},[159,1957,244],{"emptyLinePlaceholder":243},[159,1959,1960],{"class":161,"line":626},[159,1961,1837],{},[159,1963,1964],{"class":161,"line":633},[159,1965,1966],{},"        proxy_pass http:\u002F\u002F127.0.0.1:8080;\n",[159,1968,1969],{"class":161,"line":641},[159,1970,1847],{},[159,1972,1973],{"class":161,"line":648},[159,1974,1852],{},[159,1976,1977],{"class":161,"line":655},[159,1978,1857],{},[159,1980,1981],{"class":161,"line":663},[159,1982,1862],{},[159,1984,1985],{"class":161,"line":671},[159,1986,1867],{},[159,1988,1989],{"class":161,"line":682},[159,1990,1872],{},[128,1992,1993],{},[187,1994,1995],{},"重载 Nginx",[149,1997,1999],{"className":151,"code":1998,"language":153,"meta":154,"style":154},"sudo nginx -t && sudo systemctl reload nginx\n",[156,2000,2001],{"__ignoreMap":154},[159,2002,2003,2006,2009,2012,2015,2018,2021,2024],{"class":161,"line":162},[159,2004,2005],{"class":165},"sudo",[159,2007,2008],{"class":169}," nginx",[159,2010,2011],{"class":169}," -t",[159,2013,2014],{"class":296}," &&",[159,2016,2017],{"class":165}," sudo",[159,2019,2020],{"class":169}," systemctl",[159,2022,2023],{"class":169}," reload",[159,2025,2026],{"class":169}," nginx\n",[132,2028,2030],{"id":2029},"ssl-证书","SSL 证书",[149,2032,2034],{"className":151,"code":2033,"language":153,"meta":154,"style":154},"sudo apt install certbot python3-certbot-nginx\nsudo certbot --nginx -d blog.yourdomain.com -d admin.yourdomain.com -d api.yourdomain.com\n",[156,2035,2036,2052],{"__ignoreMap":154},[159,2037,2038,2040,2043,2046,2049],{"class":161,"line":162},[159,2039,2005],{"class":165},[159,2041,2042],{"class":169}," apt",[159,2044,2045],{"class":169}," install",[159,2047,2048],{"class":169}," certbot",[159,2050,2051],{"class":169}," python3-certbot-nginx\n",[159,2053,2054,2056,2058,2061,2063,2066,2068,2071,2073],{"class":161,"line":173},[159,2055,2005],{"class":165},[159,2057,2048],{"class":169},[159,2059,2060],{"class":169}," --nginx",[159,2062,1206],{"class":169},[159,2064,2065],{"class":169}," blog.yourdomain.com",[159,2067,1206],{"class":169},[159,2069,2070],{"class":169}," admin.yourdomain.com",[159,2072,1206],{"class":169},[159,2074,2075],{"class":169}," api.yourdomain.com\n",[132,2077,2079],{"id":2078},"更新-api-地址","更新 API 地址",[128,2081,2082],{},"配置完成后，由于前面 API 地址配置的是服务器端口地址，那么这里需要更新为代理的域名。",[128,2084,2085],{},[187,2086,126],{},[128,2088,2089,2090,2093,2094,2097,2098,2101],{},"修改 ",[156,2091,2092],{},".env"," 文件中的 ",[156,2095,2096],{},"API_URL","，如 ",[156,2099,2100],{},"https:\u002F\u002Fapi.yourdomain.com\u002Fapi\u002Fv1","，然后重启：",[149,2103,2104],{"className":151,"code":954,"language":153,"meta":154,"style":154},[156,2105,2106],{"__ignoreMap":154},[159,2107,2108,2110,2112],{"class":161,"line":162},[159,2109,125],{"class":165},[159,2111,963],{"class":169},[159,2113,966],{"class":169},[128,2115,2116],{},[187,2117,1164],{},[128,2119,2120,2121,2123],{},"删除并重新创建容器，将部署命令中的端口地址修改为 ",[156,2122,2100],{},"：",[149,2125,2127],{"className":151,"code":2126,"language":153,"meta":154,"style":154},"docker rm -f flec_blog flec_admin\n# 重新执行部署命令\n",[156,2128,2129,2141],{"__ignoreMap":154},[159,2130,2131,2133,2135,2137,2139],{"class":161,"line":162},[159,2132,166],{"class":165},[159,2134,1717],{"class":169},[159,2136,1067],{"class":169},[159,2138,1449],{"class":169},[159,2140,819],{"class":169},[159,2142,2143],{"class":161,"line":173},[159,2144,2145],{"class":1038},"# 重新执行部署命令\n",[123,2147,109],{"id":109},[128,2149,2150,2156,2157],{},[187,2151,2152,2153],{},"执行 ",[156,2154,2155],{},"docker-compose up -d"," ",[187,2158,2159],{},"后，容器没有全部启动成功怎么办？",[128,2161,2162],{},"先查看服务状态：",[149,2164,2165],{"className":151,"code":976,"language":153,"meta":154,"style":154},[156,2166,2167],{"__ignoreMap":154},[159,2168,2169,2171],{"class":161,"line":162},[159,2170,125],{"class":165},[159,2172,985],{"class":169},[128,2174,2175,2176,2178],{},"如果某个容器状态不是 ",[156,2177,991],{},"，请继续查看日志：",[149,2180,2182],{"className":151,"code":2181,"language":153,"meta":154,"style":154},"docker-compose logs -f\n",[156,2183,2184],{"__ignoreMap":154},[159,2185,2186,2188,2190],{"class":161,"line":162},[159,2187,125],{"class":165},[159,2189,1046],{"class":169},[159,2191,1049],{"class":169},[128,2193,2194],{},"也可以只查看指定服务日志：",[149,2196,2198],{"className":151,"code":2197,"language":153,"meta":154,"style":154},"docker-compose logs -f server\ndocker-compose logs -f blog\ndocker-compose logs -f admin\ndocker-compose logs -f postgres\n",[156,2199,2200,2210,2220,2230],{"__ignoreMap":154},[159,2201,2202,2204,2206,2208],{"class":161,"line":162},[159,2203,125],{"class":165},[159,2205,1046],{"class":169},[159,2207,1067],{"class":169},[159,2209,786],{"class":169},[159,2211,2212,2214,2216,2218],{"class":161,"line":173},[159,2213,125],{"class":165},[159,2215,1046],{"class":169},[159,2217,1067],{"class":169},[159,2219,1080],{"class":169},[159,2221,2222,2224,2226,2228],{"class":161,"line":240},[159,2223,125],{"class":165},[159,2225,1046],{"class":169},[159,2227,1067],{"class":169},[159,2229,1091],{"class":169},[159,2231,2232,2234,2236,2238],{"class":161,"line":247},[159,2233,125],{"class":165},[159,2235,1046],{"class":169},[159,2237,1067],{"class":169},[159,2239,352],{"class":169},[128,2241,2242],{},"通常可以根据日志内容快速定位问题，例如端口占用、环境变量配置错误、数据库连接失败等。",[2244,2245],"hr",{},[128,2247,2248],{},[187,2249,2250],{},"访问博客端或管理端时打不开页面怎么办？",[128,2252,2253],{},"请按以下顺序检查：",[182,2255,2256,2269,2283,2296],{},[139,2257,2258,2259],{},"确认容器是否正常运行：\n",[149,2260,2261],{"className":151,"code":976,"language":153,"meta":154,"style":154},[156,2262,2263],{"__ignoreMap":154},[159,2264,2265,2267],{"class":161,"line":162},[159,2266,125],{"class":165},[159,2268,985],{"class":169},[139,2270,2271,2272],{},"确认服务器防火墙或云服务商安全组已放行对应端口：\n",[136,2273,2274,2277,2280],{},[139,2275,2276],{},"博客端：3000",[139,2278,2279],{},"管理端：4000",[139,2281,2282],{},"后端：8080",[139,2284,2285,2286],{},"确认访问地址是否正确，例如：\n",[136,2287,2288,2292],{},[139,2289,2290],{},[156,2291,1003],{},[139,2293,2294],{},[156,2295,1009],{},[139,2297,2298],{},"如果已经配置了 Nginx 反向代理，请改为使用对应域名访问。",[2244,2300],{},[128,2302,2303],{},[187,2304,2305],{},"页面可以打开，但没有数据，或者请求接口失败怎么办？",[128,2307,2308,2309,2311],{},"这通常是 ",[156,2310,2096],{}," 配置错误导致的。",[128,2313,2314,2315,2093,2317,2319],{},"请检查 ",[156,2316,2092],{},[156,2318,2096],{}," 是否填写正确，例如：",[149,2321,2325],{"className":2322,"code":273,"language":2324,"meta":154},[2323],"language-text","text",[156,2326,273],{"__ignoreMap":154},[128,2328,2329],{},"如果已经配置了域名和 Nginx，应该改为：",[149,2331,2334],{"className":2332,"code":2333,"language":2324,"meta":154},[2323],"API_URL=https:\u002F\u002Fapi.yourdomain.com\u002Fapi\u002Fv1\n",[156,2335,2333],{"__ignoreMap":154},[128,2337,2338],{},"修改后重新启动服务：",[149,2340,2341],{"className":151,"code":954,"language":153,"meta":154,"style":154},[156,2342,2343],{"__ignoreMap":154},[159,2344,2345,2347,2349],{"class":161,"line":162},[159,2346,125],{"class":165},[159,2348,963],{"class":169},[159,2350,966],{"class":169},[128,2352,2353,2354,2357,2358,2361],{},"如果是使用 Docker CLI 部署，则需要删除并重新创建 ",[156,2355,2356],{},"flec_blog"," 和 ",[156,2359,2360],{},"flec_admin"," 容器。",[2244,2363],{},[128,2365,2366],{},[187,2367,2368],{},"执行 docker-compose 命令时提示命令不存在怎么办？",[128,2370,2371],{},"请先确认是否已正确安装 Docker Compose：",[149,2373,2374],{"className":151,"code":152,"language":153,"meta":154,"style":154},[156,2375,2376,2382],{"__ignoreMap":154},[159,2377,2378,2380],{"class":161,"line":162},[159,2379,166],{"class":165},[159,2381,170],{"class":169},[159,2383,2384,2386],{"class":161,"line":173},[159,2385,125],{"class":165},[159,2387,170],{"class":169},[128,2389,2390],{},"如果系统中使用的是新版 Docker Compose 插件，可能需要使用：",[149,2392,2394],{"className":151,"code":2393,"language":153,"meta":154,"style":154},"docker compose version\n",[156,2395,2396],{"__ignoreMap":154},[159,2397,2398,2400,2403],{"class":161,"line":162},[159,2399,166],{"class":165},[159,2401,2402],{"class":169}," compose",[159,2404,2405],{"class":169}," version\n",[128,2407,2408,2409,2411,2412,2415],{},"此时可将文中的 ",[156,2410,125],{}," 命令替换为 ",[156,2413,2414],{},"docker compose"," 执行。",[2244,2417],{},[128,2419,2420],{},[187,2421,2422],{},"启动时提示端口被占用怎么办？",[128,2424,2425],{},"如果提示 3000、4000 或 8080 端口已被占用，说明宿主机已有其他服务正在使用这些端口。",[128,2427,2089,2428,2431],{},[156,2429,2430],{},"docker-compose.yml"," 中的端口映射，例如：",[149,2433,2435],{"className":283,"code":2434,"language":285,"meta":154,"style":154},"ports:\n  - \"3001:3000\"\n",[156,2436,2437,2444],{"__ignoreMap":154},[159,2438,2439,2442],{"class":161,"line":162},[159,2440,2441],{"class":292},"ports",[159,2443,297],{"class":296},[159,2445,2446,2449,2451,2454],{"class":161,"line":173},[159,2447,2448],{"class":296},"  -",[159,2450,438],{"class":296},[159,2452,2453],{"class":169},"3001:3000",[159,2455,623],{"class":296},[128,2457,2458],{},"表示将宿主机 3001 端口映射到容器内的 3000 端口。",[128,2460,2461],{},"修改后重新启动：",[149,2463,2464],{"className":151,"code":954,"language":153,"meta":154,"style":154},[156,2465,2466],{"__ignoreMap":154},[159,2467,2468,2470,2472],{"class":161,"line":162},[159,2469,125],{"class":165},[159,2471,963],{"class":169},[159,2473,966],{"class":169},[128,2475,2476],{},"如果修改了博客端或管理端访问端口，请使用新的端口访问页面。",[2244,2478],{},[128,2480,2481,2156,2485],{},[187,2482,2089,2483],{},[156,2484,2092],{},[187,2486,2487],{},"配置后为什么没有生效？",[128,2489,2089,2490,2492],{},[156,2491,2092],{}," 后，需要重新创建相关容器，配置才会生效。",[128,2494,2495],{},"建议执行：",[149,2497,2498],{"className":151,"code":954,"language":153,"meta":154,"style":154},[156,2499,2500],{"__ignoreMap":154},[159,2501,2502,2504,2506],{"class":161,"line":162},[159,2503,125],{"class":165},[159,2505,963],{"class":169},[159,2507,966],{"class":169},[128,2509,2510],{},"如果仍未生效，可以强制重新创建：",[149,2512,2514],{"className":151,"code":2513,"language":153,"meta":154,"style":154},"docker-compose up -d --force-recreate\n",[156,2515,2516],{"__ignoreMap":154},[159,2517,2518,2520,2522,2524],{"class":161,"line":162},[159,2519,125],{"class":165},[159,2521,963],{"class":169},[159,2523,1206],{"class":169},[159,2525,2526],{"class":169}," --force-recreate\n",[2244,2528],{},[128,2530,2531],{},[187,2532,2533],{},"如何确认后端 API 是否正常工作？",[128,2535,2536],{},"可以直接在浏览器或命令行中访问你配置的 API 地址进行测试，例如：",[149,2538,2541],{"className":2539,"code":2540,"language":2324,"meta":154},[2323],"http:\u002F\u002F服务器IP:8080\n",[156,2542,2540],{"__ignoreMap":154},[128,2544,2545],{},"或者在配置域名后访问：",[149,2547,2550],{"className":2548,"code":2549,"language":2324,"meta":154},[2323],"https:\u002F\u002Fapi.yourdomain.com\n",[156,2551,2549],{"__ignoreMap":154},[128,2553,2554,2555,2558],{},"如果能正常返回 ",[156,2556,2557],{},"Flec-Server 运行成功","，说明后端服务已启动。",[128,2560,2561],{},"如果无法访问，请优先检查：",[136,2563,2564,2570,2575,2578],{},[139,2565,2566,2569],{},[156,2567,2568],{},"flec_server"," 容器是否正常运行",[139,2571,2572,2574],{},[156,2573,2096],{}," 是否填写正确",[139,2576,2577],{},"防火墙或安全组是否已放行 8080",[139,2579,2580],{},"Nginx 反向代理是否配置正确",[2244,2582],{},[128,2584,2585],{},[187,2586,2587],{},"配置了域名后，为什么仍然访问的是服务器端口地址？",[128,2589,2590,2591,2593],{},"如果前面部署时 ",[156,2592,2096],{}," 填的是：",[149,2595,2597],{"className":2596,"code":273,"language":2324,"meta":154},[2323],[156,2598,273],{"__ignoreMap":154},[128,2600,2601],{},"那么在完成域名和 Nginx 配置后，需要将其改为正式域名地址：",[149,2603,2605],{"className":2604,"code":2333,"language":2324,"meta":154},[2323],[156,2606,2333],{"__ignoreMap":154},[128,2608,2609],{},"然后重新启动前端相关服务，使配置生效。",[2244,2611],{},[128,2613,2614],{},[187,2615,2616],{},"配置 Nginx 后访问域名出现 502 怎么办？",[128,2618,2619],{},"502 Bad Gateway 一般表示 Nginx 没有成功连接到后端服务。",[128,2621,2622],{},"请重点检查以下内容：",[182,2624,2625,2638,2665,2690],{},[139,2626,2627,2628],{},"对应容器是否正常运行：\n",[149,2629,2630],{"className":151,"code":976,"language":153,"meta":154,"style":154},[156,2631,2632],{"__ignoreMap":154},[159,2633,2634,2636],{"class":161,"line":162},[159,2635,125],{"class":165},[159,2637,985],{"class":169},[139,2639,2640,2641,2644,2645],{},"Nginx 配置中的 ",[156,2642,2643],{},"proxy_pass"," 是否写对，例如：\n",[149,2646,2648],{"className":1804,"code":2647,"language":1806,"meta":154,"style":154},"proxy_pass http:\u002F\u002F127.0.0.1:3000;\nproxy_pass http:\u002F\u002F127.0.0.1:4000;\nproxy_pass http:\u002F\u002F127.0.0.1:8080;\n",[156,2649,2650,2655,2660],{"__ignoreMap":154},[159,2651,2652],{"class":161,"line":162},[159,2653,2654],{},"proxy_pass http:\u002F\u002F127.0.0.1:3000;\n",[159,2656,2657],{"class":161,"line":173},[159,2658,2659],{},"proxy_pass http:\u002F\u002F127.0.0.1:4000;\n",[159,2661,2662],{"class":161,"line":240},[159,2663,2664],{},"proxy_pass http:\u002F\u002F127.0.0.1:8080;\n",[139,2666,2667,2668],{},"Nginx 配置修改后是否已重载：\n",[149,2669,2670],{"className":151,"code":1998,"language":153,"meta":154,"style":154},[156,2671,2672],{"__ignoreMap":154},[159,2673,2674,2676,2678,2680,2682,2684,2686,2688],{"class":161,"line":162},[159,2675,2005],{"class":165},[159,2677,2008],{"class":169},[159,2679,2011],{"class":169},[159,2681,2014],{"class":296},[159,2683,2017],{"class":165},[159,2685,2020],{"class":169},[159,2687,2023],{"class":169},[159,2689,2026],{"class":169},[139,2691,2692],{},"服务端口是否确实在宿主机上监听。",[2244,2694],{},[128,2696,2697],{},[187,2698,2699],{},"配置 HTTPS 后页面仍提示不安全怎么办？",[128,2701,2702],{},"请检查：",[182,2704,2705,2708,2711,2714],{},[139,2706,2707],{},"域名是否正确解析到服务器 IP",[139,2709,2710],{},"证书是否申请成功",[139,2712,2713],{},"Nginx 是否已正确加载证书配置",[139,2715,2716,2717,2720,2721],{},"是否仍在使用 ",[156,2718,2719],{},"http:\u002F\u002F"," 访问，而不是 ",[156,2722,2723],{},"https:\u002F\u002F",[128,2725,2726],{},"申请证书后，建议再次执行：",[149,2728,2729],{"className":151,"code":1998,"language":153,"meta":154,"style":154},[156,2730,2731],{"__ignoreMap":154},[159,2732,2733,2735,2737,2739,2741,2743,2745,2747],{"class":161,"line":162},[159,2734,2005],{"class":165},[159,2736,2008],{"class":169},[159,2738,2011],{"class":169},[159,2740,2014],{"class":296},[159,2742,2017],{"class":165},[159,2744,2020],{"class":169},[159,2746,2023],{"class":169},[159,2748,2026],{"class":169},[128,2750,2751],{},"并使用浏览器重新访问对应域名。",[2244,2753],{},[128,2755,2756],{},[187,2757,2758],{},"重新部署后，数据还在吗？",[128,2760,2761],{},"如果你没有手动删除数据库卷，数据会保留。",[128,2763,2764],{},"本教程中的 PostgreSQL 使用的是 Docker 卷：",[149,2766,2769],{"className":2767,"code":2768,"language":2324,"meta":154},[2323],"postgres_data\n",[156,2770,2768],{"__ignoreMap":154},[128,2772,2773],{},"因此即使删除并重新创建容器，只要没有删除对应数据卷，数据库数据仍会保留。",[2244,2775],{},[128,2777,2778],{},[187,2779,2780],{},"为什么管理端或博客端更新后页面内容没有变化？",[128,2782,2783],{},"这通常有几种原因：",[182,2785,2786,2789,2792,2795],{},[139,2787,2788],{},"镜像没有成功拉取到最新版本",[139,2790,2791],{},"旧容器没有被重新创建",[139,2793,2794],{},"浏览器缓存未刷新",[139,2796,2797],{},"实际访问的仍然是旧域名、旧端口或旧服务",[128,2799,2800],{},"建议按以下顺序排查：",[149,2802,2804],{"className":151,"code":2803,"language":153,"meta":154,"style":154},"docker-compose pull\ndocker-compose up -d\n",[156,2805,2806,2812],{"__ignoreMap":154},[159,2807,2808,2810],{"class":161,"line":162},[159,2809,125],{"class":165},[159,2811,1144],{"class":169},[159,2813,2814,2816,2818],{"class":161,"line":173},[159,2815,125],{"class":165},[159,2817,963],{"class":169},[159,2819,966],{"class":169},[128,2821,2822],{},"如果仍无变化，可尝试强制重建：",[149,2824,2825],{"className":151,"code":2513,"language":153,"meta":154,"style":154},[156,2826,2827],{"__ignoreMap":154},[159,2828,2829,2831,2833,2835],{"class":161,"line":162},[159,2830,125],{"class":165},[159,2832,963],{"class":169},[159,2834,1206],{"class":169},[159,2836,2526],{"class":169},[128,2838,2839],{},"然后清理浏览器缓存后重新访问。",[2841,2842,2843],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":154,"searchDepth":173,"depth":173,"links":2845},[2846,2852,2859,2865],{"id":125,"depth":173,"text":126,"children":2847},[2848,2849,2850,2851],{"id":134,"depth":240,"text":134},{"id":180,"depth":240,"text":180},{"id":995,"depth":240,"text":995},{"id":1028,"depth":240,"text":1028},{"id":1163,"depth":173,"text":1164,"children":2853},[2854,2855,2856,2857,2858],{"id":1170,"depth":240,"text":1170},{"id":1190,"depth":240,"text":1191},{"id":1286,"depth":240,"text":1286},{"id":1419,"depth":240,"text":1419},{"id":1576,"depth":240,"text":1028},{"id":1768,"depth":173,"text":1768,"children":2860},[2861,2862,2863,2864],{"id":1774,"depth":240,"text":1774},{"id":1800,"depth":240,"text":1801},{"id":2029,"depth":240,"text":2030},{"id":2078,"depth":240,"text":2079},{"id":109,"depth":173,"text":109},"使用 Docker Compose 或 Docker CLI 部署 FlecBlog。","md",{},{"icon":21},{"title":18,"description":2866},"PcnL_yEB3QBo3oCX8ipOq7sc6ya1p2a8qAnYkcFLE3I",[2873,2875],{"title":13,"path":14,"stem":15,"description":2874,"icon":16,"children":-1},"使用一键脚本快速生成 FlecBlog 的 Docker Compose 配置文件。",{"title":23,"path":24,"stem":25,"description":2876,"icon":26,"children":-1},"如果习惯使用可视化面板管理服务器，可以使用宝塔面板部署 FlecBlog。",1782623948219]