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