385 lines
7.6 KiB
Bash
385 lines
7.6 KiB
Bash
#!/bin/bash
|
||
|
||
# ============================================
|
||
# FLNXI素材库 - 构建并推送私有镜像
|
||
# 供开发者使用,用于构建和发布镜像
|
||
# ============================================
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
echo "========================================"
|
||
echo " 构建并推送 Docker 私有镜像"
|
||
echo "========================================"
|
||
echo ""
|
||
|
||
# 配置项
|
||
DOCKER_REGISTRY="${DOCKER_REGISTRY:-your-registry.com}"
|
||
IMAGE_NAME="flnxi-material"
|
||
DEFAULT_VERSION="1.0.0"
|
||
|
||
# 读取版本号
|
||
echo -e "${BLUE}请输入版本号 (默认: $DEFAULT_VERSION):${NC}"
|
||
read -p "版本号: " VERSION
|
||
VERSION=${VERSION:-$DEFAULT_VERSION}
|
||
|
||
FULL_IMAGE_NAME="$DOCKER_REGISTRY/$IMAGE_NAME:$VERSION"
|
||
LATEST_IMAGE_NAME="$DOCKER_REGISTRY/$IMAGE_NAME:latest"
|
||
|
||
echo ""
|
||
echo -e "${YELLOW}将构建以下镜像:${NC}"
|
||
echo " - $FULL_IMAGE_NAME"
|
||
echo " - $LATEST_IMAGE_NAME"
|
||
echo ""
|
||
read -p "确认继续? (y/n): " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
exit 1
|
||
fi
|
||
|
||
# 构建镜像
|
||
echo ""
|
||
echo -e "${BLUE}[1/4]${NC} 构建 Docker 镜像..."
|
||
docker build -t $FULL_IMAGE_NAME -t $LATEST_IMAGE_NAME .
|
||
echo -e "${GREEN}✓ 镜像构建完成${NC}"
|
||
|
||
# 测试镜像
|
||
echo ""
|
||
echo -e "${BLUE}[2/4]${NC} 测试镜像..."
|
||
if docker run --rm $FULL_IMAGE_NAME node --version; then
|
||
echo -e "${GREEN}✓ 镜像测试通过${NC}"
|
||
else
|
||
echo -e "${RED}✗ 镜像测试失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 登录到镜像仓库
|
||
echo ""
|
||
echo -e "${BLUE}[3/4]${NC} 登录到镜像仓库..."
|
||
if docker login $DOCKER_REGISTRY; then
|
||
echo -e "${GREEN}✓ 登录成功${NC}"
|
||
else
|
||
echo -e "${RED}✗ 登录失败${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 推送镜像
|
||
echo ""
|
||
echo -e "${BLUE}[4/4]${NC} 推送镜像到仓库..."
|
||
docker push $FULL_IMAGE_NAME
|
||
docker push $LATEST_IMAGE_NAME
|
||
echo -e "${GREEN}✓ 镜像推送完成${NC}"
|
||
|
||
# 显示镜像信息
|
||
echo ""
|
||
echo "========================================"
|
||
echo -e "${GREEN} 构建完成!${NC}"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "镜像信息:"
|
||
echo " 版本镜像: $FULL_IMAGE_NAME"
|
||
echo " 最新镜像: $LATEST_IMAGE_NAME"
|
||
echo ""
|
||
echo "镜像大小:"
|
||
docker images | grep $IMAGE_NAME | head -2
|
||
echo ""
|
||
echo "========================================"
|
||
|
||
# 询问是否生成发布包
|
||
echo ""
|
||
read -p "是否生成客户发布包? (y/n): " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
echo ""
|
||
echo "生成发布包..."
|
||
|
||
# 创建发布目录
|
||
RELEASE_DIR="release-v$VERSION"
|
||
rm -rf $RELEASE_DIR
|
||
mkdir -p $RELEASE_DIR
|
||
|
||
# 复制必要文件
|
||
cp docker-compose.prod.yml $RELEASE_DIR/docker-compose.yml
|
||
cp .env.template $RELEASE_DIR/.env
|
||
cp install.sh $RELEASE_DIR/
|
||
cp install-auto.sh $RELEASE_DIR/
|
||
cp quick-start.sh $RELEASE_DIR/
|
||
cp healthcheck.sh $RELEASE_DIR/
|
||
cp test-deployment.sh $RELEASE_DIR/
|
||
cp uninstall.sh $RELEASE_DIR/
|
||
|
||
# 创建镜像信息文件
|
||
cat > $RELEASE_DIR/IMAGE_INFO.txt << EOF
|
||
镜像信息
|
||
========
|
||
|
||
镜像地址: $FULL_IMAGE_NAME
|
||
版本号: $VERSION
|
||
构建时间: $(date)
|
||
|
||
使用方法
|
||
========
|
||
1. 修改 .env 文件中的 SERVER_IP
|
||
2. 执行 chmod +x *.sh
|
||
3. 执行 ./install.sh
|
||
|
||
详细说明请查看 README.md
|
||
EOF
|
||
|
||
# 创建客户端 README
|
||
cat > $RELEASE_DIR/README.md << 'EOF'
|
||
# FLNXI素材库 - 安装指南
|
||
|
||
## 系统要求
|
||
|
||
- Docker 20.10+
|
||
- Docker Compose 2.0+
|
||
- 2GB+ 内存
|
||
- 10GB+ 磁盘空间
|
||
|
||
## 快速安装
|
||
|
||
### 1. 解压文件
|
||
|
||
```bash
|
||
tar -xzf flnxi-material-vX.X.X.tar.gz
|
||
cd flnxi-material-vX.X.X
|
||
```
|
||
|
||
### 2. 配置环境
|
||
|
||
编辑 `.env` 文件,修改以下关键配置:
|
||
|
||
```bash
|
||
# 必须修改为服务器实际IP
|
||
SERVER_IP=192.168.1.100
|
||
|
||
# 可选:修改端口
|
||
APP_PORT=4320
|
||
MINIO_API_PORT=9000
|
||
MINIO_CONSOLE_PORT=9001
|
||
|
||
# 建议修改密码
|
||
POSTGRES_PASSWORD=your-strong-password
|
||
MINIO_ROOT_PASSWORD=your-strong-password
|
||
NEXTAUTH_SECRET=your-random-secret-key
|
||
```
|
||
|
||
### 3. 添加执行权限
|
||
|
||
```bash
|
||
chmod +x *.sh
|
||
```
|
||
|
||
### 4. 运行安装脚本
|
||
|
||
```bash
|
||
./install.sh
|
||
```
|
||
|
||
安装过程大约需要 5-10 分钟。
|
||
|
||
### 5. 访问系统
|
||
|
||
安装完成后,通过以下地址访问:
|
||
|
||
- **应用首页**: http://YOUR_SERVER_IP:4320
|
||
- **MinIO控制台**: http://YOUR_SERVER_IP:9001
|
||
|
||
## 首次使用
|
||
|
||
1. 访问应用首页
|
||
2. 点击「注册」创建账号
|
||
3. 设置管理员权限:
|
||
|
||
```bash
|
||
# 方法1: 使用 Prisma Studio
|
||
docker compose exec app npx prisma studio
|
||
|
||
# 方法2: 使用数据库命令
|
||
docker compose exec postgres psql -U postgres -d flnxi -c "UPDATE users SET role='ADMIN' WHERE email='your@email.com';"
|
||
```
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 启动服务
|
||
./quick-start.sh
|
||
# 或
|
||
docker compose up -d
|
||
|
||
# 停止服务
|
||
docker compose down
|
||
|
||
# 重启服务
|
||
docker compose restart
|
||
|
||
# 查看日志
|
||
docker compose logs -f
|
||
|
||
# 查看特定服务日志
|
||
docker compose logs -f app
|
||
|
||
# 查看服务状态
|
||
docker compose ps
|
||
|
||
# 进入容器
|
||
docker compose exec app sh
|
||
|
||
# 数据库管理
|
||
docker compose exec app npx prisma studio
|
||
```
|
||
|
||
## 数据备份
|
||
|
||
### 备份数据库
|
||
|
||
```bash
|
||
docker compose exec postgres pg_dump -U postgres flnxi > backup_$(date +%Y%m%d).sql
|
||
```
|
||
|
||
### 备份文件
|
||
|
||
```bash
|
||
# 备份上传的文件
|
||
tar -czf uploads_backup_$(date +%Y%m%d).tar.gz uploads/
|
||
|
||
# 备份 MinIO 数据
|
||
docker compose exec minio tar -czf /tmp/minio_backup.tar.gz /data
|
||
docker compose cp minio:/tmp/minio_backup.tar.gz ./minio_backup_$(date +%Y%m%d).tar.gz
|
||
```
|
||
|
||
### 恢复数据库
|
||
|
||
```bash
|
||
docker compose exec -T postgres psql -U postgres flnxi < backup_20240101.sql
|
||
```
|
||
|
||
## 更新升级
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
docker compose down
|
||
|
||
# 2. 备份数据(重要!)
|
||
# 参考上面的备份命令
|
||
|
||
# 3. 拉取新镜像
|
||
docker compose pull
|
||
|
||
# 4. 启动服务
|
||
docker compose up -d
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
### 服务无法启动
|
||
|
||
```bash
|
||
# 查看详细日志
|
||
docker compose logs
|
||
|
||
# 检查端口占用
|
||
netstat -tlnp | grep 4320
|
||
```
|
||
|
||
### 数据库连接失败
|
||
|
||
```bash
|
||
# 检查数据库状态
|
||
docker compose ps postgres
|
||
|
||
# 查看数据库日志
|
||
docker compose logs postgres
|
||
|
||
# 重启数据库
|
||
docker compose restart postgres
|
||
```
|
||
|
||
### MinIO 无法访问
|
||
|
||
```bash
|
||
# 检查 MinIO 状态
|
||
docker compose ps minio
|
||
|
||
# 查看 MinIO 日志
|
||
docker compose logs minio
|
||
|
||
# 重新初始化 bucket
|
||
docker compose up -d minio-init
|
||
```
|
||
|
||
### 图片无法显示
|
||
|
||
1. 检查 MinIO 是否正常运行
|
||
2. 确认 `.env` 中的 `SERVER_IP` 配置正确
|
||
3. 检查防火墙是否开放 MinIO 端口
|
||
|
||
## 性能优化
|
||
|
||
### 调整 Docker 资源限制
|
||
|
||
编辑 `docker-compose.yml`,为服务添加资源限制:
|
||
|
||
```yaml
|
||
services:
|
||
app:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '2'
|
||
memory: 2G
|
||
```
|
||
|
||
### 启用 Nginx 反向代理
|
||
|
||
建议使用 Nginx 进行反向代理,提供 SSL 支持和缓存功能。
|
||
|
||
## 安全建议
|
||
|
||
1. **修改默认密码**: 务必修改 `.env` 中的所有默认密码
|
||
2. **启用 HTTPS**: 使用 Nginx + Let's Encrypt 配置 SSL 证书
|
||
3. **防火墙配置**: 只开放必要端口(如 80, 443)
|
||
4. **定期备份**: 设置自动备份任务
|
||
5. **更新系统**: 定期更新 Docker 镜像
|
||
|
||
## 技术支持
|
||
|
||
如遇到问题,请提供以下信息:
|
||
|
||
1. 系统环境(操作系统、Docker 版本)
|
||
2. 错误日志(`docker compose logs`)
|
||
3. 服务状态(`docker compose ps`)
|
||
|
||
## 许可证
|
||
|
||
本软件为商业软件,未经授权不得复制、分发或修改。
|
||
EOF
|
||
|
||
# 打包
|
||
tar -czf $RELEASE_DIR.tar.gz $RELEASE_DIR/
|
||
|
||
echo ""
|
||
echo -e "${GREEN}✓ 发布包已生成: $RELEASE_DIR.tar.gz${NC}"
|
||
echo ""
|
||
echo "发布包内容:"
|
||
ls -lh $RELEASE_DIR.tar.gz
|
||
echo ""
|
||
echo "发布包目录结构:"
|
||
tree $RELEASE_DIR/ 2>/dev/null || ls -R $RELEASE_DIR/
|
||
fi
|
||
|
||
echo ""
|
||
echo "========================================"
|
||
echo "完成!"
|
||
echo "========================================"
|
||
|
||
|
||
|