Docker 部署
Shortlinker 提供了优化的 Docker 镜像,支持多种部署方式。
镜像获取
bash
# Docker Hub(推荐)
docker pull e1saps/shortlinker
# GitHub Container Registry
docker pull ghcr.io/apts-1547/shortlinker
# 自构建镜像
git clone https://github.com/AptS-1547/shortlinker
cd shortlinker && docker build -t shortlinker .快速启动
基本运行
bash
# 最简单的启动方式
docker run -d -p 8080:8080 e1saps/shortlinker数据持久化
bash
# 挂载数据目录 - TCP
docker run -d \
-p 8080:8080 \
-v $(pwd)/data:/data \
-e DATABASE_URL=sqlite:///data/shortlinker.db \
e1saps/shortlinker
# Unix 套接字
docker run -d \
-v $(pwd)/data:/data \
-v $(pwd)/sock:/sock \
-e UNIX_SOCKET=/sock/shortlinker.sock \
-e DATABASE_URL=sqlite:///data/shortlinker.db \
e1saps/shortlinkerDocker Compose
基础配置
yaml
# docker-compose.yml
version: '3.8'
services:
shortlinker:
image: e1saps/shortlinker
container_name: shortlinker
ports:
- "8080:8080"
volumes:
- ./data:/data
environment:
- SERVER_HOST=0.0.0.0
- SERVER_PORT=8080
- DATABASE_URL=sqlite:///data/shortlinker.db
- DEFAULT_URL=https://example.com
- RUST_LOG=info
restart: unless-stopped生产环境配置
yaml
# docker-compose.prod.yml
version: '3.8'
services:
shortlinker:
image: e1saps/shortlinker:latest
# TCP 端口
ports:
- "127.0.0.1:8080:8080"
# Unix 套接字挂载(二选一)
# volumes:
# - ./sock:/sock
volumes:
- ./data:/data
environment:
# TCP 配置
- SERVER_HOST=0.0.0.0
- SERVER_PORT=8080
# Unix 套接字配置(二选一)
# - UNIX_SOCKET=/sock/shortlinker.sock
- DATABASE_URL=sqlite:///data/links.db
- DEFAULT_URL=https://your-domain.com
- ADMIN_TOKEN=${ADMIN_TOKEN}
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/"]
interval: 30s
timeout: 10s
retries: 3启动和管理
bash
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f shortlinker
# 停止服务
docker-compose down
# 更新镜像
docker-compose pull && docker-compose up -d镜像特性
优势
- 极小体积:基于 scratch 镜像,最终大小仅几 MB
- 安全性:无操作系统,减少攻击面
- 性能:单一二进制文件,启动迅速
- 跨平台:支持 amd64、arm64 架构
多阶段构建
dockerfile
# 构建阶段
FROM rust:1.92-slim as builder
WORKDIR /app
COPY . .
RUN cargo build --release
# 运行阶段
FROM scratch
COPY --from=builder /app/target/release/shortlinker /shortlinker
EXPOSE 8080
CMD ["/shortlinker"]数据管理
数据目录结构
data/
├── links.db # SQLite 数据库文件
└── backup/ # 备份目录(可选)
└── links.db.20240101备份策略
bash
# 创建备份脚本
cat > backup.sh << 'EOF'
#!/bin/bash
docker exec shortlinker cp /data/links.db /data/backup/links.db.$(date +%Y%m%d_%H%M%S)
find ./data/backup -name "links.db.*" -mtime +7 -delete
EOF
chmod +x backup.sh
# 定时备份(添加到 crontab)
0 2 * * * /path/to/backup.sh安全配置
网络安全
bash
# 仅本地监听 - TCP
docker run -d -p 127.0.0.1:8080:8080 e1saps/shortlinker
# Unix 套接字
docker run -d \
-v $(pwd)/sock:/sock \
-e UNIX_SOCKET=/sock/shortlinker.sock \
e1saps/shortlinker
# 自定义网络
docker network create shortlinker-net
docker run -d --network shortlinker-net --name shortlinker e1saps/shortlinker资源限制
yaml
services:
shortlinker:
image: e1saps/shortlinker
deploy:
resources:
limits:
memory: 128M
cpus: '0.5'
reservations:
memory: 64M
cpus: '0.25'故障排除
常见问题
bash
# 检查容器状态
docker ps -a
docker logs shortlinker
# 检查端口占用
netstat -tlnp | grep 8080
# 检查挂载点
docker inspect shortlinker | grep -A 10 Mounts
# 监控资源使用
docker stats shortlinker调试模式
bash
# 交互模式运行
docker run -it --rm \
-p 8080:8080 \
-v $(pwd)/data:/data \
-e RUST_LOG=debug \
e1saps/shortlinker生产环境建议
- 使用具体版本标签,避免
latest - 设置资源限制,防止资源滥用
- 配置健康检查,自动重启异常容器
- 定期备份数据,配置监控告警
- 通过反向代理暴露服务,不直接暴露容器端口