diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9cddbd --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +logs/ + +application-prod.yml +application-staging.yml + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..ade5a0d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,49 @@ +# 定义CI/CD流水线的阶段 +stages: + - build # 第一阶段:构建应用程序 + - build-docker # 第二阶段:构建Docker镜像 + - deploy # 第三阶段:部署应用程序 + +# 定义全局变量 +variables: + CONTAINER_NAME: "bunny-auth-server" # Docker容器名称 + DOCKER_TAG: "4.0.0" # Docker镜像标签版本 + +# 构建任务 +build-job: + stage: build # 指定此任务属于build阶段 + script: + # 打印编译开始信息 + - echo "Compiling the code..." + # 使用Maven编译Java项目,跳过测试 + - mvn clean package -DskipTests + # 打印编译完成信息 + - echo "Compile complete." + # 从Docker Hub拉取OpenJDK基础镜像 + - docker pull openjdk:24-ea-17-jdk-oraclelinux9 + # 打印拉取完成信息 + - echo "docker pull complete." + # 使用Dockerfile构建Docker镜像,并打上标签 + - docker build -f Dockerfile -t $CONTAINER_NAME:$DOCKER_TAG . + # 打印构建成功信息 + - echo "Application successfully deployed." + +# 部署任务 +deploy-job: + stage: deploy # 指定此任务属于deploy阶段 + environment: production # 指定部署环境为production + script: + # 打印部署开始信息 + - echo "Deploying application..." + # 停止正在运行的容器(如果存在),|| true确保命令失败不会中断脚本 + - docker stop $CONTAINER_NAME || true + # 删除容器(如果存在) + - docker rm $CONTAINER_NAME || true + # 运行新的Docker容器 + # -d: 后台运行 + # -p: 端口映射(7070和8000) + # --name: 容器名称 + # --restart always: 总是自动重启 + - docker run -d -p 7070:7070 -p 8000:8000 --name $CONTAINER_NAME --restart always $CONTAINER_NAME:$DOCKER_TAG + # 打印部署成功信息 + - echo "Application successfully deployed." \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b2ce05d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM openjdk:24-ea-17-jdk-oraclelinux9 +LABEL maintainer="server" + +#系统编码 +ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 + +# 设置时区,构建镜像时执行的命令 +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo "Asia/Shanghai" > /etc/timezone + +# 设定工作目录 +WORKDIR /home/server + +# 复制jar包 +COPY target/*.jar /home/server/app.jar + +# 程序内部挂在目录 +VOLUME /usr/bin/docker +VOLUME ["/var/run/docker.sock"] +VOLUME /etc/docker/daemon.json +VOLUME ["/www/root/backup"] +VOLUME ["/www/root/server"] + +# 启动容器时的进程 +ENTRYPOINT ["java","-jar","/home/server/app.jar"] + +#暴露 8000 端口 +EXPOSE 8000 +EXPOSE 7070 + +# 生产环境 +# mvn clean package -Pprod -DskipTests +# mvn clean package -Pdev -DskipTests + +# 测试环境 +# mvn clean package -Ptest -DskipTests + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e796427 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Bunny + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..816dc6d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,68 @@ +name: auth-compose # 定义该配置的名称为 auth-dependence +services: # 定义服务列表 + + # 安装MySQL + mysql: # 定义 MySQL 服务 + container_name: mysql_master # 容器名称为 mysql_master + image: mysql:8.0.33 # 使用 MySQL 8.0.33 版本的镜像 + ports: + - "3306:3306" # 将宿主机的 3306 端口映射到容器的 3306 端口 + environment: + - MYSQL_ROOT_PASSWORD=123456 # 设置 MySQL 的 root 用户密码为 123456 + - TZ=Asia/Shanghai # 设置时区为亚洲/上海 + volumes: + # - ~/docker/docker_data/mysql/mysql_master/etc/my.cnf:/etc/my.cnf # 如果需要创建配置文件 + - ~/docker/docker_data/mysql/mysql_master/etc/mysql:/etc/mysql/conf.d # 挂载 MySQL 配置文件目录 + - ~/docker/docker_data/mysql/mysql_master/data:/var/lib/mysql # 挂载 MySQL 数据目录 + - ~/docker/docker_data/mysql/mysql_master/backup:/backup # 挂载备份目录 + command: + - "--log-bin=mysql-bin" # 启用二进制日志 + - "--server-id=1" # 设置服务器 ID 为 1 + - "--collation-server=utf8mb4_unicode_ci" # 设置默认的排序规则为 utf8mb4_unicode_ci + - "--character-set-server=utf8mb4" # 设置默认的字符集为 utf8mb4 + - "--lower-case-table-names=1" # 设置表名存储为小写 + restart: always # 设置容器总是自动重启 + privileged: true # 赋予容器特权模式 + networks: + - auth # 将 MySQL 服务加入到 auth 网络 + + # 安装Redis + redis: # 定义 Redis 服务 + container_name: redis_master # 容器名称为 redis_master + image: redis:7.0.10 # 使用 Redis 7.0.10 版本的镜像 + ports: + - "6379:6379" # 将宿主机的 6379 端口映射到容器的 6379 端口 + volumes: + # - ~/docker/docker_data/redis_master/redis.conf:/etc/redis/redis.conf # 需要创建配置文件 + - ~/docker/docker_data/redis_master:/etc/redis # 挂载 Redis 配置文件目录 + - ~/docker/docker_data/redis_master/data:/data # 挂载 Redis 数据目录 + command: + - "--appendonly yes" # 启用 AOF 持久化 + - "--daemonize no" # 不以守护进程方式运行 + - "--requirepass 123456" # 设置 Redis 访问密码为 123456 + - "--tcp-keepalive 300" # 设置 TCP keepalive 时间为 300 秒 + restart: always # 设置容器总是自动重启 + networks: + - auth # 将 MySQL 服务加入到 auth 网络 + + # 安装 Minio + minio: # 定义 Minio 服务 + image: minio/minio # 使用 Minio 官方镜像 + container_name: minio_master # 容器名称为 minio_master + ports: + - "9000:9000" # 将宿主机的 9000 端口映射到容器的 9000 端口 + - "9090:9090" # 将宿主机的 9090 端口映射到容器的 9090 端口 + volumes: + - ~/docker/docker_data/minio/data:/data # 挂载 Minio 数据目录 + environment: + - MINIO_ROOT_USER=bunny # 设置 Minio 的 root 用户名为 bunny + - MINIO_ROOT_PASSWORD=12345678 # 设置 Minio 的 root 用户密码为 123456 + command: "server /data --console-address :9090" # 启动 Minio 服务并指定控制台地址 + restart: always # 设置容器总是自动重启 + networks: + - auth # 将 MySQL 服务加入到 auth 网络 + +networks: # 定义网络 + auth: # 定义名为 auth 的网络 + name: auth # 网络名称为 auth + driver: bridge # 使用 bridge 驱动(默认) \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6f05ac7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,194 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.13 + + + + com.auth + auth-server + 0.0.1 + pom + auth-admin + auth-admin + + + auth-common + auth-module + auth-services + auth-services + auth-dao + + + + UTF-8 + 17 + 17 + 17 + 3.8.1 + 3.5.6 + 9.2.0 + 4.5.0 + 2.0.47 + 8.5.17 + 1.18.32 + 0.12.6 + 4.0.2 + 2.10.1 + 1.9.21 + 6.1.0 + 2.2 + 3.1 + 6.2.1 + 4.3.1 + 2.19.0 + 2.3.2 + + + + + + + junit + junit + ${junit.version} + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + org.apache.velocity.tools + velocity-tools-generic + ${velocity-tools.version} + + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + com.mysql + mysql-connector-j + ${mysql.version} + + + + com.zaxxer + HikariCP + ${HikariCP.version} + + + + com.baomidou + dynamic-datasource-spring-boot3-starter + ${dynamic.datasource.version} + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + ${knife4j.version} + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson2.version} + + + + io.minio + minio + ${minio.version} + + + + org.projectlombok + lombok + ${lombok.version} + + + + cn.hutool + hutool-all + 5.8.27 + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + com.alibaba + easyexcel + ${easyexcel.version} + + + + org.aspectj + aspectjrt + ${aspectj} + + + + org.aspectj + aspectjweaver + ${aspectj} + + + joda-time + joda-time + ${jodatime.version} + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson-dataType.version} + + + + org.quartz-scheduler + quartz + ${quartz-scheduler.version} + + + + + + + + dev + + dev + + + true + + + + + test + + test + + + + + prod + + prod + + + + diff --git a/push.sh b/push.sh new file mode 100644 index 0000000..7b9a8ff --- /dev/null +++ b/push.sh @@ -0,0 +1,5 @@ +git checkout master +git merge dev +git push --all +git push --tags +git checkout dev