你想用 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:
使用方法
- 把以上内容保存为
docker-compose.yml
- 执行启动命令:
docker-compose up -d
- 访问:http://localhost:5244
- 停止服务:
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. 使用步骤
- 创建目录结构和文件,修改
server_name
为你的域名或IP。 - 执行:
docker-compose up -d
- 访问
http://your.domain.com
,即可通过 Nginx 访问 Alist。 - 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. 启动步骤
- 准备好
docker-compose.yml
和Caddyfile
,放在同一目录。 - 运行:
docker-compose up -d
- 确保你的域名 DNS 已正确指向服务器 IP,且服务器允许 80 和 443 端口访问。
- 浏览器访问
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);
使用方法
- 安装 Node.js 环境(如果没装)
- 新建文件
gen_bcrypt.js
,复制上面代码 - 安装依赖
npm install bcrypt
- 生成密码哈希,比如密码是
mypassword
node gen_bcrypt.js mypassword
- 控制台会输出对应的 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 和刚才输入的密码登录"
使用说明
- 服务器需安装好 Docker 和 Docker Compose,以及 Node.js。
- 保存脚本,例如
deploy_alist.sh
,赋可执行权限:
chmod +x deploy_alist.sh
- 运行脚本:
./deploy_alist.sh
- 按提示输入用户名和密码(密码输入不可见)。
- 等待脚本自动完成所有步骤。
发表回复