-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
136 lines (74 loc) · 28.5 KB
/
atom.xml
File metadata and controls
136 lines (74 loc) · 28.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>RFW Blog</title>
<subtitle>Blog for RailForWork</subtitle>
<link href="https://blog.rail.moe/atom.xml" rel="self"/>
<link href="https://blog.rail.moe/"/>
<updated>2022-01-02T17:30:46.202Z</updated>
<id>https://blog.rail.moe/</id>
<author>
<name>RailForWork</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>天坑:如何将Discourse与SimpleSAMLphp连接,作为SAML身份验证提供者(IDP)使用</title>
<link href="https://blog.rail.moe/2022/01/03/Discourse-SAML-simpleSAMLphp/"/>
<id>https://blog.rail.moe/2022/01/03/Discourse-SAML-simpleSAMLphp/</id>
<published>2022-01-02T16:19:59.000Z</published>
<updated>2022-01-02T17:30:46.202Z</updated>
<content type="html"><![CDATA[<p>Discourse其实内置了一个DiscourseSSO(现在叫DiscourseConnect),也就是官网那篇<a href="https://meta.discourse.org/t/using-discourse-as-an-identity-provider-sso-discourseconnect/32974">“Using Discourse as an identity provider (SSO, DiscourseConnect)”</a>,但是你只要多看几眼就会发现,它提供的并不是标准SAML或者Oauth协议,而是一套它自己写好的API之类的东西。</p><p>那么怎么办呢?没关系,有一个巨佬已经帮我们写好了Discourse-SimpleSAMLphp这个插件了,这个插件允许我们将DiscourseConnect(DiscourseSSO)连接到SimpleSAMLphp然后使用SimpleSAMLphp来提供标准SAML服务。</p><p>那么接下来我们只需要花那么一丢丢时间弄懂什么是SimpleSAMLphp以及怎么配置它就好啦(笑死,根本弄不懂</p><p>首先是从官网下载它的本体。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://simplesamlphp.org/download?latest</span><br></pre></td></tr></table></figure><p>然后解压</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar zxf download?latest</span><br></pre></td></tr></table></figure><p>然后把解压出来的东西挪到/var/simplesamlphp这个目录</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/</span><br></pre></td></tr></table></figure><p>然后将该文件夹授予www-data用户和755权限</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo chown -R www-data:www-data /var/simplesamlphp/</span><br><span class="line">sudo chmod -R 755 /var/simplesamlphp/</span><br></pre></td></tr></table></figure><p>它们默认是从GitHub抓的,所以要是你没开代理,那麻烦你下载它们的包之后上传到 /var/simplesamlphp 去。</p><p>你可能会问为什么一定得是在/var/simplesamlphp,很简单,因为官方教程就是放在这的,放别的地方要额外配置。</p><p>然后是将首页指向它文件夹里的www,然后配置nginx。如果你是apache,那它官网有对应的配置。</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">upstream</span> saml-php-handler {</span><br><span class="line"> <span class="attribute">server</span> unix:/run/php/php8.0-fpm.sock;</span><br><span class="line">}</span><br><span class="line"><span class="section">server</span> {</span><br><span class="line"> <span class="attribute">listen</span> <span class="number">443</span> ssl;</span><br><span class="line"> <span class="attribute">server_name</span> 这里填你的域名;</span><br><span class="line"> <span class="attribute">index</span> index.php;</span><br><span class="line"> <span class="attribute">ssl_certificate</span> 这里填你的证书;</span><br><span class="line"> <span class="attribute">ssl_certificate_key</span> 这里填你的私钥;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">ssl_protocols</span> TLSv1.<span class="number">3</span> TLSv1.<span class="number">2</span>;</span><br><span class="line"> <span class="attribute">ssl_ciphers</span> EECDH+AESGCM:EDH+AESGCM;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">location</span><span class="regexp"> ^~</span> /simplesaml {</span><br><span class="line"> <span class="attribute">alias</span> /var/simplesamlphp/www;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">location</span> <span class="regexp">~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$</span> {</span><br><span class="line"> <span class="attribute">include</span> fastcgi_params;</span><br><span class="line"> <span class="attribute">fastcgi_pass</span> saml-php-handler;</span><br><span class="line"> <span class="attribute">fastcgi_param</span> SCRIPT_FILENAME $document_root$phpfile;</span><br><span class="line"> <span class="comment"># Must be prepended with the baseurlpath</span></span><br><span class="line"> <span class="attribute">fastcgi_param</span> SCRIPT_NAME /simplesaml$phpfile;</span><br><span class="line"> <span class="attribute">fastcgi_param</span> PATH_INFO $pathinfo if_not_empty;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>解释一下upstream saml-php-handler:saml-php-handler是为了防止你有别的已经占用了php-handler,就这么简单。在示例里我用的是php8.0,你在用什么版本的php就改成什么版本的。</p><p>然后更新一下源:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update</span><br></pre></td></tr></table></figure><p>然后安装软件包:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached</span><br></pre></td></tr></table></figure><p>注意,这里需要根据你php对应的版本来安装,比如你是php8.0,就需要在所有”php”的后面添8.0,如:php8.0-xml</p><p>安装完成后,重新启动 Nginx 以激活新的 PHP 扩展:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo systemctl restart Nginx</span><br></pre></td></tr></table></figure><p>然后生成一个盐:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl rand -base64 32</span><br></pre></td></tr></table></figure><p>复制下来这串盐。</p><p>然后打开/var/simplesamlphp/config/config.php</p><p>找到’auth.adminpassword’,改成你自己的密码;</p><p>找到’secretsalt’,改成你刚刚生成的那串盐;</p><p>找到’technicalcontact_name’,改成你的名字;</p><p>找到’technicalcontact_email’ ,改成你的邮箱;</p><p>找到 ‘language.default’,改成’zh’(也可以改成你的语言);</p><p>找到’timezone’,将 null 改成 ‘Asia/Shanghai’ (如果你在中国),或者改成你所在的地区;</p><p>然后打开 https://你的域名/simplesaml ,理论上它就能访问了。</p><p>然后安装composer。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">php composer-setup.php</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo mv composer.phar /usr/bin/composer</span><br></pre></td></tr></table></figure><p>然后理论上你就能直接敲 composer 来运行了。</p><p>然后去/var/simplesamlphp ,编辑composer.json ,将version改成dev-master。这里这么做的原因是将discourse连接到simplesamlphp的那个插件在设置里写定了要求版本是dev-master,但实际上默认那里面写的是版本号,所以需要将版本号改为dev-master。</p><p>然后开始安装这个插件。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">composer require swcc/simplesamlphp-module-authdiscourse dev-master --ignore-platform-reqs</span><br></pre></td></tr></table></figure><p>–ignore-platform-reqs 这个参数是为了防止你使用的php版本是8.0而出现错误。<br>不出意外的话你应该能看见composer在/var/simplesamlphp欢快地跑着,开始安装swcc/simplesamlphp-module-authdiscourse了。</p><p>安装完成后,在/var/simplesamlphp输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">touch modules/authdiscourse/enable</span><br></pre></td></tr></table></figure><p>让这个插件启动。</p><p><br><br><br>然后在你的discourse论坛启动 enable discourse connect provider 和 discourse connect provider secrets 这两个选项。 </p><p>在 discourse connect provider secrets 输入你的SAML域名,比如login.example.com和你设定的一个SSO密钥。</p><p>然后编辑simplesamlphp文件夹里的config/authsources.php</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><?php</span></span><br><span class="line"></span><br><span class="line"><span class="variable">$config</span> = [</span><br><span class="line"> <span class="comment">// This is a authentication source which handles admin authentication.</span></span><br><span class="line"> <span class="string">'admin'</span> => [</span><br><span class="line"> <span class="string">'core:AdminPassword'</span>,</span><br><span class="line"> ],</span><br><span class="line"></span><br><span class="line"> <span class="comment">// This is the authentication source using the Discourse authentication.</span></span><br><span class="line"> <span class="string">'discourse-sso'</span> => [</span><br><span class="line"> <span class="string">'authdiscourse:Discourse'</span>,</span><br><span class="line"> <span class="string">'url'</span> => <span class="string">'https://discourse.your-domain.org'</span>,</span><br><span class="line"> <span class="string">'secret'</span> => <span class="string">'<your-sso-secret>'</span>,</span><br><span class="line"> ],</span><br><span class="line">];</span><br></pre></td></tr></table></figure><p>主要是往合适的地方加上</p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">'discourse-sso'</span> => [</span><br><span class="line"> <span class="string">'authdiscourse:Discourse'</span>,</span><br><span class="line"> <span class="string">'url'</span> => <span class="string">'你的论坛域名'</span>,</span><br><span class="line"> <span class="string">'secret'</span> => <span class="string">'你刚刚设置的SSO密钥'</span>,</span><br><span class="line">],</span><br></pre></td></tr></table></figure><p>这一段,让它的认证方式添加上discourse。</p><p>最后,打开 https://你的SAML域名/simplesaml/module.php/core/authenticate.php?as=discourse-sso </p><p>或者</p><p>打开 https://你的SAML域名/simplesaml/ 然后点 认证/authentication 然后点discourse-sso然后测试。</p><p>如果返回了正确的信息,则说明你配置成功。</p><p>然后你需要配置你的IDP。</p><p>首先生成一个证书:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out 你的域名.crt -keyout 你的域名.pem</span><br></pre></td></tr></table></figure><p>然后如果你是在root根目录生成的,你就能在root根目录看见你生成的新证书。</p><p>然后把证书挪到你需要放的地方,将它们赋予到用户www-data和755权限</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chown -R www-data:www-data /你的证书存放路径</span><br><span class="line">chmod -R 755 /你的证书存放路径</span><br></pre></td></tr></table></figure><p>最后,在metadata/saml20-idp-hosted.php里,编辑你的证书路径和修改你的认证方式即可。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><?php</span><br><span class="line">$metadata['__DYNAMIC:1__'] = [</span><br><span class="line"> /*</span><br><span class="line"> * The hostname for this IdP. This makes it possible to run multiple</span><br><span class="line"> * IdPs from the same configuration. '__DEFAULT__' means that this one</span><br><span class="line"> * should be used by default.</span><br><span class="line"> */</span><br><span class="line"> 'host' => '__DEFAULT__',</span><br><span class="line"></span><br><span class="line"> /*</span><br><span class="line"> * The private key and certificate to use when signing responses.</span><br><span class="line"> * These are stored in the cert-directory.</span><br><span class="line"> */</span><br><span class="line"> 'privatekey' => '你的pem路径',</span><br><span class="line"> 'certificate' => '你的crt路径',</span><br><span class="line"></span><br><span class="line"> /*</span><br><span class="line"> * The authentication source which should be used to authenticate the</span><br><span class="line"> * user. This must match one of the entries in config/authsources.php.</span><br><span class="line"> 这里需要将认证方法改成discourse-sso</span><br><span class="line"> */</span><br><span class="line"> 'auth' => 'discourse-sso',</span><br><span class="line">];</span><br></pre></td></tr></table></figure><p>现在你的SimpleSAMLphp以可使用Discourse作为用户数据库后端,提供标准SAML登录协议。</p><p>IDP实体标识符:https://你的域名/simplesaml/saml2/idp/metadata.php</p><p>URL目标(用于SP发送验证请求):https://你的域名/simplesaml/saml2/idp/SSOService.php</p><p>X509证书:https://你的域名/simplesaml/module.php/saml/idp/certs.php/idp.crt</p><p>或者对于支持直接上传IDP Metadata文件的服务商,干脆直接下载IDP Metadata:https://你的域名/simplesaml/saml2/idp/metadata.php</p><p>到此,大功告成。</p><p>enjoy~</p><p>下一篇我会详细介绍如何将由Discourse驱动的SimpleSAMLphp与NextCloud连接作为NextCloud的SAML登录方式。</p><p>有什么不懂的地方或有什么可以指正的地方欢迎随时联系<a href="mailto:admin@rail.moe">admin@rail.moe</a>。</p>]]></content>
<summary type="html">本文主要介绍如何将Discourse作为SAML验证服务器。</summary>
<category term="Discourse" scheme="https://blog.rail.moe/categories/Discourse/"/>
<category term="SAML" scheme="https://blog.rail.moe/categories/Discourse/SAML/"/>
<category term="Discourse" scheme="https://blog.rail.moe/tags/Discourse/"/>
<category term="SAML" scheme="https://blog.rail.moe/tags/SAML/"/>
</entry>
<entry>
<title>RFW论坛自己改动的discourse功能</title>
<link href="https://blog.rail.moe/2021/11/05/theme-component-used/"/>
<id>https://blog.rail.moe/2021/11/05/theme-component-used/</id>
<published>2021-11-05T03:37:04.000Z</published>
<updated>2021-11-05T03:42:50.648Z</updated>
<content type="html"><![CDATA[<p>微信图片外链破解(weixin image hack):抓取微信公众号的内容时,如不添加本插件,将无法显示从微信公众号抓取的图片。</p><p>广州地铁tag样式(实验性)(Special Tag CSS):把广州地铁这个tag变成圆角。</p><p>改变分享icon(Replace share icon):替换分享的图标,原图标为链接图标,现图标为分享图标。(本改动最低版本要求为2.8.0.beta7版本89a2cec7be分支。)</p><p>高亮精华帖子(暂不推荐使用)(Highlight Topic List with Special Tag):这个功能比较魔改。。。首先是不知道为什么discourse对加精这个功能好像没怎么在乎。。。其次是实现的方式很鬼畜。该插件改动了名为“#”的tag的样式,将其改为星星。然后将检测到带这个tag的帖子改为紫色加粗。</p><p>隐藏汉堡菜单的子类别和键盘快捷键(Hide Sub-Categories and Keyboard shortcut):那汉堡菜单里的键盘快捷键不说没有用吧,那也是一点用没有了。子类别在本论坛作为“高权限”存在,没什么在汉堡菜单里占着的意义,故隐藏掉。</p><p>黑幕(heimu):添加类似萌娘百科的黑幕功能。</p><p>改变sticker显示大小(Display emoji correctly):论坛允许自己添加“表情符号”,也就是表情包,但是大小按emoji显示,就很不好,太小了看不清。所以改动了一下自己上传的表情符号的大小,原来的emoji大小不变。</p><p>以上这些就是为了改善论坛使用体验而自己进行的小改动。大部分都是css改一下的东西。本论坛别的使用的插件就没放了,毕竟不是自己写的,需要什么功能插件的话直接去discourse官方论坛找就好了。</p>]]></content>
<summary type="html">本文主要介绍RFW论坛修改的discourse功能和插件。</summary>
<category term="Discourse" scheme="https://blog.rail.moe/categories/Discourse/"/>
<category term="Discourse" scheme="https://blog.rail.moe/tags/Discourse/"/>
<category term="plugin" scheme="https://blog.rail.moe/tags/plugin/"/>
</entry>
<entry>
<title>给discourse开发主题组件时遇到的一些坑</title>
<link href="https://blog.rail.moe/2021/09/18/discourse-theme-component/"/>
<id>https://blog.rail.moe/2021/09/18/discourse-theme-component/</id>
<published>2021-09-17T16:21:43.000Z</published>
<updated>2021-09-17T16:31:23.051Z</updated>
<content type="html"><![CDATA[<p>说到底,真的太痛苦了啊特么的,怎么会有人管注释叫“docs”呢?反正api的功能也不多,其中用的最多的应该是modify class,但我们今天不聊这个,聊聊<a href="https://github.com/RailForWork/Discourse-Coloring-Tag">coloring tag</a>这个插件我是怎么写出来的。</p><p>discourse有一个部分是render tag,顾名思义,这是负责“如何渲染tag”的组件,api里有一个replacerendertag,允许你直接修改它默认的生成方式,然后把你想生成tag的方式塞进去,coloring tag这个插件实际上就是在它原来渲染tag的基础上增加了一个判断,如果检测到有settings来的变量,则改变颜色(写入生成的tag里的style),没有就不写。</p><p>总之给这个破玩意开发插件实在是有点痛苦。</p><p>在你思考用什么来实现自己的功能的时候,这个过程可能要比你实际写更痛苦。</p>]]></content>
<summary type="html">Discourse的插件文档几乎等于没有,所谓的docs只是几行注释,开发的过程真是痛苦不堪。</summary>
<category term="Discourse" scheme="https://blog.rail.moe/categories/Discourse/"/>
<category term="Discourse" scheme="https://blog.rail.moe/tags/Discourse/"/>
<category term="Discourse-theme-component" scheme="https://blog.rail.moe/tags/Discourse-theme-component/"/>
</entry>
<entry>
<title>如何为discourse开启Onedrive同步网站备份</title>
<link href="https://blog.rail.moe/2021/09/18/discourse-onedrive/"/>
<id>https://blog.rail.moe/2021/09/18/discourse-onedrive/</id>
<published>2021-09-17T16:20:30.000Z</published>
<updated>2021-09-17T16:29:06.321Z</updated>
<content type="html"><![CDATA[<p>Google Drive和DropBox我就不写了,discourse有它们两的官方插件,没必要用我这种方法。<br>主要是针对有的人开了Office365的家庭版,有个1T又用不完那种(比如我)。<br>原理其实很简单,说穿了不是什么太复杂的东西,但不说可能知道的人就比较少。</p><p>记得上一篇文章里我提到过,discourse的论坛数据都是储存在docker外的,即/var/discourse/shared这个路径,那么巧了,备份的路径就在这个 /shared/bakcups/default 里。那么已知discourse可以让论坛自动定时备份,并且备份的路径在服务器可访问,求:如何使用onedrive自动把这些备份好的文件上传到onedrive呢?</p><p>装一个onedrive for Linux不就好了吗。(笑)</p><p><a href="https://github.com/abraunegg/onedrive">https://github.com/abraunegg/onedrive</a></p><p>我用的是这个。</p><p>Ubuntu/Debian都有对应的包,不用你自己累死累活去编译。<br>装完之后别动东西,然后去 /etc 目录下 mkdir 一个 onedrive 文件夹,然后进入这个文件夹之后wget它默认config也好,vi config自己贴进去也好都可以,然后把路径指向 /var/diacourse/shared/backups/default ,最后把upload only和no remote delete设置为true,然后直接在命令行里敲onedrive,把给你的url在浏览器打开,登录再把空白网页的授权url剪切下来贴进去,你的onedrive就完成授权了。<br>此时你可以直接 systemctl –user enable onedrive 和 systemctl –user start onedrive配置开机自启和启动服务了。不出意外的话,当你过5分钟再 systemctl –user status onedrive的时候,它就会显示onedrive在后台默默帮你上传文件了。</p><p>对了,onedrive默认设置是5分钟检测一次变化,你可以自己调,调快测试或者调慢用于生产环境都行,随你。</p><p>再说个小细节,vi launcher里按/然后输入512m,前面加个 -v outside/path:docker/path 就可以自己指定backups和upload的路径。</p><p>有什么疑问欢迎各位发邮件来与技术人员交流心得。</p>]]></content>
<summary type="html">如何利用OneDrive,使Discourse的定时备份自动同步到OneDrive上去。</summary>
<category term="Discourse" scheme="https://blog.rail.moe/categories/Discourse/"/>
<category term="Discourse" scheme="https://blog.rail.moe/tags/Discourse/"/>
<category term="OneDrive" scheme="https://blog.rail.moe/tags/OneDrive/"/>
</entry>
<entry>
<title>浅谈我对discourse的理解</title>
<link href="https://blog.rail.moe/2021/09/18/discourse/"/>
<id>https://blog.rail.moe/2021/09/18/discourse/</id>
<published>2021-09-17T16:19:59.000Z</published>
<updated>2021-09-17T16:24:28.010Z</updated>
<content type="html"><![CDATA[<p>discourse实在是太复杂了,人家那么多年的心血让我一个菜鸡两三天看完也不现实,总之在研究discourse的时候我发现了一些很有意思的设计:</p><p>首先谈谈的discourse底层,它官方推荐且唯一推荐的运行方式是跑在一个docker上,瞠目结舌了多多少少属于是,但只要你被草习惯了,你就会发现discourse这套东西还蛮有意思的,它实际上是这样的;<br>论坛核心数据实际上是在/var/discourse/shared这个路径,对,核心数据是完全暴露在docker外,实际存储在服务器上的,docker只是做了一个软link让docker里面可以访问外部的资源,这么做的好处是你至少觉得放外面出事了抢救的概率比里面高一点。。。整个docker炸了也没啥关系(</p><p>底层是数据,那么上一层就是docker的image了。<br>discourse有一个launcher的bash,经常你在containers/app.yml改动了啥就需要rebuild,所谓rebuild,实际上就是执行一次重新生成镜像,rebuild时我看它里面大概做了这么几件事:</p><ol><li>把discourse对应的版本(默认为main,即最不稳定的版本)从github上pull下来</li><li>把你自己自定义的plugin也从对应的github上pull下来</li><li>压缩(brolti)js/css</li><li>把数据库开起来</li></ol><p>总之image就是新的一个运行环境了。</p><p>最上面则是containers,也就是docker的参数传递,这时候它会把你app.yml规定好的参数穿进去docker,比如volume路径,SMTP服务器参数之类的。。。(这个真的太阴间了,SMTP服务器每次变好像都要rebuild一次,不能很方便地在管理页面更改)</p><p>总结一下就是,最底下是放在外面的数据(sql/用户上传文件什么的),中间是运行环境(Nginx,Ruby,SQL服务器之类的),最上层是参数(SMTP服务器)</p><p>理解了它们怎么运作,才能更好地维护和魔改discourse。</p>]]></content>
<summary type="html">本文主要介绍Discourse的基础运作原理以及它的组成部分。</summary>
<category term="Discourse" scheme="https://blog.rail.moe/categories/Discourse/"/>
<category term="Discourse" scheme="https://blog.rail.moe/tags/Discourse/"/>
<category term="docker" scheme="https://blog.rail.moe/tags/docker/"/>
</entry>
</feed>