From f13f5531a94ce49157d8a7e3ecf07077ceca3db0 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Mon, 2 Dec 2024 15:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=EF=BC=9A?= =?UTF-8?q?=20=E6=B3=A1=E6=B3=A1=E5=B9=BF=E5=9C=BA=20All-in-One=20TOPIAM?= =?UTF-8?q?=20=E8=BA=AB=E4=BB=BD=E7=AE=A1=E7=90=86=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/renovate.json | 3 +- apps/aria2-superng6/24-11-01/data.yml | 16 ++ apps/paopao-ce-all/0.6.0/conf/config.yaml | 204 ++++++++++++++++++ apps/paopao-ce-all/0.6.0/data.yml | 25 +++ apps/paopao-ce-all/0.6.0/docker-compose.yml | 22 ++ apps/paopao-ce-all/0.6.0/envs/default.env | 2 + apps/paopao-ce-all/0.6.0/envs/global.env | 2 + apps/paopao-ce-all/0.6.0/scripts/init.sh | 22 ++ apps/paopao-ce-all/0.6.0/scripts/uninstall.sh | 10 + apps/paopao-ce-all/0.6.0/scripts/upgrade.sh | 17 ++ apps/paopao-ce-all/README.md | 29 +++ apps/paopao-ce-all/data.yml | 14 ++ apps/paopao-ce-all/logo.png | Bin 0 -> 37012 bytes apps/topiam-ce/2.0.0/data.yml | 124 +++++++++++ apps/topiam-ce/2.0.0/docker-compose.yml | 30 +++ apps/topiam-ce/2.0.0/scripts/init.sh | 4 + apps/topiam-ce/README.md | 34 +++ apps/topiam-ce/data.yml | 15 ++ apps/topiam-ce/logo.png | Bin 0 -> 28216 bytes 19 files changed, 572 insertions(+), 1 deletion(-) create mode 100644 apps/paopao-ce-all/0.6.0/conf/config.yaml create mode 100644 apps/paopao-ce-all/0.6.0/data.yml create mode 100644 apps/paopao-ce-all/0.6.0/docker-compose.yml create mode 100644 apps/paopao-ce-all/0.6.0/envs/default.env create mode 100644 apps/paopao-ce-all/0.6.0/envs/global.env create mode 100644 apps/paopao-ce-all/0.6.0/scripts/init.sh create mode 100644 apps/paopao-ce-all/0.6.0/scripts/uninstall.sh create mode 100644 apps/paopao-ce-all/0.6.0/scripts/upgrade.sh create mode 100644 apps/paopao-ce-all/README.md create mode 100644 apps/paopao-ce-all/data.yml create mode 100644 apps/paopao-ce-all/logo.png create mode 100644 apps/topiam-ce/2.0.0/data.yml create mode 100644 apps/topiam-ce/2.0.0/docker-compose.yml create mode 100644 apps/topiam-ce/2.0.0/scripts/init.sh create mode 100644 apps/topiam-ce/README.md create mode 100644 apps/topiam-ce/data.yml create mode 100644 apps/topiam-ce/logo.png diff --git a/.github/renovate.json b/.github/renovate.json index 8904f51ad..893ee854a 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -13,7 +13,8 @@ "ignorePaths": [ "appstore/**", "dockge/**", - "apps/tangsengdaodao/1.5/docker-compose.yml" + "apps/tangsengdaodao/1.5/docker-compose.yml", + "apps/topiam-ce/2.0.0/docker-compose.yml" ], "rebaseWhen": "never", "packageRules": [ diff --git a/apps/aria2-superng6/24-11-01/data.yml b/apps/aria2-superng6/24-11-01/data.yml index 10ae84f9a..08cab986d 100644 --- a/apps/aria2-superng6/24-11-01/data.yml +++ b/apps/aria2-superng6/24-11-01/data.yml @@ -1,5 +1,21 @@ additionalProperties: formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" - default: "/home/aria2" edit: true envKey: ARIA2_ROOT_PATH diff --git a/apps/paopao-ce-all/0.6.0/conf/config.yaml b/apps/paopao-ce-all/0.6.0/conf/config.yaml new file mode 100644 index 000000000..c05f6a88c --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/conf/config.yaml @@ -0,0 +1,204 @@ +App: # APP基础设置项 + RunMode: debug + AttachmentIncomeRate: 0.8 + MaxCommentCount: 10 + DefaultContextTimeout: 60 + DefaultPageSize: 10 + MaxPageSize: 100 +Server: # 服务设置 + RunMode: debug + HttpIp: 0.0.0.0 + HttpPort: 8010 + ReadTimeout: 60 + WriteTimeout: 60 +Features: + Default: [ "Web", "Frontend:EmbedWeb", "Meili", "LocalOSS", "MySQL", "BigCacheIndex", "LoggerFile" ] + Develop: [ "Base", "MySQL", "BigCacheIndex", "Meili", "Sms", "AliOSS", "LoggerMeili", "OSS:Retention" ] + Demo: [ "Base", "MySQL", "Option", "Zinc", "Sms", "MinIO", "LoggerZinc", "Migration" ] + Slim: [ "Base", "Sqlite3", "LocalOSS", "LoggerFile", "OSS:TempDir" ] + Base: [ "Redis", "PhoneBind" ] + Docs: [ "Docs:OpenAPI" ] + Deprecated: [ "Deprecated:OldWeb" ] + Service: [ "Web", "Admin", "SpaceX", "Bot", "LocalOSS", "Mobile", "Frontend:Web", "Frontend:EmbedWeb", "Docs" ] + Option: [ "SimpleCacheIndex" ] + Sms: "SmsJuhe" +WebServer: # Web服务 + HttpIp: 0.0.0.0 + HttpPort: 8008 + ReadTimeout: 60 + WriteTimeout: 60 +AdminServer: # Admin后台运维服务 + HttpIp: 0.0.0.0 + HttpPort: 8014 + ReadTimeout: 60 + WriteTimeout: 60 +SpaceXServer: # SpaceX服务 + HttpIp: 0.0.0.0 + HttpPort: 8012 + ReadTimeout: 60 + WriteTimeout: 60 +BotServer: # Bot服务 + HttpIp: 0.0.0.0 + HttpPort: 8016 + ReadTimeout: 60 + WriteTimeout: 60 +LocalossServer: # Localoss服务 + HttpIp: 0.0.0.0 + HttpPort: 8018 + ReadTimeout: 60 + WriteTimeout: 60 +FrontendWebServer: # Web前端服务 + HttpIp: 0.0.0.0 + HttpPort: 8006 + ReadTimeout: 60 + WriteTimeout: 60 +DocsServer: # 开发文档服务 + HttpIp: 0.0.0.0 + HttpPort: 8011 + ReadTimeout: 60 + WriteTimeout: 60 +MobileServer: # 移动端grpc api服务 + Host: 0.0.0.0 + Port: 8020 +SmsJuhe: + Gateway: https://v.juhe.cn/sms/send + Key: + TplID: + TplVal: "#code#=%s&#m#=%d" +Alipay: + AppID: + InProduction: True + RootCertFile: "custom/alipay/RootCert.crt" + PublicCertFile: "custom/alipay/CertPublicKey_RSA2.crt" + AppPublicCertFile: "custom/alipay/AppCertPublicKey.crt" +CacheIndex: + MaxUpdateQPS: 100 # 最大添加/删除/更新Post的QPS, 设置范围[10, 10000], 默认100 +SimpleCacheIndex: # 缓存泡泡广场消息流 + MaxIndexSize: 200 # 最大缓存条数 + CheckTickDuration: 60 # 循环自检查每多少秒一次 + ExpireTickDuration: 300 # 每多少秒后强制过期缓存, 设置为0禁止强制使缓存过期 +BigCacheIndex: # 使用BigCache缓存泡泡广场消息流 + MaxIndexPage: 1024 # 最大缓存页数,必须是2^n, 代表最大同时缓存多少页数据 + Verbose: False # 是否打印cache操作的log + ExpireInSecond: 300 # 多少秒(>0)后强制过期缓存 +Logger: # 日志通用配置 + Level: debug # 日志级别 panic|fatal|error|warn|info|debug|trace +LoggerFile: # 使用File写日志 + SavePath: custom/data/paopao-ce/logs + FileName: app + FileExt: .log +LoggerZinc: # 使用Zinc写日志 + Host: zinc:4080 + Index: paopao-log + User: admin + Password: admin + Secure: False +LoggerMeili: # 使用Meili写日志 + Host: meili:7700 + Index: paopao-log + ApiKey: paopao-meilisearch + Secure: False + MinWorker: 5 # 最小后台工作者, 设置范围[5, 100], 默认5 + MaxLogBuffer: 100 # 最大log缓存条数, 设置范围[10, 10000], 默认100 +JWT: # 鉴权加密 + Secret: 18a6413dc4fe394c66345ebe501b2f26 + Issuer: paopao-api + Expire: 86400 +TweetSearch: # 推文关键字搜索相关配置 + MaxUpdateQPS: 100 # 最大添加/删除/更新Post的QPS,设置范围[10, 10000], 默认100 + MinWorker: 10 # 最小后台更新工作者, 设置范围[5, 1000], 默认10 +Zinc: # Zinc搜索配置 + Host: zinc:4080 + Index: paopao-data + User: admin + Password: admin + Secure: False +Meili: # Meili搜索配置 + Host: meili:7700 + Index: paopao-data + ApiKey: paopao-meilisearch + Secure: False +ObjectStorage: # 对象存储通用配置 + RetainInDays: 2 # 临时对象过期时间多少天 + TempDir: tmp # 临时对象存放目录名 +AliOSS: # 阿里云OSS存储配置 + Endpoint: + AccessKeyID: + AccessKeySecret: + Bucket: + Domain: +COS: # 腾讯云COS存储配置 + SecretID: + SecretKey: + Region: ap-shanghai + Bucket: demo-1888888888 + Domain: +HuaweiOBS: # 华为云OBS存储配置 + AccessKey: + SecretKey: + Endpoint: + Bucket: paopao + Domain: +MinIO: # MinIO 存储配置 + AccessKey: Q3AM3UQ867SPQQA43P2F + SecretKey: zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG + Secure: False + Endpoint: minio:9000 + Bucket: paopao + Domain: 127.0.0.1:9000 +S3: # Amazon S3 存储配置 + AccessKey: "YOUR-ACCESSKEYID" + SecretKey: "YOUR-SECRETACCESSKEY" + Secure: True + Endpoint: s3.amazonaws.com + Bucket: paopao + Domain: +LocalOSS: # 本地文件OSS存储配置 + SavePath: custom/data/paopao-ce/oss + Secure: False + Bucket: paopao + Domain: 127.0.0.1:8008 +Database: # Database通用配置 + LogLevel: error # 日志级别 silent|error|warn|info + TablePrefix: p_ # 表名前缀 +MySQL: # MySQL数据库 + Username: paopao + Password: paopao + Host: db:3306 + DBName: paopao + Charset: utf8mb4 + ParseTime: True + MaxIdleConns: 10 + MaxOpenConns: 30 +Postgres: # PostgreSQL数据库 + User: paopao + Password: paopao + DBName: paopao + Host: localhost + Port: 5432 + SSLMode: disable + TimeZone: Asia/Shanghai +Sqlite3: # Sqlite3数据库 + Path: custom/data/sqlite3/paopao-ce.db +Redis: + InitAddress: + - redis:6379 +WebProfile: + UseFriendship: true # 前端是否使用好友体系 + EnableTrendsBar: true # 广场页面是否开启动态条栏功能 + EnableWallet: false # 是否开启钱包功能 + AllowTweetAttachment: true # 是否允许推文附件 + AllowTweetAttachmentPrice: true # 是否允许推文付费附件 + AllowTweetVideo: true # 是否允许视频推文 + AllowUserRegister: true # 是否允许用户注册 + AllowPhoneBind: true # 是否允许手机绑定 + DefaultTweetMaxLength: 2000 # 推文允许输入的最大长度, 默认2000字,值的范围需要查询后端支持的最大字数 + TweetWebEllipsisSize: 400 # Web端推文作为feed显示的最长字数,默认400字 + TweetMobileEllipsisSize: 300 # 移动端推文作为feed显示的最长字数,默认300字 + DefaultTweetVisibility: friend # 推文可见性,默认好友可见 值: public/following/friend/private + DefaultMsgLoopInterval: 5000 # 拉取未读消息的间隔,单位:毫秒, 默认5000ms + CopyrightTop: "2023 paopao.info" + CopyrightLeft: "Roc's Me" + CopyrightLeftLink: "" + CopyrightRight: "泡泡(PaoPao)开源社区" + CopyrightRightLink: "https://www.paopao.info" diff --git a/apps/paopao-ce-all/0.6.0/data.yml b/apps/paopao-ce-all/0.6.0/data.yml new file mode 100644 index 000000000..ab6809208 --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/data.yml @@ -0,0 +1,25 @@ +additionalProperties: + formFields: + - default: "/home/paopao-ce" + edit: true + envKey: PAOPAO_CE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8008 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 7700 + edit: true + envKey: PANEL_APP_PORT_MEILI + labelZh: MeiliSearch 端口 + labelEn: MeiliSearch port + required: true + rule: paramPort + type: number diff --git a/apps/paopao-ce-all/0.6.0/docker-compose.yml b/apps/paopao-ce-all/0.6.0/docker-compose.yml new file mode 100644 index 000000000..ae3f69b0e --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + paopao-ce: + image: bitbus/paopao-ce:all-in-one-v0.6.0-alpha.2 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + networks: + - 1panel-network + restart: always + ports: + - ${PANEL_APP_PORT_HTTP}:8008 + - ${PANEL_APP_PORT_MEILI}:7700 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${PAOPAO_CE_ROOT_PATH}/config/config.yaml:/app/config.yaml + - ${PAOPAO_CE_ROOT_PATH}/custom:/app/custom + - ${PAOPAO_CE_ROOT_PATH}/meili_data:/app/meili_data diff --git a/apps/paopao-ce-all/0.6.0/envs/default.env b/apps/paopao-ce-all/0.6.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/paopao-ce-all/0.6.0/envs/global.env b/apps/paopao-ce-all/0.6.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/paopao-ce-all/0.6.0/scripts/init.sh b/apps/paopao-ce-all/0.6.0/scripts/init.sh new file mode 100644 index 000000000..061e6eb44 --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/scripts/init.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + # setup-2 copy config file + mkdir -p "$PAOPAO_CE_ROOT_PATH" + mkdir -p "$PAOPAO_CE_ROOT_PATH/config" + cp ./conf/config.yaml "$PAOPAO_CE_ROOT_PATH/config/config.yaml" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/paopao-ce-all/0.6.0/scripts/uninstall.sh b/apps/paopao-ce-all/0.6.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/paopao-ce-all/0.6.0/scripts/upgrade.sh b/apps/paopao-ce-all/0.6.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/paopao-ce-all/0.6.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/paopao-ce-all/README.md b/apps/paopao-ce-all/README.md new file mode 100644 index 000000000..9f5ab1878 --- /dev/null +++ b/apps/paopao-ce-all/README.md @@ -0,0 +1,29 @@ +# 泡泡广场 All-in-One + +清新文艺微社区 + +![泡泡广场](https://file.lifebus.top/imgs/paopao_ce_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 项目简介 + +paopao-ce 是一个利用 业余时间 本着 "Just for fun just do it." 的心态 持续有序 +开发/优化/维护的开源项目,没有KPI考核、没有Roadmap进度压力、没有技术支持日程安排,或许有些许不足之处,但是重在精神可嘉。 +借用网络中的话 "F*k talk, f*k of tech innovation, Shut up and show me your code." +一切都因更好的体验,一切都是为了爱好,一切都在代码里;期待老铁们加入,一起开发、一起折腾、一起快乐。 + +## 修改配置文件 + +请在持久化目录中修改配置文件 `config.yaml` +,配置文件中的配置项请参考 [配置文件说明](https://github.com/rocboss/paopao-ce/blob/main/docs/deploy/core/001-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E.md) + +## 应用说明 + +由于该应用尚不支持环境变量配置,因此需要修改配置文件 `config.yaml`,达到配置应用的目的。 + +由于配置文件中的配置项较多,因此需要根据实际情况进行修改。修改完成后,重建应用即可完成新配置的读取。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/paopao-ce-all/data.yml b/apps/paopao-ce-all/data.yml new file mode 100644 index 000000000..da8c9bd53 --- /dev/null +++ b/apps/paopao-ce-all/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: paopao-ce-all + name: 泡泡广场 All-in-One + tags: + - WebSite + - Local + shortDescZh: 清新文艺微社区 + shortDescEn: An artistic "twitter like" community + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.paopao.info/ + github: https://github.com/rocboss/paopao-ce/ + document: https://github.com/rocboss/paopao-ce/ diff --git a/apps/paopao-ce-all/logo.png b/apps/paopao-ce-all/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cda80004b212ab85a0176934dc8eb6d3c8df9303 GIT binary patch literal 37012 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

lH-!%*B;2UtYAi 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 TH>mXloQKIRb9jxROYHvu6*+vp literal 0 HcmV?d00001 diff --git a/apps/topiam-ce/2.0.0/data.yml b/apps/topiam-ce/2.0.0/data.yml new file mode 100644 index 000000000..bf9c6b721 --- /dev/null +++ b/apps/topiam-ce/2.0.0/data.yml @@ -0,0 +1,124 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: 1898 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + key: admin + envKey: ADMIN_USERNAME + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + rule: paramCommon + type: text + - default: "topiam.cn" + edit: true + key: ADMIN_PASSWORD + envKey: topiam.cn + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: password + - default: "127.0.0.1" + edit: true + envKey: DB_HOST + labelZh: 数据库 主机 + labelEn: Database Host + required: true + type: text + - default: 3306 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "topiam" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_USER_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "topiam" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password diff --git a/apps/topiam-ce/2.0.0/docker-compose.yml b/apps/topiam-ce/2.0.0/docker-compose.yml new file mode 100644 index 000000000..b10ae429d --- /dev/null +++ b/apps/topiam-ce/2.0.0/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true + +services: + topiam-ce: + image: registry.cn-hangzhou.aliyuncs.com/topiam/topiam-ce:2.0.0 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1898 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${TOPIAM_CE_ROOT_PATH}/conf:/opt/topiam/conf + - ${TOPIAM_CE_ROOT_PATH}/logs:/opt/topiam/logs + environment: + - INITIAL_PASSWORD_VALUE=ADMIN_PASSWORD + - spring.datasource.url=jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true + - spring.datasource.username=${DB_USER} + - spring.datasource.password=${DB_USER_PASSWORD} + - spring.data.redis.host=${REDIS_HOSTNAME} + - spring.data.redis.port=${REDIS_PORT} + - spring.data.redis.password=${REDIS_PASSWORD} + - spring.data.redis.database=${REDIS_DBINDEX} diff --git a/apps/topiam-ce/2.0.0/scripts/init.sh b/apps/topiam-ce/2.0.0/scripts/init.sh new file mode 100644 index 000000000..2d5a8efca --- /dev/null +++ b/apps/topiam-ce/2.0.0/scripts/init.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +chown -R 1001:1001 data/logs + diff --git a/apps/topiam-ce/README.md b/apps/topiam-ce/README.md new file mode 100644 index 000000000..a90618490 --- /dev/null +++ b/apps/topiam-ce/README.md @@ -0,0 +1,34 @@ +# TOPIAM + +IAM/IDaaS 身份管理平台 + +![TOPIAM](https://file.lifebus.top/imgs/topiam_ce_cover.png) + +TOPIAM(Top Identity and Access Management),是一款开源的身份管理与访问控制系统,广泛应用于政府、企业内部、教育机构等身份认证场景。作为一款专注于身份管理与访问控制场景的软件产品,TOPIAM +支持 OIDC、OAuth2、SAML2、JWT、CAS 等主流认证协议,并能够集成钉钉、企业微信、飞书、LDAP、AD 等多种身份源,轻松实现用户全生命周期管理与数据同步。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用简介 + ++ 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。 ++ 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业 OA + 平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。 ++ 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。 ++ 支持微信、微博、QQ 等社交认证集成,使企业具有快速纳入互联网化认证能力。 ++ 支持 SAML2,OAuth2,OIDC,CAS,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。 ++ 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。 ++ 提供标准 REST 和 SCIM2.0 接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。 ++ 开源、安全、自主可控。 + +TOPIAM 数字身份管控平台为企业提供一套集中式的账号、权限、认证、审计工具,帮助企业打通身份数据孤岛,实现“一个账号、一次认证、多点通行”的效果,强化企业安全体系的同时,提升组织管理效率,助力企业数字化升级转型。 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`topiam.cn` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/topiam-ce/data.yml b/apps/topiam-ce/data.yml new file mode 100644 index 000000000..bad7fdf56 --- /dev/null +++ b/apps/topiam-ce/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: topiam-ce + name: TOPIAM + tags: + - WebSite + - Middleware + - Local + shortDescZh: IAM/IDaaS 身份管理平台 + shortDescEn: IAM/IDaaS Identity Management Platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://topiam.cn/ + github: https://github.com/topiam/eiam/ + document: https://topiam.cn/docs/overview/introduction/ diff --git a/apps/topiam-ce/logo.png b/apps/topiam-ce/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..70ef87ec260f92bd857f7f60357f8371b9603312 GIT binary patch literal 28216 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 literal 0 HcmV?d00001