Tự dựng và vận hành
Nâng cấp và quay lui Beta
Nâng cấp theo versions.json, ghim image, sao lưu trước khi nâng, thứ tự áp dụng và cách quay lui bằng một lệnh.
Trang này mô tả tính năng đang ở giai đoạn beta: đã chạy được nhưng có thể còn thay đổi.
Trong trang này
Nguyên tắc#
- Tệp kê khai
versions.jsonở gốc repo là nguồn sự thật về phiên bản của từng thành phần và các ràng buộc tương thích. Dịch vụ không đọc tệp này lúc chạy; nó dành cho người vận hành, cho bộ dựng trang và cho trang Ma trận tương thích. - Luôn ghim image. Máy chủ soạn thảo ghim theo digest qua
O3O_ONLINE_IMAGE; không dùng thẻ di động nhưlatestở máy chạy thật vìdocker compose pullcó thể đổi lõi xử lý tài liệu mà không báo. - Gate và DocBuilder v1 được dựng tại chỗ từ mã nguồn trong repo. Tệp compose lấy thẻ image của hai dịch vụ này từ
O3O_GATE_IMAGE(mặc địnho3o/gate:dev) vàO3O_DOCBUILDER_IMAGE(mặc địnho3o/docbuilder:dev). Mỗi lần nâng cấp, giữ lại image cũ dưới một thẻ khác để quay lui được bằng một lệnh. - Sau khi lấy mã của bản mới, chạy
python tools/release.py env --write online/.env(ở gốc repo) để ghi khối phiên bản của.envtheoversions.json:O3O_ONLINE_IMAGE,O3O_ONLINE_IMAGE_KIND,O3O_GATE_IMAGE,O3O_DOCBUILDER_IMAGE. Lệnh chỉ thay khối đó, giữ nguyên bí mật và các biến khác, và lưu bản trước ở.env.bak. Chi tiết ở Tệp compose và biến môi trường. - Đọc Nhật ký thay đổi trước: thay đổi phá vỡ của API chỉ xuất hiện ở phiên bản API mới, không lẻn vào v1.
Trước khi nâng cấp#
- Sao lưu volume
o3o-gate-data: nó chứainstance-id(token có thể gắn vào mã này),secret.key(ký URL tải tệp), bản làm việc của tài liệu nhúng và nhật ký đối soát.o3o-docbuilder-datachỉ chứa kết quả tạm. - Lưu bản sao
.envvà ghi lại image đang chạy. - Hàng đợi DocBuilder nằm trong bộ nhớ: khởi động lại thì job đang chờ và đang chạy bị mất (job đã xong vẫn tải được tới hết hạn). Chờ
queue.queuedvàqueue.runningcủaGET /v1/statusvề 0. - Chọn giờ thấp điểm cho máy chủ soạn thảo: xem
connections.currenttrongGET /o3o/status.
# Tên volume có tiền tố là tên dự án compose
docker volume ls | grep -E 'o3o-(gate|docbuilder)-data'
# Nén ra thư mục hiện tại
docker run --rm -v <tên dự án>_o3o-gate-data:/data:ro -v "$PWD":/backup alpine \
tar czf /backup/o3o-gate-data-$(date +%Y%m%d).tgz -C /data .Các bước nâng cấp#
cd online
DC="docker compose --env-file .env -f docker/compose.dev.yml"
# 1. Ghi lại hiện trạng và giữ image cũ
$DC images
cp .env ".env.bak-$(date +%Y%m%d)"
GATE_IMAGE=$(grep -E '^O3O_GATE_IMAGE=' .env | cut -d= -f2-)
DOCBUILDER_IMAGE=$(grep -E '^O3O_DOCBUILDER_IMAGE=' .env | cut -d= -f2-)
docker image tag "${GATE_IMAGE:-o3o/gate:dev}" o3o/gate:rollback
docker image tag "${DOCBUILDER_IMAGE:-o3o/docbuilder:dev}" o3o/docbuilder:rollback
# 2. Hàng đợi DocBuilder phải trống; nên có ít phiên đang soạn
curl -s http://localhost:8080/v1/status | jq .queue
curl -s http://localhost:8080/o3o/status | jq '{current: .connections.current, open: .embed.open_documents}'
# 3. Lấy mã của bản mới; so danh sách biến để thêm biến mới vào .env; ghi khối phiên bản (O3O_ONLINE_IMAGE, O3O_GATE_IMAGE, O3O_DOCBUILDER_IMAGE) theo versions.json
git fetch --tags
git checkout <thẻ phát hành>
diff <(grep -oE '^[A-Z0-9_]+=' .env.example | sort) <(grep -oE '^[A-Z0-9_]+=' .env | sort)
python ../tools/release.py env --write .env
# 4. Dựng lại image với đúng thẻ trong .env (ngữ cảnh là thư mục online/)
GATE_IMAGE=$(grep -E '^O3O_GATE_IMAGE=' .env | cut -d= -f2-)
DOCBUILDER_IMAGE=$(grep -E '^O3O_DOCBUILDER_IMAGE=' .env | cut -d= -f2-)
docker build -f gate/Dockerfile -t "${GATE_IMAGE:-o3o/gate:dev}" .
docker build -f docbuilder/Dockerfile -t "${DOCBUILDER_IMAGE:-o3o/docbuilder:dev}" .
# 5. Áp dụng theo thứ tự: DocBuilder, gate, rồi phần còn lại
$DC up -d --force-recreate o3o-docbuilder
$DC up -d --force-recreate o3o-gate
$DC up -d
# 6. Kiểm phiên bản sau nâng cấp
curl -s http://localhost:8080/o3o/status | jq '{version, api, edition}'
curl -s http://localhost:8080/v1/status | jq '{version, api, core}'Quay lui#
cd online
DC="docker compose --env-file .env -f docker/compose.dev.yml"
git checkout <thẻ phát hành cũ>
cp .env.bak-YYYYMMDD .env # bản sao .env đã lưu ở bước 1
GATE_IMAGE=$(grep -E '^O3O_GATE_IMAGE=' .env | cut -d= -f2-)
DOCBUILDER_IMAGE=$(grep -E '^O3O_DOCBUILDER_IMAGE=' .env | cut -d= -f2-)
docker image tag o3o/gate:rollback "${GATE_IMAGE:-o3o/gate:dev}"
docker image tag o3o/docbuilder:rollback "${DOCBUILDER_IMAGE:-o3o/docbuilder:dev}"
$DC up -d --force-recreate o3o-docbuilder o3o-gate
$DC up -d # tạo lại o3o-online nếu digest đã đổiKhông chạy docker image prune trong thời gian còn có thể cần quay lui. Nếu nhật ký thay đổi báo định dạng dữ liệu của gate đổi, phục hồi cả bản sao lưu volume.