惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
D
Docker
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
U
Unit 42

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
Bitbucket Mirror 方案 - 少数派
2025-09-16 · via 少数派

核心方案:云上主实例 + VPN + 本地镜像

最佳实践方案是:在阿里云上部署 Bitbucket Data Center 主实例,并使用 VPN 网关 (VPN Gateway) 将阿里云的 VPC (虚拟私有云) 与上海、成都的办公室网络打通,形成一个安全的混合云网络。Mirror 实例部署在各自的办公室机房内,通过这个安全的 VPN 通道与主实例进行同步。


方案概述

云端 (阿里云 - 主实例):

  • 计算: 使用一台或多台 ECS 服务器运行 Bitbucket Data Center 容器。
  • 数据库: 使用 阿里云 RDS for PostgreSQL 作为主数据库,实现高可用和自动备份。
  • 共享存储: 使用 阿里云 NAS (NFS) 作为 Bitbucket 的共享主目录 (shared home),这是 Data Center 模式的必要条件。
  • 网络: 将以上资源全部放在一个 VPC 内。

网络连接 (关键):

  • 使用 阿里云 VPN 网关 服务。
  • 在上海和成都的办公室分别部署 VPN 设备(可以是物理防火墙或软件 VPN),与阿里云的 VPN 网关建立 IPSec-VPN 隧道。
  • 这样,云上的 VPC 和两个办公室的内网就好像在一个大的局域网内,所有通信都通过加密隧道进行,无需暴露在公网上。

本地 (上海/成都 - 镜像实例):

  • 在各自机房的服务器上,使用 Docker Compose 部署 Bitbucket Mirror 实例及其本地 PostgreSQL 数据库。
  • 由于网络已经通过 VPN 打通,Mirror 实例可以直接通过主实例的 内网 IP 进行访问和同步。

详细部署方案

1. 云端 (Data Center) 部署 - 阿里云

资源准备:

  • 一台配置合适的 ECS (例如:4核16G)。
  • 一个 RDS for PostgreSQL 实例。
  • 一个 NAS (NFS) 文件系统。
  • 一个 VPN 网关。

部署步骤:

挂载 NAS: 在 ECS 服务器上,将 NAS 文件系统挂载到一个本地目录,例如 /mnt/bitbucket-shared

# (在ECS上执行)
sudo mkdir -p /mnt/bitbucket-shared
# 根据阿里云提供的挂载命令进行挂载
sudo mount -t nfs -o vers=4.0 ... /mnt/bitbucket-shared
# 设置开机自动挂载 (写入 /etc/fstab)

创建 docker-compose.yml (在 ECS 上)
这个配置文件将不会包含数据库服务,因为它会连接到外部的 RDS。

# /path/to/your/bitbucket-dc/docker-compose.yml
version: '3.8'

services:
  bitbucket-datacenter:
    image: atlassian/bitbucket-server:8.16
    container_name: bitbucket-dc
    restart: unless-stopped
    ports:
      - "7990:7990" # Web UI
      - "7999:7999" # Git over SSH
    environment:
      # --- 许可证 ---
      - BITBUCKET_LICENSE=your_bitbucket_license_key
      # --- 数据库 (连接到 RDS) ---
      - JDBC_DRIVER=org.postgresql.Driver
      - JDBC_URL=jdbc:postgresql://<your-rds-endpoint>:5432/<your-db-name> # <--- 替换为 RDS 信息
      - JDBC_USER=<your-rds-user>
      - JDBC_PASSWORD=<your-rds-password>
      # --- 集群和基础 URL ---
      - BITBUCKET_HOME=/var/atlassian/application-data/bitbucket
      # 关键: 使用 ECS 的内网 IP,因为通信走 VPN
      - BITBUCKET_PROXY_NAME=<ecs-private-ip-address> # <--- 替换为 ECS 的内网 IP
      - BITBUCKET_PROXY_PORT=7990
      - BITBUCKET_PROXY_SCHEME=http
    volumes:
      # 关键: 将挂载的 NAS 目录映射到容器的 shared 目录
      - /mnt/bitbucket-shared:/var/atlassian/application-data/bitbucket/shared

2. 公司内部 (Mirror) 部署 - 多地区

在上海和成都的服务器上,部署流程是相似的,只是 BITBUCKET_PROXY_NAME 不同。

以上海为例:

# /path/to/your/bitbucket-mirror-sh/docker-compose.yml
version: '3.8'

services:
  bitbucket-mirror:
    image: atlassian/bitbucket-server:8.16
    container_name: bitbucket-mirror-sh
    # ... (ports, license, etc. 与之前的 Mirror 示例相同)
    environment:
      # ... (JDBC, License等)
      # 关键: 使用上海办公室服务器的内网 IP
      - BITBUCKET_PROXY_NAME=<shanghai-server-private-ip> # <--- 替换为上海服务器的内网 IP
      - BITBUCKET_PROXY_PORT=7991 # 规划的端口
      - BITBUCKET_PROXY_SCHEME=http
    # ... (其他配置,包括本地数据库服务)

配置连接:
当你在上海的 Mirror (http://<shanghai-server-private-ip>:7991) 设置向导中连接主实例时,你将输入主实例的内网地址http://<ecs-private-ip-address>:7990。因为 VPN 已经打通,这个地址是可以直接访问的。

3. 网络连接方案对比

这是决策的核心,我们来详细对比几种方案。

方案优点 (Pros)缺点 (Cons)推荐度
方案 A: VPN 隧道 (推荐)高安全性:所有流量都在加密隧道中,不暴露于公网。
网络简化:云和本地像在同一局域网,配置简单。
稳定可靠:比公网连接更稳定。
成本:需要支付阿里云 VPN 网关费用和流量费。
初始设置复杂:需要网络工程师配置 VPN。
★★★★★
方案 B: 公网暴露 + IP白名单低成本:无需额外网络服务费用。
设置快速:只需在防火墙/安全组中添加规则。
低安全性:端口暴露在公网,持续面临扫描和攻击风险。
管理复杂:IP 地址变更时需要更新所有白名单。
性能不稳定:公网链路质量无法保证。
★★☆☆☆
方案 C: 专线 (Express Connect)极致性能和安全:物理专线,延迟最低,带宽有保障,最安全。成本极高:费用远高于 VPN,且有初装费和月租。
部署周期长:需要与运营商协调,耗时数周或数月。
★☆☆☆☆ (除非公司已有专线)

结论:对于绝大多数企业,VPN 是在安全性、成本和性能之间取得最佳平衡的方案


整体优缺点分析

优点 (Advantages)

  1. 本地团队高性能访问: 上海和成都的开发人员直接访问本地 Mirror (git clone / git pull),速度极快,不受跨地域网络延迟影响,极大提升开发体验。
  2. 集中化管理与高可用: 主实例位于云端,可以利用云服务(如 RDS, NAS)轻松实现高可用、自动备份和弹性伸缩,运维压力小。
  3. 数据安全: 通过 VPN,核心的 Git 数据同步过程不经过公共互联网,有效防止数据泄露和中间人攻击。
  4. 灾备能力: 即使某个办公室的网络中断,其他办公室和云端主实例仍然可以正常工作。Mirror 本身也是一种数据备份形式。

缺点 (Disadvantages)

  1. 网络依赖性: Mirror 的同步完全依赖于办公室到阿里云的 VPN 连接质量。如果 VPN 中断,Mirror 的数据将停止更新(但本地的只读访问不受影响)。
  2. 运维复杂性: 相比单一实例,混合云部署需要管理云端资源、本地资源以及两者之间的网络连接,对运维团队的技术能力要求更高。
  3. 成本增加: 除了 Bitbucket 许可证,还需要支付 ECS、RDS、NAS、VPN 网关以及网络流量的费用。
  4. 一致性延迟: Mirror 的数据与主实例之间存在分钟级的同步延迟。对于需要绝对实时数据一致性的 CI/CD 流程,需要评估是否能接受这个延迟(通常可以接受)。

关键步骤总结

  1. 规划:确定所有服务器的 IP 地址、端口,并规划网络拓扑。
  2. 云端:在阿里云上创建 VPC、ECS、RDS、NAS,并配置好安全组。
  3. 网络:配置阿里云 VPN 网关,并与上海、成都办公室的 VPN 设备建立隧道。
  4. 部署:分别在云端 ECS 和本地服务器上使用 Docker Compose 部署 Bitbucket。
  5. 配置:先完成主实例的安装,然后通过 VPN 内网地址配置两个 Mirror 实例,并选择要同步的项目。
  6. 验证:从本地办公室尝试克隆 Mirror 上的仓库,确认速度和可用性。

这个方案虽然初始设置较为复杂,但一旦建成,将为一个地理位置分散的团队提供一个既健壮又高效的代码协作平台。