Skip to main content

linktools toolkit

Project description

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

相关链接

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linktools_cntr-0.9.0.tar.gz (42.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linktools_cntr-0.9.0-py3-none-any.whl (54.2 kB view details)

Uploaded Python 3

File details

Details for the file linktools_cntr-0.9.0.tar.gz.

File metadata

  • Download URL: linktools_cntr-0.9.0.tar.gz
  • Upload date:
  • Size: 42.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for linktools_cntr-0.9.0.tar.gz
Algorithm Hash digest
SHA256 3e4dd32795b016da3aa0cfa1131500433b7023a1a46eba61020d7249230dcc85
MD5 1f8c8250cf95c2e8e36fed5f1b5f5d00
BLAKE2b-256 e724d493eaffa0850f95197ade4af73932e5d99a22500d05ab58fa5753c9d763

See more details on using hashes here.

File details

Details for the file linktools_cntr-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: linktools_cntr-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 54.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for linktools_cntr-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0235d1cfa1439871683082ca6991c2c9c00947e39133ec5658ed69916db2bc1
MD5 798200b662915b570d95601a3c536649
BLAKE2b-256 0335b8e8252fe92721dc18266fca76a9a7d6aab842f93e17c0ee95245fb9b114

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page