From bace1cd1c073dfa4a918871ab8a4858f559c200d Mon Sep 17 00:00:00 2001 From: okxlin Date: Thu, 25 Apr 2024 00:17:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96=E9=80=82=E9=85=8Dsscms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sscms/7.3.0/.env.sample | 11 ++++ apps/sscms/7.3.0/data.yml | 64 ++++++++++++++++++++++++ apps/sscms/7.3.0/docker-compose.yml | 27 ++++++++++ apps/sscms/README.md | 72 ++------------------------- apps/sscms/data.yml | 32 ++++++------ apps/sscms/latest/.env.sample | 11 ++++ apps/sscms/latest/data.yml | 18 ++++++- apps/sscms/latest/docker-compose.yml | 48 ++++++++++-------- apps/sscms/logo.png | Bin 6496 -> 1943 bytes 9 files changed, 178 insertions(+), 105 deletions(-) create mode 100644 apps/sscms/7.3.0/.env.sample create mode 100644 apps/sscms/7.3.0/data.yml create mode 100644 apps/sscms/7.3.0/docker-compose.yml create mode 100644 apps/sscms/latest/.env.sample diff --git a/apps/sscms/7.3.0/.env.sample b/apps/sscms/7.3.0/.env.sample new file mode 100644 index 00000000..76bc0703 --- /dev/null +++ b/apps/sscms/7.3.0/.env.sample @@ -0,0 +1,11 @@ +CONTAINER_NAME="sscms" +PANEL_APP_PORT_HTTP="40221" +PANEL_DB_HOST="postgresql" +PANEL_DB_HOST_NAME="postgresql" +PANEL_DB_NAME="sscms_23w7b4" +PANEL_DB_PORT="5432" +PANEL_DB_TYPE="postgresql" +PANEL_DB_USER="sscms_PkXRtG" +PANEL_DB_USER_PASSWORD="sscms_k3StZP" +SSCMS_SECURITY_KEY="e2a3d303-ac9b-41ff-9154-930710af0845" +SSCMS_REDIS_CONNECTION_STRING="" \ No newline at end of file diff --git a/apps/sscms/7.3.0/data.yml b/apps/sscms/7.3.0/data.yml new file mode 100644 index 00000000..319579da --- /dev/null +++ b/apps/sscms/7.3.0/data.yml @@ -0,0 +1,64 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + envKey: PANEL_DB_TYPE + labelEn: Database Service + labelZh: 数据库服务 + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: PostgreSQL + value: postgresql + - default: sscms + envKey: PANEL_DB_NAME + labelEn: Database + labelZh: 数据库名 + random: true + required: true + rule: paramCommon + type: text + - default: sscms + envKey: PANEL_DB_USER + labelEn: User + labelZh: 数据库用户 + random: true + required: true + rule: paramCommon + type: text + - default: sscms + envKey: PANEL_DB_USER_PASSWORD + labelEn: Password + labelZh: 数据库用户密码 + random: true + required: true + rule: paramComplexity + type: password + - default: 40221 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: 'e2a3d303-ac9b-41ff-9154-930710af0845' + edit: true + envKey: SSCMS_SECURITY_KEY + labelEn: Communication key (GUID string) + labelZh: 通信密钥 (GUID 字符串) + required: true + type: text + - default: '' + edit: true + envKey: SSCMS_REDIS_CONNECTION_STRING + labelEn: Redis Connection Information (redis:6379,password=123456) + labelZh: Redis 连接信息 (redis:6379,password=123456) + required: false + type: text diff --git a/apps/sscms/7.3.0/docker-compose.yml b/apps/sscms/7.3.0/docker-compose.yml new file mode 100644 index 00000000..0cc45e32 --- /dev/null +++ b/apps/sscms/7.3.0/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3' +services: + sscms: + image: sscms/core:7.3.0 + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8080" + volumes: + - ./data:/app/wwwroot + environment: + - SSCMS_SECURITY_KEY=${SSCMS_SECURITY_KEY} + - SSCMS_DATABASE_TYPE=${PANEL_DB_TYPE} + - SSCMS_DATABASE_HOST=${PANEL_DB_HOST} + - SSCMS_DATABASE_PORT=${PANEL_DB_PORT} + - SSCMS_DATABASE_NAME=${PANEL_DB_NAME} + - SSCMS_DATABASE_USER=${PANEL_DB_USER} + - SSCMS_DATABASE_PASSWORD=${PANEL_DB_USER_PASSWORD} + - SSCMS_REDIS_CONNECTION_STRING=${SSCMS_REDIS_CONNECTION_STRING} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/sscms/README.md b/apps/sscms/README.md index 9aa809fe..67cebf18 100644 --- a/apps/sscms/README.md +++ b/apps/sscms/README.md @@ -1,3 +1,8 @@ +# 使用说明 + +打开浏览器,访问地址 http:///ss-admin/install,进入 SSCMS 系统安装界面 + +*** # SSCMS @@ -30,70 +35,3 @@ SSCMS 基于 .NET Core,能够以最低的成本、最少的人力投入在最 [《SSCMS REST API》](https://sscms.com/docs/v7/api/) [《SSCMS 数据结构》](https://sscms.com/docs/v7/model/) - -## SSCMS 源码结构 - -```code -│ sscms.sln Visual Studio 项目文件 -│ -├─docker Docker 配置文件 -├─src/Datory 数据库基础类 -├─src/SSCMS 接口、基础类 -├─src/SSCMS.Cli 命令行工具 -├─src/SSCMS.Core CMS核心代码 -├─src/SSCMS.Web CMS App -└─tests 测试 -``` - -## 发布跨平台版本 - -## 在 Docker 中运行 - -拉取最新版本的 SSCMS 镜像 - -```sh -docker pull sscms/core:latest -``` - -运行 SSCMS 容器 - -```sh -docker run -d \ - --name my-sscms \ - -p 80:80 \ - --restart=always \ - -v volume-sscms:/app/wwwroot \ - -e SSCMS_SECURITY_KEY=e2a3d303-ac9b-41ff-9154-930710af0845 \ - -e SSCMS_DATABASE_TYPE=SQLite \ - sscms/core -``` - -## 贡献代码 - -项目编译需要使用 Visual Studio 2022,你可以从这里下载 [Visual Studio Community 2022](https://www.visualstudio.com/downloads/) - -代码贡献有很多形式,从提交问题,撰写文档,到提交代码,我们欢迎任何形式的贡献! - -## 系统更新 - -SSCMS 产品将每隔两月发布新的正式版本,我们将在每次迭代中对核心功能、文档支持、功能插件以及网站模板四个方面进行持续改进。 - -## 问题与建议 - -如果发现任何 BUG 以及对产品使用的问题与建议,请提交至 [Github Issues](https://github.com/siteserver/cms/issues) 或者 [Gitee Issues](https://gitee.com/siteserver/cms/issues)。 - -## 关注最新动态 - -[![qrcode](https://sscms.com/assets/images/qrcode_for_wx.jpg)](https://sscms.com/) - -## 特别声明 - -SSCMS 项目已加入 [dotNET China](https://gitee.com/dotnetchina) 组织。
- -![dotnetchina](https://gitee.com/dotnetchina/home/raw/master/assets/dotnetchina-raw.png "dotNET China LOGO") - -## License - -[GNU Affero General Public License v3.0](LICENSE) - -Copyright (C) 2003-2023 SSCMS \ No newline at end of file diff --git a/apps/sscms/data.yml b/apps/sscms/data.yml index 8386862b..56b31c56 100644 --- a/apps/sscms/data.yml +++ b/apps/sscms/data.yml @@ -1,15 +1,19 @@ +name: SSCMS 内容管理系统 +tags: + - 建站 +title: 开源免费、企业级、可商用的CMS内容管理系统 +description: 开源免费、企业级、可商用的CMS内容管理系统 additionalProperties: - crossVersionUpdate: 'true' - document: https://sscms.com/docs/ - github: https://github.com/siteserver/cms - key: sscms - limit: 0 - name: SSCMS 内容管理系统 - shortDescEn: SiteServer CMS is an open source, free, enterprise-level, commercially - available CMS content management system. - shortDescZh: 开源免费、企业级、可商用的CMS内容管理系统 - tags: - - WebSite - - Tool - type: tool - website: https://sscms.com/ + key: sscms + name: SSCMS 内容管理系统 + tags: + - WebSite + shortDescZh: 开源免费、企业级、可商用的CMS内容管理系统 + shortDescEn: Open source free, enterprise-class, commercially available CMS content management system + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://sscms.com + github: https://github.com/siteserver/cms + document: https://sscms.com/docs diff --git a/apps/sscms/latest/.env.sample b/apps/sscms/latest/.env.sample new file mode 100644 index 00000000..76bc0703 --- /dev/null +++ b/apps/sscms/latest/.env.sample @@ -0,0 +1,11 @@ +CONTAINER_NAME="sscms" +PANEL_APP_PORT_HTTP="40221" +PANEL_DB_HOST="postgresql" +PANEL_DB_HOST_NAME="postgresql" +PANEL_DB_NAME="sscms_23w7b4" +PANEL_DB_PORT="5432" +PANEL_DB_TYPE="postgresql" +PANEL_DB_USER="sscms_PkXRtG" +PANEL_DB_USER_PASSWORD="sscms_k3StZP" +SSCMS_SECURITY_KEY="e2a3d303-ac9b-41ff-9154-930710af0845" +SSCMS_REDIS_CONNECTION_STRING="" \ No newline at end of file diff --git a/apps/sscms/latest/data.yml b/apps/sscms/latest/data.yml index f06a9055..319579da 100644 --- a/apps/sscms/latest/data.yml +++ b/apps/sscms/latest/data.yml @@ -40,11 +40,25 @@ additionalProperties: required: true rule: paramComplexity type: password - - default: 8080 + - default: 40221 edit: true envKey: PANEL_APP_PORT_HTTP labelEn: Port labelZh: 端口 required: true rule: paramPort - type: number \ No newline at end of file + type: number + - default: 'e2a3d303-ac9b-41ff-9154-930710af0845' + edit: true + envKey: SSCMS_SECURITY_KEY + labelEn: Communication key (GUID string) + labelZh: 通信密钥 (GUID 字符串) + required: true + type: text + - default: '' + edit: true + envKey: SSCMS_REDIS_CONNECTION_STRING + labelEn: Redis Connection Information (redis:6379,password=123456) + labelZh: Redis 连接信息 (redis:6379,password=123456) + required: false + type: text diff --git a/apps/sscms/latest/docker-compose.yml b/apps/sscms/latest/docker-compose.yml index 917065c1..d52f6333 100644 --- a/apps/sscms/latest/docker-compose.yml +++ b/apps/sscms/latest/docker-compose.yml @@ -1,23 +1,27 @@ -version: '3.9' +version: '3' services: - sscms: - container_name: ${CONTAINER_NAME} - image: sscms/core:latest - volumes: - - ./data:/app/wwwroot - ports: - - ${PANEL_APP_PORT_HTTP}:8080 - restart: always - environment: - - SSCMS_SECURITY_KEY=e2a3d303-ac9b-41ff-9154-930710af0845 - - SSCMS_DATABASE_TYPE=${PANEL_DB_TYPE} - - SSCMS_DATABASE_HOST=${PANEL_DB_HOST} - - SSCMS_DATABASE_PORT=${PANEL_DB_PORT} - - SSCMS_DATABASE_NAME=${PANEL_DB_NAME} - - SSCMS_DATABASE_USER=${PANEL_DB_USER} - - SSCMS_DATABASE_PASSWORD=${PANEL_DB_USER_PASSWORD} - networks: - - 1panel-network -networks: - 1panel-network: - external: true \ No newline at end of file + sscms: + image: sscms/core:latest + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8080" + volumes: + - ./data:/app/wwwroot + environment: + - SSCMS_SECURITY_KEY=${SSCMS_SECURITY_KEY} + - SSCMS_DATABASE_TYPE=${PANEL_DB_TYPE} + - SSCMS_DATABASE_HOST=${PANEL_DB_HOST} + - SSCMS_DATABASE_PORT=${PANEL_DB_PORT} + - SSCMS_DATABASE_NAME=${PANEL_DB_NAME} + - SSCMS_DATABASE_USER=${PANEL_DB_USER} + - SSCMS_DATABASE_PASSWORD=${PANEL_DB_USER_PASSWORD} + - SSCMS_REDIS_CONNECTION_STRING=${SSCMS_REDIS_CONNECTION_STRING} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/sscms/logo.png b/apps/sscms/logo.png index df48f0d22077d067eba6de5ff53fd7ab1b976080..961d068e508a7d45bbb725977e549d57f470e1a4 100644 GIT binary patch literal 1943 zcmd6o`9Bj30LJH@W16{&>K#(5m8*~=$0jMpTVnGvW6lV;G?7(r?DcMR zkgM33NZzs#-m=`yjNGKR{)_kXd7kg{{P_I#(P>XFmC5pwv$) zsIL7a;EubChvTopzWe`?ByPv@=On|pOUTQB=Pmv1lu;Spy?iGB;bv#XVNF3p$qcK^ z^I&qk{9>rH#R}XPgoK#DK1Jbd<{Gb`dk+A}lAICt9*H0M{E_b>0>#rZ7I;L-mtC}=5`{3glX5a`ZF{VIC)iiqrm2B z#z1O%+PH~HXgQhQydbw`oFcAt#7`oc>@L=;FRQ|jE1OS-flgR_H``NrNgc{~>k;Xp2HE&9j_C5NgQ`_ovG-6nm=oi9CwSrkbU&V~ zwxuVv)QE$bS*B+97t!L4;aNNBt-37aYpJpP1o)e>BqD^mewf;3omC>;%!FZhF!;$A583&1w? zgckONDT^nAn8M~C1%_ujnn7z6H6WA1mxh6`7^&ZV!K6~FK=0~5+`Txm@^3*c{0K8$ zR}5OWq;`r_ycwWUSbBP5U&fZn53KZ+q!-SzaaAfhdqOsPp0e*q#@VMOM~vvtQF@M{ zUcADPU@Y1zn$zY;C!WX{HmX;)J-()d=(c|V_XBv4HgG+ z_U@`F#HdTE1bnZI;_(k;H`)&H+5ezTywFByi%{_ z#CIA7l9S=DXU{;6xeFnay{YZ}X7A8;4UTQO4AgyX31E@!U<|(#^rypbn>waVIk1y@ z^C~fFVdBW!u%kxOmdmj^}1Oo;i$owtb$4bO&wn-@mzkV}oQ7EJm5jN$T-k)h%QlARw-PM=t zE#S_vcT8wfsuzu*T?HJdaz z@v3bn?A4wIHd5^rW9xv0K`c{7{u*PQ$t@VHO)Tg1`)q)gHIl@Bkq!V3jpOe1yA ztb*k`ww>XE6m<4ZN4qA&mlv2=!t^>ZWcL~3#l-hGY zp%(-)W?&K4Tt1xZYN^Lg=A6tXhoYmK|V+`j7 ztyW%!p8AdGe?|G@&}VKZrtf%OnBh>iK;&_TxIaeUJj&T~RXAp`?i>9`lFAjPWbyV9 z;qjcarH6Fzq}LRVI@spHJXiJ4F$Sld0Ix_6_FHhDCX_!i{!s~$o%kz9-oKT``AT^7 z0Ku!?^C=HAM{Zj|&RFJclZj7({z|hF@Cyy=689AsbjG>jISU5G5@>3huDE!2a?eTm z#eCb&6Ky^s@H+XPU<)I&L=_+L8-A{rOi&hk(X{_LoNd^3@BRUx;q#@VpI2#Twxa8L zj|%@e3T>0y4WuNDgqOLVuwPu=iL|{-3Be$xUhHSGey>TNO(^u4Fce&SX}ka7#=Y|^ zoT|qg?T8hvE!yJPhyVjxbF0K6b;bM&fanIflZ+m9)7{~gvv8dR7mbbD>p<7Qeo^|G zBsFX%oW<@!A#CA#bs15+ev~0AU>B#z9TOK|rW@$sy{ktp%6v11iP(QSMBBirk|)mk;GHOMq0Q&VoX+H;#nzgRd=Zv_yJUIiXuzaKl zU^!J|_AFxOR)6Nz!K*wxC^6dHJR)a#;8v-y>Wd$o*ghZoJ&WpMt}K3TRR@6`7E%~v z)pNKY9PV%Xzw5vIxYbyz#cBr94~S+UR#n4fLJFBrAN6%B&#^{|HS_D2MUPp&C*Qlx_!SM*4Yt>sB^%k{Ra@)oRt6o literal 6496 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 I4YmpUFJma>X8-^I