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
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ỗiFailed 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
- Chọn "I need an evaluation license"
- Click "I have an account" và đăng nhập tài khoản Atlassian
- 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)
- Product:
- Click "Generate License" → xác nhận "Yes"
- 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 protected] |
|
| Password | (tự chọn) |
Click "Go to Bitbucket" để hoàn tất.