Thêm docker image tuỳ chỉnh cho người dùng HiTechCloud
Mỗi người dùng có một dịch vụ Docker chạy ở chế độ Rootless và một tệp docker-compose.yml duy nhất khai báo mọi dịch vụ của họ.
Với mỗi người dùng, bạn có thể sửa tệp /home/USER/docker-compose.yml của họ để chỉ định các dịch vụ tuỳ chỉnh.
Dịch vụ mặc định
Để sửa dịch vụ cho mọi người dùng mới bạn tạo, sửa các tệp mẫu:
/etc/hitechcloud/docker/compose/1.0/docker-compose.yml- dịch vụ cho người dùng, volume và mạng./etc/hitechcloud/docker/compose/1.0/.env- giới hạn cho các dịch vụ.
Hướng dẫn
Bạn có thể thêm bất kỳ Docker image nào bằng cách thêm cấu hình Compose của nó. Tuy nhiên, có một số quy tắc quan trọng cần tuân theo để HiTechCloud có thể:
- Nhận diện dịch vụ là hợp lệ
- Cho phép sửa giới hạn tài nguyên từ giao diện
- Cho phép khởi động/dừng dịch vụ từ giao diện
- Giám sát số liệu sử dụng
- Áp dụng hạn chế tài nguyên
Hãy đảm bảo khai báo dịch vụ theo đúng cấu trúc yêu cầu để tích hợp đầy đủ với HiTechCloud.
| Tên | Mô tả | Ví dụ |
|---|---|---|
| tên dịch vụ | Tên dịch vụ phải khớp chính xác với container_name và không được chứa dấu cách. | Với uptimekuma: container_name: uptimekuma |
| biến môi trường | Mọi biến trong tệp .env phải bắt đầu bằng tên dịch vụ viết hoa, theo sau là dấu gạch dưới. Mỗi dịch vụ phải khai báo _CPU và _RAM để HiTechCloud hạn chế và giám sát mức sử dụng tài nguyên. | UPTIMEKUMA_VERSION="1" UPTIMEKUMA_CPU="0.5" UPTIMEKUMA_RAM="0.5G" |
| tag image | Tag image nên là một biến, để có thể đổi qua giao diện HiTechCloud. Nếu không có, giá trị dự phòng sẽ được dùng. | image: louislam/uptime-kuma:${UPTIMEKUMA_VERSION:-1} |
| volumes | Gắn đường dẫn của hệ điều hành host có thể làm lộ máy chủ. Dùng đường dẫn tương đối (ví dụ ./data) cho dữ liệu ứng dụng. Để dùng dữ liệu có sẵn như /var/www/html/, hãy gắn volume tương ứng. Nếu cần truy cập Docker socket, gắn /hostfs/run/user/${USER_ID}/docker.sock ở chế độ chỉ đọc để tránh leo thang đặc quyền. | - ./data:/app/data - html_data:/var/www/html/ - /hostfs/run/user/${USER_ID}/docker.sock:/var/run/docker.sock:ro |
| resources | Khai báo cpus, memory và pids trong mục deploy.resources.limits. Thiếu pids, dịch vụ dễ bị tấn công fork bomb. Dùng biến có giá trị dự phòng cho cpus và memory. | cpus: "${BUSYBOX_CPU:-0.1}" memory: "${BUSYBOX_RAM:-0.1G}" pids: 100 |
| networks | Chỉ thêm mạng nếu dịch vụ cần truy cập container khác. Dùng mạng www hoặc db. www dành cho truy cập ứng dụng/web server; db chỉ dành cho truy cập cơ sở dữ liệu. | - www - db |
| environment | Dùng mục environment để truyền các biến môi trường tuỳ chỉnh. | EULA: "TRUE" ENABLE_QUERY: "${MINECRAFT_ENABLE_QUERY:-true}" |
| ports | Chỉ khai báo cổng nếu cần truy cập từ bên ngoài. Với dịch vụ chỉ dùng nội bộ (ví dụ Redis, Memcached), không mở cổng. | - "${MYSQL_PORT}" - "${MINECRAFT_PORT:-25565}:25565" |
| labels | Label là tuỳ chọn và HiTechCloud bỏ qua, nhưng có thể dùng cho công cụ bên ngoài hoặc siêu dữ liệu. | - docker-volume-backup.archive-pre=/bin/sh -c '/dump.sh' |
| healthcheck | Tuỳ chọn. Nếu được khai báo, HiTechCloud tôn trọng health check và dùng nó để quản lý việc khởi động lại. | test: ['CMD-SHELL', 'mysqladmin ping -h localhost'] interval: 1s timeout: 5s retries: 10 |
| chính sách restart | Chính sách restart nên được đặt rõ là unless-stopped để HiTechCloud có thể tự khởi động lại dịch vụ khi gặp sự cố, trừ khi tài khoản người dùng bị tạm ngưng. | restart: unless-stopped |
Ví dụ
Các ví dụ này là đoạn mã chèn sẵn bạn có thể thêm vào tệp để bổ sung dịch vụ mới cho một người dùng HiTechCloud.
FileBrowser
Để thêm FileBrowser làm dịch vụ cho người dùng trong HiTechCloud:
thêm vào tệp .env:
# FILEBROWSER
FILEBROWSER_VERSION="s6"
FILEBROWSER_CPU="0.25"
FILEBROWSER_RAM="0.35"
thêm vào tệp docker-compose.yml trong mục services:
filebrowser:
image: filebrowser/filebrowser:${FILEBROWSER_VERSION:-s6}
container_name: filebrowser
volumes:
- html_data:/srv
- ./filebrowser/config/:/config/
- ./filebrowser/database/:/database/
environment:
- PUID=${USER_ID:-0}
- PGID=${USER_ID:-0}
restart: unless-stopped
deploy:
resources:
limits:
cpus: "${FILEBROWSER_CPU:-0.35}"
memory: "${FILEBROWSER_RAM:-0.35G}"
pids: 100
networks:
- www
Minecraft
Để thêm Minecraft làm dịch vụ cho người dùng trong HiTechCloud:
thêm vào tệp .env:
# MINECRAFT
MINECRAFT_VERSION="latest"
MINECRAFT_PORT="25565"
MINECRAFT_CPU="1.0"
MINECRAFT_RAM="1.0G"
MINECRAFT_ENABLE_QUERY="true"
MINECRAFT_MAX_PLAYERS="20"
MINECRAFT_MAX_WORLD_SIZE="10000"
MINECRAFT_ALLOW_NETHER="false"
MINECRAFT_ANNOUNCE_PLAYER_ACHIEVEMENTS="false"
MINECRAFT_ENABLE_COMMAND_BLOCK="false"
thêm vào tệp docker-compose.yml trong mục volumes:
mc_data:
driver: local
labels:
description: "This volume holds the minecraft data directory."
purpose: "storage"
thêm vào tệp docker-compose.yml trong mục services:
minecraft:
image: itzg/minecraft-server:${MINECRAFT_VERSION:-latest}
container_name: minecraft
tty: true
stdin_open: true
ports:
- "${MINECRAFT_PORT:-25565}:25565"
environment:
EULA: "TRUE"
ENABLE_QUERY: "${MINECRAFT_ENABLE_QUERY:-true}"
QUERY_PORT: "${MINECRAFT_PORT:-25565}"
volumes:
- mc_data:/data
deploy:
resources:
limits:
cpus: "${MINECRAFT_CPU:-1.0}"
memory: "${MINECRAFT_RAM:-1.0G}"
pids: 100
healthcheck:
test: mc-health
start_period: 1m
interval: 5s
retries: 20
networks:
- www
MsSQL
Để thêm MsSQL làm dịch vụ cho người dùng trong HiTechCloud:
thêm vào tệp .env:
# MSSQL
MSSQL_IMAGE="mcr.microsoft.com/mssql/server"
MSSQL_VERSION="latest"
MSSQL_PID="Standard"
MSSQL_PORT="0:1433"
MSSQL_CPU="1.0"
MSSQL_RAM="1.0G"
MSSQL_SA_PASSWORD="rootpassword"
thêm vào tệp docker-compose.yml trong mục volumes:
mssql_data:
driver: local
labels:
description: "This volume holds the MSSQL databases."
purpose: "database"
thêm vào tệp docker-compose.yml trong mục services:
mssql:
image: ${MSSQL_IMAGE}:${MSSQL_VERSION:-latest}
container_name: mssql
restart: unless-stopped
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD:-StrongPassword!}
MSSQL_PID: ${MSSQL_PID:-Developer} # Options: Developer, Express, Standard, Enterprise
ports:
- "${MSSQL_PORT}"
volumes:
- mssql_data:/var/opt/mssql # MSSQL data
- ./sockets/mssql:/var/opt/mssql/sockets # MSSQL socket
- ./mssql.conf:/etc/mssql/mssql.conf:ro # Custom MSSQL config
deploy:
resources:
limits:
cpus: "${MSSQL_CPU:-1}"
memory: "${MSSQL_RAM:-2G}"
pids: 100
networks:
- db
healthcheck:
test: ['CMD-SHELL', 'sqlcmd -S localhost -U sa -P "$$MSSQL_SA_PASSWORD" -Q "SELECT 1" || exit 1']
interval: 10s
timeout: 5s
retries: 5
UptimeKuma
Để thêm UptimeKuma làm dịch vụ cho người dùng trong HiTechCloud:
thêm vào tệp .env:
# UPTIMEKUMA
UPTIMEKUMA_VERSION="1"
UPTIMEKUMA_CPU="0.5"
UPTIMEKUMA_RAM="0.5G"
thêm vào tệp docker-compose.yml trong mục services:
uptimekuma:
image: louislam/uptime-kuma:${UPTIMEKUMA_VERSION:-1}
container_name: uptimekuma
volumes:
- ./data:/app/data
- /hostfs/run/user/${USER_ID}/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
deploy:
resources:
limits:
cpus: "${UPTIMEKUMA_CPU:-0.35}"
memory: "${UPTIMEKUMA_RAM:-0.35G}"
pids: 100
networks:
- www
BusyBox
Ví dụ này thêm container busybox, đây là ví dụ về cách thêm bất kỳ dịch vụ docker compose nào:
thêm vào tệp .env:
# BUSYBOX
BUSYBOX_CPU="0.1"
BUSYBOX_RAM="0.1G"
thêm vào tệp docker-compose.yml trong mục services:
busybox:
image: busybox
container_name: busybox
restart: unless-stopped
working_dir: /var/www/html
deploy:
resources:
limits:
cpus: "${BUSYBOX_CPU:-0.1}"
memory: "${BUSYBOX_RAM:-0.1G}"
pids: 100
volumes:
- html_data:/var/www/html/