<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Saika&#39;s Blog</title>
  
  
  <link href="https://saika.us.kg/atom.xml" rel="self"/>
  
  <link href="https://saika.us.kg/"/>
  <updated>2025-08-22T17:30:34.700Z</updated>
  <id>https://saika.us.kg/</id>
  
  <author>
    <name>Saika</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>跨越10年又回归免流</title>
    <link href="https://saika.us.kg/2025/08/21/ml-mihomo-config/"/>
    <id>https://saika.us.kg/2025/08/21/ml-mihomo-config/</id>
    <published>2025-08-21T19:20:35.641Z</published>
    <updated>2025-08-22T17:30:34.700Z</updated>
    
    <content type="html"><![CDATA[<p>早在大概 2014 年 -2015 年时，我还没有用上 4G 网络（主要是因为手机不支持），手机还在用着小米 2s，我就第一次接触到了免流。当时并不是特别懂其中的原理，只知道按照网上大佬们发的什么 Tiny、Hap、扫地僧防跳等等教程一步一步跟着做。当时很简单就成功用上了免流，实现了流量自由。没多久我又更换了支持 4G 的手机，配合 HTTP Injector，畅玩免流开热点，顺带还买了台 z8300 的 windows 寨板，简单玩玩游戏看看电影，在那个年代一个月能跑七八十 G 流量。再后来上大学，开始办各种流量卡，就再也没用过免流了。</p><p>因为各种流量卡的优惠期有限，各种过筛后我只保留了两张 5R 月租的联通卡进行保号，因为这两张卡也都可以日租无限流量包，于是我也就凑合用。用了几年的日租，我觉得这极其不值得。我是一个软路由用户，我平常更愿意也更多使用宽带 wifi 进行上网，本身流量用的也不多，但是即便一天只使用几百MB流量，也会被运营商开一天的日租包，综合下来一个月开销 30+，用的流量却才不到 10G。正当我在研究携号转网想换个套餐的时候，意外发现我的其中一张卡——星粉卡，支持百度直连免流和头条系混淆免流，于是时隔 10 年，我又开始研究免流了。</p><h2 id="原理分析"><a href="#原理分析" class="headerlink" title="原理分析"></a>原理分析</h2><p>首先我找到了不良林的介绍视频：<a class="link"   href="https://www.youtube.com/watch?v=dGYNinKfUR4" >不良林的介绍视频<i class="fas fa-external-link-alt"></i></a></p><p>我认为这个视频做得很好，讲的挺透彻，也让我明白了如今的定向流量免流和我当年使用的免流有着不小的区别——定向流量免流是有专属定向流量的代理服务器的，并不都是根据 Host 判断。</p><h2 id="初步尝试"><a href="#初步尝试" class="headerlink" title="初步尝试"></a>初步尝试</h2><p>那么接下来，就是在酷安找了一个 Magisk 模块，同时进行 Clnc 和 V2Ray 的分流，来进行国内外流量分流进行免流。国内流量使用百度的代理服务器进行代理，国外的流量使用 V2ray 中的海外服务器部署的云免配置进行代理，使得不仅流量不要钱，而且还能魔法上网。</p><p>这个方案是使用 Clnc 的 TUN 来接管的整机流量，所以分流也是由 Clnc 来做的，而我找到的模块配置也好，<a class="link"   href="https://github.com/mmmdbybyd/CLNC" >Clnc 的 Github<i class="fas fa-external-link-alt"></i></a> 上的示例配置也好，做流量分流都只能根据目标 IP 来判断，只能一次性把国内 IP 段全都丢进配置文件，规则让其走百度直连，剩余的走 V2Ray 走海外云免。</p><p>这个分流让我十分不满意，因为习惯性使用 Sing-box 和 Mihomo，我更乐意使用现成的 GEOSITE 和 GEOIP 数据库来进行流量分流，配置方便而且支持自动更新。</p><h2 id="尝试改进"><a href="#尝试改进" class="headerlink" title="尝试改进"></a>尝试改进</h2><p>我发现 Clnc 可以只启动一个 Socks5 代理而不占用 TUN 时，我想到是不是可以用 Clnc 只配置百度直连，开放一个 Socks5 端口用于给 Mihomo 接入，由 Mihomo 进行国内外分流。随机我就去酷安发帖问了，毕竟我一个时隔这么久才回来研究免流的人都想得到，那么一直在使用免流的人应该早就想到过了。很快就有大佬指点我，百度直连可以直接写成 HTTP 代理出站，配置相应的 Header 信息就好了。</p><h2 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h2><p>刚好，之前自己写过 Mihomo 的配置文件，再拿出来改一改，这不就完美了吗：</p><figure class="highlight yaml"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</span><br><span class="line">753</span><br><span class="line">754</span><br><span class="line">755</span><br><span class="line">756</span><br><span class="line">757</span><br><span class="line">758</span><br><span class="line">759</span><br><span class="line">760</span><br><span class="line">761</span><br><span class="line">762</span><br><span class="line">763</span><br><span class="line">764</span><br><span class="line">765</span><br><span class="line">766</span><br><span class="line">767</span><br><span class="line">768</span><br><span class="line">769</span><br><span class="line">770</span><br><span class="line">771</span><br><span class="line">772</span><br><span class="line">773</span><br><span class="line">774</span><br><span class="line">775</span><br><span class="line">776</span><br><span class="line">777</span><br><span class="line">778</span><br><span class="line">779</span><br><span class="line">780</span><br><span class="line">781</span><br><span class="line">782</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">AWAvenue-Ads:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">yaml</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://ghfast.top/https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/refs/heads/main/Filters/AWAvenue-Ads-Rule-Clash-Classical.yaml&quot;</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">600</span></span><br><span class="line"></span><br><span class="line"><span class="attr">mode:</span> <span class="string">rule</span></span><br><span class="line"><span class="attr">ipv6:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">log-level:</span> <span class="string">info</span></span><br><span class="line"><span class="attr">allow-lan:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">mixed-port:</span> <span class="number">7890</span></span><br><span class="line"><span class="attr">redir-port:</span> <span class="number">7891</span></span><br><span class="line"><span class="attr">tproxy-port:</span> <span class="number">1536</span></span><br><span class="line"><span class="attr">unified-delay:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">tcp-concurrent:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">external-controller:</span> <span class="string">:9090</span></span><br><span class="line"><span class="attr">external-ui:</span> <span class="string">/data/adb/box/mihomo/ui</span></span><br><span class="line"></span><br><span class="line"><span class="attr">geodata-mode:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">geox-url:</span></span><br><span class="line">  <span class="attr">geoip:</span> <span class="string">&quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat&quot;</span></span><br><span class="line">  <span class="attr">geosite:</span> <span class="string">&quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat&quot;</span></span><br><span class="line">  <span class="attr">mmdb:</span> <span class="string">&quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb&quot;</span></span><br><span class="line">  </span><br><span class="line"><span class="attr">geo-auto-update:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">geo-update-interval:</span> <span class="number">72</span></span><br><span class="line"></span><br><span class="line"><span class="attr">find-process-mode:</span> <span class="string">always</span></span><br><span class="line"></span><br><span class="line"><span class="attr">keep-alive-interval:</span> <span class="number">1800</span></span><br><span class="line"></span><br><span class="line"><span class="attr">global-client-fingerprint:</span> <span class="string">random</span> </span><br><span class="line"></span><br><span class="line"><span class="attr">profile:</span></span><br><span class="line">  <span class="attr">store-selected:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">store-fake-ip:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">ntp:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">write-to-system:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">server:</span> <span class="string">time.apple.com</span></span><br><span class="line">  <span class="attr">port:</span> <span class="number">123</span></span><br><span class="line">  <span class="attr">interval:</span> <span class="number">30</span></span><br><span class="line"></span><br><span class="line"><span class="attr">sniffer:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">sniff:</span></span><br><span class="line">    <span class="attr">TLS:</span></span><br><span class="line">      <span class="attr">ports:</span> [<span class="number">443</span>, <span class="number">8443</span>]</span><br><span class="line">    <span class="attr">HTTP:</span></span><br><span class="line">      <span class="attr">ports:</span> [<span class="number">80</span>, <span class="number">8080</span><span class="number">-8880</span>]</span><br><span class="line">      <span class="attr">override-destination:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">system</span></span><br><span class="line">  <span class="attr">device:</span> <span class="string">Meta</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;any:53&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;tcp://any:53&quot;</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">listen:</span> <span class="string">:1053</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">28.0</span><span class="number">.0</span><span class="number">.1</span><span class="string">/8</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.lan&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.local&#x27;</span></span><br><span class="line">    <span class="comment"># （不要写 &#x27;*&#x27;，否则 fake-ip 等于白配）</span></span><br><span class="line">  <span class="attr">default-nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">114.114</span><span class="number">.114</span><span class="number">.114</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">119.29</span><span class="number">.29</span><span class="number">.29</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">223.5</span><span class="number">.5</span><span class="number">.5</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;[2402:4e00::]&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;[2400:3200::1]&#x27;</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;https://dns.google/dns-query&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;https://1.1.1.1/dns-query&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;https://dns.alidns.com/dns-query&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://dns.google&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://one.one.one.one&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://8.8.4.4#dns&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://1.0.0.1#dns&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://[2001:4860:4860::8844]#dns&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://[2606:4700:4700::1001]#dns&#x27;</span></span><br><span class="line">  <span class="attr">fallback:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://8.8.8.8#dns&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;tls://1.1.1.1#dns&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;https://dns.cloudflare.com/dns-query&#x27;</span></span><br><span class="line">  <span class="attr">proxy-server-nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span></span><br><span class="line">  <span class="attr">nameserver-policy:</span></span><br><span class="line">    <span class="string">&#x27;geosite:cn,private&#x27;</span><span class="string">:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span></span><br><span class="line">    <span class="string">&quot;geosite:!cn,!private&quot;</span><span class="string">:</span> </span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;tls://dns.google&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;tls://cloudflare-dns.com&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Baidu_HTTP_NanJing</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">153.3</span><span class="number">.237</span><span class="number">.117</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">ipv4</span></span><br><span class="line">    <span class="attr">headers:</span></span><br><span class="line">      <span class="attr">X-T5-Auth:</span> <span class="string">&quot;683556433&quot;</span></span><br><span class="line">      <span class="attr">Host:</span> <span class="number">153.3</span><span class="number">.236</span><span class="number">.22</span><span class="string">:443</span></span><br><span class="line">      <span class="attr">With-At:</span> <span class="string">&quot;dm.toutiao.com&quot;</span></span><br><span class="line">      <span class="attr">User-Agent:</span></span><br><span class="line">        <span class="string">&quot;okhttp/3.11.0 Dalvik/2.1.0 (Linux; U; Android 11; Redmi K30 5G Build/RKQ1.200826.002)</span></span><br><span class="line"><span class="string">        baiduboxapp/11.0.5.12 (Baidu; P1 11)&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Baidu_HTTP_SuZhou</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">157.0</span><span class="number">.146</span><span class="number">.158</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">ipv4</span></span><br><span class="line">    <span class="attr">headers:</span></span><br><span class="line">      <span class="attr">X-T5-Auth:</span> <span class="string">&quot;683556433&quot;</span></span><br><span class="line">      <span class="attr">Host:</span> <span class="number">153.3</span><span class="number">.236</span><span class="number">.22</span><span class="string">:443</span></span><br><span class="line">      <span class="attr">With-At:</span> <span class="string">&quot;dm.toutiao.com&quot;</span></span><br><span class="line">      <span class="attr">User-Agent:</span></span><br><span class="line">        <span class="string">&quot;okhttp/3.11.0 Dalvik/2.1.0 (Linux; U; Android 11; Redmi K30 5G Build/RKQ1.200826.002)</span></span><br><span class="line"><span class="string">        baiduboxapp/11.0.5.12 (Baidu; P1 11)&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Baidu_HTTP_BaoDing_1</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">110.242</span><span class="number">.70</span><span class="number">.69</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">ipv4</span></span><br><span class="line">    <span class="attr">headers:</span></span><br><span class="line">      <span class="attr">X-T5-Auth:</span> <span class="string">&quot;683556433&quot;</span></span><br><span class="line">      <span class="attr">Host:</span> <span class="number">153.3</span><span class="number">.236</span><span class="number">.22</span><span class="string">:443</span></span><br><span class="line">      <span class="attr">With-At:</span> <span class="string">&quot;dm.toutiao.com&quot;</span></span><br><span class="line">      <span class="attr">User-Agent:</span></span><br><span class="line">        <span class="string">&quot;okhttp/3.11.0 Dalvik/2.1.0 (Linux; U; Android 11; Redmi K30 5G Build/RKQ1.200826.002)</span></span><br><span class="line"><span class="string">        baiduboxapp/11.0.5.12 (Baidu; P1 11)&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Baidu_HTTP_BaoDing_2</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">110.242</span><span class="number">.70</span><span class="number">.68</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">ipv4</span></span><br><span class="line">    <span class="attr">headers:</span></span><br><span class="line">      <span class="attr">X-T5-Auth:</span> <span class="string">&quot;683556433&quot;</span></span><br><span class="line">      <span class="attr">Host:</span> <span class="number">153.3</span><span class="number">.236</span><span class="number">.22</span><span class="string">:443</span></span><br><span class="line">      <span class="attr">With-At:</span> <span class="string">&quot;dm.toutiao.com&quot;</span></span><br><span class="line">      <span class="attr">User-Agent:</span></span><br><span class="line">        <span class="string">&quot;okhttp/3.11.0 Dalvik/2.1.0 (Linux; U; Android 11; Redmi K30 5G Build/RKQ1.200826.002)</span></span><br><span class="line"><span class="string">        baiduboxapp/11.0.5.12 (Baidu; P1 11)&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">🇺🇸US_VL_Reality_Obfuscated</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="number">90000000</span><span class="number">-0000</span><span class="number">-0000</span><span class="number">-0000</span><span class="string">-0000000000ae</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">flow:</span> <span class="string">xtls-rprx-vision</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">dm.toutiao.com</span></span><br><span class="line">    <span class="attr">headers:</span></span><br><span class="line">      <span class="attr">Host:</span> <span class="string">dm.toutiao.com</span></span><br><span class="line">    <span class="attr">reality-opts:</span></span><br><span class="line">      <span class="attr">public-key:</span> <span class="string">GQ0006SR00001xdK9J500000V_Ws000001Z0000TNg0</span></span><br><span class="line">      <span class="attr">short-id:</span> <span class="string">&quot;f00000f0&quot;</span></span><br><span class="line">    <span class="attr">client-fingerprint:</span> <span class="string">chrome</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">🇳🇱NL_VM_Ws_Obfuscated</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vmess</span></span><br><span class="line">    <span class="attr">server:</span> <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="number">90000000</span><span class="number">-0000</span><span class="number">-0000</span><span class="number">-0000</span><span class="string">-0000000000ae</span></span><br><span class="line">    <span class="attr">alterId:</span> <span class="number">0</span></span><br><span class="line">    <span class="attr">cipher:</span> <span class="string">auto</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">ws</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">www.cloudflare.com</span></span><br><span class="line">    <span class="attr">ws-opts:</span></span><br><span class="line">      <span class="attr">path:</span> <span class="string">&quot;90000000-0000-0000-0000-0000000000ae-vm&quot;</span>                         </span><br><span class="line">      <span class="attr">headers:</span></span><br><span class="line">        <span class="attr">Host:</span> <span class="string">dm.toutiao.com</span></span><br><span class="line"></span><br><span class="line"><span class="attr">proxy-groups:</span> </span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(国内免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(海外免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">          <span class="string">REJECT</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🌍 国外免流&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(海外免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(国内免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">          <span class="string">REJECT</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(国内免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;♻️ 自动选择(海外免流)&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;♻️ 自动选择(国内免流)&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">url-test</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">      <span class="attr">url:</span> <span class="string">&quot;https://www.baidu.com&quot;</span>,</span><br><span class="line">      <span class="attr">interval:</span> <span class="number">86400</span>,</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;♻️ 自动选择(海外免流)&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">url-test</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">      <span class="attr">url:</span> <span class="string">&quot;http://cp.cloudflare.com&quot;</span>,</span><br><span class="line">      <span class="attr">interval:</span> <span class="number">86400</span>,</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="comment"># - &#123;</span></span><br><span class="line">  <span class="comment">#     name: &quot;🇧 哔哩哔哩&quot;,</span></span><br><span class="line">  <span class="comment">#     type: select,</span></span><br><span class="line">  <span class="comment">#     proxies:</span></span><br><span class="line">  <span class="comment">#       [</span></span><br><span class="line">  <span class="comment">#         &quot;🚀 节点选择&quot;,</span></span><br><span class="line">  <span class="comment">#         DIRECT,</span></span><br><span class="line">  <span class="comment">#         &quot;reality&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;hy2&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;tuic5&quot;,</span></span><br><span class="line">  <span class="comment">#       ],</span></span><br><span class="line">  <span class="comment">#   &#125;</span></span><br><span class="line">  <span class="comment"># - &#123;</span></span><br><span class="line">  <span class="comment">#     name: &quot;🇧 哔哩东南亚&quot;,</span></span><br><span class="line">  <span class="comment">#     type: select,</span></span><br><span class="line">  <span class="comment">#     proxies:</span></span><br><span class="line">  <span class="comment">#       [</span></span><br><span class="line">  <span class="comment">#         &quot;🚀 节点选择&quot;,</span></span><br><span class="line">  <span class="comment">#         DIRECT,</span></span><br><span class="line">  <span class="comment">#         &quot;reality&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;hy2&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;tuic5&quot;,</span></span><br><span class="line">  <span class="comment">#       ],</span></span><br><span class="line">  <span class="comment">#   &#125;</span></span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🌍 国外媒体&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇳 Netflix&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇹 Tiktok&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇧 巴哈姆特&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🆂 Spotify&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇦 Abema&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🆂 Steam&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇫 Facebook&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;📲 电报信息&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇽 推特消息&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🖥 ChatGPT&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🅿️ Pixiv&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇪 E-Hentai&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🖴 OneDrive&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;Ⓜ️ 微软服务&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🍎 苹果服务&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇬 谷歌服务&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇬 GitHub&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🇨 Cloudflare&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="comment"># - &#123;</span></span><br><span class="line">  <span class="comment">#     name: &quot;🇨 Cloudfront&quot;,</span></span><br><span class="line">  <span class="comment">#     type: select,</span></span><br><span class="line">  <span class="comment">#     proxies:</span></span><br><span class="line">  <span class="comment">#       [</span></span><br><span class="line">  <span class="comment">#         DIRECT,</span></span><br><span class="line">  <span class="comment">#         &quot;🚀 节点选择&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;♻️ 自动选择&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;reality&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;hy2&quot;,</span></span><br><span class="line">  <span class="comment">#         &quot;tuic5&quot;,</span></span><br><span class="line">  <span class="comment">#       ],</span></span><br><span class="line">  <span class="comment">#   &#125;</span></span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🎯 全球直连&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🛑 全球拦截&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">REJECT</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🍃 应用净化&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">REJECT</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="bullet">-</span> &#123;</span><br><span class="line">      <span class="attr">name:</span> <span class="string">&quot;🐟 漏网之鱼&quot;</span>,</span><br><span class="line">      <span class="attr">type:</span> <span class="string">select</span>,</span><br><span class="line">      <span class="attr">proxies:</span></span><br><span class="line">        [</span><br><span class="line">          <span class="string">&quot;🇨🇳 国内免流&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🌍 国外免流&quot;</span></span><br><span class="line">          <span class="string">&quot;🚀 手动切换&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_NanJing&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_SuZhou&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_1&quot;</span>,</span><br><span class="line">          <span class="string">&quot;Baidu_HTTP_BaoDing_2&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇺🇸US_VL_Reality_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">&quot;🇳🇱NL_VM_Ws_Obfuscated&quot;</span>,</span><br><span class="line">          <span class="string">REJECT</span>,</span><br><span class="line">          <span class="string">DIRECT</span>,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 若需禁用 QUIC 请取消注释 QUIC 两条规则</span></span><br><span class="line">  <span class="comment"># 防止 YouTube 等使用 QUIC 导致速度不佳, 禁用 443 端口 UDP 流量（不包括国内）</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># - AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOSITE,cn))),REJECT # quic</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,AWAvenue-Ads,🍃</span> <span class="string">应用净化</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DST-PORT,53,🌍</span> <span class="string">国外免流</span></span><br><span class="line">  <span class="comment"># - DST-PORT,6653,🌍 国外免流</span></span><br><span class="line">  <span class="comment"># - DST-PORT,1053,🌍 国外免流</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">NETWORK,udp,🌍</span> <span class="string">国外免流</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR6,::/0,🌍</span> <span class="string">国外免流</span></span><br><span class="line">  <span class="comment"># - GEOSITE,biliintl,🇧 哔哩东南亚</span></span><br><span class="line">  <span class="comment"># - GEOSITE,bilibili,🇧 哔哩哔哩</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 可在下方加入自己特需的规则</span></span><br><span class="line">  <span class="comment"># - DOMAIN-SUFFIX,libvio.fun,🎯 全球直连</span></span><br><span class="line">  <span class="comment"># - DOMAIN-KEYWORD,admarvel,🛑 全球拦截</span></span><br><span class="line">  <span class="comment"># - DOMAIN-SUFFIX,kajicam.com,🌍 国外媒体</span></span><br><span class="line">  <span class="comment"># - DOMAIN,s3-ap-southeast-1.amazonaws.com,🌍 国外媒体</span></span><br><span class="line">  <span class="comment"># - IP-CIDR,69.53.224.0/19,🌍 国外媒体,no-resolve</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,libvio.fun,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,dcg.microsoft.com,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,windowsphone.com,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,windowsphone-int.com,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,kajicam.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,fanmingming.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,xn--sss604efuw.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,mayiyingshi.net,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,reddit.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,greasyfork.org,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,nodeseek.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,missav.ws,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,missav.ai,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,xhamster.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,xhcdn.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,ahcdn.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,nodeloc.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,nodeseek.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,hostloc.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,linux.do,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,discord.gg,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,ipify.org,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,ip.sb,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,winget.run,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,hmoegirl.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,wikipedia.org,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,moegirl.uk,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,hmoegirl.com,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,hmoegirl.cyou,🌍</span> <span class="string">国外媒体</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,cursor.sh,🖥</span> <span class="string">ChatGPT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,cursor.com,🖥</span> <span class="string">ChatGPT</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,CATEGORY-AI-CHAT-!CN,🖥</span> <span class="string">ChatGPT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,category-scholar-!cn,🖥</span> <span class="string">ChatGPT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,apple,🍎</span> <span class="string">苹果服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,apple-cn,🍎</span> <span class="string">苹果服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,ehentai,🇪</span> <span class="string">E-Hentai</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,github,🇬</span> <span class="string">GitHub</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,twitter,🇽</span> <span class="string">推特消息</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,youtube,🇬</span> <span class="string">谷歌服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,google,🇬</span> <span class="string">谷歌服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,google-cn,🇬</span> <span class="string">谷歌服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,telegram,📲</span> <span class="string">电报信息</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,abema,🇦</span> <span class="string">Abema</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,netflix,🇳</span> <span class="string">Netflix</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,tiktok,🇹</span> <span class="string">Tiktok</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,bahamut,🇧</span> <span class="string">巴哈姆特</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,spotify,🆂</span> <span class="string">Spotify</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,pixiv,🅿️</span> <span class="string">Pixiv</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,steam@cn,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,steam,🆂</span> <span class="string">Steam</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,onedrive,🖴</span> <span class="string">OneDrive</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,microsoft,Ⓜ️</span> <span class="string">微软服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,geolocation-!cn,🐟</span> <span class="string">漏网之鱼</span></span><br><span class="line">  <span class="comment"># - AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOIP,CN))),REJECT # quic</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,google,🇬</span> <span class="string">谷歌服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,netflix,🇳</span> <span class="string">Netflix</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,facebook,🇫</span> <span class="string">Facebook</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,telegram,📲</span> <span class="string">电报信息</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,twitter,🇽</span> <span class="string">推特消息</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,cloudflare,🇨</span> <span class="string">Cloudflare</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,cloudflare,🇨</span> <span class="string">Cloudflare</span></span><br><span class="line">  <span class="comment"># - GEOIP,cloudfront,🇨 Cloudfront</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,CN,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,🎯</span> <span class="string">全球直连</span></span><br><span class="line">  <span class="comment"># 绕过局域网地址</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,10.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,172.16.0.0/12,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,192.168.0.0/16,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,100.64.0.0/10,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,127.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,🐟</span> <span class="string">漏网之鱼。</span></span><br></pre></td></tr></table></figure><h2 id="配置详解"><a href="#配置详解" class="headerlink" title="配置详解"></a>配置详解</h2><p>百度直连的几个 HTTP 出站，其 IP 地址是使用全国地区 Ping 工具解析百度代理服务器 <code>cloudnproxy.n.shifen.com</code> 的 IP 地址并去除掉广东地区的剩余结果。必须携带相应的 Header 才可以连接。其 Header 应该是抓包百度的某款 APP 所得，由于不知道是哪一个 APP，故我没有自行抓包了。</p><p>海外免流的代理需要满足以下条件：1,使用 80\443 端口；2,能够自定义连接时的 Header 信息以填入混淆域名。经我自测，Vmess-ws 以及 Vless-Reality均可使用，此外，根据查到的信息，Vless-tcp 和 Vmess-tcp 也可以。考虑到数据安全和防封两方面，我推荐使用 Reality 代理，正好 <code>dm.toutiao.com</code> 这个伪装域名的解析结果也是国外 IP，有一定心理作用上的防封效果。</p><p>分流规则上，由于百度直连的 HTTP 代理不能代理 UDP 和 IPv6 流量，所以需要将 UDP 和 IPv6 分流到海外免流。如果没有使用 IPv6 的需求，最好是关闭 IPv6 的相关功能，以免出现异常。我写的分流规则比较详细，适合拥有多台不同 IP 的 VPS 玩家，以便针对不同 IP 要求（如 NetFlix、ChatGPT 等等）进行分流。</p><h2 id="实战使用"><a href="#实战使用" class="headerlink" title="实战使用"></a>实战使用</h2><p>推荐使用 <a class="link"   href="https://github.com/CHIZI-0618/box4magisk" >Box4Magisk<i class="fas fa-external-link-alt"></i></a>，下载好 Releases 中打包好的模块，将 Mihomo 最新的核心文件丢进去，再把写好的配置文件丢进去，再根据自己的需求修改模块配置文件，最后刷入即可。我选择不使用 Box4Magisk 的透明代理，而直接使用 Mihomo 自带的 TUN 来接管。由于 Mihomo 本身不具备配置绕过 WiFi 的功能，所以我在 Xposed Edge Pro 中配置了触发器，连接 WiFi 时自动关闭 Box4Magisk，而断开 WiFi 连接时自动启动 Box4Magisk。命令如下：</p><ul><li><p>启动服务：</p><p><code>/data/adb/box/scripts/box.service start</code></p></li><li><p>停止服务：</p><p><code>/data/adb/box/scripts/box.service stop</code></p></li></ul><p>这样代理也不会和我软路由上的 OpenClash 有所冲突，而断开 WiFi 时又能享受到免流。唯一缺点就是断开 WiFi 后到 Mihomo 启动成功前的几百毫秒可能会跑一些通用流量。因为我的星粉卡有每月 1G 通用流量，也够这点消耗，所以也在能够接受的范围了。如果没有任何通用流量的卡想要使用这个方法尝试免流，我建议使用透明代理的方式，并在透明代理中配置绕过 WLAN。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;早在大概 2014 年 -2015 年时，我还没有用上 4G 网络（主要是因为手机不支持），手机还在用着小米 2s，我就第一次接触到了免流。当时并不是特别懂其中的原理，只知道按照网上大佬们发的什么 Tiny、Hap、扫地僧防跳等等教程一步一步跟着做。当时很简单就成功用上了免</summary>
      
    
    
    
    
    <category term="代理" scheme="https://saika.us.kg/tags/%E4%BB%A3%E7%90%86/"/>
    
    <category term="免流" scheme="https://saika.us.kg/tags/%E5%85%8D%E6%B5%81/"/>
    
  </entry>
  
  <entry>
    <title>Clash 配置文件备份</title>
    <link href="https://saika.us.kg/2025/03/18/clash-config-backup/"/>
    <id>https://saika.us.kg/2025/03/18/clash-config-backup/</id>
    <published>2025-03-18T02:04:58.505Z</published>
    <updated>2026-01-15T18:32:38.460Z</updated>
    
    <content type="html"><![CDATA[<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><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br></pre></td><td class="code"><pre><span class="line">rule-providers:</span><br><span class="line">  AWAvenue-Ads:</span><br><span class="line">    type: http</span><br><span class="line">    behavior: domain</span><br><span class="line">    format: yaml</span><br><span class="line">    url: &quot;https://ghfast.top/https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/refs/heads/main/Filters/AWAvenue-Ads-Rule-Clash-classical.yaml&quot;</span><br><span class="line">    interval: 600</span><br><span class="line"></span><br><span class="line">mode: rule</span><br><span class="line">ipv6: true</span><br><span class="line">log-level: info</span><br><span class="line">allow-lan: true</span><br><span class="line">mixed-port: 7890</span><br><span class="line">unified-delay: true</span><br><span class="line">tcp-concurrent: true</span><br><span class="line">external-controller: :9090</span><br><span class="line"></span><br><span class="line">geodata-mode: true</span><br><span class="line"></span><br><span class="line">geox-url:</span><br><span class="line">  geoip: &quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat&quot;</span><br><span class="line">  geosite: &quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat&quot;</span><br><span class="line">  mmdb: &quot;https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb&quot;</span><br><span class="line"></span><br><span class="line">find-process-mode: strict</span><br><span class="line"></span><br><span class="line">keep-alive-interval: 1800</span><br><span class="line"></span><br><span class="line">global-client-fingerprint: random </span><br><span class="line"></span><br><span class="line">profile:</span><br><span class="line">  store-selected: true</span><br><span class="line">  store-fake-ip: true</span><br><span class="line"></span><br><span class="line">ntp:</span><br><span class="line">  enable: true</span><br><span class="line">  write-to-system: false</span><br><span class="line">  server: time.apple.com</span><br><span class="line">  port: 123</span><br><span class="line">  interval: 30</span><br><span class="line"></span><br><span class="line">sniffer:</span><br><span class="line">  enable: true</span><br><span class="line">  sniff:</span><br><span class="line">    TLS:</span><br><span class="line">      ports: [443, 8443]</span><br><span class="line">    HTTP:</span><br><span class="line">      ports: [80, 8080-8880]</span><br><span class="line">      override-destination: true</span><br><span class="line"></span><br><span class="line">tun:</span><br><span class="line">  enable: false</span><br><span class="line">  stack: system</span><br><span class="line">  dns-hijack:</span><br><span class="line">    - &quot;any:53&quot;</span><br><span class="line">    - &quot;tcp://any:53&quot;</span><br><span class="line">  auto-route: true</span><br><span class="line">  auto-detect-interface: true</span><br><span class="line"></span><br><span class="line">dns:</span><br><span class="line">  enable: true</span><br><span class="line">  listen: :1053</span><br><span class="line">  ipv6: true</span><br><span class="line">  enhanced-mode: redir-host</span><br><span class="line">  fake-ip-range: 28.0.0.1/8</span><br><span class="line">  fake-ip-filter:</span><br><span class="line">    - &#x27;*&#x27;</span><br><span class="line">    - &#x27;+.lan&#x27;</span><br><span class="line">    - &#x27;+.local&#x27;</span><br><span class="line">  default-nameserver:</span><br><span class="line">    - 223.5.5.5</span><br><span class="line">    - 119.29.29.29</span><br><span class="line">    - 114.114.114.114</span><br><span class="line">    - &#x27;[2402:4e00::]&#x27;</span><br><span class="line">    - &#x27;[2400:3200::1]&#x27;</span><br><span class="line">  nameserver:</span><br><span class="line">    - &#x27;tls://8.8.4.4#dns&#x27;</span><br><span class="line">    - &#x27;tls://1.0.0.1#dns&#x27;</span><br><span class="line">    - &#x27;tls://[2001:4860:4860::8844]#dns&#x27;</span><br><span class="line">    - &#x27;tls://[2606:4700:4700::1001]#dns&#x27;</span><br><span class="line">  proxy-server-nameserver:</span><br><span class="line">    - https://doh.pub/dns-query</span><br><span class="line">  nameserver-policy:</span><br><span class="line">    &quot;geosite:cn,private&quot;:</span><br><span class="line">      - https://doh.pub/dns-query</span><br><span class="line">      - https://dns.alidns.com/dns-query</span><br><span class="line">    &quot;geosite:!cn,!private&quot;: </span><br><span class="line">      - &quot;tls://dns.google&quot;</span><br><span class="line">      - &quot;tls://cloudflare-dns.com&quot;</span><br><span class="line"></span><br><span class="line">proxies:</span><br><span class="line"># 按照格式把代理一个个贴进来</span><br><span class="line">  - name: reality</span><br><span class="line">    type: vless</span><br><span class="line">    server: 1.1.1.1</span><br><span class="line">    port: 80</span><br><span class="line">    uuid: 00000000-0000-0000-0000-000000000000</span><br><span class="line">    network: tcp</span><br><span class="line">    udp: true</span><br><span class="line">    tls: true</span><br><span class="line">    flow: xtls-rprx-vision</span><br><span class="line">    servername: www.yahoo.com</span><br><span class="line">    reality-opts:</span><br><span class="line">      public-key: 0000000000</span><br><span class="line">      short-id: &quot;00000000&quot;</span><br><span class="line">    client-fingerprint: chrome</span><br><span class="line"></span><br><span class="line">  - name: hy2</span><br><span class="line">    type: hysteria2</span><br><span class="line">    server: 1.1.1.1</span><br><span class="line">    port: 80</span><br><span class="line">    password: 00000000-0000-0000-0000-000000000000</span><br><span class="line">    alpn:</span><br><span class="line">      - h3</span><br><span class="line">    sni: www.cloudflare.com</span><br><span class="line">    skip-cert-verify: false</span><br><span class="line">    fast-open: true</span><br><span class="line"></span><br><span class="line">  - name: tuic5</span><br><span class="line">    server: 1.1.1.1</span><br><span class="line">    port: 80</span><br><span class="line">    type: tuic</span><br><span class="line">    uuid: 00000000-0000-0000-0000-000000000000</span><br><span class="line">    password: 00000000-0000-0000-0000-000000000000</span><br><span class="line">    alpn: [h3]</span><br><span class="line">    disable-sni: true</span><br><span class="line">    reduce-rtt: true</span><br><span class="line">    udp-relay-mode: native</span><br><span class="line">    congestion-controller: bbr</span><br><span class="line">    sni: www.cloudflare.com</span><br><span class="line">    skip-cert-verify: false</span><br><span class="line"></span><br><span class="line">proxy-groups:</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🚀 节点选择&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;♻️ 自动选择&quot;,</span><br><span class="line">          &quot;🚀 手动切换&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🚀 手动切换&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;♻️ 自动选择&quot;,</span><br><span class="line">      type: url-test,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">      url: &quot;https://cp.cloudflare.com&quot;,</span><br><span class="line">      interval: 86400,</span><br><span class="line">    &#125;</span><br><span class="line">  # - &#123;</span><br><span class="line">  #     name: &quot;🇧 哔哩哔哩&quot;,</span><br><span class="line">  #     type: select,</span><br><span class="line">  #     proxies:</span><br><span class="line">  #       [</span><br><span class="line">  #         &quot;🚀 节点选择&quot;,</span><br><span class="line">  #         DIRECT,</span><br><span class="line">  #         &quot;reality&quot;,</span><br><span class="line">  #         &quot;hy2&quot;,</span><br><span class="line">  #         &quot;tuic5&quot;,</span><br><span class="line">  #       ],</span><br><span class="line">  #   &#125;</span><br><span class="line">  # - &#123;</span><br><span class="line">  #     name: &quot;🇧 哔哩东南亚&quot;,</span><br><span class="line">  #     type: select,</span><br><span class="line">  #     proxies:</span><br><span class="line">  #       [</span><br><span class="line">  #         &quot;🚀 节点选择&quot;,</span><br><span class="line">  #         DIRECT,</span><br><span class="line">  #         &quot;reality&quot;,</span><br><span class="line">  #         &quot;hy2&quot;,</span><br><span class="line">  #         &quot;tuic5&quot;,</span><br><span class="line">  #       ],</span><br><span class="line">  #   &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🌍 国外媒体&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇳 Netflix&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇹 Tiktok&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇧 巴哈姆特&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          &quot;♻️ 自动选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🆂 Spotify&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇦 Abema&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🆂 Steam&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇫 Facebook&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;📲 电报信息&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇽 推特消息&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🖥 ChatGPT&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🅿️ Pixiv&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇪 E-Hentai&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🖴 OneDrive&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;Ⓜ️ 微软服务&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🍎 苹果服务&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇬 谷歌服务&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇬 GitHub&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🇨 Cloudflare&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          &quot;♻️ 自动选择&quot;,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  # - &#123;</span><br><span class="line">  #     name: &quot;🇨 Cloudfront&quot;,</span><br><span class="line">  #     type: select,</span><br><span class="line">  #     proxies:</span><br><span class="line">  #       [</span><br><span class="line">  #         DIRECT,</span><br><span class="line">  #         &quot;🚀 节点选择&quot;,</span><br><span class="line">  #         &quot;♻️ 自动选择&quot;,</span><br><span class="line">  #         &quot;reality&quot;,</span><br><span class="line">  #         &quot;hy2&quot;,</span><br><span class="line">  #         &quot;tuic5&quot;,</span><br><span class="line">  #       ],</span><br><span class="line">  #   &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🎯 全球直连&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          &quot;♻️ 自动选择&quot;,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🛑 全球拦截&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          REJECT,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🍃 应用净化&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          REJECT,</span><br><span class="line">          DIRECT,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line">  - &#123;</span><br><span class="line">      name: &quot;🐟 漏网之鱼&quot;,</span><br><span class="line">      type: select,</span><br><span class="line">      proxies:</span><br><span class="line">        [</span><br><span class="line">          &quot;🎯 全球直连&quot;,</span><br><span class="line">          &quot;🚀 节点选择&quot;,</span><br><span class="line">          &quot;♻️ 自动选择&quot;,</span><br><span class="line">          &quot;reality&quot;,</span><br><span class="line">          &quot;hy2&quot;,</span><br><span class="line">          &quot;tuic5&quot;,</span><br><span class="line">        ],</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">rules:</span><br><span class="line">  # 若需禁用 QUIC 请取消注释 QUIC 两条规则</span><br><span class="line">  # 防止 YouTube 等使用 QUIC 导致速度不佳, 禁用 443 端口 UDP 流量（不包括国内）</span><br><span class="line"></span><br><span class="line">  # - AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOSITE,cn))),REJECT # quic</span><br><span class="line">  - RULE-SET,AWAvenue-Ads,🍃 应用净化</span><br><span class="line">  # - GEOSITE,biliintl,🇧 哔哩东南亚</span><br><span class="line">  # - GEOSITE,bilibili,🇧 哔哩哔哩</span><br><span class="line"></span><br><span class="line">  # 可在下方加入自己特需的规则</span><br><span class="line">  # - DOMAIN-SUFFIX,libvio.fun,🎯 全球直连</span><br><span class="line">  # - DOMAIN-KEYWORD,admarvel,🛑 全球拦截</span><br><span class="line">  # - DOMAIN-SUFFIX,kajicam.com,🌍 国外媒体</span><br><span class="line">  # - DOMAIN,s3-ap-southeast-1.amazonaws.com,🌍 国外媒体</span><br><span class="line">  # - IP-CIDR,69.53.224.0/19,🌍 国外媒体,no-resolve</span><br><span class="line">  - DOMAIN-KEYWORD,libvio,🎯 全球直连</span><br><span class="line">  - DOMAIN-SUFFIX,dcg.microsoft.com,🎯 全球直连</span><br><span class="line">  - DOMAIN-SUFFIX,windowsphone.com,🎯 全球直连</span><br><span class="line">  - DOMAIN-SUFFIX,windowsphone-int.com,🎯 全球直连</span><br><span class="line">  - DOMAIN-SUFFIX,argotunnel.com,🇨 Cloudflare</span><br><span class="line">  - DOMAIN-SUFFIX,cftunnel.com,🇨 Cloudflare</span><br><span class="line">  - DOMAIN-SUFFIX,cloudflareaccess.com,🇨 Cloudflare</span><br><span class="line">  - DOMAIN-SUFFIX,cloudflareresearch.com,🇨 Cloudflare</span><br><span class="line">  - DOMAIN-SUFFIX,dmmiku.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,hfyrw.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,kajicam.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,apkcombo.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,winudf.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,fanmingming.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,xn--sss604efuw.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,mayiyingshi.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,reddit.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,greasyfork.org,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,nodeseek.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,vercel.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,vercel.app,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,missav.ws,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,missav.ai,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,xhamster.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,xhcdn.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,ahcdn.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,nodeloc.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,nodeseek.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,hostloc.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,linux.do,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,discord.gg,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,ipify.org,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,ip.sb,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,winget.run,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,hmoegirl.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,wikipedia.org,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,moegirl.uk,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,hmoegirl.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,hmoegirl.cyou,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,segfault.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,yahoo.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,wa.me,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,wl.co,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsappbrand.com,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.cc,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.info,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.org,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp-plus.info,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp-plus.me,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp-plus.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,whatsapp.tv,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,xingliu.art,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,jsdelivr.net,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,prodregistryv2.org,🌍 国外媒体</span><br><span class="line">  - DOMAIN-SUFFIX,cursor.sh,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,flowith.io,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,flowith.com,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,lovart.ai,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,lmarena.ai,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,easemate.ai,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,cursor.com,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,codeium.com,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,windsurf.com,🖥 ChatGPT</span><br><span class="line">  - DOMAIN-SUFFIX,warp.dev,🖥 ChatGPT</span><br><span class="line"></span><br><span class="line">  - GEOSITE,category-ai-!cn,🖥 ChatGPT</span><br><span class="line">  - GEOSITE,apple,🍎 苹果服务</span><br><span class="line">  - GEOSITE,apple-cn,🍎 苹果服务</span><br><span class="line">  - GEOSITE,ehentai,🇪 E-Hentai</span><br><span class="line">  - GEOSITE,github,🇬 GitHub</span><br><span class="line">  - GEOSITE,twitter,🇽 推特消息</span><br><span class="line">  - GEOSITE,youtube,🇬 谷歌服务</span><br><span class="line">  - GEOSITE,google,🇬 谷歌服务</span><br><span class="line">  - GEOSITE,google-cn,🇬 谷歌服务</span><br><span class="line">  - GEOSITE,telegram,📲 电报信息</span><br><span class="line">  - GEOSITE,abema,🇦 Abema</span><br><span class="line">  - GEOSITE,netflix,🇳 Netflix</span><br><span class="line">  - GEOSITE,tiktok,🇹 Tiktok</span><br><span class="line">  - GEOSITE,bahamut,🇧 巴哈姆特</span><br><span class="line">  - GEOSITE,spotify,🆂 Spotify</span><br><span class="line">  - GEOSITE,pixiv,🅿️ Pixiv</span><br><span class="line">  - GEOSITE,steam@cn,DIRECT</span><br><span class="line">  - GEOSITE,steam,🆂 Steam</span><br><span class="line">  - GEOSITE,onedrive,🖴 OneDrive</span><br><span class="line">  - GEOSITE,microsoft,Ⓜ️ 微软服务</span><br><span class="line">  - GEOSITE,geolocation-!cn,🐟 漏网之鱼</span><br><span class="line">  # - AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOIP,CN))),REJECT # quic</span><br><span class="line">  - GEOIP,google,🇬 谷歌服务</span><br><span class="line">  - GEOIP,netflix,🇳 Netflix</span><br><span class="line">  - GEOIP,facebook,🇫 Facebook</span><br><span class="line">  - GEOIP,telegram,📲 电报信息</span><br><span class="line">  - GEOIP,twitter,🇽 推特消息</span><br><span class="line">  - GEOSITE,cloudflare,🇨 Cloudflare</span><br><span class="line">  - GEOIP,cloudflare,🇨 Cloudflare</span><br><span class="line">  # - GEOIP,cloudfront,🇨 Cloudfront</span><br><span class="line">  - GEOSITE,CN,🎯 全球直连</span><br><span class="line">  - GEOIP,CN,🎯 全球直连</span><br><span class="line">  # 绕过局域网地址</span><br><span class="line">  - IP-CIDR,10.0.0.0/8,DIRECT</span><br><span class="line">  - IP-CIDR,172.16.0.0/12,DIRECT</span><br><span class="line">  - IP-CIDR,192.168.0.0/16,DIRECT</span><br><span class="line">  - IP-CIDR,100.64.0.0/10,DIRECT</span><br><span class="line">  - IP-CIDR,127.0.0.0/8,DIRECT</span><br><span class="line">  - MATCH,🐟 漏网之鱼</span><br></pre></td></tr></table></figure><p>另外某些敏感时期，海外的 DoT&#x2F;DoH 等服务可能会被阻断，需要在 Clash 的覆写设置中设置 DNS 的 fallback 组。可以在公共 DNS 大全地址汇总中寻找国内的 DNS 服务：<a class="link"   href="https://dns.iui.im/" >公共DNS大全地址汇总|去广告DNS服务器|公共DNS服务器|DNS地址 - dns.iui.im<i class="fas fa-external-link-alt"></i></a></p><p>Clash 官方提供的 GEO 数据库：<a class="link"   href="https://github.com/MetaCubeX/meta-rules-dat" >MetaCubeX&#x2F;meta-rules-dat<i class="fas fa-external-link-alt"></i></a></p><p>Clash GEO 数据库引用的原 v2fly 提供的部分 GEOSITE 数据：<a class="link"   href="https://github.com/v2fly/domain-list-community/tree/master/data" >v2fly&#x2F;domain-list-community<i class="fas fa-external-link-alt"></i></a></p><p>如果要在代理网络下使用 Cloudflared 客户端，最好将 Cloudflare 策略组设置为直连，否则可能无法正常连接。如果需要代理 Cloudfalred 的网络，请参考：<a class="link"   href="https://blog.xmgspace.me/archives/cloudflare-tunnel-via-proxy.html" >Cloudflare Tunnel速度慢？尝试给它加个前置代理提高速度<i class="fas fa-external-link-alt"></i></a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span c</summary>
      
    
    
    
    
    <category term="代理" scheme="https://saika.us.kg/tags/%E4%BB%A3%E7%90%86/"/>
    
  </entry>
  
  <entry>
    <title>RAX3000Me 带 USB 款免拆刷机</title>
    <link href="https://saika.us.kg/2025/03/12/rax3000me-flash/"/>
    <id>https://saika.us.kg/2025/03/12/rax3000me-flash/</id>
    <published>2025-03-12T01:32:22.352Z</published>
    <updated>2025-03-12T18:02:50.579Z</updated>
    
    <content type="html"><![CDATA[<p>废话不多说，前段时间在拼多多看到的路由器，中国移动 RAX3000Me，网上看了一圈信息很少，但是恩山里看到了有人成功刷入 OpenWRT 的，刚好手上有一张满 100-50 的券，遂以 ￥54 的价格购入。</p><h3 id="外观评价"><a href="#外观评价" class="headerlink" title="外观评价"></a>外观评价</h3><p>基本和 RAX3000M 一致，但是底部增加了两个挂钩母座，且天线的旋转限位从 90 度增加到了 180 度，更方便挂墙使用。<br><img   src="https://s2.loli.net/2025/03/12/2XCbL9DmslYQGro.jpg" ></p><p><img   src="https://s2.loli.net/2025/03/12/j94y16eqVvGmxYR.jpg" ></p><p><img   src="https://s2.loli.net/2025/03/12/Vws8vg3N4x6OXol.jpg" ></p><p>配置方面和 RAX3000M 相差并不大，基本上只有闪存、内存芯片的型号不一样，但是大小和 RAX3000M NAND 版是保持一致的。同样的，MT7981、512 M 内存，128 M 闪存，1 WAN 3 LAN，1 个 USB 3.0。</p><h3 id="刷入-uboot"><a href="#刷入-uboot" class="headerlink" title="刷入 uboot"></a>刷入 uboot</h3><h4 id="开启-Telnet"><a href="#开启-Telnet" class="headerlink" title="开启 Telnet"></a>开启 Telnet</h4><p>相比于 RAX3000M，这款路由器的配置是加密的，而且其加密是根据每台机器的 SN 码进行的，所以不能像 RAX3000M 那样便利的开启 SSH 进行刷机。在<a class="link"   href="https://www.right.com.cn/FORUM/thread-8416152-1-1.html" >恩山大佬<i class="fas fa-external-link-alt"></i></a>的教程中，提供了解密和二次加密的方法，但是因为其必须在 Linux 环境下进行，有一定的门槛。为了更加方便的获取适用于自己的 SN 码的配置文件，我写了一个 Shell 脚本托管在 Replit 平台，可以通过注册这个平台并复制我的项目，以供生成自己的配置文件。<br><img   src="https://s2.loli.net/2025/03/12/2ouijSmnDbCRKVN.png" ></p><p><img   src="https://s2.loli.net/2025/03/12/N5MOR7FscDi8YIU.png" ></p><p>以下是链接，注册并登录 <a class="link"   href="https://replit.com/~" >Replit<i class="fas fa-external-link-alt"></i></a> 后，按照其 README 进行操作即可。</p><p><strong><a class="link"   href="https://replit.com/@k0baya/Rax3000Me-telnet-conf?v=1#README.md" >Rax3000Me-telnet-conf - Replit<i class="fas fa-external-link-alt"></i></a></strong></p><h4 id="刷写uboot"><a href="#刷写uboot" class="headerlink" title="刷写uboot"></a>刷写uboot</h4><p>登录进入 Telnet 后，需要把 uboot 文件下载到路由器的内存里。</p><ol><li><p>如果路由器有网，可以直接下载，在 telnet 中使用命令：</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 -P /tmp https://github.com/QiYueYiya/OpenWrt-Actions/releases/download/RAX3000Me_Files/mt7981_cmcc_rax3000m-fip-fixed-parts.bin</span><br></pre></td></tr></table></figure></li><li><p>如果路由器没有联网，那么需要在内网开启一个 http 服务器提供文件下载服务：<br><img   src="https://s2.loli.net/2025/03/12/T3sCStzqWhmdfeu.png" ><br>可以参考 <a class="link"   href="https://github.com/QiYueYiya/OpenWrt-Actions/tree/main/RAX3000Me#%E5%85%88%E5%9C%A8%E7%94%B5%E8%84%91%E4%B8%8A%E4%B8%8B%E8%BD%BD%E5%A5%BDuboot%E8%A7%A3%E5%8E%8B%E6%8F%90%E5%8F%96%E5%87%BAmt7981_cmcc_rax3000m-fip-fixed-partsbin%E6%96%87%E4%BB%B6" >QiYueYiya 大佬的方法<i class="fas fa-external-link-alt"></i></a>，使用 <a class="link"   href="https://github.com/QiYueYiya/OpenWrt-Actions/releases/download/RAX3000Me_Files/HTTP_File_Server.exe" >HTTP File Server<i class="fas fa-external-link-alt"></i></a> 软件在 Windows 电脑上启动一个 HTTP 文件分享服务器，然后在 telnet 中使用命令：</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 -P /tmp http://192.168.10.2/mt7981_cmcc_rax3000m-fip-fixed-parts.bin</span><br></pre></td></tr></table></figure><p>将 uboot 文件下载到路由器内存里。实操中我发现使用内网设备（甚至 Android 手机）运行一个 AList 客户端也可以起到相同的效果。</p></li></ol><p>接着继续在 telnet 中使用命令刷入 uboot：</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">mtd write /tmp/mt7981_cmcc_rax3000m-fip-fixed-parts.bin FIP</span><br></pre></td></tr></table></figure><h4 id="刷入第三方固件"><a href="#刷入第三方固件" class="headerlink" title="刷入第三方固件"></a>刷入第三方固件</h4><p>首先将路由器断电，并用牙签等物品插入路由器的 Reset 按键的小孔，按住 Reset 键，再给路由器通电，等到指示灯变绿，则路由器已经进入了 uboot。</p><p>接着将路由器的 LAN 口与电脑的网线接口相连，并将电脑的以太网的 IP 分配方法改为手动，IPv4 地址改为 <code>192.168.1.2</code>，子关掩码为 <code>255.255.255.0</code>，网关为 <code>192.168.1.1</code>。</p><p>接着电脑打开浏览器，在地址栏输入 <code>http://192.168.1.1</code> 即可进入 uboot 的操作界面，刷写 factory 固件并等待路由器重启即可。刷机完毕后，将电脑的 IP 分配方法改回 DHCP 自动获取。</p><blockquote><p>如果刷的是 QiYueYiya 大佬的固件，则刷机后的后台地址为 <code>http://192.168.5.1</code>。<br><img   src="https://s2.loli.net/2025/03/12/76vjaqDPYNxCTIn.png" ></p></blockquote><p>在 OpenWRT 中升级固件时，使用 sysupgrade 固件。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;废话不多说，前段时间在拼多多看到的路由器，中国移动 RAX3000Me，网上看了一圈信息很少，但是恩山里看到了有人成功刷入 OpenWRT 的，刚好手上有一张满 100-50 的券，遂以 ￥54 的价格购入。&lt;/p&gt;
&lt;h3 id=&quot;外观评价&quot;&gt;&lt;a href=&quot;#外观评价</summary>
      
    
    
    
    
    <category term="路由器" scheme="https://saika.us.kg/tags/%E8%B7%AF%E7%94%B1%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>JetBrains 系 IDE 激活工具 Ja-netfilter 的使用方法</title>
    <link href="https://saika.us.kg/2024/12/26/ja-netfilter-usage/"/>
    <id>https://saika.us.kg/2024/12/26/ja-netfilter-usage/</id>
    <published>2024-12-26T02:27:06.997Z</published>
    <updated>2024-12-26T02:54:00.659Z</updated>
    
    <content type="html"><![CDATA[<p>近来打算从 VS Code 换到 JetBrains 家的 IDE 试试看，结果看到网上不少对 ja-netfilter 二次打包压缩包进行微信公众号引流的垃圾帖子，以及很多不明真相不知道如何激活 Clion、PyCharm、‌‌WebStorm 等 IDE 的求助。于是，记录一下使用 ja-netfilter 激活各种 JetBrains 软件的方法。</p><p>首先，需要挂一个代理，然后访问 <code>https://jetbra.in/s</code> ，选择进入其列表中任意一个可用的页面，在顶端下载 <code>jetbra.zip</code> ，下载完成后，解压到任意位置，作永久保存。</p><p>接着，去 JetBrains 官网下载安装最新版本的 IDE 软件。安装完成后，在刚刚解压的文件中找到 <code>scripts</code> 文件夹，一般来讲对于普通的 Windows 用户来说，运行 <code>install-current-user.vbs</code> 这个脚本即可。等待 30 秒左右，脚本提示 <code>Done</code> 即代表运行成功。</p><p>最后打开刚刚安装的 IDE 软件，选择使用激活码激活，在刚刚下载 <code>jetbra.zip</code> 压缩包的网页上，鼠标左键单击自己安装的 IDE 的图标，即可复制一个可用的激活码，粘贴到 IDE 内进行激活即可。一般激活码激活后显示有效期为 1-2 年，但是实际上是永久激活。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;近来打算从 VS Code 换到 JetBrains 家的 IDE 试试看，结果看到网上不少对 ja-netfilter 二次打包压缩包进行微信公众号引流的垃圾帖子，以及很多不明真相不知道如何激活 Clion、PyCharm、‌‌WebStorm 等 IDE 的求助。于是，</summary>
      
    
    
    
    
    <category term="IDE" scheme="https://saika.us.kg/tags/IDE/"/>
    
  </entry>
  
  <entry>
    <title>Azure spot 虚拟机自启</title>
    <link href="https://saika.us.kg/2024/11/07/az100-spot-auto-start/"/>
    <id>https://saika.us.kg/2024/11/07/az100-spot-auto-start/</id>
    <published>2024-11-07T01:47:23.122Z</published>
    <updated>2024-11-06T17:47:23.122Z</updated>
    
    <content type="html"><![CDATA[<p>最近跟风用上了 Azure for Students 的 100 美元赠金，大致看了一下 Azure 提供的服务，其中虚拟机和 AI 服务比较有吸引力。我粗略查看下，Azure 的 AI 服务似乎只能使用 OpenAI 的模型，但是已经把 Chat2API 反复使用，甚至自行修改使用后，基本上相当于已经手持用不完的 GPT-4o 模型了，且多模态用惯了之后，对新出的 o1-mini 等针对特定领域特化的纯文本模型又不是特别感兴趣，于是我就直接放弃了使用 Azure 的 AI 服务。</p><p>于是我的目光盯上了虚拟机。在群友的提醒下，得知勾选 “Spot” 规格，可以获得接近 90% 的折扣，于是，在并未搞明白有什么区别的时候，就直接开了一台 “Spot” 规格的机器。心想大厂服务器肯定靠谱，顺手就部署了一个 Chat2API 以及 ChatGPT 镜像站，以供群友使用。</p><p>不出意外的话，意外就出现了。没过两天，OAIFREE 的服务突然宕机，我想着我还有自己的镜像站能用，于是打开网页查看，发现服务掉线了。然后我登上 Azure 一看，被关机了。我才知道这个 “Spot” 规格到底是什么意思。简而言之，你可以选择两种前置条件：</p><ol><li>当数据中心的资源不充裕时；</li><li>当数据中心的资源不充裕或者账户余额不足时。</li></ol><p>当满足前置条件时的处理也有两种选择：</p><ol><li>关机；</li><li>删除机器。</li></ol><p>还好，我当时稀里糊涂之下选择的是当资源不充裕时关机，所以手动开机之后又一切正常了。但是这样动不动就需要手动登录面板开机的话，实在是太难用了，于是我开始寻找关机后自动开机的方法。于是我找到了：<a class="link"   href="https://hostloc.com/thread-1182352-1-1.html" >教你稳定1折使用Azure的服务器，让Azure不在那么贵不可及<i class="fas fa-external-link-alt"></i></a></p><p>按照这篇帖子的操作，我自己折腾了半天，拉不起来。后来才发现是自己没正确理解原贴中文字描述而不带图片的几个步骤，所以没能成功拉起。后来我又找到了一篇英文的说明，也是参考上述 Hostloc 的帖子，而博主又自行添加了一些说明以及截图，结合两篇说明外加自行摸索了好一会儿，我才完全弄明白。附上那篇英文博文的地址：<a class="link"   href="https://blog.51sec.org/2023/10/auto-start-stopped-spot-instance-to.html" >Auto Start Stopped Spot Instance to Get Your VM Running Again<i class="fas fa-external-link-alt"></i></a>。</p><h3 id="设置-Spot-规格虚拟机自动启动"><a href="#设置-Spot-规格虚拟机自动启动" class="headerlink" title="设置 Spot 规格虚拟机自动启动"></a>设置 Spot 规格虚拟机自动启动</h3><p>跳过创建虚拟机的部分，直接来说 Spot 规格的虚拟机如何自启的方法。首先，原理是利用 Azure 自带的监控功能，监控虚拟机状态，并发出警报。已知警报可以触发自动化流程，故编写一个自动化流程以开启虚拟机，即可完成自动启动。</p><blockquote><p>因为 Azure 面板即便设置中文，也会中英文掺杂，而且很多机翻，会误导用户，故以下展示在讲面板语言设置为英文的状态下进行。</p></blockquote><h4 id="创建自动化账户"><a href="#创建自动化账户" class="headerlink" title="创建自动化账户"></a>创建自动化账户</h4><p>首先新建一个 Automation Accounts，直接在 Azure 面板的搜索栏里搜索 <code>Automation</code> 即可找到：<br><img   src="https://s2.loli.net/2024/11/07/CJHmOsNyIS3lkxf.png" ></p><p>切记创建 Automation Accounts 时，订阅要和你的虚拟机所在的订阅相同（绑卡用户使用 Pay as you go，edu 订阅使用 Azure for Students）资源组最好也选择和虚拟机相同的资源组。随便键入一个名字即可。其他选项全部默认，一路 Next 直到创建。</p><p><img   src="https://s2.loli.net/2024/11/07/a8QvDpRJflbhytq.png" ></p><h4 id="添加启动脚本为-Runbooks"><a href="#添加启动脚本为-Runbooks" class="headerlink" title="添加启动脚本为 Runbooks"></a>添加启动脚本为 Runbooks</h4><p>接下来在这个自动化账户内，侧边栏里找到 Processing Automation，点击其中的 Runbooks，再点击 Create a runbook。</p><p><img   src="https://s2.loli.net/2024/11/07/upUQG3rBiX5wnoq.png" ></p><p>类型选择 PowerShell，Runtime Version 选择 5.1，随便取个名字，然后直接创建。</p><p><img   src="https://s2.loli.net/2024/11/07/xhOnqPRUd9Ci6ku.png" ></p><p>在编辑内粘贴以下脚本，不要做其他修改，直接点击 Public 发布。</p><figure class="highlight ps1"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">param</span> (</span><br><span class="line"></span><br><span class="line">    [<span class="type">Parameter</span>(<span class="type">Mandatory</span>=<span class="variable">$true</span>)]  </span><br><span class="line">    [<span class="built_in">String</span>] <span class="variable">$Action</span>,</span><br><span class="line"></span><br><span class="line">    [<span class="type">Parameter</span>(<span class="type">Mandatory</span>=<span class="variable">$true</span>)]  </span><br><span class="line">    [<span class="built_in">String</span>] <span class="variable">$TagName</span>,</span><br><span class="line"></span><br><span class="line">    [<span class="type">Parameter</span>(<span class="type">Mandatory</span>=<span class="variable">$true</span>)]</span><br><span class="line">    [<span class="built_in">String</span>] <span class="variable">$TagValue</span></span><br><span class="line">) </span><br><span class="line"></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;------------------------ Authentication ------------------------&quot;</span></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;Logging into Azure ...&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line">    <span class="string">&quot;Logging in to Azure...&quot;</span></span><br><span class="line">    <span class="built_in">Connect-AzAccount</span> <span class="literal">-Identity</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">catch</span> &#123;</span><br><span class="line">    <span class="built_in">Write-Error</span> <span class="literal">-Message</span> <span class="variable">$_</span>.Exception</span><br><span class="line">&#125;</span><br><span class="line"><span class="variable">$SubscriptionId</span> = <span class="string">&quot;&lt;YOUR SUBSCRIPTION ID&gt;&quot;</span></span><br><span class="line"><span class="built_in">Select-AzContext</span> <span class="literal">-name</span> ((<span class="built_in">Get-AzContext</span> <span class="literal">-ListAvailable</span>).Name <span class="operator">-match</span> <span class="variable">$SubscriptionId</span>)[<span class="number">0</span>]</span><br><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable">$Action</span> <span class="operator">-eq</span> <span class="string">&quot;Start&quot;</span> <span class="operator">-or</span> <span class="variable">$Action</span> <span class="operator">-eq</span> <span class="string">&quot;Stop&quot;</span>) &#123;</span><br><span class="line">        <span class="built_in">Write-Output</span> <span class="string">&quot;Action Selected&quot;</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> &#123; </span><br><span class="line">        <span class="built_in">Write-Output</span> <span class="string">&quot;Wrong Action Selection. It should be Start or Stop&quot;</span></span><br><span class="line">        <span class="keyword">Exit</span> </span><br><span class="line">    &#125;</span><br><span class="line">&#125; <span class="keyword">catch</span> &#123;</span><br><span class="line">    <span class="built_in">Write-Error</span> <span class="literal">-Message</span> <span class="variable">$_</span>.Exception</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;---------------------------- Status ----------------------------&quot;</span></span><br><span class="line"><span class="built_in">Write-Output</span> <span class="string">&quot;Getting all virtual machines with Tags ...&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="variable">$myvms</span> = <span class="built_in">Get-AzVM</span> | <span class="built_in">Where-Object</span> &#123; <span class="variable">$_</span>.Tags[<span class="variable">$TagName</span>] <span class="operator">-eq</span> <span class="variable">$TagValue</span> &#125;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">Write-Output</span> <span class="string">&quot;Total of VMs: <span class="variable">$</span>(<span class="variable">$myvms</span>.Length)&quot;</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">foreach</span> (<span class="variable">$vm</span> <span class="keyword">in</span> <span class="variable">$myvms</span>) &#123;</span><br><span class="line">        <span class="built_in">Write-Output</span> <span class="variable">$vm</span>.Name</span><br><span class="line">        <span class="variable">$status</span> = <span class="built_in">Get-AzVM</span> <span class="literal">-Name</span> <span class="variable">$vm</span>.Name <span class="literal">-Status</span></span><br><span class="line">        <span class="built_in">Write-Output</span> <span class="string">&quot;VM <span class="variable">$</span>(<span class="variable">$vm</span>.Name) status: <span class="variable">$</span>(<span class="variable">$status</span>.PowerState)&quot;</span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (<span class="variable">$Action</span> <span class="operator">-eq</span> <span class="string">&quot;Start&quot;</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="variable">$status</span>.PowerState <span class="operator">-eq</span> <span class="string">&quot;VM deallocated&quot;</span>) &#123;</span><br><span class="line">                <span class="built_in">Write-Output</span> <span class="string">&quot;Starting VM: <span class="variable">$</span>(<span class="variable">$vm</span>.Name)&quot;</span></span><br><span class="line">                <span class="keyword">try</span> &#123;</span><br><span class="line">                    <span class="built_in">Start-AzVM</span> <span class="literal">-Name</span> <span class="variable">$vm</span>.Name <span class="literal">-ResourceGroupName</span> <span class="variable">$vm</span>.ResourceGroupName <span class="literal">-NoWait</span></span><br><span class="line">                &#125; <span class="keyword">catch</span> &#123;</span><br><span class="line">                    <span class="built_in">Write-Error</span> <span class="literal">-Message</span> <span class="variable">$_</span>.Exception</span><br><span class="line">                &#125;</span><br><span class="line">            </span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="built_in">Write-Output</span> <span class="string">&quot;VM: <span class="variable">$</span>(<span class="variable">$vm</span>.Name) is already started&quot;</span></span><br><span class="line">            &#125;  </span><br><span class="line">        &#125; </span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (<span class="variable">$Action</span> <span class="operator">-eq</span> <span class="string">&quot;Stop&quot;</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (<span class="variable">$status</span>.PowerState <span class="operator">-eq</span> <span class="string">&quot;VM running&quot;</span>) &#123;</span><br><span class="line">                <span class="built_in">Write-Output</span> <span class="string">&quot;Stopping VM: <span class="variable">$</span>(<span class="variable">$vm</span>.Name)&quot;</span></span><br><span class="line">                <span class="keyword">try</span> &#123;                    </span><br><span class="line">                    <span class="built_in">Stop-AzVM</span> <span class="literal">-Name</span> <span class="variable">$vm</span>.Name <span class="literal">-ResourceGroupName</span> <span class="variable">$vm</span>.ResourceGroupName <span class="literal">-Force</span> <span class="literal">-NoWait</span></span><br><span class="line">                &#125; <span class="keyword">catch</span> &#123;</span><br><span class="line">                    <span class="built_in">Write-Error</span> <span class="literal">-Message</span> <span class="variable">$_</span>.Exception</span><br><span class="line">                &#125;</span><br><span class="line">            </span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="built_in">Write-Output</span> <span class="string">&quot;VM: <span class="variable">$</span>(<span class="variable">$vm</span>.Name) is already stopped&quot;</span></span><br><span class="line">            &#125;  </span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">catch</span> &#123;</span><br><span class="line">    <span class="built_in">Write-Error</span> <span class="literal">-Message</span> <span class="variable">$_</span>.Exception</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img   src="https://s2.loli.net/2024/11/07/M59cZKRi6eOy4AT.png" ></p><p>回到自动化账户的 Runbooks 下，看到刚刚新建的 Runbooks 已经显示为 Published 则成功添加了自启脚本。</p><h4 id="为自动化账户添加权限"><a href="#为自动化账户添加权限" class="headerlink" title="为自动化账户添加权限"></a>为自动化账户添加权限</h4><p>在搜索栏内搜索 <code>Subscription</code>，并进入订阅页：</p><p><img   src="https://s2.loli.net/2024/11/07/YNEIWX6ywgmHK4e.png" ></p><p>选择你的订阅（绑卡用户使用 Pay as you go，edu 订阅使用 Azure for Students）并进入：</p><p><img   src="https://s2.loli.net/2024/11/07/YFDAQMTHwJofyWS.png" ></p><p>然后在侧边栏 Access control (IAM) 中，点击 Add role assignment：</p><p><img   src="https://s2.loli.net/2024/11/07/lW9yHvgSVctMfbZ.png" ></p><p>Role 选项的设置中，选择 Privileged administrator roles 中的 Owner 角色：</p><p><img   src="https://s2.loli.net/2024/11/07/TW4umfhoQJvcIsN.png" ></p><p>Member 选项中，Assign access to 选择 Managed identity，依次选择 Automation Accounts，以及刚刚创建的自动化账户：</p><p><img   src="https://s2.loli.net/2024/11/07/VYP61I2dUGJNMat.png" ></p><p>Conditions 选项中，What user can do 选择第三项，然后直接 Review + assign：</p><p><img   src="https://s2.loli.net/2024/11/07/qsUBT5RgbpyXIWD.png" ></p><p>添加完订阅的权限后，再到搜索栏搜索 <code>vm</code>，并进入虚拟机管理的页面：</p><p><img   src="https://s2.loli.net/2024/11/07/up7gW36vQXFAR5f.png" ></p><p>然后找到需要设置自动启动的 Spot 虚拟机，为重复上述操作，再次添加权限：</p><p><img   src="https://s2.loli.net/2024/11/07/ure67WZkvnlMR54.png" ></p><p>顺带给这台虚拟机添加一个标签，可以随意填写，我这里填写的是 <code>1000:100</code>：</p><p><img   src="https://s2.loli.net/2024/11/07/t4CgszuUapIEveR.png" ></p><h4 id="为虚拟机添加监控警报"><a href="#为虚拟机添加监控警报" class="headerlink" title="为虚拟机添加监控警报"></a>为虚拟机添加监控警报</h4><p>找到侧边栏中的 Monitoring，进入其中的 Alerts，点击 Alerts rules（我这里已经添加过规则了所以显示不太一样，入口是一样的）：</p><p><img   src="https://s2.loli.net/2024/11/07/39LX2wJSzdygoPN.png" ></p><p>新建一个警报规则：</p><p><img   src="https://s2.loli.net/2024/11/07/qVuCEMN8rHYATv4.png" ></p><p>在 Condition 选项中选择信号时不要点下拉栏，直接点击 see all signals，并在弹窗中搜索 <code>availability</code>，选择 VM Availability Metric (Preview)：</p><p><img   src="https://s2.loli.net/2024/11/07/y2oHdbQiVJWtkmU.png" ></p><p>在 Actions 选项中新建一个 action group：</p><p><img   src="https://s2.loli.net/2024/11/07/v4c9Tz5itJbjmgI.png" ></p><p>新建 action group 时，订阅和资源组最好与需要自启的虚拟机以及自动化账户相同，随便取个名字就好：</p><p><img   src="https://s2.loli.net/2024/11/07/MJ8NGy5x7tvQYA6.png" ></p><p>Notifications 可设置也可不设置，只是一个提醒，能发邮件或者发短信什么的，发短信需要额外收费，有需要的可以自行设置。</p><p>Actions 中 Action type 选择 Automation Runbook，弹出的窗口中 Runbook source 选择 User，Automation account 选择刚刚创建的自动化账户，Runbook 选择刚刚新建并发布的 Runbook，再点击 Parameters 填入变量：</p><p><img   src="https://s2.loli.net/2024/11/07/vqPJFtTzL9ipr7s.png" ></p><p>第一个填 <code>Start</code>，切记首字母大写，第二三个按照刚刚给虚拟机添加的标签进行填写，比如刚刚我添加的标签为 <code>1000:100</code>，那么我第二个填 1000，第三个填 100。</p><p><img   src="https://s2.loli.net/2024/11/07/3NLxfnZFKJkD1W5.png" ></p><p>然后点击 OK 保存，再点击侧边弹窗的 OK 保存，然后直接点击 Review + create 创建 action group。</p><p>创建完 action group 后回到创建 alerts rule 的页面，当然 Actions 选择刚刚创建的 action group，而 Condition 中，Aggregation type 选择 Minimum，Operator 选择 Less than，Unit 选择 Count，Threshold 选择 1：</p><p><img   src="https://s2.loli.net/2024/11/07/fDL9iV2HThCa3mW.png" ></p><p>然后 Review + create 创建警报规则即可。</p><h4 id="测试自动启动"><a href="#测试自动启动" class="headerlink" title="测试自动启动"></a>测试自动启动</h4><p>完成了以上步骤，自动启动就已经设置好了，你可以在 Overview 中手动停止虚拟机进行测试，大概 5-6 分钟即可完成自动启动。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近跟风用上了 Azure for Students 的 100 美元赠金，大致看了一下 Azure 提供的服务，其中虚拟机和 AI 服务比较有吸引力。我粗略查看下，Azure 的 AI 服务似乎只能使用 OpenAI 的模型，但是已经把 Chat2API 反复使用，甚至自</summary>
      
    
    
    
    
    <category term="vps" scheme="https://saika.us.kg/tags/vps/"/>
    
  </entry>
  
  <entry>
    <title>Serv00 进程保活最终解决方案</title>
    <link href="https://saika.us.kg/2024/08/15/serv00-keep-alive/"/>
    <id>https://saika.us.kg/2024/08/15/serv00-keep-alive/</id>
    <published>2024-08-15T04:01:16.557Z</published>
    <updated>2024-09-09T13:16:14.128Z</updated>
    
    <content type="html"><![CDATA[<p>这个方案已经写出来差不多一个月了，Github 上也开了源，论坛里、群里也都介绍了使用方法，但是，目前除了我重构之后的 X-for-serv00 以及 Sb-for-serv00 以外，还没有哪个项目已经用上了的。遂在博客里对于这个方案进行进一步的介绍。</p><p>首先几个大前提，似乎还有很多人搞不清：</p><ol><li>Serv00 不是 VPS，是一台独立服务器，新建了很多用户，按照用户进行隔离，并没有虚拟化一个完整的 FreeBSD Server 给用户，所以没有 Root 权限，但是内置了很多独立服务器自带的软件包、服务等等，可以说是有利有弊；</li><li>Serv00 不是 Linux 系统，是 FreeBSD 系统，虽说 Unix like 使用起来总是相似的，但是总归还是不一样的；</li><li>Serv00 自带了一个 Web 服务器——Apache。Apache 与 Nginx 功能相似但是使用方法是不一样的，而且在没有 Root 权限的情况下，很多东西你无法进行设置；</li><li>每个用户能够最多预留三个端口的使用权，而且端口范围在 1024-64000；</li><li>因为是独立服务器按照用户进行隔离，所以你不能对其进行重启、重装等操作，机器的重启与重装会影响这台 Server 上的一万名用户</li><li>And so on…</li></ol><p>Serv00 的 Apache 服务器附带了一个插件——Phusion Passenger，利用其特性，我们能够在 Serv00 上实现访问网页即对进行实现保活。已知 WWW websites 在被访问时会按照其类型被唤醒，而且通过 Phusion Passenger 托管的 Django &#x2F; NodeJS &#x2F; Ruby on Rails 等类型的应用是可以端口复用，在 80 &#x2F;443 端口提供 Web 服务的，所以只需要在这样一个脚本或者应用内写入进程的检测与唤醒即可通过网页对进程保活。</p><p>但是这样做还有一个问题，一个网站需要两个域名，一个用来保活，一个用来提供 Web 服务，很是不方便，但是，在 JavaScript 中，可以通过引入 <a class="link"   href="https://github.com/chimurai/http-proxy-middleware" >chimurai&#x2F;http-proxy-middleware<i class="fas fa-external-link-alt"></i></a> 这个中间件将其合二为一，实现真正的访问即保活，访问即唤醒。</p><h3 id="示例"><a href="#示例" class="headerlink" title="示例"></a>示例</h3><p><code>app.js</code>的内容如下：</p><figure class="highlight javascript"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> express = <span class="built_in">require</span>(<span class="string">&quot;express&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">express</span>();</span><br><span class="line"><span class="keyword">const</span> port = <span class="number">3000</span>;</span><br><span class="line"><span class="keyword">var</span> exec = <span class="built_in">require</span>(<span class="string">&quot;child_process&quot;</span>).<span class="property">exec</span>;</span><br><span class="line"><span class="keyword">const</span> &#123; createProxyMiddleware &#125; = <span class="built_in">require</span>(<span class="string">&quot;http-proxy-middleware&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> path = <span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">&#x27;fs&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> currentDir = __dirname;</span><br><span class="line">process.<span class="title function_">chdir</span>(currentDir);</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">use</span>(<span class="string">&#x27;/&#x27;</span>, <span class="title function_">createProxyMiddleware</span>(&#123;</span><br><span class="line">  <span class="attr">target</span>: <span class="string">&#x27;http://127.0.0.1:PORT&#x27;</span>, <span class="comment">//改成 Web 应用实际运行端口</span></span><br><span class="line">  <span class="attr">changeOrigin</span>: <span class="literal">true</span>,  <span class="comment">//如果应用有基于 websocket 的连接，请把此处改为 false</span></span><br><span class="line">  <span class="attr">ws</span>: <span class="literal">true</span>, </span><br><span class="line">  <span class="attr">onError</span>: <span class="function">(<span class="params">err, req, res</span>) =&gt;</span> &#123;</span><br><span class="line">    res.<span class="title function_">writeHead</span>(<span class="number">500</span>, &#123;</span><br><span class="line">      <span class="string">&#x27;Content-Type&#x27;</span>: <span class="string">&#x27;text/plain&#x27;</span>,</span><br><span class="line">    &#125;);</span><br><span class="line">    res.<span class="title function_">end</span>(<span class="string">&#x27;Please wait for a while and try to refresh the page.&#x27;</span>);</span><br><span class="line">  &#125;,</span><br><span class="line">&#125;));</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">keep_web_alive</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="title function_">exec</span>(<span class="string">&quot;pgrep -laf PROCESS&quot;</span>, <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123; <span class="comment">//改成进程名，如：alist</span></span><br><span class="line">      <span class="keyword">if</span> (stdout.<span class="title function_">includes</span>(<span class="string">&quot;PROCESS_COMMAND&quot;</span>)) &#123;  <span class="comment">//改成进程实际运行命令，如：alist server</span></span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;web 正在运行&quot;</span>);</span><br><span class="line">      &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="title function_">exec</span>(</span><br><span class="line">          <span class="string">&quot;START_COMMAND&quot;</span>, <span class="comment">// 改成启动脚本或者启动命令，如：chmod +x start.sh &amp;&amp; ./start.sh 或者 ./alist server</span></span><br><span class="line">          <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (err) &#123;</span><br><span class="line">              <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;保活-调起web-命令行执行错误:&quot;</span> + err);</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">              <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&quot;保活-调起web-命令行执行成功!&quot;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">          &#125;</span><br><span class="line">        );</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="built_in">setInterval</span>(keep_web_alive, <span class="number">10</span> * <span class="number">1000</span>);</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">listen</span>(port, <span class="function">() =&gt;</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">`Example app listening on port <span class="subst">$&#123;port&#125;</span>!`</span>));</span><br></pre></td></tr></table></figure><p><code>package.json</code>的内容如下：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;example&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;A simple Express.js server&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;author&quot;</span><span class="punctuation">:</span> <span class="string">&quot;k0baya&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;main&quot;</span><span class="punctuation">:</span> <span class="string">&quot;app.js&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;license&quot;</span><span class="punctuation">:</span> <span class="string">&quot;MIT&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;private&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;scripts&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;start&quot;</span><span class="punctuation">:</span> <span class="string">&quot;node app.js&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;dependencies&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;express&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^4.19.2&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;http-proxy-middleware&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^3.0.0&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;engines&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;node&quot;</span><span class="punctuation">:</span> <span class="string">&quot;22&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;node&quot;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></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><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/home/LOGIN/domains/DOMAIN/public_nodejs/</span><br><span class="line">    ├──app.js</span><br><span class="line">    ├──package.json</span><br><span class="line">    └──其它应用所需文件（比如二进制文件、配置文件、启动脚本等）</span><br></pre></td></tr></table></figure><p>先执行 <code>npm22 install</code>，再访问网页即可唤醒应用。监控网页即可对应用进行保活。</p><p>此外，自动续期直接去 Serv00 自带的 Cron job 内添加每个月一次的 sshpass 命令即可，滥用 GitHub Actions 是很差劲且没有必要的行为。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;这个方案已经写出来差不多一个月了，Github 上也开了源，论坛里、群里也都介绍了使用方法，但是，目前除了我重构之后的 X-for-serv00 以及 Sb-for-serv00 以外，还没有哪个项目已经用上了的。遂在博客里对于这个方案进行进一步的介绍。&lt;/p&gt;
&lt;p&gt;首先</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>两种使用 Serv00 部署代理服务器的方法</title>
    <link href="https://saika.us.kg/2024/07/06/proxy-on-serv00/"/>
    <id>https://saika.us.kg/2024/07/06/proxy-on-serv00/</id>
    <published>2024-07-06T08:29:39.989Z</published>
    <updated>2024-08-14T19:59:40.307Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p><strong>项目已经重构，部署流程已经尽可能简单化，该篇博客不再适用，请按照 readme 进行部署。</strong></p></blockquote><p>好久没写博客，用最近自己写的两个仓库水一篇博客。</p><p>由于此前博客记录的在 Serv00 平台上部署 Vless 的两种方法都存在较为严重的安全隐患，且速度也并不理想，所以为了兼顾安全性和连接速率，我自己做了两个仓库，两个仓库分别是 <a class="link"   href="https://github.com/k0baya/X-for-serv00" >X-for-Serv00<i class="fas fa-external-link-alt"></i></a> 和 <a class="link"   href="https://github.com/k0baya/sb-for-serv00" >SB-for-Serv00<i class="fas fa-external-link-alt"></i></a>。两个仓库分别采用 Cloudflare CDN 加速、基于 UDP 暴力发包的连接协议提供更为理想的连接速率，且都加入了 TLS 加密 &#x2F; SNI 伪装，提升其安全性。</p><p>由于这两个仓库都需要占用 2 个端口，且在连接速率较高时，占用内存会比较大，故这两个仓库都建议单独一个账号部署，而不要在账号内安装&#x2F;部署其他应用，以尽可能把内存留给核心使用。所以，我也尽可能把此前在 Serv00 部署应用时一直在使用的 PM2 给尽可能省略了，采用了 <code>nohup &gt;/dev/null 2&gt;&amp;1 &amp;</code> 挂后台，然后自己写了一个循环运行的 <code>JavaScript</code> 函数对进程进行监控并在进程掉线后拉起。</p><p>先介绍部署方法，首先当然是注册 Serv00 账号，然后是登录 Panel，并将 <strong>Run your own applications</strong> 设置为 <strong>enabled</strong>，再开放两个端口。不同的是，X-for-serv00 需要开放的端口类型为 TCP，而 SB-for-Serv00 需要开放的端口类型为 UDP。</p><p>接着直接 ssh 登录你的 Serv00 账号，开始进行代理服务器本身的部署。</p><h3 id="X-for-Serv00"><a href="#X-for-Serv00" class="headerlink" title="X-for-Serv00"></a>X-for-Serv00</h3><p>首先将远程仓库 Clone 到本地：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/k0baya/X-for-serv00 ~/xray &amp;&amp; <span class="built_in">cd</span> ~/xray</span><br></pre></td></tr></table></figure><p>然后回到面板中，进入 <strong>File manager</strong>，找到 <code>~/xray/start.sh</code> 这个文件，右键点击 <code>start.sh</code> 文件，选择 View&#x2F;Edit &gt; Source Editor ，进行编辑，在 1 - 18 行修改环境变量：</p><table><thead><tr><th>变量名</th><th>是否必须</th><th>默认值</th><th>备注</th></tr></thead><tbody><tr><td>WEBPORT</td><td>是</td><td></td><td>网页端口，查看代理配置、获取订阅链接等等功能需要</td></tr><tr><td>VMPORT</td><td>是</td><td></td><td>Vmess 协议监听端口</td></tr><tr><td>UUID</td><td>是</td><td>de04add9-5c68-8bab-950c-08cd5320df18</td><td></td></tr><tr><td>WSPATH</td><td>是</td><td>serv00</td><td>勿以 &#x2F; 开头，协议路径为 &#x2F;WSPATH-协议，如 &#x2F;serv00-vmess</td></tr><tr><td>ARGO_AUTH</td><td>否</td><td></td><td>Argo 的 Token 值，ey 开头的一串，获取方法可以参考<a class="link"   href="https://imnks.com/5984.html" >群晖套件：Cloudflare Tunnel 内网穿透中文教程 支持DSM6、7<i class="fas fa-external-link-alt"></i></a> （如果需要填写，请删除单引号再填写，不填则保持原样。）</td></tr><tr><td>ARGO_DOMAIN</td><td>否</td><td></td><td>Argo 的域名，须与 ARGO_DOMAIN 必需一起填了才能生效</td></tr><tr><td>WEB_USERNAME</td><td>否</td><td>admin</td><td>网页的用户名</td></tr><tr><td>WEB_PASSWORD</td><td>否</td><td>password</td><td>网页的密码</td></tr></tbody></table><h4 id="固定-Argo-隧道"><a href="#固定-Argo-隧道" class="headerlink" title="固定 Argo 隧道"></a>固定 Argo 隧道</h4><p>如果你填入了ARGO_AUTH 和 ARGO_DOMAIN 环境变量，想用于固定 Argo 隧道，那么就需要执行此步。否则可以跳过。</p><p>在 Cloudflare Argo Tunnel 的面板中，给这条隧道添加一个域名，域名为刚刚填写的 <code>ARGO_DOMAIN</code> ，协议为 <code>HTTP</code> ，地址为<code>localhost:</code>加上刚刚填写的 <code>VMPORT</code> （如 <code>localhost:54321</code> ）。</p><h4 id="启动并获取配置"><a href="#启动并获取配置" class="headerlink" title="启动并获取配置"></a>启动并获取配置</h4><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">chmod +x start.sh &amp;&amp; bash start.sh</span><br></pre></td></tr></table></figure><p>最后等待一分钟左右，等程序完全启动，再直接使用 IP 访问 <code>WEBPORT</code> ，并进入<code>/list</code>路径（如<code>http://1.2.3.4:54321/list</code>）获取代理配置。（IP 可在 Panel 的 SSL 选项卡中，点击 WWW websites 后看到，一般有两个 IP ，任选其一即可。）</p><h4 id="自动启动"><a href="#自动启动" class="headerlink" title="自动启动"></a>自动启动</h4><p>在 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 After reboot，即为重启后运行。Form type 选择 Advanced，Command 写 <code>start.sh</code> 文件的绝对路径，比如：</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">/home/username/xray/start.sh &gt;/dev/null 2&gt;&amp;1</span><br></pre></td></tr></table></figure><blockquote><p>务必按照你的实际路径进行填写。</p></blockquote><h3 id="SB-for-Serv00"><a href="#SB-for-Serv00" class="headerlink" title="SB-for-Serv00"></a>SB-for-Serv00</h3><blockquote><p>更新后需要额外放行一个 TCP 端口供 Trojan 协议使用。</p></blockquote><p>在 Panel 中点击左侧菜单栏中的 SSL ，然后点击上方菜单栏中的 WWW websites ，点击第一个 IP Address 最右侧的 Manage 按钮，再点击上方菜单栏中的 Add certificate 按钮，Type 选择 Generate Let’s Encrypt certificate， Domain任选一个即可，最后点击下方的 Add 按钮进行生成。请至少保证自己的 Serv00 账号下有一个 Let’s Encrypt 的证书。</p><blockquote><p>为确保安全，当账号下没有 Let’s Encrypt 证书时，会拒绝生成配置，直接停止运行。</p></blockquote><p>接着将远程仓库 Clone 到本地：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/k0baya/sb-for-serv00 ~/sing-box &amp;&amp; <span class="built_in">cd</span> sing-box</span><br></pre></td></tr></table></figure><p>然后回到面板中，进入 <strong>File manager</strong>，找到 <code>~/sing-box/start.sh</code> 这个文件，右键点击 <code>start.sh</code> 文件，选择 View&#x2F;Edit &gt; Source Editor ，进行编辑，在 1 - 7 行修改环境变量：</p><table><thead><tr><th>变量名</th><th>是否必须</th><th>默认值</th><th>备注</th></tr></thead><tbody><tr><td>HY2PORT</td><td>是</td><td></td><td>Hysteria2 协议监听端口</td></tr><tr><td>TUIC5PORT</td><td>是</td><td></td><td>Tuic5 协议监听端口</td></tr><tr><td>SERV00PASSWORD</td><td>是</td><td></td><td>你的 Serv00 账号的密码，用于获取 SSL 证书</td></tr><tr><td>UUID</td><td>否</td><td>de04add9-5c68-8bab-950c-08cd5320df18</td><td></td></tr></tbody></table><h4 id="启动并获取配置-1"><a href="#启动并获取配置-1" class="headerlink" title="启动并获取配置"></a>启动并获取配置</h4><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">chmod +x start.sh &amp;&amp; bash start.sh</span><br></pre></td></tr></table></figure><p>等待程序完成启动，会在 Terminal 中直接打印出 Hysteria2 和 Tuic5 的配置链接。</p><h4 id="自动启动-1"><a href="#自动启动-1" class="headerlink" title="自动启动"></a>自动启动</h4><p>在 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 After reboot，即为重启后运行。Form type 选择 Advanced，Command 写 <code>start.sh</code> 文件的绝对路径，比如：</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">/home/username/sing-box/start.sh &gt;/dev/null 2&gt;&amp;1</span><br></pre></td></tr></table></figure><blockquote><p>务必按照你的实际路径进行填写。</p></blockquote><h3 id="仓库特点"><a href="#仓库特点" class="headerlink" title="仓库特点"></a>仓库特点</h3><p>由于 X-for-Serv00 的代理服务器核心是 Xray ，SB-for-Serv00 的代理服务器核心是 Sing-box，故下文将 X-for-Serv00 简称为 X，将 SB-For-Serv00 简称为 SB。</p><p>X 的特点是，这种模式可以在任意无公网 IP 的环境下使用。可以通过任意 Cloudflare edge （Cloudflare CDN）接入，再通过 SNI 指示器回源到 Xray，出站规则判断特定网站以及 IPv6 走 Wireguard 连接 Warp，其他直接出站。所以就算在你的地区 Serv00 被“墙”了，你依旧可以使用这种方法连上 Serv00 的代理，Serv00 本身的带宽大概是千兆，上下行同宽，所以在此范围内，你的代理连接速率基本上只取决于你的本地网络和 Cloudflare edge （Cloudflare CDN）之间的连接速率。</p><p>我使用移动宽带自测 X-for-Serv00 的连接带宽大概在 200Mbps，有群友测速达到 400Mbps 以上。至少我认为这是在 Serv00 上部署使用 CDN 加速的代理服务器的最佳方案吧。</p><p>S 的特点是，使用了 Hysteria2 和 Tuic5 这两种协议，所以主要的优势和特点无非也就是这两种协议的特点，比如 UDP暴力发包，Hy2 抢占带宽等等。仓库的主要作用是提供了 FreeBSD 的 Sing-box 构建，并简化了证书获取、配置文件编写等等繁琐步骤，实现“一键式”部署。可惜我在测试中发现使用 Wireguard 出站时，Sing-box 很容易出现闪退情况，翻看 Sing-box 的 issues，发现这个问题已经存在了几个月，并非个例，故 S 暂未启用 IPv6 的支持。</p><p>虽然 Hysteria2 备受好评，但是我使用移动宽带的测速情况实在是不太理想，有群友使用商用宽带测速效果不错。但是至少我认为这是在 Serv00 上部署直连的代理服务器的最佳方案吧。</p><blockquote><p>另外，针对 UDP 被阻断的现象，除了 Sb-for-Serv00 添加了 Trojan 协议外，我做了 X-for-Serv00 的直连版本，采用 Vless-reality-vision、Vmess-ws-tls、Trojan-tls 三个协议，部署简单。仓库地址：<a class="link"   href="https://github.com/k0baya/X-for-serv00/tree/direct" >X-for-Serv00 direct branch<i class="fas fa-external-link-alt"></i></a></p><p>部署方法也是非常的简单：与 Sb-for-Serv00 一样，需要账号内有一个 Let’s Encrypt 的证书，然后将远程仓库 Clone 到本地：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> -b direct https://github.com/k0baya/x-for-serv00 ~/direct-xray</span><br></pre></td></tr></table></figure><p>然后回到面板中，进入 <strong>File manager</strong>，找到 <code>~/direct-xray/start.sh</code> 这个文件，右键点击 <code>start.sh</code> 文件，选择 View&#x2F;Edit &gt; Source Editor ，进行编辑，在 1 - 5 行修改环境变量：</p><table><thead><tr><th>变量名</th><th>是否必须</th><th>默认值</th><th>备注</th></tr></thead><tbody><tr><td>SERV00PASSWORD</td><td>是</td><td></td><td>你的 Serv00 账号的密码，用于获取 SSL 证书</td></tr><tr><td>UUID</td><td>否</td><td>de04add9-5c68-8bab-950c-08cd5320df18</td><td>可在<a class="link"   href="https://www.uuidgenerator.net/" >Online UUID Generator<i class="fas fa-external-link-alt"></i></a> 生成</td></tr><tr><td>WSPATH</td><td>否</td><td>serv00</td><td>勿以 &#x2F; 开头，协议路径为 &#x2F;WSPATH-协议，如 &#x2F;serv00-vmess</td></tr></tbody></table><p>SSH 登录 Serv00 ，直接执行启动脚本即可启动。</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">chmod +x ~/direct-xray/start.sh &amp;&amp; bash ~/direct-xray/start.sh</span><br></pre></td></tr></table></figure><p>等待程序完成启动，会在 Terminal 中直接打印出 Vless-reality-vision、Vmess-ws-tls、Trojan-tls 的配置链接。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;项目已经重构，部署流程已经尽可能简单化，该篇博客不再适用，请按照 readme 进行部署。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;好久没写博客，用最近自己写的两个仓库水一篇博客。&lt;/p&gt;
&lt;p&gt;由于此前博客记录</summary>
      
    
    
    
    
    <category term="serv00" scheme="https://saika.us.kg/tags/serv00/"/>
    
  </entry>
  
  <entry>
    <title>shell 脚本的一种混淆方式</title>
    <link href="https://saika.us.kg/2024/04/22/obfuscated-shell-scripts/"/>
    <id>https://saika.us.kg/2024/04/22/obfuscated-shell-scripts/</id>
    <published>2024-04-22T16:48:57.249Z</published>
    <updated>2024-07-16T12:19:31.113Z</updated>
    
    <content type="html"><![CDATA[<p>灵感来源于：<a class="link"   href="https://gitlab.com/rwkgyg/sing-box-yg" >rwkgyg&#x2F;sing-box-yg<i class="fas fa-external-link-alt"></i></a></p><p>目前各种 PaaS、SaaS、BaaS 等等平台，在用来托管一些常用的应用——如 Xray、Alist 等等应用时，经常会提示违规，不允许部署。在经过大量的测试后，我发现此类平台多以关键字检测作为封禁的因素，所以只要做到日志、文件名、文本文件内容不含此类关键字，就能继续部署，正常使用。</p><p>多数情况下，部署此类应用都是通过一个功能完善的 Shell 程序自动化进行，在其中把文件名和日志做好处理即可，但是最后 shell 脚本本身的内容又不可避免的会出现 Xray、Alist 等应用的下载链接，导致 Shell 脚本本身被平台查处封禁。当然通过多个变量拆分构造下载链接避开关键字也是一种处理方法，但是无疑这增加了脚本的编写复杂度，所以在通过查看 rwkgyg&#x2F;sing-box-yg 时我获取了灵感，编写了一个 Python 脚本专门用于混淆 Shell 脚本：</p><figure class="highlight python"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> uuid</span><br><span class="line"><span class="keyword">import</span> base64</span><br><span class="line"></span><br><span class="line"><span class="comment"># 读取你的脚本</span></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;script.sh&#x27;</span>, <span class="string">&#x27;r&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">    script = f.read()</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用 base64 对你的脚本进行编码</span></span><br><span class="line">encoded_script = base64.b64encode(script.encode()).decode()</span><br><span class="line"></span><br><span class="line"><span class="comment"># 定义每个字符串段的大小</span></span><br><span class="line">chunk_size = <span class="number">4</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 将编码后的脚本分割成多个小段</span></span><br><span class="line">chunks = [encoded_script[i:i+chunk_size]</span><br><span class="line">          <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(encoded_script), chunk_size)]</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新的文件来存储最终的脚本</span></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;final_script.sh&#x27;</span>, <span class="string">&#x27;w&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">    <span class="comment"># 输出每个变量赋值语句</span></span><br><span class="line">    variable_names = []</span><br><span class="line">    <span class="keyword">for</span> chunk <span class="keyword">in</span> chunks:</span><br><span class="line">        <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">            var_name = <span class="built_in">str</span>(uuid.uuid4()).replace(<span class="string">&#x27;-&#x27;</span>, <span class="string">&#x27;&#x27;</span>)  <span class="comment"># 生成一个 UUID 作为变量名</span></span><br><span class="line">            <span class="keyword">if</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;0&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;1&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;2&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;3&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;4&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;5&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;6&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;7&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;8&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> var_name.startswith(<span class="string">&#x27;9&#x27;</span>):</span><br><span class="line">                <span class="keyword">break</span></span><br><span class="line">        variable_names.append(var_name)</span><br><span class="line">        f.write(<span class="string">f&#x27;<span class="subst">&#123;var_name&#125;</span>=\&#x27;<span class="subst">&#123;chunk&#125;</span>\&#x27;\n&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 输出连接所有变量的语句</span></span><br><span class="line">    f.write(<span class="string">&#x27;eval &quot;$(echo -n &quot;&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> var_name <span class="keyword">in</span> variable_names:</span><br><span class="line">        f.write(<span class="string">f&#x27;$<span class="subst">&#123;var_name&#125;</span>&#x27;</span>)</span><br><span class="line">    f.write(<span class="string">&#x27;&quot; | base64 --decode)&quot;&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 修改文件权限，使其可执行</span></span><br><span class="line">os.chmod(<span class="string">&#x27;final_script.sh&#x27;</span>, <span class="number">0o755</span>)</span><br></pre></td></tr></table></figure><p>这个 Python 脚本的原理很简单，就是先把原 Shell 脚本使用 Base64 编码，然后分割成很多个字符串，再使用 UUID 作为变量名，把每个字符串都存储在一个变量中，最后把 UUID 变量全都连起来，使用 <code>eval</code> 命令执行。</p><p>简单粗暴，效果很好，用了的都说好。</p><hr><p>第二个版本：</p><figure class="highlight python"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> base64</span><br><span class="line"><span class="keyword">import</span> uuid</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">generate_var_names</span>():</span><br><span class="line">    chars = <span class="string">&#x27;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&#x27;</span></span><br><span class="line">    <span class="keyword">for</span> first <span class="keyword">in</span> chars:</span><br><span class="line">        <span class="keyword">for</span> second <span class="keyword">in</span> chars:</span><br><span class="line">            <span class="keyword">yield</span> <span class="string">f&quot;<span class="subst">&#123;first&#125;</span><span class="subst">&#123;second&#125;</span>&quot;</span></span><br><span class="line">    <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">        var_name = <span class="built_in">str</span>(uuid.uuid4()).replace(<span class="string">&#x27;-&#x27;</span>, <span class="string">&#x27;&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> re.<span class="keyword">match</span>(<span class="string">r&#x27;^[a-zA-Z]&#x27;</span>, var_name):</span><br><span class="line">            <span class="keyword">yield</span> var_name</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;your_script.sh&#x27;</span>, <span class="string">&#x27;r&#x27;</span>) <span class="keyword">as</span> file:</span><br><span class="line">    script_content = file.read()</span><br><span class="line"></span><br><span class="line">first_encoded = base64.b64encode(script_content.encode(<span class="string">&#x27;utf-8&#x27;</span>)).decode(<span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line">first_eval_command = <span class="string">f&#x27;eval &quot;$(echo -n &quot;<span class="subst">&#123;first_encoded&#125;</span>&quot; | base64 --decode)&quot;&#x27;</span></span><br><span class="line"></span><br><span class="line">second_encoded = base64.b64encode(first_eval_command.encode(<span class="string">&#x27;utf-8&#x27;</span>)).decode(<span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line"></span><br><span class="line">var_names = generate_var_names()</span><br><span class="line">var_assignments = []</span><br><span class="line">eval_parts = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(second_encoded), <span class="number">4</span>):</span><br><span class="line">    chunk = second_encoded[i:i+<span class="number">4</span>]</span><br><span class="line">    var_name = <span class="built_in">next</span>(var_names)</span><br><span class="line">    var_assignments.append(<span class="string">f&#x27;<span class="subst">&#123;var_name&#125;</span>=&quot;<span class="subst">&#123;chunk&#125;</span>&quot;&#x27;</span>)</span><br><span class="line">    eval_parts.append(<span class="string">f&#x27;$<span class="subst">&#123;var_name&#125;</span>&#x27;</span>)</span><br><span class="line"></span><br><span class="line">final_eval_command = <span class="string">f&#x27;eval &quot;$(echo -n &quot;<span class="subst">&#123;<span class="string">&quot;&quot;</span>.join(eval_parts)&#125;</span>&quot; | base64 --decode)&quot;&#x27;</span></span><br><span class="line"></span><br><span class="line">var_assignment_line = <span class="string">&#x27;;&#x27;</span>.join(var_assignments)</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;obfuscated_script.sh&#x27;</span>, <span class="string">&#x27;w&#x27;</span>) <span class="keyword">as</span> file:</span><br><span class="line">    file.write(var_assignment_line + <span class="string">&#x27;\n&#x27;</span>)</span><br><span class="line">    file.write(final_eval_command + <span class="string">&#x27;\n&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;原脚本已混淆为 obfuscated_script.sh&quot;</span>)</span><br></pre></td></tr></table></figure><p>配套解码：</p><figure class="highlight python"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">decode_script</span>(<span class="params">script_content</span>):</span><br><span class="line">    decoded_script = script_content</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">        eval_match = re.search(<span class="string">r&#x27;eval\s*&quot;\$\(\s*echo\s+-n\s+&quot;([^&quot;]+)&quot;\s*\|\s*base64\s+--decode\s*\)&quot;&#x27;</span>, decoded_script)</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">not</span> eval_match:</span><br><span class="line">            <span class="keyword">break</span></span><br><span class="line">        </span><br><span class="line">        base64_string = eval_match.group(<span class="number">1</span>)</span><br><span class="line">        </span><br><span class="line">        modified_script = decoded_script.replace(<span class="string">&#x27;eval&#x27;</span>, <span class="string">&#x27;echo&#x27;</span>, <span class="number">1</span>)</span><br><span class="line"></span><br><span class="line">        result = os.popen(<span class="string">f&#x27;bash -c \&#x27;<span class="subst">&#123;modified_script&#125;</span>\&#x27;&#x27;</span>).read()</span><br><span class="line"></span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;Decoded part:&quot;</span>, result)</span><br><span class="line"></span><br><span class="line">        decoded_script = re.sub(<span class="string">r&#x27;eval\s*&quot;\$\(\s*echo\s+-n\s+&quot;([^&quot;]+)&quot;\s*\|\s*base64\s+--decode\s*\)&quot;&#x27;</span>, result, decoded_script, count=<span class="number">1</span>)</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> result.strip()</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;obfuscated_script.sh&#x27;</span>, <span class="string">&#x27;r&#x27;</span>) <span class="keyword">as</span> file:</span><br><span class="line">    obfuscated_script_content = file.read()</span><br><span class="line"></span><br><span class="line">deobfuscated_script_content = decode_script(obfuscated_script_content)</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&#x27;deobfuscated_script.sh&#x27;</span>, <span class="string">&#x27;w&#x27;</span>) <span class="keyword">as</span> file:</span><br><span class="line">    file.write(deobfuscated_script_content)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;混淆脚本已逆向生成 deobfuscated_script.sh&quot;</span>)</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;灵感来源于：&lt;a class=&quot;link&quot;   href=&quot;https://gitlab.com/rwkgyg/sing-box-yg&quot; &gt;rwkgyg&amp;#x2F;sing-box-yg&lt;i class=&quot;fas fa-external-link-alt&quot;&gt;&lt;/i&gt;&lt;/a&gt;</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>在Glitch上部署Microsoft365_E5_Renew_X</title>
    <link href="https://saika.us.kg/2024/04/05/e5-renew-x-on-glitch/"/>
    <id>https://saika.us.kg/2024/04/05/e5-renew-x-on-glitch/</id>
    <published>2024-04-05T04:16:53.770Z</published>
    <updated>2024-04-05T04:31:58.871Z</updated>
    
    <content type="html"><![CDATA[<p>直接上传了一个仓库：<a class="link"   href="https://github.com/k0baya/e5_renew_x-on-glitch" >k0baya&#x2F;e5_renew_x-on-glitch<i class="fas fa-external-link-alt"></i></a></p><p>按照 README 的介绍操作即可，一键部署。</p><blockquote><p>相关链接：<br>使用文档：<a class="link"   href="https://blog.csdn.net/qq_33212020/article/details/119747634" >E5 调用API续订服务：Microsoft 365 E5 Renew X<i class="fas fa-external-link-alt"></i></a><br>官方网站：<a class="link"   href="https://e5renew.com/" >MS365 E5 Renew Plus<i class="fas fa-external-link-alt"></i></a></p></blockquote><p>同理，休眠需要保活，建议自建 <a class="link"   href="https://github.com/louislam/uptime-kuma" >Uptime-Kuma<i class="fas fa-external-link-alt"></i></a>。</p><p>Glitch 部署应用的思路：</p><p>使用 <a class="link"   href="https://github.com/chimurai/http-proxy-middleware" >http-proxy-middleware<i class="fas fa-external-link-alt"></i></a> 将其他端口上运行的应用反向代理到 Glitch 默认监听的 3000 端口。</p><p>示例：</p><p>server.js ：</p><figure class="highlight js"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> express = <span class="built_in">require</span>(<span class="string">&quot;express&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> app = <span class="title function_">express</span>();</span><br><span class="line"><span class="keyword">const</span> port = <span class="number">3000</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="variable constant_">PROJECT_DOMAIN</span> = process.<span class="property">env</span>.<span class="property">PROJECT_DOMAIN</span>;</span><br><span class="line"><span class="keyword">var</span> exec = <span class="built_in">require</span>(<span class="string">&quot;child_process&quot;</span>).<span class="property">exec</span>;</span><br><span class="line"><span class="keyword">const</span> os = <span class="built_in">require</span>(<span class="string">&quot;os&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> &#123; createProxyMiddleware &#125; = <span class="built_in">require</span>(<span class="string">&quot;http-proxy-middleware&quot;</span>);</span><br><span class="line"><span class="keyword">var</span> request = <span class="built_in">require</span>(<span class="string">&quot;request&quot;</span>);</span><br><span class="line"><span class="keyword">var</span> fs = <span class="built_in">require</span>(<span class="string">&quot;fs&quot;</span>);</span><br><span class="line"><span class="keyword">var</span> path = <span class="built_in">require</span>(<span class="string">&quot;path&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">//获取系统进程表</span></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&quot;/status&quot;</span>, <span class="function">(<span class="params">req, res</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> cmdStr = <span class="string">&quot;ps -ef&quot;</span>;</span><br><span class="line">    <span class="title function_">exec</span>(cmdStr, <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (err) &#123;</span><br><span class="line">            res.<span class="title function_">type</span>(<span class="string">&quot;html&quot;</span>).<span class="title function_">send</span>(<span class="string">&quot;&lt;pre&gt;命令行执行错误：\n&quot;</span> + err + <span class="string">&quot;&lt;/pre&gt;&quot;</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            res.<span class="title function_">type</span>(<span class="string">&quot;html&quot;</span>).<span class="title function_">send</span>(<span class="string">&quot;&lt;pre&gt;命令行执行结果：\n&quot;</span> + stdout + <span class="string">&quot;&lt;/pre&gt;&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获取系统监听端口</span></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&quot;/listen&quot;</span>, <span class="keyword">function</span> (<span class="params">req, res</span>) &#123;</span><br><span class="line">    <span class="keyword">let</span> cmdStr = <span class="string">&quot;ss -nltp&quot;</span>;</span><br><span class="line">    <span class="title function_">exec</span>(cmdStr, <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123;</span><br><span class="line">      <span class="keyword">if</span> (err) &#123;</span><br><span class="line">        res.<span class="title function_">type</span>(<span class="string">&quot;html&quot;</span>).<span class="title function_">send</span>(<span class="string">&quot;&lt;pre&gt;命令行执行错误：\n&quot;</span> + err + <span class="string">&quot;&lt;/pre&gt;&quot;</span>);</span><br><span class="line">      &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        res.<span class="title function_">type</span>(<span class="string">&quot;html&quot;</span>).<span class="title function_">send</span>(<span class="string">&quot;&lt;pre&gt;获取系统监听端口：\n&quot;</span> + stdout + <span class="string">&quot;&lt;/pre&gt;&quot;</span>);</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;);</span><br><span class="line"></span><br><span class="line"><span class="comment">//获取系统版本、内存信息</span></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&quot;/info&quot;</span>, <span class="function">(<span class="params">req, res</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">let</span> cmdStr = <span class="string">&quot;cat /etc/*release | grep -E ^NAME&quot;</span>;</span><br><span class="line">    <span class="title function_">exec</span>(cmdStr, <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (err) &#123;</span><br><span class="line">            res.<span class="title function_">send</span>(<span class="string">&quot;命令行执行错误：&quot;</span> + err);</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            res.<span class="title function_">send</span>(</span><br><span class="line">                <span class="string">&quot;命令行执行结果：\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;Linux System:&quot;</span> +</span><br><span class="line">                stdout +</span><br><span class="line">                <span class="string">&quot;\nRAM:&quot;</span> +</span><br><span class="line">                os.<span class="title function_">totalmem</span>() / <span class="number">1000</span> / <span class="number">1000</span> +</span><br><span class="line">                <span class="string">&quot;MB&quot;</span></span><br><span class="line">            );</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="comment">//文件系统只读测试</span></span><br><span class="line">app.<span class="title function_">get</span>(<span class="string">&quot;/test&quot;</span>, <span class="function">(<span class="params">req, res</span>) =&gt;</span> &#123;</span><br><span class="line">    fs.<span class="title function_">writeFile</span>(<span class="string">&quot;./test.txt&quot;</span>, <span class="string">&quot;这里是新创建的文件内容!&quot;</span>, <span class="keyword">function</span> (<span class="params">err</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (err) res.<span class="title function_">send</span>(<span class="string">&quot;创建文件失败，文件系统权限为只读：&quot;</span> + err);</span><br><span class="line">        <span class="keyword">else</span> res.<span class="title function_">send</span>(<span class="string">&quot;创建文件成功，文件系统权限为非只读：&quot;</span>);</span><br><span class="line">    &#125;);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">use</span>(</span><br><span class="line">    <span class="string">&quot;/&quot;</span> + <span class="string">&quot;*&quot;</span>,</span><br><span class="line">    <span class="title function_">createProxyMiddleware</span>(&#123;</span><br><span class="line">        <span class="attr">target</span>: <span class="string">&quot;http://127.0.0.1:端口号/&quot;</span>, <span class="comment">// 需要跨域处理的请求地址</span></span><br><span class="line">        <span class="attr">changeOrigin</span>: <span class="literal">false</span>, <span class="comment">// 默认false，是否需要改变原始主机头为目标URL</span></span><br><span class="line">        <span class="attr">ws</span>: <span class="literal">true</span>,</span><br><span class="line">        <span class="attr">logLevel</span>: <span class="string">&quot;error&quot;</span>,</span><br><span class="line">        <span class="attr">onProxyReq</span>: <span class="keyword">function</span> <span class="title function_">onProxyReq</span>(<span class="params">proxyReq, req, res</span>) &#123; &#125;</span><br><span class="line">    &#125;)</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line"><span class="title function_">exec</span>(<span class="string">&quot;启动指令&quot;</span>, <span class="keyword">function</span> (<span class="params">err, stdout, stderr</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (err) &#123;</span><br><span class="line">      <span class="variable language_">console</span>.<span class="title function_">error</span>(err);</span><br><span class="line">      <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(stdout);</span><br><span class="line">  &#125;);</span><br><span class="line"></span><br><span class="line">app.<span class="title function_">listen</span>(port, <span class="function">() =&gt;</span> <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">`Example app listening on port <span class="subst">$&#123;port&#125;</span>!`</span>));</span><br></pre></td></tr></table></figure><p>package.json ：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;glitch-mvp-node&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.1.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;A simple Node app built on fastify, instantly up and running.&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;main&quot;</span><span class="punctuation">:</span> <span class="string">&quot;server.js&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;scripts&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;start&quot;</span><span class="punctuation">:</span> <span class="string">&quot;node server.js&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;dependencies&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;express&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^4.18.2&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;http-proxy-middleware&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^2.0.6&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;request&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^2.88.2&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;engines&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;node&quot;</span><span class="punctuation">:</span> <span class="string">&quot;16.x&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;repository&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://glitch.com/edit/#!/glitch-mvp-node&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;license&quot;</span><span class="punctuation">:</span> <span class="string">&quot;MIT&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;node&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="string">&quot;glitch&quot;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;直接上传了一个仓库：&lt;a class=&quot;link&quot;   href=&quot;https://github.com/k0baya/e5_renew_x-on-glitch&quot; &gt;k0baya&amp;#x2F;e5_renew_x-on-glitch&lt;i class=&quot;fas fa-exter</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>使用免费美国IP部署FreeGPT35</title>
    <link href="https://saika.us.kg/2024/04/02/glitch-node-gpt35/"/>
    <id>https://saika.us.kg/2024/04/02/glitch-node-gpt35/</id>
    <published>2024-04-02T21:48:51.444Z</published>
    <updated>2024-04-02T22:20:36.507Z</updated>
    
    <content type="html"><![CDATA[<p>今天<a class="link"   href="https://jq.qq.com/?_wv=1027&k=qssjFvAs" >群友<i class="fas fa-external-link-alt"></i></a>又发了个好玩的仓库：<a class="link"   href="https://github.com/missuo/FreeGPT35" >missuo&#x2F;FreeGPT35<i class="fas fa-external-link-alt"></i></a> ，我一看，原来是 OpenAI 的 ChatGPT-3.5 免登录使用已经开放使用了，不再是灰度测试了。然后这个仓库的功能就是对目前的 ChatGPT 网页免登录版本进行逆向，并提供 OpenAI 标准格式的 API 转换。</p><p>随即就喊群友进行测试，发现似乎美国以外的 IP 都不行，而原本在美国的 IP ，即便前段时间出 CF 五秒盾的 IP 也已经不会再出盾了，可以直接使用。我一看，美国 IP ，运行 Nodejs ，这不是妥妥的第一时间想到大善人Glitch 么。</p><p>我稍微改动了一点点，在 Glitch 上测试运行，果然成功了，现将部署步骤记录如下：</p><p>进入 Glitch 的主页，点击右上角的  <strong>New Project</strong> &gt; <strong>Import from GitHub</strong> ，填入 <code>https://github.com/missuo/FreeGPT35</code> 。</p><p>导入完成后删掉除了 <code>app.js</code>、<code>package.json</code> 、 <code>package-lock.json</code> 的所有文件夹&#x2F;文件，然后点击最下方的 <strong>TERMINAL</strong> 打开终端，输入命令修改端口为 3000：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sed -i <span class="string">&#x27;s/3040/3000/g&#x27;</span> app.js</span><br></pre></td></tr></table></figure><p>然后编辑 <code>package.json</code> ，用以下内容覆盖其内容：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;glitch-mvp-node&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;version&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.1.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;A simple Node app built on fastify, instantly up and running.&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;main&quot;</span><span class="punctuation">:</span> <span class="string">&quot;app.js&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;scripts&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;start&quot;</span><span class="punctuation">:</span> <span class="string">&quot;node app.js&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;dependencies&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;axios&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^1.6.8&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;express&quot;</span><span class="punctuation">:</span> <span class="string">&quot;^4.19.2&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;engines&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;node&quot;</span><span class="punctuation">:</span> <span class="string">&quot;16.x&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;repository&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://glitch.com/edit/#!/glitch-mvp-node&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;license&quot;</span><span class="punctuation">:</span> <span class="string">&quot;MIT&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="string">&quot;node&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="string">&quot;glitch&quot;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>到这里就部署完成了，如果此时 Glitch 卡住没能正确加载，你可以点击右上角的 <strong>Remix</strong> 按钮强行重新加载。</p><p>Glitch 的每月免费使用时间高达 1000 小时，足够单个项目运行覆盖整月，但是其休眠也很难缠——Glitch 屏蔽了 Uptime-Robot 等各种监控平台的 IP 访问，并且还屏蔽了自身的 IP 访问自身。这里建议使用自行搭建的网站监控：<a class="link"   href="https://github.com/louislam/uptime-kuma" >Uptime-Kuma<i class="fas fa-external-link-alt"></i></a>。</p><p>当然群内我提供了公用的，部署在 Serv00 上的 Uptime-Kuma 供群友使用，欢迎自取。</p><blockquote><p>目前此仓库并未提供自定义 API Key 的功能，会接受一切 API Key 的请求，有可能被批量扫描滥用。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;今天&lt;a class=&quot;link&quot;   href=&quot;https://jq.qq.com/?_wv=1027&amp;k=qssjFvAs&quot; &gt;群友&lt;i class=&quot;fas fa-external-link-alt&quot;&gt;&lt;/i&gt;&lt;/a&gt;又发了个好玩的仓库：&lt;a class=&quot;link</summary>
      
    
    
    
    
    <category term="gpt" scheme="https://saika.us.kg/tags/gpt/"/>
    
    <category term="PaaS" scheme="https://saika.us.kg/tags/PaaS/"/>
    
  </entry>
  
  <entry>
    <title>杂谈（其一）</title>
    <link href="https://saika.us.kg/2024/03/24/talks-001/"/>
    <id>https://saika.us.kg/2024/03/24/talks-001/</id>
    <published>2024-03-24T23:55:44.090Z</published>
    <updated>2024-03-25T01:01:08.487Z</updated>
    
    <content type="html"><![CDATA[<p>最近在几个仓库的使用上遇到了一点点小的问题，在解决问题的过程中，顿感 GitHub 的搜索功能之好用与强大，现来记一笔流水账。</p><hr><p>本来放着不需要管的 <a class="link"   href="https://github.com/k0baya/new-api-freebsd" >New-API-FreeBSD<i class="fas fa-external-link-alt"></i></a> 仓库突然 workflow 运行失败了，我一检查，有如下错误：</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></pre></td><td class="code"><pre><span class="line">/home/runner/work/new-api-freebsd/new-api-freebsd/new-api/web/node_modules/rollup/dist/native.js:38</span><br><span class="line">  throw new Error(</span><br><span class="line">        ^</span><br><span class="line"></span><br><span class="line">  Error: Your current platform &quot;freebsd&quot; and architecture &quot;x64&quot; combination is not yet supported by the native Rollup build. Please use the WASM build &quot;@rollup/wasm-node&quot; instead.</span><br><span class="line"></span><br><span class="line">  The following platform-architecture combinations are supported:</span><br><span class="line">  android-arm</span><br><span class="line">  android-arm64</span><br><span class="line">  darwin-arm64</span><br><span class="line">  darwin-x64</span><br><span class="line">  linux-arm</span><br><span class="line">  linux-arm64</span><br><span class="line">  linux-arm64 (musl)</span><br><span class="line">  linux-riscv64</span><br><span class="line">  linux-x64</span><br><span class="line">  linux-x64 (musl)</span><br><span class="line">  win32-arm64</span><br><span class="line">  win32-ia32</span><br><span class="line">  win32-x64</span><br><span class="line"></span><br><span class="line">  If this is important to you, please consider supporting Rollup to make a native build for your platform and architecture available.</span><br></pre></td></tr></table></figure><p>然后我便去查看了 <a class="link"   href="https://github.com/Calcium-Ion/new-api" >New-API<i class="fas fa-external-link-alt"></i></a> 的源仓库，发现其前端从 React 换成了 Vite 。而 Vite 在构建时需要使用 <a class="link"   href="https://github.com/rollup/rollup" >Rollup<i class="fas fa-external-link-alt"></i></a> ，而 Rollup在构建时就有了如上报错。当然， Rollup 很贴心的给出了替代的解决方案——使用 <code>@rollup/wasm-node</code> 。</p><p>但是很不巧的是，我对 JavaScript 一窍不通，我根本不知道如何使用 <code>@rollup/wasm-node</code> 。即便我去其<a class="link"   href="https://github.com/rollup/plugins" >仓库<i class="fas fa-external-link-alt"></i></a>看 README ，也完全摸不着头脑。</p><p>于是我直接在 GitHub 搜索报错信息，然后在 <a class="link"   href="https://github.com/nuxt/nuxt/issues/24490" >Nuxt 的 issue<i class="fas fa-external-link-alt"></i></a> 里发现了解决办法——荷兰开发者 <a class="link"   href="https://github.com/pi0" >pi0<i class="fas fa-external-link-alt"></i></a> 给出了<a class="link"   href="https://github.com/unjs/nitro/issues/2010#issuecomment-1866651710" >可行的解决办法<i class="fas fa-external-link-alt"></i></a>：</p><blockquote><p>You can use <code>resolutions</code> field in <code>package.json</code> (works with pnpm, yarn and recent npm, alternatively you can use <code>overrides</code> if not works) to pin to use wasm version of SWC:</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;resolutions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line"><span class="attr">&quot;rollup&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm:@rollup/wasm-node&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"><span class="attr">&quot;overrides&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line"><span class="attr">&quot;rollup&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm:@rollup/wasm-node&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br></pre></td></tr></table></figure></blockquote><p>于是我尝试使用 jq 命令直接在前端部分的 <code>package.json</code> 中添加上述字段：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> package.json package.json.bak &amp;&amp; jq <span class="string">&#x27;.resolutions = &#123;&quot;rollup&quot;: &quot;npm:@rollup/wasm-node&quot;&#125; | .overrides = &#123;&quot;rollup&quot;: &quot;npm:@rollup/wasm-node&quot;&#125;&#x27;</span> package.json.bak &gt; package.json</span><br></pre></td></tr></table></figure><p>然后重新构建并测试，完全正常。</p><hr><p>由于 GitHub Copilot 的审查愈发严格，转 API 使用下封号速度越来越快，而 OpenAI 方的反逆向也愈演愈烈，不论是 Cloudflare 的五秒盾还是 OpenAI 的 Arkose Token 的加入，方便免费的使用 ChatGPT 变得愈加困难。</p><p><del>病急乱投医下</del>我希望增加一些能够继续便利使用 GPT API 的渠道，然后我发现了<a class="link"   href="https://github.com/deanxv/coze-discord-proxy" >deanxv&#x2F;coze-discord-proxy<i class="fas fa-external-link-alt"></i></a>。简单看下来（主要是看 Dockerfile 和 docker-compose.yaml ），在 Linux 上的使用，问题最大的应该是 Discord 和 Coze 机器人的账号，应用本体的部署是非常的简单易用的，等我真的要部署的时候再来看也不急，那么先折腾一下 FreeBSD 版本吧。</p><p>又由于其 Dockerfile 内的构建本体的步骤异常的简洁，于是我很快就写好了 workflow ，构建好了 <a class="link"   href="https://github.com/k0baya/coze-discord-proxy-freebsd" >FreeBSD 的版本<i class="fas fa-external-link-alt"></i></a>（实际上如果作者愿意也可以直接使用 go build 的交叉编译啦，但是我不好意思打扰人家）。</p><p>然后就丢给<a class="link"   href="https://linux.do/" >论坛<i class="fas fa-external-link-alt"></i></a>里的热佬去测试了。但是很快，就传来了在 <a class="link"   href="https://www.serv00.com/" >Serv00<i class="fas fa-external-link-alt"></i></a> 上因为权限不足不能访问 <code>/tmp</code> 目录，无法运行的消息：</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">[烫烫烫烫@s2]:&lt;\~/domains/coze2api&gt;\$ ./start.sh</span><br><span class="line">[FATAL] 2024/03/25 - 09:46:37 | [open /tmp/data-gym-cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4.1d1adbda-d03c-46cc-b006-7353d3de07b3.tmp: permission denied]</span><br></pre></td></tr></table></figure><p>我一看，第一想法是在源仓库内搜索 <code>data-gym-cache</code> 字段，看看具体的代码是怎么写的，此路径是否可以通过变量调整。结果当然是什么也没搜到。</p><p>虽然我不会 golang ，但是也用了不少 golang 写的应用，没见过猪跑也吃过猪肉是不是，我当然知道 golang 在构建前要先 <code>go mod download</code> ，即下载 <code>go.mod</code> 文件中标明的依赖项。</p><p>也就是说，<code>/tmp/data-gym-cache</code> 路径并非 deanxv&#x2F;coze-discord-proxy 规定的，而是其依赖规定的。但是 <code>go.mod</code> 中又有那么多的依赖，我该怎么查找呢？</p><p>幸运的是，deanxv&#x2F;coze-discord-proxy 的所有依赖项都是 GitHub 上的，所以我直接在 GitHub 搜索 <code>data-gym-cache</code> ，查看 code type ，看到了原本的依赖中，是用 <code>DATA_GYM_CACHE_DIR</code> 为变量名设置缓存目录的，而 <code>/tmp/data-gym-cache</code> 是其默认值。所以我告诉论坛热佬，设置这个变量为他有权限访问的路径，然后就运行成功了。</p><p>同理，我尝试在 Serv00 上使用 <a class="link"   href="https://github.com/oliverkirk-sudo/WarpGPT" >WarpGPT<i class="fas fa-external-link-alt"></i></a>，也遇到了这个无权限访问 <code>/tmp</code> 路径的问题，根据其具体文件名称查询，是 <a class="link"   href="https://github.com/eddycjy/fake-useragent" >eddycjy&#x2F;fake-useragent<i class="fas fa-external-link-alt"></i></a> 这个六年前就停止维护的库的问题，通过更改变量名 <code>TMPDIR</code> 的值可以更换其缓存目录，以达到在 Serv00 上正常使用的目的。</p><hr><p>以上经历令我对 GitHub 的搜索功能有了进一步的认识，不得不说这也是一个解决问题的重要工具，因为其搜索范围涵盖 Code、Repositories、Issues、Pull requests、Discussions、Users、Commits、Packages、Wikis、Topics、Marketplace 等多个方面，可以使用任意一点已知信息获取到许许多多的相关信息，不仅仅是仓库功能的介绍，还包括问题的解决方法和代码的实现方法等等。在此我作一个暴论：用好 GitHub 的搜索引擎，能够极大地提高学习效率。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近在几个仓库的使用上遇到了一点点小的问题，在解决问题的过程中，顿感 GitHub 的搜索功能之好用与强大，现来记一笔流水账。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本来放着不需要管的 &lt;a class=&quot;link&quot;   href=&quot;https://github.com/k0baya/n</summary>
      
    
    
    
    
    <category term="杂谈" scheme="https://saika.us.kg/tags/%E6%9D%82%E8%B0%88/"/>
    
  </entry>
  
  <entry>
    <title>一个免费的使用 GPT-4 API 的方案</title>
    <link href="https://saika.us.kg/2024/02/07/copilot-to-api-free-temp/"/>
    <id>https://saika.us.kg/2024/02/07/copilot-to-api-free-temp/</id>
    <published>2024-02-07T03:36:20.046Z</published>
    <updated>2024-03-14T22:02:28.224Z</updated>
    
    <content type="html"><![CDATA[<p>先自锤标题党，本文介绍的 GPT-4 API 目前还只能调用 <code>/v1/chat/completions</code> 以及 <code>/v1/models</code> 和 <code>v1/embeddings</code> 接口。至于 <code>v1/audio/speech</code> 、 <code>v1/fine_tuning</code> 、 <code>v1/files</code> 、 <code>v1/images</code> 、 <code>v1/moderations</code> 等接口是不支持的。但是胜在免费，而且其文字能力确实强大而又出众。</p><p>本文只需要用到一个仓库，是 <a class="link"   href="https://github.com/Yanyutin753/gpt4-copilot-java-sh" >Yanyutin753 开发的 gpt4-copilot-java<i class="fas fa-external-link-alt"></i></a> ，目前还没有放出源码，只能在 Release 中下载打包好的 fat jar 包运行或者直接 docker 运行使用。</p><p>感谢始皇提供的 Cocopilot 以及公车 <code>ghu_ThisIsARealFreeCopilotKeyByCoCopilot</code> （已失效）。</p><h1 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h1><p>docker 运行过于简单，这里不再赘述。大致说明一下 fat jar 直接运行的方法：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载 fat jar 包</span></span><br><span class="line">curl -L -o gpt4-copilot-java.jar <span class="string">&quot;https://github.com/Yanyutin753/gpt4-copilot-java/releases/download/v0.0.3/gpt4-copilot-java-0.0.3.jar&quot;</span></span><br><span class="line"><span class="comment"># 测试运行，把 PORT 改为自己喜欢的端口，最后的 server.servlet.context-path 参数可以改成自己喜欢的尾缀</span></span><br><span class="line">java -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/</span><br><span class="line"><span class="comment"># 加入 pm2 管理</span></span><br><span class="line">pm2 start java --name gpt4-copilot-java -- -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/</span><br></pre></td></tr></table></figure><h1 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h1><p>不妨设 gpt4-copilot-java 运行的地址为 <code>https://your_gpt4-copilot-java.com</code> 。使用公车作为 API Key 进行请求：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 请求 /v1/chat/comletions 接口</span></span><br><span class="line">curl --location <span class="string">&#x27;https://your_gpt4-copilot-java.com/cocopilot/v1/chat/completions&#x27;</span> \</span><br><span class="line">  --header <span class="string">&quot;Content-Type: application/json&quot;</span> \</span><br><span class="line">  --header <span class="string">&quot;Authorization: Bearer ghu_ThisIsARealFreeCopilotKeyByCoCopilot&quot;</span> \</span><br><span class="line">  --data <span class="string">&#x27;&#123;</span></span><br><span class="line"><span class="string">    &quot;model&quot;: &quot;gpt-4&quot;,</span></span><br><span class="line"><span class="string">    &quot;messages&quot;: [</span></span><br><span class="line"><span class="string">      &#123;</span></span><br><span class="line"><span class="string">        &quot;role&quot;: &quot;system&quot;,</span></span><br><span class="line"><span class="string">        &quot;content&quot;: &quot;You are a helpful assistant.&quot;</span></span><br><span class="line"><span class="string">      &#125;,</span></span><br><span class="line"><span class="string">      &#123;</span></span><br><span class="line"><span class="string">        &quot;role&quot;: &quot;user&quot;,</span></span><br><span class="line"><span class="string">        &quot;content&quot;: &quot;鲁迅打周树人&quot;</span></span><br><span class="line"><span class="string">      &#125;</span></span><br><span class="line"><span class="string">    ]</span></span><br><span class="line"><span class="string">  &#125;&#x27;</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 请求 v1/embeddings 接口</span></span><br><span class="line">curl --location <span class="string">&#x27;https://your_gpt4-copilot-java.com/cocopilot/v1/embeddings&#x27;</span> \</span><br><span class="line">  --header <span class="string">&quot;Authorization: Bearer ghu_ThisIsARealFreeCopilotKeyByCoCopilot&quot;</span> \</span><br><span class="line">  --header <span class="string">&quot;Content-Type: application/json&quot;</span> \</span><br><span class="line">  --data <span class="string">&#x27;&#123;</span></span><br><span class="line"><span class="string">    &quot;input&quot;: &quot;鲁迅打周树人...&quot;,</span></span><br><span class="line"><span class="string">    &quot;model&quot;: &quot;text-embedding-ada-002&quot;,</span></span><br><span class="line"><span class="string">    &quot;encoding_format&quot;: &quot;float&quot;</span></span><br><span class="line"><span class="string">  &#125;&#x27;</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 请求 /v1/models 接口</span></span><br><span class="line">curl --location <span class="string">&#x27;https://your_gpt4-copilot-java.com/cocopilot/v1/models&#x27;</span> \</span><br><span class="line">  --header <span class="string">&quot;Authorization: Bearer ghu_ThisIsARealFreeCopilotKeyByCoCopilot&quot;</span></span><br></pre></td></tr></table></figure><p>即为 <code>https://your_gpt4-copilot-java.com/cocopilot</code> 做 API BASE URL ，再使用 <code>ghu_ThisIsARealFreeCopilotKeyByCoCopilot</code> 做 API Key 请求即可。为了使用方便，可以与上一篇博客一样接入 One-api 进行使用。</p><hr><hr><h2 id="lvguanjun-copilot-to-chatgpt4"><a href="#lvguanjun-copilot-to-chatgpt4" class="headerlink" title="lvguanjun&#x2F;copilot_to_chatgpt4"></a>lvguanjun&#x2F;copilot_to_chatgpt4</h2><p>如果你需要同时薅很多家 copilot 中转商，又不希望同时搭多个 gpt4-copilot-java ，那么可以使用 <a class="link"   href="https://github.com/lvguanjun/copilot_to_chatgpt4" >lvguanjun&#x2F;copilot_to_chatgpt4<i class="fas fa-external-link-alt"></i></a> 这个仓库。</p><p>首先，为了防止被人白嫖，也为了自己的IP安全，可以先搭建一个 HTTP 代理：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;rewrites&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/proxy/:match/:url*&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;destination&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://:match/:url*&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/proxy/:match/:url*/&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;destination&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://:match/:url*/&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/httpproxy/:match/:url*&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;destination&quot;</span><span class="punctuation">:</span> <span class="string">&quot;http://:match/:url*&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;source&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/httpproxy/:match/:url*/&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;destination&quot;</span><span class="punctuation">:</span> <span class="string">&quot;http://:match/:url*/&quot;</span> <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>在 GitHub 中新建一个仓库，仓库中新建名为 <code>vercel.json</code> 的文件，并填入以上内容。再去 Vercel 中新建 Project ，选择刚刚新建的这个仓库即可。这样你就获得了一个由 Vercel 提供的通用 HTTP 代理，只需要在你需要访问的地址前加上<code>https://your-vercel-project.vercel.app/proxy/</code>即可通过 Vercel 代理访问目标地址，如<code>https://proxy-nineninesix.vercel.app/proxy/www.google.com</code>即为通过 Vercel 访问<code>https://www.google.com</code>。</p><p>接下来，我以 Serv00 免费 FreeBSD 主机为例记录 lvguanjun&#x2F;copilot_to_chatgpt4 的部署过程：</p><p>首先在 Panel 中放行一个端口，然后将仓库代码克隆到 Serv00 上：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> -b endpoint https://github.com/lvguanjun/copilot_to_chatgpt4 c2g4 &amp;&amp; <span class="built_in">cd</span> c2g4</span><br></pre></td></tr></table></figure><p>接着按照源仓库的README准备虚拟环境：</p><figure class="highlight bash"><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">python3 -m venv venv</span><br><span class="line"><span class="built_in">source</span> venv/bin/activate</span><br><span class="line"><span class="comment"># 由于 Serv00 免费用户的使用限制，在这里必须使用cpuset命令进行依赖安装，不然装不上。</span></span><br><span class="line">cpuset -l 0 pip install -r requirements.txt</span><br><span class="line"><span class="built_in">cp</span> config.py.sample config.py</span><br></pre></td></tr></table></figure><p>接着使用 Panel 自带的编辑器或者 vim 编辑 config.py 的内容，主要修改<code>WHITE_TOKEN_URLS</code>的值：</p><figure class="highlight bash"><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"><span class="comment"># 切记不要带 /proxy 路径，该仓库不支持识别此路径，直接用 /* 覆盖全路径即可。</span></span><br><span class="line">WHITE_TOKEN_URLS = <span class="string">&quot;https://your-vercel-project.vercel.app/*&quot;</span></span><br></pre></td></tr></table></figure><p>保存后，新建一个启动脚本，方便使用 pm2 管理：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; run.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string">source venv/bin/activate</span></span><br><span class="line"><span class="string"># 记得将下一行的 PORT 替换为自己放行的端口</span></span><br><span class="line"><span class="string">uvicorn main:app --host 0.0.0.0 --port PORT</span></span><br><span class="line"><span class="string">deactivate</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x run.sh &amp;&amp; bash run.sh</span><br></pre></td></tr></table></figure><p>使用pm2管理运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x run.sh &amp;&amp; ~/.npm-global/bin/pm2 start ./run.sh --name copilot_to_chatgpt4</span><br></pre></td></tr></table></figure><p>拼接Key的规则：<code>https://your-vercel-project.app/proxy/地址||秘钥</code>，如<code>https://your-vercel-project.app/proxy/1.1.1.1/copilot_internal/v2/token||mxY5Oc8i8qUHoaiyfgeiuqgefoufmdZwyUqJmlz+MVIXNOabdfkhdaqL0tkQyajSOihkkP/tXbvBUMZhQE08GTfGW4p9GdSHRaNLijJCNVc=.kJfupjFfQeriLXvBDGiA7g==</code></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;先自锤标题党，本文介绍的 GPT-4 API 目前还只能调用 &lt;code&gt;/v1/chat/completions&lt;/code&gt; 以及 &lt;code&gt;/v1/models&lt;/code&gt; 和 &lt;code&gt;v1/embeddings&lt;/code&gt; 接口。至于 &lt;code&gt;v1/a</summary>
      
    
    
    
    
    <category term="gpt" scheme="https://saika.us.kg/tags/gpt/"/>
    
  </entry>
  
  <entry>
    <title>一个免费的使用 ChatGPT 3.5 API 的方案</title>
    <link href="https://saika.us.kg/2024/02/04/chatgpt-to-api-free-temp/"/>
    <id>https://saika.us.kg/2024/02/04/chatgpt-to-api-free-temp/</id>
    <published>2024-02-04T17:38:48.385Z</published>
    <updated>2024-02-07T03:38:07.406Z</updated>
    
    <content type="html"><![CDATA[<p>自从 Pandora-Next 的作者 pengzhile （始皇）宣布 Pandora-Next 停止运营，愉快的享受免费不限量高并发的 ChatGPT 3.5 API 的日子也就结束了。虽然现在很多第三方 API 提供商也提供很多免费额度使用，甚至多的不一定用得完，但是这究其根本在中国大陆的法律上应该是违法行为，也不一定能保证这些第三方提供商的服务就一直稳定，就像始皇停止运营来的那么突然一样。靠谁都不如靠自己，自己部署一个 server 才更靠谱。</p><p>经过我的一段时间探索和使用，目前总算是找到了一套差不多算是可以平替的方案，使用到了三个开源仓库：</p><h2 id="ninja"><a href="#ninja" class="headerlink" title="ninja"></a>ninja</h2><p><a class="link"   href="https://github.com/gngpp/ninja" >ninja<i class="fas fa-external-link-alt"></i></a> 用于和 OpenAI 进行中转，把 chat 的接口转换 api 的接口，不过由于 ninja 作者开发 ninja 的理念是服务端不存储用户数据，所以 ninja 的 ChatGPT-to-API 接口需要使用 access_Token 做 API Keys ，受限于 access_Token 的有效时间太短以及 access_Token 过长的问题，并不能很愉快的使用。但是 ninja 有使用 refresh_token 获取 access_Token 的接口，因为 refresh_token 的长度很短，且永久有效，所以我在 <a class="link"   href="https://github.com/gngpp/ninja/issues/440#issuecomment-1905122242" >ninja 的 issue 中<i class="fas fa-external-link-alt"></i></a>提议，使用 refresh_token 当做 API Keys 进行请求，但是被作者因为与其不存储用户数据的理念相悖而被否决。</p><h2 id="refresh-gpt-chat"><a href="#refresh-gpt-chat" class="headerlink" title="refresh-gpt-chat"></a>refresh-gpt-chat</h2><p><a class="link"   href="https://github.com/Yanyutin753/refresh-gpt-chat" >refresh-gpt-chat<i class="fas fa-external-link-alt"></i></a> 用于把 ninja 的 api 接口转换成使用 refresh_token 作为 API Keys 进行请求。实际上是 refresh-gpt-chat 先使用 refresh_token 请求 access_Token ，再使用获取到的 access_Token 请求 API ，并把这个 access_Token 存储下来，反复使用。当 access_Token 过期时，再重新使用 refresh_token 请求 access_Token 。</p><h2 id="one-api"><a href="#one-api" class="headerlink" title="one-api"></a>one-api</h2><p><a class="link"   href="https://github.com/songquanpeng/one-api" >one-api<i class="fas fa-external-link-alt"></i></a> 用于存储多个 refresh_token ，提高并发量。因为 ninja 提供的 API 功能还是基于 OpenAI 的 chat 的 web ，而 web 又无法并发，必须等一句话说完，才能响应下一次请求，所以对于某些需要高并发的使用场景来讲， ninja 配合 refresh-gpt-chat 是不够的。但是在  one-api 内新建多个渠道，每个都存放一个 refresh_token ，用于请求 refresh-gpt-chat ，再使用 one-api 提供的接口，就能解决高并发的问题，愉快使用。而且 refresh_token 如果泄露也不好， one-api 二次分发就能避免 refresh_token 泄露的问题，让我无后顾之忧的把自己的 API Keys 提供给他人使用。</p><h1 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h1><blockquote><p>部署上述服务，需要准备：<br>1、一台在 OpenAI 封锁之外的 VPS ；<br>2、一定的智慧和解决问题的能力。</p></blockquote><p>部署步骤也并不复杂，特别是 ninja 和 one-api ，几乎是开箱即用，refresh-gpt-chat只要部署好了 Java 环境，运行也很简单。当然如果 VPS 能够支持 Docker ，甚至只需要 <code>docker-compose.yaml</code> 直接跑就行了。</p><h2 id="Docker-compose"><a href="#Docker-compose" class="headerlink" title="Docker compose"></a>Docker compose</h2><p>以下是我写的，把上述三个仓库的服务一口气跑起来的<code>docker-compose.yaml</code>，只需要修改最末 refresh-gpt-chat 部分的 <code>getAccessTokenUrl</code>和<code>chatUrl</code> 两个参数配置即可直接 <code>docker compose up -d</code> 使用。</p><figure class="highlight yaml"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.4&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">ninja:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">gngpp/ninja:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">ninja</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">    <span class="attr">command:</span> <span class="string">run</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;8080:7999&quot;</span></span><br><span class="line">  </span><br><span class="line">  <span class="attr">watchtower:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">watchtower</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">containrrr/watchtower</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/var/run/docker.sock:/var/run/docker.sock</span></span><br><span class="line">    <span class="attr">command:</span> <span class="string">--interval</span> <span class="number">3600</span> <span class="string">--cleanup</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">one-api:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">justsong/one-api:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">one-api</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">command:</span> <span class="string">--log-dir</span> <span class="string">/app/logs</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;3000:3000&quot;</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/data/oneapi:/data</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/logs:/app/logs</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">SQL_DSN=oneapi:123456@tcp(db:3306)/one-api</span>  <span class="comment"># 修改此行，或注释掉以使用 SQLite 作为数据库</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">REDIS_CONN_STRING=redis://redis</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">SESSION_SECRET=random_string</span>  <span class="comment"># 修改为随机字符串</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line"><span class="comment">#      - NODE_TYPE=slave  # 多机部署时从节点取消注释该行</span></span><br><span class="line"><span class="comment">#      - SYNC_FREQUENCY=60  # 需要定期从数据库加载数据时取消注释该行</span></span><br><span class="line"><span class="comment">#      - FRONTEND_BASE_URL=https://openai.justsong.cn  # 多机部署时从节点取消注释该行</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">redis</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">db</span></span><br><span class="line">    <span class="attr">healthcheck:</span></span><br><span class="line">      <span class="attr">test:</span> [ <span class="string">&quot;CMD-SHELL&quot;</span>, <span class="string">&quot;wget -q -O - http://localhost:3000/api/status | grep -o &#x27;\&quot;success\&quot;:\\s*true&#x27; | awk -F: &#x27;&#123;print $2&#125;&#x27;&quot;</span> ]</span><br><span class="line">      <span class="attr">interval:</span> <span class="string">30s</span></span><br><span class="line">      <span class="attr">timeout:</span> <span class="string">10s</span></span><br><span class="line">      <span class="attr">retries:</span> <span class="number">3</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">redis:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">redis:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">redis</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mysql:8.2.0</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">mysql</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/data/mysql:/var/lib/mysql</span>  <span class="comment"># 挂载目录，持久化存储</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&#x27;3306:3306&#x27;</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">TZ:</span> <span class="string">Asia/Shanghai</span>   <span class="comment"># 设置时区</span></span><br><span class="line">      <span class="attr">MYSQL_ROOT_PASSWORD:</span> <span class="string">&#x27;OneAPI@justsong&#x27;</span> <span class="comment"># 设置 root 用户的密码</span></span><br><span class="line">      <span class="attr">MYSQL_USER:</span> <span class="string">oneapi</span>   <span class="comment"># 创建专用用户</span></span><br><span class="line">      <span class="attr">MYSQL_PASSWORD:</span> <span class="string">&#x27;123456&#x27;</span>    <span class="comment"># 设置专用用户密码</span></span><br><span class="line">      <span class="attr">MYSQL_DATABASE:</span> <span class="string">one-api</span>   <span class="comment"># 自动创建数据库</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">refresh-gpt-chat:</span>  </span><br><span class="line">    <span class="comment"># 该服务使用的 Docker 镜像</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">yangclivia/refresh-gpt-chat:latest</span>  </span><br><span class="line">    <span class="comment"># Java 的环境变量 （可适当调节，用copilot可以适当调大点，具体可问gpt了解）</span></span><br><span class="line">    <span class="attr">environment:</span>  </span><br><span class="line">      <span class="bullet">-</span> <span class="string">JAVA_OPTS=-XX:+UseParallelGC</span> <span class="string">-Xms64m</span> <span class="string">-Xmx64m</span> <span class="string">-XX:MaxMetaspaceSize=64m</span>  </span><br><span class="line">    <span class="comment"># 为该服务创建的容器的名称</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">refresh-gpt-chat</span></span><br><span class="line">    <span class="comment"># 容器总是重新启动</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span>  </span><br><span class="line">    <span class="comment"># 容器运行的用户</span></span><br><span class="line">    <span class="attr">user:</span> <span class="string">root</span>  </span><br><span class="line">    <span class="comment"># 容器的网络模式</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;8082:8082&quot;</span></span><br><span class="line">    <span class="attr">command:</span>  </span><br><span class="line">      <span class="bullet">-</span> <span class="string">--log=info</span></span><br><span class="line">      <span class="comment">#自定义端口号 </span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--server.port=8082</span></span><br><span class="line">      <span class="comment">#自定义前缀</span></span><br><span class="line"><span class="comment">#       - --server.servlet.context-path=/tokensTool</span></span><br><span class="line">      <span class="comment"># ninja获取accessToken的Url</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--getAccessTokenUrl=http(s)://ninja的外部访问地址/auth/refresh_token</span></span><br><span class="line">      <span class="comment"># ninja或者chat2api API接口</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--chatUrl=http(s)://ninja的外部访问地址/v1/chat/completions</span></span><br></pre></td></tr></table></figure><h2 id="手动部署"><a href="#手动部署" class="headerlink" title="手动部署"></a>手动部署</h2><p>ninja 和 one-api 都可以直接下载可执行文件直接启动，无需配置其他环境，这里不做过多介绍，仅仅记录一下启动的命令。</p><h3 id="ninja："><a href="#ninja：" class="headerlink" title="ninja："></a>ninja：</h3><p>在仓库中直接下载对应自己的 VPS 系统的可执行二进制文件即可。</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加可执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> +x ninja</span><br><span class="line"><span class="comment"># 启动ninja</span></span><br><span class="line">./ninja run</span><br><span class="line"><span class="comment"># 后台启动ninja</span></span><br><span class="line">./ninja start</span><br><span class="line"><span class="comment"># 停止后台ninja</span></span><br><span class="line">./ninja stop</span><br><span class="line"><span class="comment"># pm2管理启动ninja</span></span><br><span class="line">pm2 start ./ninja --name ninja -- run</span><br></pre></td></tr></table></figure><h3 id="one-api-1"><a href="#one-api-1" class="headerlink" title="one-api"></a>one-api</h3><p>在仓库中直接下载对应自己的 VPS 系统的可执行二进制文件即可。</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加可执行权限</span></span><br><span class="line"><span class="built_in">chmod</span> u+x one-api</span><br><span class="line"><span class="comment"># 设置缓存路径为当前路径（适合无root用户）</span></span><br><span class="line"><span class="built_in">export</span> TIKTOKEN_CACHE_DIR=<span class="string">&quot;<span class="variable">$PWD</span>&quot;</span> </span><br><span class="line"><span class="comment"># 启动one-api（把PORT改成自己想用的端口）</span></span><br><span class="line">./one-api --port PORT --logs-dir ./logs</span><br><span class="line"><span class="comment"># pm2管理启动one-api</span></span><br><span class="line">pm2 start ./one-api --name one-api -- --port PORT --logs-dir ./logs</span><br></pre></td></tr></table></figure><h3 id="refresh-gpt-chat-1"><a href="#refresh-gpt-chat-1" class="headerlink" title="refresh-gpt-chat"></a>refresh-gpt-chat</h3><p>需要配置 OpenJDK ， 前文在 hax 的免费主机上已经安装过 OpenJDK ，这里不再赘述。在仓库中下载 <code>.jar</code> 结尾的 fat jar 包即可直接启动：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 直接启动（把 PORT 替换成自己希望的端口，并填写ninja的访问地址， jar 包文件名替换成自己下载的文件名）</span></span><br><span class="line">java -jar refresh-gpt-chat-0.0.1-SNAPSHOT.jar --server.port=PORT --server.servlet.context-path=/ --getAccessTokenUrl=http(s)://ninja的访问地址/url/auth/refresh_token --chatUrl=http(s)://ninja的访问地址/v1/chat/completions</span><br><span class="line"><span class="comment"># 使用pm2管理启动</span></span><br><span class="line">pm2 start java --name refresh-gpt-chat -- -jar refresh-gpt-chat-0.0.1-SNAPSHOT.jar --server.port=PORT --server.servlet.context-path=/ --getAccessTokenUrl=http(s)://ninja的访问地址/url/auth/refresh_token --chatUrl=http(s)://ninja的访问地址/v1/chat/completions</span><br></pre></td></tr></table></figure><h1 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h1><p>进入 one-api 渠道选项卡中，添加新的渠道，类型选择自定义渠道， <code>Base URL</code> 填写 refresh-gpt-chat 的地址，模型选择 gpt-3.5 相关的全部模型。模型重定向中填入以下内容：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-0301&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-0613&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-16k&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-16k-0613&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-1106&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-instruct&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>勾选中秘钥下方的批量创建，然后在秘钥中填入 refresh_token ，一行一个，最后点击提交。再去令牌选项卡中添加新的令牌，按照自己的喜好填写并提交即可。</p><p>再使用 one-api 生成的令牌作为 API Keys ， one-api 的地址作为端点即可。</p><blockquote><p>有多高并发取决于有多少 refresh_token 被存储在 one-api 中，如果需要使用沉浸式翻译这样的高并发应用，建议存入 20-100 个 refresh_token 进行请求。</p><p>获取 refresh_token 的网址：<a class="link"   href="https://demo.xyhelper.cn/applelogin" >xyhelper<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://chat.freegpts.org/applelogin" >freegpts<i class="fas fa-external-link-alt"></i></a>（这两个都是第三方服务，不能保证账号数据安全，也不能保证其服务一直有效，酌情使用，后果自负）</p><p>亦或者可以使用 Apple 设备抓包获取 refresh_token ，具体可以自己搜索。不过这种方式容易导致 Apple 设备被 OpenAI 封禁，请酌情使用。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;自从 Pandora-Next 的作者 pengzhile （始皇）宣布 Pandora-Next 停止运营，愉快的享受免费不限量高并发的 ChatGPT 3.5 API 的日子也就结束了。虽然现在很多第三方 API 提供商也提供很多免费额度使用，甚至多的不一定用得完，但是</summary>
      
    
    
    
    
    <category term="gpt" scheme="https://saika.us.kg/tags/gpt/"/>
    
  </entry>
  
  <entry>
    <title>Serv00搭建各种服务</title>
    <link href="https://saika.us.kg/2024/01/27/serv00_logs/"/>
    <id>https://saika.us.kg/2024/01/27/serv00_logs/</id>
    <published>2024-01-27T03:55:23.612Z</published>
    <updated>2024-07-07T03:49:03.385Z</updated>
    
    <content type="html"><![CDATA[<p><a class="link"   href="https://www.serv00.com/" >这个平台<i class="fas fa-external-link-alt"></i></a>是个 Virtual Host ，没有 Root ，还是 FreeBSD 的系统，不是 Linux ，不太好用。但是优点是隔离性差， Memory 和 vCPU 能短时间内超过 100% 进行调用。</p><p>已经玩了不少时间了，起初看到 Github 上有使用 Serv00 搭建 Vless 节点的<a class="link"   href="https://github.com/qwer-search/serv00-vless" >仓库<i class="fas fa-external-link-alt"></i></a>，就上手玩了一下，后来发现极其不稳， screen 运行的进程总是过一段时间就掉了（后经网友讨论确认为Serv00有时候会重启宿主机），又得ssh上去启动，相当不友好，且后来又发现了 Hax 这样的玩具，就对 Serv00 视如敝履了。</p><p>但是这两天有<a class="link"   href="https://jq.qq.com/?_wv=1027&k=qssjFvAs" >群友<i class="fas fa-external-link-alt"></i></a>突然提醒我才想起，我在 Hax 上用的很舒服的 pm2 也可以在 Serv00 上使用，这个十年有效期的玩具突然显得有用了起来。</p><p>经过我的尝试，成功在 Serv00 上部署了一些服务，接下来进行记录：</p><h1 id="面板自带功能"><a href="#面板自带功能" class="headerlink" title="面板自带功能"></a>面板自带功能</h1><h2 id="域名"><a href="#域名" class="headerlink" title="域名"></a>域名</h2><p>Serv00 上如果想要使用自己的域名，有两种方式，一种是通过 Cloudflare 提供的 Argo 隧道，不仅能绑域名，免配置 ssl ，还可以享受 Cloudflare 的免费 CDN 提速。第二种就是直接使用面板内自带的 DNS 服务器功能绑定自己的域名。</p><p>在 Panel 中进入 DNS zones 选项卡，使用 Add new zone 功能添加自己的域名或者自己的域名的子域，然后在 Zone list 中找到刚刚添加的域名，点击 Edit 查看 DNS 记录，把当中列出的全部记录添加到自己的域名的 DNS 记录中即可完成域名的绑定。</p><p>Serv00 本身对于绑定在其上的域名提供了许多的服务支持，这里所说的绑定在Serv00上的域名包括自己绑定的自己的域名，以及 Serv00 在注册账户时赠送的域名 <code>USERNAME.serv00.net</code> ，其服务包括免费的一键申请式的 SSL 证书、域名邮箱、 DNS 管理等多种功能。</p><h3 id="SSL证书申请"><a href="#SSL证书申请" class="headerlink" title="SSL证书申请"></a>SSL证书申请</h3><p>在 Panel 中进入 WWW websites 选项卡，点击 Manage SSL certificates ，在你需要申请 SSL 证书的域名的 A 记录指向的那个 IP 地址右侧点击 Manage ，再点击 Add certificate ， Type 选择 Generate Let’s Encrypt certificate ，Domain 选择要申请 SSL 证书的域名，再点击 Add 即可。</p><h3 id="域名邮箱"><a href="#域名邮箱" class="headerlink" title="域名邮箱"></a>域名邮箱</h3><p>Panel 中进入 E-mail 选项卡，注册账号后会自动注册一个域名邮箱，用户名是 <code>USERNAME@USERNAME.serv00.net</code> 是 Serv00 的账户密码。可以使用 Add new e-mail 功能新建邮箱账户。</p><p>也可以在 Add new alias 功能中新建别名邮箱，其别名邮箱功能也提供了和 Cloudflare 一样的 Catch-all 的 Advanced settings 选项，用来批量注册东西十分方便。</p><p>目前我的测试中，似乎没有在 Manage whitelist 中添加进白名单的域名邮箱发来的邮件全部都会被识别为垃圾邮件。所以有需要的话可以在 Manage whitlist 中添加你需要接受邮件的邮箱的域名，比如 <code>qq.com</code> 、 <code>gmail.com</code> 等等。</p><p>如果绑定了自己的域名，想要使用自己的域名配置域名邮箱的话，要在 Domain list 中找到自己的域名，点击最右边的 DKIM ， action 选择 Add DNS record automatically ，然后 Sign domain 以注册域名，使得新的域名邮箱能够通过一些邮件接收服务器的验证。</p><p>Open web client 功能就可以进入邮箱的登录页面了，其使用方法与大多数的邮箱相同，不再赘述。</p><h3 id="DNS管理"><a href="#DNS管理" class="headerlink" title="DNS管理"></a>DNS管理</h3><p>DNS zones 选项卡中在自己绑定的域名右侧点击 Edit ，即可查看当前域名的所有 DNS 记录，在 Add new record 中可以手动添加新的 DNS 记录，与大多数的域名服务商提供的 DNS 管理的功能类似。</p><h3 id="Proxy"><a href="#Proxy" class="headerlink" title="Proxy"></a>Proxy</h3><p>WWW websites 选项卡中可以根据语言不同添加多种网站，其中 PHP 的 <code>eval() function</code> 和 <code>exec() function</code> 都要在添加完网站后，在Manage &gt; Details 中打开。不同类型的网页其 Details 中的选项也都有差异，可以按需查看配置，这里重点讲一下 Proxy 类型指向自己的应用程序监听端口的配置。</p><p>Add new website 功能中， Domain 填写自己的域名或者 serv00 分配的域名，或者它们的子域，展开 Advanced settings， Website type 选择 Proxy ，Proxy target 选择 localhost ， Proxy port 选择自己的应用监听的端口，其他选项留空或者保持默认，点击 Add 即可。接下来就能使用刚刚填写的域名访问自己部署的对应端口的应用了。如果需要 https 访问，再按前文的步骤去申请 SSL 证书即可。</p><h2 id="运行自己的应用"><a href="#运行自己的应用" class="headerlink" title="运行自己的应用"></a>运行自己的应用</h2><p>Additional services 选项卡中找到 Run your own applications 项目，将其设置为 Enabled 即可。<strong>如果不开启这一项，自己的用户目录下的所有文件都无法添加可执行权限。</strong></p><h2 id="File-manager"><a href="#File-manager" class="headerlink" title="File manager"></a>File manager</h2><p>文件管理，有一定的在线编辑和预览的功能，兼具文件的上传下载，删除新建等各种管理功能，十分便利。</p><h2 id="Port-reservation"><a href="#Port-reservation" class="headerlink" title="Port reservation"></a>Port reservation</h2><p>需要使用端口都得在这申请。</p><h2 id="数据库"><a href="#数据库" class="headerlink" title="数据库"></a>数据库</h2><p>Serv00 提供了 MySQL 、 PostgreSQL 、 MongoDB 三种数据库，可以按需新建数据库、数据库用户。同时， Serv00 还提供了三种数据库的 webui ，十分便利。</p><p>需要注意的是，所有数据库在新建时，其用户名和数据库名都有一个 <code>mxxx_</code> 的前缀，在使用时容易被忽视。</p><h2 id="Cron-jobs"><a href="#Cron-jobs" class="headerlink" title="Cron jobs"></a>Cron jobs</h2><p>Cron jobs 选项卡提供了一些计划性任务的设置功能，在这里可以设置开机自启任务，或者定时循环任务，当然常用的还是开机自启任务的设定， Specify time 选择 After reboot 即为开机自启。</p><h1 id="部署应用前的一些准备工作"><a href="#部署应用前的一些准备工作" class="headerlink" title="部署应用前的一些准备工作"></a>部署应用前的一些准备工作</h1><p>在部署自己的应用之前，我建议提前安装好 pm2 以及 Cloudflared （可选）。前者是进程管理工具，用来方便开机自启，以及程序崩溃后自启，查阅进程运行情况等等。后者是 Cloudflare 的 Argo 隧道客户端，用它也可以给自己部署的应用加域名。特别是 Uptime Kuma ，更加推荐使用 Cloudflared 加域名，而不建议使用面板自带的 Proxy 。</p><h2 id="Pm2"><a href="#Pm2" class="headerlink" title="Pm2"></a>Pm2</h2><p>这个是重中之重，如果不是成功安装了 pm2 ，我甚至不会尝试探索 Serv00 这个玩具有什么用，所以 pm2 的安装方法记录在开头。</p><p>在 SSH 连接 serv00 之后，直接使用一键脚本安装 pm2 ：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -s https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/install-pm2.sh)</span><br></pre></td></tr></table></figure><blockquote><p>如果安装完成后执行 <code>pm2</code> 提示命令未找到，你可以断开 SSH 连接，再重新连接，即可。</p></blockquote><h2 id="Cloudflared"><a href="#Cloudflared" class="headerlink" title="Cloudflared"></a>Cloudflared</h2><p>Cloudflared 官方仓库并没有构建 FreeBSD 系统上能够使用的二进制文件，但是同样的，我找到了<a class="link"   href="https://cloudflared.bowring.uk/" >第三方的构筑<i class="fas fa-external-link-alt"></i></a>。使用第三方构筑的二进制文件，就能愉快的使用隧道了。</p><p>关于 Cloudflared 是什么，有什么用，ARGO_TOKEN 如何获取等部分，这里不再赘述，详细可以查看我的关于 CodeSandbox 和 Hax 的文章。</p><p>创建并进入Cloudflared 的工作目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p ~/domains/cloudflared &amp;&amp; <span class="built_in">cd</span> ~/domains/cloudflared</span><br></pre></td></tr></table></figure><p>下载 Cloudflared：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://cloudflared.bowring.uk/binaries/cloudflared-freebsd-latest.7z &amp;&amp; 7z x cloudflared-freebsd-latest.7z &amp;&amp; <span class="built_in">rm</span> cloudflared-freebsd-latest.7z &amp;&amp; <span class="built_in">mv</span> -f ./temp/* ./cloudflared &amp;&amp; <span class="built_in">rm</span> -rf temp</span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN</span><br></pre></td></tr></table></figure><blockquote><p>其中 ARGO_TOKEN 要替换成自己的。确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用 pm2 启动 Cloudflared：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./cloudflared -- tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN</span><br></pre></td></tr></table></figure><blockquote><p>其中 ARGO_TOKEN 要替换成自己的。</p></blockquote><p>接着去 CLoudflare 的面板中设置域名对应端口，即可使用域名访问自己搭建的服务了。</p><h2 id="安装-go1-22"><a href="#安装-go1-22" class="headerlink" title="安装 go1.22"></a>安装 go1.22</h2><blockquote><p>如果你有安装自己使用 go build 构建的需求，你可以选择安装最新的 go1.22 ，这里记录其安装过程。</p></blockquote><p>由于 Serv00 服务器上并未提供 go1.22 ，只提供了 go1.20.3 ，无法正常进行构建工作，所以需要手动安装 go1.22 环境。</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建安装目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p ~/local/soft &amp;&amp; <span class="built_in">cd</span> ~/local/soft</span><br><span class="line"><span class="comment"># 下载编译好的 go1.22 的程序包</span></span><br><span class="line">wget https://dl.google.com/go/go1.22.0.freebsd-amd64.tar.gz</span><br><span class="line"><span class="comment"># 解压</span></span><br><span class="line">tar -xzvf go1.22.0.freebsd-amd64.tar.gz</span><br><span class="line"><span class="comment"># 删除压缩文件</span></span><br><span class="line"><span class="built_in">rm</span> go1.22.0.freebsd-amd64.tar.gz</span><br><span class="line"><span class="comment"># 修改 .profile 文件</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&#x27;export PATH=~/local/soft/go/bin:$PATH&#x27;</span> &gt;&gt; ~/.profile</span><br><span class="line"><span class="comment"># 使 .profile 的修改生效</span></span><br><span class="line"><span class="built_in">source</span> ~/.profile</span><br><span class="line"><span class="comment"># 检查 go 版本</span></span><br><span class="line">go version</span><br></pre></td></tr></table></figure><h1 id="部署自己的应用"><a href="#部署自己的应用" class="headerlink" title="部署自己的应用"></a>部署自己的应用</h1><blockquote><p>关于设定 PHP 版本、插件、参数等配置均可参考文档的<a class="link"   href="https://docs.serv00.com/htaccess/" > .htaccess <i class="fas fa-external-link-alt"></i></a>部分进行配置，由于 PHP 的应用部署实在是太简单，故本文不会过多介绍。</p></blockquote><h2 id="WordPress"><a href="#WordPress" class="headerlink" title="WordPress"></a>WordPress</h2><p>实际上在 serv00 的<a class="link"   href="https://docs.serv00.com/" >文档<i class="fas fa-external-link-alt"></i></a>中有搭建网站的示例，没错，示例就有 WordPress ，实际上 WordPress 确实可以搭建，十分简单好用。这里不做过多介绍，按照文档一步步操作即可。</p><p>除了 WordPress 外，文档中还详细介绍了 Redis、Memcached、Imapsync、WP-CLI、Tomcat 等服务的搭建方法，有需求的都可以照着抄。</p><h2 id="KodBox"><a href="#KodBox" class="headerlink" title="KodBox"></a>KodBox</h2><p>虽然 Serv00 能够部署 KodBox，但是实在是不太好用。最直观的感受就是卡，因为 KodBox 运行期间需要调用多个 PHP 组件，而 Serv00 限制同时处理三个 PHP 进程，所以显得特别慢。其次， Serv00 没有 Root 权限，部分 PHP 插件没有安装，也无法安装，导致有一些 KodBox 的插件无法正常运行。</p><p>当然如果只是图新奇搭一个玩玩，也是可以的。下面是步骤：</p><p>首先在 Panel 中 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>PHP</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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"><span class="comment"># 安装KodBox</span></span><br><span class="line">bash &lt;(curl -s https://pan.rappit.site/d/shell/kodbox1.49/serv00-kodbox-install.sh)</span><br></pre></td></tr></table></figure><p>然后去 Panel 中的 MySQL 选项卡，新建数据库和用户，用以接入 KodBox 。再去 WWW Websites 选项卡中找到 用户名.serv00.net ，点击右侧的 Manage &gt; Details 进入设置，把 GZIP compression、Allow PHP eval() function、Allow PHP exec() function 三个功能打开。</p><p>然后使用浏览器访问你的 KodBxo 的域名，进行安装配置即可。初次启动需要较长的时间，请耐心等待。</p><h2 id="Lsky-Pro"><a href="#Lsky-Pro" class="headerlink" title="Lsky-Pro"></a><a class="link"   href="https://github.com/lsky-org/lsky-pro" >Lsky-Pro<i class="fas fa-external-link-alt"></i></a></h2><p>一开始看<a class="link"   href="https://docs.lsky.pro/" >兰空图床的文档<i class="fas fa-external-link-alt"></i></a>没看到 webdav 功能的相关介绍，只看到几个我都不用的存储介质，遂不感兴趣的搁置了，然而群友近日又提起，我打开 GitHub 才发现首页有个 Commit 的标题就是 webdav 相关，即兰空图床支持 webdav 。于是我便部署了一下，体验感觉还不错，简单易用。</p><p>本来无意在本篇文章再多写 PHP 相关的站点部署，因为过于简单。但是奈何群友有需求，遂做个简单的步骤记录：</p><p>首先在 Panel 中 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>PHP</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下：</p><figure class="highlight bash"><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="comment"># 下载图床应用</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/lsky-org/lsky-pro/releases/latest)</span><br><span class="line">asset_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name != &quot;source code&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o temp.zip <span class="string">&quot;<span class="variable">$asset_url</span>&quot;</span> &amp;&amp; unzip -q temp.zip &amp;&amp; <span class="built_in">rm</span> -f temp.zip</span><br><span class="line"><span class="built_in">rm</span> -rf public_html &amp;&amp; <span class="built_in">ln</span> -s <span class="string">&quot;<span class="variable">$PWD</span>/public&quot;</span> <span class="string">&quot;<span class="variable">$PWD</span>/public_html&quot;</span></span><br></pre></td></tr></table></figure><p>接着在 Panel 中 WWW websites 选项卡内，点击自己刚刚创建的用于部署 Lsky-Pro 的域名的 Manage &gt; Details ，在 <strong>Open Basedir directories</strong> 的最末添加：</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">:/usr/home/用户名/domains/xxx.USERNAME.serv00.net</span><br></pre></td></tr></table></figure><blockquote><p>记得把用户名和最末的域名换成自己的。</p></blockquote><p>然后把 <strong>GZIP compression</strong> 、<strong>Allow PHP eval() function</strong> 、<strong>Allow PHP exec() function</strong> 都打开，点击 save changes 保存。</p><p>然后去 Panel 中的 MySQL 选项卡，新建数据库和用户，用以接入 Lsky-Pro 。</p><p>然后使用浏览器访问你的 Lsky-Pro 的域名，进行安装配置即可。</p><blockquote><p>上面的应用不需要占用端口。</p></blockquote><hr><blockquote><p>下面的应用每一个都能够 &#x2F; 需要占用端口。</p></blockquote><h2 id="Vless"><a href="#Vless" class="headerlink" title="Vless"></a>Vless</h2><p>这个肯定是第一时间部署的，每次遇到这样的平台，第一时间总是想着能不能搭建节点。</p><h3 id="①"><a href="#①" class="headerlink" title="①"></a>①</h3><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Vless 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下：</p><figure class="highlight bash"><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"><span class="comment"># 克隆源仓库</span></span><br><span class="line"><span class="built_in">rm</span> -rf public_html &amp;&amp; git <span class="built_in">clone</span> https://github.com/qwer-search/serv00-vless public_html &amp;&amp; <span class="built_in">cd</span> public_html &amp;&amp; <span class="built_in">rm</span> -f README.md</span><br></pre></td></tr></table></figure><p>使用vim编辑或者直接去 Panel 中的 File Manager 选项卡在线编辑 <code>app.js</code> 文件，修改端口为刚刚放行的端口。</p><p>安装依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p>安装完毕后，使用pm2启动并守护vless进程：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start app.js --name vless</span><br></pre></td></tr></table></figure><p>接着去你的代理客户端软件中手动添加 vless 配置即可：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>地址</td><td>Panel中WWW Websites 选项卡里的你的 Domain name</td></tr><tr><td>端口</td><td>你放行的端口</td></tr><tr><td>用户 id</td><td>37a0bd7c-8b9f-4693-8916-bd1e2da0a817</td></tr><tr><td>传输协议</td><td>ws</td></tr><tr><td>伪装域名</td><td>同地址</td></tr><tr><td>ws path</td><td>&#x2F;</td></tr></tbody></table><p>上表没有给出的可以不填。</p><h3 id="②"><a href="#②" class="headerlink" title="②"></a>②</h3><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Vless 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下，再使用 <code>npm</code> 命令安装 <code>@3Kmfi6HP/nodejs-proxy</code> ：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install @3Kmfi6HP/nodejs-proxy</span><br></pre></td></tr></table></figure><blockquote><p>被删库了可以自己换个源安装，比如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm --registry http://r.cnpmjs.org install @3Kmfi6HP/nodejs-proxy</span><br></pre></td></tr></table></figure><p>这个源如果也不行了请自己找其他源替换。</p></blockquote><p>再使用 pm2 启动：</p><figure class="highlight bash"><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"><span class="comment"># 记得把 PORT 替换成自己放行的端口。</span></span><br><span class="line">pm2 start npx --name vless -- nodejs-proxy -p PORT</span><br></pre></td></tr></table></figure><p>接着访问这个刚刚添加的站点，即可在网页上直接获取配置。<br><strong>哦对，有个小 <code>bug</code> ，端口需要改成 443 ，而网页中默认给的配置是 80 。</strong></p><blockquote><p>之所以说这个 <code>npm</code> 包不安全，是因为其配置在网页上都可以看到，而且网页设计不太合理，有一个不带 <code>uuid</code> 的中转页面，所以可以使用 <strong>fofa</strong> 、 <strong>shodan</strong> 等网络空间扫描工具批量扫出来，而且不止 Serv00 一个平台有人使用，如果你感兴趣，你可以去搜搜看，可以收获一大批 Vless 节点。</p><p>这里放一个 Serv00 上的，我在 fofa 上搜到的页面作为部署示例：<a class="link"   href="https://pclwgdwv.serv00.net/" >https://pclwgdwv.serv00.net/<i class="fas fa-external-link-alt"></i></a></p></blockquote><h2 id="Alist"><a href="#Alist" class="headerlink" title="Alist"></a>Alist</h2><p>Alist 官方仓库没有构筑 FreeBSD 系统下能够运行的 Alist 可执行文件，但是我在 Github 上发现了一个使用 Github Workflow 自动构筑 FreeBSD 适用的 Alist 的<a class="link"   href="https://github.com/uubulb/alist-freebsd" >仓库<i class="fas fa-external-link-alt"></i></a>，使用这个仓库就可以很便利的在Serv00上部署 Alist。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Alist 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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"><span class="comment"># 使用一键命令安装 Alist</span></span><br><span class="line">wget -O alist-freebsd.sh https://raw.githubusercontent.com/k0baya/alist_repl/main/serv00/alist-freebsd.sh &amp;&amp; sh alist-freebsd.sh</span><br></pre></td></tr></table></figure><p>在 Panel 中进入 MySQL 选项卡，使用 Add database 功能新建一个数据库。</p><blockquote><p>密码要求含有大写字母、小写字母和数字三种字符，且长度必须超过6个字符。</p></blockquote><p>接下来进入 File manager 选项卡，进入 <code>~/domains/xxx.USERNAME.serv00.net/public_html/data</code> 路径，可以看到一个名为  <code>config.json</code> 的文件，右键点击，选择 View&#x2F;Edit &gt; Source Editor ，进行编辑：</p><p>我主要修改了 CDN、database、scheme 三个部分，其中CDN可以在 <a class="link"   href="https://link.zhihu.com/?target=https://alist.nn.ci/zh/config/configuration.html%23cdn" >Alist 的官方文档<i class="fas fa-external-link-alt"></i></a>找到，请选择你本地网络连接速度最快的一个。</p><p>scheme 部分，我选择修改 adress 为 <code>127.0.0.1</code>本地回环，是为了避免被他人使用 <code>http://ip:port</code>的方式进行访问。至于自己怎么访问，我在本文后面的部分会进行介绍。port 要改成自己前面放行的端口。</p><p>database 部分，type 需要改成 <code>mysql</code> ，host 填写你在注册邮件中看到的 mysql 的地址， port 是默认的 3306，用户名、密码、数据库名则按照你创建的情况进行填写。</p><blockquote><p>最新版本的 Alist 如果不想开启 S3 Server，请把对应的配置文件中的端口配置为 0 。</p></blockquote><p>改完之后，点击 save 保存，接着回到 SSH 窗口中进行操作：</p><p>测试启动 Alist：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./alist server</span><br></pre></td></tr></table></figure><blockquote><p>确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用 pm2 启动并管理 alist：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./alist -- server</span><br></pre></td></tr></table></figure><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Synctv"><a href="#Synctv" class="headerlink" title="Synctv"></a><a class="link"   href="https://synctv.wiki/" >Synctv<i class="fas fa-external-link-alt"></i></a></h2><p>群友仿照 alist-freebsd 的仓库的 workflow 进行构筑的。部署简单，与 alist 类似。首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Synctv 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载可执行文件</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/shangskr/synctv-freebsd/releases/latest)</span><br><span class="line">asset_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name != &quot;source code&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o synctv <span class="string">&quot;<span class="variable">$asset_url</span>&quot;</span> &amp;&amp; <span class="built_in">chmod</span> +x synctv</span><br></pre></td></tr></table></figure><p>新建启动脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; start.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/sh</span></span><br><span class="line"><span class="string"># 如果不希望被使用 http://ip:port 的方式访问，取消注释下一行</span></span><br><span class="line"><span class="string"># export SYNCTV_SERVER_LISTEN=127.0.0.1</span></span><br><span class="line"><span class="string"># 把下一行的最末的PORT改成自己放行的端口</span></span><br><span class="line"><span class="string">export SYNCTV_SERVER_PORT=PORT</span></span><br><span class="line"><span class="string">exec ./synctv server --data-dir ./</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>添加可执行权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x start.sh</span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./start.sh</span><br></pre></td></tr></table></figure><blockquote><p>确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2启动并管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./start.sh --name synctv</span><br></pre></td></tr></table></figure><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="One-api"><a href="#One-api" class="headerlink" title="One-api"></a>One-api</h2><p><del>源仓库没有提供freebsd平台的二进制文件，需要自己构建，但是很简单</del>。我已经写了一个仓库用于自动化构建 freebsd 版本的 one-api 二进制文件，可以直接下载使用。</p><blockquote><p>如果你想使用 New-API ，可以使用这个仓库<a class="link"   href="https://github.com/k0baya/new-api-freebsd" >k0baya&#x2F;new-api-freebsd<i class="fas fa-external-link-alt"></i></a>，用法与本节介绍的 One-API 基本一致，对比One-API添加了一些更方便的功能。也许之后 One-API 也会加入这些功能。</p></blockquote><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 One-API 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载 one-api</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/k0baya/one-api-freebsd/releases/latest)</span><br><span class="line">asset_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name != &quot;source code&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o one-api <span class="string">&quot;<span class="variable">$asset_url</span>&quot;</span> &amp;&amp; <span class="built_in">chmod</span> +x one-api</span><br></pre></td></tr></table></figure><p>新建启动脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; start.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/sh</span></span><br><span class="line"><span class="string"># 如果你有设置主题的需要，可以取消注释下一行，然后按照自己的需求设置。</span></span><br><span class="line"><span class="string"># export THEME=&quot;berry&quot;</span></span><br><span class="line"><span class="string">export TIKTOKEN_CACHE_DIR=&quot;$PWD&quot;</span></span><br><span class="line"><span class="string"># 把下一行的 PORT 改为自己放行的端口</span></span><br><span class="line"><span class="string">exec ./one-api --port PORT --log-dir ./logs</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>添加可执行权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x start.sh</span><br></pre></td></tr></table></figure><p>保存后回到 terminal 中，测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./start.sh</span><br></pre></td></tr></table></figure><blockquote><p>确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2启动并管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./start.sh --name one-api</span><br></pre></td></tr></table></figure><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Uptime-Kuma"><a href="#Uptime-Kuma" class="headerlink" title="Uptime-Kuma"></a>Uptime-Kuma</h2><p>受限于 FreeBSD 的平台限制，1.23版本内置了 PlayWright ，无法运行，所以只能安装 1.22 版本。切记先去 Panel 中放行 TCP 端口。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Uptime-Kuma 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下：</p><figure class="highlight bash"><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"><span class="comment"># 下载 v1.22.1 版本的源代码</span></span><br><span class="line"><span class="built_in">cd</span> ~/domains &amp;&amp; wget https://github.com/louislam/uptime-kuma/archive/refs/tags/1.22.1.zip &amp;&amp; unzip 1.22.1.zip &amp;&amp; <span class="built_in">rm</span> -rf public_html &amp;&amp; <span class="built_in">mv</span> -f uptime-kuma-1.22.1 public_html &amp;&amp; <span class="built_in">rm</span> -f 1.22.1.zip &amp;&amp; <span class="built_in">cd</span> public_html</span><br></pre></td></tr></table></figure><p>设置生产模式：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm ci --production</span><br></pre></td></tr></table></figure><p>下载dist文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/louislam/uptime-kuma/releases/download/1.22.1/dist.tar.gz &amp;&amp; tar -xzvf dist.tar.gz &amp;&amp; <span class="built_in">rm</span> dist.tar.gz</span><br></pre></td></tr></table></figure><p>安装补充依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install</span><br></pre></td></tr></table></figure><p>安装过程中多少会有报错，无视就好，实际上最后可以正常运行。内置的Cloudflared反向代理在FreeBSD平台上无法使用，但是可以使用上述的外置的Cloudflared进行反代，使用自己的域名。</p><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">node server/server.js --port=PORT</span><br></pre></td></tr></table></figure><blockquote><p>记得把PORT替换成你放行的端口。确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2管理后台运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start server/server.js --name uptime-kuma -- --port=PORT</span><br></pre></td></tr></table></figure><blockquote><p>记得把PORT替换成你放行的端口。</p></blockquote><blockquote><p>如果你不希望自己的Uptime-Kuma被人使用 <code>http://IP:PORT</code>的方式访问，你可以在最后的执行命令添加 <code> --host=127.0.0.1</code>的尾缀，这样就只能通过反向代理的域名进行访问了:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start server/server.js --name uptime-kuma -- --port=PORT --host=127.0.0.1</span><br></pre></td></tr></table></figure></blockquote><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Bingo（暂时无法正常使用）"><a href="#Bingo（暂时无法正常使用）" class="headerlink" title="Bingo（暂时无法正常使用）"></a>Bingo（暂时无法正常使用）</h2><p>先放行一个端口。在 Panel 中进入 File manager 选项卡，点击左侧的 My Files 进入你的用户根目录，找到 <code>.profile</code>文件，右键选择 View&#x2F;Edit &gt; Choose other &gt;Source Editor 进行编辑，在最末加上以上两行并保存：</p><figure class="highlight bash"><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"><span class="built_in">alias</span> node=<span class="string">&#x27;node20&#x27;</span></span><br><span class="line"><span class="built_in">alias</span> npm=<span class="string">&#x27;npm20&#x27;</span></span><br></pre></td></tr></table></figure><p>应用更改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.profile</span><br></pre></td></tr></table></figure><blockquote><p>先新建一个目录用于存放 Bingo 的相关文件，进入目录后执行下述操作。</p></blockquote><p>下载源码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/weaigc/bingo</span><br></pre></td></tr></table></figure><p>进入源码所在目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> bingo</span><br></pre></td></tr></table></figure><p>安装依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm20 install</span><br></pre></td></tr></table></figure><p>下载build好的 <code>.next</code>资源：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O next.tar.gz https://pan.saika.free.hr/d/local/next.tar.gz &amp;&amp; tar -xzvf next.tar.gz &amp;&amp; <span class="built_in">rm</span> next.tar.gz</span><br></pre></td></tr></table></figure><p>添加环境变量文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> .env.example .<span class="built_in">env</span></span><br></pre></td></tr></table></figure><p>接着在 Panel 中进入 File manager 选项卡，进入Bingo 源码所在的目录，找到 <code>server.js</code>文件，右键选择 View&#x2F;Edit &gt; Choose other &gt;Source Editor 进行编辑，修改第7行中的端口为你放行的端口。再编辑 <code>.env</code>文件，添加你的 <code>BING_HEADER</code>。</p><p>测试启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm20 run start</span><br></pre></td></tr></table></figure><blockquote><p>确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2启动并管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start npm --name bingo -- run start</span><br></pre></td></tr></table></figure><h2 id="Refresh-gpt-chat"><a href="#Refresh-gpt-chat" class="headerlink" title="Refresh-gpt-chat"></a>Refresh-gpt-chat</h2><p>用来对接 ninja、warpgpt 等能够使用 access_Token 作为 API Key 请求 GPT 的工具，以使用永久有效期的 Refresh_token 来获取更好的体验。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Refresh-gpt-chat 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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"><span class="comment"># 下载 refresh-gpt-chat</span></span><br><span class="line">wget -O refresh-gpt-chat.jar https://github.com/Yanyutin753/refresh-gpt-chat/releases/download/v0.0.3/refresh-gpt-chat-0.0.3-SNAPSHOT.jar</span><br></pre></td></tr></table></figure><p>使用 pm2 启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start java19 --name refresh-gpt-chat -- -jar refresh-gpt-chat.jar --server.port=端口 --server.servlet.context-path=/ --getAccessTokenUrl=https://你的ninja地址/auth/refresh_token --chatUrl=https://你的ninja地址/v1/chat/completions</span><br></pre></td></tr></table></figure><p>再套域名，接下来就可以直接使用 <code>https://你套的域名/v1/chat/completions/</code> 当作API端点，使用 <code>refresh_token</code> 做 API_Keys ，使用 ChatGPT 了。</p><p>然后在 one-api 中添加自定义渠道， <code>Base URL</code> 填写你 <code>https://你套的域名</code>，模型填入你的 refresh_token 对应的账号所支持的模型，如果和我一样手持大把 3.5 的账号想用来做 API 用，可以选择全部 GPT3.5 的相关模型，然后在 <code>模型重定向</code>中填入以下内容：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-0301&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-0613&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-16k&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-16k-0613&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-1106&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;gpt-3.5-turbo-instruct&quot;</span><span class="punctuation">:</span> <span class="string">&quot;gpt-3.5-turbo&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>密钥填写你的 <code>refresh_token</code>即可，如果你有多个账号，可以将批量勾选上，然后一行写一个 <code>refresh_token</code>。</p><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Gpt4-copilot-java"><a href="#Gpt4-copilot-java" class="headerlink" title="Gpt4-copilot-java"></a><a class="link"   href="https://github.com/Yanyutin753/gpt4-copilot-java-sh" >Gpt4-copilot-java<i class="fas fa-external-link-alt"></i></a></h2><p>支持 cocopilot 的 ccu 和 copilot 的 ghu 调用 copilot 转 GPT-4 的接口转换工具。 Java 写的，可以在 Serv00 运行。</p><blockquote><p>目前更推荐这个方法：<a class="link"   href="https://blog.rappit.site/2024/02/07/copilot-to-api-free-temp/#lvguanjun-copilot-to-chatgpt4" >lvguanjun&#x2F;copilot-to-chatgpt4<i class="fas fa-external-link-alt"></i></a><br>比起 Gpt4-copilot-java 更轻量更强大。</p></blockquote><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Gpt4-copilot-java 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载 fat jar 包</span></span><br><span class="line">RELEASE_INFO=$(curl -s <span class="string">&quot;https://api.github.com/repos/Yanyutin753/gpt4-copilot-java-sh/releases/latest&quot;</span>)</span><br><span class="line">JAR_DOWNLOAD_URL=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$RELEASE_INFO</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name|test(&quot;.jar$&quot;)) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o gpt4-copilot-java.jar <span class="string">&quot;<span class="variable">$JAR_DOWNLOAD_URL</span>&quot;</span></span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><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"><span class="comment"># 把PORT改为自己放行的端口，最后的server.servlet.context-path参数可以改成自己喜欢的尾缀</span></span><br><span class="line">java19 -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/</span><br></pre></td></tr></table></figure><blockquote><p>测试没有问题之后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用 pm2 启动并管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start java19 --name gpt4-copilot-java -- -jar gpt4-copilot-java.jar --server.port=PORT --server.servlet.context-path=/</span><br></pre></td></tr></table></figure><blockquote><p>始皇的公车：ghu_ThisIsARealFreeCopilotKeyByCoCopilot （已失效）</p><p>免费公车白嫖请求示例：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">curl --location <span class="string">&#x27;http(s)://ip:port_or_URL/cocopilot/v1/chat/completions&#x27;</span> </span><br><span class="line">--header <span class="string">&#x27;Content-Type: application/json&#x27;</span> </span><br><span class="line">--header <span class="string">&#x27;Authorization: Bearer ghu_ThisIsARealFreeCopilotKeyByCoCopilot&#x27;</span> </span><br><span class="line">--data <span class="string">&#x27;&#123;</span></span><br><span class="line"><span class="string">&quot;model&quot;: &quot;gpt-4&quot;,</span></span><br><span class="line"><span class="string">&quot;messages&quot;: [&#123;&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;鲁迅打周树人&quot;&#125;]</span></span><br><span class="line"><span class="string">&#125;&#x27;</span></span><br></pre></td></tr></table></figure></blockquote><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Zfile"><a href="#Zfile" class="headerlink" title="Zfile"></a><a class="link"   href="https://zfile.vip/" >Zfile<i class="fas fa-external-link-alt"></i></a></h2><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Zfile 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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"><span class="comment"># 下载 fat jar 包</span></span><br><span class="line">wget --no-check-certificate -O zfile.jar https://c.jun6.net/ZFILE/zfile-release.jar</span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java19 -jar -Duser.timezone=Asia/Shanghai zfile.jar --zfile.log.path=<span class="variable">$PWD</span>/logs --zfile.db.path=<span class="variable">$PWD</span>/zfile --server.port=PORT</span><br></pre></td></tr></table></figure><blockquote><p>记得把端口改成自己的。测试没有问题之后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2启动并管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start java19 --name zfile -- -jar -Duser.timezone=Asia/Shanghai zfile.jar --zfile.log.path=<span class="variable">$PWD</span>/logs --zfile.db.path=<span class="variable">$PWD</span>/zfile --server.port=PORT</span><br></pre></td></tr></table></figure><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Halo"><a href="#Halo" class="headerlink" title="Halo"></a>Halo</h2><blockquote><p><strong>慎重部署，内存会超100%，不知道会不会封号</strong></p></blockquote><p><a class="link"   href="https://github.com/halo-dev/halo" >halo<i class="fas fa-external-link-alt"></i></a> 自从升级 2.0 版本开始，很长时间内都没有提供构筑好的 jar 包，甚至于在GitHub上都出现了第三方的，使用 GitHub workflow 自动化构筑 jar 包的<a class="link"   href="https://github.com/Lu7fer/Jar4Halo" >仓库<i class="fas fa-external-link-alt"></i></a>。但是，自从<a class="link"   href="https://github.com/halo-dev/halo/releases/tag/v2.12.0-alpha.1" >2.12.0-alpha.1版本<i class="fas fa-external-link-alt"></i></a>开始，halo 的官方仓库又开始提供构筑好的 jar 包了，刚好这些天在玩 Serv00 ，遂尝试部署了一下，成功。现记录一下：</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Halo 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>并在 MySQL 选项卡中中新建 MySQL 数据库，用于填入接入 Halo 。</p><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载jar包</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/halo-dev/halo/releases/latest)</span><br><span class="line">jar_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name | endswith(&quot;.jar&quot;)) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L <span class="string">&quot;<span class="variable">$jar_url</span>&quot;</span> -o halo.jar</span><br></pre></td></tr></table></figure><p>在 <code>halo.jar</code> 所在路径下新建 <code>.halo2</code> 文件夹，进入其中，新建文件 <code>application.yaml</code> 然后并配置其内容：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 新建文件夹</span></span><br><span class="line"><span class="built_in">mkdir</span> -p .halo2</span><br><span class="line"><span class="comment"># 新建并填入配置</span></span><br><span class="line"><span class="built_in">cat</span> &gt; .halo2/application.yaml &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">server:</span></span><br><span class="line"><span class="string">  port: 你在面板中放行的端口</span></span><br><span class="line"><span class="string">  # Response data gzip.</span></span><br><span class="line"><span class="string">  compression:</span></span><br><span class="line"><span class="string">    enabled: false</span></span><br><span class="line"><span class="string">spring:</span></span><br><span class="line"><span class="string">  #sql:</span></span><br><span class="line"><span class="string">  #  init.platform: mysql</span></span><br><span class="line"><span class="string">  r2dbc:</span></span><br><span class="line"><span class="string">    url: r2dbc:pool:mysql://数据库地址:3306/数据库名</span></span><br><span class="line"><span class="string">    username: 数据库用户名</span></span><br><span class="line"><span class="string">    password: 数据库密码</span></span><br><span class="line"><span class="string">halo:</span></span><br><span class="line"><span class="string">  # Your admin client path is https://your-domain/&#123;admin-path&#125;</span></span><br><span class="line"><span class="string">  admin-path: admin</span></span><br><span class="line"><span class="string">  # memory or level</span></span><br><span class="line"><span class="string">  cache: level</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>在 <code>halo.jar</code> 所在路径下新建 <code>run.sh</code> 运行脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; run.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string">export HALO_WORK_DIR=&quot;$PWD/.halo2&quot;</span></span><br><span class="line"><span class="string">export HALO_EXTERNAL_URL=&quot;https://你的域名&quot;</span></span><br><span class="line"><span class="string">exec java17 -server -Xms128m -Xmx256m -jar -Duser.timezone=Asia/Shanghai $PWD/halo.jar --spring.config.additional-location=$PWD/.halo2/application.yaml</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x run.sh &amp;&amp; ./run.sh</span><br></pre></td></tr></table></figure><blockquote><p>确定运行没有问题后，按 <code>Ctrl+c</code>即可停止运行。</p></blockquote><p>使用pm2管理运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x run.sh &amp;&amp; pm2 start ./run.sh --name halo</span><br></pre></td></tr></table></figure><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Go-proxy-bingai"><a href="#Go-proxy-bingai" class="headerlink" title="Go-proxy-bingai"></a>Go-proxy-bingai</h2><p><a class="link"   href="https://github.com/adams549659584/go-proxy-bingai" >这个仓库<i class="fas fa-external-link-alt"></i></a>是 Bingo 的前身，当初玩 Replit 时我便有在使用，只可惜作者早已弃坑，所以当初我才找到了当时还能用的 Bingo 使用。</p><p>在 Bingo 也长期未更新，无法正常使用的如今，我的目光转向了另一个<a class="link"   href="https://github.com/Harry-zklcdc/go-proxy-bingai" >二改仓库<i class="fas fa-external-link-alt"></i></a>。Harry-zklcdc 维护的 Go-proxy-bingai 的分支仓库目前还能够正常使用。而且在与开发者反馈了几个 bug 之后，开发者都会花时间认真复现，并快速修复，其体验实在是不错。</p><p><del>虽然原仓库的 Release 中并未提供 FreeBSD 系统适用的二进制文件，但是我们能够自己构建。我已经构建了一份放在这篇博客底部的QQ群的群文件中</del>。<del>我写了一个仓库用于自动化构建 FreeBSD 版本的 go-proxy-bingai ，可以从我的仓库下载使用。</del> 作者已经开始提供 FreeBSD 的构建，故我的仓库已经存档。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的 USERNAME.serv00.net 删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Go-proxy-bingai 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着 SSH 登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载可执行文件</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/Harry-zklcdc/go-proxy-bingai/releases | jq -r <span class="string">&#x27;[.[] | select(.prerelease==false)][0]&#x27;</span>)</span><br><span class="line">download_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name==&quot;go-proxy-bingai-freebsd-amd64.tar.gz&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L <span class="string">&quot;<span class="variable">$download_url</span>&quot;</span> -o go-proxy-bingai-freebsd-amd64.tar.gz&amp;&amp; tar -xzf go-proxy-bingai-freebsd-amd64.tar.gz &amp;&amp; <span class="built_in">rm</span> go-proxy-bingai-freebsd-amd64.tar.gz &amp;&amp; <span class="built_in">chmod</span> +x go-proxy-bingai</span><br></pre></td></tr></table></figure><p>新建启动脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; entrypoint.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string"># 被注释的环境变量请根据自己的需求，按照原仓库的 wiki 中的介绍进行填入。</span></span><br><span class="line"><span class="string">export BYPASS_SERVER=&quot;https://bypass.zklcdc.xyz&quot;  # 作者本人的公共bypass服务，可用性未知。</span></span><br><span class="line"><span class="string"># export Go_Proxy_BingAI_USER_TOKEN_1=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># export Go_Proxy_BingAI_USER_TOKEN_2=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># export USER_KievRPSSecAuth=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># export USER_RwBf=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># export USER_MUID=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># export APIKEY=&quot;sk-xxx&quot;</span></span><br><span class="line"><span class="string"># export BING_BASE_URL=&quot;https://www.bing.com&quot;</span></span><br><span class="line"><span class="string"># export SYDNEY_BASE_URL=&quot;https://sydney.bing.com&quot;</span></span><br><span class="line"><span class="string"># export HTTP_PROXY=&quot;http://172.17.0.1:18080&quot;</span></span><br><span class="line"><span class="string"># export HTTPS_PROXY=&quot;http://172.17.0.1:18080&quot;</span></span><br><span class="line"><span class="string"># export Go_Proxy_BingAI_AUTH_KEY=&quot;xxx&quot;</span></span><br><span class="line"><span class="string"># 请把下一行双引号中的内容替换成你放行的端口。</span></span><br><span class="line"><span class="string">export PORT=&quot;xxx&quot;</span></span><br><span class="line"><span class="string">chmod +x go-proxy-bingai &amp;&amp; exec ./go-proxy-bingai</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>运行：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 测试运行</span></span><br><span class="line"><span class="built_in">chmod</span> +x entrypoint.sh &amp;&amp; ./entrypoint.sh</span><br><span class="line"><span class="comment"># 使用 pm2 管理运行</span></span><br><span class="line">pm2 start ./entrypoint.sh --name go-proxy-bingai</span><br></pre></td></tr></table></figure><blockquote><p><strong>请注意，如果你需要使用其 web 功能，而不仅仅是 api 功能，请务必使用 https 访问，不然无法打开。你可以选择使用面板自带的 proxy 添加域名并申请 ssl 证书，亦或者直接使用 cloudflared 隧道。</strong></p></blockquote><blockquote><p>同样的，你还可以使用 Cloudflared 隧道添加域名，而不选择使用 Proxy 。</p></blockquote><h2 id="Pentaract"><a href="#Pentaract" class="headerlink" title="Pentaract"></a><a class="link"   href="https://github.com/Dominux/Pentaract" >Pentaract<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>不建议使用，目前 Bug 众多，而且对 Telegram 账号有一定要求，目前暂不清楚 Telegram 限制账号的评定标准。</p></blockquote><p>可以自行构建或者使用使用我构建的成品。由于该应用需要使用具有超级管理员权限的 PostgreSQL ，故不可使用 Serv00 自带的 PostgreSQL ，需要远程连接。</p><p>编译成品下载地址：<a class="link"   href="https://pan.rappit.site/download/%E6%8D%AF%E9%A5%AC/pentaract-freebsd_X64.tar.gz" >pentaract-freebsd_X64.tar.gz<i class="fas fa-external-link-alt"></i></a></p><p>前端构建简单，这里不再赘述，而且由于其 <code>Dockerfile</code> 内构建前端使用的是 Node.js 21 而目前 FreeBSD Port 最高只有 Node.js 20 ，故不推荐在 FreeBSD 上直接构建，可以使用 GItHub Actions 进行构建，或是自己在 Node.js 21 的环境下构建再复制，甚至干脆直接从作者预构建的 Docker 镜像内打包出来使用。（经过测试，使用 Nodejs20 构建也可以正常使用。）</p><p>Serv00 上的构建法：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换 Node.js 版本为 Nodejs20</span></span><br><span class="line"><span class="built_in">alias</span> node=node20</span><br><span class="line"><span class="built_in">alias</span> npm=npm20</span><br><span class="line"><span class="comment"># 全局安装 pnpm</span></span><br><span class="line">npm install -g pnpm</span><br><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br><span class="line"><span class="comment"># 构建前端</span></span><br><span class="line">pnpm install</span><br><span class="line">VITE_API_BASE=<span class="string">&#x27;/api&#x27;</span> pnpm run build</span><br><span class="line"><span class="comment"># 移动构建产物到工作目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p ~/pentaract/ui &amp;&amp; <span class="built_in">cp</span> -R ./dist/* ~/pentaract/ui</span><br></pre></td></tr></table></figure><p>后端的构建，可以使用 GItHub Actions ，或者本地 FreeBSD 虚拟机，甚至直接在 Serv00 上构建。这里记录一下在 Serv00 上构建的方法：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 克隆仓库到 Serv00 上</span></span><br><span class="line">git <span class="built_in">clone</span> https://github.com/Dominux/Pentaract &amp;&amp; <span class="built_in">cd</span> Pentaract/pentaract</span><br><span class="line"><span class="comment"># 构建</span></span><br><span class="line">LIBCLANG_PATH=/usr/local/llvm16/lib cpuset -l 0 cargo build --release</span><br><span class="line"><span class="comment"># 移动构建产物到工作目录</span></span><br><span class="line"><span class="built_in">mkdir</span> -p ~/pentaract &amp;&amp; <span class="built_in">cp</span> ./target/release/pentaract ~/pentaract/pentaract</span><br></pre></td></tr></table></figure><p>然后去 <a class="link"   href="https://supabase.com/" >supabase<i class="fas fa-external-link-alt"></i></a> 注册一个免费的PostgreSQL ，记录下数据库的用户名、密码、数据库名、地址，用于后续填入环境变量。</p><p>接着在 <code>~/pentaract</code> 路径下新建一个启动脚本，按照要求填入所有的环境变量：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; start.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string">export PORT=xxxx</span></span><br><span class="line"><span class="string">export WORKERS=4</span></span><br><span class="line"><span class="string">export CHANNEL_CAPACITY=32</span></span><br><span class="line"><span class="string">export SUPERUSER_EMAIL=xxxx@xxxx.com</span></span><br><span class="line"><span class="string">export SUPERUSER_PASS=xxxx</span></span><br><span class="line"><span class="string">export ACCESS_TOKEN_EXPIRE_IN_SECS=1800</span></span><br><span class="line"><span class="string">export REFRESH_TOKEN_EXPIRE_IN_DAYS=14</span></span><br><span class="line"><span class="string">export SECRET_KEY=xxx</span></span><br><span class="line"><span class="string">export TELEGRAM_API_BASE_URL=https://api.telegram.org</span></span><br><span class="line"><span class="string">export DATABASE_USER=xxxx</span></span><br><span class="line"><span class="string">export DATABASE_PASSWORD=xxxx</span></span><br><span class="line"><span class="string">export DATABASE_NAME=xxxx</span></span><br><span class="line"><span class="string">export DATABASE_HOST=xxxx</span></span><br><span class="line"><span class="string">export DATABASE_PORT=5432</span></span><br><span class="line"><span class="string">chmod +x pentaract &amp;&amp; exec ./pentaract</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>给启动脚本赋权：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x start.sh</span><br></pre></td></tr></table></figure><p><del>前端的 <code>index-22eec6d1.js</code> 文件内的 <code>http://localhost:8000</code> 需要更改为 serv00 的 url 或者 ip:port 。你可以去文件管理中编辑，查找替换即可，也可以使用sed命令简单更改一下：</del> 已经重新构建前端并替换，现无需此步。</p><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./start.sh</span><br></pre></td></tr></table></figure><p>使用 pm2 管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./start.sh --name pentaract</span><br></pre></td></tr></table></figure><h2 id="OneList"><a href="#OneList" class="headerlink" title="OneList"></a><a class="link"   href="https://github.com/msterzhang/onelist" >OneList<i class="fas fa-external-link-alt"></i></a></h2><p>原作者似乎已经弃坑，故我的仓库没有做自动检测构建。但是体验还不错，有 Emby 既视感了，配合小雅的 Alist 岂不美哉。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 OneList 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载 OneList</span></span><br><span class="line">wget https://github.com/k0baya/onelist-freebsd/releases/download/v2.0.5/onelist</span><br><span class="line"><span class="comment"># 初始化配置</span></span><br><span class="line"><span class="built_in">chmod</span> +x onelist &amp;&amp; ./onelist -run config</span><br></pre></td></tr></table></figure><p>接着回到 Panel 中，进入File manager选项卡，进入 OneList 所在路径，可以看到一个名为 <code>config.env</code> 的文件，右键点击，选择View&#x2F;Edit &gt; Source Editor，进行编辑：</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><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"># 服务设置</span><br><span class="line"># 注意要改为未被占用的端口</span><br><span class="line">API_PORT=5245</span><br><span class="line">FaviconicoUrl=https://wework.qpic.cn/wwpic/818353_fizV30xbQCGPQRP_1677394564/0</span><br><span class="line">API_SECRET=fRVvjcNd11gYGI85StVaeCtPVSmJTRRE</span><br><span class="line"></span><br><span class="line"># Env有两种模式，Debug及Release，主要用在数据库为mysql时候，需要注意修改Env环境和mysql密码对应</span><br><span class="line">Env=Debug</span><br><span class="line"></span><br><span class="line"># 管理员账户设置，用于初始化管理员账户</span><br><span class="line">UserEmail=xxxx.@qq.com</span><br><span class="line">UserPassword=xxxxx</span><br><span class="line"></span><br><span class="line"># 数据库设置</span><br><span class="line">DB_DRIVER=sqlite</span><br><span class="line">DB_USER=root</span><br><span class="line">DbName=onelist</span><br><span class="line"></span><br><span class="line"># 如果上面DB_DRIVER类型为mysql，就需要正确填下以下参数</span><br><span class="line">DB_PASSWORD_Debug=123456</span><br><span class="line">DB_PASSWORD_Release=123456</span><br><span class="line"></span><br><span class="line"># TheMovieDb Key</span><br><span class="line"># 在https://www.themoviedb.org网站申请</span><br><span class="line">KeyDb=22f10ca52f109158ac7fe064ebbcf697</span><br></pre></td></tr></table></figure><p>你可以按照自己的需求配置端口、管理员账户、数据库。 MySQL 性能更好哦~</p><p>测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./onelist -run server</span><br></pre></td></tr></table></figure><p>使用 pm2 管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./onelist -- -run server</span><br></pre></td></tr></table></figure><h2 id="WarpGPT"><a href="#WarpGPT" class="headerlink" title="WarpGPT"></a><a class="link"   href="https://github.com/oliverkirk-sudo/WarpGPT" >WarpGPT<i class="fas fa-external-link-alt"></i></a></h2><p>这个没什么多说的，可以使用 access_Token 作为 API Key 请求 ChatGPT 接口，也就是所谓的 chat2api 。配合前文的 Refresh-gpt-chat 就可以把永久有效期的 Refresh_token 作为 API Key 来使用，十分的好用。</p><p>源仓库没有 Release ，故<a class="link"   href="https://github.com/k0baya/warpgpt-freebsd" >我的仓库<i class="fas fa-external-link-alt"></i></a>没有做自动检测构建。如果有更新需求需要手动触发 workflow 。你有需要也可以自己fork一份然后手动触发 workflow 。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 WarpGPT 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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"><span class="comment"># 下载二进制文件</span></span><br><span class="line">wget https://github.com/k0baya/warpgpt-freebsd/releases/download/latest/warpgpt &amp;&amp; <span class="built_in">chmod</span> +x warpgpt</span><br></pre></td></tr></table></figure><p>添加启动脚本：</p><figure class="highlight bash"><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="built_in">cat</span> &gt; start.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string">export TMPDIR=&quot;$PWD&quot;</span></span><br><span class="line"><span class="string">chmod +x warpgpt &amp;&amp; exec ./warpgpt</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>给启动脚本赋权：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x start.sh</span><br></pre></td></tr></table></figure><p>配置环境变量：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; .<span class="built_in">env</span> &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">proxy = &quot;http://127.0.0.1:10809&quot;   #代理地址 （选填）</span></span><br><span class="line"><span class="string">port = 5000                        #程序运行端口</span></span><br><span class="line"><span class="string">host = &#x27;127.0.0.1&#x27;                 #可访问ip，0.0.0.0允许所有ip</span></span><br><span class="line"><span class="string">verify = false                     #是否对访问进行验证</span></span><br><span class="line"><span class="string">auth_key = &quot;&quot;                      #若开启访问验证，则需要在Header中添加AuthKey字段，且值为auth_key的值才能访问 （选填）</span></span><br><span class="line"><span class="string">arkose_must = false                #是否强行gpt3.5进行验证</span></span><br><span class="line"><span class="string">OpenAI_HOST = &quot;chat.openai.com&quot;    #openai网页api接口地址 （选填）</span></span><br><span class="line"><span class="string">openai_api_host = &quot;api.openai.com&quot; #openai官方api接口 （选填）</span></span><br><span class="line"><span class="string">proxy_pool_url=&quot;&quot;                  #ipidea代理池链接 （选填）</span></span><br><span class="line"><span class="string">#示例http://api.proxy.ipidea.io/getProxyIp?num=10&amp;return_type=json&amp;lb=1&amp;sb=0&amp;flow=1&amp;regions=us&amp;protocol=http，根据访问频次设置num值</span></span><br><span class="line"><span class="string">log_level = &quot;debug&quot;                #日志等级</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">redis_address = &quot;127.0.0.1:6379&quot;   #redis地址（若不开启代理池可选填）</span></span><br><span class="line"><span class="string">redis_passwd = &quot;&quot;                  #redis密码</span></span><br><span class="line"><span class="string">redis_db = 0                       #选择的redis数据库</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><blockquote><p>如果有 redis 需求，可以查阅官方文档：<a class="link"   href="https://docs.serv00.com/Redis/" >Redis<i class="fas fa-external-link-alt"></i></a></p></blockquote><p>使用 pm2 管理运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start bash --name warpgpt -- start.sh</span><br></pre></td></tr></table></figure><h2 id="Coze-discord-proxy"><a href="#Coze-discord-proxy" class="headerlink" title="Coze-discord-proxy"></a><a class="link"   href="https://github.com/deanxv/coze-discord-proxy" >Coze-discord-proxy<i class="fas fa-external-link-alt"></i></a></h2><p>代理 Discord 对话 Coze-Bot ，实现以 API 形式请求 GPT4 模型，提供对话、文生图、图生文、知识库检索等功能。功能不多赘述，详细去源仓库查看。</p><p>同样的，我写了一个用于构建 FreeBSD 版本的<a class="link"   href="https://github.com/k0baya/coze-discord-proxy-freebsd" >仓库<i class="fas fa-external-link-alt"></i></a>。在这里感谢论坛用户 <a class="link"   href="https://linux.do/u/reno/summary" >Reno<i class="fas fa-external-link-alt"></i></a> 的测试，没有测试人员的测试，也不会有部署的过程记录了。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Coze-discord-proxy 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 下载二进制文件</span></span><br><span class="line">release_info=$(curl -s https://api.github.com/repos/k0baya/coze-discord-proxy-freebsd/releases/latest)</span><br><span class="line">asset_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name != &quot;source code&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o coze-discord-proxy <span class="string">&quot;<span class="variable">$asset_url</span>&quot;</span> &amp;&amp; <span class="built_in">chmod</span> +x coze-discord-proxy</span><br></pre></td></tr></table></figure><p>添加启动脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; start.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string"># 根据你的需求自行填入环境变量</span></span><br><span class="line"><span class="string">export PORT=&quot;PORT&quot;</span></span><br><span class="line"><span class="string">export USER_AUTHORIZATION=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export BOT_TOKEN=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export GUILD_ID=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export COZE_BOT_ID=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export PROXY_SECRET=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export CHANNEL_ID=&quot;XXXXXX&quot;</span></span><br><span class="line"><span class="string">export TZ=&quot;Asia/Shanghai&quot;</span></span><br><span class="line"><span class="string">export DATA_GYM_CACHE_DIR=&quot;$PWD&quot;</span></span><br><span class="line"><span class="string">chmod +x coze-discord-proxy &amp;&amp; exec ./coze-discord-proxy</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>给启动脚本赋权：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x coze-discord-proxy</span><br></pre></td></tr></table></figure><p>添加多机器人配置文件：</p><figure class="highlight bash"><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"><span class="built_in">mkdir</span> -p app/coze-discord-proxy/data/config</span><br><span class="line"><span class="built_in">touch</span> app/coze-discord-proxy/data/config/bot_config.json</span><br></pre></td></tr></table></figure><p>然后回到 Panel 中，进入File manager选项卡，进入 <code>bot_config.json</code> 所在路径，右键点击它，选择View&#x2F;Edit &gt; Source Editor，进行编辑：</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></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">  &#123;</span><br><span class="line">    &quot;proxySecret&quot;: &quot;123&quot;, // 接口请求密钥(PROXY_SECRET)(注意:此密钥在环境变量PROXY_SECRET中存在时该Bot才可以被匹配到!)</span><br><span class="line">    &quot;cozeBotId&quot;: &quot;12***************31&quot;, // coze托管的机器人ID</span><br><span class="line">    &quot;model&quot;: [&quot;gpt-3.5&quot;,&quot;gpt-3.5-16k&quot;], // 模型名称(数组格式)(与请求参数中的model对应,如请求中的model在该json中未匹配到则会抛出异常)</span><br><span class="line">    &quot;channelId&quot;: &quot;12***************56&quot;  // [可选]discord频道ID(机器人必须在此频道所在的服务器)(目前版本下该参数仅用来活跃机器人)</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    &quot;proxySecret&quot;: &quot;456&quot;,</span><br><span class="line">    &quot;cozeBotId&quot;: &quot;12***************64&quot;,</span><br><span class="line">    &quot;model&quot;: [&quot;gpt-4&quot;,&quot;gpt-4-16k&quot;],</span><br><span class="line">    &quot;channelId&quot;: &quot;12***************78&quot;</span><br><span class="line">  &#125;,</span><br><span class="line">  &#123;</span><br><span class="line">    &quot;proxySecret&quot;: &quot;789&quot;,</span><br><span class="line">    &quot;cozeBotId&quot;: &quot;12***************12&quot;,</span><br><span class="line">    &quot;model&quot;: [&quot;dall-e-3&quot;],</span><br><span class="line">    &quot;channelId&quot;: &quot;12***************24&quot;</span><br><span class="line">  &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>使用 pm2 管理运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start bash --name coze-discord-proxy -- start.sh</span><br></pre></td></tr></table></figure><h2 id="Memos"><a href="#Memos" class="headerlink" title="Memos"></a><a class="link"   href="https://github.com/usememos/memos" >Memos<i class="fas fa-external-link-alt"></i></a></h2><p>一款开源、轻量级的笔记服务。轻松捕捉并分享您的精彩想法。</p><p>这个仓库比较难受的是，其在源码的<a class="link"   href="https://github.com/usememos/memos/blob/edc7645086d285f50e484861705ffee3a626f97a/server/server.go#L85" >这个位置<i class="fas fa-external-link-alt"></i></a>强制要求其 gRPC 服务的端口为 Memos 监听端口+1，故这个应用需要占用两个端口，而且必须是两个连续的端口。</p><p>同样的，我写了一个用于构建 FreeBSD 版本的<a class="link"   href="https://github.com/k0baya/memos-binary" >仓库<i class="fas fa-external-link-alt"></i></a>。</p><p>首先在 Panel 中放行<strong>两个相邻的端口</strong>，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>刚刚放行的<strong>两个相邻的端口中小的那一个</strong></td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">API_URL=<span class="string">&quot;https://api.github.com/repos/k0baya/memos-binary/releases/latest&quot;</span></span><br><span class="line">DOWNLOAD_URL=$(curl -s <span class="variable">$API_URL</span> | jq -r <span class="string">&quot;.assets[] | select(.name == \&quot;memos-freebsd-amd64.tar.gz\&quot;) | .browser_download_url&quot;</span>)</span><br><span class="line">curl -L <span class="variable">$DOWNLOAD_URL</span> -o memos-freebsd-amd64.tar.gz</span><br><span class="line">tar -xzvf memos-freebsd-amd64.tar.gz &amp;&amp; <span class="built_in">rm</span> memos-freebsd-amd64.tar.gz &amp;&amp; <span class="built_in">chmod</span> +x memos</span><br></pre></td></tr></table></figure><p>关于运行，有两种方式进行：</p><p>① SQLite</p><p>如果选择使用 SQLite 作为数据库运行，则可以直接运行：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 假定你的数据文件打算存储在 /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span></span><br><span class="line"><span class="comment"># 新建数据文件夹</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span><br><span class="line"><span class="comment"># 测试运行</span></span><br><span class="line">./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span><br><span class="line"><span class="comment"># 使用 pm2 管理</span></span><br><span class="line">pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span><br></pre></td></tr></table></figure><p>② 外接 MySQL &#x2F; PostgreSQL</p><p>你可以使用面板自带的 MySQL &#x2F; PostgreSQL 新建数据库，或者使用其他平台提供的远程数据库：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 假定你的数据文件打算存储在 /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span></span><br><span class="line"><span class="comment"># 新建数据文件夹</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /home/username/domains/xxx.USERNAME.serv00.net/public_html/data</span><br><span class="line"><span class="comment"># 测试运行（MySQL）（MySQL需要管理员权限，你可以选择远程连接）</span></span><br><span class="line">./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver mysql --dsn mysql://root:password123@localhost:3306/mydb</span><br><span class="line"><span class="comment"># 测试运行（PostgreSQL）</span></span><br><span class="line">./memos --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver postgres --dsn postgresql://user:password123@localhost:5432/mydb?sslmode=<span class="built_in">disable</span></span><br><span class="line"><span class="comment"># 使用 pm2 管理（MySQL）（MySQL需要管理员权限，你可以选择远程连接）</span></span><br><span class="line">pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver mysql --dsn mysql://root:password123@localhost:3306/mydb</span><br><span class="line"><span class="comment"># 使用 pm2 管理（PostgreSQL）</span></span><br><span class="line">pm2 start ./memos --name memos -- --mode prod --port PORT --data /home/username/domains/xxx.USERNAME.serv00.net/public_html/data --driver postgres --dsn postgresql://user:password123@localhost:5432/mydb?sslmode=<span class="built_in">disable</span></span><br></pre></td></tr></table></figure><h2 id="Frps"><a href="#Frps" class="headerlink" title="Frps"></a>Frps</h2><p>内网穿透嘛，懂的都懂，这里只做服务端的部署记录，客户端可以查看 <a class="link"   href="https://gofrp.org/zh-cn/" >Frp 的官方文档<i class="fas fa-external-link-alt"></i></a>自行配置。感谢群友的率先测试：<a class="link"   href="https://blog.theyouyi.site/archives/serv00-frps" >youyi<i class="fas fa-external-link-alt"></i></a></p><p>首先在 Panel 中放行两个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来映射转发内网服务的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><blockquote><p>同样的，你可以设置多个域名使用 Proxy 指向同一个端口，在 Frpc 客户端配置中使用域名分发不同的服务。具体可以查阅官方文档。</p></blockquote><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下</p><figure class="highlight bash"><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">release_info=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest)</span><br><span class="line">download_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name | contains(&quot;freebsd_amd64.tar.gz&quot;)) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L <span class="string">&quot;<span class="variable">$download_url</span>&quot;</span> -o frp_freebsd_amd64.tar.gz </span><br><span class="line">tar -xzvf frp_freebsd_amd64.tar.gz --strip-components=1</span><br><span class="line"><span class="built_in">rm</span> -rf frp_freebsd_amd64.tar.gz</span><br></pre></td></tr></table></figure><p>接着编辑配置文件：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 按照自己的实际情况和需求进行配置，这里只做最简单的http转发配置示例</span></span><br><span class="line"><span class="built_in">cat</span> &gt; frps.toml &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">bindPort = 监听端口</span></span><br><span class="line"><span class="string">vhostHTTPPort = 映射转发端口</span></span><br><span class="line"><span class="string">auth.token = &quot;密码&quot;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./frps -- -c frps.toml</span><br></pre></td></tr></table></figure><blockquote><p>客户端配置示例：</p><figure class="highlight toml"><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="attr">serverAddr</span> = <span class="string">&quot;x.x.x.x&quot;</span></span><br><span class="line"><span class="attr">serverPort</span> = Frps 的监听端口</span><br><span class="line"><span class="attr">auth.token</span> = <span class="string">&quot;密码&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[[proxies]]</span></span><br><span class="line"><span class="attr">name</span> = <span class="string">&quot;web&quot;</span></span><br><span class="line"><span class="attr">type</span> = <span class="string">&quot;http&quot;</span></span><br><span class="line"><span class="attr">localPort</span> = <span class="number">80</span></span><br><span class="line"><span class="attr">customDomains</span> = [<span class="string">&quot;www.yourdomain.com&quot;</span>]</span><br><span class="line"></span><br><span class="line"><span class="section">[[proxies]]</span></span><br><span class="line"><span class="attr">name</span> = <span class="string">&quot;web2&quot;</span></span><br><span class="line"><span class="attr">type</span> = <span class="string">&quot;http&quot;</span></span><br><span class="line"><span class="attr">localPort</span> = <span class="number">8080</span></span><br><span class="line"><span class="attr">customDomains</span> = [<span class="string">&quot;www.yourdomain2.com&quot;</span>]</span><br></pre></td></tr></table></figure></blockquote><h2 id="Rclone"><a href="#Rclone" class="headerlink" title="Rclone"></a><a class="link"   href="https://rclone.org/" >Rclone<i class="fas fa-external-link-alt"></i></a></h2><p>Rclone 是一款管理云存储文件的命令行程序。它功能丰富，可替代云供应商的网络存储界面。超过 70 种云存储产品支持 Rclone，包括 S3 对象存储、企业和消费者文件存储服务以及标准传输协议。</p><p>具体用法与配置请查阅其<a class="link"   href="https://rclone.org/docs/" >官方文档<i class="fas fa-external-link-alt"></i></a>。</p><p>如果你需要使用 Rclone 的 web ui ，你可以按照前文所述的大多数应用一样，先放行端口，添加域名，申请好 SSL 证书，并进入其目录下的 <code>public_html</code> 路径下再进行程序本体的下载部署。</p><p>下载最新版 Rclone：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">release_info=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest)</span><br><span class="line">download_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name | contains(&quot;-freebsd-amd64.zip&quot;)) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L <span class="string">&quot;<span class="variable">$download_url</span>&quot;</span> -o rclone-freebsd-amd64.zip</span><br><span class="line">outer_folder=$(unzip -l rclone-freebsd-amd64.zip | grep <span class="string">&#x27;/&#x27;</span> | sed -n <span class="string">&#x27;1p&#x27;</span> | sed <span class="string">&#x27;s#^.* \([^/]*\)/.*$#\1#&#x27;</span>)</span><br><span class="line">unzip rclone-freebsd-amd64.zip</span><br><span class="line"><span class="built_in">mv</span> <span class="string">&quot;<span class="variable">$outer_folder</span>&quot;</span>/* . &amp;&amp; <span class="built_in">rm</span> -rf <span class="string">&quot;<span class="variable">$outer_folder</span>&quot;</span> rclone-freebsd-amd64.zip</span><br></pre></td></tr></table></figure><p>经我测试，目前 v1.63.1 之后的版本的 FreeBSD 版的构建都有无法识别 <code>mount</code> 命令的问题，在我查阅其 issue —— <a class="link"   href="https://github.com/rclone/rclone/issues/7432" >#7432<i class="fas fa-external-link-alt"></i></a> 、 <a class="link"   href="https://github.com/rclone/rclone/issues/5843#issuecomment-1784149722" >#5843<i class="fas fa-external-link-alt"></i></a> 后，确定这个 bug 已经好几个月没有修复了。所以我建议在此 bug 修复前，使用 v1.63.1 版本。</p><p>下载 v1.63.1 版本 Rclone ：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">curl -L https://github.com/rclone/rclone/releases/download/v1.63.1/rclone-v1.63.1-freebsd-amd64.zip -o rclone-freebsd-amd64.zip</span><br><span class="line">outer_folder=$(unzip -l rclone-freebsd-amd64.zip | grep <span class="string">&#x27;/&#x27;</span> | sed -n <span class="string">&#x27;1p&#x27;</span> | sed <span class="string">&#x27;s#^.* \([^/]*\)/.*$#\1#&#x27;</span>)</span><br><span class="line">unzip rclone-freebsd-amd64.zip</span><br><span class="line"><span class="built_in">mv</span> <span class="string">&quot;<span class="variable">$outer_folder</span>&quot;</span>/* . &amp;&amp; <span class="built_in">rm</span> -rf <span class="string">&quot;<span class="variable">$outer_folder</span>&quot;</span> rclone-freebsd-amd64.zip</span><br></pre></td></tr></table></figure><p>配置 Rclone 的存储：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./rclone config</span><br></pre></td></tr></table></figure><blockquote><p>启动 web ui：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./rclone rcd --rc-web-gui --rc-user 用户名 --rc-pass 密码 --rc-addr :端口</span><br></pre></td></tr></table></figure><p>pm2 管理 web ui：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./rclone -- rcd --rc-web-gui --rc-user 用户名 --rc-pass 密码 --rc-addr :端口</span><br></pre></td></tr></table></figure></blockquote><h2 id="Cloudreve"><a href="#Cloudreve" class="headerlink" title="Cloudreve"></a><a class="link"   href="https://cloudreve.org/" >Cloudreve<i class="fas fa-external-link-alt"></i></a></h2><p>Cloudreve 可助你即刻构建出兼备自用或公用的网盘服务，通过多种存储策略的支持、虚拟文件系统等特性实现灵活的文件管理体验。</p><p>同样的，我编写了一个用于自动化构建 FreeBSD 版本的 Cloudreve 的仓库：<a class="link"   href="https://github.com/k0baya/cloudreve-freebsd" >k0baya&#x2F;cloudreve-freebsd<i class="fas fa-external-link-alt"></i></a> 前后端分离构建，前端静态文件在 Cloudreve 本体同路径下的 <code>static</code> 文件夹内。</p><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 Cloudreve 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><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">release_info=$(curl -s https://api.github.com/repos/k0baya/cloudreve-freebsd/releases/latest)</span><br><span class="line">download_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name | contains(&quot;freebsd-amd64.tar.gz&quot;)) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L <span class="string">&quot;<span class="variable">$download_url</span>&quot;</span> -o cloudreve-freebsd-amd64.tar.gz </span><br><span class="line">tar -xzvf cloudreve-freebsd-amd64.tar.gz</span><br><span class="line"><span class="built_in">rm</span> -rf cloudreve-freebsd-amd64.tar.gz</span><br></pre></td></tr></table></figure><p>Cloudreve 在首次启动时，会创建初始管理员账号，请注意保管管理员密码，此密码只会在首次启动时出现。如果您忘记初始管理员密码，需要删除同级目录下的 <code>cloudreve.db</code> ，重新启动主程序以初始化新的管理员账户。</p><p>Cloudreve 默认会监听 <code>5212</code> 端口。首次启动时，Cloudreve 会在同级目录下创建名为 <code>conf.ini</code> 的配置文件，你可以修改此文件进行一些参数的配置（比如端口），保存后需要重新启动 Cloudreve 生效。</p><p>一个完整的配置文件示例如下：</p><figure class="highlight ini"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[System]</span></span><br><span class="line"><span class="comment">; 运行模式</span></span><br><span class="line"><span class="attr">Mode</span> = master</span><br><span class="line"><span class="comment">; 监听端口</span></span><br><span class="line"><span class="attr">Listen</span> = :<span class="number">5212</span></span><br><span class="line"><span class="comment">; 是否开启 Debug</span></span><br><span class="line"><span class="attr">Debug</span> = <span class="literal">false</span></span><br><span class="line"><span class="comment">; Session 密钥, 一般在首次启动时自动生成</span></span><br><span class="line"><span class="attr">SessionSecret</span> = <span class="number">23333</span></span><br><span class="line"><span class="comment">; Hash 加盐, 一般在首次启动时自动生成</span></span><br><span class="line"><span class="attr">HashIDSalt</span> = something really hard to guss</span><br><span class="line"><span class="comment">; 呈递客户端 IP 时使用的 Header</span></span><br><span class="line"><span class="attr">ProxyHeader</span> = X-Forwarded-For</span><br><span class="line"></span><br><span class="line"><span class="comment">; SSL 相关</span></span><br><span class="line"><span class="section">[SSL]</span></span><br><span class="line"><span class="comment">; SSL 监听端口</span></span><br><span class="line"><span class="attr">Listen</span> = :<span class="number">443</span></span><br><span class="line"><span class="comment">; 证书路径</span></span><br><span class="line"><span class="attr">CertPath</span> = C:\Users\i\Documents\fullchain.pem</span><br><span class="line"><span class="comment">; 私钥路径</span></span><br><span class="line"><span class="attr">KeyPath</span> = C:\Users\i\Documents\privkey.pem</span><br><span class="line"></span><br><span class="line"><span class="comment">; 启用 Unix Socket 监听</span></span><br><span class="line"><span class="section">[UnixSocket]</span></span><br><span class="line"><span class="attr">Listen</span> = /run/cloudreve/cloudreve.sock</span><br><span class="line"><span class="comment">; 设置产生的 socket 文件的权限</span></span><br><span class="line"><span class="attr">Perm</span> = <span class="number">0666</span></span><br><span class="line"></span><br><span class="line"><span class="comment">; 数据库相关，如果你只想使用内置的 SQLite 数据库，这一部分直接删去即可</span></span><br><span class="line"><span class="section">[Database]</span></span><br><span class="line"><span class="comment">; 数据库类型，目前支持 sqlite/mysql/mssql/postgres</span></span><br><span class="line"><span class="attr">Type</span> = mysql</span><br><span class="line"><span class="comment">; MySQL 端口</span></span><br><span class="line"><span class="attr">Port</span> = <span class="number">3306</span></span><br><span class="line"><span class="comment">; 用户名</span></span><br><span class="line"><span class="attr">User</span> = root</span><br><span class="line"><span class="comment">; 密码</span></span><br><span class="line"><span class="attr">Password</span> = root</span><br><span class="line"><span class="comment">; 数据库地址</span></span><br><span class="line"><span class="attr">Host</span> = <span class="number">127.0</span>.<span class="number">0.1</span></span><br><span class="line"><span class="comment">; 数据库名称</span></span><br><span class="line"><span class="attr">Name</span> = v3</span><br><span class="line"><span class="comment">; 数据表前缀</span></span><br><span class="line"><span class="attr">TablePrefix</span> = cd_</span><br><span class="line"><span class="comment">; 字符集</span></span><br><span class="line"><span class="attr">Charset</span> = utf8mb4</span><br><span class="line"><span class="comment">; SQLite 数据库文件路径</span></span><br><span class="line"><span class="attr">DBFile</span> = cloudreve.db</span><br><span class="line"><span class="comment">; 进程退出前安全关闭数据库连接的缓冲时间</span></span><br><span class="line"><span class="attr">GracePeriod</span> = <span class="number">30</span></span><br><span class="line"><span class="comment">; 使用 Unix Socket 连接到数据库</span></span><br><span class="line"><span class="attr">UnixSocket</span> = <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment">; 从机模式下的配置</span></span><br><span class="line"><span class="section">[Slave]</span></span><br><span class="line"><span class="comment">; 通信密钥</span></span><br><span class="line"><span class="attr">Secret</span> = <span class="number">1234567891234567123456789123456712345678912345671234567891234567</span></span><br><span class="line"><span class="comment">; 回调请求超时时间 (s)</span></span><br><span class="line"><span class="attr">CallbackTimeout</span> = <span class="number">20</span></span><br><span class="line"><span class="comment">; 签名有效期</span></span><br><span class="line"><span class="attr">SignatureTTL</span> = <span class="number">60</span></span><br><span class="line"></span><br><span class="line"><span class="comment">; 跨域配置</span></span><br><span class="line"><span class="section">[CORS]</span></span><br><span class="line"><span class="attr">AllowOrigins</span> = *</span><br><span class="line"><span class="attr">AllowMethods</span> = OPTIONS,GET,POST</span><br><span class="line"><span class="attr">AllowHeaders</span> = *</span><br><span class="line"><span class="attr">AllowCredentials</span> = <span class="literal">false</span></span><br><span class="line"><span class="attr">SameSite</span> = Default</span><br><span class="line"><span class="attr">Secure</span> = lse</span><br><span class="line"></span><br><span class="line"><span class="comment">; Redis 相关</span></span><br><span class="line"><span class="section">[Redis]</span></span><br><span class="line"><span class="attr">Server</span> = <span class="number">127.0</span>.<span class="number">0.1</span>:<span class="number">6379</span></span><br><span class="line"><span class="attr">Password</span> =</span><br><span class="line"><span class="attr">DB</span> = <span class="number">0</span></span><br><span class="line"></span><br><span class="line"><span class="comment">; 从机配置覆盖</span></span><br><span class="line"><span class="section">[OptionOverwrite]</span></span><br><span class="line"><span class="comment">; 可直接使用 `设置名称 = 值` 的格式覆盖</span></span><br><span class="line"><span class="attr">max_worker_num</span> = <span class="number">50</span></span><br></pre></td></tr></table></figure><p>你可以使用 <code>vim</code> 或者 Panel 中的 File manager 选项卡，进入 <code>conf.ini</code> 所在路径路径，右键点击，选择 View&#x2F;Edit &gt; Source Editor ，进行编辑。</p><p>修改完配置文件后，测试启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./cloudreve</span><br></pre></td></tr></table></figure><p>使用 pm2 管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./cloudreve</span><br></pre></td></tr></table></figure><h2 id="PanIndex"><a href="#PanIndex" class="headerlink" title="PanIndex"></a><a class="link"   href="https://github.com/px-org/PanIndex" >PanIndex<i class="fas fa-external-link-alt"></i></a></h2><p>一个简易的网盘目录列表。</p><p>同样的，我编写了一个用于自动化构建 FreeBSD 版本的 PanIndex 的仓库：<a class="link"   href="https://github.com/k0baya/panindex-freebsd" >k0baya&#x2F;panindex-freebsd<i class="fas fa-external-link-alt"></i></a>。</p><blockquote><p>后台地址（默认）：<code>http://ip:port/admin</code><br>默认账号：<code>admin</code><br>默认密码：<code>PanIndex</code></p></blockquote><p>首先在 Panel 中放行一个端口，接着按照下表 Add a New Website ：</p><table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>Domain</td><td><code>xxx.USERNAME.serv00.net</code>（也可以把原有的USERNAME.serv00.net删掉后重新添加）</td></tr><tr><td>Website Type</td><td>proxy</td></tr><tr><td>Proxy Target</td><td>localhost</td></tr><tr><td>Proxy URL</td><td>留空</td></tr><tr><td>Proxy port</td><td>你准备用来部署 PanIndex 的端口</td></tr><tr><td>Use HTPPS</td><td>False</td></tr><tr><td>DNS support</td><td>True</td></tr></tbody></table><p>添加完新站点后，继续点击上方的 Manage SSL certificates ，接着在出口 IP 的右侧点击 Manage ，再点击 Add certificate ：</p><table><thead><tr><th>Type</th><th>Domain</th></tr></thead><tbody><tr><td>Generate Let’s Encrypted certificate</td><td>与刚刚添加的站点域名保持一致（如果是原有的<code>USERNAME.serv00.net</code> ，可以省略此步）</td></tr></tbody></table><p>接着SSH登入，并进入刚刚你新建的域名目录下的 <code>public_html</code> 路径下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">release_info=$(curl -s https://api.github.com/repos/k0baya/panindex-freebsd/releases/latest)</span><br><span class="line">asset_url=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$release_info</span>&quot;</span> | jq -r <span class="string">&#x27;.assets[] | select(.name != &quot;source code&quot;) | .browser_download_url&#x27;</span>)</span><br><span class="line">curl -L -o panindex <span class="string">&quot;<span class="variable">$asset_url</span>&quot;</span> &amp;&amp; <span class="built_in">chmod</span> +x panindex</span><br></pre></td></tr></table></figure><p>创建配置文件：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; config.json &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">&#123;</span></span><br><span class="line"><span class="string">  &quot;host&quot;: &quot;0.0.0.0&quot;,</span></span><br><span class="line"><span class="string">  &quot;port&quot;: 5238,</span></span><br><span class="line"><span class="string">  &quot;log_level&quot;: &quot;info&quot;,</span></span><br><span class="line"><span class="string">  &quot;data_path&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;cert_file&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;key_file&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;config_query&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;db_type&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;dsn&quot;: &quot;&quot;,</span></span><br><span class="line"><span class="string">  &quot;ui&quot;: &quot;&quot;</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><blockquote><p>数据库支持 sqlite (默认)、mysql、postgres ，如果需要接入 MySQL 或者 PostgreSQL ，请写成数据库链接的方式填入 dsn 。注意，如果是 Serv00 自带的 PostgreSQL ，请在数据库链接最末加上 <code>?sslmode=disable</code> 以禁用 SSL 连接。</p></blockquote><p>编写好配置文件后，测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./panindex -c=config.json</span><br></pre></td></tr></table></figure><p>使用 pm2 管理：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./panindex -- -c=config.json</span><br></pre></td></tr></table></figure><h2 id="Artalk"><a href="#Artalk" class="headerlink" title="Artalk"></a><a class="link"   href="https://github.com/ArtalkJS/Artalk" >Artalk<i class="fas fa-external-link-alt"></i></a></h2><p>似乎有几个群友在用这个，为方便查阅统一收录在本文，具体内容可以去群友的博客查看：<br><a href="https://blog.sinzmise.top/posts/13624/"><img   src="https://blog.sinzmise.top/img/avatar.png" ></a></p><blockquote><p>点击图片进入</p></blockquote><h1 id="收尾工作"><a href="#收尾工作" class="headerlink" title="收尾工作"></a>收尾工作</h1><p>听说 Serv00 会不定时重启机器，所以我们把 pm2 添加开机自启，可以保证每次重启都能由 pm2 调动 Alist 和 Cloudflared 。而且 Serv00 每三个月内必须要有一次登录面板或者 SSH 连接，不然会删号，也可以通过一个脚本解决问题，接下来我会详细说明。</p><h2 id="自动续期"><a href="#自动续期" class="headerlink" title="自动续期"></a>自动续期</h2><p>可以用青龙面板的自动任务定期登录SSH解决。在青龙面板中添加Linux依赖 <code>sshpass</code>，然后添加定时任务：名称随意，命令&#x2F;脚本 <code>sshpass -p &#39;密码&#39; ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 &quot;exit&quot;</code>，定时规则 <code>1 1 1 * *</code>。这样就会每个月自动ssh连接一次，实现续期。</p><blockquote><p>你还可以使用自身 SSH 自身的方式进行自动续期，操作如下：</p><p>进入一个自己喜欢的路径，使用 <code>cat</code> 命令新建 <code>auto-renew.sh</code> 脚本：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cat</span> &gt; auto-renew.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">while true; do</span></span><br><span class="line"><span class="string">  sshpass -p &#x27;密码&#x27; ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 &quot;exit&quot; &amp;</span></span><br><span class="line"><span class="string">  sleep 259200  #30天为259200秒</span></span><br><span class="line"><span class="string">done</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>记得把其中的密码、用户名、ssh的地址修改为你自己的。</p><p>给 <code>auto-renew.sh</code>添加可执行权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x auto-renew.sh</span><br></pre></td></tr></table></figure><p>使用pm2启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./auto-renew.sh</span><br></pre></td></tr></table></figure><p>这样就会每隔一个月自动执行一次SSH连接，自己SSH自己进行续期。</p></blockquote><hr><blockquote><p>上述自动续期脚本，在当时写的时候，犯了两个错误：</p><p>第一是时间写错了，30 天不是 259200 秒，是 2592000 秒，经群友发现后，就成了一个防伪标志，因为本文在网络上大量被复制粘贴却不标明出处，让太多人赚了流量却不知道真正码字的是谁。抄袭可耻，这样的抄袭行为只会让真正有能力创作的人失去继续创作的热情。</p><p>第二是不应该在脚本内写成 <code>while</code> 循环配合 <code>sleep</code> 定时，这样导致大量的 <code>sleep</code> 进程把进程数占满而出现异常。正确的做法应该是：<br>使用下述命令新建 <code>auto_renew.sh</code> 脚本：</p><figure class="highlight bash"><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="built_in">cat</span> &gt; auto_renew.sh &lt;&lt; <span class="string">EOF</span></span><br><span class="line"><span class="string">#!/bin/bash</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">sshpass -p &#x27;密码&#x27; ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@地址 &quot;exit&quot; &amp;</span></span><br><span class="line"><span class="string">EOF</span></span><br></pre></td></tr></table></figure><p>记得把其中的密码、用户名、ssh的地址修改为你自己的。</p><p>给 <code>auto_renew.sh</code>添加可执行权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x auto_renew.sh</span><br></pre></td></tr></table></figure><p>再去 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 Monthly，Form type 选择 Advanced。Command 写 <code>auto_renew.sh</code> 脚本文件的绝对路径，如 <code>/home/username/auto_renew.sh &gt;/dev/null 2&gt;&amp;1</code> 即可。</p></blockquote><h2 id="自动启动"><a href="#自动启动" class="headerlink" title="自动启动"></a>自动启动</h2><p>听说 Serv00 的主机会不定时重启，所以需要添加自启任务。</p><p>在 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 After reboot，即为重启后运行。Form type 选择 Advanced，Command 写：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/home/你的用户名/.npm-global/bin/pm2 resurrect &gt;/dev/null 2&gt;&amp;1 &amp;&amp; /home/你的用户名/.npm-global/bin/pm2 restart all &gt;/dev/null 2&gt;&amp;1</span><br></pre></td></tr></table></figure><blockquote><p>记得把你的用户名改为你的用户名</p></blockquote><p>添加完之后，在 SSH 窗口保存 pm2 的当前任务列表快照：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 save</span><br></pre></td></tr></table></figure><p>这样每次 serv00 不定时重启任务时，都能自动调用 pm2 读取保存的任务列表快照，恢复任务列表。<strong>如果在保存了任务列表快照后又改变了任务 pm2 的任务列表，需要重新执行 <code>pm2 save</code> 以更新任务列表。</strong></p><h3 id="检测启动情况"><a href="#检测启动情况" class="headerlink" title="检测启动情况"></a>检测启动情况</h3><p>由于自从 S2 开始的新的 Server 推出后屡屡出现使用 Cron Job 的 After reboot 无法恢复任务列表的情况，而过了好几个月也并没有人找到令人满意的解决方案，循环监控网页状态码并在出错时尝试拉起任务是可行的，只可惜我只看到了 Python 脚本，而此等简单的功能在我看来实在没必要使用 Python ，毕竟如果要在没有 Python 环境的情况下运行又成了一种麻烦，所以我决定通过 Shell 实现此功能。</p><figure class="highlight bash"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"></span><br><span class="line">USERNAME=<span class="string">&#x27;&#x27;</span></span><br><span class="line">PASSWORD=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SSH_ADDRESS=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SERVER_ADDRESS=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SMTP_SERVER_ADDRESS=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SMTP_SERVER_PORT=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SMTP_EMAIL=<span class="string">&#x27;&#x27;</span></span><br><span class="line">SMTP_PASSWORD=<span class="string">&#x27;&#x27;</span></span><br><span class="line">TARGET_EMAIL=<span class="string">&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="title">check_health</span></span>() &#123;</span><br><span class="line">    <span class="built_in">local</span> CODE=$(curl -o /dev/null -s -w <span class="string">&quot;%&#123;http_code&#125;\n&quot;</span> --connect-timeout 10 --max-time 30 <span class="variable">$&#123;SERVER_ADDRESS&#125;</span>)</span><br><span class="line">    <span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$CODE</span>&quot;</span> != <span class="string">&quot;200&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&#x27;Server is down!&#x27;</span></span><br><span class="line">        <span class="built_in">return</span> 1</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="built_in">return</span> 0</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="title">send_mail</span></span>() &#123;</span><br><span class="line">    <span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$&#123;SMTP_SERVER_ADDRESS&#125;</span>&quot;</span> ] &amp;&amp; [ -n <span class="string">&quot;<span class="variable">$&#123;SMTP_SERVER_PORT&#125;</span>&quot;</span> ] &amp;&amp; [ -n <span class="string">&quot;<span class="variable">$&#123;SMTP_EMAIL&#125;</span>&quot;</span> ] &amp;&amp; [ -n <span class="string">&quot;<span class="variable">$&#123;SMTP_PASSWORD&#125;</span>&quot;</span> ] &amp;&amp; [ -n <span class="string">&quot;<span class="variable">$&#123;TARGET_EMAIL&#125;</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">        curl --ssl-reqd \</span><br><span class="line">          --url <span class="string">&quot;smtps://<span class="variable">$&#123;SMTP_SERVER_ADDRESS&#125;</span>:<span class="variable">$&#123;SMTP_SERVER_PORT&#125;</span>&quot;</span> \</span><br><span class="line">          --user <span class="string">&quot;<span class="variable">$&#123;SMTP_EMAIL&#125;</span>:<span class="variable">$&#123;SMTP_PASSWORD&#125;</span>&quot;</span> \</span><br><span class="line">          --mail-from <span class="string">&quot;<span class="variable">$&#123;SMTP_EMAIL&#125;</span>&quot;</span> \</span><br><span class="line">          --mail-rcpt <span class="string">&quot;<span class="variable">$&#123;TARGET_EMAIL&#125;</span>&quot;</span> \</span><br><span class="line">          -T - &lt;&lt;<span class="string">EOF</span></span><br><span class="line"><span class="string">From: $&#123;SMTP_EMAIL&#125;</span></span><br><span class="line"><span class="string">To: $&#123;TARGET_EMAIL&#125;</span></span><br><span class="line"><span class="string">Subject: $&#123;EMAIL_TITLE&#125;</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">$&#123;EMAIL_DATA&#125;</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">echo</span> <span class="string">&#x27;Cancel send email due to missing or empty configuration.&#x27;</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="title">restart_server</span></span>() &#123;</span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&#x27;Trying to restart server...&#x27;</span></span><br><span class="line">    <span class="built_in">local</span> REMOTE_COMMAND1=<span class="string">&quot;/home/<span class="variable">$&#123;USERNAME&#125;</span>/.npm-global/bin/pm2 resurrect &amp;&amp; exit&quot;</span> \</span><br><span class="line">    &amp;&amp; sshpass -p <span class="string">&quot;<span class="variable">$&#123;PASSWORD&#125;</span>&quot;</span> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt <span class="variable">$&#123;USERNAME&#125;</span>@<span class="variable">$&#123;SSH_ADDRESS&#125;</span> <span class="string">&quot;<span class="subst">$(eval echo $REMOTE_COMMAND1)</span>&quot;</span> \</span><br><span class="line">    &amp;&amp; <span class="built_in">local</span> REMOTE_COMMAND2=<span class="string">&quot;/home/<span class="variable">$&#123;USERNAME&#125;</span>/.npm-global/bin/pm2 restart all &amp;&amp; exit&quot;</span> \</span><br><span class="line">    &amp;&amp; sshpass -p <span class="string">&quot;<span class="variable">$&#123;PASSWORD&#125;</span>&quot;</span> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt <span class="variable">$&#123;USERNAME&#125;</span>@<span class="variable">$&#123;SSH_ADDRESS&#125;</span> <span class="string">&quot;<span class="subst">$(eval echo $REMOTE_COMMAND2)</span>&quot;</span> </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">check_health</span><br><span class="line">EXIT_CODE=$?</span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 1 ]; <span class="keyword">then</span></span><br><span class="line">    EMAIL_TITLE=<span class="string">&#x27;Server is down!&#x27;</span></span><br><span class="line">    EMAIL_DATA=<span class="string">&quot;<span class="variable">$&#123;SERVER_ADDRESS&#125;</span> is down, trying to restart server...&quot;</span></span><br><span class="line">    send_mail</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 1 ]; <span class="keyword">do</span></span><br><span class="line">        restart_server</span><br><span class="line">        <span class="built_in">sleep</span> 120</span><br><span class="line">        check_health</span><br><span class="line">        EXIT_CODE=$?</span><br><span class="line">    <span class="keyword">done</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 0 ]; <span class="keyword">then</span></span><br><span class="line">        EMAIL_TITLE=<span class="string">&#x27;Server is up!&#x27;</span></span><br><span class="line">        EMAIL_DATA=<span class="string">&quot;<span class="variable">$&#123;SERVER_ADDRESS&#125;</span> has been restarted successfully.&quot;</span></span><br><span class="line">        send_mail</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure><p>在脚本开头处填好所有的环境变量即可使用：</p><table><thead><tr><th>变量名</th><th>是否必须</th><th>备注</th></tr></thead><tbody><tr><td>USERNAME</td><td>是</td><td>Serv00 的账户用户名</td></tr><tr><td>PASSWORD</td><td>是</td><td>Serv00 的账户密码</td></tr><tr><td>SSH_ADDRESS</td><td>是</td><td>Serv00 的账户 SSH 连接的地址（如<code>s4.serv00.com</code>）</td></tr><tr><td>SERVER_ADDRESS</td><td>是</td><td>需要检测的 Web 服务地址（如<code>https://xxx.username.serv00.net</code>）</td></tr><tr><td>SMTP_SERVER_ADDRESS</td><td>否</td><td>发送通知邮件的 SMTP 服务器地址（如<code>mail4.serv00.com</code>、<code>smtp.163.com</code>）</td></tr><tr><td>SMTP_SERVER_PORT</td><td>否</td><td>发送通知邮件的 SMTP 服务器端口，必须使用 SSL（如<code>465</code>、<code>995</code>）</td></tr><tr><td>SMTP_EMAIL</td><td>否</td><td>用于发送通知邮件的邮箱</td></tr><tr><td>SMTP_PASSWORD</td><td>否</td><td>用于发送通知邮件的邮箱的密码或秘钥</td></tr><tr><td>TARGET_EMAIL</td><td>否</td><td>用于接收通知邮件的邮箱</td></tr></tbody></table><p>在你的用户目录下任意路径新建一个名为 <code>check_health.sh</code> 的文件，把上述脚本填好环境变量后粘贴进去，并在 Console 中使用 <code>chmod +x check_health.sh</code> 命令为脚本添加可执行权限。</p><p>再去 Panel 中找到 Cron jobs 选项卡，使用 Add cron job 功能添加任务，Specify time 选择 Special manually，Form type 选择 Advanced， 然后把下方的 Minute、Hour、Day of month、Month、Day of week 都改成 Every ，然后在 Minute 后填入 5（即每 5 分钟一次），其他的都填 1。Command 写 <code>check_health.sh</code> 脚本文件的绝对路径，如 <code>/home/username/check_health.sh &gt;/dev/null 2&gt;&amp;1</code> 即可。你也可以根据你的需求自由修改定时。</p><p>还有一个加入了循环的版本，有需求的可以移植到其他服务使用：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># 各功能函数与前文一致，主函数加入循环，只展示主函数部分</span></span><br><span class="line"><span class="keyword">while</span> <span class="literal">true</span>; <span class="keyword">do</span></span><br><span class="line">    check_health</span><br><span class="line">    EXIT_CODE=$?</span><br><span class="line">    <span class="keyword">if</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 1 ]; <span class="keyword">then</span></span><br><span class="line">        EMAIL_TITLE=<span class="string">&#x27;Server is down!&#x27;</span></span><br><span class="line">        EMAIL_DATA=<span class="string">&quot;<span class="variable">$&#123;SERVER_ADDRESS&#125;</span> is down, trying to restart server...&quot;</span></span><br><span class="line">        send_mail</span><br><span class="line"></span><br><span class="line">        <span class="keyword">while</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 1 ]; <span class="keyword">do</span></span><br><span class="line">            restart_server</span><br><span class="line">            <span class="built_in">sleep</span> 120</span><br><span class="line">            check_health</span><br><span class="line">            EXIT_CODE=$?</span><br><span class="line">        <span class="keyword">done</span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> [ <span class="variable">$&#123;EXIT_CODE&#125;</span> -eq 0 ]; <span class="keyword">then</span></span><br><span class="line">            EMAIL_TITLE=<span class="string">&#x27;Server is up!&#x27;</span></span><br><span class="line">            EMAIL_DATA=<span class="string">&quot;<span class="variable">$&#123;SERVER_ADDRESS&#125;</span> has been restarted successfully.&quot;</span></span><br><span class="line">            send_mail</span><br><span class="line">        <span class="keyword">fi</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="built_in">sleep</span> 300</span><br><span class="line"><span class="keyword">done</span></span><br></pre></td></tr></table></figure><h2 id="常用指令"><a href="#常用指令" class="headerlink" title="常用指令"></a>常用指令</h2><figure class="highlight bash"><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="comment"># Enables the ability to run your own software</span></span><br><span class="line">devil binexec on</span><br><span class="line"><span class="comment"># Set Devil and shell language to English</span></span><br><span class="line">devil lang <span class="built_in">set</span> english</span><br><span class="line"><span class="comment"># Get a list of all available IP addresses owned by Serv00.com</span></span><br><span class="line">devil vhost list public</span><br><span class="line"><span class="comment"># Display the list of reserved ports</span></span><br><span class="line">devil port list</span><br><span class="line"><span class="comment"># 伪重置（删除用户所有文件）</span></span><br><span class="line"><span class="built_in">chmod</span> -R 755 ~/*</span><br><span class="line"><span class="built_in">chmod</span> -R 755 ~/.*</span><br><span class="line"><span class="built_in">rm</span> -rf ~/*</span><br><span class="line"><span class="built_in">rm</span> -rf ~/.*</span><br><span class="line"><span class="comment"># 关闭用户所有进程</span></span><br><span class="line">killall -u $(<span class="built_in">whoami</span>)</span><br></pre></td></tr></table></figure><p><strong>欢迎进群讨论，一起学习探讨：<a class="link"   href="https://jq.qq.com/?_wv=1027&k=qssjFvAs" >受虐滑稽<i class="fas fa-external-link-alt"></i></a></strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a class=&quot;link&quot;   href=&quot;https://www.serv00.com/&quot; &gt;这个平台&lt;i class=&quot;fas fa-external-link-alt&quot;&gt;&lt;/i&gt;&lt;/a&gt;是个 Virtual Host ，没有 Root ，还是 FreeBSD 的系</summary>
      
    
    
    
    
    <category term="serv00" scheme="https://saika.us.kg/tags/serv00/"/>
    
  </entry>
  
  <entry>
    <title>CodeSandbox-Blog备份</title>
    <link href="https://saika.us.kg/2024/01/03/codesandbox-backup/"/>
    <id>https://saika.us.kg/2024/01/03/codesandbox-backup/</id>
    <published>2024-01-03T23:39:10.537Z</published>
    <updated>2024-01-29T18:37:30.509Z</updated>
    
    <content type="html"><![CDATA[<h1 id="在CodeSandBox上部署docker并使用Cloudflare-Tunnel打通自己的域名——以青龙面板为例"><a href="#在CodeSandBox上部署docker并使用Cloudflare-Tunnel打通自己的域名——以青龙面板为例" class="headerlink" title="在CodeSandBox上部署docker并使用Cloudflare Tunnel打通自己的域名——以青龙面板为例"></a>在<a class="link"   href="https://codesandbox.io/" >CodeSandBox<i class="fas fa-external-link-alt"></i></a>上部署docker并使用Cloudflare Tunnel打通自己的域名——以<a class="link"   href="https://github.com/whyour/qinglong" >青龙面板<i class="fas fa-external-link-alt"></i></a>为例</h1><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>长期以来白嫖<a class="link"   href="https://replit.com/~" >Replit<i class="fas fa-external-link-alt"></i></a>已经成为习惯，突然Replit的政策改变让人猝不及防。</p><p>虽然此前就已经知道了CodeSandBox这个平台，但苦于其公开性质，以及不可更换的会直接暴露公开容器的域名分配，一直以来对CodeSandBox的使用也是离不开Replit的——在CodeSandBox部署好服务之后，在Replit部署NGINX服务反代CodeSandBox提供的域名，一定程度上避免CodeSandBox容器的暴露。</p><p>那么Replit即将无法白嫖的现状下，怎么快乐的使用CodeSandBox呢？第一时间我想到的是Cloudflare的Workers。但是Workers对于免费用户来讲额度太少，就此浪费掉未免也太可惜，那怎么办呢？</p><p>虽说家中的软路由一直以来都使用Cloudflared打通Tunnel进行穿透，但是还得是fscarman2的各种PaaS平台搭建代理的仓库给了我灵感，可以在PaaS平台使用Cloudflared，像家里的软路由内网穿透一样，使用自己的域名。</p><p>经过我反复尝试，总算找到了在CodeSandBox上能够比较稳定搭建各种服务的办法。如果你会操作，也可以自行构筑各种镜像进行部署，只需要在 <code>docker-compose.yaml</code>文件末添加Cloudflared部分即可。</p><p>这里就以青龙面板为例，讲述一下CodeSandBox的白嫖方法。</p><h2 id="部署过程"><a href="#部署过程" class="headerlink" title="部署过程"></a>部署过程</h2><h3 id="注册CodeSandBox"><a href="#注册CodeSandBox" class="headerlink" title="注册CodeSandBox"></a>注册CodeSandBox</h3><p>CodeSandBox支持Google、Github等多种方式登录，任意方式注册登录即可，这里不再赘述。</p><h3 id="编写docker-compose文件"><a href="#编写docker-compose文件" class="headerlink" title="编写docker-compose文件"></a>编写docker-compose文件</h3><p>以青龙面板为例，在<a class="link"   href="https://github.com/whyour/qinglong/blob/develop/docker/docker-compose.yml" >这里<i class="fas fa-external-link-alt"></i></a>可以找到其docker-compose文件：</p><figure class="highlight yaml"><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="attr">version:</span> <span class="string">&#x27;2&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">web:</span></span><br><span class="line">    <span class="comment"># alpine 基础镜像版本</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">whyour/qinglong:latest</span></span><br><span class="line">    <span class="comment"># debian-slim 基础镜像版本</span></span><br><span class="line">    <span class="comment"># image: whyour/qinglong:debian  </span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./data:/ql/data</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;0.0.0.0:5700:5700&quot;</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="comment"># 部署路径非必须，以斜杠开头和结尾，比如 /test/</span></span><br><span class="line">      <span class="attr">QlBaseUrl:</span> <span class="string">&#x27;/&#x27;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br></pre></td></tr></table></figure><p>稍作修改：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;2&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">qinglong:</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">whyour/qinglong:latest</span></span><br><span class="line">      <span class="attr">volumes:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/project/sandbox/ql/data:/ql/data</span></span><br><span class="line">      <span class="attr">ports:</span></span><br><span class="line">       <span class="bullet">-</span> <span class="string">&quot;0.0.0.0:5700:5700&quot;</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">        <span class="attr">QlBaseUrl:</span> <span class="string">&#x27;/&#x27;</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure><p>主要修改了其 <code>volumes</code>的部分，因为CodeSandBox的文件目录在 <code>/project/sandbox/</code>下，所以我在此路径下创建 <code>./ql/data</code>来存储青龙面板的数据，实现数据持久化。</p><p>而Cloudflared部分，我是这样写的：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">cloudflared:</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">      <span class="attr">network_mode:</span> <span class="string">host</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">      <span class="attr">command:</span> <span class="string">tunnel</span> <span class="string">--edge-ip-version</span> <span class="string">auto</span> <span class="string">--protocol</span> <span class="string">quic</span> <span class="string">--heartbeat-interval</span> <span class="string">10s</span> <span class="string">run</span> <span class="string">--token</span> [<span class="string">ARGO_TOKEN</span>]</span><br><span class="line">      <span class="attr">container_name:</span> <span class="string">cloudflared</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">cloudflare/cloudflared:latest</span></span><br></pre></td></tr></table></figure><p>其中的 <code>[ARGO_TOKEN]</code>要替换成自己的token，后文将附上详细教程。</p><p>所以整个 <code>docker-compose.yaml</code>的内容如下：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;2&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">qinglong:</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">whyour/qinglong:latest</span></span><br><span class="line">      <span class="attr">volumes:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/project/sandbox/ql/data:/ql/data</span></span><br><span class="line">      <span class="attr">ports:</span></span><br><span class="line">       <span class="bullet">-</span> <span class="string">&quot;0.0.0.0:5700:5700&quot;</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">        <span class="attr">QlBaseUrl:</span> <span class="string">&#x27;/&#x27;</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">cloudflared:</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">      <span class="attr">network_mode:</span> <span class="string">host</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">      <span class="attr">command:</span> <span class="string">tunnel</span> <span class="string">--edge-ip-version</span> <span class="string">auto</span> <span class="string">--protocol</span> <span class="string">quic</span> <span class="string">--heartbeat-interval</span> <span class="string">10s</span> <span class="string">run</span> <span class="string">--token</span> [<span class="string">ARGO_TOKEN</span>]</span><br><span class="line">      <span class="attr">container_name:</span> <span class="string">cloudflared</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">cloudflare/cloudflared:latest</span></span><br></pre></td></tr></table></figure><h3 id="获取-ARGO-TOKEN"><a href="#获取-ARGO-TOKEN" class="headerlink" title="获取[ARGO_TOKEN]"></a>获取[ARGO_TOKEN]</h3><p>详见<a class="link"   href="https://imnks.com/5984.html" >群晖套件：Cloudflare Tunnel 内网穿透中文教程 支持DSM6、7<i class="fas fa-external-link-alt"></i></a>。</p><p>此处需要的[ARGO_TOKEN]就是ey开头的那一串。</p><p>然后在Cloudflare中设置好相应的域名和本地端口对应，一般协议用http即可。像此处，按照我的 <code>docker-compose.yaml</code>来看，我应该映射5700端口，所以我填的是 <code>0.0.0.0:5700</code>。</p><h3 id="创建Devbox"><a href="#创建Devbox" class="headerlink" title="创建Devbox"></a>创建Devbox</h3><p>在CodeSandBox中进入dashboard，然后点击”Create a Devbox”</p><p>选择docker</p><p>进入Devbox之后，在左侧的文件管理EXPLORER中可以看到有 <code>.codesandbox</code>和 <code>.devcontainer</code>两个文件夹</p><p>先修改 <code>.codesandbox</code>中的 <code>tasks.json</code>文件，在 <code>setupTasks</code>中添加部署命令：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;setupTasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Deploy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cd /project/sandbox/.devcontainer/ &amp;&amp; docker compose up -d&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br></pre></td></tr></table></figure><p>然后在 <code>.devcontainer</code>文件夹下新建 <code>docker-compose.yaml</code>文件，把上述的 <code>docker-compose.yaml</code>内容全部复制进去。</p><p>最后点击左上角的方框打开菜单，选择”Restart Devbox”，等待容器重启后，你就可以看到青龙运行好了。再试一下刚刚在Cloudflare中映射的域名，也可以用了。</p><h3 id="一些问题"><a href="#一些问题" class="headerlink" title="一些问题"></a>一些问题</h3><p>不知道为什么，当我使用http2模式运行Cloudflared时，隧道断连后并不会重新连接，auto模式在quic模式断连后自动切换http2模式，再断连又会出现http2模式一样的问题。所以我只能指定其使用quic模式进行运行。原因未知，希望有人能找到原因。</p><p>然后，必须保持容器活跃，Cloudflared掉线后才会重连，为保证其活跃，得使用网站监控器监控CodeSandBox自带的映射域名，形同 <code>https://t6a4m-8080.csb.app/</code>的那个。至于网站监控器，<a class="link"   href="https://github.com/louislam/uptime-kuma" >Uptime-Kuma<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://cron-job.org/en/" >cron-job<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://uptimerobot.com/" >UptimeRobot<i class="fas fa-external-link-alt"></i></a>之类的都行。</p><p>注意，有些PaaS平台（比如Glitch）已经禁止了自身服务器ip、公用网站监控器ip进行访问，所以上述的cron-job和UptimeRobot是否能行请自行测试，更加建议自己搭建Uptime-Kuma。</p><h2 id="后话"><a href="#后话" class="headerlink" title="后话"></a>后话</h2><p>在CodeSandBox上我已经尝试使用此方法部署了<a class="link"   href="https://github.com/alist-org/alist" >Alist<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://github.com/whyour/qinglong" >qinglong<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://www.halo.run/" >Halo<i class="fas fa-external-link-alt"></i></a>（本站就是）、<a class="link"   href="https://github.com/pandora-next/deploy" >Pandora_Next<i class="fas fa-external-link-alt"></i></a>以及自己构筑的个别镜像等多个应用，尽数成功。可玩性还是很高的。</p><p>但是不得不提醒，这种方法只是避免了从域名上找到自己的容器而已，并不能确保自己的数据不会泄露，毕竟使用的是公共容器，请注意信息安全，不要存储私密信息，否则后果自负。</p><p>另，宣传一下QQ群：<a class="link"   href="https://jq.qq.com/?_wv=1027&k=qssjFvAs" >受虐滑稽<i class="fas fa-external-link-alt"></i></a></p><hr><h1 id="一些可以在CodeSandBox上配合Cloudflared使用的docker-compose"><a href="#一些可以在CodeSandBox上配合Cloudflared使用的docker-compose" class="headerlink" title="一些可以在CodeSandBox上配合Cloudflared使用的docker-compose"></a>一些可以在CodeSandBox上配合Cloudflared使用的docker-compose</h1><blockquote><p><strong>以下任何一个配置，如果不需要Cloudflared打隧道，就把cloudflared部分删掉。</strong></p></blockquote><blockquote><p><strong>另外，除了Cloudflared打隧道，现在有新的使用自己的域名的方法，详见仓库：<a class="link"   href="https://github.com/k0baya/reserve-vercel" >k0baya&#x2F;reserve-vercel<i class="fas fa-external-link-alt"></i></a>。</strong></p><p>现在已经将Cloudflared部分从各配置中删除，如有需要请自行添加：</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></pre></td><td class="code"><pre><span class="line">version: &#x27;3.3&#x27;</span><br><span class="line">services:</span><br><span class="line">   cloudflared:</span><br><span class="line">     restart: always</span><br><span class="line">     network_mode: host</span><br><span class="line">     environment:</span><br><span class="line">         - TZ=Asia/Shanghai</span><br><span class="line">     command: tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]</span><br><span class="line">     container_name: cloudflared</span><br><span class="line">     image: cloudflare/cloudflared:latest</span><br></pre></td></tr></table></figure></blockquote><h2 id="Qinglong"><a href="#Qinglong" class="headerlink" title="Qinglong"></a><a class="link"   href="https://github.com/whyour/qinglong" >Qinglong<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射5700端口</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;2&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">qinglong:</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">whyour/qinglong:latest</span></span><br><span class="line">      <span class="attr">volumes:</span></span><br><span class="line">        <span class="bullet">-</span> <span class="string">/project/sandbox/ql/data:/ql/data</span></span><br><span class="line">      <span class="attr">ports:</span></span><br><span class="line">       <span class="bullet">-</span> <span class="string">&quot;0.0.0.0:5700:5700&quot;</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">        <span class="attr">QlBaseUrl:</span> <span class="string">&#x27;/&#x27;</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure><h2 id="Alist"><a href="#Alist" class="headerlink" title="Alist"></a><a class="link"   href="https://github.com/alist-org/alist" >Alist<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射5244端口</p><p>如果需要使用Aria2实现离线下载，把第14行的 <code>image</code>指定的镜像更改为 <code>xhofe/alist-aria2:main</code>即可</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">alist:</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/alist:/opt/alist/data&#x27;</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;5244:5244&#x27;</span></span><br><span class="line">        <span class="attr">environment:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">PUID=0</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">PGID=0</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">UMASK=022</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">alist</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">&#x27;xhofe/alist:latest&#x27;</span></span><br></pre></td></tr></table></figure><h2 id="Halo"><a href="#Halo" class="headerlink" title="Halo"></a><a class="link"   href="https://www.halo.run/" >Halo<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射8090端口</p></blockquote><figure class="highlight yaml"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&quot;3&quot;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">halo:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">halohub/halo:2.11</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">halo</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">on-failure:3</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="attr">halodb:</span></span><br><span class="line">        <span class="attr">condition:</span> <span class="string">service_healthy</span></span><br><span class="line">    <span class="attr">networks:</span></span><br><span class="line">      <span class="attr">halo_network:</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/data/halo2:/root/.halo2</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;8090:8090&quot;</span></span><br><span class="line">    <span class="attr">healthcheck:</span></span><br><span class="line">      <span class="attr">test:</span> [<span class="string">&quot;CMD&quot;</span>, <span class="string">&quot;curl&quot;</span>, <span class="string">&quot;-f&quot;</span>, <span class="string">&quot;http://localhost:8090/actuator/health/readiness&quot;</span>]</span><br><span class="line">      <span class="attr">interval:</span> <span class="string">30s</span></span><br><span class="line">      <span class="attr">timeout:</span> <span class="string">5s</span></span><br><span class="line">      <span class="attr">retries:</span> <span class="number">5</span></span><br><span class="line">      <span class="attr">start_period:</span> <span class="string">30s</span>      </span><br><span class="line">    <span class="attr">command:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--spring.r2dbc.username=halo</span></span><br><span class="line">      <span class="comment"># PostgreSQL 的密码，请保证与下方 POSTGRES_PASSWORD 的变量值一致。</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--spring.r2dbc.password=12345678</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--spring.sql.init.platform=postgresql</span></span><br><span class="line">      <span class="comment"># 外部访问地址，请根据实际需要修改</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">--halo.external-url=http://localhost:8090/</span></span><br><span class="line">  </span><br><span class="line">  <span class="attr">halodb:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">postgres:15.4</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">halodb</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">on-failure:3</span></span><br><span class="line">    <span class="attr">networks:</span></span><br><span class="line">      <span class="attr">halo_network:</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/data/db:/var/lib/postgresql/data</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;5432:5432&quot;</span></span><br><span class="line">    <span class="attr">healthcheck:</span></span><br><span class="line">      <span class="attr">test:</span> [ <span class="string">&quot;CMD&quot;</span>, <span class="string">&quot;pg_isready&quot;</span> ]</span><br><span class="line">      <span class="attr">interval:</span> <span class="string">10s</span></span><br><span class="line">      <span class="attr">timeout:</span> <span class="string">5s</span></span><br><span class="line">      <span class="attr">retries:</span> <span class="number">5</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">POSTGRES_PASSWORD=12345678</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">POSTGRES_USER=halo</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">POSTGRES_DB=halo</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">PGUSER=halo</span></span><br><span class="line"></span><br><span class="line"><span class="attr">networks:</span></span><br><span class="line">  <span class="attr">halo_network:</span></span><br></pre></td></tr></table></figure><h2 id="Microsoft-365-E5-RenewX"><a href="#Microsoft-365-E5-RenewX" class="headerlink" title="Microsoft_365_E5_RenewX"></a><a class="link"   href="https://hub.docker.com/r/gladtbam/ms365_e5_renewx" >Microsoft_365_E5_RenewX<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口1066</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.5&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">renewx:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">gladtbam/ms365_e5_renewx:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">renewx</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/E5RenewX/Deploy:/renewx/Deploy</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/E5RenewX/Appdata:/renewx/appdata</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;1066:1066&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br></pre></td></tr></table></figure><blockquote><p>需要新建 <code>Config.xml</code>文件放在 <code>Deploy</code>内，默认的 <code>Config.xml</code>文件内容如下：</p></blockquote><figure class="highlight txt"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br></pre></td><td class="code"><pre><span class="line">﻿&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;</span><br><span class="line">&lt;Configuration&gt;</span><br><span class="line">&lt;!--站点服务器基本配置--&gt;</span><br><span class="line">&lt;Serivce&gt;</span><br><span class="line">&lt;!--服务访问端口--&gt;</span><br><span class="line">&lt;Port&gt;1066&lt;/Port&gt;</span><br><span class="line">&lt;!--管理员密码(管理员登录路由/Admin/Login) 重要：首次启动前必须更改--&gt;</span><br><span class="line">&lt;LoginPassword&gt;12345678&lt;/LoginPassword&gt;</span><br><span class="line">&lt;!--是否启用内核多线程支持--&gt;</span><br><span class="line">&lt;CoreMultiThread&gt;true&lt;/CoreMultiThread&gt;</span><br><span class="line">&lt;!--网站备案（选填）--&gt;</span><br><span class="line">&lt;ICP&gt;</span><br><span class="line">&lt;!--备案显示文本--&gt;</span><br><span class="line">&lt;Text&gt;&lt;/Text&gt;</span><br><span class="line">&lt;!--备案管理查询机构跳转链接--&gt;</span><br><span class="line">&lt;Link&gt;https://beian.miit.gov.cn&lt;/Link&gt;</span><br><span class="line">&lt;/ICP&gt;</span><br><span class="line">&lt;!--Bootstrap CDN 若要更改请务必使用bootstrap@5.1.3版本（选填）--&gt;</span><br><span class="line">&lt;CDN&gt;</span><br><span class="line">&lt;!--Bootstrap CSS文件CDN bootstrap.min.css--&gt;</span><br><span class="line">&lt;CSS&gt;https://cdn.staticfile.org/bootstrap/5.1.3/css/bootstrap.min.css&lt;/CSS&gt;</span><br><span class="line">&lt;!--Bootstrap JS文件CDN bootstrap.bundle.min.js--&gt;</span><br><span class="line">&lt;JS&gt;https://cdn.staticfile.org/bootstrap/5.1.3/js/bootstrap.bundle.min.js&lt;/JS&gt;</span><br><span class="line">&lt;/CDN&gt;</span><br><span class="line">&lt;/Serivce&gt;</span><br><span class="line">&lt;!--站点Kestrel服务器HTTPS配置 （只支持IIS证书类型 即PFX格式的证书）--&gt;</span><br><span class="line">&lt;HTTPS&gt;</span><br><span class="line">&lt;!--Kestrel是否启用HTTPS(SSL加密传输)--&gt;</span><br><span class="line">&lt;Enable&gt;false&lt;/Enable&gt;</span><br><span class="line">&lt;!--SSL证书文件名 (需要将PFX格式的SSL证书放置于该配置文件的同级目录Deploy文件夹下) 如e5.sundayrx.net.pfx--&gt;</span><br><span class="line">&lt;!--不填则默认使用Dev localhost 本地证书--&gt;</span><br><span class="line">&lt;Certificate&gt;&lt;/Certificate&gt;</span><br><span class="line">&lt;!--SSL证书密钥(PFX证书的访问密钥)--&gt;</span><br><span class="line">&lt;Password&gt;&lt;/Password&gt;</span><br><span class="line">&lt;/HTTPS&gt;</span><br><span class="line">&lt;!--共享站点配置,不共享可无视以下内容 (若要共享站点 请自备以下所需的配置信息 且配置中HTTPS必须启用)--&gt;</span><br><span class="line">&lt;ShareSite&gt;</span><br><span class="line">&lt;!--是否启用站点共享--&gt;</span><br><span class="line">&lt;Enable&gt;false&lt;/Enable&gt;</span><br><span class="line">&lt;!--SMTP邮件发送支持--&gt;</span><br><span class="line">&lt;SMTP&gt;</span><br><span class="line">&lt;!--发件邮箱--&gt;</span><br><span class="line">&lt;Email&gt;&lt;/Email&gt;</span><br><span class="line">&lt;!--邮箱密钥--&gt;</span><br><span class="line">&lt;Password&gt;&lt;/Password&gt;</span><br><span class="line">&lt;!--SMTP服务器地址--&gt;</span><br><span class="line">&lt;Host&gt;&lt;/Host&gt;</span><br><span class="line">&lt;!--SMTP服务器端口--&gt;</span><br><span class="line">&lt;Port&gt;587&lt;/Port&gt;</span><br><span class="line">&lt;!--SMTP服务器是否使用SSL传输--&gt;</span><br><span class="line">&lt;EnableSSL&gt;true&lt;/EnableSSL&gt;</span><br><span class="line">&lt;/SMTP&gt;</span><br><span class="line">&lt;!--第三方OAuth登录支持(至少启用以下一种OAuth否则其他用户无法注册)--&gt;</span><br><span class="line">&lt;OAuth&gt;</span><br><span class="line">&lt;!--微软登录授权--&gt;</span><br><span class="line">&lt;Microsoft&gt;</span><br><span class="line">&lt;!--是否启用该OAuth--&gt;</span><br><span class="line">&lt;Enable&gt;true&lt;/Enable&gt;</span><br><span class="line">&lt;!--应用程序Id--&gt;</span><br><span class="line">&lt;ClientId&gt;&lt;/ClientId&gt;</span><br><span class="line">&lt;!--应用程序访问机密--&gt;</span><br><span class="line">&lt;ClientSecret&gt;&lt;/ClientSecret&gt;</span><br><span class="line">&lt;/Microsoft&gt;</span><br><span class="line">&lt;!--GitHub登录授权--&gt;</span><br><span class="line">&lt;Github&gt;</span><br><span class="line">&lt;!--是否启用该OAuth--&gt;</span><br><span class="line">&lt;Enable&gt;true&lt;/Enable&gt;</span><br><span class="line">&lt;!--应用程序Id--&gt;</span><br><span class="line">&lt;ClientId&gt;&lt;/ClientId&gt;</span><br><span class="line">&lt;!--应用程序访问机密--&gt;</span><br><span class="line">&lt;ClientSecret&gt;&lt;/ClientSecret&gt;</span><br><span class="line">&lt;/Github&gt;</span><br><span class="line">&lt;/OAuth&gt;</span><br><span class="line">&lt;!--站点系统设置--&gt;</span><br><span class="line">&lt;System&gt;</span><br><span class="line">&lt;!--站点启动后默认是否允许用户注册 建议为false--&gt;</span><br><span class="line">&lt;AllowRegister&gt;false&lt;/AllowRegister&gt;</span><br><span class="line">&lt;!--站点启动后默认公告（换行符请使用 </span><br><span class="line"> 进行换行）--&gt;</span><br><span class="line">&lt;Notice&gt;&lt;/Notice&gt;</span><br><span class="line">&lt;!--站点运营者--&gt;</span><br><span class="line">&lt;Master&gt;&lt;/Master&gt;</span><br><span class="line">&lt;!--站点运营者推广链接--&gt;</span><br><span class="line">&lt;MasterLink&gt;&lt;/MasterLink&gt;</span><br><span class="line">&lt;!--站点新用户默认配额数--&gt;</span><br><span class="line">&lt;DefaultQuota&gt;1&lt;/DefaultQuota&gt;</span><br><span class="line">&lt;!--站点自动特赦时间间隔 （单位：天 至少30天）--&gt;</span><br><span class="line">&lt;AutoSpecialPardonInterval&gt;30&lt;/AutoSpecialPardonInterval&gt;</span><br><span class="line">&lt;/System&gt;</span><br><span class="line">&lt;/ShareSite&gt;</span><br><span class="line">&lt;/Configuration&gt;</span><br></pre></td></tr></table></figure><h2 id="Pandora-Next"><a href="#Pandora-Next" class="headerlink" title="Pandora-Next"></a><a class="link"   href="https://github.com/pandora-next/deploy" >Pandora-Next<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8181</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">pandora-next:</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">pengzhile/pandora-next</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">PandoraNext</span></span><br><span class="line">        <span class="attr">network_mode:</span> <span class="string">bridge</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;8181:8181&quot;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/pandora-next/data:/data</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/pandora-next/sessions:/root/.cache/PandoraNext</span></span><br></pre></td></tr></table></figure><h2 id="Uptime-Kuma"><a href="#Uptime-Kuma" class="headerlink" title="Uptime-Kuma"></a><a class="link"   href="https://github.com/louislam/uptime-kuma" >Uptime-Kuma<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口3001</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.8&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">uptime-kuma:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">louislam/uptime-kuma:1</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">uptime-kuma</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/uptimekuma:/app/data</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;3001:3001&quot;</span>  <span class="comment"># &lt;Host Port&gt;:&lt;Container Port&gt;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure><h2 id="KodBox"><a href="#KodBox" class="headerlink" title="KodBox"></a><a class="link"   href="https://kodcloud.com/" >KodBox<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8080</p></blockquote><figure class="highlight yaml"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.5&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mariadb</span></span><br><span class="line">    <span class="attr">command:</span> <span class="string">--transaction-isolation=READ-COMMITTED</span> <span class="string">--binlog-format=ROW</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;/project/sandbox/db:/var/lib/mysql&quot;</span>   </span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;TZ=Asia/Shanghai&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_ROOT_PASSWORD=jiehdo!25165n&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_DATABASE=kodbox&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_USER=bodbox&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_PASSWORD=jiehdo!25165n&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">  </span><br><span class="line">  <span class="attr">app:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">kodcloud/kodbox</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">8080</span><span class="string">:80</span>                </span><br><span class="line">    <span class="attr">links:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">db</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">redis</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;/project/sandbox/site:/var/www/html&quot;</span>  </span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">redis:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">redis:alpine</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;TZ=Asia/Shanghai&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure><blockquote><p>如果照搬上面的设置，初始化时数据库和redis的设置应该如图填写</p><p>数据库类型：MySQL<br>服务器：db<br>用户名：root<br>密码：jiehdo!25165n<br>数据库：kodbox<br>存储引擎：InnoDB<br>系统缓存类型：Redis<br>服务器：redis</p></blockquote><h2 id="Zfile"><a href="#Zfile" class="headerlink" title="Zfile"></a><a class="link"   href="https://zfile.vip/" >Zfile<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8080</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">zfile:</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">zfile</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;8080:8080&#x27;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/zfile/db:/root/.zfile-v4/db&#x27;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/zfile/logs:/root/.zfile-v4/logs&#x27;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/zfile/file:/data/file&#x27;</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">zhaojun1998/zfile</span></span><br></pre></td></tr></table></figure><h2 id="PanIndex"><a href="#PanIndex" class="headerlink" title="PanIndex"></a><a class="link"   href="https://github.com/px-org/PanIndex" >PanIndex<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口5238</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">panindex:</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">panindex</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;5238:5238&#x27;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/PanIndex/data:/app/data&#x27;</span></span><br><span class="line">        <span class="attr">environment:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;PORT=5238&quot;</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">iicm/pan-index:latest</span></span><br></pre></td></tr></table></figure><h2 id="ShareList"><a href="#ShareList" class="headerlink" title="ShareList"></a><a class="link"   href="https://github.com/reruin/sharelist" >ShareList<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口33001</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">sharelist:</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">sharelist</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;33001:33001&#x27;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/sharelist:/sharelist/cache&#x27;</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">reruin/sharelist:next</span></span><br></pre></td></tr></table></figure><h2 id="Cloudreve"><a href="#Cloudreve" class="headerlink" title="Cloudreve"></a><a class="link"   href="https://cloudreve.org/" >Cloudreve<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口5212</p><p>进入容器需要先手动创建几个文件，在Terminal中输入以下指令即可：</p><figure class="highlight shell"><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></pre></td><td class="code"><pre><span class="line">mkdir -p cloudreve &amp;&amp; cd cloudreve \</span><br><span class="line">&amp;&amp; mkdir -vp cloudreve/&#123;uploads,avatar&#125; \</span><br><span class="line">&amp;&amp; touch cloudreve/conf.ini \</span><br><span class="line">&amp;&amp; touch cloudreve/cloudreve.db \</span><br><span class="line">&amp;&amp; mkdir -p aria2/config \</span><br><span class="line">&amp;&amp; mkdir -p data/aria2 \</span><br><span class="line">&amp;&amp; chmod -R 777 data/aria2</span><br></pre></td></tr></table></figure></blockquote><figure class="highlight yaml"><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="attr">version:</span> <span class="string">&quot;3.8&quot;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">cloudreve:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">cloudreve</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">cloudreve/cloudreve:latest</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;5212:5212&quot;</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/data:/data</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/cloudreve/uploads:/cloudreve/uploads</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/cloudreve/conf.ini:/cloudreve/conf.ini</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/cloudreve/cloudreve.db:/cloudreve/cloudreve.db</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/cloudreve/avatar:/cloudreve/avatar</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">aria2</span></span><br><span class="line">  <span class="attr">aria2:</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">aria2</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">p3terx/aria2-pro</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">RPC_SECRET=jif1568dw87</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">RPC_PORT=6800</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/aria2/config:/config</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/cloudreve/data:/data</span></span><br></pre></td></tr></table></figure><blockquote><p>Aria2的token默认为 <code>jif1568dw87</code>，如有需要自行修改</p><p>初始账号和密码，请在Terminal中输入命令 <code>docker logs cloudreve</code>后在日志中查找。</p></blockquote><h2 id="Typecho"><a href="#Typecho" class="headerlink" title="Typecho"></a><a class="link"   href="https://github.com/typecho/typecho" >Typecho<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8080</p></blockquote><figure class="highlight yaml"><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><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.7&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">typecho:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">joyqi/typecho:nightly-php7.4-apache</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">typecho-server</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">TIMEZONE=Asia/Shanghai</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">8080</span><span class="string">:80</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/typecho:/app/usr</span></span><br><span class="line">    <span class="attr">depends_on:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">mariadb</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">mariadb:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mariadb</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">mariadb</span></span><br><span class="line">    <span class="attr">command:</span> <span class="string">--transaction-isolation=READ-COMMITTED</span> <span class="string">--binlog-format=ROW</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;/project/sandbox/db:/var/lib/mysql&quot;</span>   </span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;TZ=Asia/Shanghai&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_ROOT_PASSWORD=jiehdo!25165n&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_DATABASE=typecho&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_USER=typecho&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;MYSQL_PASSWORD=jiehdo!25165n&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure><blockquote><p>如果照搬此docker-compose.yaml，初始设置数据库时应该如此填写：</p><p>数据库适配器：Mysql 原生函数适配器<br>数据库前缀：typecho_<br>数据库地址：mariadb<br>数据库用户名：root<br>数据库密码：jiehdo!25165n<br>数据库名：typecho</p></blockquote><h2 id="Baota-Panel"><a href="#Baota-Panel" class="headerlink" title="Baota_Panel"></a><a class="link"   href="https://hub.docker.com/r/gettionhub/baota-docker" >Baota_Panel<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>端口8888为面板，2022为SSH端口，2021为FTP端口，2080和2443为网页服务预留端口，2888是官方给的，不知道作用。</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">baota:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">gettionhub/baota-docker:ltd</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">baota</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/www/website_data:/www/wwwroot</span> </span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/www/mysql_data:/www/server/data</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/www/vhost:/www/server/panel/vhost</span> </span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;8888:8888&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;2022:22&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;2021:21&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;2443:443&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;2080:80&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;2888:888&quot;</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br></pre></td></tr></table></figure><blockquote><p>面板入口为8888端口的那个网址后面加上 <code>/baota</code>，形同 <code>https://t6a4m-8888.csb.app/baota</code>。</p><p>初始用户名、密码都为baota</p><p>容器内root用户的ssh密码也是baota</p></blockquote><h2 id="WordPress"><a href="#WordPress" class="headerlink" title="WordPress"></a><a class="link"   href="https://wordpress.org/" >WordPress<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8080</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.1&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">wordpress:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">wordpress</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">8080</span><span class="string">:80</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">WORDPRESS_DB_HOST:</span> <span class="string">db</span></span><br><span class="line">      <span class="attr">WORDPRESS_DB_USER:</span> <span class="string">exampleuser</span></span><br><span class="line">      <span class="attr">WORDPRESS_DB_PASSWORD:</span> <span class="string">examplepass</span></span><br><span class="line">      <span class="attr">WORDPRESS_DB_NAME:</span> <span class="string">exampledb</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/wordpree/app:/var/www/html</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mysql:5.7</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">MYSQL_DATABASE:</span> <span class="string">exampledb</span></span><br><span class="line">      <span class="attr">MYSQL_USER:</span> <span class="string">exampleuser</span></span><br><span class="line">      <span class="attr">MYSQL_PASSWORD:</span> <span class="string">examplepass</span></span><br><span class="line">      <span class="attr">MYSQL_RANDOM_ROOT_PASSWORD:</span> <span class="string">&#x27;1&#x27;</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/wordpree/db:/var/lib/mysql</span></span><br></pre></td></tr></table></figure><h2 id="Memos"><a href="#Memos" class="headerlink" title="Memos"></a><a class="link"   href="https://www.usememos.com/" >Memos<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口5230</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&quot;3.0&quot;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">memos:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">neosmemo/memos:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">memos</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/memos/:/var/opt/memos</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">5230</span><span class="string">:5230</span></span><br></pre></td></tr></table></figure><h2 id="Ghost"><a href="#Ghost" class="headerlink" title="Ghost"></a><a class="link"   href="https://ghost.org/" >Ghost<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>映射端口8080</p><p>首次启动会反复重启几次等待数据库创建文件，是正常的。</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.1&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">ghost:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">ghost:4-alpine</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">ports:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">8080</span><span class="string">:2368</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">database__client:</span> <span class="string">mysql</span></span><br><span class="line">      <span class="attr">database__connection__host:</span> <span class="string">db</span></span><br><span class="line">      <span class="attr">database__connection__user:</span> <span class="string">root</span></span><br><span class="line">      <span class="attr">database__connection__password:</span> <span class="string">example</span></span><br><span class="line">      <span class="attr">database__connection__database:</span> <span class="string">ghost</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">http://localhost:8080</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/ghost/app:/var/lib/ghost/content</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">db:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">mysql:8.0</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">environment:</span></span><br><span class="line">      <span class="attr">MYSQL_ROOT_PASSWORD:</span> <span class="string">example</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">/project/sandbox/ghost/db:/var/lib/mysql</span></span><br></pre></td></tr></table></figure><h2 id="NGINX-ui"><a href="#NGINX-ui" class="headerlink" title="NGINX-ui"></a><a class="link"   href="https://nginxui.com/" >NGINX-ui<i class="fas fa-external-link-alt"></i></a></h2><blockquote><p>面板端口为8080。网页服务端口预留为8443。</p></blockquote><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">nginx-ui:</span></span><br><span class="line">        <span class="attr">stdin_open:</span> <span class="literal">true</span></span><br><span class="line">        <span class="attr">tty:</span> <span class="literal">true</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">nginx-ui</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">environment:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/appdata/nginx:/etc/nginx&#x27;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/appdata/nginx-ui:/etc/nginx-ui&#x27;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&#x27;/project/sandbox/www:/var/www&#x27;</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="number">8080</span><span class="string">:80</span></span><br><span class="line">            <span class="bullet">-</span> <span class="number">8443</span><span class="string">:443</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">&#x27;uozi/nginx-ui:latest&#x27;</span></span><br></pre></td></tr></table></figure><h1 id="继续补充ing……"><a href="#继续补充ing……" class="headerlink" title="继续补充ing……"></a>继续补充ing……</h1><hr><h1 id="在CodeSandBox中部署其他应用——以小雅为例"><a href="#在CodeSandBox中部署其他应用——以小雅为例" class="headerlink" title="在CodeSandBox中部署其他应用——以小雅为例"></a>在CodeSandBox中部署其他应用——以<a class="link"   href="http://alist.xiaoya.pro/" >小雅<i class="fas fa-external-link-alt"></i></a>为例</h1><h2 id="对小雅容器的一些分析"><a href="#对小雅容器的一些分析" class="headerlink" title="对小雅容器的一些分析"></a>对小雅容器的一些分析</h2><p>相信部署过小雅的朋友都一直苦恼于小雅的更新频繁，以及阿里网盘更新后的容量限制，给日常观影带来了很不好的体验。随着xiaoyakeeper的诞生，才迎来了转机——自动更新容器+自动清理转存文件，解决了小雅日常使用的痛点。</p><p>但是，不论是小雅本身还是xiaoyakeeper，其部署方式都是一键式的脚本，而且部署方式限制的死死的——指定了端口、挂载卷等应该容许自定义的参数，使得其难以部署在各种PaaS平台上。</p><p>此前我曾有过最简单的把小雅部署在PaaS平台上的方法构思——基于小雅原镜像进行修改。直接查看<a class="link"   href="http://docker.xiaoya.pro/update_new.sh" >小雅的一键部署脚本<i class="fas fa-external-link-alt"></i></a>不难发现，是通过提前创建 <code>/etc/xiaoya</code>路径，再把需要使用到的各项token、id等参数储存为TXT文本文件，放入 <code>/etc/xiaoya</code>后，使用 <code>volume</code>挂载进容器的 <code>/data</code>路径进行读取的。所以只要在原有镜像上进行修改，准备好自己的这些token、id后，将其全部复制到小雅镜像的&#x2F;data路径,就应当可以在不使用volume挂载的情况下直接部署一个能够正常使用的小雅容器。</p><p>但是，首先这个方案比起一键脚本操作复杂太多，而且在我仔细查看了<a class="link"   href="https://xiaoyahelper.zengge99.eu.org/aliyun_clear.sh" >xiaoyakeeper的脚本<i class="fas fa-external-link-alt"></i></a>后，我发现这样操作会使得xiaoyakeeper无法读取docker命令的 <code>-v</code>项，就需要对xiaoyakeeper的脚本进行修改了。但是xiaoyakeeper的脚本又自带自动更新功能，如果一个更新覆盖了我的修改，又不得偿失；如果删掉自动更新的功能，那么如果阿里网盘的政策出现了改变，还得重新手动修改最新的xiaoyakeeper脚本进行替换，难以做到一劳永逸。</p><p>通过观察xiaoyakeeper的脚本内容，其更新小雅容器的方法并不是运行小雅的一键更新脚本，而是读取当前小雅容器的各项参数之后，重新进行 <code>docker pull</code>、<code>docker run</code>，也就是说，小雅容器被安装好之后，通过xiaoyakeeper进行更新就能完全摆脱小雅一键脚本。而且，如果小雅容器没有被启动的话，xiaoyakeeper运行之后就会直接启动小雅容器。</p><h2 id="对CodeSandBox的分析"><a href="#对CodeSandBox的分析" class="headerlink" title="对CodeSandBox的分析"></a>对CodeSandBox的分析</h2><p>摸索暂时比较少，Devbox（Docker）大概理解为一个 <code>Ubuntu</code>为底的，<code>zsh</code>为默认shell执行器的，有root权限的，预装了Docker的虚拟机。在 <code>/project/sandbox/</code>路径下的文件，即便重启也不会丢失。</p><h2 id="在CodeSandBox上部署小雅、xiaoyakeeper、Cloudflared"><a href="#在CodeSandBox上部署小雅、xiaoyakeeper、Cloudflared" class="headerlink" title="在CodeSandBox上部署小雅、xiaoyakeeper、Cloudflared"></a>在CodeSandBox上部署小雅、xiaoyakeeper、Cloudflared</h2><h3 id="部署小雅"><a href="#部署小雅" class="headerlink" title="部署小雅"></a>部署小雅</h3><p>通过上述的分析，不难得出，可以修改小雅的一键部署脚本，然后直接在CodeSandBox的Devbox的Terminal中运行部署脚本，以将小雅部署到CodeSandBox上。小雅的一键脚本功能很简答，无非就是要求你输入 <code>token</code>、<code>opentoken</code>、<code>folder_id</code>，然后把他们储存在一个路径，再 <code>Docker run</code>，把这个路径挂载进容器。基本上不需要什么修改，唯一需要修改的就是把创建文件和挂载卷的路径改成在CodeSandBox中能够永久储存的路径，操作如下：</p><h4 id="下载小雅的部署脚本并替换其中的路径然后执行"><a href="#下载小雅的部署脚本并替换其中的路径然后执行" class="headerlink" title="下载小雅的部署脚本并替换其中的路径然后执行"></a>下载小雅的部署脚本并替换其中的路径然后执行</h4><p>在Terminal中运行以下命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O update.sh http://docker.xiaoya.pro/update_new.sh &amp;&amp; sed -i &#x27;s|/etc/xiaoya|/project/sandbox/xiaoya|g&#x27; update.sh &amp;&amp; chmod +x update.sh &amp;&amp; bash update.sh &amp;&amp; rm update.sh</span><br></pre></td></tr></table></figure><p>按照提示输入各种要求的变量即可。运行完毕后可以看到右侧弹窗窗口中对应5678端口的那个就是小雅了。</p><p>注意，如果你遇到了运行后小雅路径下内没有 <code>mytoken.txt</code>、<code>myopentoken.txt</code>、<code>temp_transfer_folder_id.txt</code>，请不要一个劲重试浪费时间，自己把这三个文件建好并填入应有的内容再放入xiaoya路径下即可。小雅的配置文档中本身就有好几个文件需要手动建立并填入内容。</p><h3 id="部署xiaoyakeeper"><a href="#部署xiaoyakeeper" class="headerlink" title="部署xiaoyakeeper"></a>部署xiaoyakeeper</h3><p>经我尝试，xiaoyakeeper部署在CodeSandBox上，如果使用Docker模式，会有很多问题，大概与CodeSandBox的 <code>docker.sock</code>配置有关，所以只能使用模式0：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash -c &quot;$(curl -s https://xiaoyahelper.zengge99.eu.org/aliyun_clear.sh | tail -n +2)&quot; -s 0 -tg</span><br></pre></td></tr></table></figure><p>如果需要TG推送，先把上述命令在Terminal中运行一遍，会要求接入TG推送，按照要求操作即可。接入完成后使用 <code>Ctrl+c</code>结束脚本。</p><p>如果你不需要TG推送，或者已经运行了刚刚的命令接入了TG，那么就在左侧文件中新建一个名为”clear.sh”的文件，把上述命令最后的 <code>-tg</code>参数删除，粘贴进去，即为：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash -c &quot;$(curl -s https://xiaoyahelper.zengge99.eu.org/aliyun_clear.sh | tail -n +2)&quot; -s 0</span><br></pre></td></tr></table></figure><p>然后把执行这个脚本添加进容器启动时的任务中，即修改 <code>.codesandbox</code>下的 <code>tasks.json</code>中的 <code>tasks</code>部分：</p><figure class="highlight shell"><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></pre></td><td class="code"><pre><span class="line">&quot;tasks&quot;: &#123;</span><br><span class="line">    &quot;xiaoyakeeper&quot;: &#123;</span><br><span class="line">      &quot;name&quot;: &quot;aliyun_clear&quot;,</span><br><span class="line">      &quot;command&quot;: &quot;bash /project/sandbox/clear.sh&quot;,</span><br><span class="line">      &quot;runAtStart&quot;: true</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure><p>这样，当Devbox启动时，xiaoyakeeper就会启动，而xiaoyakeeper启动时就会启动小雅容器。</p><h3 id="部署Cloudflared"><a href="#部署Cloudflared" class="headerlink" title="部署Cloudflared"></a>部署Cloudflared</h3><p>如果你就个人使用，实际上没有必要加Cloudflared了，只要 <code>.csb.app</code>的域名和容器名不泄露，就和使用Cloudflared加自己的域名也没太大区别。</p><p>这里就简单偷个懒，虽然也可以直接运行Cloudflared客户端解决，但是可以用docker，而且又早都写好了 <code>docker-compose.yaml</code>，那就继续用docker-compose部署吧：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">cloudflared:</span></span><br><span class="line">      <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">      <span class="attr">network_mode:</span> <span class="string">host</span></span><br><span class="line">      <span class="attr">environment:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">TZ=Asia/Shanghai</span></span><br><span class="line">      <span class="attr">command:</span> <span class="string">tunnel</span> <span class="string">--edge-ip-version</span> <span class="string">auto</span> <span class="string">--protocol</span> <span class="string">quic</span> <span class="string">--heartbeat-interval</span> <span class="string">10s</span> <span class="string">run</span> <span class="string">--token</span> [<span class="string">ARGO_TOKEN</span>]</span><br><span class="line">      <span class="attr">container_name:</span> <span class="string">cloudflared</span></span><br><span class="line">      <span class="attr">image:</span> <span class="string">cloudflare/cloudflared:latest</span></span><br></pre></td></tr></table></figure><p>docker-compose.yaml文件放在.devcontainer路径下，详细的设置请参考之前写的文章。</p><p>这里依旧是修改 <code>.codesandbox</code>下的 <code>tasks.json</code>文件进行启动，加上启动xiaoyakeeper的修改，最终的的 <code>task.json</code>为：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="comment">// These tasks will run in order when initializing your CodeSandbox project.</span></span><br><span class="line">  <span class="attr">&quot;setupTasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Deploy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cd /project/sandbox/.devcontainer/ &amp;&amp; docker compose up -d&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">  <span class="comment">// These tasks can be run from CodeSandbox. Running one will open a log in the app.</span></span><br><span class="line">  <span class="attr">&quot;tasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;xiaoyakeeper&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;aliyun_clear&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;bash /project/sandbox/clear.sh&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>注意，只有5678端口需要映射出来，另外两个端口是配合一些TV软件使用，这里用不上。如果你确实有需求且自己会配置，请自行研究，这里不做探讨。</p><p>到这里就全部部署完成了，只需要Restart Devbox检查一下是否正常运行即可。</p><p>附上<a class="link"   href="https://github.com/cloudflare/cloudflared/releases" >Cloudflared<i class="fas fa-external-link-alt"></i></a>的可执行文件使用命令行直接建立Tunnel的命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./cloudflared tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]</span><br></pre></td></tr></table></figure><h2 id="其他应用的部署"><a href="#其他应用的部署" class="headerlink" title="其他应用的部署"></a>其他应用的部署</h2><p>通过以上的捣鼓可以发现，<code>.codesandbox</code>下的 <code>tasks.json</code>文件实际上与<a class="link"   href="https://replit.com/~" >Replit<i class="fas fa-external-link-alt"></i></a>的 <code>replit.nix</code>和 <code>.replit</code>两个文件的功能相近。</p><p>在 <code>setupTasks</code>部分中你可以使用 <code>apt-get install</code>、<code>npm install</code>或者 <code>pip install</code>等命令进行软件包的安装，亦或者其他的部署指令。</p><p>在 <code>tasks</code>部分你可以添加一些快捷命令，需要在启动时自动运行的，就把 <code>runAtStart</code>设置为 <code>true</code>即可。</p><p>上述命令，无论是 <code>setupTasks</code>还是 <code>tasks</code>，都是在Terminal中直接运行的命令，区别是，如果 <code>setupTasks</code>没有执行完，Devbox不会启动，而 <code>tasks</code>只有在启动完成之后才能执行。</p><p>那么就可以很简单的把Replit上之前部署的应用搬到CodeSandBox上了，<code>replit.nix</code>里需要的软件包，就去 <code>setupTasks</code>添加命令安装，<code>.replit</code>里定义的 <code>Run</code>的行为，添加到 <code>tasks</code>里去，并且把 <code>runAtStart</code>设置为 <code>true</code>，其他的文件照搬一下，原本使用 <code>$&#123;REPL_SLUG&#125;</code>、<code>$&#123;REPL_OWNER&#125;</code>之类的变量确定的文件路径，统一修改为 <code>/project/sandbox/</code>下的任意路径即可。</p><p>当然不建议直接照搬，因为CodeSandBox配置比Replit高不少而且支持docker，这里建议能用docker的都用docker部署，源仓库不提供用docker部署的，写dockerfile构筑docker部署。实在不会用docker，再考虑这样的照搬或者直接运行的方法。</p><hr><h1 id="在CodeSandBox中使用Mirai-Console-Loader"><a href="#在CodeSandBox中使用Mirai-Console-Loader" class="headerlink" title="在CodeSandBox中使用Mirai-Console-Loader"></a>在CodeSandBox中使用<a class="link"   href="https://github.com/iTXTech/mirai-console-loader" >Mirai-Console-Loader<i class="fas fa-external-link-alt"></i></a></h1><p>刚好发现了<a class="link"   href="https://github.com/tsl0922/ttyd" >ttyd<i class="fas fa-external-link-alt"></i></a>和<a class="link"   href="https://github.com/filebrowser/filebrowser" >filebrowser<i class="fas fa-external-link-alt"></i></a>两款神器，感觉使用这两个工具就可以愉快便利的在CodeSandBox上使用Mirai-Console-Loader，遂试了一下，果然可行，记录一下部署过程。</p><h2 id="部署过程-1"><a href="#部署过程-1" class="headerlink" title="部署过程"></a>部署过程</h2><h3 id="下载Mirai-Console-Loader"><a href="#下载Mirai-Console-Loader" class="headerlink" title="下载Mirai-Console-Loader"></a>下载Mirai-Console-Loader</h3><p>Terminal中运行一行命令解决：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O mcl.zip https://github.com/iTXTech/mirai-console-loader/releases/download/v2.1.2/mcl-2.1.2.zip &amp;&amp; unzip -o mcl.zip &amp;&amp; rm mcl.zip &amp;&amp; chmod +x mcl</span><br></pre></td></tr></table></figure><p>如果和我一样有强迫症，看着时区不对很烦，毕竟CodeSandBox的服务器并不在UTC+8区，所以通过手动修改其启动脚本，即名为 <code>mcl</code>的那个文件，在执行jar包的命令前添加时区参数，即把最后一行改成：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$</span><span class="language-bash">JAVA_BINARY -jar -Duser.timezone=Asia/Shanghai mcl.jar $*</span></span><br></pre></td></tr></table></figure><h3 id="修改Devbox的启动任务"><a href="#修改Devbox的启动任务" class="headerlink" title="修改Devbox的启动任务"></a>修改Devbox的启动任务</h3><p>修改 <code>.codesandbox</code>路径下的 <code>tasks.json</code>文件，添加软件包的安装与所需工具的下载与运行命令，修改后的 <code>tasks.json</code>文件如下：</p><figure class="highlight json"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="comment">// These tasks will run in order when initializing your CodeSandbox project.</span></span><br><span class="line">  <span class="attr">&quot;setupTasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Installing java&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;apt-get update &amp;&amp; echo | apt-get install openjdk-21-jre&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Downloading ttyd&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mkdir -p /project/sandbox/ttyd &amp;&amp; cd /project/sandbox/ttyd &amp;&amp; wget -O ttyd https://github.com/tsl0922/ttyd/releases/download/1.7.4/ttyd.x86_64 &amp;&amp; chmod +x ttyd&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Downloading filebrowser&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mkdir -p /project/sandbox/filebrowser &amp;&amp; cd /project/sandbox/filebrowser &amp;&amp; wget -O filebrowser.tar.gz https://github.com/filebrowser/filebrowser/releases/download/v2.26.0/linux-amd64-filebrowser.tar.gz &amp;&amp; tar -xzvf filebrowser.tar.gz &amp;&amp; chmod +x filebrowser &amp;&amp; rm -f filebrowser.tar.gz&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Downloading Cloudflared&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-amd64 &amp;&amp; chmod +x cloudflared&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">  <span class="comment">// These tasks can be run from CodeSandbox. Running one will open a log in the app.</span></span><br><span class="line">  <span class="attr">&quot;tasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;ttyd&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ttyd&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="comment">// 在21022端口打开ttyd终端，用户名为admin，密码为password，可以自行修改。</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;./ttyd/ttyd -p 21022 -c admin:password -W zsh&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;filebrowser&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;filebrowser&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="comment">// 在21021端口打开filebrowser，默认用户名和密码都为admin，登入后请自行在设置中修改用户名和密码，确保安全。</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;./filebrowser/filebrowser -p 21021&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;Cloudflared&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Cloudflared&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="comment">// 运行Cloudflare Tunnels，请把最后的[ARGO_TOKEN]替换成自己的。</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;./cloudflared tunnel --edge-ip-version auto --protocol quic --heartbeat-interval 10s run --token [ARGO_TOKEN]&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>请不要直接复制粘贴，务必看一眼我写的批注，改成自己的信息后再复制粘贴。接着Restart Devbox，等待重启完毕即可。</p><p>记得在Cloudflare面板里设置相应的端口对应，这里我使用的是21021和21022两个端口。</p><p>接着打开自己映射的域名，输入自己设置的用户名和密码即可开始畅玩。</p><h2 id="后话-1"><a href="#后话-1" class="headerlink" title="后话"></a>后话</h2><p>Mirai-Console-Loader是目前最为成熟的QQ机器人使用方法之一了，其插件生态之完善带来了很高的可玩性，不论是之前部署的ChatGPT机器人、New Bing机器人，在Mirai-Console-Loader中基本都有相应的插件实现。也是得益于CodeSandBox比起Replit更为强大的机能，才使得Mirai-Console-Loader能够在平台上流畅的运行。</p><p>关于Mirai-Console-Loader的使用方法、插件安装、登录问题等，其官方文档和论坛也已经记录的非常详细了，这里不多作讨论，只说这一点：</p><p>我大概尝试发现的可行的登录方法就是在本地电脑也安装一个Mirai-Console-Loader，通过手表协议扫码登录之后能够获得一个登录记录的文件夹，把整个文件夹上传到CodeSandBox上的相应位置即可。原理和<a class="link"   href="https://github.com/Mrs4s/go-cqhttp" >go-cqhttp<i class="fas fa-external-link-alt"></i></a>通过上传 <code>session.token</code>文件进行登录是类似的。</p><p>讨论群：<a class="link"   href="https://jq.qq.com/?_wv=1027&k=qssjFvAs" >738386033<i class="fas fa-external-link-alt"></i></a></p><hr><h1 id="在CodeSandBox上搭建代理服务器"><a href="#在CodeSandBox上搭建代理服务器" class="headerlink" title="在CodeSandBox上搭建代理服务器"></a>在CodeSandBox上搭建代理服务器</h1><p>使用的是<a class="link"   href="https://github.com/3Kmfi6HP/nodejs-proxy" >3Kmfi6HP&#x2F;nodejs-proxy<i class="fas fa-external-link-alt"></i></a>这个仓库。</p><h2 id="部署方法"><a href="#部署方法" class="headerlink" title="部署方法"></a>部署方法</h2><p>新建Node.js为Template的Devbox，然后使用以下 <code>tasks.json</code>的内容覆盖原本的 <code>tasks.json</code>：</p><figure class="highlight json"><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"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="comment">// These tasks will run in order when initializing your CodeSandbox project.</span></span><br><span class="line">  <span class="attr">&quot;setupTasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Install Dependencies&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm i -g @3kmfi6hp/nodejs-proxy&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="comment">// These tasks can be run from CodeSandbox. Running one will open a log in the app.</span></span><br><span class="line">  <span class="attr">&quot;tasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;dev&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Start Dev Server&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npx @3kmfi6hp/nodejs-proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;preview&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">7860</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;restartOn&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;files&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;./package-lock.json&quot;</span><span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>然后Restart Devbox，等待网页弹出即可。</p><h2 id="使用注意"><a href="#使用注意" class="headerlink" title="使用注意"></a>使用注意</h2><p>有个Bug，实际端口应该是443而不是80，所以要在导出的代理配置中把服务端口从80改为443才能正常连接，不然连不上。</p><hr><h1 id="在CodeSandBox上模拟健康码"><a href="#在CodeSandBox上模拟健康码" class="headerlink" title="在CodeSandBox上模拟健康码"></a>在CodeSandBox上模拟健康码</h1><p>仓库是<a class="link"   href="https://codeberg.org/ilovexjp/health-code-simulator" >health-code-simulator<i class="fas fa-external-link-alt"></i></a>。</p><p>听说健康码要回来了，咱提前做好准备，有备无患。</p><h2 id="部署流程"><a href="#部署流程" class="headerlink" title="部署流程"></a>部署流程</h2><h3 id="下载源码"><a href="#下载源码" class="headerlink" title="下载源码"></a>下载源码</h3><p>新建Template为Node.js的Devbox。在Terminal中输入以下命令把源码下载到Devbox中：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O repo.zip https://codeberg.org/mito/health-code-simulator/archive/main.zip &amp;&amp; unzip repo.zip &amp;&amp; rm repo.zip &amp;&amp; mv -b health-code-simulator/* ./ &amp;&amp; mv -b health-code-simulator/.[^.]* ./ &amp;&amp; rm -rf *~ &amp;&amp; rm -rf health-code-simulator</span><br></pre></td></tr></table></figure><h3 id="修改启动任务"><a href="#修改启动任务" class="headerlink" title="修改启动任务"></a>修改启动任务</h3><p>修改.codesandbox路径下的tasks.json文件，加入依赖安装和启动的任务：</p><figure class="highlight json"><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="comment">// These tasks will run in order when initializing your CodeSandbox project.</span></span><br><span class="line">  <span class="attr">&quot;setupTasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Install Dependencies&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm install&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Building&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm build&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">  <span class="comment">// These tasks can be run from CodeSandbox. Running one will open a log in the app.</span></span><br><span class="line">  <span class="attr">&quot;tasks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;start&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;start&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;node build.mjs --serve&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;runAtStart&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>接着Restart Devbox即可。</p><hr><h1 id="在一个容器内同时运行PandoraNext和TokensTool"><a href="#在一个容器内同时运行PandoraNext和TokensTool" class="headerlink" title="在一个容器内同时运行PandoraNext和TokensTool"></a>在一个容器内同时运行PandoraNext和TokensTool</h1><p>在ChatGPT的辅助下，我写了一个Dockerfile，用以构筑PandoraNext和TokensTool二合一的镜像。</p><p>该Dockerfile在构筑时会自动从PandoraNext和TokensTool的release中检测最新且符合当前系统架构的版本进行下载，省去了很多麻烦。</p><figure class="highlight dockerfile"><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><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">FROM</span> debian:<span class="number">11.8</span>-slim</span><br><span class="line"></span><br><span class="line"><span class="keyword">WORKDIR</span><span class="language-bash"> /app</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装所需的工具</span></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; apt-get install -y openjdk-11-jdk curl jq &amp;&amp; <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载 PandoraNext 的最新版本</span></span><br><span class="line"><span class="keyword">FROM</span> debian:<span class="number">11.8</span>-slim</span><br><span class="line"></span><br><span class="line"><span class="keyword">WORKDIR</span><span class="language-bash"> /app</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装所需的工具</span></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> apt-get update &amp;&amp; apt-get install -y openjdk-11-jdk curl jq wget &amp;&amp; <span class="built_in">rm</span> -rf /var/lib/apt/lists/*</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载 PandoraNext 的最新版本</span></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> ARCH=$(dpkg --print-architecture) &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    VERSION=$(curl -s https://api.github.com/repos/pandora-next/deploy/releases/latest | jq -r <span class="string">&quot;.tag_name&quot;</span>) &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    DOWNLOAD_URL=$(curl -s https://api.github.com/repos/pandora-next/deploy/releases/latest | jq -r <span class="string">&quot;.assets[] | select(.name | contains(\&quot;linux-<span class="variable">$&#123;ARCH&#125;</span>\&quot;)) | .browser_download_url&quot;</span>) &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    curl -sL <span class="variable">$&#123;DOWNLOAD_URL&#125;</span> -o pandoranext.tar.gz &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    tar -xzf pandoranext.tar.gz --strip-components=1 &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">chmod</span> +x /app/PandoraNext &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">rm</span> pandoranext.tar.gz tokens.json config.json</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载 PandoraNext-TokensTool 的最新版本</span></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> JAR_URL=$(curl -s https://api.github.com/repos/Yanyutin753/PandoraNext-TokensTool/contents/simplyDeploy?ref=main | \</span></span><br><span class="line"><span class="language-bash">    jq -r <span class="string">&quot;.[] | select(.name | endswith(\&quot;.jar\&quot;)) | .download_url&quot;</span>); \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">echo</span> <span class="string">&quot;Download URL: <span class="variable">$JAR_URL</span>&quot;</span>; \</span></span><br><span class="line"><span class="language-bash">    wget -O tokenstool.jar <span class="string">&quot;<span class="variable">$JAR_URL</span>&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个脚本来同时运行 PandoraNext 和 tokenstool.jar，并处理配置文件</span></span><br><span class="line"><span class="keyword">RUN</span><span class="language-bash"> <span class="built_in">echo</span> <span class="string">&#x27;#!/bin/sh\nln -sf /data/config.json /app/config.json\nln -sf /data/tokens.json /app/tokens.json\njava -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/app --hotReload=true --pandora_Ip=127.0.0.1 &amp;\nsleep 10\n./PandoraNext&#x27;</span> &gt; start.sh &amp;&amp; \</span></span><br><span class="line"><span class="language-bash">    <span class="built_in">chmod</span> +x start.sh</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">EXPOSE</span> <span class="number">8081</span> <span class="number">8181</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">ENTRYPOINT</span><span class="language-bash"> [<span class="string">&quot;/app/start.sh&quot;</span>]</span></span><br></pre></td></tr></table></figure><h2 id="使用方法——以CodeSandBox为例"><a href="#使用方法——以CodeSandBox为例" class="headerlink" title="使用方法——以CodeSandBox为例"></a>使用方法——以CodeSandBox为例</h2><h3 id="构筑镜像"><a href="#构筑镜像" class="headerlink" title="构筑镜像"></a>构筑镜像</h3><p>在DevBox中新建一个Dockerfile，并且把上述内容粘贴进去。接着在Terminal中输入命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker build -t pandoranext:latest .</span><br></pre></td></tr></table></figure><h3 id="运行容器"><a href="#运行容器" class="headerlink" title="运行容器"></a>运行容器</h3><p>准备好已经填好的 <code>config.json</code>和 <code>tokens.json</code>（<code>TokensTool.json</code>可以先不修改，之后在<em>TokensTool</em>提供的页面内进行操作也可以。），新建一个名为 <code>pandora</code>的文件，将这两个文件放入其中。</p><p>接着新建 <code>docker-compose.yaml</code>文件，并填入以下内容：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">pandora-next:</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">pandoranext:latest</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">PandoraNext</span></span><br><span class="line">        <span class="attr">network_mode:</span> <span class="string">bridge</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;8181:8181&quot;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;8081:8081&quot;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/pandora:/data</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/sessions:/root/.cache/PandoraNext</span></span><br></pre></td></tr></table></figure><p>再去Terminal中执行命令：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure><p>容器即可完成启动。</p><h3 id="使用我构筑的镜像"><a href="#使用我构筑的镜像" class="headerlink" title="使用我构筑的镜像"></a>使用我构筑的镜像</h3><p>如果你嫌麻烦，也可以直接使用我构筑的镜像，省去自己构筑的时间。同理，新建pandora文件夹后放入已经填好的 <code>config.json</code>和 <code>tokens.json</code>文件，然后把 <code>docker-compose.yaml</code>的内容改成如下内容：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.3&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">    <span class="attr">pandora-next:</span></span><br><span class="line">        <span class="attr">image:</span> <span class="string">saika2077/pandoranext:latest</span></span><br><span class="line">        <span class="attr">container_name:</span> <span class="string">PandoraNext</span></span><br><span class="line">        <span class="attr">network_mode:</span> <span class="string">bridge</span></span><br><span class="line">        <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">        <span class="attr">ports:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;8181:8181&quot;</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">&quot;8081:8081&quot;</span></span><br><span class="line">        <span class="attr">volumes:</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/pandora:/data</span></span><br><span class="line">            <span class="bullet">-</span> <span class="string">/project/sandbox/sessions:/root/.cache/PandoraNext</span></span><br></pre></td></tr></table></figure><p>然后直接 <code>docker compose up -d</code>即可。我构筑的镜像截止到这篇博客成文为止，<em>PandoraNext</em>的版本号为 <code>0.5.2</code>，<em>TokensTool</em>的版本号为 <code>0.4.8.2</code>。</p><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><p>该容器的使用注意事项与上一篇博客是完全一样的，只是更新方式发生了改变。如果你是自己构筑的方式使用的，<code>docker compose down</code>然后执行 <code>docker build --no-cache -t pandoranext:latest .</code>再 <code>docker compose up -d</code>即可。如果你使用的是我构筑的镜像，在我的镜像更新后，你只需要 <code>docker compose down &amp;&amp; docker compose pull &amp;&amp; docker compose up -d</code>即可完成升级。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;在CodeSandBox上部署docker并使用Cloudflare-Tunnel打通自己的域名——以青龙面板为例&quot;&gt;&lt;a href=&quot;#在CodeSandBox上部署docker并使用Cloudflare-Tunnel打通自己的域名——以青龙面板为例&quot; clas</summary>
      
    
    
    
    <category term="PaaS" scheme="https://saika.us.kg/categories/PaaS/"/>
    
    
    <category term="codesandbox" scheme="https://saika.us.kg/tags/codesandbox/"/>
    
    <category term="PaaS" scheme="https://saika.us.kg/tags/PaaS/"/>
    
  </entry>
  
  <entry>
    <title>Hax免费VPS的使用记录</title>
    <link href="https://saika.us.kg/2023/12/31/some_server_on_my_hax/"/>
    <id>https://saika.us.kg/2023/12/31/some_server_on_my_hax/</id>
    <published>2023-12-31T05:07:58.940Z</published>
    <updated>2024-02-01T23:53:46.924Z</updated>
    
    <content type="html"><![CDATA[<p>前些日子申请了一台<a class="link"   href="https://hax.co.id/" >Hax<i class="fas fa-external-link-alt"></i></a>的IPv6_only的VPS，本来只搭了一个<a class="link"   href="https://github.com/apernet/hysteria" >hysteria2<i class="fas fa-external-link-alt"></i></a>协议的代理，因为只能使用IPv6连入，基本处于放置不用的状态，但是看到后来大家都开始抢注册，又舍不得把机器放出，于是一直在续期。</p><p>近些天，在这台机器上部署了一些应用，感觉用起来还比较舒服，于是做个记录。</p><h2 id="一些常用程序包的安装"><a href="#一些常用程序包的安装" class="headerlink" title="一些常用程序包的安装"></a>一些常用程序包的安装</h2><p>我选择的是Debian11的系统，因为免费的VPS只有1500MB的内存，为了尽可能部署更多的服务，我没有选择安装Docker。与之相对应，我安装了Python和Node.js还有OpenJDK，以便运行目前和之后我需要部署在VPS上的服务。</p><p>现得知，由于Hax目前使用的OpenVZ虚拟化技术的原因，docker相关功能无法使用，所以只能使用手动部署的方式对应用进行部署。</p><blockquote><p>前置需求：<br>因为Hax只有IPv6网络，甚至于有时dns服务器的默认设置是一个IPv4地址，根本无法解析，需要先配置使用DNS64才能正常联网。配置DNS64可以使用此命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;nameserver   2a01:4f9:c010:3f02::1&quot;</span> &gt; /etc/resolv.conf</span><br></pre></td></tr></table></figure><p>然后再使用<a class="link"   href="https://github.com/fscarmen" >fscarmen<i class="fas fa-external-link-alt"></i></a>大佬的<a class="link"   href="https://gitlab.com/fscarmen/warp" >Warp<i class="fas fa-external-link-alt"></i></a>脚本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh &amp;&amp; bash menu.sh</span><br></pre></td></tr></table></figure><p>即可获得<a class="link"   href="https://1.1.1.1/" >Cloudflare<i class="fas fa-external-link-alt"></i></a>提供的IPv4地址，正常访问IPv4的网络资源。</p><p>另外，可以在<a class="link"   href="https://t.me/generatewarpplusbot" >Warp+ bot<i class="fas fa-external-link-alt"></i></a>处生成Warp+的秘钥，提升Warp的网络速度。</p></blockquote><h3 id="Python"><a href="#Python" class="headerlink" title="Python"></a>Python</h3><p>我就是喜欢追新，所以这里我没有直接使用 <code>apt-get</code>安装Python，而是选择了编译安装目前最新的Release版本——Python-3.12.1。编译安装并不难，只是略微有些慢：</p><p>先安装一些环境依赖：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get update &amp;&amp; apt-get install build-essential gdb lcov pkg-config libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev lzma lzma-dev tk-dev uuid-dev zlib1g-dev</span><br></pre></td></tr></table></figure><p>接着编译安装Python：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /usr/local          <span class="comment">#进入/usr/local路径</span></span><br><span class="line"><span class="built_in">mkdir</span> -p soft &amp;&amp; <span class="built_in">mkdir</span> -p <span class="built_in">source</span>          <span class="comment">#创建soft、source路径</span></span><br><span class="line"><span class="built_in">cd</span> <span class="built_in">source</span> &amp;&amp; wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz          <span class="comment">#进入source路径并下载Python-3.12.1源码</span></span><br><span class="line">tar -xzvf Python-3.12.1.tgz &amp;&amp; <span class="built_in">rm</span> Python-3.12.1.tgz &amp;&amp; <span class="built_in">cd</span> Python-3.12.1          <span class="comment">#解压</span></span><br><span class="line">./configure --prefix=/usr/local/soft/python3.12 --enable-optimizations          <span class="comment">#检测安装环境，配置安装参数，生成供编译用的Makefile</span></span><br><span class="line">make &amp;&amp; make install          <span class="comment">#编译安装</span></span><br></pre></td></tr></table></figure><p>再创建软链接：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -f /usr/bin/python3          <span class="comment">#删除原有软链接</span></span><br><span class="line"><span class="built_in">ln</span> -s /usr/local/soft/python3.12/bin/python3.12 /usr/bin/python3          <span class="comment">#新建软链接python3</span></span><br><span class="line"><span class="built_in">ln</span> -s /usr/local/soft/python3.12/bin/pip3.12 /usr/bin/pip          <span class="comment">#新建软链接pip</span></span><br></pre></td></tr></table></figure><p>检查安装是否成功：</p><figure class="highlight bash"><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">python3 --version</span><br><span class="line">pip --version</span><br></pre></td></tr></table></figure><h3 id="Node-js"><a href="#Node-js" class="headerlink" title="Node.js"></a>Node.js</h3><p>同理追新，我选择安装Node.js-v21.5.0：</p><figure class="highlight bash"><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">curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &amp;&amp;\</span><br><span class="line">apt-get install -y nodejs</span><br></pre></td></tr></table></figure><p>检测安装是否成功：</p><figure class="highlight bash"><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">node --version</span><br><span class="line">npm --version</span><br></pre></td></tr></table></figure><h3 id="OpenJDK"><a href="#OpenJDK" class="headerlink" title="OpenJDK"></a>OpenJDK</h3><p>用得不多，所以偷个懒，直接 <code>apt-get</code>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get install openjdk-17-jdk</span><br></pre></td></tr></table></figure><p>检测安装是否成功：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java -version</span><br></pre></td></tr></table></figure><blockquote><p>如果要安装新一点的版本，以OpenJDK 21为例：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> -p /usr/local/soft</span><br><span class="line"><span class="built_in">cd</span> /usr/local/soft</span><br><span class="line">wget https://download.java.net/java/GA/jdk21.0.1/415e3f918a1f4062a0074a2794853d0d/12/GPL/openjdk-21.0.1_linux-x64_bin.tar.gz</span><br><span class="line">tar -xzvf openjdk-21.0.1_linux-x64_bin.tar.gz</span><br><span class="line"><span class="built_in">rm</span> openjdk-21.0.1_linux-x64_bin.tar.gz</span><br><span class="line"><span class="built_in">ln</span> -s /usr/local/soft/jdk-21.0.1/bin/java /usr/bin/java</span><br><span class="line"><span class="built_in">ln</span> -s /usr/local/soft/jdk-21.0.1/bin/jar /usr/bin/jar</span><br></pre></td></tr></table></figure><p>然后修改 <code>/etc/profile</code>，在最末添加一些环境变量：</p><figure class="highlight bash"><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"><span class="built_in">export</span> JAVA_HOME=/usr/local/soft/jdk-21.0.1</span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$&#123;JAVA_HOME&#125;</span>/bin:<span class="variable">$PATH</span></span><br></pre></td></tr></table></figure><p>可以使用sftp上传覆盖修改，也可以使用vim、nano之类的工具在线修改。<br>修改完后应用环境变量：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> /etc/profile</span><br></pre></td></tr></table></figure></blockquote><h3 id="PHP"><a href="#PHP" class="headerlink" title="PHP"></a>PHP</h3><p>这里我选择了安装PHP8.2，debian11的 <code>apt-get</code>源里只搜得到低版本，同Node.js一样，稍作处理即可用 <code>apt-get</code>直接安装：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">apt-get update &amp;&amp; apt-get install lsb-release ca-certificates curl -y</span><br><span class="line">curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg &amp;&amp; sh -c <span class="string">&#x27;echo &quot;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&quot; &gt; /etc/apt/sources.list.d/php.list&#x27;</span></span><br><span class="line">apt-get update</span><br><span class="line">apt-get install php</span><br></pre></td></tr></table></figure><p>如果在执行第二条命令时报错：</p><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line">Traceback (most recent call last):</span><br><span class="line">  File <span class="string">&quot;/usr/bin/lsb_release&quot;</span>, line 25, <span class="keyword">in</span> &lt;module&gt;</span><br><span class="line">    import lsb_release</span><br><span class="line">ModuleNotFoundError: No module named <span class="string">&#x27;lsb_release&#x27;</span></span><br></pre></td></tr></table></figure><p>则通过这个办法解决：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> /usr/lib/python3/dist-packages/lsb_release.py /usr/bin/</span><br></pre></td></tr></table></figure><h3 id="MySQL"><a href="#MySQL" class="headerlink" title="MySQL"></a>MySQL</h3><p>创建自己的数据库，再也不用到处找免费的数据库白嫖！充分利用Hax的15G硬盘。安装方法如下：</p><figure class="highlight bash"><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">wget https://repo.mysql.com//mysql-apt-config_0.8.29-1_all.deb</span><br><span class="line">dpkg -i mysql-apt-config_0.8.29-1_all.deb</span><br><span class="line"><span class="built_in">rm</span> mysql-apt-config_0.8.22-1_all.deb</span><br><span class="line">apt-get update</span><br><span class="line">apt-get install mysql-server</span><br></pre></td></tr></table></figure><p>MySQL默认监听3306端口，安装过程中会有一些自定义选项，还会要求你设置数据库root用户的密码。使用查看版本号的命令检查MySQL是否安装正常：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql --version</span><br></pre></td></tr></table></figure><h3 id="Redis"><a href="#Redis" class="headerlink" title="Redis"></a>Redis</h3><p>默认监听6379端口，主要用于缓存提速，部分应用可用，不详细介绍，只记录安装方法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">curl https://packages.redis.io/gpg | apt-key add -</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;deb https://packages.redis.io/deb \$(lsb\_release -cs) main&quot;</span> | <span class="built_in">tee</span> /etc/apt/sources.list.d/redis.list</span><br><span class="line">apt-get update -y &amp;&amp; apt-get install redis-server -y</span><br></pre></td></tr></table></figure><p>连接测试，会进入到127.0.0.1:6379的实例中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">redis-cli</span><br></pre></td></tr></table></figure><h3 id="pm2"><a href="#pm2" class="headerlink" title="pm2"></a>pm2</h3><p>推荐一个很好用的进程管理工具：<a class="link"   href="https://github.com/Unitech/pm2" >pm2<i class="fas fa-external-link-alt"></i></a>，安装简单，功能强大。具体功能不细说，源仓库介绍很详细，安装方法也很简单，直接用 <code>npm</code>就能安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install pm2 -g</span><br></pre></td></tr></table></figure><p>常用指令：</p><figure class="highlight bash"><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">pm2 <span class="built_in">ls</span>          <span class="comment">#查看目前pm2管理的所有进程的简易列表</span></span><br><span class="line">pm2 monit          <span class="comment">#查看pm2管理的所有进程的详细信息</span></span><br></pre></td></tr></table></figure><h2 id="一些应用的部署"><a href="#一些应用的部署" class="headerlink" title="一些应用的部署"></a>一些应用的部署</h2><p>我首先部署的代理在此就不做介绍了，Hysteria2和<a class="link"   href="https://github.com/EAimTY/tuic" >tuic<i class="fas fa-external-link-alt"></i></a>协议目前在Hax上的表现都还不错，GitHub和Gitlab上也都有不少一键部署的脚本。如果希望在本地没有IPv6的情况下代理到Hax，则需要选择使用Cloudflare隧道的代理方式，上述的fscarmen大佬也有提供，这里不再赘述。</p><p>我目前已经在Hax上部署了<a class="link"   href="https://github.com/pandora-next/deploy" >PandoraNext<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://github.com/Yanyutin753/PandoraNext-TokensTool" >TokensTool<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://github.com/songquanpeng/one-api" >One-API<i class="fas fa-external-link-alt"></i></a>、<a class="link"   href="https://github.com/weaigc/bingo" >Bingo<i class="fas fa-external-link-alt"></i></a>四项服务，并通过<a class="link"   href="https://github.com/cloudflare/cloudflared" >Cloudflared<i class="fas fa-external-link-alt"></i></a>隧道链接到了自己的域名，通过Cloudflare提供的服务，使得没有IPv6的网络情况下也可以访问我部署的服务。以上服务均用 <code>pm2</code>启动，以便管理，防止崩溃。</p><h3 id="Bingo"><a href="#Bingo" class="headerlink" title="Bingo"></a>Bingo</h3><p>通过源码部署的方式进行部署。将Bingo的代码下载到本地，并测试运行：</p><figure class="highlight bash"><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">git <span class="built_in">clone</span> https://github.com/weaigc/bingo.git          <span class="comment">#下载源码到本地</span></span><br><span class="line"><span class="built_in">cd</span> bingo</span><br><span class="line">npm install</span><br><span class="line">npm run build          <span class="comment">#构筑</span></span><br><span class="line">npm run start          <span class="comment">#运行</span></span><br></pre></td></tr></table></figure><p>其默认端口配置在 <code>server.js</code>文件的第7行，默认为 <code>3000</code>。运行成功后可以访问http:&#x2F;&#x2F;[IPv6]:PORT查看是否正常运行。<br>正常运行的话，使用 <code>Ctrl+c</code>停止运行，如果你希望设置内置账号，可以设置环境变量：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">&quot;BING_HEADER=Your_Header&quot;</span> &gt; .<span class="built_in">env</span>          <span class="comment">#把Your_Header改成转换的HEADER</span></span><br></pre></td></tr></table></figure><p>再使用pm2启动：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start npm -- run start</span><br></pre></td></tr></table></figure><p>至此，Bingo就部署完毕了，如果需要修改 <code>BING_HEADER</code>然后重启应用的话，修改后直接使用 <code>ps -ef</code>命令找到原本运行的Bingo，接着使用 <code>kill</code>将其停止即可。pm2会自启Bingo。</p><h3 id="One-API"><a href="#One-API" class="headerlink" title="One-API"></a>One-API</h3><p>因为源仓库提供了可执行文件，所以部署起来非常简单，下载，赋权，运行即可：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget -O one-api https://github.com/songquanpeng/one-api/releases/download/v0.5.10/one-api          <span class="comment">#下载可执行文件并重命名为one-api</span></span><br><span class="line"><span class="built_in">chmod</span> 777 one-api          <span class="comment">#赋权</span></span><br><span class="line">./one-api --port 1333 --log-dir ./logs          <span class="comment">#在1333端口运行One-API并将日志输出到当前路径下的logs路径下</span></span><br></pre></td></tr></table></figure><p>接着检查一下1333端口上one-api是否正常运行，运行正常的话，使用 <code>Ctrl+c</code>停止运行。再使用pm2启动One-API：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./one-api -- --port 1333 --log-dir ./logs</span><br></pre></td></tr></table></figure><p>至此，One-API部署完毕。如果需要升级，与Bingo同理，下载覆盖后，使用kill停止原本的任务即可，pm2会自启One-API。</p><h3 id="PandoraNext"><a href="#PandoraNext" class="headerlink" title="PandoraNext"></a>PandoraNext</h3><p>与One-API相同，PandoraNext提供了可执行文件，部署简单。需要注意的是，PandoraNext并不是一个服务端，只是一个客户端，而且并不开源，但是其功能非常强大，且免费使用。以下是部署步骤：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/pandora-next/deploy/releases/download/v0.6.1/PandoraNext-v0.6.1-linux-amd64-e1cae28.tar.gz</span><br><span class="line">tar -xzvf PandoraNext-v0.6.1-linux-amd64-e1cae28.tar.gz --strip-components=1</span><br><span class="line"><span class="built_in">chmod</span> 777 PandoraNext</span><br></pre></td></tr></table></figure><p>接着修改 <code>config.json</code>文件，填入自己的配置，再启动PandoraNext进行测试运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./PandoraNext</span><br></pre></td></tr></table></figure><p>接着检查一下你在 <code>config.json</code>中设置的端口上PandoraNext是否正常运行，运行正常的话，使用 <code>Ctrl+c</code>停止运行。再使用pm2启动PandoraNext：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./PandoraNext</span><br></pre></td></tr></table></figure><p>至此，PandoraNext部署完毕。如果需要升级，与Bingo同理，下载覆盖后，使用kill停止原本的任务即可，pm2会自启PandoraNext。</p><blockquote><p>需要注意的是，PandoraNext的License是绑定IPv4的，实际上Hax的IPv6_only的VPS都在相近的机房，其套用Warp获得的IPv4地址数量非常有限，大多数都是共用相同的IPv4地址。按照PandoraNext的规则来讲，就是先到先得，部署晚的有可能会无法绑定License。</p></blockquote><h3 id="TokensTool"><a href="#TokensTool" class="headerlink" title="TokensTool"></a>TokensTool</h3><p>TokensTool是配合PandoraNext使用的tokens管理工具，能把刷新tokens、推流one-api等工作自动化进行，而且配备了UI页面，使用简单方便。目前TokensTool还在不断更新中，如今已经支持了cocopilot转OpenAI API的功能，越来越多的功能将会被添加进去。TokensTool是用Java写的，提供了打包好的Jar包，只需要下载Jar包运行即可：</p><figure class="highlight bash"><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">wget -O tokenstool.jar https://github.com/Yanyutin753/PandoraNext-TokensTool/releases/download/v0.5.9/pandoraNext-0.5.9-SNAPSHOT.jar          <span class="comment">#下载jar包并重命名为tokenstool.jar</span></span><br><span class="line">java -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/root/app --hotReload=<span class="literal">true</span> --pandora_Ip=127.0.0.1          <span class="comment">#测试运行</span></span><br></pre></td></tr></table></figure><p>接着检查一下8081端口上TokensTool是否正常运行，运行正常的话，使用 <code>Ctrl+c</code>停止运行。再使用pm2启动TokensTool：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start java -- -jar tokenstool.jar --server.port=8081 --deployWay=releases --deployPosition=/root/app --hotReload=<span class="literal">true</span> --pandora_Ip=127.0.0.1</span><br></pre></td></tr></table></figure><p>至此，TokensTool部署完毕。如果需要升级，与Bingo同理，下载覆盖后，使用kill停止原本的任务即可，pm2会自启TokensTool。</p><h3 id="Cloudflared"><a href="#Cloudflared" class="headerlink" title="Cloudflared"></a>Cloudflared</h3><p>为了便利的给上述服务添加域名，并使得没有IPv6的网络环境下也能访问上述服务，我使用了Cloudflare提供的隧道，其使用方法也是非常简单便利：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-amd64          <span class="comment">#下载Cloudflared客户端</span></span><br><span class="line"><span class="built_in">chmod</span> 777 cloudflared          <span class="comment">#赋权</span></span><br><span class="line">./cloudflared tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN          <span class="comment">#测试运行，我选择使用http2协议，ARGO_TOKEN应该替换为自己创建的隧道的那一串ey开头的TOKEN</span></span><br></pre></td></tr></table></figure><p>在Cloudflare的<a class="link"   href="https://one.dash.cloudflare.com/" >面板<i class="fas fa-external-link-alt"></i></a>中看到隧道上线，则运行正常。再使用 <code>Ctrl+c</code>停止运行，并使用pm2启动Cloudflared：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pm2 start ./cloudflared -- tunnel --edge-ip-version auto --protocol http2 --heartbeat-interval 10s run --token ARGO_TOKEN</span><br></pre></td></tr></table></figure><p>至此，Cloudflared部署完毕。如果需要升级，与Bingo同理，下载覆盖后，使用kill停止原本的任务即可，pm2会自启Cloudflared。</p><p>在Cloudflare的面板中给上述服务添加对应域名即可，比如3000端口的bingo，只要添加 <code>HTTP</code>协议的地址 <code>localhost:3000</code>即可。</p><h2 id="一些我没有部署但可以部署的应用"><a href="#一些我没有部署但可以部署的应用" class="headerlink" title="一些我没有部署但可以部署的应用"></a>一些我没有部署但可以部署的应用</h2><p>在Warp和Cloudflared的加持下，Hax的IPv6_only的VPS的使用基本上已经和有IPv4的服务器无异，仅仅在需要进行SSH或者SCP连接的时候必须要求本地有IPv6网络。而实际上，通过使用<a class="link"   href="https://github.com/filebrowser/filebrowser" >File Browser<i class="fas fa-external-link-alt"></i></a>和<a class="link"   href="https://github.com/tsl0922/ttyd" >TTYD<i class="fas fa-external-link-alt"></i></a>并使用Cloudflared隧道穿透出来，就变相实现了这两个协议所实现的功能在没有IPv6网络的情况下的使用。</p><p>上述的两个仓库都是单个可执行文件即可实现部署，这里不再赘述部署方式，仅仅记录运行命令，以便查找：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ttyd运行指令</span></span><br><span class="line">./ttyd -p 21022 -c admin:password -W bash          <span class="comment">#在21022端口运行ttyd，用户名为admin，密码为password，连接的命令行解释器为bash</span></span><br><span class="line">pm2 start ./ttyd -- -p 21022 -c admin:password -W bash          <span class="comment">#使用pm2运行</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># filebrowser运行指令</span></span><br><span class="line">./filebrowser -p 21021          <span class="comment">#在21021端口运行filebrowser，默认用户名和密码都为admin，登录后可以修改密码</span></span><br><span class="line">pm2 start ./filebrowser -- -p 21021          <span class="comment">#使用pm2运行</span></span><br></pre></td></tr></table></figure><p>此外，各种QQ机器人、Blog框架（如 <a class="link"   href="https://github.com/Lu7fer/Jar4Halo" >jar4halo<i class="fas fa-external-link-alt"></i></a>）、文件目录程序（如 <a class="link"   href="https://github.com/alist-org/alist" >alist<i class="fas fa-external-link-alt"></i></a>）、图床程序等等。因为此前已经把Python、Node.js、OpenJDK、PHP都安装好了，主流应用的环境问题都很好解决，多数只需要按照文档部署即可。</p><blockquote><figure class="highlight bash"><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></pre></td><td class="code"><pre><span class="line"><span class="comment"># jar4halo需要设置环境变量运行</span></span><br><span class="line"><span class="built_in">export</span> HALO_WORK_DIR=<span class="string">&quot;/root/halo/.halo2&quot;</span>          <span class="comment">#halo的工作目录设置为/root/halo/.halo2</span></span><br><span class="line"><span class="built_in">export</span> HALO_EXTERNAL_URL=<span class="string">&quot;https://Your_Domain&quot;</span>          <span class="comment">#设置halo的对外域名</span></span><br><span class="line">java -jar -Duser.timezone=Asia/Shanghai halo.jar          <span class="comment">#使用UTC+8时区</span></span><br></pre></td></tr></table></figure></blockquote><h2 id="文件的备份与转移"><a href="#文件的备份与转移" class="headerlink" title="文件的备份与转移"></a>文件的备份与转移</h2><p>如果你需要将服务器上的文件快速地下载到本地，亦或者是传输到另一台服务器上，可以使用<a class="link"   href="https://github.com/reruin/sharelist" >ShareList<i class="fas fa-external-link-alt"></i></a>。<br>这是一个一键脚本，用以在当前路径直接启动sharelist，并且把当前路径挂载到sharelist中：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -s https://raw.githubusercontent.com/k0baya/sharelist_repl/main/hax/share.sh)</span><br></pre></td></tr></table></figure><p>上述命令只能在AMD64架构的Linux机器上使用。sharelist固定运行在33001端口，因为其监听的是<code>127.0.0.1</code>所以无法使用<code>ip:port</code>进行访问，你可以选择用nginx或者直接用Cloudflared绑定33001端口到一个域名进行访问。进入sharelist的页面后，你可以直接把打包好的文件下载到本地或者在另外一台机器使用<code>wget -O 文件名 &#39;链接&#39;</code>的命令进行下载。</p><blockquote><p>另外把打包和解压的命令做个备份，我喜欢使用tar命令，这里只记录tar：</p><p>**打包：<code>tar -czvf 文件名.tar.gz 路径</code>**，比如打包整个<code>/root/app</code>路径，命名为<code>archive.tar.gz</code>，即为<code>tar -czvf archive.tar.gz /root/app</code></p><p>**解压：<code>tar -xzvf 文件名</code>**，比如解压刚刚打包的<code>archive.tar.gz</code>即为<code>tar -xzvf archive.tar.gz</code></p></blockquote><p>未完待续……</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;前些日子申请了一台&lt;a class=&quot;link&quot;   href=&quot;https://hax.co.id/&quot; &gt;Hax&lt;i class=&quot;fas fa-external-link-alt&quot;&gt;&lt;/i&gt;&lt;/a&gt;的IPv6_only的VPS，本来只搭了一个&lt;a class=&quot;link</summary>
      
    
    
    
    <category term="vps" scheme="https://saika.us.kg/categories/vps/"/>
    
    
    <category term="vps" scheme="https://saika.us.kg/tags/vps/"/>
    
    <category term="gpt" scheme="https://saika.us.kg/tags/gpt/"/>
    
    <category term="hax" scheme="https://saika.us.kg/tags/hax/"/>
    
  </entry>
  
  <entry>
    <title>qexo编辑器测试</title>
    <link href="https://saika.us.kg/2023/12/27/test-qexo-editor/"/>
    <id>https://saika.us.kg/2023/12/27/test-qexo-editor/</id>
    <published>2023-12-27T05:28:31.541Z</published>
    <updated>2023-12-27T05:39:36.666Z</updated>
    
    <content type="html"><![CDATA[<h1 id="这是一个标题"><a href="#这是一个标题" class="headerlink" title="这是一个标题"></a>这是一个标题</h1><h2 id="这是小标题"><a href="#这是小标题" class="headerlink" title="这是小标题"></a>这是小标题</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash start.sh</span><br></pre></td></tr></table></figure><p><code>main.js</code>文件</p><blockquote><p>注意：这只是测试。</p></blockquote><p><em>真的</em>只是<strong>测试</strong></p><p>不信你<a class="link"   href="https://baidu.com/" >加群<i class="fas fa-external-link-alt"></i></a></p><table><thead><tr><th>number</th><th>username</th></tr></thead><tbody><tr><td>1</td><td>admin</td></tr></tbody></table><p><img   src="http://img1.baidu.com/it/u=1985818502,3095912189&fm=253&app=138&f=JPEG?w=500&h=666" ></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;这是一个标题&quot;&gt;&lt;a href=&quot;#这是一个标题&quot; class=&quot;headerlink&quot; title=&quot;这是一个标题&quot;&gt;&lt;/a&gt;这是一个标题&lt;/h1&gt;&lt;h2 id=&quot;这是小标题&quot;&gt;&lt;a href=&quot;#这是小标题&quot; class=&quot;headerlink&quot; title=</summary>
      
    
    
    
    
    <category term="PaaS" scheme="https://saika.us.kg/tags/PaaS/"/>
    
    <category term="blog" scheme="https://saika.us.kg/tags/blog/"/>
    
    <category term="vercel" scheme="https://saika.us.kg/tags/vercel/"/>
    
  </entry>
  
</feed>
