dev : 合并提交 #41
							
								
								
									
										219
									
								
								.gitea/workflows/deploy.master.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								.gitea/workflows/deploy.master.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,219 @@ | ||||
| name: CI/CD Pipeline | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - master  # 触发构建的分支 | ||||
| 
 | ||||
| env: | ||||
|   # ========== 环境变量配置 ========== | ||||
|   DOCKER_REGISTRY_URL: ${{vars.DOCKER_REGISTRY_URL}}          # 私有Docker镜像仓库地址 | ||||
|   INTERNAL_DOCKER_REGISTRY_URL: ${{vars.INTERNAL_DOCKER_REGISTRY_URL}} | ||||
|   PROJECT_NAME: llmx            # 项目名称 | ||||
|   MAIN_COMPOSE_FILE: docker/docker-compose.master.main.yml | ||||
|   AGENT_COMPOSE_FILE: docker/docker-compose.master.agent.yml | ||||
|   SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}  # 仓库密码 | ||||
|   JCNC_GITEA_URL: ${{vars.SERVER_GITEA_URL}} # Gitea地址 | ||||
|   RUNNER_TOOL_CACHE: /opt/tools-cache       # 工具缓存目录 | ||||
|   GRADLE_CACHE_KEY: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||
|   SPRING_PROFILES_ACTIVE: master | ||||
|   INTERNAL_SERVER_HOST: ${{ vars.INTERNAL_SERVER_HOST }} | ||||
|   INTERNAL_SERVER_PROT: ${{ vars.INTERNAL_SERVER_PROT }} | ||||
|   SINGAPORE_SERVER_HOST: ${{ vars.SINGAPORE_SERVER_HOST }} | ||||
|   SSH_PROT: ${{ vars.SSH_PROT }} | ||||
| jobs: | ||||
|   build-and-deploy: | ||||
|     runs-on: ubuntu-latest | ||||
|     container: | ||||
|       image: jcnc/act-runner:latest         # 使用自定义Runner镜像 | ||||
|       options: --user root                  # 以root用户运行(需要docker权限) | ||||
| 
 | ||||
|     steps: | ||||
|       # ========== 1. 代码检出 ========== | ||||
|       - name: 🛒 Checkout source code | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/actions/checkout@v4 | ||||
|         with: | ||||
|           fetch-depth: 0                    # 获取完整git历史(某些插件需要) | ||||
| 
 | ||||
|       # ========== 2. Docker环境准备 ========== | ||||
|       - name: 🐳 Install Docker Environment | ||||
|         run: | | ||||
|           echo "=== 检查Docker安装状态 ===" | ||||
|           if ! command -v docker >/dev/null; then | ||||
|             echo "❌ Docker未安装,开始安装..." | ||||
|             curl -fsSL https://get.docker.com | sh | tee docker-install.log | ||||
|             echo "✅ Docker安装完成" | ||||
|             echo "✅ Docker Compose安装完成" | ||||
|           else | ||||
|             echo "ℹ️ Docker已安装,版本: $(docker -v)" | ||||
|             echo "ℹ️ Docker Compose已安装,版本: $(docker compose version)" | ||||
|           fi | ||||
| 
 | ||||
|       # ========== 3. Gradle环境准备 ========== | ||||
|       - name: 🔧 Prepare Gradle Environment | ||||
|         run: | | ||||
|           echo "赋予gradlew执行权限..." | ||||
|           chmod +x gradlew | ||||
|           echo "当前目录结构:" | ||||
|           ls -al | ||||
|       # ========== 4. 恢复缓存 ========== | ||||
|       - name: 📦 Use Cache | ||||
|         id: cache | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/actions/cache/restore@v4 | ||||
|         with: | ||||
|           path: | | ||||
|             ~/.gradle/caches | ||||
|             ~/.gradle/wrapper | ||||
|             ~/.cache | ||||
|           key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||
|           restore-keys: | | ||||
|             ${{ runner.os }}-gradle- | ||||
|             ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||
|         env: | ||||
|           ACTIONS_RUNNER_DEBUG: true       # 启用缓存调试输出 | ||||
| 
 | ||||
|       - name: ⚙️ Setup Gradle | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/gradle/actions/setup-gradle@v4 | ||||
|         with: | ||||
|           gradle-version: wrapper           # 使用项目自带的gradle-wrapper | ||||
|       - name: 📦 Copy Compose File to Internal Server | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/appleboy/scp-action@v1 | ||||
|         with: | ||||
|           host: ${{ env.INTERNAL_SERVER_HOST }} | ||||
|           port: $INTERNAL_SERVER_PROT | ||||
|           username: root | ||||
|           password: ${{ secrets.INTERNAL_SERVER_PASSWORD }} | ||||
|           source: $MAIN_COMPOSE_FILE | ||||
|           target: "/home/luke/deploy/llmx/docker-compose.master.yml" | ||||
|       - name: 📦 Copy Compose File to Singapore Server | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/appleboy/scp-action@v1 | ||||
|         with: | ||||
|           host: $SINGAPORE_SERVER_HOST | ||||
|           port: $SSH_PROT | ||||
|           username: root | ||||
|           password: ${{ secrets.SINGAPORE_SERVER_PASSWORD }} | ||||
|           source: $AGENT_COMPOSE_FILE | ||||
|           target: "/home/deploy/llmx/docker-compose.master.yml" | ||||
|       # ========== 5. 构建阶段 ========== | ||||
|       - name: 🏗️ Build with Jib | ||||
|         run: | | ||||
|           echo "开始构建Docker镜像..." | ||||
|           ./gradlew jib --stacktrace --build-cache --info -Dorg.gradle.caching=true -Dorg.gradle.jvmargs="-Xmx2g -Xms2g -XX:MaxMetaspaceSize=1g" | tee build.log | ||||
|            | ||||
|           echo "=== 镜像构建结果 ===" | ||||
|           docker images | grep ${{ env.PROJECT_NAME }} || true | ||||
|       - name: 🛑 Stop Gradle Daemon | ||||
|         run: | | ||||
|           echo "停止Gradle守护进程..." | ||||
|           ./gradlew --stop | ||||
|           echo "剩余Java进程:" | ||||
|           ps aux | grep java || true | ||||
|       - name: 🛰️ Tag & Push to Internal Registry | ||||
|         run: | | ||||
|           echo "标记并推送镜像到内部服务器..." | ||||
|           docker tag ${{env.DOCKER_REGISTRY_URL}}/llmx-core-service:latest ${{env.INTERNAL_DOCKER_REGISTRY_URL}}/llmx-core-service:latest | ||||
|           docker tag ${{env.DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest ${{env.INTERNAL_DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest | ||||
|            | ||||
|           echo "${{ secrets.INTERNAL_DOCKER_REGISTRY_PASSWORD }}" | docker login ${{env.INTERNAL_DOCKER_REGISTRY_URL}} -u root --password-stdin | ||||
|           docker push ${{env.INTERNAL_DOCKER_REGISTRY_URL}}/llmx-core-service:latest | ||||
|           docker push ${{env.INTERNAL_DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest | ||||
|           docker logout ${{env.INTERNAL_DOCKER_REGISTRY_URL}} | ||||
|       - name: 🛰️ Tag & Push to Singapore Registry | ||||
|         run: | | ||||
|           echo "标记并推送镜像到内部服务器..." | ||||
|           docker tag ${{env.DOCKER_REGISTRY_URL}}/llmx-core-service:latest ${{env.SINGAPORE_DOCKER_REGISTRY_URL}}/llmx-core-service:latest | ||||
|           docker tag ${{env.DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest ${{env.SINGAPORE_DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest | ||||
| 
 | ||||
|           echo "${{ secrets.INTERNAL_DOCKER_REGISTRY_PASSWORD }}" | docker login ${{env.SINGAPORE_DOCKER_REGISTRY_URL}} -u root --password-stdin | ||||
|           docker push ${{env.SINGAPORE_DOCKER_REGISTRY_URL}}/llmx-core-service:latest | ||||
|           docker push ${{env.SINGAPORE_DOCKER_REGISTRY_URL}}/llmx-impl-bailian:latest | ||||
|           docker logout ${{env.SINGAPORE_DOCKER_REGISTRY_URL}} | ||||
|       # ========== 6. 保存缓存 ========== | ||||
|       - name: 📦 Save Cache | ||||
|         id: cache | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/actions/cache/save@v4 | ||||
|         with: | ||||
|           path: | | ||||
|             ~/.gradle/caches | ||||
|             ~/.gradle/wrapper | ||||
|             ~/.cache | ||||
|           key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||
|           restore-keys: | | ||||
|             ${{ runner.os }}-gradle- | ||||
|             ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | ||||
|         env: | ||||
|           ACTIONS_RUNNER_DEBUG: true       # 启用缓存调试输出 | ||||
|       - name: 🧼 Cleanup Dangling Images | ||||
|         run: | | ||||
|           echo "开始清理无标签镜像..." | ||||
|           docker image prune -f | ||||
|   remote-internal-deploy: | ||||
|     needs: build-and-deploy | ||||
|     runs-on: ubuntu-latest | ||||
|     container: | ||||
|       image: jcnc/act-runner:latest         # 使用自定义Runner镜像 | ||||
|       options: --user root                  # 以root用户运行(需要docker权限) | ||||
|     steps: | ||||
|       - name: ✈️ Deploy on Internal Server | ||||
|         uses: ${{env.JCNC_GITEA_URL}}/appleboy/ssh-action@v1 | ||||
|         with: | ||||
|           host: $INTERNAL_SERVER_HOST | ||||
|           port: $INTERNAL_SERVER_PROT | ||||
|           username: root | ||||
|           password: ${{ secrets.INTERNAL_SERVER_PASSWORD }} | ||||
|           script: | | ||||
|             cd /home/luke/deploy/llmx | ||||
|             echo "准备部署环境..." | ||||
|             chmod +x docker-compose.master.yml | ||||
|             echo "当前Docker状态:" | ||||
|             docker ps -a | ||||
|             echo "清理旧容器..." | ||||
|             docker compose -f docker-compose.master.yml down --remove-orphans | ||||
|             echo "清理后Docker状态:" | ||||
|             docker ps -a | ||||
|             echo "拉取最新镜像..." | ||||
|             docker compose -f docker-compose.master.yml pull | ||||
|             echo "启动新服务..." | ||||
|             docker compose -f docker-compose.master.yml up -d | ||||
|             docker compose ps | ||||
|             echo "=== 服务状态检查 ===" | ||||
|             docker compose -f docker-compose.master.yml ps | ||||
|             echo "开始清理无标签镜像..." | ||||
|             docker image prune -f | ||||
|             echo "清理docker-compose.master.yml" | ||||
|             rm -rf docker-compose.master.yml | ||||
|   remote-singapore-deploy: | ||||
|   needs: build-and-deploy | ||||
|   runs-on: ubuntu-latest | ||||
|   container: | ||||
|     image: jcnc/act-runner:latest         # 使用自定义Runner镜像 | ||||
|     options: --user root                  # 以root用户运行(需要docker权限) | ||||
|   steps: | ||||
|     - name: ✈️ Deploy on Internal Server | ||||
|       uses: ${{env.JCNC_GITEA_URL}}/appleboy/ssh-action@v1 | ||||
|       with: | ||||
|         host: $SINGAPORE_SERVER_HOST | ||||
|         port: $SSH_PROT | ||||
|         username: root | ||||
|         password: ${{ secrets.SINGAPORE_SERVER_PASSWORD }} | ||||
|         script: | | ||||
|           cd /home/deploy/llmx | ||||
|           echo "准备部署环境..." | ||||
|           chmod +x docker-compose.master.yml | ||||
|           echo "当前Docker状态:" | ||||
|           docker ps -a | ||||
|           echo "清理旧容器..." | ||||
|           docker compose -f docker-compose.master.yml down --remove-orphans | ||||
|           echo "清理后Docker状态:" | ||||
|           docker ps -a | ||||
|           echo "拉取最新镜像..." | ||||
|           docker compose -f docker-compose.master.yml pull | ||||
|           echo "启动新服务..." | ||||
|           docker compose -f docker-compose.master.yml up -d | ||||
|           docker compose ps | ||||
|           echo "=== 服务状态检查 ===" | ||||
|           docker compose -f docker-compose.master.yml ps | ||||
|           echo "开始清理无标签镜像..." | ||||
|           docker image prune -f | ||||
|           echo "清理docker-compose.master.yml" | ||||
|           rm -rf docker-compose.master.yml | ||||
							
								
								
									
										32
									
								
								docker/docker-compose.master.agent.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								docker/docker-compose.master.agent.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| services: | ||||
|   llmx-core-service-banana: | ||||
|     image: ${DOCKER_REGISTRY_URL}/llmx-core-service | ||||
|     container_name: llmx-core-service | ||||
|     ports: | ||||
|       - "9002:9002" | ||||
|     networks: | ||||
|       - llmx-net-master | ||||
|     environment: | ||||
|       SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} | ||||
|     volumes: | ||||
|       - llmx-core-service-volume:/app/volume | ||||
|     restart: always | ||||
|   llmx-impl-bailian-banana: | ||||
|     image: ${DOCKER_REGISTRY_URL}/llmx-impl-bailian | ||||
|     container_name: llmx-impl-bailian | ||||
|     ports: | ||||
|       - "9003:9003" | ||||
|     networks: | ||||
|      - llmx-net-master | ||||
|     environment: | ||||
|       SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} | ||||
|     volumes: | ||||
|       - llmx-impl-bailian-volume:/app/volume | ||||
|     restart: always | ||||
| 
 | ||||
| networks: | ||||
|   llmx-net-master: | ||||
|     driver: bridge | ||||
| volumes: | ||||
|   llmx-core-service-volume: | ||||
|   llmx-impl-bailian-volume: | ||||
							
								
								
									
										48
									
								
								docker/docker-compose.master.main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								docker/docker-compose.master.main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| services: | ||||
|   llmx-core-service-apple: | ||||
|     image: ${DOCKER_REGISTRY_URL}/llmx-core-service | ||||
|     container_name: llmx-core-service | ||||
|     ports: | ||||
|       - "9002:9002" | ||||
|     networks: | ||||
|       - llmx-net-master | ||||
|     environment: | ||||
|       SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} | ||||
|     volumes: | ||||
|       - llmx-core-service-volume:/app/volume | ||||
|     restart: always | ||||
|   llmx-database: | ||||
|     image: postgres:16-alpine  # 长期支持版本推荐用 16 | ||||
|     container_name: llmx-database | ||||
|     restart: always | ||||
|     ports: | ||||
|       - "9052:5432" | ||||
|     networks: | ||||
|       - llmx-net-master | ||||
|     environment: | ||||
|       POSTGRES_DB: llmx_db | ||||
|       POSTGRES_USER: llmx | ||||
|       POSTGRES_PASSWORD: L4s6f9y3, | ||||
|     volumes: | ||||
|       - llmx-db-volume | ||||
|   llmx-impl-bailian-apple: | ||||
|     image: ${DOCKER_REGISTRY_URL}/llmx-impl-bailian | ||||
|     container_name: llmx-impl-bailian | ||||
|     ports: | ||||
|       - "9003:9003" | ||||
|     networks: | ||||
|      - llmx-net-master | ||||
|     environment: | ||||
|       SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE} | ||||
|     volumes: | ||||
|       - llmx-impl-bailian-volume:/app/volume | ||||
|     restart: always | ||||
| 
 | ||||
| networks: | ||||
|   llmx-net-master: | ||||
|     driver: bridge | ||||
| 
 | ||||
| volumes: | ||||
|   llmx-core-service-volume: | ||||
|   llmx-impl-bailian-volume: | ||||
|   llmx-db-volume: | ||||
| @ -1,7 +1,2 @@ | ||||
| server: | ||||
|   port: 9002 | ||||
| spring: | ||||
|   cloud: | ||||
|     nacos: | ||||
|       discovery: | ||||
|         server-addr: 49.235.96.75:9001 | ||||
|   port: 9002 | ||||
| @ -0,0 +1,23 @@ | ||||
| spring: | ||||
|   cloud: | ||||
|     nacos: | ||||
|       username: nacos | ||||
|       password: L4s6f9y3, | ||||
|       server-addr: 49.235.96.75:8848 | ||||
|       discovery: | ||||
|         server-addr: ${spring.cloud.nacos.server-addr} | ||||
|         username: ${spring.cloud.nacos.username} | ||||
|         password: ${spring.cloud.nacos.password} | ||||
|         group: llmx-${spring.profiles.active} | ||||
|         namespace: ab34d859-6f1a-4f28-ac6b-27a7410ab27b | ||||
|       config: | ||||
|         file-extension: yaml | ||||
|         namespace: ab34d859-6f1a-4f28-ac6b-27a7410ab27b | ||||
|         refresh-enabled: true | ||||
|         extension-configs: | ||||
|           - data-id: ${spring.application.name}-${spring.profiles.active}.yaml | ||||
|             refresh: true | ||||
|             group: ${spring.application.name} | ||||
|           - data-id: common-db.yaml | ||||
|             refresh: true | ||||
|             group: infra | ||||
| @ -1,22 +1,2 @@ | ||||
| server: | ||||
|   port: 9003 | ||||
| spring: | ||||
|   application: | ||||
|     name: llmx-impl-bailian | ||||
|   cloud: | ||||
|     nacos: | ||||
|       discovery: | ||||
|         server-addr: 49.235.96.75:9001  # Nacos 服务地址 | ||||
| # 阿里云配置 | ||||
| aliyun: | ||||
|   # DashScope服务配置 | ||||
|   dash: | ||||
|     # 访问凭证配置 | ||||
|     scope: | ||||
|       access-key-id: LTAI5tHiA2Ry3XTAfoSEJW6z  # 阿里云访问密钥ID | ||||
|       access-key-secret: K5sf4FxZZuUgLEFnyfepBfMqFGmDcD  # 阿里云访问密钥密钥 | ||||
|       endpoint: bailian.cn-beijing.aliyuncs.com  # 阿里云服务端点 | ||||
|       workspace-id: llm-axfkuqft05uzbjpi  # 工作区ID | ||||
|       api-key: sk-78af4dd964a94f4cb373851064dbdc12  # API密钥 | ||||
|       app-id: 3fae0bbab2e54a90a37aa02cd12dd62c  # 应用ID | ||||
|       base-url: https://dashscope.aliyuncs.com/api/v1/apps/  # 基础API URL | ||||
|   port: 9003 | ||||
| @ -0,0 +1,20 @@ | ||||
| spring: | ||||
|   cloud: | ||||
|     nacos: | ||||
|       username: nacos | ||||
|       password: L4s6f9y3, | ||||
|       server-addr: 49.235.96.75:8848 | ||||
|       discovery: | ||||
|         username: ${spring.cloud.nacos.username} | ||||
|         password: ${spring.cloud.nacos.password} | ||||
|         server-addr: ${spring.cloud.nacos.server-addr} | ||||
|         group: llmx-${spring.profiles.active} | ||||
|         namespace: ab34d859-6f1a-4f28-ac6b-27a7410ab27b | ||||
|       config: | ||||
|         file-extension: yaml | ||||
|         namespace: ab34d859-6f1a-4f28-ac6b-27a7410ab27b | ||||
|         refresh-enabled: true | ||||
|         extension-configs: | ||||
|           - data-id: ${spring.application.name}-${spring.profiles.active}.yaml | ||||
|             refresh: true | ||||
|             group: ${spring.application.name} | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user