|
1 | 1 | #!/bin/bash |
2 | 2 | set -e |
3 | 3 |
|
4 | | -# 辅助函数:如果目标目录为空,则从源目录填充默认内容 |
5 | | -populate_if_empty() { |
6 | | - local src="$1" |
7 | | - local dst="$2" |
8 | | - if [ -d "$dst" ] && [ -z "$(ls -A "$dst" 2>/dev/null)" ]; then |
9 | | - echo " → Populating $dst with default content from $src" |
10 | | - cp -r "$src"/. "$dst"/ |
11 | | - fi |
12 | | -} |
13 | | - |
14 | | -# 辅助函数:合并目录内容(源覆盖目标) |
15 | | -merge_dir() { |
16 | | - local src="$1" |
17 | | - local dst="$2" |
18 | | - if [ -d "$src" ] && [ -n "$(ls -A "$src" 2>/dev/null)" ]; then |
19 | | - echo " → Merging $src into $dst" |
20 | | - mkdir -p "$dst" |
21 | | - cp -rf "$src"/. "$dst"/ |
22 | | - fi |
23 | | -} |
| 4 | +GREEN='\033[0;32m' |
| 5 | +YELLOW='\033[1;33m' |
| 6 | +NC='\033[0m' |
24 | 7 |
|
25 | | -echo "🚀 Starting FixIt container..." |
| 8 | +echo -e "${GREEN}🔧 FixIt Docker Entrypoint${NC}" |
26 | 9 |
|
27 | | -# --- 策略1:如果用户挂载了完整的站点目录到 /data/site,则直接使用它 --- |
28 | | -if [ -d "/data/site" ] && [ -n "$(ls -A /data/site 2>/dev/null)" ]; then |
29 | | - echo " → Using user-provided full site from /data/site" |
30 | | - # 清空默认站点,复制用户完整站点 |
31 | | - rm -rf /app/site |
32 | | - cp -r /data/site /app/site |
| 10 | +if [ -d "/site" ] && [ -n "$(ls -A /site 2>/dev/null)" ]; then |
| 11 | + SITE_DIR="/site" |
| 12 | + echo -e "${YELLOW}📂 Using user-provided full site from /site${NC}" |
33 | 13 | else |
34 | | - # --- 策略2:使用默认站点,并支持细分目录覆盖(向后兼容)--- |
35 | | - # 初始化站点目录(如果 /app/site 为空,则从默认示例站点填充) |
36 | | - populate_if_empty /app/site-default /app/site |
| 14 | + SITE_DIR="/app/default-site" |
| 15 | + echo -e "${YELLOW}📂 Using default site, merging custom data from /data/*${NC}" |
| 16 | + |
| 17 | + merge_dir() { |
| 18 | + local src=$1 |
| 19 | + local dst=$2 |
| 20 | + if [ -d "$src" ] && [ -n "$(ls -A $src 2>/dev/null)" ]; then |
| 21 | + echo " Merging $src -> $dst" |
| 22 | + cp -rf $src/. $dst/ |
| 23 | + fi |
| 24 | + } |
| 25 | + |
| 26 | + merge_dir /data/content $SITE_DIR/content |
| 27 | + merge_dir /data/static $SITE_DIR/static |
| 28 | + merge_dir /data/layouts $SITE_DIR/layouts |
| 29 | + merge_dir /data/assets $SITE_DIR/assets |
| 30 | + merge_dir /data/data $SITE_DIR/data |
37 | 31 |
|
38 | | - # 应用用户挂载的配置文件(/config/config.toml) |
39 | 32 | if [ -f /config/config.toml ]; then |
40 | | - echo " → Applying custom config.toml" |
41 | | - cp /config/config.toml /app/site/config.toml |
| 33 | + echo " Using custom config.toml from /config" |
| 34 | + cp /config/config.toml $SITE_DIR/config.toml |
42 | 35 | fi |
43 | | - |
44 | | - # 合并用户提供的内容/布局/静态资源等(细分覆盖) |
45 | | - merge_dir /data/content /app/site/content |
46 | | - merge_dir /data/layouts /app/site/layouts |
47 | | - merge_dir /data/static /app/site/static |
48 | | - merge_dir /data/assets /app/site/assets |
49 | | - merge_dir /data/data /app/site/data |
50 | | - merge_dir /data/i18n /app/site/i18n |
51 | | - merge_dir /data/themes /app/themes # 允许用户完全替换主题 |
52 | 36 | fi |
53 | 37 |
|
54 | | -# 生成静态站点 |
55 | | -echo "🔨 Generating static site with Hugo..." |
56 | | -cd /app/site |
57 | | -hugo --minify --destination /usr/share/nginx/html |
| 38 | +echo -e "${GREEN}⚙️ Generating static site...${NC}" |
| 39 | +cd $SITE_DIR |
| 40 | + |
| 41 | +if [ -n "$BASE_URL" ]; then |
| 42 | + hugo --minify --baseURL "$BASE_URL" --destination /usr/share/nginx/html |
| 43 | +else |
| 44 | + hugo --minify --destination /usr/share/nginx/html |
| 45 | +fi |
58 | 46 |
|
59 | | -# 启动 Nginx |
60 | | -echo "🌐 Starting Nginx..." |
| 47 | +echo -e "${GREEN}✅ Static site generated, starting Nginx...${NC}" |
61 | 48 | nginx -g "daemon off;" |
0 commit comments