Bản Docker v1 gói trong MỘT tệp compose: online/docker/compose.dev.yml, có sẵn hồ sơ nextcloud. Mọi cấu hình nằm trong online/.env, tạo bằng bash scripts/gen-secrets.sh --dev (PowerShell: scripts\gen-secrets.ps1 -Dev): script chép online/.env.example rồi sinh bí mật; máy chạy thật bỏ --dev. Mọi lệnh dưới đây chạy trong thư mục online/.
BashLệnh thường dùng
cd online
DC="docker compose --env-file .env -f docker/compose.dev.yml"$DC up -d# khởi động bốn dịch vụ lõi$DC--profile nextcloud up -d# thêm Nextcloud, MariaDB, Redis$DC ps # trạng thái và sức khoẻ$DC logs -f o3o-gate # xem nhật ký một dịch vụ$DC down # dừng, giữ dữ liệu$DC--profile nextcloud down -v# dừng và XOÁ volume (mất dữ liệu)# Chạy thêm một bản song song trên cùng máy: dự án khác (-p), cổng khác
O3O_PROXY_PORT=18080 O3O_NEXTCLOUD_PORT=18081 docker compose -p o3otest --env-file .env -f docker/compose.dev.yml up -d
Cửa vào duy nhất (cổng 8080): định tuyến, hỏi gate trước khi mở phiên soạn thảo, chặn đường quản trị của máy chủ soạn thảo, cho qua khi gate ngừng chạy.
GET /o3o/healthz
không
o3o-online
O3O_ONLINE_IMAGE (image DEV ghim digest)
Máy chủ soạn thảo cộng tác (cổng 9980). Cần cap_add: [MKNOD]. Image không có shell: gỡ lỗi bằng nhật ký.
sẵn trong image; qua proxy: GET /hosting/discovery
không giữ tài liệu
o3o-gate
O3O_GATE_IMAGE, mặc định o3o/gate:dev (python:3.12-slim-bookworm)
Đếm kết nối và áp trần, token bản quyền, lớp nhúng O3O.Editor, WOPI host nội bộ, callback (cổng 8070).
GET /o3o/healthz
o3o-gate-data
o3o-docbuilder
O3O_DOCBUILDER_IMAGE, mặc định o3o/docbuilder:dev (debian:bookworm-slim)
API /v1/*: chuyển đổi, dựng từ o3oscript, điền mẫu, trích xuất (cổng 8060). Chạy bằng người dùng không phải root.
GET /v1/status
o3o-docbuilder-data
o3o-nextcloud
nextcloud:30-apache
Hồ sơ nextcloud: kho tệp để thử đấu nối.
GET /status.php
o3o-nextcloud-html
o3o-nextcloud-db
mariadb:11
CSDL của Nextcloud.
o3o-nextcloud-db
o3o-nextcloud-redis
redis:7-alpine
Bộ nhớ đệm và khoá tệp của Nextcloud.
không
Một mạng bridge duy nhất o3o-net; các dịch vụ gọi nhau bằng tên dịch vụ.
Tệp compose không đặt container_name, nên nhiều dự án (-p) chạy song song được trên một máy.
Image gate và DocBuilder dựng với ngữ cảnh online/ để chép spec/plans.json vào /app/plans.json; hạn mức của gói luôn đọc từ tệp đó.
DocBuilder chạy với no-new-privileges, có giới hạn bộ nhớ và pids_limit; macro trong tài liệu bị tắt cứng khi nạp qua LibreOffice, và mẫu có macro bị POST /v1/template/render từ chối với 422 macro_not_allowed.
Font cài sẵn trong DocBuilder: Liberation, Carlito, Caladea, DejaVu, Noto; đủ cho tiếng Việt và tương thích kích thước với Arial, Times New Roman, Calibri, Cambria.
Mọi dịch vụ O3O đọc cấu hình qua biến có tiền tố O3O_. Giá trị logic: 1 là bật, 0 là tắt.
Danh sách phân tách bằng dấu phẩy, không có khoảng trắng thừa.
Giá trị chứa CHANGE_ME được coi là CHƯA ĐẶT: dịch vụ vẫn khởi động, ghi cảnh báo WARNING và tắt tính năng cần bí mật đó.
Ngoại lệ duy nhất là O3O_COOLWSD_ADMIN_PASSWORD, vì thiếu nó thì gate không đếm được kết nối và bảng quản trị của máy chủ soạn thảo dùng một mật khẩu ai cũng đoán được. Tệp compose không có giá trị dự phòng cho biến này và từ chối khởi động khi biến rỗng hoặc chưa đặt; gate ở chế độ chạy thật (O3O_DEV_MODE=0) từ chối khởi động khi mật khẩu rỗng hoặc còn CHANGE_ME. Chạy bash scripts/gen-secrets.sh để sinh mật khẩu này. Trên máy DEV (O3O_DEV_MODE=1) gate vẫn khởi động với cảnh báo, nhưng không đếm kết nối.
Cột "Đổi khi chạy thật": BẮT BUỘC nghĩa là để nguyên mặc định thì không an toàn hoặc không chạy đúng ngoài máy DEV.
URL công khai của proxy, không có / cuối. Dùng để dựng URL tải tệp trong callback và trong kết quả job.
O3O_LICENSE_TOKEN
rỗng
Khi có bản quyền
Token bản quyền dạng chuỗi. Rỗng thì đọc O3O_LICENSE_FILE. Xem Bản quyền.
O3O_LICENSE_FILE
/etc/o3o/license.token
Không
Tệp chứa token. Không có tệp là bình thường (bản cộng đồng). Đọc lại mỗi 60 giây.
O3O_LICENSE_PUBKEY
227be50bfccbdc0f…
Không
Khoá công khai Ed25519 (64 ký tự hex) của máy chủ bản quyền O3O. Chỉ đổi khi kiểm thử.
O3O_DEV_MODE
0
Phải là 0
1 = máy DEV: nhận khoá THỬ, bật /o3o/demo, trả chi tiết lỗi nội bộ trong error.detail.
O3O_BUILD_DATE
rỗng
Không
Ngày dựng image YYYY-MM-DD (image tự đặt), so với trường upd của token. Rỗng thì bỏ qua phép so.
O3O_FETCH_ALLOW_HOSTS
rỗng
Tuỳ
host, host:port hoặc CIDR được phép tải dù là địa chỉ nội bộ (ngoại lệ chống SSRF). Mục theo tên được tin theo tên và phân giải lúc nối; mục CIDR vẫn ghim IP đã kiểm. DEV: host.docker.internal,o3o-nextcloud.
O3O_FETCH_TIMEOUT_SECONDS
30
Không
Thời gian tối đa cho một lần tải URL bên ngoài.
O3O_LOG_LEVEL
info
Không
debug, info, warning, error. Một dòng JSON mỗi sự kiện ra stdout.
TZ
Asia/Ho_Chi_Minh
Không
Múi giờ container. Hạn bản quyền và hạn mức ngày luôn tính theo UTC+7.
URL máy chủ soạn thảo dùng để gọi WOPI host nội bộ của gate. Phải khớp O3O_ONLINE_ALIASGROUP1.
O3O_COOLWSD_URL
http://o3o-online:9980
Không
Địa chỉ nội bộ của máy chủ soạn thảo.
O3O_COOLWSD_ADMIN_USER
admin
Nên đổi
Tài khoản quản trị của máy chủ soạn thảo; gate dùng để đọc số phiên.
O3O_COOLWSD_ADMIN_PASSWORD
không có, compose báo lỗi khi rỗng
BẮT BUỘC
Mật khẩu quản trị, dùng chung với o3o-online. Không có giá trị dự phòng: compose từ chối khởi động khi biến rỗng hoặc chưa đặt; gate với O3O_DEV_MODE=0 từ chối khởi động khi mật khẩu rỗng hoặc còn CHANGE_ME. Đặt rồi mà lệch với máy chủ soạn thảo thì gate không đếm được và cho qua toàn bộ (upstream.coolwsd = "auth_failed", connections.source = "none").
O3O_GATE_SAMPLE_SECONDS
10
Không
Chu kỳ lấy mẫu số phiên, tối thiểu 2.
O3O_GATE_PEAK_WINDOW_SECONDS
300
Không
Cửa sổ của đỉnh trượt.
O3O_GATE_RECONNECT_GRACE_SECONDS
120
Không
Ân hạn nối lại.
O3O_GATE_CONNECTION_CAP
rỗng
Không
Chỉ HẠ được trần: trần hiệu lực = số nhỏ hơn giữa gói và biến này. Dùng khi kiểm thử, ví dụ 2.
O3O_GATE_INSTANCE_ID
rỗng
Không
Mã instance. Rỗng thì gate tự sinh inst_ + 16 hex và lưu ở /data/instance-id.
O3O_WOPI_ALLOWED_HOSTS
rỗng
Khi đấu Nextcloud
Gốc URL của WOPI host bên ngoài mà gate được gọi khi đã chạm trần, để nhận ra phiên chỉ đọc. Ví dụ http://o3o-nextcloud.
O3O_ONLINE_IMAGE_KIND
dev-upstream
Khi dùng image O3O
dev-upstream = image DEV, chỉ thử nội bộ; o3o = image O3O dựng từ nguồn. Chỉ để hiển thị trong /o3o/status.
Image máy chủ soạn thảo không đọc biến O3O_*; tệp compose ánh xạ chúng sang tên mà image hiểu. Hai giá trị cố định trong compose: DONT_GEN_SSL_CERT=YES và extra_params dưới đây.
Biến
Ánh xạ sang
Mặc định
Đổi khi chạy thật
Ý nghĩa
O3O_ONLINE_IMAGE
image:
image DEV, digest sha256:1efda304…bf97
Khi dùng image O3O
Image máy chủ soạn thảo, ghim theo digest.
O3O_ONLINE_SERVER_NAME
server_name
localhost:8080
BẮT BUỘC
host[:port] công khai; quyết định đường dẫn trong /hosting/discovery.
O3O_ONLINE_ALIASGROUP1
aliasgroup1
http://o3o-gate:8070
Không
WOPI host nội bộ của gate. LUÔN là nhóm 1.
O3O_ONLINE_ALIASGROUP2
aliasgroup2
http://o3o-nextcloud,http://localhost:8081
Khi đấu Nextcloud
WOPI host của Nextcloud. Phần tử sau dấu phẩy là biểu thức chính quy (dấu chấm viết \.).
O3O_COOLWSD_ADMIN_USER
username
admin
Nên đổi
Dùng chung với gate.
O3O_COOLWSD_ADMIN_PASSWORD
password
không có, compose báo lỗi khi rỗng
BẮT BUỘC
Dùng chung với gate. Không có giá trị dự phòng: biến rỗng thì compose báo lỗi và không khởi động.
O3O_ONLINE_DICTIONARIES
dictionaries
vi en_US
Không
Từ điển kiểm tra chính tả.
O3O_ONLINE_SSL_TERMINATION
--o:ssl.termination=
false
BẮT BUỘC khi proxy có TLS
true khi người dùng vào bằng https qua proxy ngoài.
O3O_ONLINE_FRAME_ANCESTORS
--o:net.frame_ancestors=
rỗng
BẮT BUỘC khi trang nhúng khác origin
MỘT giá trị không dấu cách, ví dụ https://app.example.com. Rỗng: chỉ cho phép tên máy của chính yêu cầu và của WOPI host.
Tệp compose không ghi cứng thẻ image của gate và DocBuilder mà đọc hai biến dưới; để trống thì dùng thẻ dựng tại chỗ o3o/gate:dev và o3o/docbuilder:dev. Lệnh python tools/release.py env (chạy ở gốc repo, hoặc python ../tools/release.py env từ online/) sinh khối phiên bản của .env từ versions.json, gồm O3O_ONLINE_IMAGE, O3O_ONLINE_IMAGE_KIND, O3O_GATE_IMAGE và O3O_DOCBUILDER_IMAGE; thêm --write thì lệnh thay khối cũ trong tệp và lưu bản trước ở .env.bak.
Biến
Mặc định
Đổi khi chạy thật
Ý nghĩa
O3O_GATE_IMAGE
o3o/gate:dev
Khi ghim bản phát hành
Image của o3o-gate. Tệp compose đọc ${O3O_GATE_IMAGE:-o3o/gate:dev}.
O3O_DOCBUILDER_IMAGE
o3o/docbuilder:dev
Khi ghim bản phát hành
Image của o3o-docbuilder. Tệp compose đọc ${O3O_DOCBUILDER_IMAGE:-o3o/docbuilder:dev}.
BashSinh khối phiên bản của .env từ versions.json
cd online
# Xem trước khối phiên bảnpython ../tools/release.py env
# Ghi vào .env (khối cũ được thay, bản trước lưu ở .env.bak)python ../tools/release.py env --write .env
# Kiểm image mà compose sẽ dùnggrep-E'^O3O_(ONLINE|GATE|DOCBUILDER)_IMAGE=' .env
docker compose --env-file .env -f docker/compose.dev.yml config --images