Files
usernode/Makefile
T
cao.wangrenbo a5f501dba4 feat(M2): SSH 密钥管理 — 公钥上传/重命名/吊销、authorized_keys 原子同步与吊销即时失效
- KeyService:crypto/ssh 解析校验(单行/类型/长度/去重指纹,拒 ssh-dss 与 RSA<2048),
  Create/Rename/Revoke/List,变更后以 DB 状态全量重写 authorized_keys(同步失败回滚)
- system 层:SyncAuthorizedKeys 完善 —— sudo 模式经白名单命令(mkdir/chown/chmod/install)
  落位并修正属主(sshd StrictModes),direct 模式 root 时同样修正属主;dry-run 计划日志
- API:GET/POST /me/keys、PATCH/DELETE /me/keys/:id(user 会话)、GET /users/:id/keys(admin),
  密钥操作带审计;deploy/sudoers.example 补充密钥同步白名单
- 版本 0.3.0-m2;测试:service 单元(校验/生命周期/回滚/权限)、system 直写落盘、
  API 全流程集成;容器 E2E 32 项 PASS(真实 useradd/authorized_keys/吊销即时失效/禁用清空/删除回收)
2026-08-29 23:55:39 +08:00

90 lines
3.3 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ws_usernode Makefile —— build / test / dev 工作流
# 代理:容器构建无法继承 proxychains 注入,通过 --build-arg 显式传递
# 宿主机代理环境变量(HTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXY)。
# ---------- 代理参数(供 podman build 使用) ----------
HTTP_PROXY_ARG := $(if $(HTTP_PROXY),--build-arg HTTP_PROXY=$(HTTP_PROXY),)
HTTPS_PROXY_ARG := $(if $(HTTPS_PROXY),--build-arg HTTPS_PROXY=$(HTTPS_PROXY),)
ALL_PROXY_ARG := $(if $(ALL_PROXY),--build-arg ALL_PROXY=$(ALL_PROXY),)
NO_PROXY_ARG := $(if $(NO_PROXY),--build-arg NO_PROXY=$(NO_PROXY),)
PROXY_ARGS := $(HTTP_PROXY_ARG) $(HTTPS_PROXY_ARG) $(ALL_PROXY_ARG) $(NO_PROXY_ARG)
NET_HOST := --network=host
GO ?= go
PODMAN ?= podman
BIN := bin/usernode
VERSION ?= 0.3.0-m2
LDFLAGS := -s -w -X main.version=$(VERSION)
GOFLAGS := -trimpath
# ---------- 后端 ----------
.PHONY: build
build: ## 构建 Go 二进制(后端,不含前端产物)
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/usernode
.PHONY: test
test: ## 运行全部 Go 测试
$(GO) test ./...
.PHONY: vet
vet: ## 静态检查
$(GO) vet ./...
.PHONY: run
run: build ## 本地运行(默认 config.toml,缺失则用默认配置)
./$(BIN) serve
.PHONY: migrate
migrate: build ## 数据库迁移
./$(BIN) migrate
# ---------- 前端 ----------
.PHONY: web-install
web-install: ## 容器内安装前端依赖(node:20-alpine),并初始化 node_modules volume
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode-web-dev -f web/Containerfile.dev web/
$(PODMAN) run --rm $(NET_HOST) \
-v ws_usernode_node_modules:/app/node_modules \
ws-usernode-web-dev sh -c "ls node_modules >/dev/null && echo node_modules ready"
.PHONY: web-dev
web-dev: ## 前端 dev 容器(热开发,端口 5173;API 代理到 Go 后端)
$(PODMAN) run --rm -p 5173:5173 \
-v $(CURDIR)/web:/app \
-v ws_usernode_node_modules:/app/node_modules \
-e VITE_API_PROXY=http://host.containers.internal:8080 \
ws-usernode-web-dev
.PHONY: web-build
web-build: ## 容器内构建前端产物到 web/dist,并复制到 internal/webui/dist(供 go:embed
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode-web-dev -f web/Containerfile.dev web/
$(PODMAN) run --rm $(NET_HOST) \
-v $(CURDIR)/web:/app \
-v ws_usernode_node_modules:/app/node_modules \
-v $(CURDIR)/internal/webui/dist:/embed/dist \
ws-usernode-web-dev sh -c "npm run build && cp -r dist/. /embed/dist/ && echo web-build ok"
# ---------- 镜像 / 分发 ----------
.PHONY: image
image: ## 构建单二进制容器镜像(deploy/Containerfile 多阶段)
$(PODMAN) build $(NET_HOST) $(PROXY_ARGS) -t ws-usernode:$(VERSION) -t ws-usernode:latest -f deploy/Containerfile .
.PHONY: build-embed
build-embed: web-build ## 构建含前端产物的 Go 二进制(web-build 后重新编译)
$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/usernode
.PHONY: dev
dev: ## 开发提示
@echo "后端:make run 前端:make web-dev"
@echo "或:go run ./cmd/usernode serve --debug"
.PHONY: clean
clean: ## 清理构建产物
rm -rf bin web/dist
.PHONY: help
help: ## 显示帮助
@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}'