Blog
10 tháng 3, 2026-23 luot xem
Cài đặt Bitbucket Server với MySQL bằng Docker Compose

Cài đặt Bitbucket Server với MySQL bằng Docker Compose

Hướng dẫn từng bước triển khai Bitbucket Server 8.14 kết nối MySQL 5.7 trên môi trường local bằng Docker Compose - bao gồm cấu hình JDBC driver, MySQL tuning theo yêu cầu của Atlassian, và các lỗi thường gặp.

Nguyễn Đỗ Cao Sơn

Nguyễn Đỗ Cao Sơn

Cài đặt Bitbucket Server với MySQL bằng Docker Compose

Bitbucket Server mặc định dùng H2 (database nội bộ), nhưng trong môi trường thực tế bạn sẽ cần kết nối với một database bên ngoài - phổ biến nhất là MySQL hoặc PostgreSQL. Bài viết này hướng dẫn triển khai Bitbucket Server 8.14 kết nối MySQL 5.7 hoàn toàn bằng Docker Compose trên Ubuntu.


Yêu cầu hệ thống

Thành phần Yêu cầu tối thiểu
RAM 4 GiB khả dụng
Disk 10 GB trống
CPU 2 cores
Docker 20.x+
Docker Compose v2.x+ (plugin docker compose)

Cấu trúc thư mục

Trước khi bắt đầu, tạo cấu trúc thư mục như sau:

mkdir -p docker/bitbucket docker/mysql data/bitbucket data/mysql
bitbucket_mysql/
├── docker-compose.yml
├── docker/
│   ├── bitbucket/
│   │   └── mysql-connector-j-8.0.33.jar   # JDBC driver (sẽ tải ở bước sau)
│   └── mysql/
│       └── my.cnf                          # Cấu hình MySQL
└── data/
    ├── bitbucket/                          # Dữ liệu Bitbucket (persistent)
    └── mysql/                              # Dữ liệu MySQL (persistent)

Bước 1 - Tải MySQL JDBC Driver

Bitbucket Docker image không bao gồm MySQL JDBC driver, bạn phải tự cung cấp và mount vào container.

Sử dụng MySQL Connector/J 8.0.33 - tương thích với cả MySQL 5.7 và 8.0:

cd docker/bitbucket

wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar

Xác nhận file đã tải đúng (~2.4 MB):

ls -lh mysql-connector-j-8.0.33.jar

Lưu ý quan trọng: File JAR phải được mount vào đúng đường dẫn /opt/atlassian/bitbucket/app/WEB-INF/lib/ bên trong container.
Nếu mount vào /opt/atlassian/bitbucket/lib/ sẽ gặp lỗi Failed to load driver class com.mysql.cj.jdbc.Driver.


Bước 2 - Tạo file cấu hình MySQL

Tạo file docker/mysql/my.cnf với các tham số bắt buộc theo yêu cầu của Atlassian:

[mysqld]
# Character set
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci

# InnoDB
default-storage-engine    = InnoDB
innodb_default_row_format = DYNAMIC
innodb_large_prefix       = ON
innodb_file_format        = Barracuda
innodb_log_file_size      = 256M
innodb_file_per_table     = 1

# Connection
max_allowed_packet = 256M
max_connections    = 150

# Bắt buộc cho Bitbucket
transaction-isolation = READ-COMMITTED

log_bin_trust_function_creators = 1
default-time-zone = '+00:00'

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

Trong đó, hai tham số quan trọng nhất:

  • transaction-isolation = READ-COMMITTED - bắt buộc, Bitbucket sẽ từ chối khởi động nếu thiếu.
  • character-set-server = utf8mb4 - hỗ trợ đầy đủ Unicode (bao gồm emoji trong commit message).

Bước 3 - Tạo file docker-compose.yml

version: "3.8"

services:
  mysql:
    image: mysql:5.7
    container_name: bitbucket-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: bitbucket
      MYSQL_USER: bitbucket
      MYSQL_PASSWORD: bitbucketpassword
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/bitbucket.cnf:ro
    networks:
      - bitbucket-network
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --default-storage-engine=InnoDB
      --innodb-default-row-format=DYNAMIC
      --innodb-large-prefix=ON
      --innodb-file-format=Barracuda
      --innodb-log-file-size=256M
      --max-allowed-packet=256M
      --transaction-isolation=READ-COMMITTED
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpassword"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

  bitbucket:
    image: atlassian/bitbucket:8.14
    container_name: bitbucket-server
    restart: unless-stopped
    environment:
      JVM_MINIMUM_MEMORY: 1024m
      JVM_MAXIMUM_MEMORY: 2048m
      JDBC_DRIVER: com.mysql.cj.jdbc.Driver
      JDBC_URL: "jdbc:mysql://mysql:3306/bitbucket?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true"
      JDBC_USER: bitbucket
      JDBC_PASSWORD: bitbucketpassword
      SERVER_PROXY_NAME: localhost
      SERVER_PROXY_PORT: 7990
      SERVER_SCHEME: http
    ports:
      - "7990:7990"
      - "7999:7999"
    volumes:
      - ./data/bitbucket:/var/atlassian/application-data/bitbucket
      - ./docker/bitbucket/mysql-connector-j-8.0.33.jar:/opt/atlassian/bitbucket/app/WEB-INF/lib/mysql-connector-j-8.0.33.jar
    depends_on:
      mysql:
        condition: service_healthy
    networks:
      - bitbucket-network

networks:
  bitbucket-network:
    driver: bridge

Lưu ý depends_on với condition: service_healthy - Bitbucket sẽ chờ MySQL pass healthcheck mới khởi động, tránh lỗi kết nối database khi khởi động đồng thời.


Bước 4 - Khởi động

docker compose up -d

Theo dõi log để biết tiến trình:

# Xem log MySQL
docker compose logs -f mysql

# Chờ đến khi thấy: "[Note] mysqld: ready for connections."
# Sau đó xem log Bitbucket

docker compose logs -f bitbucket
# Chờ đến khi thấy: "Bitbucket Server is ready to serve"

Lần đầu khởi động mất 2–5 phút do Bitbucket cần khởi tạo toàn bộ schema database.


Bước 5 - Xác nhận cấu hình MySQL

Kiểm tra các tham số MySQL đã áp dụng đúng chưa:

docker exec -it bitbucket-mysql mysql -u bitbucket -pbitbucketpassword -e "
  SHOW VARIABLES LIKE 'transaction_isolation';
  SHOW VARIABLES LIKE 'character_set_server';
  SHOW VARIABLES LIKE 'innodb_default_row_format';
  SHOW VARIABLES LIKE 'innodb_large_prefix';
  SHOW VARIABLES LIKE 'innodb_file_format';
"

Kết quả mong đợi:

+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| transaction_isolation    | READ-COMMITTED |
| character_set_server     | utf8mb4        |
| innodb_default_row_format| dynamic        |
| innodb_large_prefix      | ON             |
| innodb_file_format       | Barracuda      |
+--------------------------+----------------+

Bước 6 - Cấu hình Bitbucket lần đầu (Setup Wizard)

Mở trình duyệt, truy cập http://localhost:7990/setup.

Lấy Trial License

  1. Chọn "I need an evaluation license"
  2. Click "I have an account" và đăng nhập tài khoản Atlassian
  3. Trên trang New Trial License, điền:
    • Product: Bitbucket
    • License Type: Bitbucket (Data Center)
    • Organization: tên tổ chức bất kỳ
    • Server ID: sao chép từ Setup Wizard (ví dụ: B9KT-2SQR-G0BC-V638)
  4. Click "Generate License" → xác nhận "Yes"
  5. Trình duyệt tự động quay lại Setup Wizard với license đã điền sẵn

Trial license có hiệu lực 30 ngày, không cần thẻ tín dụng.

Tạo tài khoản Administrator

Trường Giá trị gợi ý
Username admin
Full name Admin User
Email [email protected]
Password (tự chọn)

Click "Go to Bitbucket" để hoàn tất.


Download source Bitbucket Server + MySQL (Docker Compose)

© 2026 - SonNDC