From 0ead154dc9c50484322aa93feb05eaad185c8a9d Mon Sep 17 00:00:00 2001 From: jxw Date: Thu, 22 Oct 2026 15:39:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99MySQ?= =?UTF-8?q?L=E5=AE=B9=E5=99=A8=EF=BC=8C=E6=94=B9=E7=94=A81Panel=E5=B7=B2?= =?UTF-8?q?=E6=9C=89MySQL(172.17.0.1:3306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/application.yml | 4 +- docker-compose.yml | 33 +------- mysql/init.sql | 88 ---------------------- 3 files changed, 4 insertions(+), 121 deletions(-) delete mode 100644 mysql/init.sql diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 4909d90..116c15a 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -5,9 +5,9 @@ spring: application: name: my-blog-backend datasource: - url: jdbc:mysql://${DB_HOST:mysql}:${DB_PORT:3306}/${DB_NAME:my_blog}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + url: jdbc:mysql://${DB_HOST:172.17.0.1}:${DB_PORT:3306}/${DB_NAME:my_blog}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true username: ${DB_USER:root} - password: ${DB_PASSWORD:root123456} + password: ${DB_PASSWORD:123456} driver-class-name: com.mysql.cj.jdbc.Driver hikari: connection-timeout: 30000 diff --git a/docker-compose.yml b/docker-compose.yml index 286d844..48b57bf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,42 +1,16 @@ version: '3.8' services: - mysql: - image: mysql:8.0 - container_name: blog-mysql - restart: always - environment: - MYSQL_ROOT_PASSWORD: root123456 - MYSQL_DATABASE: my_blog - TZ: Asia/Shanghai - command: - - --default-authentication-plugin=mysql_native_password - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - ports: - - "3307:3306" - volumes: - - mysql_data:/var/lib/mysql - - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot123456"] - interval: 5s - timeout: 5s - retries: 10 - backend: build: ./backend container_name: blog-backend restart: always - depends_on: - mysql: - condition: service_healthy environment: - DB_HOST: mysql + DB_HOST: 172.17.0.1 DB_PORT: 3306 DB_NAME: my_blog DB_USER: root - DB_PASSWORD: root123456 + DB_PASSWORD: "123456" TZ: Asia/Shanghai ports: - "8089:8080" @@ -49,6 +23,3 @@ services: - backend ports: - "8088:80" - -volumes: - mysql_data: diff --git a/mysql/init.sql b/mysql/init.sql deleted file mode 100644 index 823764d..0000000 --- a/mysql/init.sql +++ /dev/null @@ -1,88 +0,0 @@ --- 创建数据库 -CREATE DATABASE IF NOT EXISTS `my_blog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -USE `my_blog`; - --- 1. 分类表 -CREATE TABLE IF NOT EXISTS `category` ( - `id` BIGINT AUTO_INCREMENT PRIMARY KEY, - `name` VARCHAR(50) NOT NULL UNIQUE, - `description` VARCHAR(255), - `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 2. 文章表 -CREATE TABLE IF NOT EXISTS `post` ( - `id` BIGINT AUTO_INCREMENT PRIMARY KEY, - `title` VARCHAR(255) NOT NULL, - `summary` VARCHAR(500), - `content` LONGTEXT NOT NULL, - `author` VARCHAR(50) DEFAULT '旺总', - `category_name` VARCHAR(50) DEFAULT '技术杂谈', - `tags` VARCHAR(255), - `read_time` VARCHAR(20) DEFAULT '3 min', - `views` INT DEFAULT 0, - `likes` INT DEFAULT 0, - `status` VARCHAR(20) DEFAULT 'PUBLISHED', - `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, - `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 3. 评论表 -CREATE TABLE IF NOT EXISTS `comment` ( - `id` BIGINT AUTO_INCREMENT PRIMARY KEY, - `post_id` BIGINT NOT NULL, - `author` VARCHAR(50) NOT NULL, - `content` TEXT NOT NULL, - `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, - INDEX `idx_post_id` (`post_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- 插入默认分类 -INSERT IGNORE INTO `category` (`name`, `description`) VALUES -('云原生 & Linux', '容器化编排、GCP/云服务器运维、系统调优与网络配置实战'), -('Java & Spring Boot', 'Spring Boot 3 微服务架构、JPA 数据库持久化与后端工程规范'), -('AI & 本地模型', 'Ollama 本地大模型部署、DeepSeek R1 性能压测与应用集成'), -('全栈开发 & CI/CD', '前后端分离架构、Gitea Actions 自动化流水线交付'); - --- 插入预置精品文章 -INSERT INTO `post` (`title`, `summary`, `content`, `author`, `category_name`, `tags`, `read_time`, `views`, `likes`, `created_at`) -SELECT - '云原生实践:在 Google Cloud 台湾节点搭建高性能 Ubuntu 与 1Panel', - '本文记录了如何通过 GCP 赠金在亚洲低延迟机房部署 4核16G 高性能云服务器,并使用现代化容器面板 1Panel 进行运维管理实录。', - '# 云原生实践:在 Google Cloud 台湾节点搭建高性能服务器\n\n在挑选云服务器的过程中,综合对比了各大厂商的免费策略与性能表现,最终选择了 **Google Cloud 台湾节点 (`asia-east1`)**。\n\n## 核心硬件与网络配置\n- **规格**:`e2-standard-4`(4 vCPU,16 GB 内存)\n- **系统**:Ubuntu 22.04 LTS (x86_64)\n- **延迟**:到中国大陆仅 30~50ms,操作极为丝滑。\n\n## 为什么采用 1Panel 面板?\n相比传统臃肿的面料,1Panel 深度拥抱 **Docker 容器化**,所有应用(MySQL、OpenResty、Gitea)完全容器隔离,真正做到“环境随用随建,数据挂载持久化”。\n\n```bash\n# 快速检查 Docker 运行状态\ndocker ps --format "table {{.Names}}\\t{{.Status}}\\t{{.Ports}}"\n```\n\n> 💡 **运维心得**:永远在云平台控制台统一放行防火墙端口,切勿盲目在系统内部启用 UFW,避免失联风险。', - '旺总', - '云原生 & Linux', - 'GCP,Ubuntu,1Panel,Linux', - '4 min', - 648, - 52, - NOW() -WHERE NOT EXISTS (SELECT 1 FROM `post` WHERE `title` = '云原生实践:在 Google Cloud 台湾节点搭建高性能 Ubuntu 与 1Panel'); - -INSERT INTO `post` (`title`, `summary`, `content`, `author`, `category_name`, `tags`, `read_time`, `views`, `likes`, `created_at`) -SELECT - '探索本地大模型:从 Ollama 运行 DeepSeek R1 到 CPU 推理性能调优', - '深度解析在纯 CPU 服务器上运行 DeepSeek R1 和通义千问 2.5 的真实表现,揭开 2050 Token 预填充延迟背后的机制。', - '# 探索本地大模型:从 Ollama 到 Open WebUI 性能调优实战\n\n近期 DeepSeek R1 推理思考模型火遍全球,我们在 4核16G 的服务器上进行了本地大模型的全链路压测。\n\n## 1. 架构搭建\n- **模型发动机**:`Ollama` 容器\n- **交互界面**:`Open WebUI` 容器\n- **网络通信**:通过 Docker 网关 `http://172.17.0.1:11434` 极速直连\n\n## 2. 性能排查与调优秘籍\n测试过程中遇到了“每次提问卡顿 50 秒”的问题,经过 `top` 分析和指标剖析:\n1. **解除容器 CPU 配额**:确保 4 线程全开(`eval rate` 提升至 14 tokens/s);\n2. **内存永久常驻**:注入 `OLLAMA_KEEP_ALIVE=-1`,避免 5 分钟超时后重新读盘;\n3. **清空全局默认 Prompt**:消除了默认附带的 2050 历史 Token,读题耗时从 60s 骤降至 0.2s!\n\n```bash\n# 测试模型运行性能\ndocker exec -it 1Panel-ollama-nzre ollama run qwen2.5:1.5b --verbose\n```\n\n> 纯 CPU 跑 7B 参数是物理带宽瓶颈,日常开发推荐搭配 1.5B~3B 模型,速度与逻辑达到最佳平衡!', - '旺总', - 'AI & 本地模型', - 'DeepSeek,Ollama,OpenWebUI,性能调优', - '6 min', - 982, - 88, - NOW() -WHERE NOT EXISTS (SELECT 1 FROM `post` WHERE `title` = '探索本地大模型:从 Ollama 运行 DeepSeek R1 到 CPU 推理性能调优'); - -INSERT INTO `post` (`title`, `summary`, `content`, `author`, `category_name`, `tags`, `read_time`, `views`, `likes`, `created_at`) -SELECT - '全栈工程师实战:Spring Boot 3 + MySQL 8.0 持久化与 Gitea CI/CD 自动化交付', - '从零构建工业级 Spring Boot 3 分层架构,结合 MySQL 8.0 数据库持久化存储与私有 Gitea Actions 自动化流水线。', - '# 全栈工程化实践:Spring Boot 3 + MySQL 8.0 + CI/CD 自动化\n\n现代化开发的精髓在于**“把数据交给专业数据库持久化,把重复劳动交给自动化流水线”**。\n\n## 全栈架构一览\n```text\n[开发者本地 IDEA] ──git push──▶ [私有 Gitea 仓库]\n │\n (Gitea Actions 触发流水线)\n ▼\n [Docker Compose 全栈构建]\n │\n ┌───────────────────────────┼───────────────────────────┐\n ▼ ▼ ▼\n [MySQL 8.0 容器] [Spring Boot 3 容器] [Nginx 静态反代容器]\n```\n\n## 数据持久化规范\n- 数据文件挂载至命名卷 `mysql_data`,容器重启或重建数据零丢失;\n- Spring Data JPA 实现对象关系映射,自动完成数据库结构维护;\n- 统一 RESTful API 与响应封装,全栈开发得心应手!', - '旺总', - '全栈开发 & CI/CD', - 'Spring Boot,MySQL,JPA,CI/CD', - '5 min', - 756, - 64, - NOW() -WHERE NOT EXISTS (SELECT 1 FROM `post` WHERE `title` = '全栈工程师实战:Spring Boot 3 + MySQL 8.0 持久化与 Gitea CI/CD 自动化交付');