Chuyển tới nội dung chính
Version: 4.1

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ênMô 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ườngMọ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 imageTag 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}
volumesGắ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
resourcesKhai 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
networksChỉ 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
environmentDù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}"
portsChỉ 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"
labelsLabel 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'
healthcheckTuỳ 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 restartChí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/