你想用 Docker 部署 Alist(一个文件列表和管理服务),我帮你整理个最简单的 Docker 部署步骤示范,方便快速上线。


Docker 部署 Alist 简单教程


1. 拉取官方镜像

Alist 官方有提供 Docker 镜像,可以直接用:

docker pull xhofe/alist

2. 创建数据卷(可选)

建议挂载数据目录,这样容器重启数据不会丢失:

docker volume create alist-data

3. 启动容器

运行 Alist 容器,挂载数据卷,映射端口:

docker run -d \
  --name alist \
  -p 5244:5244 \
  -v alist-data:/alist/data \
  xhofe/alist
  • -p 5244:5244:把宿主机的5244端口映射到容器的5244端口(Alist默认端口)
  • -v alist-data:/alist/data:数据持久化路径

4. 访问服务

打开浏览器访问:

http://localhost:5244

默认账号密码一般在文档里说明,常见是:

  • 账号:admin
  • 密码:admin

首次登陆建议立即修改密码。


5. 其他说明

  • 配置文件和数据都保存在 /alist/data 目录(容器内路径)。
  • 你也可以把 /alist/data 映射到宿主机某个目录,比如:
docker run -d \
  --name alist \
  -p 5244:5244 \
  -v /path/on/host/alist-data:/alist/data \
  xhofe/alist
  • 如果需要配置反向代理(Nginx、Caddy),可以在容器前做转发。

6. 停止和删除容器

docker stop alist
docker rm alist

好嘞,帮你写一个简单的 Docker Compose 配置文件,方便你一键启动 Alist 服务。


Docker Compose 配置示例(docker-compose.yml

version: "3.8"

services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: unless-stopped
    ports:
      - "5244:5244"           # 映射端口
    volumes:
      - alist-data:/alist/data  # 持久化数据卷

volumes:
  alist-data:

使用方法

  1. 把以上内容保存为 docker-compose.yml
  2. 执行启动命令:
docker-compose up -d
  1. 访问:http://localhost:5244
  2. 停止服务:
docker-compose down

如果你需要把数据目录映射到宿主机的具体路径,比如 /home/yourname/alist-data,可以把 volumes 改成:

volumes:
  - /home/yourname/alist-data:/alist/data

给你写一个带反向代理(用 Nginx)+ Docker Compose + 自动更新(Watchtower)示范方案,方便你部署高可用、易维护的 Alist 服务。


1. 目录结构示例

alist-docker/
│
├── docker-compose.yml
├── nginx/
│   └── default.conf

2. docker-compose.yml 内容

version: "3.8"

services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: unless-stopped
    volumes:
      - alist-data:/alist/data
    networks:
      - webnet

  nginx:
    image: nginx:latest
    container_name: alist-nginx
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - alist
    networks:
      - webnet

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --cleanup --interval 300  # 每5分钟检查更新
    networks:
      - webnet

volumes:
  alist-data:

networks:
  webnet:

3. Nginx 反向代理配置 nginx/default.conf

server {
    listen 80;

    server_name your.domain.com;  # 换成你自己的域名或IP

    location / {
        proxy_pass http://alist:5244/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

4. 使用步骤

  1. 创建目录结构和文件,修改 server_name 为你的域名或IP。
  2. 执行:
docker-compose up -d
  1. 访问 http://your.domain.com,即可通过 Nginx 访问 Alist。
  2. Watchtower 会自动每 5 分钟检查镜像更新并重启容器。

5. 备注

  • 确保服务器防火墙允许80端口访问。
  • 如果需要 HTTPS,推荐在 Nginx 外层使用 certbot 或 Caddy 来做证书管理。
  • Watchtower 自动更新镜像并重启容器,保持服务最新版。
  • 你可以根据需要调整端口映射和配置。

好的,这里给你写一个用 Caddy 2 做自动 HTTPS 反向代理,配合 Docker Compose 部署 Alist 的完整示例。


1. 目录结构示例

alist-docker/
│
├── docker-compose.yml
├── Caddyfile

2. docker-compose.yml

version: "3.8"

services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: unless-stopped
    volumes:
      - alist-data:/alist/data
    networks:
      - webnet

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - alist
    networks:
      - webnet

volumes:
  alist-data:
  caddy_data:
  caddy_config:

networks:
  webnet:

3. Caddyfile

your.domain.com {
    reverse_proxy alist:5244
    log {
        output file /var/log/caddy/access.log
        format single_field common_log
    }
}
  • 把 your.domain.com 替换成你的真实域名。
  • Caddy 会自动申请并续期 Let’s Encrypt 证书。

4. 启动步骤

  1. 准备好 docker-compose.yml 和 Caddyfile,放在同一目录。
  2. 运行:
docker-compose up -d
  1. 确保你的域名 DNS 已正确指向服务器 IP,且服务器允许 80 和 443 端口访问。
  2. 浏览器访问 https://your.domain.com 即可。

5. 日志查看(可选)

进入 Caddy 容器看日志:

docker exec -it caddy tail -f /var/log/caddy/access.log

6. 小提示

  • 你可以修改 Caddyfile 加入更多配置,比如路径前缀、Basic Auth等。
  • Caddy 的配置很灵活,适合快速做 HTTPS 反向代理。

给你写个带 Basic Auth 的 Caddyfile 配置示例,并配合 Docker Compose 使用,同时附带 Watchtower 自动更新配置。


1. 修改 Caddyfile 增加 Basic Auth

your.domain.com {
    basicauth /* {
        admin JDJhJDEwJFJhVGdHMWRZb3duQ0Ryb3ZzTnZRV3ZhZ2k5Y0pBZkN4V1BqaFVFYlZ2MmZr
    }
    reverse_proxy alist:5244
    log {
        output file /var/log/caddy/access.log
        format single_field common_log
    }
}
  • admin 是用户名
  • 后面长串是密码的 bcrypt 哈希(这里是 admin123 的哈希)

你可以用 https://bcrypt-generator.com/ 生成你自己的 bcrypt 哈希替换。


2. 完整 docker-compose.yml

version: "3.8"

services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: unless-stopped
    volumes:
      - alist-data:/alist/data
    networks:
      - webnet

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - alist
    networks:
      - webnet

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: --cleanup --interval 300
    networks:
      - webnet

volumes:
  alist-data:
  caddy_data:
  caddy_config:

networks:
  webnet:

3. 使用步骤

  • 准备好 docker-compose.yml 和带 Basic Auth 的 Caddyfile
  • 启动服务
docker-compose up -d
  • 访问 https://your.domain.com,会弹出登录框,输入用户名 admin 和你的密码即可。

好,这里给你写一个用 Node.js 快速生成 bcrypt 密码哈希的小脚本,方便你生成 Basic Auth 所需的密码哈希。


Node.js 生成 bcrypt 密码哈希脚本

// save as gen_bcrypt.js
const bcrypt = require('bcrypt');

async function generateHash(password) {
  const saltRounds = 10;
  const hash = await bcrypt.hash(password, saltRounds);
  console.log(`Password: ${password}`);
  console.log(`Bcrypt hash: ${hash}`);
}

const password = process.argv[2];
if (!password) {
  console.log('Usage: node gen_bcrypt.js <password>');
  process.exit(1);
}

generateHash(password).catch(console.error);

使用方法

  1. 安装 Node.js 环境(如果没装)
  2. 新建文件 gen_bcrypt.js,复制上面代码
  3. 安装依赖
npm install bcrypt
  1. 生成密码哈希,比如密码是 mypassword
node gen_bcrypt.js mypassword
  1. 控制台会输出对应的 bcrypt 哈希,把它复制到你的 Caddyfile 的 Basic Auth 配置中即可。

明白了!下面给你写一个全自动部署脚本(Bash),从生成 bcrypt 密码哈希、写 Caddyfile、写 docker-compose.yml,到拉镜像启动容器,一键完成 Alist + Caddy + Watchtower 的部署。


一键全自动部署脚本(deploy_alist.sh)

#!/bin/bash

set -e

# 1. 读用户输入用户名和密码
read -p "请输入 Basic Auth 用户名(默认 admin): " USERNAME
USERNAME=${USERNAME:-admin}

read -s -p "请输入 Basic Auth 密码: " PASSWORD
echo
if [ -z "$PASSWORD" ]; then
  echo "密码不能为空,退出"
  exit 1
fi

# 2. 生成 bcrypt 哈希(调用 node 脚本)
if ! command -v node >/dev/null 2>&1; then
  echo "Node.js 未安装,请先安装 Node.js"
  exit 1
fi

HASH=$(node -e "
  const bcrypt = require('bcrypt');
  bcrypt.hash(process.argv[1], 10).then(hash => console.log(hash));
" "$PASSWORD")

echo "生成的 bcrypt 哈希为: $HASH"

# 3. 写 Caddyfile
cat > Caddyfile <<EOF
your.domain.com {
    basicauth /* {
        $USERNAME $HASH
    }
    reverse_proxy alist:5244
    log {
        output file /var/log/caddy/access.log
        format single_field common_log
    }
}
EOF

echo "已生成 Caddyfile"

# 4. 写 docker-compose.yml
cat > docker-compose.yml <<EOF
version: "3.8"

services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: unless-stopped
    volumes:
      - alist-data:/alist/data
    networks:
      - webnet

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - alist
    networks:
      - webnet

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: --cleanup --interval 300
    networks:
      - webnet

volumes:
  alist-data:
  caddy_data:
  caddy_config:

networks:
  webnet:
EOF

echo "已生成 docker-compose.yml"

# 5. 拉取镜像并启动服务
docker-compose pull
docker-compose up -d

echo "部署完成!"
echo "请确认你的域名 DNS 已指向此服务器"
echo "通过 https://your.domain.com 访问,输入用户名 $USERNAME 和刚才输入的密码登录"

使用说明

  1. 服务器需安装好 Docker 和 Docker Compose,以及 Node.js。
  2. 保存脚本,例如 deploy_alist.sh,赋可执行权限:
chmod +x deploy_alist.sh
  1. 运行脚本:
./deploy_alist.sh
  1. 按提示输入用户名和密码(密码输入不可见)。
  2. 等待脚本自动完成所有步骤。