# junsh **Repository Path**: jun33/junsh ## Basic Information - **Project Name**: junsh - **Description**: 自用脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-03 - **Last Updated**: 2026-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # junsh 一个面向 Linux 和 macOS 的中间件部署框架。 当前已提供: - `redis` - `postgresql` - `nacos` - `mysql` - `nginx` - `spug` - `xxljob` 项目目标: - 支持源码模式直接运行 - 支持 `curl` + release 包一键部署 - 按参数安装指定服务 - 统一管理配置、模板、发布与版本切换 ## 快速开始 本地源码模式: ```bash ./bootstrap.sh list ./bootstrap.sh doctor ./bootstrap.sh install redis postgresql nacos ./bootstrap.sh install mysql nginx spug xxljob ./bootstrap.sh logs redis --tail 100 ./bootstrap.sh upgrade nacos ``` 指定配置环境: ```bash ./bootstrap.sh install redis --profile production ./bootstrap.sh install nacos --set NACOS_HTTP_PORT=18848 ./bootstrap.sh install mysql --profile production --secrets-file ./mysql-secrets.md ``` 打包 release: ```bash ./bootstrap.sh package --version v1.0 ``` 远程部署: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | bash ``` 固定版本安装: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | \ VERSION='v1.0' bash ``` ## 依赖 - `bash` - `curl` - `tar` - `python3` - `docker` - `docker compose` 或 `docker-compose` ## 目录说明 ```text junsh/ ├── bootstrap.sh ├── app/ ├── env/ ├── templates/ ├── docs/ └── dist/ ``` 更多说明见: - [docs/architecture.md](/Users/lijun/code/gitproject/junsh/docs/architecture.md) - [docs/usage.md](/Users/lijun/code/gitproject/junsh/docs/usage.md) ## 敏感配置策略 - 安装时如果检测到密码、令牌等敏感字段为空,或仍是 `change_me` 这类占位符,会自动生成随机值。 - 运行时配置会保存在安装目录下的 `env//.env`,用于后续重启和升级。 - `install`、`upgrade`、`switch ` 完成后,默认会在当前目录额外导出一份 Markdown 凭据清单,例如 `junsh-secrets-production-20260405-120000.md`。 - 导出文件权限会收紧为仅当前用户可读写;仍建议你尽快转存到密码管理器或加密文档,确认保存无误后删除该文件。 - 如需自定义导出位置,使用 `--secrets-file /path/to/secrets.md`;如需关闭导出,使用 `--no-secrets-export`。 ## 发布到 Gitee 当前仓库地址: - 仓库主页: - Git 地址:`https://gitee.com/jun33/junsh.git` 推荐发布步骤: 1. 本地打包 release。 2. 在 Gitee 创建同名 tag 和 Release,tag 必须直接使用版本号本身,例如 `v1.0`。 3. 上传 `dist/` 下两个文件到该 Release: - `junsh-v1.0.tar.gz` - `junsh-v1.0.tar.gz.sha256` 示例: ```bash ./bootstrap.sh package --version v1.0 ``` 版本建议直接使用: - `v1.0` - `v1.1` - `v1.2` 只要 Gitee Release 已上传上述两个文件,远程安装就可以直接使用。 不要使用这类 tag: - `junsh-v1` - `release-20260407` 因为远程安装只认 `v1.0`、`v1.1`、`v1.2` 这种简单版本号,并按该版本号去下载对应附件。 ## XXL-JOB 验证 推荐先在源码模式验证,最直接: ```bash ./bootstrap.sh doctor xxljob ./bootstrap.sh install xxljob --profile production --secrets-file ./xxljob-secrets.md ./bootstrap.sh status xxljob ./bootstrap.sh logs xxljob --tail 200 ``` 验证点: - 访问 `http://127.0.0.1:8888/xxl-job-admin/` - 初始化 SQL 来自 [assets/sql/xxljob/tables_xxl_job.sql](/Users/lijun/code/gitproject/junsh/assets/sql/xxljob/tables_xxl_job.sql) - 默认内置管理员账号为 `admin` - 默认内置管理员密码哈希对应明文 `123456` - 执行器访问令牌会自动生成并写入 `XXL_ACCESS_TOKEN` 如果你要验证远程 release 模式: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | bash ``` 如果你要固定安装某个版本: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | \ VERSION='v1.0' bash ``` 如果执行时提示下载 release 附件失败,通常是这两个原因: - latest release 的 tag 不是 `v1.0` 这类简单版本号 - Release 里没有上传 `junsh-.tar.gz` 和 `junsh-.tar.gz.sha256` ## 远程安装约定 为了保持链路简单,公开仓库模式只保留三个约定: 1. 默认入口只有一个:`bootstrap.sh` 2. 无参数时进入交互模式,列出服务供你选择 3. release 附件通过 Gitee Release 下载 每个版本只需要上传两个文件: - `junsh-.tar.gz` - `junsh-.tar.gz.sha256` 例如: - `junsh-v1.0.tar.gz` - `junsh-v1.0.tar.gz.sha256` 最简安装命令: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | bash ``` 固定版本安装命令: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | \ VERSION='v1.0' bash ``` 交互模式默认行为: - 列出所有可安装服务并让你选择 - 默认 `profile` 为 `production` - 默认开启 secrets 导出,可选自定义路径或关闭 如果你不想交互,继续显式传命令即可: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | \ bash -s -- install xxljob --profile production --set XXL_ADMIN_PORT=9898 ``` 如果你要一次安装多个服务,或者需要完整控制命令,才使用通用入口: ```bash curl -fsSL https://gitee.com/jun33/junsh/raw/master/bootstrap.sh | \ bash -s -- install redis mysql xxljob --profile production ``` 如果你将来 fork 到别的仓库,才需要显式覆盖: ```bash curl -fsSL https://gitee.com/your-name/your-junsh/raw/master/bootstrap.sh | \ GITEE_REPOSITORY='your-name/your-junsh' \ bash ``` 说明: - `curl ... | bash` 时,脚本本身会占用标准输入,所以交互选择是通过 `/dev/tty` 读取终端输入实现的 - 如果当前没有终端,例如 CI、后台任务、某些受限 shell,就不能走交互模式,需要显式传命令参数 如果你所在网络对 Gitee Raw 有限制,再退回到自有静态地址或手工下载执行即可,不作为默认路径写进主流程。