初始化

This commit is contained in:
hukdoesn
2025-06-13 10:21:12 +08:00
parent 1bb6f0b9a8
commit 1d6412861c
7 changed files with 626 additions and 24 deletions

View File

@@ -217,7 +217,7 @@ COPY --from=builder /usr/local/maven /usr/local/maven
WORKDIR /app
# 配置Nginx - 复制自定义配置文件
COPY web/nginx.conf /etc/nginx/sites-available/default
COPY nginx.conf /etc/nginx/sites-available/default
RUN ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 复制前端构建文件到Nginx静态文件目录

139
README.md
View File

@@ -50,7 +50,7 @@ LiteOps采用前后端分离的架构设计
- **Ant Design Vue 4.x**基于Vue的UI组件库
- **Axios**基于Promise的HTTP客户端
- **Vue Router**Vue官方路由管理器
- **AntV G2**:数据可视化图表库
- **echarts**:数据可视化图表库
### 后端技术栈
@@ -61,9 +61,32 @@ LiteOps采用前后端分离的架构设计
- **Python-GitLab**GitLab API客户端
- **JWT认证**:用户身份验证
### 部署方案
### 部署架构
- **Docker**:容器化部署
LiteOps采用容器化部署方案主要包含以下组件
```
┌─────────────────────┐ ┌─────────────────────┐
│ Nginx (Port 80) │ │ Django (Port 8900) │
│ 静态文件服务 │◄───┤ 后端API服务 │
└─────────────────────┘ └─────────────────────┘
┌─────────────────────┐
│ MySQL (Port 3306) │
│ 数据库服务 │
└─────────────────────┘
┌─────────────────────┐
│ Docker in Docker │
│ CI/CD构建环境 │
└─────────────────────┘
```
**部署特点**
- **Docker**:容器化部署,环境一致性
- **Docker in Docker**支持CI/CD构建环境完全隔离
- **一键部署**:自动化脚本部署,简化操作流程
- **多阶段构建**:优化镜像大小,提高构建效率
## 项目目标
@@ -84,9 +107,115 @@ LiteOps主要适用于以下场景
- 希望减少手动操作、提高效率的开发环境
- 对现有工具不满意,需要更贴合实际工作流程的解决方案
## 项目当前状态与未来规划
## 🚀 快速部署
LiteOps目前处于未完善状态虽然核心功能已经初步实现但仍有许多需求和功能有待完善如实现部署k8s项目。我希望通过开放的方式收集更多的需求和建议使这个项目能够更好地服务于实际开发场景。
### 前置要求
在开始部署之前,请确保您的系统满足以下要求:
- **操作系统**Linux (推荐 Ubuntu 20.04+、CentOS 7+)
- **Docker**:版本 20.0+
- **Docker Compose**:版本 2.0+
- **磁盘空间**:至少 5GB 可用空间
- **内存**:推荐 4GB
- **网络**:能够访问 Docker Hub 和相关软件源
### 快速开始
#### 1. 获取部署文件
您需要获取以下部署文件:
- `start-containers.sh` - 一键部署脚本
- `liteops_init.sql` - 数据库初始化文件
- `liteops` - Docker镜像
#### 2. 获取Docker镜像
```bash
# 拉取LiteOps镜像如果有公开镜像仓库
docker pull liteops:v1
# 或者从提供的镜像文件加载
# docker load < liteops-v1.tar
```
#### 3. 准备部署文件
创建部署目录并放置必要文件:
```bash
# 创建部署目录
mkdir liteops-deploy
cd liteops-deploy
# 将以下文件放入此目录:
# - start-containers.sh
# - liteops_init.sql
```
#### 4. 一键部署
使用提供的启动脚本进行自动化部署:
```bash
# 给启动脚本执行权限
chmod +x start-containers.sh
# 执行一键部署
./start-containers.sh
```
启动脚本会自动完成以下操作:
#### 5. 验证部署
部署完成后,您可以通过以下方式验证:
```bash
# 检查容器状态
docker ps
# 检查日志
docker logs liteops
🐳 启动 Docker in Docker 环境...
🚀 启动 Docker daemon (轻量级CI/CD模式)...
⏳ 等待 Docker daemon 启动...
time="2025-06-13T02:15:10.086745884Z" level=warning msg="CDI setup error /etc/cdi: failed to monitor for changes: no such file or directory"
time="2025-06-13T02:15:10.086771075Z" level=warning msg="CDI setup error /var/run/cdi: failed to monitor for changes: no such file or directory"
✅ Docker daemon 启动成功
🔍 验证 Docker 功能...
✅ Docker daemon 版本: 28.2.2
✅ 存储驱动: vfs
🎉 Docker in Docker 环境启动完成 (轻量级CI/CD模式)
Starting nginx...
Starting nginx: nginx.
Starting backend service...
INFO: Started server process [188]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8900 (Press CTRL+C to quit)
docker logs liteops-mysql
```
### 访问应用
部署成功后,您可以通过以下地址访问:
- **前端界面**http://localhost
- **后端API**http://localhost:8900/api/
- **MySQL数据库**localhost:3306
### 默认登录信息
- **用户名**admin
- **密码**admin123 (初始密码)
## 项目当前状态
LiteOps目前处于未完善状态虽然核心功能已经初步实现但仍有许多需求和功能有待完善。我希望通过开放的方式收集更多的需求和建议使这个项目能够更好地服务于实际开发场景。
### 需求征集

View File

@@ -195,5 +195,5 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# 构建相关配置
#BUILD_ROOT = Path('/data/liteops/build') # 修改为指定目录
BUILD_ROOT = Path('/Users/huk/Downloads/data')
BUILD_ROOT = Path('/data')
BUILD_ROOT.mkdir(exist_ok=True, parents=True) # 确保目录存在,包括父目录

View File

@@ -1,6 +1,7 @@
[client]
#host = 127.0.0.1
host = mysql
#host = mysql
host = liteops-mysql
port = 3306
database = liteops
user = root

354
liteops_init.sql Normal file
View File

@@ -0,0 +1,354 @@
/*
Navicat Premium Data Transfer
Source Server : 127.0.0.1
Source Server Type : MySQL
Source Server Version : 80100 (8.1.0)
Source Host : 127.0.0.1:3306
Source Schema : liteops
Target Server Type : MySQL
Target Server Version : 80100 (8.1.0)
File Encoding : 65001
Date: 12/06/2025 17:13:48
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for build_history
-- ----------------------------
DROP TABLE IF EXISTS `build_history`;
CREATE TABLE `build_history` (
`id` int NOT NULL AUTO_INCREMENT,
`history_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`build_number` int NOT NULL,
`branch` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`commit_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`requirement` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`build_log` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`stages` json NOT NULL,
`build_time` json NOT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`operator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`task_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `history_id` (`history_id`),
UNIQUE KEY `build_history_task_id_build_number_8fc0b316_uniq` (`task_id`,`build_number`),
KEY `build_history_operator_id_f43bdff4_fk_user_user_id` (`operator_id`),
CONSTRAINT `build_history_operator_id_f43bdff4_fk_user_user_id` FOREIGN KEY (`operator_id`) REFERENCES `user` (`user_id`),
CONSTRAINT `build_history_task_id_dfb7725d_fk_build_task_task_id` FOREIGN KEY (`task_id`) REFERENCES `build_task` (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for build_task
-- ----------------------------
DROP TABLE IF EXISTS `build_task`;
CREATE TABLE `build_task` (
`id` int NOT NULL AUTO_INCREMENT,
`task_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`branch` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`stages` json NOT NULL,
`notification_channels` json NOT NULL,
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`last_build_number` int NOT NULL,
`total_builds` int NOT NULL,
`success_builds` int NOT NULL,
`failure_builds` int NOT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`environment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`git_token_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`project_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`build_time` json NOT NULL DEFAULT (_utf8mb3'{}'),
`requirement` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`building_status` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
`external_script_config` json NOT NULL DEFAULT (_utf8mb3'{}'),
`use_external_script` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `task_id` (`task_id`),
KEY `build_task_creator_id_e702c745_fk_user_user_id` (`creator_id`),
KEY `build_task_environment_id_8f5e7798_fk_environment_environment_id` (`environment_id`),
KEY `build_task_git_token_id_813ab2b1_fk_gitlab_to` (`git_token_id`),
KEY `build_task_project_id_f92c80ac_fk_project_project_id` (`project_id`),
CONSTRAINT `build_task_creator_id_e702c745_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`),
CONSTRAINT `build_task_environment_id_8f5e7798_fk_environment_environment_id` FOREIGN KEY (`environment_id`) REFERENCES `environment` (`environment_id`),
CONSTRAINT `build_task_git_token_id_813ab2b1_fk_gitlab_to` FOREIGN KEY (`git_token_id`) REFERENCES `gitlab_token_credential` (`credential_id`),
CONSTRAINT `build_task_project_id_f92c80ac_fk_project_project_id` FOREIGN KEY (`project_id`) REFERENCES `project` (`project_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for environment
-- ----------------------------
DROP TABLE IF EXISTS `environment`;
CREATE TABLE `environment` (
`id` int NOT NULL AUTO_INCREMENT,
`environment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `environment_id` (`environment_id`),
KEY `environment_creator_id_2f30820a_fk_user_user_id` (`creator_id`),
CONSTRAINT `environment_creator_id_2f30820a_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for gitlab_token_credential
-- ----------------------------
DROP TABLE IF EXISTS `gitlab_token_credential`;
CREATE TABLE `gitlab_token_credential` (
`id` int NOT NULL AUTO_INCREMENT,
`credential_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `credential_id` (`credential_id`),
KEY `gitlab_token_credential_creator_id_d53c3666_fk_user_user_id` (`creator_id`),
CONSTRAINT `gitlab_token_credential_creator_id_d53c3666_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for kubeconfig_credential
-- ----------------------------
DROP TABLE IF EXISTS `kubeconfig_credential`;
CREATE TABLE `kubeconfig_credential` (
`id` int NOT NULL AUTO_INCREMENT,
`credential_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext COLLATE utf8mb4_bin,
`kubeconfig_content` longtext COLLATE utf8mb4_bin,
`cluster_name` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,
`context_name` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `credential_id` (`credential_id`),
KEY `kubeconfig_credential_creator_id_a3490ac1_fk_user_user_id` (`creator_id`),
CONSTRAINT `kubeconfig_credential_creator_id_a3490ac1_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for login_attempt
-- ----------------------------
DROP TABLE IF EXISTS `login_attempt`;
CREATE TABLE `login_attempt` (
`id` int NOT NULL AUTO_INCREMENT,
`ip_address` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
`failed_attempts` int NOT NULL,
`locked_until` datetime(6) DEFAULT NULL,
`last_attempt_time` datetime(6) NOT NULL,
`create_time` datetime(6) DEFAULT NULL,
`user_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `login_attempt_user_id_ip_address_a69098a0_uniq` (`user_id`,`ip_address`),
CONSTRAINT `login_attempt_user_id_0f42fcb7_fk_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for login_log
-- ----------------------------
DROP TABLE IF EXISTS `login_log`;
CREATE TABLE `login_log` (
`id` int NOT NULL AUTO_INCREMENT,
`log_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`user_agent` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`fail_reason` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`login_time` datetime(6) DEFAULT NULL,
`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `log_id` (`log_id`),
KEY `login_log_user_id_69642132_fk_user_user_id` (`user_id`),
CONSTRAINT `login_log_user_id_69642132_fk_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for notification_robot
-- ----------------------------
DROP TABLE IF EXISTS `notification_robot`;
CREATE TABLE `notification_robot` (
`id` int NOT NULL AUTO_INCREMENT,
`robot_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`webhook` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`remark` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`ip_list` json DEFAULT NULL,
`keywords` json DEFAULT NULL,
`security_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `robot_id` (`robot_id`),
KEY `notification_robot_creator_id_de406276_fk_user_user_id` (`creator_id`),
CONSTRAINT `notification_robot_creator_id_de406276_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for project
-- ----------------------------
DROP TABLE IF EXISTS `project`;
CREATE TABLE `project` (
`id` int NOT NULL AUTO_INCREMENT,
`project_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`category` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`repository` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `project_id` (`project_id`),
KEY `project_creator_id_e70918ae_fk_user_user_id` (`creator_id`),
CONSTRAINT `project_creator_id_e70918ae_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int NOT NULL AUTO_INCREMENT,
`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`permissions` json DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `role_id` (`role_id`),
UNIQUE KEY `name` (`name`),
KEY `role_creator_id_37780e7e_fk_user_user_id` (`creator_id`),
CONSTRAINT `role_creator_id_37780e7e_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for security_config
-- ----------------------------
DROP TABLE IF EXISTS `security_config`;
CREATE TABLE `security_config` (
`id` int NOT NULL AUTO_INCREMENT,
`min_password_length` int NOT NULL,
`password_complexity` json NOT NULL,
`session_timeout` int NOT NULL,
`max_login_attempts` int NOT NULL,
`lockout_duration` int NOT NULL,
`enable_2fa` tinyint(1) NOT NULL,
`update_time` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for ssh_key_credential
-- ----------------------------
DROP TABLE IF EXISTS `ssh_key_credential`;
CREATE TABLE `ssh_key_credential` (
`id` int NOT NULL AUTO_INCREMENT,
`credential_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`private_key` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
`passphrase` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`creator_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `credential_id` (`credential_id`),
KEY `ssh_key_credential_creator_id_c7396682_fk_user_user_id` (`creator_id`),
CONSTRAINT `ssh_key_credential_creator_id_c7396682_fk_user_user_id` FOREIGN KEY (`creator_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`status` smallint DEFAULT NULL,
`login_time` datetime(6) DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for user_role
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`id` int NOT NULL AUTO_INCREMENT,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_role_user_id_role_id_a1d0951e_uniq` (`user_id`,`role_id`),
KEY `user_role_role_id_6a11361a_fk_role_role_id` (`role_id`),
CONSTRAINT `user_role_role_id_6a11361a_fk_role_role_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`role_id`),
CONSTRAINT `user_role_user_id_12d84374_fk_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for user_token
-- ----------------------------
DROP TABLE IF EXISTS `user_token`;
CREATE TABLE `user_token` (
`id` int NOT NULL AUTO_INCREMENT,
`token_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`token` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `token_id` (`token_id`),
KEY `user_token_user_id_69e1f632_fk_user_user_id` (`user_id`),
CONSTRAINT `user_token_user_id_69e1f632_fk_user_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- 初始化数据
-- ----------------------------
-- 插入用户数据
INSERT INTO `user` (`id`, `user_id`, `username`, `name`, `password`, `email`, `status`, `login_time`, `create_time`, `update_time`) VALUES (1, '9bfef5a1ee1d4054be9727934ad112es', 'admin', '管理员', '240be518fabd2724ddb6f04eeb1da5967448d7e831c08c8fa822809f74c720a9', 'admin@example.com', 1, '2025-06-12 16:29:01.815564', '2025-03-26 11:41:20.549327', '2025-06-12 16:29:01.815655');
-- 插入角色数据
INSERT INTO `role` (`id`, `role_id`, `name`, `description`, `permissions`, `create_time`, `update_time`, `creator_id`) VALUES (1, '333ec25423e04a4e96b4bb238de51cc3', '管理员', '系统管理员,拥有所有权限', '{\"data\": {\"operations\": [\"view\"], \"project_ids\": [], \"project_scope\": \"all\", \"environment_scope\": \"all\", \"environment_types\": []}, \"menu\": [\"/projects\", \"/projects/list\", \"/build\", \"/build/tasks\", \"/build/history\", \"/logs/login\", \"/user\", \"/user/list\", \"/user/role\", \"/credentials\", \"/environments\", \"/environments/list\", \"/dashboard\", \"/logs\", \"/system/basic\", \"/system/notification\", \"/system/backup\", \"/system\"], \"function\": {\"role\": [\"view\", \"create\", \"edit\", \"delete\", \"assign_permission\"], \"user\": [\"view\", \"create\", \"edit\", \"delete\", \"toggle_status\", \"reset_password\"], \"build\": [\"view\", \"create\", \"edit\", \"delete\", \"execute\", \"view_log\"], \"project\": [\"view\", \"create\", \"edit\", \"delete\"], \"release\": [\"view\", \"create\", \"edit\", \"delete\", \"approve\", \"execute\", \"rollback\"], \"build_task\": [\"view\", \"create\", \"edit\", \"delete\", \"execute\", \"view_log\", \"disable\"], \"credential\": [\"view\", \"create\", \"edit\", \"delete\"], \"logs_login\": [\"view\"], \"environment\": [\"view\", \"create\", \"edit\", \"delete\"], \"notification\": [\"view\", \"create\", \"edit\", \"delete\", \"test\"], \"system_basic\": [\"view\", \"edit\", \"create\", \"delete\", \"test\"], \"build_history\": [\"view\", \"view_log\", \"rollback\"], \"build_approval\": [\"view\", \"request\", \"approve\"], \"logs_operation\": [\"view\"]}}', '2025-03-27 14:45:04.779759', '2025-06-09 16:04:40.782374', '9bfef5a1ee1d4054be9727934ad112es');
INSERT INTO `role` (`id`, `role_id`, `name`, `description`, `permissions`, `create_time`, `update_time`, `creator_id`) VALUES (2, '5575cfdc75dd4f8e9c5441359478314e', '开发人员', '开发人员,负责编写代码和构建', '{\"data\": {\"operations\": [\"view\"], \"project_ids\": [], \"project_scope\": \"custom\", \"environment_scope\": \"custom\", \"environment_types\": []}, \"menu\": [], \"function\": {\"build\": [], \"project\": [], \"release\": [\"view\", \"create\", \"edit\"], \"build_task\": [], \"credential\": [], \"environment\": [], \"notification\": [], \"build_history\": []}}', '2025-03-27 14:45:04.783696', '2025-04-17 09:42:38.079772', '9bfef5a1ee1d4054be9727934ad112es');
INSERT INTO `role` (`id`, `role_id`, `name`, `description`, `permissions`, `create_time`, `update_time`, `creator_id`) VALUES (3, 'ea78a0379d7d45559c4db69e38f07cd3', '测试人员', '测试人员,负责测试和验证', '{\"data\": {\"operations\": [\"view\"], \"project_ids\": [], \"project_scope\": \"custom\", \"environment_scope\": \"custom\", \"environment_types\": []}, \"menu\": [], \"function\": {\"build\": [\"view\", \"view_log\"], \"project\": [], \"release\": [\"view\", \"approve\"], \"build_history\": []}}', '2025-03-27 14:45:04.785872', '2025-04-17 09:43:16.944919', '9bfef5a1ee1d4054be9727934ad112es');
INSERT INTO `role` (`id`, `role_id`, `name`, `description`, `permissions`, `create_time`, `update_time`, `creator_id`) VALUES (4, '3aac992b37e441abbeb2c67a0c79f01f', '运维人员', '运维人员,负责部署和运维', '{\"data\": {\"operations\": [\"view\"], \"project_ids\": [], \"project_scope\": \"custom\", \"environment_scope\": \"custom\", \"environment_types\": []}, \"menu\": [], \"function\": {\"build\": [\"view\", \"execute\", \"view_log\"], \"project\": [], \"release\": [\"view\", \"approve\", \"execute\", \"rollback\"], \"environment\": [], \"notification\": [], \"build_history\": []}}', '2025-03-27 14:45:04.787850', '2025-04-17 09:44:08.530007', '9bfef5a1ee1d4054be9727934ad112es');
-- 插入用户角色关联数据
INSERT INTO `user_role` (`id`, `create_time`, `update_time`, `role_id`, `user_id`) VALUES (1, '2025-03-27 14:45:11.269249', '2025-03-27 14:45:11.269261', '333ec25423e04a4e96b4bb238de51cc3', '9bfef5a1ee1d4054be9727934ad112es');
SET FOREIGN_KEY_CHECKS = 1;

78
nginx.conf Normal file
View File

@@ -0,0 +1,78 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# 开启gzip
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
# 前端静态文件
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
# SSE日志流特殊配置 - 完全禁用缓冲
location /api/build/logs/stream/ {
proxy_pass http://localhost:8900/api/build/logs/stream/;
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_set_header X-Forwarded-Proto $scheme;
# 完全禁用缓冲
proxy_buffering off;
proxy_cache off;
proxy_request_buffering off;
# SSE专用头部
proxy_set_header Connection '';
proxy_set_header Cache-Control 'no-cache, no-store, must-revalidate';
proxy_set_header Pragma 'no-cache';
proxy_set_header Expires '0';
# 超时设置
proxy_read_timeout 24h;
proxy_connect_timeout 5s;
proxy_send_timeout 24h;
# HTTP版本和传输编码
proxy_http_version 1.1;
chunked_transfer_encoding off;
# 添加CORS头
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, OPTIONS';
add_header Access-Control-Allow-Headers 'Cache-Control, Authorization';
}
# API请求代理到后端服务
location /api/ {
proxy_pass http://localhost:8900/api/;
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_set_header X-Forwarded-Proto $scheme;
# 一般API的缓冲配置
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 60s;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_http_version 1.1;
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

View File

@@ -39,6 +39,53 @@ print_step() {
echo -e "\n${PURPLE}=== $1 ===${NC}"
}
# 等待MySQL就绪的函数
wait_for_mysql() {
local max_attempts=30
local attempt=1
print_info "等待MySQL服务完全启动..."
while [ $attempt -le $max_attempts ]; do
if docker exec $MYSQL_CONTAINER mysqladmin ping -uroot -p$MYSQL_PASSWORD --silent >/dev/null 2>&1; then
print_success "MySQL服务已就绪 (尝试次数: $attempt)"
return 0
fi
print_info "MySQL还未就绪等待中... (尝试 $attempt/$max_attempts)"
sleep 2
attempt=$((attempt + 1))
done
print_error "MySQL在 $((max_attempts * 2)) 秒内未能就绪"
return 1
}
# 导入SQL文件的函数
import_sql_with_retry() {
local max_attempts=3
local attempt=1
while [ $attempt -le $max_attempts ]; do
print_info "尝试导入初始化数据 (尝试 $attempt/$max_attempts)..."
if docker exec -i $MYSQL_CONTAINER mysql -uroot -p$MYSQL_PASSWORD liteops < liteops_init.sql; then
print_success "初始化数据导入成功"
return 0
else
print_warning "初始化数据导入失败,尝试 $attempt/$max_attempts"
if [ $attempt -lt $max_attempts ]; then
print_info "等待5秒后重试..."
sleep 5
fi
attempt=$((attempt + 1))
fi
done
print_error "初始化数据导入失败,已尝试 $max_attempts"
return 1
}
# 创建Docker网络如果不存在
print_step "创建Docker网络"
if ! docker network inspect $NETWORK_NAME >/dev/null 2>&1; then
@@ -56,17 +103,6 @@ docker stop $CONTAINER_NAME $MYSQL_CONTAINER 2>/dev/null || true
docker rm $CONTAINER_NAME $MYSQL_CONTAINER 2>/dev/null || true
print_success "容器清理完成"
# 构建镜像
print_step "构建应用镜像"
print_info "构建LiteOps镜像..."
# 确保前端已经构建
if [ ! -d "web/dist" ]; then
print_error "前端dist目录不存在请先运行 npm run build"
exit 1
fi
docker build --platform linux/amd64 -t $CONTAINER_IMAGE .
print_success "镜像构建成功: $CONTAINER_IMAGE"
# 启动MySQL容器
print_step "启动MySQL容器"
print_info "启动MySQL $MYSQL_VERSION 容器..."
@@ -78,14 +114,18 @@ docker run -d \
-e MYSQL_DATABASE=liteops \
mysql:$MYSQL_VERSION
# 等待MySQL启动
print_info "等待MySQL启动..."
sleep 10
# 等待MySQL完全就绪
if ! wait_for_mysql; then
print_error "MySQL启动失败退出部署"
exit 1
fi
# 初始化数据库
print_step "初始化数据库"
print_info "导入初始数据..."
docker exec -i $MYSQL_CONTAINER mysql -uroot -p$MYSQL_PASSWORD liteops < liteops_init.sql
if ! import_sql_with_retry; then
print_error "数据库初始化失败,退出部署"
exit 1
fi
print_success "数据库初始化完成"
# 启动应用容器