compose.yaml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. # Hugo + Docsy compose.yaml
  2. # 用法:
  3. # 初始化新站点: docker compose run --rm init
  4. # 开发预览: docker compose up server
  5. # 构建静态文件: docker compose run --rm build
  6. services:
  7. # ── 1. 初始化站点(仅首次执行)──────────────────────────────────────
  8. init:
  9. build: ./hugo
  10. working_dir: /src
  11. volumes:
  12. - ./site:/src
  13. environment:
  14. GOPROXY: https://goproxy.io,https://goproxy.cn,direct
  15. GONOSUMDB: "*"
  16. GOFLAGS: "-mod=mod"
  17. entrypoint: /bin/sh
  18. command:
  19. - -c
  20. - |
  21. set -e
  22. if [ -f hugo.toml ]; then
  23. echo "hugo.toml already exists, skip init."
  24. exit 0
  25. fi
  26. hugo new site . --force
  27. hugo mod init github.com/me/my-docsy-site
  28. printf 'module github.com/me/my-docsy-site\n\ngo 1.21\n\nrequire github.com/google/docsy v0.12.0\n\nreplace (\n\tgithub.com/google/docsy => /opt/docsy\n\tgithub.com/twbs/bootstrap => /opt/bootstrap\n\tgithub.com/FortAwesome/Font-Awesome => /opt/fontawesome\n)\n' > go.mod
  29. hugo mod tidy
  30. printf '{"dependencies":{"autoprefixer":"^10.4.14","postcss":"^8.4.24","postcss-cli":"^10.1.0"}}' > package.json
  31. npm install --ignore-scripts --registry https://registry.npmmirror.com
  32. printf '\n[module]\n proxy = "https://goproxy.io,https://goproxy.cn,direct"\n [module.hugoVersion]\n extended = true\n min = "0.146.0"\n [[module.imports]]\n path = "github.com/google/docsy"\n disable = false\n' >> hugo.toml
  33. echo "Site initialized. Run: docker compose up server"
  34. # ── 2. 开发服务器(热重载)──────────────────────────────────────────
  35. server:
  36. build: ./hugo
  37. working_dir: /src
  38. volumes:
  39. - ./site:/src
  40. - hugo_cache:/tmp/hugo_cache
  41. - pdf_store:/src/static/pdfs
  42. - excel_html_store:/src/static/excels
  43. - word_html_store:/src/static/words
  44. ports:
  45. - "1313:1313"
  46. environment:
  47. HUGO_CACHEDIR: /tmp/hugo_cache
  48. GOPROXY: "off"
  49. GONOSUMDB: "*"
  50. GOFLAGS: "-mod=mod"
  51. command: server
  52. --bind 0.0.0.0
  53. --port 1313
  54. --baseURL /
  55. --disableFastRender
  56. --poll 700ms
  57. restart: unless-stopped
  58. networks:
  59. - docsy_bridge
  60. # ── 3. 生产构建(输出到 site/public)───────────────────────────────
  61. build:
  62. build: ./hugo
  63. working_dir: /src
  64. volumes:
  65. - ./site:/src
  66. - hugo_cache:/tmp/hugo_cache
  67. - site_public:/src/public
  68. - word_html_store:/src/static/words
  69. environment:
  70. HUGO_CACHEDIR: /tmp/hugo_cache
  71. HUGO_ENV: production
  72. GOPROXY: "off"
  73. GONOSUMDB: "*"
  74. GOFLAGS: "-mod=mod"
  75. command: --minify --gc --baseURL /
  76. # ── 4. Nginx 静态文件托管(生产预览)───────────────────────────────
  77. nginx:
  78. image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:alpine
  79. volumes:
  80. - site_public:/usr/share/nginx/html:ro
  81. - pdf_store:/data/pdfs:ro
  82. - excel_html_store:/data/excels:ro
  83. - word_html_store:/data/words:ro
  84. - excel_store:/data/raw_excels:ro
  85. - word_store:/data/raw_words:ro
  86. - uploads_store:/data/uploads:ro
  87. - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
  88. ports:
  89. - "8080:80"
  90. depends_on:
  91. build:
  92. condition: service_completed_successfully
  93. restart: unless-stopped
  94. networks:
  95. - docsy_bridge
  96. # ── 5. Filebrowser 文件上传管理 ─────────────────────────────────────
  97. filebrowser:
  98. image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/filebrowser/filebrowser:latest
  99. volumes:
  100. - uploads_store:/srv
  101. - pdf_store:/srv/pdfs
  102. - excel_store:/srv/excels
  103. - excel_html_store:/srv/excels_html:ro
  104. - word_html_store:/srv/words_html:ro
  105. - word_store:/srv/words
  106. - ./site/content:/srv/content
  107. - filebrowser_data:/database
  108. - ./filebrowser/settings.json:/.filebrowser.json
  109. restart: unless-stopped
  110. networks:
  111. - docsy_bridge
  112. # ── 5b. Filebrowser 预览代理(8081)────────────────────────────────
  113. filebrowser_proxy:
  114. image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:alpine
  115. volumes:
  116. - ./filebrowser-proxy:/etc/nginx/conf.d:ro
  117. - /home/fxapp/log.png:/opt/fb-assets/log.png:ro
  118. depends_on:
  119. - filebrowser
  120. ports:
  121. - "8081:80"
  122. restart: unless-stopped
  123. networks:
  124. - docsy_bridge
  125. # ── 6. Excel → HTML 自动转换器 ───────────────────────────────────────
  126. # ── 7. Word(docx) → HTML 自动转换器 ─────────────────────────────────
  127. # ── 8. OnlyOffice 文档预览/编辑服务 ───────────────────────────────
  128. onlyoffice:
  129. image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/onlyoffice/documentserver:latest
  130. environment:
  131. JWT_ENABLED: "false"
  132. TZ: Asia/Shanghai
  133. ports:
  134. - "8090:80"
  135. volumes:
  136. - onlyoffice_data:/var/www/onlyoffice/Data
  137. - onlyoffice_log:/var/log/onlyoffice
  138. - onlyoffice_lib:/var/lib/onlyoffice
  139. - onlyoffice_db:/var/lib/postgresql
  140. - ./onlyoffice/local.json:/etc/onlyoffice/documentserver/local.json:ro
  141. - ./onlyoffice/ds-docservice.conf:/etc/nginx/includes/ds-docservice.conf:ro
  142. restart: unless-stopped
  143. networks:
  144. - docsy_bridge
  145. volumes:
  146. hugo_cache:
  147. site_public:
  148. pdf_store:
  149. filebrowser_data:
  150. excel_store:
  151. excel_html_store:
  152. word_store:
  153. uploads_store:
  154. word_html_store:
  155. onlyoffice_data:
  156. onlyoffice_log:
  157. onlyoffice_lib:
  158. onlyoffice_db:
  159. networks:
  160. docsy_bridge:
  161. driver: bridge
  162. name: hugo_docsy_bridge