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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e4dd32795b016da3aa0cfa1131500433b7023a1a46eba61020d7249230dcc85
|
|
| MD5 |
1f8c8250cf95c2e8e36fed5f1b5f5d00
|
|
| BLAKE2b-256 |
e724d493eaffa0850f95197ade4af73932e5d99a22500d05ab58fa5753c9d763
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0235d1cfa1439871683082ca6991c2c9c00947e39133ec5658ed69916db2bc1
|
|
| MD5 |
798200b662915b570d95601a3c536649
|
|
| BLAKE2b-256 |
0335b8e8252fe92721dc18266fca76a9a7d6aab842f93e17c0ee95245fb9b114
|