当前位置: 首页 > wzjs >正文

easyui做网站做微信问卷调查的网站

easyui做网站,做微信问卷调查的网站,query post wordpress,销售部网站建设费折腾的意义 为什么要自己搭建一个笔记平台?没理由,就是突然想试试。有时候突然有个想法,搜了一下正好有合适的方案,就顺手试一下。 其实已经有很多成熟的笔记软件,例如Notion/OneNote,但谁不想要一个数据完…

折腾的意义

为什么要自己搭建一个笔记平台?没理由,就是突然想试试。有时候突然有个想法,搜了一下正好有合适的方案,就顺手试一下。

其实已经有很多成熟的笔记软件,例如Notion/OneNote,但谁不想要一个数据完全在自己服务器的笔记呢。

开始搭建

这个搭建是真的麻烦,需要一堆东西:

  • redis
  • postgresql
  • minio
  • keycloak

这种依赖多镜像的平台一般推荐docker-compose来搭建,不过我还是喜欢使用docker一个容器一个容器的启动。postgre和redis的容器其实可以复用,没必要每次都重新启动一个,使用docker-compose也可以通过环境变量传递。

docker可用源可以看:https://www.wangdu.site/course/2109.html,我现在用的是docker.mybacc.com,只需要在pull镜像的时候加上,然后重命名一下镜像就可以,源失效的太快,每次改源文件更麻烦。

另外因为证书的申请需要80/443端口,而我使用的是本地电脑没有公网的80和443端口,所以只能部署http的服务,测试会无法使用邮箱登录。

redis

docker pull docker.mybacc.com/redis:7.4.2-alpine

docker tag docker.mybacc.com/redis:7.4.2-alpine redis:7.4.2-alpine

docker rmi docker.mybacc.com/redis:7.4.2-alpine

docker run -d \--name redis \-p 6379:6379 \-v ~/docker-data/redis-data:/data \redis:7.4.2-alpine \redis-server --save 60 1 --loglevel warning --requirepass 密码
postgresql

docker pull docker.mybacc.com/postgres:15.12

docker run -d \--name postgres \-e POSTGRES_PASSWORD=密码 \-e POSTGRES_USER=用户名 \-v ~/docker-data/postgres-data:/var/lib/postgresql/data \-p 5432:5432 \postgres:15.12
minio

https://github.com/minio/minio

这是个文件服务,在outline里做图床用的。直接复制图片到网页里就能上传到minio,不过删除好像需要到minio删除,这个后面研究。

docker pull minio/minio:RELEASE.2025-03-12T18-04-18Z

docker run -d \--name minio \-p 29000:9000 \-p 29001:9001 \-e MINIO_REGION_NAME="cn-homelab-1" \-e MINIO_ROOT_USER="minio用户名" \-e MINIO_ROOT_PASSWORD="minio密码" \-v ~/docker-data/minio-data:/data \minio/minio:RELEASE.2025-03-12T18-04-18Z server /data --console-address ":9001"

创建完成后新建一个名为outline的Buckets,填个名称就行,其他的都默认。

然后设置Region(如果启动的时候给定了MINIO_REGION_NAME环境变量,这里应该有值了),名称随意,保存之后会提示需要重启,点击重启就保存成功了。这个值是后面的AWS_REGION的值

keycloak

https://github.com/keycloak/keycloak

这个是有什么用的就说来话长,反正在outline里就起个登录作用。

docker run -d \--name keycloak \-p 8080:8080 \-e KC_DB=postgres \-e KC_DB_URL=jdbc:postgresql://ip:端口/数据库名称 \-e KC_DB_USERNAME=数据库用户名 \-e KC_DB_PASSWORD=数据库密码 \-e KC_BOOTSTRAP_ADMIN_USERNAME=keycloak用户名 \-e KC_BOOTSTRAP_ADMIN_PASSWORD=keycloak密码 \keycloak/keycloak:26.1.4 start-dev
  • KC_DB: 要使用的数据库,支持的类型有: mariadb、mssql、mysql、oracle、postgres。如果使用的时候有问题,可以换官网推荐的版本
  • KC_DB_URL: 数据库链接,数据库需要自己建
  • KC_DB_USERNAME:数据库的用户名
  • KC_DB_PASSWORD:数据库的密码
  • KC_BOOTSTRAP_ADMIN_USERNAME:keycloak的用户名,自己设置
  • KC_BOOTSTRAP_ADMIN_PASSWORD:keycloak的密码,自己设置

启动的时候有个红色的提示,只是让你不要在生产环境下使用开发者模式(start-dev)。不过要是使用start启动的话会强制https,比较麻烦。当然你也可以使用steveltn/https-portal镜像来一键配置HTTPS,需要80和443端口才能申请证书.

刚启动的时候通过8080端口访问web界面会出现HTTPS required的提示,导致无法正常登录,可以通过进入到容器的shell,执行两个命令来忽略它

docker exec -it keycloak bash
/opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080 --realm master --user 用户名
然后输入设置的密码,再执行下面这行
/opt/keycloak/bin/kcadm.sh update realms/master  -s sslRequired=NONE

接着刷新页面就可以正常登录了,然后开始创建realm,名称填outline

接着再outline下创建Clients

第三步的值需要填你outline部署的地址,可以加端口,例如下面的

Root URL: http://xxxx.example.com:3000/
Home URL: http://xxxx.example.com:3000/
Valid redirect URIs: http://xxxx.example.com:3000/*

然后复制Credentials选项卡的Client Secret内容,这个是下面要用到的OIDC_CLIENT_SECRET

接着创建一个用来登录的用户,后面就是跳转到keycloak然后用这个用户登录进去

然后设置这个用户的密码,这个Temporary的选项可以关了,开启的话用户第一次登录需要修改密码

这里还需要禁用outline下的ssl

docker exec -it keycloak bash
/opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080 --realm master --user 用户名
然后输入设置的密码,再执行下面这行
/opt/keycloak/bin/kcadm.sh update realms/outline  -s sslRequired=NONE
outline

现在万事俱备,只需要启动outline了

docker pull outlinewiki/outline:0.82.0

docker run -d \-p 3000:3000 \--name outline \-v ~/docker-data/outline-data:/var/lib/outline/data \-e DATABASE_URL=postgres://用户名:密码@域名:端口/数据库名 \-e REDIS_URL=redis://:密码@域名:端口/0 \-e PGSSLMODE=disable \-e FORCE_HTTPS=false \-e SECRET_KEY=22a3dbd6fd96864cb125504826b153cf60a454e43a019afe4692e06f6cacd700 \-e UTILS_SECRET=11121c684ca0dc0352bf7567db9aaf9bc26c45fc34cacd5dbe883c086d7c7e00 \-e URL=http://域名:3000 \-e OIDC_CLIENT_ID=outline \-e OIDC_CLIENT_SECRET=xxxxxxxxxxxxxxx \-e OIDC_AUTH_URI=http://域名:端口/realms/outline/protocol/openid-connect/auth \-e OIDC_TOKEN_URI=http://域名:端口/realms/outline/protocol/openid-connect/token \-e OIDC_USERINFO_URI=http://域名:端口/realms/outline/protocol/openid-connect/userinfo \-e OIDC_USERNAME_CLAIM=preferred_username \-e OIDC_DISPLAY_NAME=keycloak \-e OIDC_SCOPES="openid profile email" \-e AWS_ACCESS_KEY_ID=minio用户名 \-e AWS_SECRET_ACCESS_KEY=minio密码 \-e AWS_S3_UPLOAD_BUCKET_URL=http://域名:端口 \-e AWS_S3_UPLOAD_BUCKET_NAME=outline \-e AWS_REGION=cn-homelab-1 \-e FILE_STORAGE_UPLOAD_MAX_SIZE=26214400 \-e AWS_S3_FORCE_PATH_STYLE=true \-e AWS_S3_ACL=private \outlinewiki/outline:0.82.0

环境变量的解释可以看:https://github.com/outline/outline/blob/main/.env.sample

  • DATABASE_URL: 指定postgre数据库的连接信息
  • REDIS_URL:指定redis的连接信息
  • PGSSLMODE:不用ssl连接postgre数据库
  • FORCE_HTTPS:禁用强制https
  • SECRET_KEY:不知道有什么用,可以通过openssl rand -hex 32生成
  • UTILS_SECRET: 不知道有什么用,可以通过openssl rand -hex 32生成
  • URL:outline的访问地址,就是ip加上-p映射的端口
  • OIDC_CLIENT_ID: 这个是在keycloak里设置的Clients里的Client ID
  • OIDC_CLIENT_SECRET: 这个就算Credentials里的Client Secret
  • OIDC_AUTH_URI:这个链接的构成:http://keycloak的域名:keycloak的端口/realms/keycloak的realm/protocol/openid-connect/auth
  • OIDC_TOKEN_URI:跟上面一样
  • OIDC_USERINFO_URI:跟上面一样
  • OIDC_USERNAME_CLAIM:不知道有什么用,照抄吧
  • OIDC_DISPLAY_NAME:没什么用
  • AWS_ACCESS_KEY_ID:minio用户名
  • AWS_SECRET_ACCESS_KEY:minio密码
  • AWS_S3_UPLOAD_BUCKET_URL:minio连接地址,端口是9000,不是9001(这个是web界面的地址)
  • AWS_S3_UPLOAD_BUCKET_NAME:bucket的名称
  • AWS_REGION:region
  • FILE_STORAGE_UPLOAD_MAX_SIZE:设置上传的最大大小,这个数字是25M
  • AWS_S3_FORCE_PATH_STYLE:不知道什么用
  • AWS_S3_ACL:不知道什么用

接着访问outline的端口就能跳转到keycloak的界面,输入之前创建的用户名密码就登陆成功了,复制图片到网页也能正常上传。等我体验一下再说怎么样

从这里就能看出docker-compose的优点了。

参考链接
  • keycloak官方文档: https://www.keycloak.org/guides#server
  • 搭建Outline私人Wiki私人知识库: https://luckzym.com/posts/a239536c/
  • docker基于本地存储部署outline团队知识库: https://blog.csdn.net/networken/article/details/141961843
  • outline官方文档:https://docs.getoutline.com/s/hosting/doc/hosting-outline-nipGaCRBDu

文章转载自:

http://aXa6FzTo.hphrz.cn
http://CrpMb86T.hphrz.cn
http://BGo7DZnf.hphrz.cn
http://Wzk73iIc.hphrz.cn
http://WuLTzZWn.hphrz.cn
http://7Oh1U6Bd.hphrz.cn
http://dM86mK86.hphrz.cn
http://eMqi2GcZ.hphrz.cn
http://b9hxnpUw.hphrz.cn
http://trcBSKfW.hphrz.cn
http://hySLjpLy.hphrz.cn
http://Ze4L7XvQ.hphrz.cn
http://gXzO9HRD.hphrz.cn
http://MveVa2FK.hphrz.cn
http://7YvTPHcS.hphrz.cn
http://eY2r6ldo.hphrz.cn
http://RsbebXYF.hphrz.cn
http://na4NOpfV.hphrz.cn
http://ZQBf54zH.hphrz.cn
http://rfU98OKl.hphrz.cn
http://TwK5ubut.hphrz.cn
http://pf3ZK2WK.hphrz.cn
http://nlartgvQ.hphrz.cn
http://Pjo04tnb.hphrz.cn
http://BBwpUIQJ.hphrz.cn
http://F1ju15S4.hphrz.cn
http://MRJA7oGG.hphrz.cn
http://0eORWoOG.hphrz.cn
http://eyWMCJYa.hphrz.cn
http://CE2MM0di.hphrz.cn
http://www.dtcms.com/wzjs/610257.html

相关文章:

  • 专业模板网站设计公司功能网站模板
  • 网站建设所需服务器费用北京网站手机站建设公司
  • 山东省建设厅网站首页深圳网页设计机构
  • 业务员自己掏钱做网站可以吗关键词优化软件哪家好
  • 制作网站一般要多少钱优化神马网站关键词排名价格
  • 做淘宝客网站域名是别人的网站开发在线培训
  • 中国古建筑网站十堰seo优化方法
  • 智能建站模板用html制作登录注册界面
  • 专业做合同的网站做网站手机版和电脑版怎么区分
  • 简单个人网站源码wordpress 页面中读取文章列表
  • iis wordpress ftp太原seo排名
  • 麦吉太原网站建设丽怎么代理长春火车站位置
  • 网站怎么做百度商桥如何做推广引流赚钱
  • 网站展示型和营销型有什么区别店铺网络营销策划方案
  • 网站出现搜索wordpress中文购物
  • wordpress 模板网站有利于做seo吗</a> </li> <li> <a href="/wzjs/610236.html">网站的建设属于无形资产吗江苏省两学一做网站</a> </li> <li> <a href="/wzjs/610235.html">为什么网站收录在百度突然没有了装饰设计收费标准2020</a> </li> <li> <a href="/wzjs/610233.html">河北省和城乡住房建设厅网站首页新乡网络推广外包</a> </li> <li> <a href="/wzjs/610232.html">东莞seo建站广告wordpress系统流程图</a> </li> <li> <a href="/wzjs/610231.html">注册网站域名平台网站制作的网站</a> </li> <li> <a href="/wzjs/610230.html">dnf怎么做提卡网站中国建设银行网站客户注册码</a> </li> <li> <a href="/wzjs/610228.html">上海网络公司网站建设国内简洁大气网站推荐</a> </li> <li> <a href="/wzjs/610227.html">网站组网图郑州网络公司做医疗网站</a> </li> <li> <a href="/wzjs/610226.html">无锡网站建设 微信制作网站注册页面模板</a> </li> <li> <a href="/wzjs/610225.html">广州模板建站多少钱想学网站建设 如何开始</a> </li> <li> <a href="/wzjs/610224.html">丰台网站开发联系电话怎么给网站做优化</a> </li> <li> <a href="/wzjs/610223.html">做网站是不是要学编程app软件开发官网</a> </li> <li> <a href="/wzjs/610222.html">纯文本网站连接营销软文是什么</a> </li> <li> <a href="/wzjs/610221.html">网站优化包括整站优化吗舟山建设技术学校网站首页</a> </li> </div> </article> </main> </div> </div> <aside id="secondary" class="widget-area sidebar"> <div class="widget widget_posts_thumbnail" style="margin-top:6px;"> <h2 class="widget-title">最新文章</h2> <ul> <li class="clear"> <a href="/wzjs/639513.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/交互网站图免费网页代理在线" alt=" 交互网站图免费网页代理在线" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639513.html" rel="bookmark"> 交互网站图免费网页代理在线</a> <div class="entry-meta">2025/9/7 5:49:11</div></div> </li> <li class="clear"> <a href="/wzjs/639511.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/网站免费模板制作潮州外贸网站建设" alt=" 网站免费模板制作潮州外贸网站建设" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639511.html" rel="bookmark"> 网站免费模板制作潮州外贸网站建设</a> <div class="entry-meta">2025/9/7 5:48:58</div></div> </li> <li class="clear"> <a href="/wzjs/639510.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/滕州网站架设wordpress 微信连接数据库文件" alt=" 滕州网站架设wordpress 微信连接数据库文件" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639510.html" rel="bookmark"> 滕州网站架设wordpress 微信连接数据库文件</a> <div class="entry-meta">2025/9/7 5:48:51</div></div> </li> <li class="clear"> <a href="/wzjs/639509.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/做网站排名软件玩具网站建设策划书流程" alt=" 做网站排名软件玩具网站建设策划书流程" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639509.html" rel="bookmark"> 做网站排名软件玩具网站建设策划书流程</a> <div class="entry-meta">2025/9/7 5:48:44</div></div> </li> <li class="clear"> <a href="/wzjs/639508.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/常德海关网站中国建设银行电话95533" alt=" 常德海关网站中国建设银行电话95533" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639508.html" rel="bookmark"> 常德海关网站中国建设银行电话95533</a> <div class="entry-meta">2025/9/7 5:48:31</div></div> </li> <li class="clear"> <a href="/wzjs/639507.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/触摸屏网站建设网页导航条制作教程" alt=" 触摸屏网站建设网页导航条制作教程" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639507.html" rel="bookmark"> 触摸屏网站建设网页导航条制作教程</a> <div class="entry-meta">2025/9/7 5:48:25</div></div> </li> <li class="clear"> <a href="/wzjs/639513.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/交互网站图免费网页代理在线" alt=" 交互网站图免费网页代理在线" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639513.html" rel="bookmark"> 交互网站图免费网页代理在线</a> <div class="entry-meta">2025/9/7 5:49:11</div></div> </li> <li class="clear"> <a href="/wzjs/639511.html" rel="bookmark"> <div class="thumbnail-wrap"> <img width="120" height="80" src="http://pic.xiahunao.cn/yaotu/网站免费模板制作潮州外贸网站建设" alt=" 网站免费模板制作潮州外贸网站建设" /> </div> </a> <div class="entry-wrap"> <a href="/wzjs/639511.html" rel="bookmark"> 网站免费模板制作潮州外贸网站建设</a> <div class="entry-meta">2025/9/7 5:48:58</div></div> </li> </ul> </div> <div class="leftdiv2"> </div> </aside> </div> <footer id="colophon" class="site-footer"> <div class="clear"></div> <div id="site-bottom" class="clear"> <div class="container"> <div class="menu-m_footer-container"> <ul id="footer-menu" class="footer-nav"> <li> <strong> <a href="/">dtcms介绍</a></strong> </li> <li> <strong> <a href="/">商务合作</a></strong> </li> <li> <strong> <a href="/">免责声明</a></strong> </li> </ul> </div> <div class="site-info"> <p>CopyRight © <a href="/">dtcms</a>版权所有 </p> </div> </div> </div> </footer> </div> <div id="back-top"> <a href="#top" title="返回顶部"> <svg width="38" height="38" viewbox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect width="48" height="48" fill="white" fill-opacity="0.01" /> <path d="M24 44C35.0457 44 44 35.0457 44 24C44 12.9543 35.0457 4 24 4C12.9543 4 4 12.9543 4 24C4 35.0457 12.9543 44 24 44Z" fill="#3d4de6" stroke="#3d4de6" stroke-width="4" stroke-linejoin="round" /> <path d="M24 33.5V15.5" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" /> <path d="M33 24.5L24 15.5L15 24.5" stroke="#FFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" /></svg> </a> </div> <script src='/templates/nzzt/js/common.js'></script> <script> $(function(){ $('.source_url').text('原文地址:'); }); </script> </body> </html>