一文入门 Docker Compose
LINUX DO - 热门话题 (RSS)


本文同步发布在我的博客之中:一文入门 Docker Compose - Lynn的小站



前言

借助 Docker,您可将容器当做轻巧、模块化的虚拟机来使用。同时,您还将获得高度灵活性,实现对容器的高效创建、部署及复制,并在环境之间迁移它们,从而有助于您针对云来优化应用。

——《什么是 Docker?》



Docker Compose is a tool for running multi-container applications on Docker defined using the Compose file format. A Compose file is used to define how one or more containers that make up your application are configured. Once you have a Compose file, you can create and start your application with a single command: docker compose up

——《Docker Compose 官方介绍》


简单来说,Docker可以让我们把一个项目的所有依赖环境配置好,我们可以快速的运行起来,而无需处理环境的依赖问题;

而某个项目需要用到诸如数据库、Redis等其他项目的时候,使用Docker Compose可以将所有的项目和项目依赖通过一个yml完全配置好,我们只需要通过一行命令就可以快速启动这个项目。


Compose 使用的三个步骤:

— 使用 Dockerfile 定义应用程序的环境。
— 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
— 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

——《Docker Compose - 菜鸟教程》


安装 Docker Compose
这部分,我们在这里仅介绍Linux的安装步骤,Windows和MacOS已经在Docker Desktop之中内置了Docker Compose的功能,如果你有其他特殊的需求,也可以参考官方文档。

基本上来说,只需要这两条命令即可:

sudo curl -L "https://github.com/docker/compose/releases/download/<版本号>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

如果你使用的是Ubuntu系统,那么安装的步骤则会变得更为简单:

sudo apt install docker-compose

在安装完成后,我们可以通过下面的命令检查是否安装成功

docker-compose --version

配置文件
接下来,我们聊聊配置文件,也就是Docker Compose的核心部分,在这里我们设计了两个服务,一种为源文件构造,另一种是拉取现有的镜像部署。

# docker-compose.yml
version: "3.9"

services: # 定义服务
web: # Web 应用
build: ./app # 使用 ./app 目录下的 Dockerfile 构建镜像
command: flask run --host=0.0.0.0 --port=5000 # 启动 Flask 应用
ports:
- "8000:5000" # 本机8000端口映射到容器5000端口
environment:
# 数据库连接URL,这里通过服务名 db 连接 Postgres
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
depends_on:
db:
condition: service_healthy # 等待数据库健康检查通过再启动

db: # 数据库服务(PostgreSQL)
image: postgres:16 # 使用官方 Postgres 16 镜像
restart: unless-stopped # 意外退出时自动重启
environment:
POSTGRES_USER: postgres # 数据库用户名
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # 从 .env 文件读取密码
POSTGRES_DB: ${POSTGRES_DB} # 默认数据库名
volumes:
- db_data:/var/lib/postgresql/data # 数据持久化,保存到数据卷 db_data 之中
healthcheck: # 健康检查,保证数据库可用
test: ["CMD-SHELL", "pg_isready -U postgres -d ${POSTGRES_DB}"]
interval: 5s
timeout: 3s
retries: 10

volumes: # 定义数据卷
db_data: # PostgreSQL 的数据卷

Service - Web服务(从源文件构造)
我们以Web服务为例,这里我们设计了一个Python Flask项目作为示例:

web: # Web 应用服务(Flask 示例)
build: ./app # 使用 ./app 目录下的 Dockerfile 构建镜像
command: flask run --host=0.0.0.0 --port=5000 # 启动 Flask 应用
ports:
- "8000:5000" # 本机8000端口映射到容器5000端口
environment:
# 数据库连接URL,这里通过服务名 db 连接 Postgres
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
depends_on:
db:
condition: service_healthy # 等待数据库健康检查通过再启动


build:指定构建镜像的目录(./app 里需要有 Dockerfile)。
command:覆盖容器启动命令,这里用flask启动了一个允许所有IP访问的,端口为5000的服务端。


注意:这里应该允许所有IP访问(0.0.0.0),而不是只允许本地访问(127.0.0.1),否则会导致无法从外部连接到容器。



ports:端口映射,本机 8000 → 容器 5000。
env_file:从 .env 文件读取环境变量。
environment:额外定义的环境变量,在这里我们设置了数据库地址。
depends_on:表示依赖关系,这里web服务要等到db服务通过了健康检查,才会启动。

Services - db服务(拉取现有的镜像)

db: # 数据库服务(PostgreSQL)
image: postgres:16 # 使用官方 Postgres 16 镜像
restart: unless-stopped # 意外退出时自动重启
environment:
POSTGRES_USER: postgres # 数据库用户名
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # 从 .env 文件读取密码
POSTGRES_DB: ${POSTGRES_DB} # 默认数据库名
volumes:
- db_data:/var/lib/postgresql/data # 数据持久化,保存到卷 db_data
healthcheck: # 健康检查,保证数据库可用
test: ["CMD-SHELL", "pg_isready -U postgres -d ${POSTGRES_DB}"]
interval: 5s
timeout: 3s
retries: 10


image:使用构建好的镜像。这里我们固定了版本为16,如果使用latest可能会导致新旧版本的兼容性导致问题。
restart:容器异常退出后会自动重启。
environment:POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB 仅在第一次初始化数据目录时生效。之后数据由卷持久化,再改这些变量不会重置已有库。
volumes:用 命名卷(db_data)作为文件的存储,后面说映射到容器内的存储目录。
healthcheck

CMD-SHELL:表示这条命令会在容器的 shell 里执行(相当于 bash -c)。
pg_isready:这是 PostgreSQL 自带的一个小工具,用来检测数据库是否可以连接。
-U postgres:指定用 postgres 这个用户去检测。
-d ${POSTGRES_DB}:指定要检测的数据库名字(这里我们使用的是变量,会从 .env 文件读取同名的环境变量值)。

数据卷
在 Docker Compose 中,数据卷的定义通常放在最底部的 volumes...

View original post 一文入门 Docker Compose
分享一个vibe coding 复杂项目开发的Prompt

最近在开发自己的app,项目变得比较打了之后发现vibe coding之后,很难做到指哪打哪,经常会改错东西。研究了很久,发现需要一个索引/词表/地图/词典之类的东西,能够帮助ai理解,“帮我改下头像框”究竟指的是要改什么东西。 对于不能完全掌握代码的散修coder来说,应该是很有用的
```
# 通用代码项目功能映射生成器

## 🎯 目标
为任意代码项目生成一份**AI可理解的功能索引**,让用户能够:
- 用自然语言描述想修改的功能
- AI能快速定位到具体的代码文件和位置
- 实现"指哪打哪"的精确代码修改

## 📋 核心任务
扫描项目代码,识别所有**用户可感知的功能点**,并建立**自然语言到代码位置**的映射关系。

## 🔍 分析要点

### 识别标准
1. **界面元素**: 按钮、表单、菜单、弹窗等
2. **交互行为**: 点击、拖拽、输入、导航等
3. **数据展示**: 列表、图表、卡片、详情等
4. **业务流程**: 登录、支付、搜索、上传等

### AI友好的描述原则
- 使用**用户视角**的自然语言
- 避免技术术语,多用功能性描述
- 包含**视觉特征**和**交互方式**
- 提供**多种表达方式**的关键词

## 📊 输出格式

```markdown
# 📂 [项目名称] 功能-代码映射报告

## 🏗️ 项目概览
- **技术栈**: [主要框架] + [其他重要依赖]
- **架构模式**: [识别的架构模式,如 MVC, Component-based, Feature-based 等]
- **状态管理**: [使用的状态管理方案,如 Redux, Context, Vuex 等]
- **样式方案**: [CSS Modules/Styled-components/Tailwind/SCSS 等]
- **构建工具**: [Webpack, Vite, Create React App 等]
- **包管理**: [npm, yarn, pnpm]

## 📊 功能模块统计
- **页面级组件**: X 个 [主要页面/路由]
- **可复用组件**: Y 个 [通用UI组件]
- **业务逻辑模块**: Z 个 [Hooks/Services/Utils]
- **样式文件**: W 个 [CSS/SCSS/样式模块]
- **配置文件**: N 个 [路由/环境/构建配置]

## 🗂️ 目录结构概览
```
[项目根目录]/
├── [主要源码目录]/
│   ├── [页面目录]/
│   ├── [组件目录]/
│   ├── [样式目录]/
│   └── [工具目录]/
├── [资源目录]/
└── [配置文件]
```

---

## 🎯 功能映射表

### [功能类别] - [功能名称]

**🔤 用户描述方式**:
- 主要: "[用户会怎么描述这个功能]"
- 别名: "[其他可能的叫法]", "[相关词汇]"

**📍 代码位置**:
- 主文件: `[文件路径]` - [作用说明]
- 样式: `[样式文件路径]` (如果有)
- 逻辑: `[业务逻辑文件]` (如果分离)

**🎨 视觉标识**:
- 外观: [颜色/形状/位置等描述]
- 文本: "[界面上的关键文字]"

**⚡ 修改指引**:
- 修改外观: 编辑 `[具体文件和行数/区域]`
- 修改行为: 编辑 `[具体文件和函数名]`
- 修改文本: 编辑 `[具体位置]`

---
```

## 📝 示例模板

```markdown
### 界面元素 - 用户头像

**🔤 用户描述方式**:
- 主要: "用户头像", "个人头像", "用户图片"
- 别名: "头像框", "用户照片", "个人图标", "profile picture"

**📍 代码位置**:
- 主文件: `src/components/UserAvatar.jsx` - 头像组件定义
- 样式: `src/components/UserAvatar.css` - 头像圆形边框和大小
- 默认图片: `public/images/default-avatar.png`

**🎨 视觉标识**:
- 外观: 圆形图片,通常在右上角或用户信息区域
- 文本: 无文本,但可能有用户名在旁边

**⚡ 修改指引**:
- 修改头像大小: 编辑 `UserAvatar.css` 中的 `width/height`
- 修改默认头像: 替换 `public/images/default-avatar.png`
- 修改点击行为: 编辑 `UserAvatar.jsx` 中的 `onClick` 函数

---

### 交互功能 - 商品收藏

**🔤 用户描述方式**:
- 主要: "收藏商品", "添加到收藏夹", "收藏按钮"
- 别名: "点赞", "喜欢", "心形按钮", "收藏功能", "favorite"

**📍 代码位置**:
- 主文件: `src/components/FavoriteButton.jsx` - 收藏按钮组件
- 业务逻辑: `src/services/favoriteService.js` - 收藏相关API调用
- 状态管理: `src/store/userStore.js` - 收藏列表状态

**🎨 视觉标识**:
- 外观: 心形图标,未收藏时为空心,已收藏时为红色实心
- 位置: 通常在商品卡片右上角或商品详情页

**⚡ 修改指引**:
- 修改图标样式: 编辑 `FavoriteButton.jsx` 中的图标组件
- 修改收藏逻辑: 编辑 `favoriteService.js` 中的收藏方法
- 修改收藏状态: 编辑 `userStore.js` 中的收藏数据结构

---
```

## 🚀 使用说明

### 对于用户
当你想修改某个功能时,只需告诉AI:
- "我想修改登录按钮的颜色"
- "搜索框的位置需要调整"
- "商品评分的星星太小了"

### 对于AI
收到用户需求后:
1. 在映射表中搜索相关的"用户描述方式"
2. 定位到对应的"代码位置"
3. 根据"修改指引"提供具体的修改方案

## 🎯 生成指令

请分析提供的项目代码,按照上述格式生成功能映射表。重点关注:

1. **完整性**: 覆盖所有用户可见的功能
2. **准确性**: 确保代码位置和修改指引正确
3. **自然性**: 用户描述要贴近真实表达习惯
4. **实用性**: AI能够直接根据映射表定位和修改代码

现在请开始分析我的项目代码,生成这份AI友好的功能映射表。

14 posts - 13 participants

Read full topic

via LINUX DO - 热门话题 (author: fakepan)
【PowerShell 全自动】[Google Gemini AI ONE ] 全自动12月学生认证一键脚本

效果:

----------------------

使用方法:

1. 使用Powershell ISE 直接修改代码:

需要填写的部分:
[string]$ProxyUrl = "http://127.0.0.1:7892",
[string]$verificationId = "689c",

可选:
$birthDate = "2000-10-02"

1. 命令行传入参数执行

可用的参数:

1. 指定自定义logo文件(除非你想用自己的):
   .\google.ps1 -verificationId "custom_id" -logoPath "university_logo.png"

2. 使用系统代理:
   .\google.ps1 -verificationId "custom_id" -UseSystemProxy

4. 使用指定的HTTP代理:
   .\google.ps1 -verificationId "custom_id" -ProxyUrl "http://127.0.0.1:7890"

5. 完整参数示例:
   .\google.ps1 -verificationId "custom_id" -logoPath "mit_logo.png" -ProxyUrl "http://127.0.0.1:7890"

注意:Logo文件必须存在,否则脚本会报错退出

一般情况下,只设置verificationId和你的代理ProxyUrl即可

----------------------

提示:

请保持logo.png和google.ps1在同一个文件夹,如果报错请先管理员权限下运行:
Set-ExecutionPolicy RemoteSigned

另外请自查ipqs,建议使用azure,
代码里面的生日为什么是固定的?
自己修改就行了
verificationId 从 SheerID URL 中的参数中获取:
https://services.sheerid.com/verify/67c8c14f5f17a83b745e3f82/?verificationId=689c96eexxxxxxxx

----------------------

下载:

Gemini.zip (78.7 KB)

----------------------

代码如果过了之后订阅没生效,按 @xjw 的方法修改

【PowerShell 全自动】[Google Gemini AI ONE ] 全自动12月学生认证一键脚本 福利羊毛
发现实际验证和ID和自己填写的verificationId不一样唉 导致验证完后 跳转到one会发现没有优惠 手动在代码394行 定义 $actualVerificationId = $verificationId 正常通过 页面也有优惠了 想问一下 $actualVerificationId 这个值的意义? thinking

242 posts - 167 participants

Read full topic

via LINUX DO - 热门话题 (author: 存档账号)

Invalid media: image
魔搭免费api接口支持Anthropic API可直接用于claude code附教程

今天看到这个消息

测试支持Anthropic API了 于是去试了下能不能直接支持claudecode 发现可以用
直接改环境变量的这几个
“ANTHROPIC_API_KEY”: “你自己的key注意去掉前面的ms-”,
“ANTHROPIC_BASE_URL”: “https://api-inference.modelscope.cn”,
“ANTHROPIC_MODEL”: “Qwen/Qwen3-Coder-480B-A35B-Instruct”,
“ANTHROPIC_SMALL_FAST_MODEL”: “Qwen/Qwen3-Coder-480B-A35B-Instruct”
我直接默认用的qwen3code 可以换成里面能用的别的模型

也可以用glm4.5,总共每天免费2000次 qwen3code是500限制
直接改配置文件这样

Windows 平台:notepad C:\Users\你的用户名.claude\settings.json
Linux/Mac 平台:vim ~/.claude/settings.json
复制粘贴以下内容:
{
“env”: {
“ANTHROPIC_API_KEY”: “你自己的key注意去掉前面的ms-”,
“ANTHROPIC_BASE_URL”: “https://api-inference.modelscope.cn”,
“ANTHROPIC_MODEL”: “Qwen/Qwen3-Coder-480B-A35B-Instruct”,
“ANTHROPIC_SMALL_FAST_MODEL”: “Qwen/Qwen3-Coder-480B-A35B-Instruct”
},
“permissions”: {
“allow”: ,
“deny”:
}
}

26 posts - 15 participants

Read full topic

via LINUX DO - 热门话题 (author: 麒白掌)

Invalid media:
image
image
正在使用lobe-chat的佬们注意了!lobe-chat正在泄漏你的隐私!
LINUX DO - 热门话题 (RSS)

太长不看版本:

当你使用lobe-chat-database进行MCP工具调用之后, lobe-chat团队和cloudflare就会知道该工具调用的细节。

存在严重隐私泄漏、跨境数据传输等安全风险,请各位佬友谨慎使用该软件。

lobe-chat我觉得算是一个优秀的ai对话工具,特别是在MCP集成方面。

项目开发者也在本站: 个人资料 - Arvin_Xu - LINUX DO

但最近碰到的一件事却让我不寒而栗。

我通过lobehub/lobe-chat-database - Docker Image | Docker Hub 这个镜像部署了本地数据库版(v1.112.0),连接了内网的数据库,AI使用的MCP服务器也是部署在内网的(由我自己开发)。理论上,我和AI的对话记录只有我内网有记录(以及AI的服务供应商)。

但我最近在使用AI调用MCP服务器时, 发现lobe-chat在MCP服务器返回结果后,还需要loading很长的时间(可能要几十秒)才能发起下一次AI请求。经过排查,主要是受该接口影响: /trpc/lambda/market.reportCall,message.update?batch=1, 短则几秒、多则几十秒。

让AI帮我分析lobe-chat代码后, 我发现lobe-chat在这个接口里将MCP调用数据上报到了env.MARKET_BASE_URL



但我的lobe-chat-database实例内没有MARKET_BASE_URL这个环境变量,那么数据去哪了呢?

通过查看DNS解析记录/网络抓包后,我发现lobe-chat将数据传到了https://market.lobehub.com,托管在cloudflare上(怪不得速度忽快忽慢!)。但这个域名,在lobe-chat的官方代码仓库(lobehub/lobe-chat)里是没有的,这又是怎么回事呢?

通过排查lobe-chat-database容器实例,我发现这个域名记录在容器内的js文件中:...

View original post
手把手教程利用gemini-cli操控你的浏览器!附实用场景总结L站帖子
LINUX DO - 热门话题 (RSS)






应佬友 @Darthvader 邀请,分享一下可以通过大模型操控自己的浏览器的开源MCP项目,跟着我一步步操作吧!我个人常用场景是总结L站的帖子,试图快速理清佬友们讨论的重点hh。

一、安装mcp-chrome

github.com

GitHub - hangwin/mcp-chrome: Chrome MCP Server is a Chrome extension-based...

Chrome MCP Server is a Chrome extension-based Model Context Protocol (MCP) server that exposes your Chrome browser functionality to AI assistants like Claude, enabling complex browser automation, content analysis, and semantic search.

1、全局安装mcp-chrome-bridge...

View original post
#影视 #电影
😞 飞流视频 新兴的在线影视播放平台

亮点😝
😍高清播放体验优秀,支持多清晰度切换

😍片源丰富,涵盖电影、电视剧、动漫、综艺全品类

😍界面简洁,操作直观,新手友好

😍更新速度快,热门内容同步及时

😍适合人群:全类型影视观众,尤其是追求操作简便的用户


🥰 https://www.flixflop.com/
🗣️ 豆包Ai实战营从小白到高手速成

🏷️ #资源 #AI

👉 https://www.ahhhhfs.com/74706/
Open Lovable 是一个开源的 AI 驱动网页应用构建工具,能够将任意网站 URL 转换成一个可编辑的 React 克隆版本,极大加速 MVP 和产品验证过程。核心亮点包括:

• 基于 Groq、E2B 和 Firecrawl 的高性能技术栈,兼顾速度与智能
• 支持即时可视化编辑,直接修改 DOM 元素,代码与设计实时同步
• 通过拖拽新增、移动 div 容器,TailwindCSS 样式可视调整,Figma 风格 UI 体验
• 可从现有 GitHub 仓库或 Figma 设计导入,快速启动项目或迭代设计
• 开源且社区活跃,已在 vercel 等平台部署演示,便于开发者贡献与扩展
• 适用于快速生成产品原型、设计验证及团队协作,降低前端开发门槛

目前仍处于积极开发阶段,欢迎开发者参与改进。
deck:用 Markdown 高效驱动 Google Slides 幻灯片制作的利器
• 基于“内容与设计分离”理念,Markdown 负责内容创作,Google Slides 专注视觉呈现
• 支持持续迭代构建,实时同步修改,配合 --watch 参数实现边写边看,显著提升制作效率
• 完整支持 Google Slides API 与 Drive API,兼容个人与共享云盘,管理演示文稿更灵活
• YAML Frontmatter 灵活配置演示ID、标题、换行、代码块转图片命令等,满足多样化定制需求
• 自动识别 Markdown 结构,智能匹配幻灯片布局(标题、副标题、正文占位符),减少重复操作
• 支持 GitHub Flavored Markdown 语法,包括表格、粗体、斜体、代码、引用及内嵌 HTML 标签
• 代码块可通过自定义命令转为图片,方便展示复杂代码或图表(如 Mermaid、文本转图等)
• 页配置可嵌入 JSON 注释,实现布局、跳过、冻结、忽略等细粒度控制,提升演示灵活性
• 多账号/环境支持,profile 模式下管理多个身份,适应不同项目或组织需求
• 结合 AI agent 协作,可实现更高效的 Markdown 格式幻灯片创作,推动内容与设计的深度融合

deck 让幻灯片制作回归内容本质,兼顾灵活定制与自动化,适合研发、教学、产品等多场景的专业演示需求。
Back to Top