Skip to main content

linktools-cntr

Docker / Podman 容器部署和管理工具,为 homelab 及服务器环境提供统一的容器生命周期管理(命令前缀 ct-cntr)。

开始使用

以基于 Debian 的系统为例,先安装运行环境:

# 安装 Python3、Git、Docker、Docker Compose
wget -qO- get.docker.com | bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip git docker-compose-plugin

安装 linktools-cntr:

python3 -m pip install -U linktools linktools-cntr

# 安装 GitHub 最新开发版
python3 -m pip install --ignore-installed \
  "linktools@ git+https://github.com/linktools-toolkit/linktools.git@master#subdirectory=linktools" \
  "linktools-cntr@ git+https://github.com/linktools-toolkit/linktools.git@master#subdirectory=linktools-cntr"

容器部署示例

All in one 环境

PVE、OpenWRT、飞牛 OS、WAF、SSO、导航页等等

👉 搭建文档

Xray Server

gRPC + SSL + VLESS

👉 搭建文档

Redroid

Docker 版 Android 容器,以及编译环境

👉 搭建文档

内置容器

linktools-cntr 内置了常用容器定义,开箱即用:

容器 说明
nginx 反向代理(含 ACME 自动证书)
lldap 轻量级 LDAP 目录服务
authelia 单点登录 / 双因素认证
safeline Web 应用防火墙
portainer 容器可视化管理界面

更多容器可通过添加外部仓库获取(参见下方仓库管理命令)。

内置配置项

首次部署时会引导填写配置项,内置的全局配置参数包括:

参数 类型 默认值 描述
CONTAINER_TYPE str — 容器运行时:docker / docker-rootless / podman
DOCKER_USER str 当前用户 部分 rootless 容器使用此用户权限运行
DOCKER_HOST str /var/run/docker.sock Docker Daemon 地址
DOCKER_APP_PATH str ~/.linktools/data/container/app 容器数据持久化目录(建议置于 SSD)
DOCKER_APP_DATA_PATH str 默认同DOCKER_APP_PATH 不频繁读写的持久化目录(可置于 HDD)
HOST str 当前局域网 IP 宿主机 IP 地址

常用命令

# 查看帮助(每个子命令均支持 -h 参数)
ct-cntr -h

#######################
# 仓库管理(支持 git 链接和本地路径)
#######################

# 添加容器仓库
ct-cntr repo add https://github.com/linktools-toolkit/linktools-homelab

# 拉取仓库最新代码
ct-cntr repo update

# 删除仓库
ct-cntr repo remove

#######################
# 容器安装列表管理
#######################

# 添加要部署的容器
ct-cntr add nginx lldap authelia portainer

# 从部署列表移除容器
ct-cntr remove nginx

#######################
# 容器生命周期管理
#######################

# 启动容器
ct-cntr up

# 重启容器
ct-cntr restart

# 停止容器
ct-cntr down

#######################
# 配置管理
#######################

# 查看当前 docker compose 配置
ct-cntr config

# 列出所有配置变量
ct-cntr config list

# 设置配置变量
ct-cntr config set NGINX_ROOT_DOMAIN=example.com ACME_DNS_API=dns_ali Ali_Key=xxx Ali_Secret=yyy

# 删除配置变量
ct-cntr config unset NGINX_ROOT_DOMAIN ACME_DNS_API Ali_Key Ali_Secret

# 使用编辑器直接编辑配置文件
ct-cntr config edit --editor vim

# 重新加载配置
ct-cntr config reload

容器事件时序

linktools-cntr 通过一套生命周期事件系统统一管理容器的启动、停止流程。Manager 按依赖顺序对目标容器依次触发各阶段事件,再驱动 Docker Compose 执行。

target_containers:默认为全部已安装容器;指定容器名(如 ct-cntr up nginx)时仅为指定的子集。

sequenceDiagram
    autonumber
    actor User
    participant CLI
    participant ContainerManager
    participant Container

    %% ─── 初始化 & 准备 ───
    rect rgb(240, 240, 220)
        Note over CLI,Container: 初始化阶段(每次执行任意 ct-cntr 命令)
        User->>CLI: ct-cntr <command>
        CLI->>ContainerManager: 扫描 container.py / docker-compose.yml
        loop 每个容器
            ContainerManager->>Container: on_init()
        end
    end

    rect rgb(230, 235, 245)
        Note over CLI,Container: 准备阶段(up / restart / down / config / exec 等)
        CLI->>ContainerManager: prepare_installed_containers()
        ContainerManager->>ContainerManager: resolve_depend_containers()(依赖解析 & 排序)
        loop 每个容器(逆序,低优先级先写默认配置)
            ContainerManager->>Container: configs(写入全局默认配置)
        end
        loop 每个容器
            ContainerManager->>Container: on_prepare()
        end
        loop 每个容器(正序)
            ContainerManager->>Container: docker_file(渲染 Dockerfile 模板)
            ContainerManager->>Container: docker_compose(渲染 docker-compose.yml 模板)
            ContainerManager->>Container: exposes(加载对外服务链接)
        end
    end

    %% ─── 启动流程 ───
    rect rgb(220, 240, 220)
        Note over CLI,Container: ct-cntr up
        loop 每个容器(正序)
            ContainerManager->>Container: on_check(ctx)
            ContainerManager->>Container: on_starting(ctx)
            ContainerManager->>Container: start_hooks[i]()(mkdir / chown / 写 Nginx 配置…)
        end
        ContainerManager->>ContainerManager: manager.start_hooks[i]()
        ContainerManager->>CLI: yield
        CLI->>CLI: docker compose build / up --detach
        loop 每个容器(逆序)
            ContainerManager->>Container: on_started(ctx)
        end
        alt is_full_containers == True
            ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
        end
    end

    %% ─── 停止流程 ───
    rect rgb(240, 220, 220)
        Note over CLI,Container: ct-cntr down
        loop 每个容器(逆序)
            ContainerManager->>Container: on_stopping(ctx)
        end
        ContainerManager->>CLI: yield
        CLI->>CLI: docker compose stop / down
        loop 每个容器(正序)
            ContainerManager->>Container: on_stopped(ctx)
            ContainerManager->>Container: stop_hooks[i]()
        end
        ContainerManager->>ContainerManager: manager.stop_hooks[i]()
        alt is_full_containers == True
            ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
        end
    end

    %% ─── 重启流程 ───
    rect rgb(235, 225, 245)
        Note over CLI,Container: ct-cntr restart(= down 流程 + up 流程)
        loop 每个容器(逆序)
            ContainerManager->>Container: on_stopping(ctx)
        end
        ContainerManager->>CLI: yield
        CLI->>CLI: docker compose stop
        loop 每个容器(正序)
            ContainerManager->>Container: on_stopped(ctx)
            ContainerManager->>Container: stop_hooks[i]()
        end
        ContainerManager->>ContainerManager: manager.stop_hooks[i]()
        loop 每个容器(正序)
            ContainerManager->>Container: on_check(ctx)
            ContainerManager->>Container: on_starting(ctx)
            ContainerManager->>Container: start_hooks[i]()
        end
        ContainerManager->>ContainerManager: manager.start_hooks[i]()
        ContainerManager->>CLI: yield
        CLI->>CLI: docker compose build / up --detach
        loop 每个容器(逆序)
            ContainerManager->>Container: on_started(ctx)
        end
        alt is_full_containers == True
            ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
        end
    end

相关链接

Metadata

Release files for linktools-cntr 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for linktools-cntr 0.9.1
File Size Uploaded
linktools_cntr-0.9.1.tar.gz 42.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for linktools-cntr 0.9.1
File Interpreter ABI Platform
linktools_cntr-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 95.8 kB

Release files / linktools_cntr-0.9.1.tar.gz

Download URL linktools_cntr-0.9.1.tar.gz
Size 42.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5046b741708931aecfde7174e890580b7d864ea74f79a8c85d26b204f3259fa7
BLAKE2b-256 checksum
How to use checksums
cbb16b581aa6819fc876ec110b0c7063605d73fe88176115c1799f9c5c4da9d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / linktools_cntr-0.9.1-py3-none-any.whl

Download URL linktools_cntr-0.9.1-py3-none-any.whl
Size 53.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9fed6c204eb6222ef9c02b6beb0fff72b0606510a6e62539ad467222cf459491
BLAKE2b-256 checksum
How to use checksums
af68c02e2ae99649f7d130b27ca75efd4f225451910cabae5966f63dce518fab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.9.1 This release

2 release files

0.9.0

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page