-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
576 lines (283 loc) · 447 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>点滴记忆</title>
<subtitle>你知道的越多,你不知道的越多</subtitle>
<link href="https://blog.quickso.cn/atom.xml" rel="self"/>
<link href="https://blog.quickso.cn/"/>
<updated>2025-01-04T05:15:04.091Z</updated>
<id>https://blog.quickso.cn/</id>
<author>
<name>木子欢儿</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>使用tunasync搭建自己的开源软件镜像仓库</title>
<link href="https://blog.quickso.cn/2025/01/03/%E4%BD%BF%E7%94%A8tunasync%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93/"/>
<id>https://blog.quickso.cn/2025/01/03/%E4%BD%BF%E7%94%A8tunasync%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93/</id>
<published>2025-01-03T15:43:01.000Z</published>
<updated>2025-01-04T05:15:04.091Z</updated>
<content type="html"><![CDATA[<p>在开源软件的使用中,镜像仓库(Mirror Repository)扮演着至关重要的角色。它们为全球用户提供快速、可靠的软件下载服务。特别是在国内,由于网络限制,访问官方仓库往往较为缓慢,因此搭建一个自己的镜像仓库就显得尤为重要。而 **<a href="https://github.com/tuna/tunasync/">TunaSync</a>**,作为一个开源的同步工具,提供了简便的方式来搭建和管理自己的镜像仓库。</p><p><a href="https://github.com/tuna/tunasync">tunasync</a> 是<a href="https://mirrors.tuna.tsinghua.edu.cn/">清华大学 TUNA 镜像源</a>目前使用的镜像方案。</p><h2 id="1-准备工作"><a href="#1-准备工作" class="headerlink" title="1. 准备工作"></a>1. 准备工作</h2><p>镜像站需要一台服务器,如果有条件,建议准备一台专用的X86物理服务器作为镜像站的服务器。服务器推荐配置:</p><blockquote><p>CPU: 8 核心 2.5GHz 以上</p><p>内存: 64 GB以上</p><p>硬盘: 3TB 以上,越大越好</p><p>网络: 千兆上行带宽及以上</p><p>系统:Centos8/9及其衍生版本、Debian10/11/12及其衍生版本</p></blockquote><p>当然,如果条件不具备,以上配置可以无视,选择自己最好配置的机器即可,毕竟服务器配置还是取决于最终用户的需求。</p><p>特别说要说明的是,硬盘大小要求必须超过需要同步的源文件大小,比如需要同时同步 CentOS 与 Ubuntu,就需要准备一块 1.6T 以上大小的硬盘。每个镜像的具体大小可以在清华大学开源软件镜像站 <a href="https://mirrors.tuna.tsinghua.edu.cn/status/#syncing-status">同步状态</a> 页面查到。</p><h2 id="2-同步源与架构选择"><a href="#2-同步源与架构选择" class="headerlink" title="2. 同步源与架构选择"></a>2. 同步源与架构选择</h2><p>在官方提供的源列表中选择最方便的同步源(最好是支持 rsync 的国内镜像源,但国内目前提供 rsync 服务的镜像源不多,以下是网络收集的部分 rsync 源)。</p><p>Ubuntu 源列表:<a href="https://launchpad.net/ubuntu/+archivemirrors">https://launchpad.net/ubuntu/+archivemirrors</a></p><figure class="highlight awk"><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><code class="hljs awk">rsync:<span class="hljs-regexp">//mi</span>rrors.shuosc.org<span class="hljs-regexp">/ubuntu/</span><br>rsync:<span class="hljs-regexp">//mi</span>rrors.sohu.com<span class="hljs-regexp">/ubuntu/</span><br>rsync:<span class="hljs-regexp">//mi</span>rrors.tuna.tsinghua.edu.cn<span class="hljs-regexp">/ubuntu/</span><br>rsync:<span class="hljs-regexp">//mi</span>rrors.ustc.edu.cn<span class="hljs-regexp">/ubuntu/</span><br>rsync:<span class="hljs-regexp">//mi</span>rrors.yun-idc.com<span class="hljs-regexp">/ubuntu/</span><br></code></pre></td></tr></table></figure><p>CentOS 源列表:<a href="https://www.centos.org/download/mirrors/">https://www.centos.org/download/mirrors/</a></p><figure class="highlight awk"><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><code class="hljs awk">rsync:<span class="hljs-regexp">//mi</span>rrors.tuna.tsinghua.edu.cn<span class="hljs-regexp">/centos/</span><br>rsync:<span class="hljs-regexp">//mi</span>rror.es.its.nyu.edu<span class="hljs-regexp">/centos/</span><br>rsync:<span class="hljs-regexp">//</span>centos.sonn.com<span class="hljs-regexp">/CentOS/</span><br></code></pre></td></tr></table></figure><p>EPEL 源列表:<a href="https://www.centos.org/download/mirrors/">https://admin.fedoraproject.org/mirrormanager/mirrors/EPEL</a></p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">rsync:</span><span class="hljs-comment">//mirrors.yun-idc.com/epel</span><br><span class="hljs-symbol">rsync:</span><span class="hljs-comment">//rsync.mirrors.ustc.edu.cn/epel</span><br></code></pre></td></tr></table></figure><h2 id="3-开始安装"><a href="#3-开始安装" class="headerlink" title="3.开始安装"></a>3.开始安装</h2><h4 id="安装需要的软件"><a href="#安装需要的软件" class="headerlink" title="安装需要的软件"></a>安装需要的软件</h4><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cmake">yum <span class="hljs-keyword">install</span> rsync wget<br></code></pre></td></tr></table></figure><h4 id="下载tunasync"><a href="#下载tunasync" class="headerlink" title="下载tunasync"></a>下载tunasync</h4><figure class="highlight awk"><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><code class="hljs awk">wget https:<span class="hljs-regexp">//g</span>h-proxy.com<span class="hljs-regexp">/https:/</span><span class="hljs-regexp">/github.com/</span>tuna<span class="hljs-regexp">/tunasync/</span>releases<span class="hljs-regexp">/download/</span>v0.<span class="hljs-number">8.0</span>/tunasync-linux-amd64-bin.tar.gz<br><span class="hljs-comment">#基于amd64,如果是ARM系列,请去https://github.com/tuna/tunasync/releases自行替换下载一个</span><br>tar xf tunasync-linux-amd64-bin.tar.gz<br>mv tunasync <span class="hljs-regexp">/usr/</span>bin/<br>mv tunasynctl <span class="hljs-regexp">/usr/</span>bin/<br></code></pre></td></tr></table></figure><h4 id="创建仓库文件夹"><a href="#创建仓库文件夹" class="headerlink" title="创建仓库文件夹"></a>创建仓库文件夹</h4><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arduino">mkdir -p /home/www/mirrors<br></code></pre></td></tr></table></figure><h4 id="创建日志文件夹"><a href="#创建日志文件夹" class="headerlink" title="创建日志文件夹"></a>创建日志文件夹</h4><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arduino">mkdir -p /home/www/mirrors/logs<br></code></pre></td></tr></table></figure><h4 id="创建配置文件夹"><a href="#创建配置文件夹" class="headerlink" title="创建配置文件夹"></a>创建配置文件夹</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> /etc/tunasync<br></code></pre></td></tr></table></figure><h4 id="创建manager的配置文件"><a href="#创建manager的配置文件" class="headerlink" title="创建manager的配置文件"></a>创建manager的配置文件</h4><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs vim"><span class="hljs-keyword">vim</span> /etc/tunasync/manager.<span class="hljs-keyword">conf</span><br></code></pre></td></tr></table></figure><p>将以下内容根据自己的需求修改后写入manager的配置文件内</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></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">debug</span> = <span class="hljs-literal">false</span><br> <br><span class="hljs-section">[server]</span><br><span class="hljs-attr">addr</span> = <span class="hljs-string">"127.0.0.1"</span> <span class="hljs-comment">#manager服务的监听地址,默认127.0.0.1一般就可以了</span><br><span class="hljs-attr">port</span> = <span class="hljs-number">12345</span> <span class="hljs-comment"># manager服务监听端口</span><br><span class="hljs-attr">ssl_cert</span> = <span class="hljs-string">""</span> <span class="hljs-comment">#证书配置,可为空</span><br><span class="hljs-attr">ssl_key</span> = <span class="hljs-string">""</span> <span class="hljs-comment">#证书配置,可为空</span><br> <br><span class="hljs-section">[files]</span><br><span class="hljs-attr">db_type</span> = <span class="hljs-string">"bolt"</span><br><span class="hljs-attr">db_file</span> = <span class="hljs-string">"/etc/tunasync/manager.db"</span> <span class="hljs-comment">#数据库文件位置</span><br><span class="hljs-attr">ca_cert</span> = <span class="hljs-string">""</span><br></code></pre></td></tr></table></figure><h4 id="创建worker-conf配置文件"><a href="#创建worker-conf配置文件" class="headerlink" title="创建worker.conf配置文件"></a>创建worker.conf配置文件</h4><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs vim"><span class="hljs-keyword">vim</span> /etc/tunasync/worker.<span class="hljs-keyword">conf</span><br></code></pre></td></tr></table></figure><p>将以下内容根据自己的需求修改后写入worker的配置文件内,mirrors部分仅作示范写了两个,可以根据自身需要自由添加或删减</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></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[global]</span><br><span class="hljs-attr">name</span> = <span class="hljs-string">"worker"</span> <span class="hljs-comment"># worker名字</span><br><span class="hljs-attr">log_dir</span> = <span class="hljs-string">"/home/www/mirrors/logs/{{.Name}}"</span> <span class="hljs-comment"># 日志存储位置</span><br><span class="hljs-attr">mirror_dir</span> = <span class="hljs-string">"/home/www/mirrors"</span> <span class="hljs-comment"># 仓库存储位置</span><br><span class="hljs-attr">concurrent</span> = <span class="hljs-number">10</span> <span class="hljs-comment"># 线程数</span><br><span class="hljs-attr">interval</span> = <span class="hljs-number">240</span> <span class="hljs-comment"># 同步周期,单位分钟</span><br> <br><span class="hljs-section">[manager]</span><br><span class="hljs-attr">api_base</span> = <span class="hljs-string">"http://127.0.0.1:12345"</span> <span class="hljs-comment"># manager的API地址</span><br><span class="hljs-attr">token</span> = <span class="hljs-string">""</span><br><span class="hljs-attr">ca_cert</span> = <span class="hljs-string">""</span><br> <br><span class="hljs-section">[cgroup]</span><br><span class="hljs-attr">enable</span> = <span class="hljs-literal">false</span><br><span class="hljs-attr">base_path</span> = <span class="hljs-string">"/sys/fs/cgroup"</span><br><span class="hljs-attr">group</span> = <span class="hljs-string">"tunasync"</span><br> <br><span class="hljs-section">[server]</span><br><span class="hljs-attr">hostname</span> = <span class="hljs-string">"localhost"</span><br><span class="hljs-attr">listen_addr</span> = <span class="hljs-string">"127.0.0.1"</span><br><span class="hljs-attr">listen_port</span> = <span class="hljs-number">6000</span><br><span class="hljs-attr">ssl_cert</span> = <span class="hljs-string">""</span><br><span class="hljs-attr">ssl_key</span> = <span class="hljs-string">""</span><br> <br><span class="hljs-section">[[mirrors]]</span><br><span class="hljs-attr">name</span> = <span class="hljs-string">"centos"</span><br><span class="hljs-attr">provider</span> = <span class="hljs-string">"rsync"</span><br><span class="hljs-attr">upstream</span> = <span class="hljs-string">"rsync://ftp.kaist.ac.kr/CentOS/"</span><br><span class="hljs-attr">use_ipv6</span> = <span class="hljs-literal">false</span><br> <br><span class="hljs-section">[[mirrors]]</span><br><span class="hljs-attr">name</span> = <span class="hljs-string">"ubuntu"</span><br><span class="hljs-attr">provider</span> = <span class="hljs-string">"rsync"</span><br><span class="hljs-attr">upstream</span> = <span class="hljs-string">"rsync://ftp.kaist.ac.kr/ubuntu/"</span><br><span class="hljs-attr">use_ipv6</span> = <span class="hljs-literal">false</span><br></code></pre></td></tr></table></figure><h4 id="自定义同步脚本"><a href="#自定义同步脚本" class="headerlink" title="自定义同步脚本"></a>自定义同步脚本</h4><p>以Github为例</p><p>创建文件夹</p><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arduino">mkdir -p /home/www/mirrors/scripts<br></code></pre></td></tr></table></figure><p>在worker.conf文件添加</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></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[[mirrors]]</span><br><span class="hljs-attr">name</span> = <span class="hljs-string">"github-release"</span><br><span class="hljs-attr">provider</span> = <span class="hljs-string">"command"</span><br><span class="hljs-attr">upstream</span> = <span class="hljs-string">"https://api.github.com/repos/"</span><br><span class="hljs-attr">command</span> = <span class="hljs-string">"/home/www/mirrors/scripts/github-release.py"</span><br><span class="hljs-attr">interval</span> = <span class="hljs-number">1440</span><br><span class="hljs-attr">docker_image</span> = <span class="hljs-string">"tunathu/tunasync-scripts:latest"</span><br></code></pre></td></tr></table></figure><p>下载同步脚本</p><figure class="highlight awk"><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><code class="hljs awk">wget -P scripts<span class="hljs-regexp">/ https:/</span><span class="hljs-regexp">/gh-proxy.com/</span>https:<span class="hljs-regexp">//</span>raw.githubusercontent.com<span class="hljs-regexp">/muzihuaner/mi</span>rrors<span class="hljs-regexp">/refs/</span>heads<span class="hljs-regexp">/new/mi</span>rrors<span class="hljs-regexp">/scripts/gi</span>thub-release.py<br>wget -P scripts<span class="hljs-regexp">/ https:/</span><span class="hljs-regexp">/gh-proxy.com/</span>https:<span class="hljs-regexp">//</span>raw.githubusercontent.com<span class="hljs-regexp">/muzihuaner/mi</span>rrors<span class="hljs-regexp">/refs/</span>heads<span class="hljs-regexp">/new/mi</span>rrors<span class="hljs-regexp">/scripts/gi</span>thub-release.json<br>chmod +x scripts/github-release.py<br>vim scripts/github-release.py<br>vim scripts/github-release.json <span class="hljs-comment">#修改你要同步的仓库</span><br></code></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><code class="hljs bash">python3 scripts/github-release.py<br></code></pre></td></tr></table></figure><p>更多配置:<a href="https://github.com/tuna/tunasync/blob/master/docs/zh_CN/workers.conf">https://github.com/tuna/tunasync/blob/master/docs/zh_CN/workers.conf</a></p><p>更多脚本:<a href="https://github.com/tuna/tunasync-scripts">https://github.com/tuna/tunasync-scripts</a></p><h4 id="下载tunasync启动停止脚本"><a href="#下载tunasync启动停止脚本" class="headerlink" title="下载tunasync启动停止脚本"></a>下载tunasync启动停止脚本</h4><p><a href="https://github.com/whsir/tunasync-bin">https://github.com/whsir/tunasync-bin</a></p><figure class="highlight awk"><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><code class="hljs awk">wget -P <span class="hljs-regexp">/etc/i</span>nit.d<span class="hljs-regexp">/ https:/</span><span class="hljs-regexp">/gh-proxy.com/</span>https:<span class="hljs-regexp">//</span>raw.githubusercontent.com<span class="hljs-regexp">/whsir/</span>tunasync-bin<span class="hljs-regexp">/master/</span>tunasync-manager<br>wget -P <span class="hljs-regexp">/etc/i</span>nit.d<span class="hljs-regexp">/ https:/</span><span class="hljs-regexp">/gh-proxy.com/</span>https:<span class="hljs-regexp">//</span>raw.githubusercontent.com<span class="hljs-regexp">/whsir/</span>tunasync-bin<span class="hljs-regexp">/master/</span>tunasync-worker<br>chmod +x <span class="hljs-regexp">/etc/i</span>nit.d/tunasync-manager<br>chmod +x <span class="hljs-regexp">/etc/i</span>nit.d/tunasync-worker<br></code></pre></td></tr></table></figure><h4 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h4><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell">/etc/init.d/tuna<span class="hljs-built_in">sync-manager</span> <span class="hljs-built_in">start</span><br>/etc/init.d/tuna<span class="hljs-built_in">sync-worker</span> <span class="hljs-built_in">start</span><br></code></pre></td></tr></table></figure><h4 id="重启服务"><a href="#重启服务" class="headerlink" title="重启服务"></a>重启服务</h4><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs swift"><span class="hljs-regexp">/etc/</span><span class="hljs-keyword">init</span>.d<span class="hljs-operator">/</span>tunasync<span class="hljs-operator">-</span>manager restart<br><span class="hljs-regexp">/etc/</span><span class="hljs-keyword">init</span>.d<span class="hljs-operator">/</span>tunasync<span class="hljs-operator">-</span>worker restart<br></code></pre></td></tr></table></figure><p>查看服务状态</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs swift"><span class="hljs-regexp">/etc/</span><span class="hljs-keyword">init</span>.d<span class="hljs-operator">/</span>tunasync<span class="hljs-operator">-</span>manager status<br><span class="hljs-regexp">/etc/</span><span class="hljs-keyword">init</span>.d<span class="hljs-operator">/</span>tunasync<span class="hljs-operator">-</span>worker status<br></code></pre></td></tr></table></figure><p>到这里为止,自建仓库就算完成了,可以通过以下命令来查看进程</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">tunasynctl</span> list -p <span class="hljs-number">12345</span> --<span class="hljs-literal">all</span><br></code></pre></td></tr></table></figure><h4 id="添加计划任务"><a href="#添加计划任务" class="headerlink" title="添加计划任务"></a>添加计划任务</h4><p>创建日志文件</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">touch <span class="hljs-regexp">/home/</span>www<span class="hljs-regexp">/mirrors/</span>logs/wget.log<br></code></pre></td></tr></table></figure><p> 获取任务状态信息并保存为 json 文件</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">crontab -e</span><br></code></pre></td></tr></table></figure><p>添加</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">*<span class="hljs-regexp">/1 * * * * wget -q http:/</span><span class="hljs-regexp">/127.0.0.1:12345/</span>jobs -O <span class="hljs-regexp">/home/</span>www<span class="hljs-regexp">/mirrors/</span>jobs.json -o <span class="hljs-regexp">/home/</span>www<span class="hljs-regexp">/mirrors/</span>logs/wget.log<br></code></pre></td></tr></table></figure><p>验证</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">crontab -l</span><br></code></pre></td></tr></table></figure><h4 id="安装-Caddy-Web服务器"><a href="#安装-Caddy-Web服务器" class="headerlink" title="安装 Caddy Web服务器"></a>安装 Caddy Web服务器</h4><h4 id="配置访问权限"><a href="#配置访问权限" class="headerlink" title="配置访问权限"></a>配置访问权限</h4><p>镜像目录权限设置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chmod</span> 755 /home/www/mirrors<br></code></pre></td></tr></table></figure><p>SELINUX权限设置(可选)</p><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arduino">chcon -R -t <span class="hljs-type">httpd_sys_content_t</span> /home/www/mirrors<br></code></pre></td></tr></table></figure><h4 id="安装-Docker"><a href="#安装-Docker" class="headerlink" title="安装 Docker"></a>安装 Docker</h4><p>如果你还没有安装 Docker,可以使用脚本安装 Docker:</p><p><a href="https://getdocker.quickso.cn/">https://getdocker.quickso.cn/</a></p><p>创建Caddy文件夹</p><figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arduino">mkdir -p /home/www/Caddy<br></code></pre></td></tr></table></figure><p>创建Caddyfile</p><figure class="highlight arcade"><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><code class="hljs arcade">:<span class="hljs-number">80</span> {<br> root * <span class="hljs-regexp">/usr/</span>share/caddy<br> file_server browse<br>}<br></code></pre></td></tr></table></figure><p>为了简化部署,可以使用 <code>Docker Compose</code> 来管理 Caddy 服务和配置。</p><h4 id="创建-docker-compose-yml"><a href="#创建-docker-compose-yml" class="headerlink" title="创建 docker-compose.yml"></a>创建 <code>docker-compose.yml</code></h4><figure class="highlight yml"><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><code class="hljs yml"><span class="hljs-attr">version:</span> <span class="hljs-string">'3'</span><br><br><span class="hljs-attr">services:</span><br> <span class="hljs-attr">caddy:</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">caddy:latest</span><br> <span class="hljs-attr">container_name:</span> <span class="hljs-string">caddy</span><br> <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">"443:443"</span><br> <span class="hljs-attr">volumes:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">/home/www/Caddy/Caddyfile:/etc/caddy/Caddyfile</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">/home/www/mirrors:/usr/share/caddy</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">caddy_data:/data</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">caddy_config:/config</span><br><br><span class="hljs-attr">volumes:</span><br> <span class="hljs-attr">caddy_data:</span><br> <span class="hljs-attr">caddy_config:</span><br></code></pre></td></tr></table></figure><h4 id="启动-Caddy-服务"><a href="#启动-Caddy-服务" class="headerlink" title="启动 Caddy 服务"></a>启动 Caddy 服务</h4><p>运行以下命令启动 Caddy 服务:</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">docker-compose up -d</span><br></code></pre></td></tr></table></figure><p>并根据需要补充 <code>index.html</code> 和配置的 web 文件到 <code>/mirrors</code> 目录。</p><p>网页文件可以在 <a href="https://github.com/muzihuaner/mirrors/tree/new/mirrors%E4%B8%8A%E4%B8%8B%E8%BD%BD%E4%BD%BF%E7%94%A8%EF%BC%88%E6%89%80%E6%9C%89">https://github.com/muzihuaner/mirrors/tree/new/mirrors上下载使用(所有</a> web 文件放到 <code>/mirrors</code> 目录即可)。</p><p>文件夹层级</p><figure class="highlight axapta"><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><code class="hljs axapta">.<br>└── www<br> └── mirrors 网站根目录<br> ├── <span class="hljs-keyword">index</span>.html 首页<br> ├── jobs.json 状态信息<br> ├── logs 日志<br> ├── scripts 脚本<br> ├── <span class="hljs-keyword">static</span> 网页静态资源<br> ├── status 服务器状态网页目录<br></code></pre></td></tr></table></figure><p>至此,同步服务以及 web 访问服务全部搭建完成,内网的小伙伴们可以通过浏览器访问镜像站了 <a href="http://服务器ip/">http://服务器IP/</a>。</p><h4 id="文章参考"><a href="#文章参考" class="headerlink" title="文章参考"></a>文章参考</h4><p><a href="http://weyo.me/pages/techs/how-to-make-a-mirror-site/">http://weyo.me/pages/techs/how-to-make-a-mirror-site/</a></p><p><a href="https://blog.lussac.net/archives/342/">https://blog.lussac.net/archives/342/</a></p><p><a href="https://github.com/tuna/tunasync">https://github.com/tuna/tunasync</a></p><p><a href="https://blog.whsir.com/post-5094.html">https://blog.whsir.com/post-5094.html</a></p><p><a href="https://www.shellop.com/archives/36">https://www.shellop.com/archives/36</a></p><p><a href="https://fangpsh.github.io/posts/2014/2014-01-01.html">https://fangpsh.github.io/posts/2014/2014-01-01.html</a></p>]]></content>
<summary type="html"><p>在开源软件的使用中,镜像仓库(Mirror Repository)扮演着至关重要的角色。它们为全球用户提供快速、可靠的软件下载服务。特别是在国内,由于网络限制,访问官方仓库往往较为缓慢,因此搭建一个自己的镜像仓库就显得尤为重要。而 **<a href="https://gi</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="开源" scheme="https://blog.quickso.cn/tags/%E5%BC%80%E6%BA%90/"/>
<category term="tunasync" scheme="https://blog.quickso.cn/tags/tunasync/"/>
</entry>
<entry>
<title>Caddy Docker版本安装部署</title>
<link href="https://blog.quickso.cn/2025/01/01/CaddyDocker%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/"/>
<id>https://blog.quickso.cn/2025/01/01/CaddyDocker%E7%89%88%E6%9C%AC%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/</id>
<published>2025-01-01T03:58:52.000Z</published>
<updated>2025-01-01T04:05:48.072Z</updated>
<content type="html"><![CDATA[<p>Caddy 是一款强大的 Web 服务器,具有自动 HTTPS 配置、简易的配置文件和多功能反向代理等功能。本文将通过 Docker 容器的方式部署 Caddy,并介绍如何配置 HTTPS、Web 服务、反向代理和负载均衡。</p><p>官方网站:<a href="https://caddyserver.com/">https://caddyserver.com/</a></p><p>官方文档:<a href="https://caddyserver.com/docs/">https://caddyserver.com/docs/</a></p><h3 id="1-安装和部署-Caddy-Docker-容器"><a href="#1-安装和部署-Caddy-Docker-容器" class="headerlink" title="1. 安装和部署 Caddy Docker 容器"></a>1. 安装和部署 Caddy Docker 容器</h3><h4 id="1-1-安装-Docker"><a href="#1-1-安装-Docker" class="headerlink" title="1.1 安装 Docker"></a>1.1 安装 Docker</h4><p>如果你还没有安装 Docker,可以通过以下命令安装 Docker:</p><p><a href="https://getdocker.quickso.cn/">https://getdocker.quickso.cn/</a></p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">curl -fsSL https:<span class="hljs-regexp">//</span>cdn.jsdelivr.net<span class="hljs-regexp">/gh/mu</span>zihuaner<span class="hljs-regexp">/docker-install@master/i</span>nstall.sh -o install-docker.sh<br></code></pre></td></tr></table></figure><h4 id="1-2-拉取-Caddy-Docker-镜像"><a href="#1-2-拉取-Caddy-Docker-镜像" class="headerlink" title="1.2 拉取 Caddy Docker 镜像"></a>1.2 拉取 Caddy Docker 镜像</h4><p>通过 Docker Hub 拉取 Caddy 镜像:</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">docker</span> pull caddy:latest<br></code></pre></td></tr></table></figure><h4 id="1-3-运行-Caddy-容器"><a href="#1-3-运行-Caddy-容器" class="headerlink" title="1.3 运行 Caddy 容器"></a>1.3 运行 Caddy 容器</h4><p>创建一个名为 <code>caddy</code> 的 Docker 容器并启动:</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">docker</span> run -d --name caddy -p <span class="hljs-number">80</span>:<span class="hljs-number">80</span> -p <span class="hljs-number">443</span>:<span class="hljs-number">443</span> caddy<br></code></pre></td></tr></table></figure><p>这将启动一个 Caddy 容器,并映射主机的 80 和 443 端口到容器内的对应端口。</p><h3 id="2-配置-HTTPS"><a href="#2-配置-HTTPS" class="headerlink" title="2. 配置 HTTPS"></a>2. 配置 HTTPS</h3><p>Caddy 会自动为你配置 HTTPS,前提是你已正确配置了 DNS 和域名。通过 <code>Caddyfile</code> 配置文件,你可以指定 HTTPS 的配置。</p><h4 id="2-1-创建-Caddyfile-配置文件"><a href="#2-1-创建-Caddyfile-配置文件" class="headerlink" title="2.1 创建 Caddyfile 配置文件"></a>2.1 创建 Caddyfile 配置文件</h4><p>创建一个 <code>Caddyfile</code> 文件(例如,<code>Caddyfile</code>):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">touch</span> Caddyfile<br></code></pre></td></tr></table></figure><p>在该文件中配置域名和 HTTPS 设置:</p><figure class="highlight dts"><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><code class="hljs dts">your-domain.<span class="hljs-title class_">com</span> <span class="hljs-punctuation">{</span><br> <span class="hljs-meta"># 自动启用 HTTPS</span><br> root * <span class="hljs-keyword">/usr/</span>share/caddy<br> file_server<br><span class="hljs-punctuation">}</span><br></code></pre></td></tr></table></figure><p>Caddy 会自动为 <code>your-domain.com</code> 配置 HTTPS,并且通过 Let’s Encrypt 获取 SSL 证书。</p><h4 id="2-2-挂载-Caddyfile-到-Docker-容器"><a href="#2-2-挂载-Caddyfile-到-Docker-容器" class="headerlink" title="2.2 挂载 Caddyfile 到 Docker 容器"></a>2.2 挂载 Caddyfile 到 Docker 容器</h4><p>修改 Docker 启动命令,挂载 <code>Caddyfile</code> 配置文件:</p><figure class="highlight ruby"><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><code class="hljs ruby">docker run -d --name caddy -p <span class="hljs-number">80</span><span class="hljs-symbol">:</span><span class="hljs-number">80</span> -p <span class="hljs-number">443</span><span class="hljs-symbol">:</span><span class="hljs-number">443</span> \<br> -v /path/to/<span class="hljs-title class_">Caddyfile</span><span class="hljs-symbol">:/etc/caddy/Caddyfile</span> \<br> caddy<br></code></pre></td></tr></table></figure><p>请将 <code>/path/to/Caddyfile</code> 替换为你的 <code>Caddyfile</code> 文件的路径。</p><h3 id="3-配置-Web-服务"><a href="#3-配置-Web-服务" class="headerlink" title="3. 配置 Web 服务"></a>3. 配置 Web 服务</h3><p>Caddy 支持静态文件服务和其他 Web 应用的反向代理。这里我们以静态网站为例,配置 Caddy 来提供 Web 服务。</p><h4 id="3-1-配置静态网站"><a href="#3-1-配置静态网站" class="headerlink" title="3.1 配置静态网站"></a>3.1 配置静态网站</h4><p>修改 <code>Caddyfile</code> 以指向你的网站目录:</p><figure class="highlight pgsql"><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><code class="hljs pgsql">your-<span class="hljs-keyword">domain</span>.com {<br> root * /<span class="hljs-type">path</span>/<span class="hljs-keyword">to</span>/your/site<br> file_server<br>}<br></code></pre></td></tr></table></figure><p>其中,<code>/path/to/your/site</code> 是你的静态网站所在的目录。</p><h4 id="3-2-挂载网站目录到-Docker-容器"><a href="#3-2-挂载网站目录到-Docker-容器" class="headerlink" title="3.2 挂载网站目录到 Docker 容器"></a>3.2 挂载网站目录到 Docker 容器</h4><figure class="highlight awk"><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><code class="hljs awk">docker run -d --name caddy -p <span class="hljs-number">80</span>:<span class="hljs-number">80</span> -p <span class="hljs-number">443</span>:<span class="hljs-number">443</span> \<br> -v <span class="hljs-regexp">/path/</span>to<span class="hljs-regexp">/Caddyfile:/</span>etc<span class="hljs-regexp">/caddy/</span>Caddyfile \<br> -v <span class="hljs-regexp">/path/</span>to<span class="hljs-regexp">/your/</span>site:<span class="hljs-regexp">/usr/</span>share/caddy \<br> caddy<br></code></pre></td></tr></table></figure><p>这样,Caddy 将提供你的静态网站,并自动为其启用 HTTPS。</p><h3 id="4-配置反向代理"><a href="#4-配置反向代理" class="headerlink" title="4. 配置反向代理"></a>4. 配置反向代理</h3><p>Caddy 可以很容易地配置反向代理,用于将请求转发到后端服务。假设你有一个后端 API 或应用运行在其他服务器或容器中。</p><h4 id="4-1-配置反向代理"><a href="#4-1-配置反向代理" class="headerlink" title="4.1 配置反向代理"></a>4.1 配置反向代理</h4><p>在 <code>Caddyfile</code> 中配置反向代理:</p><figure class="highlight vim"><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><code class="hljs vim">your-domain.<span class="hljs-keyword">com</span> {<br> reverse_proxy localhos<span class="hljs-variable">t:5000</span><br>}<br></code></pre></td></tr></table></figure><p>这将把所有访问 <code>your-domain.com</code> 的请求转发到本地的 <code>localhost:5000</code>(假设后端服务运行在 5000 端口)。</p><h4 id="4-2-反向代理多个后端服务"><a href="#4-2-反向代理多个后端服务" class="headerlink" title="4.2 反向代理多个后端服务"></a>4.2 反向代理多个后端服务</h4><p>你还可以配置多个后端服务进行负载均衡:</p><figure class="highlight vim"><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><code class="hljs vim">your-domain.<span class="hljs-keyword">com</span> {<br> reverse_proxy /api/* localhos<span class="hljs-variable">t:5000</span> localhos<span class="hljs-variable">t:5001</span><br> reverse_proxy /app/* localhos<span class="hljs-variable">t:6000</span> localhos<span class="hljs-variable">t:6001</span><br>}<br></code></pre></td></tr></table></figure><p>此配置会根据请求路径(如 <code>/api/*</code> 和 <code>/app/*</code>)将请求分发到不同的后端服务。</p><h3 id="5-配置负载均衡"><a href="#5-配置负载均衡" class="headerlink" title="5. 配置负载均衡"></a>5. 配置负载均衡</h3><p>Caddy 提供了内置的负载均衡支持。你可以在 <code>reverse_proxy</code> 配置中指定多个后端服务,Caddy 会自动进行负载均衡。</p><h4 id="5-1-配置负载均衡"><a href="#5-1-配置负载均衡" class="headerlink" title="5.1 配置负载均衡"></a>5.1 配置负载均衡</h4><figure class="highlight vim"><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><code class="hljs vim">your-domain.<span class="hljs-keyword">com</span> {<br> reverse_proxy localhos<span class="hljs-variable">t:5000</span> localhos<span class="hljs-variable">t:5001</span> localhos<span class="hljs-variable">t:5002</span> {<br> lb_policy round_robin<br> }<br>}<br></code></pre></td></tr></table></figure><p>上面的配置会将请求轮询地分发到 <code>localhost:5000</code>、<code>localhost:5001</code> 和 <code>localhost:5002</code>。</p><h4 id="5-2-负载均衡策略"><a href="#5-2-负载均衡策略" class="headerlink" title="5.2 负载均衡策略"></a>5.2 负载均衡策略</h4><p>Caddy 支持多种负载均衡策略,如:</p><ul><li><code>round_robin</code>(默认):轮询。</li><li><code>least_conn</code>:最少连接数优先。</li><li><code>random</code>:随机选择。</li></ul><p>你可以通过设置 <code>lb_policy</code> 来选择负载均衡策略:</p><figure class="highlight vim"><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><code class="hljs vim">your-domain.<span class="hljs-keyword">com</span> {<br> reverse_proxy localhos<span class="hljs-variable">t:5000</span> localhos<span class="hljs-variable">t:5001</span> localhos<span class="hljs-variable">t:5002</span> {<br> lb_policy least_conn<br> }<br>}<br></code></pre></td></tr></table></figure><h3 id="6-配置-Caddy-以支持-HTTPS-和自动证书续期"><a href="#6-配置-Caddy-以支持-HTTPS-和自动证书续期" class="headerlink" title="6. 配置 Caddy 以支持 HTTPS 和自动证书续期"></a>6. 配置 Caddy 以支持 HTTPS 和自动证书续期</h3><p>Caddy 会自动管理 HTTPS 证书的获取和续期,无需额外配置。只要你的域名指向正确的 IP 地址,Caddy 就会自动通过 Let’s Encrypt 获取证书。</p><h4 id="6-1-配置-DNS"><a href="#6-1-配置-DNS" class="headerlink" title="6.1 配置 DNS"></a>6.1 配置 DNS</h4><p>确保你的域名的 DNS 记录指向运行 Caddy 的服务器的 IP 地址。</p><figure class="highlight pgsql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs pgsql">your-<span class="hljs-keyword">domain</span>.com -> <your-<span class="hljs-keyword">server</span>-ip><br></code></pre></td></tr></table></figure><h3 id="7-使用-Docker-Compose-管理-Caddy"><a href="#7-使用-Docker-Compose-管理-Caddy" class="headerlink" title="7. 使用 Docker Compose 管理 Caddy"></a>7. 使用 Docker Compose 管理 Caddy</h3><p>为了简化部署,可以使用 <code>Docker Compose</code> 来管理 Caddy 服务和配置。</p><h4 id="7-1-创建-docker-compose-yml"><a href="#7-1-创建-docker-compose-yml" class="headerlink" title="7.1 创建 docker-compose.yml"></a>7.1 创建 <code>docker-compose.yml</code></h4><figure class="highlight yml"><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><code class="hljs yml"><span class="hljs-attr">version:</span> <span class="hljs-string">'3'</span><br><br><span class="hljs-attr">services:</span><br> <span class="hljs-attr">caddy:</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">caddy:latest</span><br> <span class="hljs-attr">container_name:</span> <span class="hljs-string">caddy</span><br> <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">"80:80"</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">"443:443"</span><br> <span class="hljs-attr">volumes:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">./Caddyfile:/etc/caddy/Caddyfile</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">./site:/usr/share/caddy</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">caddy_data:/data</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">caddy_config:/config</span><br><br><span class="hljs-attr">volumes:</span><br> <span class="hljs-attr">caddy_data:</span><br> <span class="hljs-attr">caddy_config:</span><br></code></pre></td></tr></table></figure><h4 id="7-2-启动-Caddy-服务"><a href="#7-2-启动-Caddy-服务" class="headerlink" title="7.2 启动 Caddy 服务"></a>7.2 启动 Caddy 服务</h4><p>运行以下命令启动 Caddy 服务:</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">docker-compose up -d</span><br></code></pre></td></tr></table></figure><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>通过本文,你学会了如何使用 Docker 部署 Caddy,并配置了以下功能:</p><ul><li><strong>自动 HTTPS</strong>:Caddy 会自动为你提供免费的 SSL 证书并进行证书续期。</li><li><strong>Web 服务</strong>:可以通过 Caddy 提供静态网站。</li><li><strong>反向代理</strong>:可以将请求转发到其他后端服务。</li><li><strong>负载均衡</strong>:Caddy 可以在多个后端服务之间进行负载均衡。</li></ul><p>使用 Docker 和 Caddy 可以大大简化 Web 服务的部署与配置。如果需要更多自定义功能,Caddy 的文档中有丰富的选项可供参考。</p>]]></content>
<summary type="html"><p>Caddy 是一款强大的 Web 服务器,具有自动 HTTPS 配置、简易的配置文件和多功能反向代理等功能。本文将通过 Docker 容器的方式部署 Caddy,并介绍如何配置 HTTPS、Web 服务、反向代理和负载均衡。</p>
<p>官方网站:<a href="htt</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Caddy" scheme="https://blog.quickso.cn/tags/Caddy/"/>
<category term="Docker" scheme="https://blog.quickso.cn/tags/Docker/"/>
</entry>
<entry>
<title>Virtualizor部署及安装</title>
<link href="https://blog.quickso.cn/2024/12/24/Virtualizor%E9%83%A8%E7%BD%B2%E5%8F%8A%E5%AE%89%E8%A3%85/"/>
<id>https://blog.quickso.cn/2024/12/24/Virtualizor%E9%83%A8%E7%BD%B2%E5%8F%8A%E5%AE%89%E8%A3%85/</id>
<published>2024-12-24T11:36:32.000Z</published>
<updated>2024-12-25T14:50:48.153Z</updated>
<content type="html"><![CDATA[<blockquote><p><strong>Virtualizor</strong> 是一款强大的虚拟化管理面板,允许用户轻松地创建、管理和维护虚拟机。它支持多种虚拟化技术,包括 KVM、Xen、OpenVZ 和 LXC 等,是一个广泛用于托管公司和云服务提供商的工具。</p><h3 id="主要功能:"><a href="#主要功能:" class="headerlink" title="主要功能:"></a>主要功能:</h3><ol><li><strong>多种虚拟化技术支持</strong>:如上所述,Virtualizor 支持 KVM、Xen、OpenVZ 和 LXC,不同的虚拟化技术可以根据需求进行选择。</li><li><strong>简化的用户界面</strong>:它为管理员和最终用户提供了简洁且易于使用的管理界面,用户可以通过浏览器轻松访问并管理虚拟机。</li><li><strong>自动化创建和管理虚拟机</strong>:管理员可以自动化虚拟机的创建、删除、重启和克隆等任务。</li><li><strong>资源监控和统计</strong>:提供对虚拟机的资源使用情况(如 CPU、内存、硬盘和网络带宽等)的实时监控。</li><li><strong>用户管理</strong>:支持多用户系统,管理员可以创建多个虚拟主机账户,并根据权限限制其管理功能。</li><li><strong>多种操作系统支持</strong>:支持多种主流操作系统,如 Linux、Windows 等的虚拟化。</li><li><strong>高可用性与灾备</strong>:对于企业级用户,Virtualizor 提供高可用性(HA)功能,确保虚拟机在物理服务器出现故障时可以继续运行。</li></ol><h3 id="使用场景:"><a href="#使用场景:" class="headerlink" title="使用场景:"></a>使用场景:</h3><ul><li><strong>VPS托管</strong>:Virtualizor 是虚拟专用服务器(VPS)托管提供商常用的工具,能够帮助他们提供给客户管理虚拟主机的接口。</li><li><strong>云计算平台</strong>:它可用作管理云计算资源的工具,支持基于虚拟机的弹性伸缩。</li><li><strong>企业数据中心管理</strong>:对于需要管理大量虚拟化资源的企业,Virtualizor 提供了简便的集中式管理功能。</li></ul></blockquote><h2 id="安装教程"><a href="#安装教程" class="headerlink" title="安装教程"></a>安装教程</h2><p>环境准备:使用<strong>Almalinux8</strong>作为演示系统。在执行操作前,建议您备份所有数据。</p><p>更新一下</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs css">yum update -<span class="hljs-attribute">y</span><br></code></pre></td></tr></table></figure><h3 id="1-开心一下"><a href="#1-开心一下" class="headerlink" title="1.开心一下"></a>1.开心一下</h3><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><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"152.53.53.249 api.virtualizor.com"</span> >> /etc/hosts<br><span class="hljs-built_in">sudo</span> chattr +i /etc/hosts<br></code></pre></td></tr></table></figure><h3 id="2-创建虚拟磁盘"><a href="#2-创建虚拟磁盘" class="headerlink" title="2.创建虚拟磁盘"></a>2.创建虚拟磁盘</h3><p>我们将会创建一个raw格式的虚拟磁盘,并挂载到您的系统上,命令如下:(下面的seek=后跟的是您想要创建的磁盘大小,这里大约是80G,这个命令会创建一个松散文件,不会占用您的磁盘空间,它会随着写入数据而增大。)(想超售?那就拉大虚拟磁盘)</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><code class="hljs bash"><span class="hljs-comment">#不占空间,写个80G</span><br><span class="hljs-built_in">dd</span> <span class="hljs-keyword">if</span>=/dev/zero of=/lxcdisk.img bs=1M seek=80000 count=0<br>losetup /dev/loop0 /lxcdisk.img<br><span class="hljs-comment">#加入开机启动</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"losetup /dev/loop0 /lxcdisk.img"</span>>>/etc/rc.local<br><span class="hljs-built_in">chmod</span> +x /etc/rc.local<br><span class="hljs-comment">#分区</span><br>fdisk /dev/loop0<br></code></pre></td></tr></table></figure><p>执行如图操作,空的地方直接回车使用默认值就好。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/QmQu6Ac9H5BJFpKQQnJg5AjYfq6ZesWbScTrURK9p4v1h8%3Ffilename%3Dimage.png" alt="img"></p><p>之后,运行partprobe刷新磁盘。完成后,运行下面命令创建必要卷组,需要确认请输入y</p><figure class="highlight smali"><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><code class="hljs smali">yum install lvm2 -y<br>pvcreate /dev/loop0<br>vgcreate -s 32M VolGroup01 /dev/loop0<br></code></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><code class="hljs bash">losetup /dev/loop0 /lxcdisk.img<br></code></pre></td></tr></table></figure><p>重新挂载。</p><h3 id="3-安装Virtualizor"><a href="#3-安装Virtualizor" class="headerlink" title="3.安装Virtualizor"></a>3.安装Virtualizor</h3><p>执行如下命令,将email后换成您自己的,安装后输入y确认重启。</p><figure class="highlight vim"><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><code class="hljs vim">wget –<span class="hljs-keyword">N</span> http://<span class="hljs-keyword">files</span>.virtualizor.<span class="hljs-keyword">com</span>/install.<span class="hljs-keyword">sh</span><br>chmod <span class="hljs-number">0755</span> install.<span class="hljs-keyword">sh</span><br>./install.<span class="hljs-keyword">sh</span> email=admin@huangetech.<span class="hljs-keyword">com</span> kernel=lxc<br></code></pre></td></tr></table></figure><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/84c2f0972238eb24379e5fba3595f621.png" alt="image"></p><p>推荐使用国外服务器,国内服务器第二步有点慢~</p><p>可以将脚本里的改成我的Softaculous国内镜像 websoft.quickso.cn</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">mirror_url</span>=files.softaculous.com<br></code></pre></td></tr></table></figure><p>然后打开您的IP:4085/4084访问管理页面,使用您的root密码登录</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAchmFWWG1-YxSFgX44Dfm8oto7QmCAAClQ8AAmSdsVRyc9RxCZRc3TQE.png" alt="Alt Text"></p><p>Virtualizor使用的端口为4081 - 4085,如果登不上可以考虑防火墙的问题:</p><figure class="highlight nsis"><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><code class="hljs nsis">首先确保防火墙是开启状态:<br><span class="hljs-params">system</span>ctl status firewalld<br>开启防火墙:<br><span class="hljs-params">system</span>ctl start firewalld<br>关闭防火墙:<br><span class="hljs-params">system</span>ctl stop firewalld<br>开机启动防火墙:<br><span class="hljs-params">system</span>ctl enable firewalld<br>取消开机启动防火墙:<br><span class="hljs-params">system</span>ctl disable firewalld<br></code></pre></td></tr></table></figure><p>添加存储:打开Virtualizor Admin Panel -> Storage -> Add Storage,按下面介绍填写并提交。</p><figure class="highlight pgsql"><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><code class="hljs pgsql"><span class="hljs-type">Name</span>:随意<br><span class="hljs-keyword">Server</span>:localhost<br><span class="hljs-keyword">Storage</span> <span class="hljs-keyword">Type</span> :LVM<br><span class="hljs-keyword">Storage</span> <span class="hljs-type">Path</span>: 储存路径(LVM卷组路径,如果用我上面的那种的话就填/dev/VolGroup01)<br>Overcommit:虚拟盘有多大写多大,这里是<span class="hljs-number">80</span><br>Alert Threshold: 告警(就是如果硬盘占用超过这个值就会提示你,一般不变就行了)<br><span class="hljs-keyword">Primary</span> <span class="hljs-keyword">Storage</span>: 如果你只有这一个硬盘请勾选,否则WHMCS开机器会报错<br></code></pre></td></tr></table></figure><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAcdmFWV03KoHa7krVDfsy1oysU__EgAClA8AAmSdsVSsZKL2RRyCejQE.png" alt="Alt Text"></p><h3 id="4-构建虚拟网卡"><a href="#4-构建虚拟网卡" class="headerlink" title="4.构建虚拟网卡"></a>4.构建虚拟网卡</h3><p>官方文档</p><p><a href="https://www.virtualizor.com/docs/admin/manage-vps-domain-forwarding/">https://www.virtualizor.com/docs/admin/manage-vps-domain-forwarding/</a></p><p>然后运行下面命令</p><p>vi /etc/sysconfig/network-scripts/ifcfg-intbr0<br>拷贝下面内容填写进去:</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></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-attr">DEVICE</span>=br0<br><span class="hljs-attr">ONBOOT</span>=<span class="hljs-literal">yes</span><br><span class="hljs-attr">TYPE</span>=Bridge<br><span class="hljs-attr">BOOTPROTO</span>=static<br><span class="hljs-attr">IPADDR</span>=<span class="hljs-number">10.0</span>.<span class="hljs-number">1.1</span><br><span class="hljs-attr">NETMASK</span>=<span class="hljs-number">255.255</span>.<span class="hljs-number">255.0</span><br></code></pre></td></tr></table></figure><p>然后重启网络</p><figure class="highlight maxima"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs maxima">systemctl <span class="hljs-built_in">restart</span> NetworkManager.service<br></code></pre></td></tr></table></figure><p>打开Admin Panel > IP Pool > Create IP Pool,按照下面填写并提交</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">name</span> 随意<br>Gateway <span class="hljs-number">10.0.1.1</span><br>netmask <span class="hljs-number">255.255.255.0</span><br>nameserver1/<span class="hljs-number">2</span> 选择Google就好<br>First IP <span class="hljs-number">10.0.1.2</span><br>Last IP <span class="hljs-number">10.0.1.254</span><br>启用 VLAN 填入 br0<br>其他不变,点保存<br></code></pre></td></tr></table></figure><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241225224531513.png" alt="image-20241225224531513"></p><h3 id="5-下载系统镜像"><a href="#5-下载系统镜像" class="headerlink" title="5.下载系统镜像"></a>5.下载系统镜像</h3><p>打开Virtualizor Admin Panel -> Media -> OS Templates Browser,Type选LXC,勾上你想要的,提交。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241225224401783.png" alt="image-20241225224401783"></p><h3 id="6-创建小鸡"><a href="#6-创建小鸡" class="headerlink" title="6.创建小鸡"></a>6.创建小鸡</h3><p>如果你自己玩的,就可以去开小鸡了,如果还想着对接whmcs就设置一下小鸡套餐。</p><ul><li>设置Plan</li></ul><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241225224751841.png" alt="image-20241225224751841"></p><ul><li>创建虚拟机</li></ul><p>选择刚设置好的plan,基本不用设置。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241225224918781.png" alt="image-20241225224918781"></p><h3 id="7-设置NAT端口转发"><a href="#7-设置NAT端口转发" class="headerlink" title="7.设置NAT端口转发"></a>7.设置NAT端口转发</h3><p>执行</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">wget -N --no-check-certificate <span class="hljs-string">"https://github.com/ldayday/virtualizor-iptables/releases/download/1.1.1/iptables-pf.sh"</span>&&<span class="hljs-built_in">chmod</span> +x ./iptables-pf.sh<br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">bash ./iptables-pf.sh<br></code></pre></td></tr></table></figure><p>初次使用脚本<strong>请务必执行</strong> 1.安装 iptables</p><p>然后选择 4. 添加 iptables 端口转发<br>比如:</p><figure class="highlight armasm"><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><code class="hljs armasm"><span class="hljs-symbol">iptables</span>欲转发至的远程端口:<span class="hljs-number">22</span>,远程<span class="hljs-built_in">ip</span>:就是LXC小鸡的<span class="hljs-built_in">IP</span><br>本地监听端口,你挑一个喜欢的,比如 <span class="hljs-number">50000</span><br>本服务器公网 <span class="hljs-built_in">ip</span>,一般这个直接回车<br>转发类型:<span class="hljs-number">1</span>.TCP 或者默认回车就好<br>然后按提示操作,成功后,就可以在外面像正常的vps那样,用母鸡的公网<span class="hljs-built_in">ip</span>,端口用刚刚设置的那个<span class="hljs-number">50000</span> ssh到nat鸡了。<br>假如你要一次性设置<span class="hljs-number">20</span>个转发端口那么下面举例子:<br><span class="hljs-symbol">iptables</span>欲转发至的远程端口:<span class="hljs-number">50001</span>-<span class="hljs-number">50019</span>,远程<span class="hljs-built_in">IP</span>:就是你创建的vps的<span class="hljs-built_in">IP</span><br>本地监听端口:<span class="hljs-number">50001</span>-<span class="hljs-number">50019</span><br>本服务器公网 <span class="hljs-built_in">ip</span>,回车<br>转发类型:<span class="hljs-number">3</span>.TCP+UDP<br></code></pre></td></tr></table></figure><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241225224954037.png" alt="image-20241225224954037"></p><p>到这里,这个nat机器可以正常访问了</p><p>这个时候,还需要执行一条ipt指令,才能让VPS正常联网</p><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">iptables</span> -t nat -A POSTROUTING -s <span class="hljs-number">10.0.0.0</span>/<span class="hljs-number">24</span> -j MASQUERADE<br></code></pre></td></tr></table></figure><h3 id="8-对接WHMCS"><a href="#8-对接WHMCS" class="headerlink" title="8..对接WHMCS"></a>8..对接WHMCS</h3><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAb1mFWTkhWq05LnO_yjfE-KnhVjPfwACig8AAmSdsVTLYWWqxS_y2jQE.png" alt="Alt Text"></p><p>这里要提一下的是CPU Units,这是类似优先值的概念,比如你开了两台小鸡,一台CPU Units设置为1000,另一台设置为2000,那么当CPU跑满的时候 第一台会占有1000 / (1000+2000)的CPU资源,第二台会占有2000 / (1000+2000)的CPU资源 CPU%是指占所有核心的百分数,比如你有四个核心,想要VPS最多用一半的性能,你可以设置CPU%为50,那么他最多使用 2 ÷ 4 x 100 = 50 (CPU%)<br>下载<a href="https://www.virtualizor.com/docs/billing/whmcs-module/">Virtualizor_For_WHMCS</a>插件,上传到/path/to/whmcs/modules/servers/目录<br>WHMCS管理面板->设置->产品/服务->服务器设置</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAbxmFWTUvl1OSkCo06tUZeDH0FRZiAACiQ8AAmSdsVQIKutqBIRkmzQE.png" alt="Alt Text"></p><p>添加服务器<br>主机名/IP地址:母鸡ip</p><p>用户名:key</p><p>密码:key pass</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAbtmFWTGCH7rIderhmxvMlLoGaW_IgACiA8AAmSdsVSBiplKYDeDJjQE.png" alt="Alt Text"></p><p>创建产品:产品/服务–>新增分组,新增产品</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAblmFWSrXI7ehP8U0bkPMiZos9LgvAAChg8AAmSdsVQd6DSmi3CdPjQE.png" alt="Alt Text"></p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAbdmFWSJ-xZewX64_yEQq1iuy2V6cAAChA8AAmSdsVQwmJHfBBf1GzQE.png" alt="Alt Text"></p><p>自定义字段</p><figure class="highlight node-repl"><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><code class="hljs node-repl"><span class="hljs-meta prompt_">></span> <span class="language-javascript"><span class="hljs-variable constant_">OS</span>|<span class="hljs-title class_">Operatig</span> <span class="hljs-title class_">System</span></span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">下拉菜单</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript"><span class="hljs-variable constant_">OS</span></span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">none,debian-<span class="hljs-number">11</span>-x86_64</span><br><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">vpsid</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">文本框</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">vpsid</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">vps_uuid</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">文本框</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br><span class="hljs-meta prompt_">></span> <span class="language-javascript">空</span><br></code></pre></td></tr></table></figure><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/BQACAgUAAx0Ea55INgACAbZmFWRN-tja8dKbGcNkV1Ufh0481gACgw8AAmSdsVQueL5a5DbjeDQE.png" alt="Alt Text"></p><p>到这就完成了!</p><h3 id="Q-amp-A"><a href="#Q-amp-A" class="headerlink" title="Q&A"></a>Q&A</h3><p>出现The viifbr0 is not started. Please run<strong>service virtnetwork start</strong></p><p>解决方案:</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs routeros">sudo<span class="hljs-built_in"> ip </span>link <span class="hljs-built_in">add</span> viifbr0<span class="hljs-built_in"> type bridge</span><br><span class="hljs-built_in"></span>sudo<span class="hljs-built_in"> ip </span>link <span class="hljs-built_in">set</span> dev viifbr0 up<br></code></pre></td></tr></table></figure><h3 id="文章参考"><a href="#文章参考" class="headerlink" title="文章参考"></a>文章参考</h3><p><a href="https://www.nodeseek.com/post-216025-1">https://www.nodeseek.com/post-216025-1</a></p><p><a href="https://duantong.net/post-10.html">https://duantong.net/post-10.html</a></p><p><a href="https://xy.sd/archives/429">https://xy.sd/archives/429</a></p><p><a href="https://www.xuei.ru/2023/07/31/virtualizor%E5%BC%80lxc-nat-vps%E5%B9%B6%E5%AF%B9%E6%8E%A5whmcs/#%E4%B8%80%EF%BC%9A%E5%87%86%E5%A4%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%8E%AF%E5%A2%83">https://www.xuei.ru/2023/07/31/virtualizor%E5%BC%80lxc-nat-vps%E5%B9%B6%E5%AF%B9%E6%8E%A5whmcs/#%E4%B8%80%EF%BC%9A%E5%87%86%E5%A4%87%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%8E%AF%E5%A2%83</a></p><p><a href="https://maofun.com/3241.html">https://maofun.com/3241.html</a></p>]]></content>
<summary type="html"><blockquote>
<p><strong>Virtualizor</strong> 是一款强大的虚拟化管理面板,允许用户轻松地创建、管理和维护虚拟机。它支持多种虚拟化技术,包括 KVM、Xen、OpenVZ 和 LXC 等,是一个广泛用于托管公司和云服务提供商的工具。</p</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Linux" scheme="https://blog.quickso.cn/tags/Linux/"/>
<category term="Virtualizor" scheme="https://blog.quickso.cn/tags/Virtualizor/"/>
</entry>
<entry>
<title>Ubuntu22.04部署K3s</title>
<link href="https://blog.quickso.cn/2024/12/21/Ubuntu22-04%E9%83%A8%E7%BD%B2K3s/"/>
<id>https://blog.quickso.cn/2024/12/21/Ubuntu22-04%E9%83%A8%E7%BD%B2K3s/</id>
<published>2024-12-20T17:14:33.000Z</published>
<updated>2024-12-21T03:14:00.922Z</updated>
<content type="html"><![CDATA[<h1 id="Ubuntu22-04部署K3s"><a href="#Ubuntu22-04部署K3s" class="headerlink" title="Ubuntu22.04部署K3s"></a>Ubuntu22.04部署K3s</h1><p>K3s 是一个轻量级的 Kubernetes 发行版,旨在简化和优化 Kubernetes 的安装和运行。K3s 使用了简化的架构,使其更适合在资源受限的环境中运行,如边缘设备、物联网(IoT)设备和低功耗硬件。K3s 的架构基于标准的 Kubernetes 组件,但对其进行了精简和优化。</p><p>官方文档:<a href="https://docs.k3s.io/zh/">https://docs.k3s.io/zh/</a></p><p><a href="https://docs.rancher.cn/docs/k3s/_index]">https://docs.rancher.cn/docs/k3s/_index</a></p><h3 id="K3s-集群的典型拓扑"><a href="#K3s-集群的典型拓扑" class="headerlink" title="K3s 集群的典型拓扑"></a>K3s 集群的典型拓扑</h3><ul><li>Server 节点指的是运行 <code>k3s server</code> 命令的主机,control plane 和数据存储组件由 K3s 管理。</li><li>Agent 节点指的是运行 <code>k3s agent</code> 命令的主机,不具有任何数据存储或 control plane 组件。</li><li>Server 和 Agent 都运行 kubelet、容器运行时和 CNI。</li></ul><p><img src="https://docs.k3s.io/zh/assets/images/how-it-works-k3s-revised-9c025ef482404bca2e53a89a0ba7a3c5.svg"></p><h4 id="1-单节点模式"><a href="#1-单节点模式" class="headerlink" title="1. 单节点模式"></a>1. <strong>单节点模式</strong></h4><p>在单节点模式下,<code>k3s server</code> 和 <code>k3s agent</code> 运行在同一台机器上。适用于测试环境或资源非常有限的环境。</p><figure class="highlight scss"><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><code class="hljs scss"><span class="hljs-selector-attr">[Master Node]</span> (K3s server + agent)<br> └── K3s API Server<br> └── K3s Controller Manager<br> └── K3s Scheduler<br> └── etcd (默认使用 SQLite)<br> └── K3s agent (用于运行容器和 Pod)<br></code></pre></td></tr></table></figure><h4 id="2-多节点模式"><a href="#2-多节点模式" class="headerlink" title="2. 多节点模式"></a>2. <strong>多节点模式</strong></h4><p>在多节点模式下,<code>k3s server</code> 可以部署多个实例以提供高可用性,而 <code>k3s agent</code> 部署在多个工作节点上。</p><figure class="highlight scss"><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><code class="hljs scss"><span class="hljs-selector-attr">[Master Node 1]</span> (K3s server)<br> └── K3s API Server<br> └── K3s Controller Manager<br> └── K3s Scheduler<br> └── etcd (或外部 etcd)<br><br><span class="hljs-selector-attr">[Master Node 2]</span> (K3s server) <- 高可用配置<br> └── K3s API Server<br> └── K3s Controller Manager<br> └── K3s Scheduler<br><br><span class="hljs-selector-attr">[Worker Node 1]</span> (K3s agent)<br> └── K3s agent<br> └── 容器运行时<br><br><span class="hljs-selector-attr">[Worker Node 2]</span> (K3s agent)<br> └── K3s agent<br> └── 容器运行时<br></code></pre></td></tr></table></figure><p>在 Ubuntu 22.04 上部署 K3s 单节点模式是非常简单的。以下是安装步骤,涵盖了从安装 K3s 到验证集群是否正常运行的完整过程。</p><h3 id="步骤-1:准备环境"><a href="#步骤-1:准备环境" class="headerlink" title="步骤 1:准备环境"></a>步骤 1:准备环境</h3><p>确保你的 Ubuntu 22.04 机器有互联网连接,并且已经更新了系统。</p><ol><li><strong>更新系统</strong> :<br>在安装 K3s 之前,先确保系统是最新的:</li></ol><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><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt update<br><span class="hljs-built_in">sudo</span> apt upgrade -y<br></code></pre></td></tr></table></figure><p><strong>2.安装Docker</strong></p><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cmake">apt <span class="hljs-keyword">install</span> docker.io<br></code></pre></td></tr></table></figure><h3 id="步骤-2:安装-K3s"><a href="#步骤-2:安装-K3s" class="headerlink" title="步骤 2:安装 K3s"></a>步骤 2:安装 K3s</h3><h4 id="1-使用官方安装脚本安装-K3s"><a href="#1-使用官方安装脚本安装-K3s" class="headerlink" title="1.使用官方安装脚本安装 K3s"></a><strong>1.使用官方安装脚本安装 K3s</strong></h4><figure class="highlight vim"><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><code class="hljs vim">curl –sfL \<br> https://rancher-mirror.rancher.<span class="hljs-keyword">cn</span>/k3s/k3s-install.<span class="hljs-keyword">sh</span> | \<br> INSTALL_K3S_MIRROR=<span class="hljs-keyword">cn</span> <span class="hljs-keyword">sh</span> -s - \<br> --<span class="hljs-built_in">system</span>-default-registry <span class="hljs-string">"registry.cn-hangzhou.aliyuncs.com"</span><br></code></pre></td></tr></table></figure><p>列出 所有命名空间 下的所有 服务(services)</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs applescript">kubectl <span class="hljs-keyword">get</span> services <span class="hljs-comment">--all-namespaces</span><br></code></pre></td></tr></table></figure><p>列出 所有命名空间 下的所有 Pod</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs applescript">kubectl <span class="hljs-keyword">get</span> pods <span class="hljs-comment">--all-namespaces</span><br></code></pre></td></tr></table></figure><p>查看名为 kuboard-etcd-gvx6q 的 Pod 在 kuboard 命名空间中的详细信息</p><figure class="highlight excel"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs excel">kubectl describe pod kuboard-etcd-gvx6q -<span class="hljs-built_in">n</span> kuboard<br></code></pre></td></tr></table></figure><h4 id="2-配置镜像"><a href="#2-配置镜像" class="headerlink" title="2.配置镜像"></a>2.配置镜像</h4><h5 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h5><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><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">'{"registry-mirrors": ["https://docker.1ms.run"]}'</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /etc/docker/daemon.json > /dev/null<br>systemctl daemon-reload<br>systemctl restart docker<br></code></pre></td></tr></table></figure><h5 id="K3s"><a href="#K3s" class="headerlink" title="K3s"></a>K3s</h5><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><code class="hljs bash"><span class="hljs-built_in">cat</span> >> /etc/rancher/k3s/registries.yaml <<<span class="hljs-string">EOF</span><br><span class="hljs-string">mirrors:</span><br><span class="hljs-string"> "docker.io":</span><br><span class="hljs-string"> endpoint:</span><br><span class="hljs-string"> - "https://docker.1ms.run"</span><br><span class="hljs-string">EOF</span><br>systemctl restart k3s<br></code></pre></td></tr></table></figure><p>安装完成后,K3s 会自动启动, 检查K3s服务的状态:</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl status k3s<br><br></code></pre></td></tr></table></figure><p>安装完成后通过以下指令获取k3s节点的工作状态</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs sh">k3s kubectl get node<br></code></pre></td></tr></table></figure><p>将会输出存在的节点的工作状态</p><figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs armasm"><span class="hljs-symbol">NAME</span> STATUS ROLES AGE VERSION<br><span class="hljs-symbol">ubuntu</span> Ready control-plane,master <span class="hljs-number">134</span>m <span class="hljs-built_in">v1</span>.<span class="hljs-number">29</span>.<span class="hljs-number">5</span>+k3s1<br></code></pre></td></tr></table></figure><p>查看 K3S_TOKEN</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cat</span> /var/lib/rancher/k3s/server/node-token<br></code></pre></td></tr></table></figure><h3 id="工作节点的安装(可选)"><a href="#工作节点的安装(可选)" class="headerlink" title="工作节点的安装(可选)"></a>工作节点的安装(可选)</h3><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs vim">curl -sfL https://rancher-mirror.rancher.<span class="hljs-keyword">cn</span>/k3s/k3s-install.<span class="hljs-keyword">sh</span> | INSTALL_K3S_MIRROR=<span class="hljs-keyword">cn</span> K3S_URL=https://<span class="hljs-number">192.168</span>.<span class="hljs-number">113.57</span>:<span class="hljs-number">6443</span> K3S_TOKEN={K3S_TOKEN} <span class="hljs-keyword">sh</span> -<br></code></pre></td></tr></table></figure><p>根据需求把上面的 <code>https://192.168.113.57:6443</code>和 <code>K3S_TOKEN</code>更换成你的即可</p><p>K3s worker 节点的角色默认为<code>none</code>,如何修改?</p><p>可以通过<code>kubectl label node 节点名称 node-role.kubernetes.io/worker=worker</code>为节点增加 worker 角色。</p><h2 id="配套工具"><a href="#配套工具" class="headerlink" title="配套工具"></a>配套工具</h2><h2 id="helm"><a href="#helm" class="headerlink" title="helm"></a>helm</h2><blockquote><p>Helm 是一个 Kubernetes 包管理工具,类似于 Linux 下的 <code>apt</code> 或 <code>yum</code>,它帮助用户管理 Kubernetes 应用的安装、升级和配置。</p><p>helm官网地址:<a href="https://helm.sh/docs/intro/install/">https://helm.sh/docs/intro/install/</a></p></blockquote><p>在上面的文档中找到你的服务器对应系统的安装流程,下面是Ubuntu的安装流程</p><figure class="highlight dsconfig"><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><code class="hljs dsconfig"><span class="hljs-string">curl</span> -<span class="hljs-string">fsSL</span> -<span class="hljs-string">o</span> <span class="hljs-string">get_helm</span>.<span class="hljs-string">sh</span> <span class="hljs-string">https</span>://<span class="hljs-string">raw</span>.<span class="hljs-string">githubusercontent</span>.<span class="hljs-string">com</span>/<span class="hljs-string">helm</span>/<span class="hljs-string">helm</span>/<span class="hljs-string">main</span>/<span class="hljs-string">scripts</span>/<span class="hljs-built_in">get-helm-3</span><br><span class="hljs-string">chmod</span> <span class="hljs-string">700</span> <span class="hljs-string">get_helm</span>.<span class="hljs-string">sh</span><br>./<span class="hljs-string">get_helm</span>.<span class="hljs-string">sh</span><br> <br></code></pre></td></tr></table></figure><p>也可以Apt安装</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><code class="hljs bash">curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /usr/share/keyrings/helm.gpg > /dev/null<br><span class="hljs-built_in">sudo</span> apt-get install apt-transport-https --<span class="hljs-built_in">yes</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"deb [arch=<span class="hljs-subst">$(dpkg --print-architecture)</span> signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main"</span> | <span class="hljs-built_in">sudo</span> <span class="hljs-built_in">tee</span> /etc/apt/sources.list.d/helm-stable-debian.list<br><span class="hljs-built_in">sudo</span> apt-get update<br><span class="hljs-built_in">sudo</span> apt-get install helm<br></code></pre></td></tr></table></figure><p>然后复制k3s.yml到~/.kube/文件夹下即可</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cp</span> /etc/rancher/k3s/k3s.yaml ~/.kube/<br></code></pre></td></tr></table></figure><p>测试helm命令:<br><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/xwm7fssuac6j9q4g.png" alt="image.png"></p><h2 id="kuboard"><a href="#kuboard" class="headerlink" title="kuboard"></a>kuboard</h2><p>接着去安装<a href="https://kuboard.cn/">kuboard</a>这个面板来可视化管理集群。</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs sh">kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml<br></code></pre></td></tr></table></figure><p>使用 <code>watch kubectl get pods -n kuboard</code>命令监控所有的Pod就绪</p><p><strong>访问Kuboard</strong></p><ul><li>在浏览器中打开链接<code>http://your-node-ip-address:30080</code><ul><li>用户名:admin</li><li>密码:Kuboard123</li></ul></li></ul><h2 id="kube-explorer"><a href="#kube-explorer" class="headerlink" title="kube-explorer"></a>kube-explorer</h2><p><strong>Kube-Explorer</strong> 是一个用来探索和管理 Kubernetes 集群资源的工具。它的目的是简化与 Kubernetes 集群的交互,帮助用户更容易地查看、分析和管理 Kubernetes 中的各种资源,如 Pod、服务、部署、命名空间等。</p><p><a href="https://github.com/cnrancher/kube-explorer">https://github.com/cnrancher/kube-explorer</a></p><h2 id="cert-manager"><a href="#cert-manager" class="headerlink" title="cert-manager"></a>cert-manager</h2><p>启用HTTPS访问你的服务</p><p><a href="https://cert-manager.io/docs/installation/kubectl/">https://cert-manager.io/docs/installation/kubectl/</a></p><h2 id="部署服务"><a href="#部署服务" class="headerlink" title="部署服务"></a>部署服务</h2><p>这里以部署nginx为例</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241221105101161.png" alt="image-20241221105101161"></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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">apps/v1</span><br><span class="hljs-attr">kind:</span> <span class="hljs-string">Deployment</span><br><span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">wx-mp-nginx-deployment</span><br> <span class="hljs-attr">labels:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">wx-mp-nginx</span><br><span class="hljs-attr">spec:</span><br> <span class="hljs-attr">replicas:</span> <span class="hljs-number">1</span><br> <span class="hljs-attr">selector:</span><br> <span class="hljs-attr">matchLabels:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">wx-mp-nginx</span><br> <span class="hljs-attr">template:</span><br> <span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">labels:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">wx-mp-nginx</span><br> <span class="hljs-attr">spec:</span><br> <span class="hljs-attr">containers:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">wx-mp-nginx</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:1.23.1</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">containerPort:</span> <span class="hljs-number">80</span><br> <span class="hljs-attr">volumeMounts:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-data</span><br> <span class="hljs-attr">mountPath:</span> <span class="hljs-string">/usr/share/nginx/html/</span><br> <span class="hljs-attr">volumes:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-data</span><br> <span class="hljs-attr">hostPath:</span><br> <span class="hljs-attr">path:</span> <span class="hljs-string">/root/data/wx-mp-nginx</span><br> <span class="hljs-attr">type:</span> <span class="hljs-string">Directory</span><br></code></pre></td></tr></table></figure><p>说明</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/543925-20221009230406182-86435399.png" alt="img"></p><p>此时,无法通过外网和服务间无法调用,需要部署service来实现,部署yaml如下</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><code class="hljs yaml"><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">v1</span><br><span class="hljs-attr">kind:</span> <span class="hljs-string">Service</span><br><span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">wx-mp-nginx-service</span><br><span class="hljs-attr">spec:</span><br> <span class="hljs-attr">type:</span> <span class="hljs-string">NodePort</span><br> <span class="hljs-attr">selector:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">wx-mp-nginx</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">protocol:</span> <span class="hljs-string">TCP</span><br> <span class="hljs-attr">port:</span> <span class="hljs-number">80</span><br> <span class="hljs-attr">targetPort:</span> <span class="hljs-number">80</span><br> <span class="hljs-attr">nodePort:</span> <span class="hljs-number">31432</span><br></code></pre></td></tr></table></figure><p>过NodePort方式,将服务开启在了31432端口</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/543925-20221010004022067-330806679.png" alt="img"></p><p>此时,在服务器安全组里添加【31432】端口,即可外网正常访问此时部署的Nginx服务了</p><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><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-meta">---</span><br><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">apps/v1</span><br><span class="hljs-attr">kind:</span> <span class="hljs-string">Deployment</span><br><span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-deployment</span><br><span class="hljs-attr">spec:</span><br> <span class="hljs-attr">selector:</span><br> <span class="hljs-attr">matchLabels:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">nginx</span><br> <span class="hljs-attr">replicas:</span> <span class="hljs-number">2</span> <span class="hljs-comment"># tells deployment to run 2 pods matching the template</span><br> <span class="hljs-attr">template:</span><br> <span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">labels:</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">nginx</span><br> <span class="hljs-attr">spec:</span><br> <span class="hljs-attr">containers:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">nginx:1.14.2</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">containerPort:</span> <span class="hljs-number">80</span><br> <br><span class="hljs-meta">---</span><br><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">v1</span><br><span class="hljs-attr">kind:</span> <span class="hljs-string">Service</span><br><span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-svc</span><br><span class="hljs-attr">spec:</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">port:</span> <span class="hljs-number">80</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx</span><br> <span class="hljs-attr">targetPort:</span> <span class="hljs-number">80</span><br> <span class="hljs-attr">type:</span> <span class="hljs-string">ClusterIP</span><br> <span class="hljs-attr">selector:</span><br> <span class="hljs-comment"># apply service to any pod with label app: nginx</span><br> <span class="hljs-attr">app:</span> <span class="hljs-string">nginx</span><br><span class="hljs-meta">---</span><br><span class="hljs-attr">apiVersion:</span> <span class="hljs-string">networking.k8s.io/v1</span><br><span class="hljs-attr">kind:</span> <span class="hljs-string">Ingress</span><br><span class="hljs-attr">metadata:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-ingress-1</span><br> <span class="hljs-attr">annotations:</span><br> <span class="hljs-attr">spec.ingressClassName:</span> <span class="hljs-string">traefik</span><br><span class="hljs-attr">spec:</span><br> <span class="hljs-attr">rules:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">host:</span> <span class="hljs-string">nginx.abc.com</span><br> <span class="hljs-attr">http:</span><br> <span class="hljs-attr">paths:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-attr">path:</span> <span class="hljs-string">/</span><br> <span class="hljs-attr">pathType:</span> <span class="hljs-string">Prefix</span><br> <span class="hljs-attr">backend:</span><br> <span class="hljs-attr">service:</span><br> <span class="hljs-attr">name:</span> <span class="hljs-string">nginx-svc</span><br> <span class="hljs-attr">port:</span><br> <span class="hljs-attr">number:</span> <span class="hljs-number">80</span><br><br></code></pre></td></tr></table></figure><p>这个yml包含Deployment、Service和traefik Ingress</p><p>如果没有域名,在本地的hosts添加代理</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs vim">你的IP nginx.<span class="hljs-keyword">abc</span>.<span class="hljs-keyword">com</span><br></code></pre></td></tr></table></figure>]]></content>
<summary type="html"><h1 id="Ubuntu22-04部署K3s"><a href="#Ubuntu22-04部署K3s" class="headerlink" title="Ubuntu22.04部署K3s"></a>Ubuntu22.04部署K3s</h1><p>K3s 是一个轻量级的 Ku</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Ubuntu" scheme="https://blog.quickso.cn/tags/Ubuntu/"/>
<category term="K3s" scheme="https://blog.quickso.cn/tags/K3s/"/>
</entry>
<entry>
<title>哪吒面板新版本v1安装教程</title>
<link href="https://blog.quickso.cn/2024/12/01/%E5%93%AA%E5%90%92%E9%9D%A2%E6%9D%BF%E6%96%B0%E7%89%88%E6%9C%ACv1%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/"/>
<id>https://blog.quickso.cn/2024/12/01/%E5%93%AA%E5%90%92%E9%9D%A2%E6%9D%BF%E6%96%B0%E7%89%88%E6%9C%ACv1%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/</id>
<published>2024-12-01T06:23:25.000Z</published>
<updated>2024-12-20T14:25:52.340Z</updated>
<content type="html"><![CDATA[<blockquote><h1 id="哪吒监控"><a href="#哪吒监控" class="headerlink" title="哪吒监控"></a>哪吒监控</h1><p>开源、轻量、易用的服务器监控与运维工具</p><p>官方网站:<a href="https://nezha.wiki/">https://nezha.wiki/</a></p><p>Github:<a href="https://github.com/nezhahq/nezhahq.github.io">https://github.com/nezhahq/nezhahq.github.io</a></p></blockquote><h1 id="START"><a href="#START" class="headerlink" title="START"></a>START</h1><p>最近,哪吒面板进行了V1版本的更新,页面UI和系统操作逻辑和V0相比有了非常大的变化,</p><p>所以写一篇新的教程教大家如何搭建安装。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241201150437124.png" alt="image-20241201150437124"></p><h1 id="安装-Dashboard"><a href="#安装-Dashboard" class="headerlink" title="安装 Dashboard"></a>安装 Dashboard</h1><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p>搭建哪吒监控的 Dashboard,你需要:</p><ol><li>一台可以连接公网的服务器。防火墙和安全策略需放行 8008 端口,否则无法访问或接收数据。单核 512MB 内存的服务器即可满足大多数使用场景。</li><li>一个已设置好 A 记录,指向 Dashboard 服务器 IP 的域名。</li></ol><blockquote><p>如果你想使用 CDN,请准备两个域名:</p><ul><li>一个配置好 CDN,用作公开访问,CDN 需支持 WebSocket 协议;</li><li>另一个域名不使用 CDN,用作 Agent 与 Dashboard 的通信。</li></ul><p>本文档以 “dashboard.example.com” 和 “data.example.com” 为例。</p></blockquote><h2 id="在服务器中安装-Dashboard"><a href="#在服务器中安装-Dashboard" class="headerlink" title="在服务器中安装 Dashboard"></a>在服务器中安装 Dashboard</h2><p>在面板服务器中,运行以下安装脚本:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && <span class="hljs-built_in">chmod</span> +x nezha.sh && <span class="hljs-built_in">sudo</span> ./nezha.sh<br></code></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><code class="hljs bash">curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && <span class="hljs-built_in">chmod</span> +x nezha.sh && <span class="hljs-built_in">sudo</span> CN=<span class="hljs-literal">true</span> ./nezha.sh<br></code></pre></td></tr></table></figure><p>以 Docker 安装为例,安装完成后按提示输入以下信息:</p><ul><li><code>请输入站点标题:</code> - 自定义站点标题。</li><li><code>请输入暴露端口:</code> - 公开访问端口(默认 8008,可自定义,如果是云服务器记得在安全组开启8008端口)。</li><li><code>请指定后台语言:</code> - 选择语言偏好。</li></ul><p>输入完成后,等待拉取 Docker 镜像。安装结束后,如果一切正常,你可以通过域名和端口号访问 Dashboard,例如:<br><code>http://dashboard.example.com:8008</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><code class="hljs bash">./nezha.sh<br></code></pre></td></tr></table></figure><p>打开管理脚本。</p><h2 id="登录到-Dashboard-配置界面"><a href="#登录到-Dashboard-配置界面" class="headerlink" title="登录到 Dashboard 配置界面"></a>登录到 Dashboard 配置界面</h2><p>后台管理界面的路径为 <code>/dashboard</code>,你只需访问:<br><code>http://dashboard.example.com:8008/dashboard</code></p><p>首次登录的默认用户名和密码均为 <code>admin</code>。</p><blockquote><p><strong>WARNING</strong></p><p>默认密码为弱密码,对于高权限的面板来说,使用弱密码非常危险!<br>建议安装后立即进入管理页面:点击头像 → “个人信息” → “更新个人资料”修改密码。<br>建议密码长度至少 18 位,并混合大小写字母、数字及符号。</p></blockquote><h2 id="配置反向代理"><a href="#配置反向代理" class="headerlink" title="配置反向代理"></a>配置反向代理</h2><p><strong>本教程以1panel配置反向代理 Dashboard 的过程作为示范。</strong></p><blockquote><p>WARNING</p><p>本项目并不依赖1panel面板。你可以使用任何服务器面板,或手动安装 Nginx 或 Caddy 来配置 SSL 和反向代理。</p><p>如果你认为无需通过 80 或 443 端口访问 Dashboard,可以直接使用安装脚本部署并运行哪吒监控,无需安装 Nginx 或其他 Web 服务器。</p></blockquote><p>以1panel面板为例,在1panel面板中<strong>新建网站</strong>,选择<strong>反向代理</strong>,<strong>主域名</strong>填写公开访问域名,如 <code>http://dashboard.example.com</code>,然后填写“<strong>代理地址</strong>”。</p><p>在“代理地址”中填入:<br><code>http://127.0.0.1:8008</code><br>点击“确定”。</p><p>现在,你可以直接通过域名访问面板,例如:<br><code>http://dashboard.example.com</code></p><h2 id="更新-Dashboard"><a href="#更新-Dashboard" class="headerlink" title="更新 Dashboard"></a>更新 Dashboard</h2><p>运行脚本:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">./nezha.sh<br></code></pre></td></tr></table></figure><p>选择重启面板并更新。</p><h1 id="安装-Agent"><a href="#安装-Agent" class="headerlink" title="安装 Agent"></a>安装 Agent</h1><blockquote><p><strong>哪吒监控的被控端服务被称为 Agent</strong></p><p>Agent 二进制文件仓库地址为:<a href="https://github.com/nezhahq/agent/releases">https://github.com/nezhahq/agent/releases</a></p></blockquote><h2 id="一键安装-Agent"><a href="#一键安装-Agent" class="headerlink" title="一键安装 Agent"></a>一键安装 Agent</h2><p>哪吒监控支持在 Windows、macOS 和 Linux 上一键安装 Agent。遵循本文档的步骤,你可以轻松地在服务器上部署它。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241201152638638.png" alt="image-20241201152638638"></p><h3 id="准备工作-1"><a href="#准备工作-1" class="headerlink" title="准备工作"></a>准备工作</h3><p>在安装前,需要提前在管理面板中设置通信域名,该域名不可以接入 CDN。本文档以示例通信域名 “data.example.com” 为例。</p><ol><li>在后台管理面板点击头像,进入“系统设置”页。</li><li>在“仪表板服务器域名/IP(无 CDN)”项中填入通信域名。</li><li>点击“确认”保存设置。</li></ol><h3 id="一键安装步骤"><a href="#一键安装步骤" class="headerlink" title="一键安装步骤"></a>一键安装步骤</h3><ol><li>在 <code>服务器</code> 页面中,点击 <code>安装命令</code> 并选择对应操作系统,安装命令将自动复制到你的剪贴板。</li><li>在被控端服务器中运行安装命令,等待安装完成后返回到 <code>服务器</code> 页面查看是否上线。</li><li>如果安装成功,页面中将自动弹出新的服务器,你可以点击编辑按钮为其设置名称。</li></ol><h3 id="平台特有问题说明"><a href="#平台特有问题说明" class="headerlink" title="平台特有问题说明"></a>平台特有问题说明</h3><h4 id="1-不小心多执行了几次,多了好多一样的Agent怎么办?"><a href="#1-不小心多执行了几次,多了好多一样的Agent怎么办?" class="headerlink" title="1.不小心多执行了几次,多了好多一样的Agent怎么办?"></a>1.不小心多执行了几次,多了好多一样的Agent怎么办?</h4><p>如果有多个 <code>nezha-agent</code> 服务实例,你可以运行以下命令来查看所有相关服务并停止它们:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl list-units --<span class="hljs-built_in">type</span>=service | grep nezha-agent<br></code></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><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl stop <service-name><br></code></pre></td></tr></table></figure><p>最后,删除/opt/nezha/agent/nezha-agent/xxx-config.yml 文件</p><h4 id="2-Windows-特殊说明"><a href="#2-Windows-特殊说明" class="headerlink" title="2.Windows 特殊说明"></a>2.Windows 特殊说明</h4><ol><li><p>在 Windows 服务器中,运行 PowerShell。</p></li><li><p>在 PowerShell 中粘贴并运行安装命令(复制命令后修改并按下面方法执行)。</p></li></ol> <figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment">#分别执行</span><br><span class="hljs-variable">$env:NZ_SERVER</span>=<span class="hljs-string">"xxxx:8008"</span> <span class="hljs-comment">#记得加""</span><br><span class="hljs-variable">$env:NZ_TLS</span>=<span class="hljs-string">"false"</span> <br><span class="hljs-variable">$env:NZ_CLIENT_SECRET</span>=<span class="hljs-string">"xxxx"</span><br><span class="hljs-comment">#然后执行</span><br> <br>[<span class="hljs-type">Net.ServicePointManager</span>]::SecurityProtocol = [<span class="hljs-type">Net.SecurityProtocolType</span>]::Ssl3 <span class="hljs-operator">-bor</span> [<span class="hljs-type">Net.SecurityProtocolType</span>]::Tls <span class="hljs-operator">-bor</span> [<span class="hljs-type">Net.SecurityProtocolType</span>]::Tls11 <span class="hljs-operator">-bor</span> [<span class="hljs-type">Net.SecurityProtocolType</span>]::Tls12;<span class="hljs-built_in">set-ExecutionPolicy</span> RemoteSigned;<span class="hljs-built_in">Invoke-WebRequest</span> https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.ps1 <span class="hljs-literal">-OutFile</span> C:install.ps1;powershell.exe C:install.ps1<br></code></pre></td></tr></table></figure><ol start="4"><li>如遇到「执行策略变更」确认提示,输入 <code>Y</code> 并回车。</li></ol><h4 id="3-Agent-有-Docker-镜像吗?"><a href="#3-Agent-有-Docker-镜像吗?" class="headerlink" title="3.Agent 有 Docker 镜像吗?"></a>3.Agent 有 Docker 镜像吗?</h4><p><strong>Agent 目前没有推出 Docker 镜像。</strong><br>Agent 的设计思路和 Dashboard 相反:Dashboard 的目标是尽量减少对宿主机的干扰,而 Agent 则需要深度与宿主机集成以执行监控服务和命令任务。</p><p>虽然将 Agent 放入容器中可以继续执行监控任务,但 WebShell 等功能将无法正常运行,因此官方不提供 Docker 镜像支持。</p><h1 id="设置三网监控"><a href="#设置三网监控" class="headerlink" title="设置三网监控"></a>设置三网监控</h1><p>要新增一个网络波动监控,请按照以下步骤操作:</p><ol><li><strong>进入管理面板</strong><br>转到 <strong><code>服务</code></strong> 页,点击 <strong><code>+</code></strong> 按钮添加新的服务监控。</li><li><strong>配置参数</strong><br>在新增监控时,设置以下参数:<ul><li><strong>名称</strong>:为此服务自定义一个名称。</li><li>目标<ul><li><code>TCP Ping</code>:输入运营商 IP 地址/域名并添加端口号,例如:<code>1.1.1.1:80</code> 或 <code>example.com:22</code>。</li></ul></li><li><strong>类型</strong>:选择监控类型(<code>TCP Ping</code>)。</li><li><strong>服务中显示</strong>:选择是否向游客显示此监控(隐私性选项)。</li><li><strong>间隔</strong>:设置监控间隔时间(单位:秒)。</li><li><strong>覆盖范围</strong>:选择一条规则来确定哪些 Agent 请求目标。</li><li><strong>特定服务器</strong>:指定覆盖范围内需要使用的 Agent。</li><li><strong>通知组 ID</strong>:选择已在 <strong><code>通知</code></strong> 页中配置的通知方式,详见 <a href="https://nezha.wiki/guide/notifications.html#%E7%81%B5%E6%B4%BB%E7%9A%84%E9%80%9A%E7%9F%A5%E6%96%B9%E5%BC%8F">通知方式配置</a>。</li><li><strong>启用失败通知</strong>:可选择在目标故障时接收通知(默认为不启用)。</li></ul></li><li><strong>提交监控</strong><br>点击 <strong><code>提交</code></strong> 按钮保存配置,稍等片刻后返回主页查看监控结果。</li></ol><p><strong>效果:</strong></p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20241201150358094.png" alt="image-20241201150358094"></p><h3 id="全国三网IP地址"><a href="#全国三网IP地址" class="headerlink" title="全国三网IP地址"></a>全国三网IP地址</h3><ul><li>河北</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>61.182.138.156</td><td>111.62.229.100</td><td>27.185.242.215</td></tr></tbody></table><ul><li>山西</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>60.221.18.41</td><td>183.201.244.91</td><td>1.71.157.41</td></tr></tbody></table><ul><li>辽宁</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>218.61.211.132</td><td>36.131.156.145</td><td>123.184.58.41</td></tr></tbody></table><ul><li>吉林</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>122.143.8.41</td><td>111.27.127.176</td><td>123.172.127.217</td></tr></tbody></table><ul><li>黑龙江</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>113.7.211.140</td><td>111.42.190.25</td><td>42.101.84.132</td></tr></tbody></table><ul><li>江苏</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>122.96.235.165</td><td>36.156.92.132</td><td>58.215.210.220</td></tr></tbody></table><ul><li>浙江</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>101.69.194.224</td><td>117.147.213.41</td><td>115.220.14.91</td></tr></tbody></table><ul><li>安徽</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>112.132.208.41</td><td>112.29.198.100</td><td>223.247.108.251</td></tr></tbody></table><ul><li>福建</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>36.248.48.139</td><td>112.50.96.88</td><td>106.126.10.28</td></tr></tbody></table><ul><li>江西</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.153.69.224</td><td>117.168.150.249</td><td>106.227.22.132</td></tr></tbody></table><ul><li>山东</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>112.240.56.143</td><td>120.220.145.91</td><td>144.123.160.140</td></tr></tbody></table><ul><li>河南</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>123.6.65.101</td><td>111.7.99.220</td><td>171.15.110.220</td></tr></tbody></table><ul><li>湖北</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>122.189.226.138</td><td>111.47.131.101</td><td>111.170.8.60</td></tr></tbody></table><ul><li>湖南</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.162.28.220</td><td>120.226.192.91</td><td>113.240.117.108</td></tr></tbody></table><ul><li>广东</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>112.90.211.100</td><td>183.240.65.191</td><td>183.36.23.111</td></tr></tbody></table><ul><li>海南</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>153.0.226.35</td><td>111.29.29.219</td><td>124.225.43.220</td></tr></tbody></table><ul><li>四川</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>101.206.163.49</td><td>183.220.151.41</td><td>118.123.218.220</td></tr></tbody></table><ul><li>贵州</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>117.187.254.132</td><td>61.243.18.220</td><td>58.42.61.132</td></tr></tbody></table><ul><li>云南</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>14.204.150.41</td><td>36.147.44.219</td><td>222.221.102.220</td></tr></tbody></table><ul><li>陕西</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>123.139.127.132</td><td>111.19.148.100</td><td>124.115.14.100</td></tr></tbody></table><ul><li>甘肃</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>59.81.94.53</td><td>117.157.16.41</td><td>118.182.228.91</td></tr></tbody></table><ul><li>青海</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.177.237.137</td><td>111.12.152.170</td><td>223.221.216.219</td></tr></tbody></table><ul><li>内蒙古</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.114.98.41</td><td>117.161.76.41</td><td>110.76.186.70</td></tr></tbody></table><ul><li>广西</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>171.39.5.51</td><td>36.136.112.41</td><td>222.217.93.55</td></tr></tbody></table><ul><li>西藏</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>43.242.165.35</td><td>117.180.234.41</td><td>113.62.176.89</td></tr></tbody></table><ul><li>宁夏</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.129.226.28</td><td>111.51.155.214</td><td>222.75.44.220</td></tr></tbody></table><ul><li>新疆</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.178.77.40</td><td>36.189.208.164</td><td>110.157.243.45</td></tr></tbody></table><ul><li>北京</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>202.108.29.159</td><td>222.35.73.1</td><td>220.181.173.35</td></tr></tbody></table><ul><li>天津</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>116.78.119.56</td><td>111.31.236.35</td><td>42.81.98.35</td></tr></tbody></table><ul><li>上海</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>59.81.65.42</td><td>183.194.219.220</td><td>101.227.191.14</td></tr></tbody></table><ul><li>重庆</li></ul><table><thead><tr><th>联通</th><th>移动</th><th>电信</th></tr></thead><tbody><tr><td>113.207.69.190</td><td>221.178.81.101</td><td>119.84.131.101</td></tr></tbody></table><h1 id="通知设置"><a href="#通知设置" class="headerlink" title="通知设置"></a>通知设置</h1><blockquote><p>哪吒监控支持对服务器的负载、CPU、内存、硬盘、流量、月流量、进程数和连接数进行监控,并在达到用户设定的阈值时发送通知。</p></blockquote><h4 id="1-先设置一个通知方式"><a href="#1-先设置一个通知方式" class="headerlink" title="1.先设置一个通知方式"></a>1.先设置一个通知方式</h4><p>我这里是用飞书</p><p><strong>获取 URL 参数</strong></p><ol><li><strong>创建机器人</strong>:在飞书群设置中添加自定义机器人(Webhook)。</li><li><strong>获取 Webhook URL</strong>:创建完成后获得。</li></ol><p><strong>通知配置:</strong></p><ul><li><strong>名称</strong>:哪吒面板 Bot</li><li><strong>URL</strong>:<code>https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx</code></li><li><strong>请求方式</strong>:<code>POST</code></li><li><strong>请求类型</strong>:<code>JSON</code></li><li><strong>Body</strong>:</li></ul><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><code class="hljs json"><span class="hljs-punctuation">{</span><br> <span class="hljs-attr">"msg_type"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"text"</span><span class="hljs-punctuation">,</span><br> <span class="hljs-attr">"content"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span><br> <span class="hljs-attr">"text"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"【哪吒通知消息】\n🕐 时间:\n#DATETIME#\n📋 事件:\n#NEZHA#"</span><br> <span class="hljs-punctuation">}</span><br><span class="hljs-punctuation">}</span><br></code></pre></td></tr></table></figure><p>更多通知方式:</p><p><a href="https://nezha.wiki/guide/notifications.html">https://nezha.wiki/guide/notifications.html</a></p><blockquote><p>如果对通知配置有疑问,可以使用以下第三方配置生成器简化操作(哪吒监控不对第三方生成器的功能性作任何保证):</p><ul><li><a href="https://nz.sina.us.kg/">Nezha Rule Generator</a>:适用于大多数场景。</li><li><a href="https://wiziscool.github.io/Nezha-Traffic-Alarm-Generator/">Nezha-Traffic-Alarm-Generator</a>:专注于周期流量通知规则生成。</li></ul></blockquote><h4 id="2-设置告警"><a href="#2-设置告警" class="headerlink" title="2.设置告警"></a>2.设置告警</h4><p><a href="https://nezha.wiki/guide/notifications.html#%E8%AD%A6%E6%8A%A5%E8%A7%84%E5%88%99%E8%AF%B4%E6%98%8E">https://nezha.wiki/guide/notifications.html#%E8%AD%A6%E6%8A%A5%E8%A7%84%E5%88%99%E8%AF%B4%E6%98%8E</a></p><hr><h4 id="3-设置通知分组"><a href="#3-设置通知分组" class="headerlink" title="3.设置通知分组"></a>3.设置通知分组</h4><blockquote><p>通知分组允许用户将多个通知方式组合成一个通知组,通知组可用作任务或告警的通知目标,实现一键发送多种方式的通知。</p></blockquote><p>配置步骤</p><p>1.点击“<strong>分组</strong>”-“<strong>通知分组</strong>”</p><p>2.选择你要已经设置好的通知方式。</p><h4 id="4-应用通知组"><a href="#4-应用通知组" class="headerlink" title="4.应用通知组"></a>4.应用通知组</h4><p>在任务或告警规则中选择通知组作为通知目标,触发时会同时通过分组内的所有通知方式发送通知。</p><h1 id="END"><a href="#END" class="headerlink" title="END"></a>END</h1><p>好了,这样基本就安装好了。其他内容可以看<a href="https://nezha.wiki/">官方文档</a></p><p>DEMO:<a href="https://serverstatus.quickso.cn/">https://serverstatus.quickso.cn/</a></p>]]></content>
<summary type="html"><blockquote>
<h1 id="哪吒监控"><a href="#哪吒监控" class="headerlink" title="哪吒监控"></a>哪吒监控</h1><p>开源、轻量、易用的服务器监控与运维工具</p>
<p>官方网站:<a href="https://</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="VPS" scheme="https://blog.quickso.cn/tags/VPS/"/>
<category term="哪吒面板" scheme="https://blog.quickso.cn/tags/%E5%93%AA%E5%90%92%E9%9D%A2%E6%9D%BF/"/>
<category term="探针" scheme="https://blog.quickso.cn/tags/%E6%8E%A2%E9%92%88/"/>
</entry>
<entry>
<title>小米平板6crDroid类原生安卓14系统刷机</title>
<link href="https://blog.quickso.cn/2024/10/05/%E5%B0%8F%E7%B1%B3%E5%B9%B3%E6%9D%BF6crDroid%E7%B1%BB%E5%8E%9F%E7%94%9F%E5%AE%89%E5%8D%9314%E7%B3%BB%E7%BB%9F%E5%88%B7%E6%9C%BA/"/>
<id>https://blog.quickso.cn/2024/10/05/%E5%B0%8F%E7%B1%B3%E5%B9%B3%E6%9D%BF6crDroid%E7%B1%BB%E5%8E%9F%E7%94%9F%E5%AE%89%E5%8D%9314%E7%B3%BB%E7%BB%9F%E5%88%B7%E6%9C%BA/</id>
<published>2024-10-04T23:33:07.000Z</published>
<updated>2024-11-23T13:12:18.434Z</updated>
<content type="html"><![CDATA[<h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p><strong>刷机有风险,小白需谨慎!!!解锁会丢失所有数据,请做好数据备份!!!</strong></p><p>所谓「类原生」,是指基于 <strong>AOSP</strong>(Android Open Source Project,Android 开放源代码工程)开发的第三方固件,其界面与操作方式与谷歌官方的 Android 一致。</p><p>AOSP</p><p>?优点:「轻快」</p><p>大多界面简洁,有原生动画,</p><p>没有厂商预装系统软件和三方软件(差不多只有电话、短信、时钟、文件、设置、甚至没有浏览器),</p><p>没有太多花里胡哨的功能,系统后台占用率较少。</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050812237.png"></p><p>对于安卓来说,刷机流程都大致一样</p><p>1.解锁 Bootloader<br>2.刷入 Recovery<br>3.刷入 ROM/Gapps/Magisk<br>4.开始愉快地玩耍</p><h2 id="开始"><a href="#开始" class="headerlink" title="开始"></a>开始</h2><h3 id="1-解锁BL(Bootloader)"><a href="#1-解锁BL(Bootloader)" class="headerlink" title="1.解锁BL(Bootloader)"></a>1.解锁BL(Bootloader)</h3><p>小米的系统现在解锁越来越难了,<a href="https://s.xiaomi.cn/c/3hfTCor6"><strong>小米澎湃 OS · Bootloader 解锁权限变更公告</strong></a>,需要实名认证+通过社区答题测试+社区 5 级账号。</p><blockquote><p>大家好! Bootloader 锁处于上锁状态时,有助于保护设备安全、避免数据泄露,也给用户提供更加安全、稳定的使用体验。自即日起,升级到小米澎湃 OS 后的 Bootloader 解锁权限将仅针对开发者和手机发烧友开放,感谢大家的支持和理解。</p></blockquote><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050811297.png"></p><p>不过好在有大佬搞了一个绕开的工具,只需要168小时就可以解锁了</p><p>工具下载地址: <a href="https://www.123865.com/s/FrsrVv-wB47A?%E6%8F%90%E5%8F%96%E7%A0%81:8ecC">https://www.123865.com/s/FrsrVv-wB47A?提取码:8ecC</a></p><p><strong>提示:解锁BL会清除所有数据,请及时备份</strong></p><p>具体方法:</p><p>1.usb调式界面的操作</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050820031.png" alt="image-20241005082032966"></p><p>2.安装旧版设置(上面链接有)<br>3.下载工具php8.39,电脑解压双击php目录下”bypass.cmd”脚本运行<br>4.出现这样就是成功了</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050821639.png" alt="image-20241005082121481"></p><p>5.小米解锁工具解锁,依旧要等168小时。</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050821133.png" alt="image-20241005082144070"></p><p>6.好了,现在可以关闭本文了,7天后再来。</p><h3 id="2-开始刷机"><a href="#2-开始刷机" class="headerlink" title="2.开始刷机"></a>2.开始刷机</h3><p><strong>注意:确保使用基于 Android 13 固件的 MIUI 14,请勿尝试使用 HyperOS 固件运行此 ROM</strong></p><p>参考:<a href="https://github.com/DragonEmperor9480/pipa_notes">https://github.com/DragonEmperor9480/pipa_notes</a></p><p>如果使用的是 HyperOS,请按照以下步骤操作</p><blockquote><p>按照下面步骤 1 到 7 进行操作,然后使用命令 adb sideload fw_package_name.zip(将 fw_package_name.zip 替换为您下载的固件名称.zip)刷入区域固件<br>,刷入后,重新启动一次recovery并继续按照上述剩余步骤操作</p></blockquote><p>如果已经在使用 MIUI固件/第三方ROM,则可以跳过此步骤并按照以下步骤操作。</p><p>刷机资料文件: </p><p><a href="https://www.123865.com/s/FrsrVv-gB47A?%E6%8F%90%E5%8F%96%E7%A0%81:GgYS">https://www.123865.com/s/FrsrVv-gB47A?提取码:GgYS</a></p><ol><li>下载 rom 包以及 boot、dtbo 和 vendor_boot 等(链接里的所有文件)</li><li>将下载的文件放在一个文件夹中</li><li>重新启动到fastboot(按住电源 + 音量减)</li></ol><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050840173.png" alt="image-20241005083959513"></p><p>4.在电脑上,打开文件所在的文件夹,打开cmd 并依次运行以下命令(文件需要具体的路径):</p><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stata">fastboot flash <span class="hljs-keyword">boot</span> <span class="hljs-keyword">boot</span>.img<br></code></pre></td></tr></table></figure><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">fastboot</span> flash dtbo dtbo.img<br></code></pre></td></tr></table></figure><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">fastboot</span> flash vendor_boot vendor_boot.img<br></code></pre></td></tr></table></figure><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">fastboot reboot recovery</span><br></code></pre></td></tr></table></figure><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050842939.png" alt="image-20241005084228825"></p><p>5.通过recovery格式化数据(如果刷入的是同一个系列的rom,这步可以省略)</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050844812.png" alt="image-20241005084442712"></p><p>6.重启一次 recovery(advanced -> reboot to recovery)</p><p>7.然后选择apply update 选择 adb sideload</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050847367.png" alt="image-20241005084705249"></p><p>8.还是在刚才的目录里打开cmd 刷入ROM包</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs python">adb sideload rom.<span class="hljs-built_in">zip</span>(将 rom.<span class="hljs-built_in">zip</span> 替换为下载的 rom 包名.<span class="hljs-built_in">zip</span>,最好是具体路径)<br></code></pre></td></tr></table></figure><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050850696.png" alt="image-20241005085041587"></p><p>9.有可能会卡到47%,弹出重启recovery 这时其实已经刷完机了,点击重启到recovery。</p><p>10.接下来就可以刷入Gapps(谷歌套件,上面链接里有)等第三方包了,刷入方法和上面一样,选择apply update 选择 adb sideload,CMD运行</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">adb</span> sideload gapps.zip<br></code></pre></td></tr></table></figure><p>11.刷完就点击 reboot system,重启系统,开始玩了~</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050856508.png" alt="image-20241005085650406"></p><h3 id="3-Magisk-安装"><a href="#3-Magisk-安装" class="headerlink" title="3.Magisk 安装"></a>3.Magisk 安装</h3><p>1.下载 Magisk apk 并安装</p><p><a href="https://github.com/topjohnwu/Magisk/releases">https://github.com/topjohnwu/Magisk/releases</a> </p><p>2.打开Magisk,①:安装 – ②:选择 boot.img – ③:开始修补文件 – ④:修补完成(修补生成 magisk_patched-xxx.img 文件在 Download 目录)</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050903510.jpg" alt="Magisk安装教程插图"></p><p>3.将修补完的文件传入刚才的ROM文件夹,进入 Bootloader 模式</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ebnf"><span class="hljs-attribute">adb reboot bootloader</span><br></code></pre></td></tr></table></figure><p>4.运行</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm">fastboot flash <span class="hljs-keyword">boot </span>刚才修补的文件路径<br></code></pre></td></tr></table></figure><p>5.显示下面这三行代码,就是成功刷入了。再使用指令 <code>fastboot reboot</code> 重启。</p><figure class="highlight apache"><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><code class="hljs apache"><span class="hljs-attribute">Sending</span> 'boot' (<span class="hljs-number">131072</span> KB) OKAY<span class="hljs-meta"> [ 3.105s]</span><br><span class="hljs-attribute">Writing</span> 'boot' OKAY<span class="hljs-meta"> [ 0.404s]</span><br><span class="hljs-attribute">Finished</span>. Total time: <span class="hljs-number">3</span>.<span class="hljs-number">556</span>s<br></code></pre></td></tr></table></figure><p>6.显示Magisk的版本,就是刷好了的</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202410050903329.jpg" alt="Magisk安装教程插图4"></p><p>温馨提示:</p><p>如果刷入 <strong>magisk.img</strong> 不能开机,可以把前面提取的 <strong>boot.img</strong> 通过 <strong>fastboot</strong> 刷回去,恢复原 boot,一般都能正常开机!<br><strong>boot.img</strong> 保留一份在电脑,避免出问题了可以自救下!还原 boot 指令</p><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stata">fastboot flash <span class="hljs-keyword">boot</span> <span class="hljs-keyword">boot</span>.img<br></code></pre></td></tr></table></figure><h2 id="结束"><a href="#结束" class="headerlink" title="结束"></a>结束</h2><p>好久没有刷机了,刷机方式也变了好多。通过这次刷机,又熟悉了一遍。</p><p>参考资料:</p><p><a href="https://xdaforums.com/f/xiaomi-pad-6.12759/">https://xdaforums.com/f/xiaomi-pad-6.12759/</a></p><p><a href="https://xdaforums.com/t/beta-crdroid-10-x-a14-pipa.4641070/">https://xdaforums.com/t/beta-crdroid-10-x-a14-pipa.4641070/</a></p><p><a href="https://xdaforums.com/t/rom-14-pipa-lmodroid-unofficial-aosp.4652823/">https://xdaforums.com/t/rom-14-pipa-lmodroid-unofficial-aosp.4652823/</a></p><p><a href="https://crdroid.net/pipa/10">https://crdroid.net/pipa/10</a></p><p><a href="https://magiskcn.com/">https://magiskcn.com/</a></p><p><a href="https://www.byboke.com/2569.html">https://www.byboke.com/2569.html</a></p><p><a href="https://github.com/DragonEmperor9480/pipa_notes?tab=readme-ov-file#installation-guide">https://github.com/DragonEmperor9480/pipa_notes?tab=readme-ov-file#installation-guide</a></p><p><a href="https://www.coolapk.com/feed/57324806?shareKey=MmVmOGZiYjliMzYwNjcwMDdmMjI~&shareUid=524513&shareFrom=com.coolapk.market_14.5.0">https://www.coolapk.com/feed/57324806?shareKey=MmVmOGZiYjliMzYwNjcwMDdmMjI~&shareUid=524513&shareFrom=com.coolapk.market_14.5.0</a></p><p><a href="https://www.youtube.com/watch?v=ytW2R3Laujg&t=254s">https://www.youtube.com/watch?v=ytW2R3Laujg&t=254s</a></p>]]></content>
<summary type="html"><h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p><strong>刷机有风险,小白需谨慎!!!解锁会丢失所有数据,请做好数据备份!!!</strong></p>
<p>所谓「</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="ADB" scheme="https://blog.quickso.cn/tags/ADB/"/>
<category term="安卓" scheme="https://blog.quickso.cn/tags/%E5%AE%89%E5%8D%93/"/>
<category term="刷机" scheme="https://blog.quickso.cn/tags/%E5%88%B7%E6%9C%BA/"/>
<category term="小米平板6" scheme="https://blog.quickso.cn/tags/%E5%B0%8F%E7%B1%B3%E5%B9%B3%E6%9D%BF6/"/>
</entry>
<entry>
<title>Proxmox VE 8配置国内软件源并删除订阅弹窗</title>
<link href="https://blog.quickso.cn/2024/09/17/ProxmoxVE8%E9%85%8D%E7%BD%AE%E5%9B%BD%E5%86%85%E8%BD%AF%E4%BB%B6%E6%BA%90%E5%B9%B6%E5%88%A0%E9%99%A4%E8%AE%A2%E9%98%85%E5%BC%B9%E7%AA%97/"/>
<id>https://blog.quickso.cn/2024/09/17/ProxmoxVE8%E9%85%8D%E7%BD%AE%E5%9B%BD%E5%86%85%E8%BD%AF%E4%BB%B6%E6%BA%90%E5%B9%B6%E5%88%A0%E9%99%A4%E8%AE%A2%E9%98%85%E5%BC%B9%E7%AA%97/</id>
<published>2024-09-17T12:48:11.000Z</published>
<updated>2024-11-23T13:12:18.419Z</updated>
<content type="html"><![CDATA[<h1 id="删除订阅弹窗"><a href="#删除订阅弹窗" class="headerlink" title="删除订阅弹窗"></a>删除订阅弹窗</h1><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">sed -Ezi.bak <span class="hljs-string">"s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g"</span> <span class="hljs-regexp">/usr/</span>share<span class="hljs-regexp">/javascript/</span>proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy.service<br></code></pre></td></tr></table></figure><p>执行后清理浏览器缓存,重新登录验证。</p><h1 id="修改软件源"><a href="#修改软件源" class="headerlink" title="修改软件源"></a>修改软件源</h1><figure class="highlight awk"><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><code class="hljs awk">mv <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>pve-enterprise.list <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>pve-enterprise.list.bak<br><span class="hljs-comment"># 屏蔽订阅企业源</span><br>wget https:<span class="hljs-regexp">//mi</span>rrors.ustc.edu.cn<span class="hljs-regexp">/proxmox/</span>debian<span class="hljs-regexp">/proxmox-release-bookworm.gpg -O /</span>etc<span class="hljs-regexp">/apt/</span>trusted.gpg.d/proxmox-release-bookworm.gpg<br>echo <span class="hljs-string">"deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription"</span> > <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>pve-no-subscription.list<br><span class="hljs-comment"># 使用Proxmox非企业版中科大源</span><br>sed -i <span class="hljs-string">'s|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g'</span> <span class="hljs-regexp">/etc/</span>apt/sources.list<br>sed -i <span class="hljs-string">'s|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g'</span> <span class="hljs-regexp">/etc/</span>apt/sources.list<br><span class="hljs-comment"># 将Debian官方源替换为中科大源</span><br>echo <span class="hljs-string">"deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription"</span> > <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>ceph.list<br><span class="hljs-comment"># 替换Ceph源</span><br>sed -i <span class="hljs-string">'s|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g'</span> <span class="hljs-regexp">/usr/</span>share<span class="hljs-regexp">/perl5/</span>PVE/APLInfo.pm<br><span class="hljs-comment"># 替换CT镜像下载源(重启PVE才能生效)</span><br>apt update <br><span class="hljs-comment">#更新源列表</span><br>apt upgrade <br><span class="hljs-comment">#升级软件包</span><br>apt dist-upgrade <br><span class="hljs-comment">#升级系统</span><br>apt install openvswitch-switch<br><span class="hljs-comment">#安装OVS</span><br></code></pre></td></tr></table></figure>]]></content>
<summary type="html"><h1 id="删除订阅弹窗"><a href="#删除订阅弹窗" class="headerlink" title="删除订阅弹窗"></a>删除订阅弹窗</h1><figure class="highlight awk"><table><tr><td class="gutte</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Proxmox" scheme="https://blog.quickso.cn/tags/Proxmox/"/>
<category term="Pve" scheme="https://blog.quickso.cn/tags/Pve/"/>
</entry>
<entry>
<title>青龙面板搭建教程</title>
<link href="https://blog.quickso.cn/2024/09/17/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/"/>
<id>https://blog.quickso.cn/2024/09/17/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/</id>
<published>2024-09-17T12:24:08.000Z</published>
<updated>2024-11-23T13:12:18.441Z</updated>
<content type="html"><![CDATA[<h1 id="青龙面板"><a href="#青龙面板" class="headerlink" title="青龙面板"></a>青龙面板</h1><p>青龙是 whyour 大佬写的一个定时任务管理平台,支持 Python3、JavaScript、Shell、Typescript,简单来说就是可以定时运行一些脚本,就比如说薅羊毛、签到、抢购等等,谁会跟羊毛过意不去呢?</p><p>青龙面板涵盖以下功能</p><p>支持多种脚本语言(python3、JavaScript、shell、typescript)</p><p>支持在线管理脚本、环境变量、配置文件</p><p>支持在线查看任务日志</p><p>支持秒级任务设置</p><p>支持系统级通知</p><p>支持暗黑模式</p><p>支持手机端操作</p><h2 id="搭建部署"><a href="#搭建部署" class="headerlink" title="搭建部署"></a>搭建部署</h2><p>推荐使用Docker进行部署,NAS或者面板(如宝塔、1Panel等)可以直接在镜像仓库搜索进行部署,如果是云服务器等先下载安装docker,再进行青龙的部署,从大佬的README中可以看到相关部署的教程,我这里搬运下</p><p>latest 镜像是基于 alpine 构建,debian 镜像是基于 debian-slim 构建。如果需要使用 alpine 不支持的依赖,建议使用 debian 镜像,下面是拉取镜像命令</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><code class="hljs bash">docker pull whyour/qinglong:latest<br>docker pull whyour/qinglong:debian<br></code></pre></td></tr></table></figure><p>下面进行部署青龙</p><h3 id="docker-推荐"><a href="#docker-推荐" class="headerlink" title="docker (推荐)"></a>docker (推荐)</h3><figure class="highlight livescript"><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><code class="hljs livescript">curl -sSL get.docker.com | sh<br>docker run -dit <span class="hljs-string">\</span><br> -v $PWD/ql/data:/ql/data <span class="hljs-string">\</span><br> <span class="hljs-comment"># 冒号后面的 5700 为默认端口,如果设置了 QlPort, 需要跟 QlPort 保持一致</span><br> -p <span class="hljs-number">5700</span>:<span class="hljs-number">5700</span> <span class="hljs-string">\</span><br> <span class="hljs-comment"># 部署路径非必须,比如 /test</span><br> -e QlBaseUrl=<span class="hljs-string">"/"</span> <span class="hljs-string">\</span><br> <span class="hljs-comment"># 部署端口非必须,当使用 host 模式时,可以设置服务启动后的端口,默认 5700</span><br> -e QlPort=<span class="hljs-string">"5700"</span> <span class="hljs-string">\</span><br> --name qinglong <span class="hljs-string">\</span><br> --hostname qinglong <span class="hljs-string">\</span><br> --restart <span class="hljs-keyword">unless</span>-stopped <span class="hljs-string">\</span><br> whyour/qinglong:latest<br><br></code></pre></td></tr></table></figure><h3 id="docker-compose-推荐"><a href="#docker-compose-推荐" class="headerlink" title="docker-compose (推荐)"></a>docker-compose (推荐)</h3><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><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash"> curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`<span class="hljs-built_in">uname</span> -s`-`<span class="hljs-built_in">uname</span> -m` -o /usr/local/bin/docker-compose</span><br>mkdir qinglong<br>wget https://raw.githubusercontent.com/whyour/qinglong/master/docker/docker-compose.yml<br><span class="hljs-meta prompt_"></span><br><span class="hljs-meta prompt_"># </span><span class="language-bash">启动</span><br>docker-compose up -d<br><span class="hljs-meta prompt_"># </span><span class="language-bash">停止</span><br>docker-compose down<br></code></pre></td></tr></table></figure><p>到此就完成了,然后在本地打开青龙面板界面,默认端口为5700,打开你的浏览器,访问 <a href="http://127.0.0.1:5700可进入安装向导,设置账户密码,按要求一步一步即可,推送可先不填,如果没有进入配置向导,可在终端执行以下命令查看账号密码">http://127.0.0.1:5700可进入安装向导,设置账户密码,按要求一步一步即可,推送可先不填,如果没有进入配置向导,可在终端执行以下命令查看账号密码</a></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it qinglong <span class="hljs-built_in">cat</span> /ql/config/auth.json<br></code></pre></td></tr></table></figure><p>看到如下界面就完成了</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E9%9D%92%E9%BE%99%E9%A6%96%E9%A1%B5.png"></p><h2 id="拔毛行动"><a href="#拔毛行动" class="headerlink" title="拔毛行动"></a>拔毛行动</h2><h3 id="拉取脚本仓库"><a href="#拉取脚本仓库" class="headerlink" title="拉取脚本仓库"></a>拉取脚本仓库</h3><p>在拉取脚本仓库之前需要先了解下拉取命令的格式,青龙有个内置命令:ql ,描述如下:</p><figure class="highlight gherkin"><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><code class="hljs gherkin"><span class="hljs-comment"># 更新并重启青龙</span><br>ql update<br><span class="hljs-comment"># 运行自定义脚本extra.sh</span><br>ql extra<br><span class="hljs-comment"># 添加单个脚本文件</span><br>ql raw <span class="hljs-variable"><file_url></span><br><span class="hljs-comment"># 添加单个仓库的指定脚本</span><br>ql repo <span class="hljs-variable"><repo_url></span> <span class="hljs-variable"><whitelist></span> <span class="hljs-variable"><blacklist></span> <span class="hljs-variable"><dependence></span> <span class="hljs-variable"><branch></span> <span class="hljs-variable"><extensions></span><br><span class="hljs-comment"># 删除旧日志</span><br>ql rmlog <span class="hljs-variable"><days></span><br><span class="hljs-comment"># 启动tg-bot</span><br>ql bot<br><span class="hljs-comment"># 检测青龙环境并修复</span><br>ql check<br><span class="hljs-comment"># 重置登录错误次数</span><br>ql resetlet <br><span class="hljs-comment"># 禁用两步登录</span><br>ql resettfa<br><br></code></pre></td></tr></table></figure><p>参数 说明<br>file_url 脚本地址<br>repo_url 仓库地址<br>whitelist 拉取仓库时的白名单,即就是需要拉取的脚本的路径包含的字符串,多个竖线分割<br>blacklist 拉取仓库时的黑名单,即就是需要拉取的脚本的路径不包含的字符串,多个竖线分割<br>dependence 拉取仓库需要的依赖文件,会直接从仓库拷贝到scripts下的仓库目录,不受黑名单影响,多个竖线分割<br>extensions 拉取仓库的文件后缀,多个竖线分割<br>branch 拉取仓库的分支<br>days 需要保留的日志的天数<br>file_path 任务执行时的文件路径</p><p>对上述命令有个初步了解之后,再看拉库命令就明了很多了,首先我们先拉个6dy大佬写的JD签到做任务的库6dylan6/jdpro[2],登陆后选择订阅管理创建订阅,在名称一行输入拉库指令如下:</p><p>国内机(带代理):</p><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs ruby">ql repo <span class="hljs-symbol">https:</span>/<span class="hljs-regexp">/js.jdpro.site/https</span><span class="hljs-symbol">://github</span>.com/6dylan6/jdpro.git <span class="hljs-string">"jd_|jx_|jddj_"</span> <span class="hljs-string">"backUp"</span> <span class="hljs-string">"^jd[^_]|USER|JD|function|sendNotify|utils"</span><br></code></pre></td></tr></table></figure><p>默认代理拉不了,自行找可用代理</p><p>国外机:</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">ql repo https:<span class="hljs-regexp">//gi</span>thub.com<span class="hljs-regexp">/6dylan6/</span>jdpro.git <span class="hljs-string">"jd_|jx_|jddj_"</span> <span class="hljs-string">"backUp"</span> <span class="hljs-string">"^jd[^_]|USER|JD|function|sendNotify|utils"</span><br></code></pre></td></tr></table></figure><p>定时任务随意,要遵循crontab表达式规则,可以使用这个在线工具 <a href="https://tool.lu/crontab">https://tool.lu/crontab</a> 里面也有详细说明每个字段的意思</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E5%88%9B%E5%BB%BA%E8%AE%A2%E9%98%85.png"></p><p>创建订阅</p><p>创建完成后可在订阅管理中看到刚刚创建的订阅,此时点击右侧运行等待拉库完成即可,后面会根据你设置的定时规则自动拉库,这样就做到自动更新脚本了</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E8%BF%90%E8%A1%8C%E8%AE%A2%E9%98%85.png"></p><p>运行订阅</p><p>点击日志可以查看到拉库状态,我这里是已经拉完了,实际第一次拉库会显示添加XXX任务成功的log</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E6%8B%89%E5%BA%93.png"></p><p>拉库</p><p>此时点击左侧定时任务,便可查看到刚刚拉下来的脚本了</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E6%8B%89%E5%BA%93.png"></p><p>定时任务</p><p>这里的定时规则可以根据自己的需求改动,右侧也可以手动运行,查看日志看看是否运行错误,顶部更多可以创建视图进行分类,当脚本过多时不会显得太乱</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1.png"></p><h3 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h3><p>我们只拉库还不行,此时运行可以发现,肯定是会报错的,通常表现为</p><figure class="highlight subunit"><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><code class="hljs subunit"># 缺少依赖<br><span class="hljs-keyword">Error: </span>Cannot find module ‘xx’<br><br>'xxxx' module not found<br><br># 缺少Python依赖<br>ModuleNotFoundError: No module named ‘xxx’<br><br># 拉库不完整,缺少相应文件,检查拉库命令重新拉库<br><span class="hljs-keyword">Error: </span>Cannot find module ‘./xx’<br></code></pre></td></tr></table></figure><p>对于缺少依赖的问题,可以在左侧依赖管理进行安装,通常需要安装的依赖如下所示:</p><p>NodeJs:</p><figure class="highlight x86asm"><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><code class="hljs x86asm">crypto-<span class="hljs-keyword">js</span><br>prettytable<br>dotenv<br>jsdom<br>date-fns<br>tough-cookie<br>tslib<br>ws@<span class="hljs-number">7.4</span><span class="hljs-number">.3</span><br>ts-md5<br>jsdom -g<br>jieba<br><span class="hljs-built_in">fs</span><br>form-data<br>json5<br><span class="hljs-meta">global</span>-agent<br>png-<span class="hljs-keyword">js</span><br>@types/node<br>require<br>typescript<br><span class="hljs-keyword">js</span>-base64<br>axios<br>moment<br></code></pre></td></tr></table></figure><p>Python3:</p><figure class="highlight css"><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><code class="hljs css">requests<br><span class="hljs-selector-tag">canvas</span><br>ping3<br>jieba<br>PyExecJS<br>aiohttp<br></code></pre></td></tr></table></figure><p>Linux:</p><figure class="highlight mipsasm"><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><code class="hljs mipsasm"><span class="hljs-keyword">bizCode</span><br><span class="hljs-keyword"></span><span class="hljs-keyword">bizMsg</span><br><span class="hljs-keyword"></span>lxm<br></code></pre></td></tr></table></figure><p>安装失败可以在 系统设置 - 依赖设置 里面配置代理或者镜像源</p><p>我这里用的是这个</p><p>Node 软件包镜像源:</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">https:</span><span class="hljs-comment">//registry.npmmirror.com</span><br></code></pre></td></tr></table></figure><p>Python 软件包镜像源:</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">https:</span><span class="hljs-comment">//pypi.tuna.tsinghua.edu.cn/simple</span><br></code></pre></td></tr></table></figure><p>Linux 软件包镜像源:</p><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">https:</span><span class="hljs-comment">//mirrors.aliyun.com</span><br></code></pre></td></tr></table></figure><p>当然还是推荐对应的一键安装脚本QLDependency[3]:</p><p>一键安装单独青龙的依赖<br>国内版:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it qinglong bash -c <span class="hljs-string">"<span class="hljs-subst">$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | bash)</span>"</span><br></code></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><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it qinglong bash -c <span class="hljs-string">"<span class="hljs-subst">$(curl -fsSL https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | bash)</span>"</span><br></code></pre></td></tr></table></figure><p>【更新】 版本号 2.12+ 的新版本青龙安装失败请尝试:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it qinglong bash -c <span class="hljs-string">"<span class="hljs-subst">$(curl -fsSL https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/XinQLOneKey.sh | bash)</span>"</span><br></code></pre></td></tr></table></figure><p>其中 -it 后面的 qinglong 是容器的名字,替换成自己的就行,安装完成后重启下镜像即可。</p><h3 id="环境变量"><a href="#环境变量" class="headerlink" title="环境变量"></a>环境变量</h3><p>此时再去手动运行定时任务的时候,发现就可以运行了,但是又出现了一个问题,提示没有环境变量JD_COOKIE,我们这时候就需要抓取JD_COOKIE添加到环境变量中,具体抓取方法参考这里,添加到环境变量中</p><p><img src="https://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/%E5%88%9B%E5%BB%BAJD_COOKIE%E5%8F%98%E9%87%8F.png"></p><p>创建JD_COOKIE变量</p><p>也可以写在配置文件中</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs routeros"><span class="hljs-built_in">export</span> <span class="hljs-attribute">JD_COOKIE</span>=<span class="hljs-string">"xxxxxx"</span><br></code></pre></td></tr></table></figure><p>到这一步,这个羊毛基本算是可以薅下来啦!当然,实际运行和添加的一些其他的环境变量还是需要多看看jdpro的README和ISSUES还有一些教程,还有设置配置文件(拉库、任务、推送、环境变量等)、配置代理池(防止黑号)、推送服务等等需要自行摸索下,只要肯折腾都不难~</p><p>参考</p><p>whyour/qinglong: <a href="https://github.com/whyour/qinglong">https://github.com/whyour/qinglong</a></p><p>6dylan6/jdpro: <a href="https://github.com/6dylan6/jdpro">https://github.com/6dylan6/jdpro</a></p><p>FlechazoPh/QLDependency: <a href="https://github.com/FlechazoPh/QLDependency">https://github.com/FlechazoPh/QLDependency</a></p><p><a href="http://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/">http://mtnxu.com/2024/07/14/%E9%9D%92%E9%BE%99%E9%9D%A2%E6%9D%BF%E6%90%AD%E5%BB%BA%E6%95%99%E7%A8%8B/</a></p>]]></content>
<summary type="html"><h1 id="青龙面板"><a href="#青龙面板" class="headerlink" title="青龙面板"></a>青龙面板</h1><p>青龙是 whyour 大佬写的一个定时任务管理平台,支持 Python3、JavaScript、Shell、Typescri</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="青龙" scheme="https://blog.quickso.cn/tags/%E9%9D%92%E9%BE%99/"/>
</entry>
<entry>
<title>白嫖CloudflareWorkers搭建DockerHub镜像加速服务</title>
<link href="https://blog.quickso.cn/2024/06/22/%E7%99%BD%E5%AB%96CloudflareWorkers%E6%90%AD%E5%BB%BADockerHub%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E6%9C%8D%E5%8A%A1/"/>
<id>https://blog.quickso.cn/2024/06/22/%E7%99%BD%E5%AB%96CloudflareWorkers%E6%90%AD%E5%BB%BADockerHub%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E6%9C%8D%E5%8A%A1/</id>
<published>2024-06-22T14:55:32.000Z</published>
<updated>2024-11-23T13:12:18.436Z</updated>
<content type="html"><![CDATA[<h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><p>基于Cloudflare Workers 搭建 Docker Hub镜像加速服务。</p><ol><li>首先要注册一个Cloudflare账号。</li><li>Cloudflare账号下域名的一级域名,推荐万网注册个top域名,再转移到Cloudflare,很便宜的。</li><li>注意 Worker 每天每免费账号有次数限制,为10万次。每分钟为1000次。</li></ol><h1 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h1><p>登录到CF的仪表盘 <a href="https://dash.cloudflare.com/" title="https://dash.cloudflare.com/">https://dash.cloudflare.com/</a></p><p>点击 workers-and-pages > 创建应用程序 > 创建 Worker > 点击保存 >点击完成 > 编辑代码</p><p><a href="https://img.songxwn.com/file/42714dc1cfc9ed94abb70.png"><img src="https://img.songxwn.com/file/42714dc1cfc9ed94abb70.png"></a></p><h2 id="编辑代码"><a href="#编辑代码" class="headerlink" title="编辑代码"></a>编辑代码</h2><h3 id="编辑-worker-js-文件"><a href="#编辑-worker-js-文件" class="headerlink" title="编辑 worker.js 文件"></a>编辑 worker.js 文件</h3><p>编辑覆盖后,Ctrl + S 即可保存。</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></pre></td><td class="code"><pre><code class="hljs JAVASCRIPT"><span class="hljs-keyword">import</span> <span class="hljs-variable constant_">HTML</span> <span class="hljs-keyword">from</span> <span class="hljs-string">'./docker.html'</span>;<br><span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> {<br> <span class="hljs-keyword">async</span> <span class="hljs-title function_">fetch</span>(<span class="hljs-params">request</span>) {<br> <span class="hljs-keyword">const</span> url = <span class="hljs-keyword">new</span> <span class="hljs-title function_">URL</span>(request.<span class="hljs-property">url</span>);<br> <span class="hljs-keyword">const</span> path = url.<span class="hljs-property">pathname</span>;<br> <span class="hljs-keyword">const</span> originalHost = request.<span class="hljs-property">headers</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">"host"</span>);<br> <span class="hljs-keyword">const</span> registryHost = <span class="hljs-string">"registry-1.docker.io"</span>;<br> <span class="hljs-keyword">if</span> (path.<span class="hljs-title function_">startsWith</span>(<span class="hljs-string">"/v2/"</span>)) {<br> <span class="hljs-keyword">const</span> headers = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>(request.<span class="hljs-property">headers</span>);<br> headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">"host"</span>, registryHost);<br> <span class="hljs-keyword">const</span> registryUrl = <span class="hljs-string">`https://<span class="hljs-subst">${registryHost}</span><span class="hljs-subst">${path}</span>`</span>;<br> <span class="hljs-keyword">const</span> registryRequest = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Request</span>(registryUrl, {<br> <span class="hljs-attr">method</span>: request.<span class="hljs-property">method</span>,<br> <span class="hljs-attr">headers</span>: headers,<br> <span class="hljs-attr">body</span>: request.<span class="hljs-property">body</span>,<br> <span class="hljs-comment">// redirect: "manual",</span><br> <span class="hljs-attr">redirect</span>: <span class="hljs-string">"follow"</span>,<br> });<br> <span class="hljs-keyword">const</span> registryResponse = <span class="hljs-keyword">await</span> <span class="hljs-title function_">fetch</span>(registryRequest);<br> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(registryResponse.<span class="hljs-property">status</span>);<br> <span class="hljs-keyword">const</span> responseHeaders = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>(registryResponse.<span class="hljs-property">headers</span>);<br> responseHeaders.<span class="hljs-title function_">set</span>(<span class="hljs-string">"access-control-allow-origin"</span>, originalHost);<br> responseHeaders.<span class="hljs-title function_">set</span>(<span class="hljs-string">"access-control-allow-headers"</span>, <span class="hljs-string">"Authorization"</span>);<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(registryResponse.<span class="hljs-property">body</span>, {<br> <span class="hljs-attr">status</span>: registryResponse.<span class="hljs-property">status</span>,<br> <span class="hljs-attr">statusText</span>: registryResponse.<span class="hljs-property">statusText</span>,<br> <span class="hljs-attr">headers</span>: responseHeaders,<br> });<br> } <span class="hljs-keyword">else</span> {<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-variable constant_">HTML</span>.<span class="hljs-title function_">replace</span>(<span class="hljs-regexp">/{{host}}/g</span>, originalHost), {<br> <span class="hljs-attr">status</span>: <span class="hljs-number">200</span>,<br> <span class="hljs-attr">headers</span>: {<br> <span class="hljs-string">"content-type"</span>: <span class="hljs-string">"text/html"</span><br> }<br> });<br> }<br> }<br>}<br><br></code></pre></td></tr></table></figure><h3 id="编辑-docker-html-文件"><a href="#编辑-docker-html-文件" class="headerlink" title="编辑 docker.html 文件"></a>编辑 docker.html 文件</h3><p>点击新建文件,创建此文件。ctrl + s 即可保存。</p><p><a href="https://img.songxwn.com/file/9feaf6bf445054b7b6308.png"><img src="https://img.songxwn.com/file/9feaf6bf445054b7b6308.png"></a></p><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs HTML"><span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">html</span>></span><br><span class="hljs-tag"><<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"zh-CN"</span>></span><br><span class="hljs-tag"><<span class="hljs-name">head</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"utf-8"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">title</span>></span>镜像使用说明<span class="hljs-tag"></<span class="hljs-name">title</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css"></span><br><span class="language-css"> <span class="hljs-selector-tag">body</span> {</span><br><span class="language-css"> <span class="hljs-attribute">font-family</span>: <span class="hljs-string">'Roboto'</span>, sans-serif;</span><br><span class="language-css"> <span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span>;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">0</span>;</span><br><span class="language-css"> <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#f4f4f4</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-class">.header</span> {</span><br><span class="language-css"> <span class="hljs-attribute">background</span>: <span class="hljs-built_in">linear-gradient</span>(<span class="hljs-number">135deg</span>, <span class="hljs-number">#667eea</span>, <span class="hljs-number">#764ba2</span>);</span><br><span class="language-css"> <span class="hljs-attribute">color</span>: <span class="hljs-number">#fff</span>;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span> <span class="hljs-number">0</span>;</span><br><span class="language-css"> <span class="hljs-attribute">text-align</span>: center;</span><br><span class="language-css"> <span class="hljs-attribute">box-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">2px</span> <span class="hljs-number">4px</span> <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.1</span>);</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-class">.container</span> {</span><br><span class="language-css"> <span class="hljs-attribute">max-width</span>: <span class="hljs-number">800px</span>;</span><br><span class="language-css"> <span class="hljs-attribute">margin</span>: <span class="hljs-number">40px</span> auto;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>;</span><br><span class="language-css"> <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#fff</span>;</span><br><span class="language-css"> <span class="hljs-attribute">box-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">4px</span> <span class="hljs-number">8px</span> <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0.1</span>);</span><br><span class="language-css"> <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-class">.content</span> {</span><br><span class="language-css"> <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">20px</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-class">.footer</span> {</span><br><span class="language-css"> <span class="hljs-attribute">text-align</span>: center;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span> <span class="hljs-number">0</span>;</span><br><span class="language-css"> <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#333</span>;</span><br><span class="language-css"> <span class="hljs-attribute">color</span>: <span class="hljs-number">#fff</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> pre {</span><br><span class="language-css"> <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#272822</span>;</span><br><span class="language-css"> <span class="hljs-attribute">color</span>: <span class="hljs-number">#f8f8f2</span>;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">15px</span>;</span><br><span class="language-css"> <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">5px</span>;</span><br><span class="language-css"> <span class="hljs-attribute">overflow-x</span>: auto;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-tag">code</span> {</span><br><span class="language-css"> <span class="hljs-attribute">font-family</span>: <span class="hljs-string">'Source Code Pro'</span>, monospace;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-tag">a</span> {</span><br><span class="language-css"> <span class="hljs-attribute">color</span>: <span class="hljs-number">#4CAF50</span>;</span><br><span class="language-css"> <span class="hljs-attribute">text-decoration</span>: none;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> {</span><br><span class="language-css"> <span class="hljs-attribute">text-decoration</span>: underline;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-keyword">@media</span> (<span class="hljs-attribute">max-width</span>: <span class="hljs-number">600px</span>) {</span><br><span class="language-css"> <span class="hljs-selector-class">.container</span> {</span><br><span class="language-css"> <span class="hljs-attribute">margin</span>: <span class="hljs-number">20px</span>;</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">15px</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> <span class="hljs-selector-class">.header</span> {</span><br><span class="language-css"> <span class="hljs-attribute">padding</span>: <span class="hljs-number">15px</span> <span class="hljs-number">0</span>;</span><br><span class="language-css"> }</span><br><span class="language-css"> }</span><br><span class="language-css"></span><span class="hljs-tag"></<span class="hljs-name">style</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">link</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://fonts.loli.net/css2?family=Roboto:wght@400;700&family=Source+Code+Pro:wght@400;700&display=swap"</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span>></span><br><span class="hljs-tag"></<span class="hljs-name">head</span>></span><br><span class="hljs-tag"><<span class="hljs-name">body</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"header"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">h1</span>></span>镜像使用说明<span class="hljs-tag"></<span class="hljs-name">h1</span>></span><br> <span class="hljs-tag"></<span class="hljs-name">div</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"container"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"content"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">p</span>></span>为了加速镜像拉取,你可以使用以下命令设置 registry mirror:<span class="hljs-tag"></<span class="hljs-name">p</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">pre</span>></span><span class="hljs-tag"><<span class="hljs-name">code</span>></span>sudo tee /etc/docker/daemon.json <<span class="hljs-tag"><<span class="hljs-name">EOF</span></span><br><span class="hljs-tag">{</span><br><span class="hljs-tag"> "<span class="hljs-attr">registry-mirrors</span>"<span class="hljs-attr">:</span> ["<span class="hljs-attr">https:</span>//{{<span class="hljs-attr">host</span>}}"]</span><br><span class="hljs-tag">}</span><br><span class="hljs-tag"><span class="hljs-attr">EOF</span></<span class="hljs-attr">code</span>></span><span class="hljs-tag"></<span class="hljs-name">pre</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">p</span>></span>为了避免 Worker 用量耗尽,你可以手动 pull 镜像然后 re-tag 之后 push 至本地镜像仓库:<span class="hljs-tag"></<span class="hljs-name">p</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">pre</span>></span><span class="hljs-tag"><<span class="hljs-name">code</span>></span>docker pull {{host}}/library/alpine:latest # 拉取 library 镜像<br>docker pull {{host}}/coredns/coredns:latest # 拉取 coredns 镜像<span class="hljs-tag"></<span class="hljs-name">code</span>></span><span class="hljs-tag"></<span class="hljs-name">pre</span>></span><br> <span class="hljs-tag"></<span class="hljs-name">div</span>></span><br> <span class="hljs-tag"></<span class="hljs-name">div</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"footer"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">p</span>></span>Powered by Cloudflare Workers<span class="hljs-tag"></<span class="hljs-name">p</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">p</span>></span><span class="hljs-tag"><<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://blog.quickso.cn"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"_blank"</span>></span>访问博客<span class="hljs-tag"></<span class="hljs-name">a</span>></span><span class="hljs-tag"></<span class="hljs-name">p</span>></span><br> <span class="hljs-tag"></<span class="hljs-name">div</span>></span><br><span class="hljs-tag"></<span class="hljs-name">body</span>></span><br><span class="hljs-tag"></<span class="hljs-name">html</span>></span><br><br></code></pre></td></tr></table></figure><h2 id="保存部署并配置触发器"><a href="#保存部署并配置触发器" class="headerlink" title="保存部署并配置触发器"></a>保存部署并配置触发器</h2><p>上述两个文件的代码保存后,选择部署 > 保存并部署</p><p><strong>成功的话会在页面下方出现绿色的提示:版本已保存,如果出现 <code>红色提示</code>,请你去上面的创建docker.html,<code>改成</code>其他的名称,如:<code>page.html</code>,然后在 <code>worker.js</code>开头的 <code>from后面</code>./docekr.html <code>替换</code>成./page.html。<code>再进行部署</code>!<code>必须提示版本已保存!</code></strong></p><p>点击左上角的项目连接,配置触发器。(自定义域名访问)</p><h2 id="自定义域名访问"><a href="#自定义域名访问" class="headerlink" title="自定义域名访问"></a>自定义域名访问</h2><p><a href="https://img.songxwn.com/file/9962e62885a1c71cec6a6.png"><img src="https://img.songxwn.com/file/9962e62885a1c71cec6a6.png"></a></p><h1 id="访问界面和配置docker如下"><a href="#访问界面和配置docker如下" class="headerlink" title="访问界面和配置docker如下"></a>访问界面和配置docker如下</h1><p><a href="https://img.songxwn.com/file/b6d67cec8571295d69f33.png"><img src="https://img.songxwn.com/file/b6d67cec8571295d69f33.png"></a></p><h1 id="参考来源"><a href="#参考来源" class="headerlink" title="参考来源"></a>参考来源</h1><p><a href="https://blog.lty520.faith/%E5%8D%9A%E6%96%87/%E8%87%AA%E5%BB%BAdocker-hub%E5%8A%A0%E9%80%9F%E9%95%9C%E5%83%8F/">https://blog.lty520.faith/博文/自建docker-hub加速镜像/</a></p><p><a href="https://songxwn.com/cf-works-DockerHub-Proxy/">https://songxwn.com/cf-works-DockerHub-Proxy/</a></p><p><a href="https://www.luomubiji.host/workers.html">https://www.luomubiji.host/workers.html</a></p>]]></content>
<summary type="html"><h1 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h1><p>基于Cloudflare Workers 搭建 Docker Hub镜像加速服务。</p>
<ol>
<li>首先要注册一个Cloudfla</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Cloudflare" scheme="https://blog.quickso.cn/tags/Cloudflare/"/>
<category term="镜像" scheme="https://blog.quickso.cn/tags/%E9%95%9C%E5%83%8F/"/>
<category term="DockerHub" scheme="https://blog.quickso.cn/tags/DockerHub/"/>
</entry>
<entry>
<title>Final Cut Pro快捷键大全</title>
<link href="https://blog.quickso.cn/2024/06/16/FinalCutProk%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%A4%A7%E5%85%A8/"/>
<id>https://blog.quickso.cn/2024/06/16/FinalCutProk%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%A4%A7%E5%85%A8/</id>
<published>2024-06-16T14:44:02.000Z</published>
<updated>2024-11-23T13:12:18.413Z</updated>
<content type="html"><![CDATA[<p>非常有助于我们提高工作效率,备用一下下面的表格,在我们使用FCPX软件时,会非常轻松的查询到键盘与操作对应的说明。可以收藏以备不时之需!</p><h1 id="Final-Cut-Pro-X-键盘快捷键"><a href="#Final-Cut-Pro-X-键盘快捷键" class="headerlink" title="Final Cut Pro X 键盘快捷键"></a>Final Cut Pro X 键盘快捷键</h1><p><strong>通过 Contorl+F 输入关键词可以快速查找对应的快捷键</strong></p><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>隐藏应用程序</td><td>Command-H</td><td>隐藏 Final Cut Pro</td></tr><tr><td>隐藏其他应用程序</td><td>Option-Command-H</td><td>隐藏除 Final Cut Pro 之外的所有应用程序</td></tr><tr><td>键盘自定</td><td>Option-Command-K</td><td>打开命令编辑器</td></tr><tr><td>最小化</td><td>Command-M</td><td>最小化 Final Cut Pro</td></tr><tr><td>打开资源库</td><td>Command-O</td><td>打开现有资源库或新资源库</td></tr><tr><td>偏好设置</td><td>Command-逗号 (,)</td><td>打开 Final Cut Pro 的“偏好设置”窗口</td></tr><tr><td>退出</td><td>Command-Q</td><td>退出 Final Cut Pro</td></tr><tr><td>重做更改</td><td>Shift-Command-Z</td><td>重做上一个命令</td></tr><tr><td>撤销更改</td><td>Command-Z</td><td>撤销上一个命令</td></tr></tbody></table><h3 id="编辑"><a href="#编辑" class="headerlink" title="编辑"></a>编辑</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>调整音量(绝对)</td><td>Control-Option-L</td><td>将所有所选片段的音频音量调整为特定的 dB 值</td></tr><tr><td>调整音量(相对)</td><td>Control-L</td><td>使用相同的 dB 值来调整所有所选片段的音频音量</td></tr><tr><td>追加到故事情节</td><td>E</td><td>将所选部分添加到故事情节的结尾</td></tr><tr><td>试演:添加到试演</td><td>Control-Shift-Y</td><td>将所选片段添加到试演</td></tr><tr><td>试演:复制并粘贴效果</td><td>Option-Command-Y</td><td>复制试演中的片段并添加效果</td></tr><tr><td>试演:复制为试演</td><td>Option-Y</td><td>使用时间线片段和该片段(包括应用的效果)的复制版本创建试演,</td></tr><tr><td>试演:复制原始项</td><td>Shift-Command-Y</td><td>复制选定的试演片段,但不包括应用的效果</td></tr><tr><td>试演:替换并添加到试演</td><td>Shift-Y</td><td>创建试演并使用当前所选部分替换时间线片段</td></tr><tr><td>切割</td><td>Command-B</td><td>剪切浏览条或播放头位置处的主要故事情节片段(或所选部分)</td></tr><tr><td>全部切割</td><td>Shift-Command-B</td><td>剪切浏览条或播放头位置的所有片段</td></tr><tr><td>将片段项分开</td><td>Shift-Command-G</td><td>将所选项拆分为其组件部分</td></tr><tr><td>更改时间长度</td><td>Control-D</td><td>更改所选部分的时间长度</td></tr><tr><td>连接到主要故事情节</td><td>Q</td><td>将所选内容连接到主要故事情节</td></tr><tr><td>连接到主要故事情节 – 反向时序</td><td>Shift-Q</td><td>将所选内容连接到主要故事情节,并将所选内容的结束点与浏览条或播放头对齐</td></tr><tr><td>拷贝</td><td>Command-C</td><td>拷贝所选部分</td></tr><tr><td>创建试演</td><td>Command-Y</td><td>从所选部分创建试演</td></tr><tr><td>创建故事情节</td><td>Command-G</td><td>从连接的片段中的所选内容创建故事情节</td></tr><tr><td>剪切</td><td>Command-X</td><td>剪切所选部分</td></tr><tr><td>剪切和切换到检视器角度 1</td><td>1</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 1</td></tr><tr><td>剪切和切换到检视器角度 2</td><td>2</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 2</td></tr><tr><td>剪切和切换到检视器角度 3</td><td>3</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 3</td></tr><tr><td>剪切和切换到检视器角度 4</td><td>4</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 4</td></tr><tr><td>剪切和切换到检视器角度 5</td><td>5</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 5</td></tr><tr><td>剪切和切换到检视器角度 6</td><td>6</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 6</td></tr><tr><td>剪切和切换到检视器角度 7</td><td>7</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 7</td></tr><tr><td>剪切和切换到检视器角度 8</td><td>8</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 8</td></tr><tr><td>剪切和切换到检视器角度 9</td><td>9</td><td>将多机位片段剪切并切换到当前倾斜角度组的角度 9</td></tr><tr><td>Delete</td><td>Delete</td><td>删除所选时间线,拒绝所选浏览器,或移除直通编辑</td></tr><tr><td>仅删除所选部分</td><td>Option-Command-Delete</td><td>删除所选部分并将连接片段连接到产生的空隙片段</td></tr><tr><td>取消选择全部</td><td>Shift-Command-A</td><td>取消选择所有选定项目</td></tr><tr><td>复制</td><td>Command-D</td><td>复制浏览器选择</td></tr><tr><td>启用/停用片段</td><td>V</td><td>对所选部分启用或停用回放</td></tr><tr><td>展开音频/视频</td><td>Control-S</td><td>单独查看选定片段的音频和视频</td></tr><tr><td>展开/折迭音频组件</td><td>Control-Option-S</td><td>在时间线中展开或折迭所选部分的音频组件</td></tr><tr><td>延长编辑</td><td>Shift-X</td><td>将选定的编辑点延长到浏览条或播放头位置</td></tr><tr><td>向下扩展所选部分</td><td>Shift–下箭头键</td><td>在浏览器中,将下一个项目添加到所选内容</td></tr><tr><td>向上扩展所选部分</td><td>Shift–上箭头键</td><td>在浏览器中,将上一个项目添加到所选内容</td></tr><tr><td>最终确定试演</td><td>Option-Shift-Y</td><td>迭化试演并将其替换为试演挑选项</td></tr><tr><td>插入</td><td>W</td><td>在浏览条或播放头位置插入所选内容</td></tr><tr><td>插入/连接静帧</td><td>Option-F</td><td>在时间线的播放头或浏览条位置插入一个静帧,或将一个静帧从事件中的浏览条或播放头位置连接到时间线中的播放头位置</td></tr><tr><td>插入空隙</td><td>Option-W</td><td>在浏览条或播放头位置插入空隙片段</td></tr><tr><td>插入占位符</td><td>Option-Command-W</td><td>在浏览条或播放头位置插入占位符片段</td></tr><tr><td>从故事情节中提取</td><td>Option–Command–上箭头键</td><td>从故事情节举出选择并将其连接到产生的空隙片段</td></tr><tr><td>将音量调低 1 dB</td><td>Control-连字符键 (-)</td><td>将音量调低 1 dB</td></tr><tr><td>移动播放头位置</td><td>Control-P</td><td>通过输入时间码值移动播放头</td></tr><tr><td>新建复合片段</td><td>Option-G</td><td>创建新的复合片段(如果无选择,创建空复合片段)</td></tr><tr><td>向左挪动音频子帧</td><td>Option-逗号键 (,)</td><td>将选定的音频编辑点向左移动 1 个子帧,从而创建拆分编辑</td></tr><tr><td>向左挪动音频子帧很多</td><td>Option-Shift-逗号键 (,)</td><td>将选定的音频编辑点向左移动 10 个子帧,从而创建拆分编辑</td></tr><tr><td>向右挪动音频子帧</td><td>Option-句点键 (.)</td><td>将选定的音频编辑点向右移动 1 个子帧,从而创建拆分编辑</td></tr><tr><td>向右挪动音频子帧很多</td><td>Option-Shift-句点键 (.)</td><td>将选定的音频编辑点向右移动 10 个子帧,从而创建拆分编辑</td></tr><tr><td>向下挪动</td><td>Option–下箭头键</td><td>在动画编辑器中向下挪动选定关键帧的值</td></tr><tr><td>向左挪动</td><td>逗号键 (,)</td><td>将所选部分向左挪动 1 个单位</td></tr><tr><td>向左挪动很多</td><td>Shift-逗号键 (,)</td><td>将所选部分向左挪动 10 个单位</td></tr><tr><td>向右挪动</td><td>句点键 (.)</td><td>将所选部分向右挪动 1 个单位</td></tr><tr><td>向右挪动很多</td><td>Shift-句点键 (.)</td><td>将所选部分向右挪动 10 个单位</td></tr><tr><td>向上挪动</td><td>Option–上箭头键</td><td>在动画编辑器中向上挪动选定关键帧的值</td></tr><tr><td>打开试演</td><td>Y</td><td>打开选定的试演</td></tr><tr><td>覆盖连接</td><td>重音符 (`)</td><td>临时覆盖所选部分的片段连接</td></tr><tr><td>覆盖</td><td>D</td><td>在浏览条或播放头位置覆盖</td></tr><tr><td>覆盖 – 反向时序</td><td>Shift-D</td><td>从浏览条或播放头位置反向覆盖</td></tr><tr><td>覆盖到主要故事情节</td><td>Option–Command–下箭头键</td><td>在主要故事情节的浏览条或播放头位置覆盖</td></tr><tr><td>粘贴为连接</td><td>Option-V</td><td>粘贴选择并将其连接到主要故事情节</td></tr><tr><td>在播放头粘贴插入</td><td>Command-V</td><td>在浏览条或播放头位置插入剪贴板内容</td></tr><tr><td>上一个角度</td><td>Control–Shift–左箭头键</td><td>切换到多机位片段中的上一个角度</td></tr><tr><td>上一个音频角度</td><td>Option–Shift–左箭头键</td><td>切换到多机位片段中的上一个音频角度</td></tr><tr><td>上一个挑选项</td><td>Control–左箭头键</td><td>选择“试演”窗口中的上一个片段,使其成为试演挑选项</td></tr><tr><td>上一个视频角度</td><td>Shift–Command–左箭头键</td><td>切换到多机位片段中的上一个视频角度</td></tr><tr><td>将音量调高 1 dB</td><td>Control–等号键 (=)</td><td>将音量调高 1 dB</td></tr><tr><td>替换</td><td>Shift-R</td><td>使用浏览器中的所选部分来替换时间线中的所选片段</td></tr><tr><td>从开始处替换</td><td>Option-R</td><td>将时间线中的所选片段替换为浏览器选择,其中从其开始点开始</td></tr><tr><td>替换为空隙</td><td>Shift-Delete</td><td>将选定的时间线片段替换为空隙片段</td></tr><tr><td>全选</td><td>Command-A</td><td>选择所有片段</td></tr><tr><td>选择片段</td><td>C</td><td>选择时间线中指针下方的片段</td></tr><tr><td>选择左音频边缘</td><td>Shift–左方括号 ([)</td><td>对于展开视图中的音频/视频片段,选择音频编辑点的左边缘</td></tr><tr><td>选择左边缘</td><td>左方括号 ([)</td><td>选择编辑点的左边缘</td></tr><tr><td>选择左音频编辑边缘和右音频编辑边缘</td><td>Shift-反斜杠键 ()</td><td>对于展开视图中的音频/视频片段,选择音频编辑点的左边缘和右边缘</td></tr><tr><td>选择左编辑边缘和右编辑边缘</td><td>反斜杠键 ()</td><td>选择编辑点的左边缘和右边缘</td></tr><tr><td>选择下一个角度</td><td>Control–Shift–右箭头键</td><td>切换到多机位片段中的下一个角度</td></tr><tr><td>选择下一个音频角度</td><td>Option–Shift–右箭头键</td><td>切换到多机位片段中的下一个音频角度</td></tr><tr><td>选择下一个挑选项</td><td>Control–右箭头键</td><td>选择“试演”窗口中的下一个片段,使其成为试演挑选项</td></tr><tr><td>选择下一个视频角度</td><td>Shift–Command–右箭头键</td><td>切换到多机位片段中的下一个视频角度</td></tr><tr><td>选择右音频边缘</td><td>Shift–右方括号 (])</td><td>对于展开视图中的音频/视频片段,选择音频编辑点的右边缘</td></tr><tr><td>选择右边缘</td><td>右方括号 (])</td><td>选择编辑点的右边缘</td></tr><tr><td>设定附加所选部分结尾</td><td>Shift-Command-O</td><td>在播放头或浏览条位置设定附加范围选择结束点</td></tr><tr><td>设定附加所选部分开头</td><td>Shift-Command-I</td><td>在播放头或浏览条位置设定附加范围选择起始点</td></tr><tr><td>显示/隐藏精确度编辑器</td><td>Control-E</td><td>选择编辑点时,显示或隐藏精确度编辑器</td></tr><tr><td>吸附</td><td>N</td><td>打开或关闭吸附</td></tr><tr><td>单独播放</td><td>Option-S</td><td>单独播放时间线中选择的项</td></tr><tr><td>源媒体:音频和视频</td><td>Shift-1</td><td>打开音频/视频模式以将选择的视频和音频部分添加到时间线</td></tr><tr><td>源媒体:仅音频</td><td>Shift-3</td><td>打开仅音频模式以将选择的音频部分添加到时间线</td></tr><tr><td>源媒体:仅视频</td><td>Shift-2</td><td>打开仅视频模式以将选择的视频部分添加到时间线</td></tr><tr><td>切换到检视器角度 1</td><td>Option-1</td><td>将多机位片段切换到当前倾斜角度组的角度 1</td></tr><tr><td>切换到检视器角度 2</td><td>Option-2</td><td>将多机位片段切换到当前倾斜角度组的角度 2</td></tr><tr><td>切换到检视器角度 3</td><td>Option-3</td><td>将多机位片段切换到当前倾斜角度组的角度 3</td></tr><tr><td>切换到检视器角度 4</td><td>Option-4</td><td>将多机位片段切换到当前倾斜角度组的角度 4</td></tr><tr><td>切换到检视器角度 5</td><td>Option-5</td><td>将多机位片段切换到当前倾斜角度组的角度 5</td></tr><tr><td>切换到检视器角度 6</td><td>Option-6</td><td>将多机位片段切换到当前倾斜角度组的角度 6</td></tr><tr><td>切换到检视器角度 7</td><td>Option-7</td><td>将多机位片段切换到当前倾斜角度组的角度 7</td></tr><tr><td>切换到检视器角度 8</td><td>Option-8</td><td>将多机位片段切换到当前倾斜角度组的角度 8</td></tr><tr><td>切换到检视器角度 9</td><td>Option-9</td><td>将多机位片段切换到当前倾斜角度组的角度 9</td></tr><tr><td>切换故事情节模式</td><td>G</td><td>打开或关闭在时间线中拖移片段时构建故事情节的功能</td></tr><tr><td>修剪结尾处</td><td>Option–右方括号 (])</td><td>将选定或最顶部的片段的结尾处修剪到浏览条或播放头位置</td></tr><tr><td>修剪开始处</td><td>Option–左方括号 ([)</td><td>将片段开始点修剪到浏览条或播放头位置</td></tr><tr><td>修剪到所选部分</td><td>Option-反斜杠键 ()</td><td>将片段开始点和结束点修剪到范围选择</td></tr></tbody></table><h3 id="效果"><a href="#效果" class="headerlink" title="效果"></a>效果</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>添加基本下三分之一</td><td>Control-Shift-T</td><td>将基本下三分之一字幕连接到主要故事情节</td></tr><tr><td>添加基本字幕</td><td>Control-T</td><td>将基本字幕连接到主要故事情节</td></tr><tr><td>添加默认音频效果</td><td>Option-Command-E</td><td>将默认音频效果添加到所选部分</td></tr><tr><td>添加默认转场</td><td>Command-T</td><td>将默认转场添加到所选部分</td></tr><tr><td>添加默认视频效果</td><td>Option-E</td><td>将默认视频效果添加到所选部分</td></tr><tr><td>颜色板:还原当前板控制</td><td>Option-Delete</td><td>还原当前“颜色板”面板中的控制</td></tr><tr><td>颜色板:切换到“颜色”面板</td><td>Control-Command-C</td><td>切换到颜色板中的“颜色”面板</td></tr><tr><td>颜色板:切换到“曝光”面板</td><td>Control-Command-E</td><td>切换到颜色板中的“曝光”面板</td></tr><tr><td>颜色板:切换到“饱和度”面板</td><td>Control-Command-S</td><td>切换到颜色板中的“饱和度”面板</td></tr><tr><td>拷贝效果</td><td>Option-Command-C</td><td>拷贝选定的效果及其设置</td></tr><tr><td>拷贝关键帧</td><td>Option-Shift-C</td><td>拷贝所选关键帧及其设置</td></tr><tr><td>剪切关键帧</td><td>Option-Shift-X</td><td>剪切所选关键帧及其设置</td></tr><tr><td>启用/停用平衡颜色</td><td>Option-Command-B</td><td>打开或关闭平衡色彩校正</td></tr><tr><td>匹配音频</td><td>Shift-Command-M</td><td>在片段之间匹配声音</td></tr><tr><td>匹配颜色</td><td>Option-Command-M</td><td>在片段之间匹配颜色</td></tr><tr><td>下一个文本</td><td>Option-Tab</td><td>导航到下一个文本项</td></tr><tr><td>粘贴属性</td><td>Shift-Command-V</td><td>将所选属性及其设置粘贴到所选部分</td></tr><tr><td>粘贴效果</td><td>Option-Command-V</td><td>将效果及其设置粘贴到所选部分</td></tr><tr><td>粘贴关键帧</td><td>Option-Shift-V</td><td>将关键帧及其设置粘贴到所选部分</td></tr><tr><td>上一个文本</td><td>Option-Shift-Tab</td><td>导航到上一个文本项</td></tr><tr><td>重新定时编辑器</td><td>Command-R</td><td>显示或隐藏重新定时编辑器</td></tr><tr><td>重新定时:创建正常速度分段</td><td>Shift-N</td><td>将选择设定为以正常 (100%) 速度播放</td></tr><tr><td>重新定时:保留</td><td>Shift-H</td><td>创建 2 秒静止分段</td></tr><tr><td>重新定时:还原</td><td>Option-Command-R</td><td>将选择还原为以正常 (100%) 速度向前播放</td></tr><tr><td>单独播放动画</td><td>Control-Shift-V</td><td>在视频动画编辑器中一次仅显示一个效果</td></tr></tbody></table><h3 id="常规"><a href="#常规" class="headerlink" title="常规"></a>常规</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>Delete</td><td>Delete</td><td>删除所选时间线,拒绝所选浏览器,或移除直通编辑</td></tr><tr><td>查找</td><td>Command-F</td><td>显示或隐藏“过滤器”窗口(浏览器中)或时间线索引(时间线中)</td></tr><tr><td>前往事件检视器</td><td>Option-Command-3</td><td>激活事件检视器</td></tr><tr><td>导入媒体</td><td>Command-I</td><td>从设备、摄像机或归档导入媒体</td></tr><tr><td>资源库属性</td><td>Control-Command-J</td><td>打开当前资源库的“资源库属性”检查器</td></tr><tr><td>移到废纸篓</td><td>Command-Delete</td><td>将选择移到 Finder 废纸篓</td></tr><tr><td>新项目</td><td>Command-N</td><td>创建新项目</td></tr><tr><td>项目属性</td><td>Command-J</td><td>打开当前项目的“属性”检查器</td></tr><tr><td>渲染全部</td><td>Control-Shift-R</td><td>启动当前项目的所有渲染任务</td></tr><tr><td>渲染所选部分</td><td>Control-R</td><td>开始选择的渲染任务</td></tr><tr><td>在 Finder 中显示</td><td>Shift-Command-R</td><td>在 Finder 中显示所选事件片段的源媒体文件</td></tr></tbody></table><h3 id="标记"><a href="#标记" class="headerlink" title="标记"></a>标记</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>添加标记</td><td>M</td><td>在浏览条或播放头位置添加标记</td></tr><tr><td>所有片段</td><td>Control-C</td><td>更改浏览器过滤器设置来显示所有片段</td></tr><tr><td>添加标记并修改</td><td>Option-M</td><td>添加标记并编辑标记文本</td></tr><tr><td>应用关键词标记 1</td><td>Control-1</td><td>将关键词 1 应用到所选部分</td></tr><tr><td>应用关键词标记 2</td><td>Control-2</td><td>将关键词 2 应用到所选部分</td></tr><tr><td>应用关键词标记 3</td><td>Control-3</td><td>将关键词 3 应用到所选部分</td></tr><tr><td>应用关键词标记 4</td><td>Control-4</td><td>将关键词 4 应用到所选部分</td></tr><tr><td>应用关键词标记 5</td><td>Control-5</td><td>将关键词 5 应用到所选部分</td></tr><tr><td>应用关键词标记 6</td><td>Control-6</td><td>将关键词 6 应用到所选部分</td></tr><tr><td>应用关键词标记 7</td><td>Control-7</td><td>将关键词 7 应用到所选部分</td></tr><tr><td>应用关键词标记 8</td><td>Control-8</td><td>将关键词 8 应用到所选部分</td></tr><tr><td>应用关键词标记 9</td><td>Control-9</td><td>将关键词 9 应用到所选部分</td></tr><tr><td>清除所选范围</td><td>Option-X</td><td>清除范围选择</td></tr><tr><td>清除范围结尾</td><td>Option-O</td><td>清除范围的结束点</td></tr><tr><td>清除范围开头</td><td>Option-I</td><td>清除范围的开始点</td></tr><tr><td>删除标记</td><td>Control-M</td><td>删除选定的标记</td></tr><tr><td>删除选择中的标记</td><td>Control-Shift-M</td><td>删除选择中的所有标记</td></tr><tr><td>取消选择全部</td><td>Shift-Command-A</td><td>取消选择所有选定项目</td></tr><tr><td>个人收藏</td><td>F</td><td>将浏览器选择评分为个人收藏</td></tr><tr><td>个人收藏</td><td>Control-F</td><td>更改浏览器过滤器设置来显示个人收藏</td></tr><tr><td>隐藏被拒绝的项目</td><td>Control-H</td><td>更改浏览器过滤器设置来隐藏被拒绝的片段</td></tr><tr><td>新关键词精选</td><td>Shift-Command-K</td><td>创建新的关键词精选</td></tr><tr><td>新智能精选</td><td>Option-Command-N</td><td>创建新的智能精选</td></tr><tr><td>范围选择工具</td><td>R</td><td>将“范围选择”工具设为活跃</td></tr><tr><td>拒绝</td><td>删除</td><td>将浏览器中的当前所选部分标记为被拒绝的Note: 如果时间线而非浏览器处于活跃状态,则 Delete 键将移除所选项目。</td></tr><tr><td>已拒绝的</td><td>Control-Delete</td><td>更改浏览器过滤器设置来显示被拒绝的片段</td></tr><tr><td>从选择中移除所有关键词</td><td>Control-0</td><td>从浏览器选择中移除所有关键词</td></tr><tr><td>角色:应用对话角色</td><td>Control-Option-D</td><td>将对话角色应用到所选片段</td></tr><tr><td>角色:应用效果角色</td><td>Control-Option-E</td><td>将“效果”角色应用于选定的片段</td></tr><tr><td>角色:应用音乐角色</td><td>Control-Option-M</td><td>将“音乐”角色应用于选定的片段</td></tr><tr><td>角色:应用字幕角色</td><td>Control-Option-T</td><td>将“字幕”角色应用于选定的片段</td></tr><tr><td>角色:应用视频角色</td><td>Control-Option-V</td><td>将“视频”角色应用于选定的片段</td></tr><tr><td>全选</td><td>Command-A</td><td>选择所有片段</td></tr><tr><td>选择片段范围</td><td>X</td><td>将范围选择设定为与浏览条或播放头下方的片段边界匹配。</td></tr><tr><td>设定附加范围结尾</td><td>Shift-Command-O</td><td>在播放头或浏览条位置设定附加范围选择结束点</td></tr><tr><td>设定附加范围开头</td><td>Shift-Command-I</td><td>在播放头或浏览条位置设定附加范围选择起始点</td></tr><tr><td>设定范围结尾</td><td>O</td><td>设定范围的结束点</td></tr><tr><td>设定范围结尾</td><td>Control-O</td><td>编辑文本栏时设定范围的结束点</td></tr><tr><td>设定范围开头</td><td>I</td><td>设定范围的开始点</td></tr><tr><td>设定范围开头</td><td>Control-I</td><td>编辑文本栏时设定范围的开始点</td></tr><tr><td>取消评分</td><td>U</td><td>从选择中移除评分</td></tr></tbody></table><h3 id="整理"><a href="#整理" class="headerlink" title="整理"></a>整理</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>新事件</td><td>Option-N</td><td>创建新事件</td></tr><tr><td>新建文件夹</td><td>Shift-Command-N</td><td>创建新文件夹</td></tr><tr><td>在浏览器中显示</td><td>Shift-F</td><td>在浏览器中显示选定的片段</td></tr><tr><td>在浏览器中显示项目</td><td>Option-Shift-Command-F</td><td>在浏览器中显示打开的项目</td></tr><tr><td>同步片段</td><td>Option-Command-G</td><td>同步所选事件片段</td></tr></tbody></table><h3 id="回放-x2F-导航"><a href="#回放-x2F-导航" class="headerlink" title="回放/导航"></a>回放/导航</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>音频浏览</td><td>Shift-S</td><td>打开或关闭音频浏览</td></tr><tr><td>试演:预览</td><td>Control-Command-Y</td><td>在时间线的上下文中播放挑选项</td></tr><tr><td>片段浏览</td><td>Option-Command-S</td><td>打开或关闭片段浏览</td></tr><tr><td>仅剪切/切换多机位音频</td><td>Option-Shift-3</td><td>打开仅音频模式以进行多机位剪切和切换</td></tr><tr><td>剪切/切换多机位音频和视频</td><td>Option-Shift-1</td><td>打开音频/视频模式以进行多机位剪切和切换</td></tr><tr><td>仅剪切/切换多机位视频</td><td>Option-Shift-2</td><td>打开仅视频模式以进行多机位剪切和切换</td></tr><tr><td>向下</td><td>下箭头键</td><td>转至下一项(浏览器中)或下一个编辑点(时间线中)</td></tr><tr><td>向下</td><td>Control–下箭头键</td><td>编辑文本栏时,转至下一项(浏览器中)或下一个编辑点(时间线中)</td></tr><tr><td>后退 10 帧</td><td>Shift–左箭头键</td><td>将播放头向后移动 10 帧</td></tr><tr><td>前进 10 帧</td><td>Shift–右箭头键</td><td>将播放头向前移动 10 帧</td></tr><tr><td>跳到开头</td><td>个人按钮</td><td>将播放头移到时间线的开始处或浏览器中的第一个片段</td></tr><tr><td>跳到结尾</td><td>“结束”按钮</td><td>将播放头移到时间线的结尾处或浏览器中的最后一个片段</td></tr><tr><td>跳到下一个倾斜角度组</td><td>Option-Shift-撇号键 (’)</td><td>在当前的多机位片段中显示角度的下一个倾斜角度组</td></tr><tr><td>跳到下一个编辑点</td><td>撇号键 (’)</td><td>将播放头移到时间线中的下一个编辑点</td></tr><tr><td>跳到下一栏</td><td>Option–右箭头键</td><td>将播放头移到隔行扫描片段中的下一栏</td></tr><tr><td>跳到下一帧</td><td>右箭头键</td><td>将播放头移到下一帧</td></tr><tr><td>跳到下一子帧</td><td>Command–右箭头键</td><td>将播放头移到下一音频子帧</td></tr><tr><td>跳到上一个倾斜角度组</td><td>Option-Shift-分号键 (;)</td><td>在当前的多机位片段中显示角度的上一个倾斜角度组</td></tr><tr><td>跳到上一个编辑点</td><td>分号键 (;)</td><td>将播放头移到时间线中的上一个编辑点</td></tr><tr><td>跳到上一栏</td><td>Option–左箭头键</td><td>将播放头移到隔行扫描片段中的上一栏</td></tr><tr><td>跳到上一帧</td><td>左箭头键</td><td>将播放头移到上一帧</td></tr><tr><td>跳到上一子帧</td><td>Command–左箭头键</td><td>将播放头移到上一音频子帧</td></tr><tr><td>跳到范围结尾</td><td>Shift-O</td><td>将播放头移到范围选择的结束处。</td></tr><tr><td>跳到范围开头</td><td>Shift-I</td><td>将播放头移到范围选择的开始处。</td></tr><tr><td>循环回放</td><td>Command-L</td><td>打开或关闭循环回放</td></tr><tr><td>监视音频</td><td>Shift-A</td><td>打开或关闭要浏览的角度的音频监视</td></tr><tr><td>导航时间码输入</td><td>连字符键 (-)</td><td>输入负时间码值将向后移动播放头、向后移动片段或修剪范围或片段,具体取决于选择</td></tr><tr><td>下一个片段</td><td>Control–Command–右箭头键</td><td>转至下一项(浏览器中)或下一个编辑点(时间线中)</td></tr><tr><td>下一个标记</td><td>Control-撇号键 (’)</td><td>将播放头移到下一个标记</td></tr><tr><td>播放当前位置前后片段</td><td>Shift–问号键 (?)</td><td>在播放头位置周围播放</td></tr><tr><td>向前播放</td><td>L</td><td>向前播放(按下 L 键多次可增加回放速度)</td></tr><tr><td>从播放头播放</td><td>Option–空格键</td><td>从播放头位置播放</td></tr><tr><td>全屏幕播放</td><td>Shift-Command-F</td><td>从浏览条或播放头位置全屏幕播放</td></tr><tr><td>倒退播放</td><td>J</td><td>倒退播放(按下 J 键多次可增加倒退回放速度)</td></tr><tr><td>倒退播放</td><td>Control-J</td><td>编辑文本栏时倒退播放(按下 J 键多次可增加倒退回放速度)</td></tr><tr><td>倒退播放</td><td>Shift–空格键</td><td>倒退播放</td></tr><tr><td>播放所选部分</td><td>正斜杠键 (/)</td><td>播放选择</td></tr><tr><td>播放到结尾</td><td>Control-Shift-O</td><td>从播放头播放到选择结尾</td></tr><tr><td>播放/暂停</td><td>空格键</td><td>开始或暂停回放</td></tr><tr><td>播放/暂停</td><td>Control–空格键</td><td>编辑文本栏时开始或暂停回放</td></tr><tr><td>正时间码输入</td><td>等号键 (=)</td><td>输入正时间码值将向前移动播放头、向前移动片段或修剪范围或片段,具体取决于选择</td></tr><tr><td>上一个片段</td><td>Control–Command–左箭头键</td><td>转至上一项(浏览器中)或上一个编辑点(时间线中)</td></tr><tr><td>上一个标记</td><td>Control-分号键 (;)</td><td>将播放头移到上一个标记</td></tr><tr><td>设定监视角度</td><td>Shift-V</td><td>将要浏览的角度设定为监视角度</td></tr><tr><td>浏览</td><td>S</td><td>打开或关闭浏览</td></tr><tr><td>开始/停止画外音录制</td><td>Option-Shift-A</td><td>开始或停止使用“录制画外音”窗口来录制音频</td></tr><tr><td>停止</td><td>K</td><td>停止回放</td></tr><tr><td>停止</td><td>Control-K</td><td>编辑文本栏时停止回放</td></tr><tr><td>时间线历史记录后退</td><td>Command–左方括号 ([)</td><td>在时间线历史记录中后退一层</td></tr><tr><td>时间线历史记录前进</td><td>Command–右方括号 (])</td><td>在时间线历史记录中前进一层</td></tr><tr><td>向上</td><td>上箭头键</td><td>转至上一项(浏览器中)或上一个编辑点(时间线中)</td></tr><tr><td>向上</td><td>Control–上箭头键</td><td>编辑文本栏时,转至上一项(浏览器中)或上一个编辑点(时间线中)</td></tr></tbody></table><h3 id="共享和工具"><a href="#共享和工具" class="headerlink" title="共享和工具"></a>共享和工具</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>共享到默认目的位置</td><td>Command-E</td><td>使用默认目的位置共享选定的项目或片段</td></tr><tr><td>选择“箭头”工具</td><td>A</td><td>将“选择”工具设为活跃</td></tr><tr><td>切割工具</td><td>B</td><td>将“切割”工具设为活跃</td></tr><tr><td>裁剪工具</td><td>Shift-C</td><td>激活裁剪工具并显示所选片段或播放头下方最顶部片段的屏幕控制</td></tr><tr><td>变形工具</td><td>Option-D</td><td>激活变形工具并显示所选片段或播放头下方最顶部片段的屏幕控制</td></tr><tr><td>手工具</td><td>H</td><td>将“手”工具设为活跃</td></tr><tr><td>位置工具</td><td>P</td><td>将“位置”工具设为活跃</td></tr><tr><td>变换工具</td><td>Shift-T</td><td>激活变换工具并显示所选片段或播放头下方最顶部片段的屏幕控制</td></tr><tr><td>修剪工具</td><td>T</td><td>将“修剪”工具设为活跃</td></tr><tr><td>缩放工具</td><td>Z</td><td>将“缩放”工具设为活跃</td></tr></tbody></table><h3 id="显示"><a href="#显示" class="headerlink" title="显示"></a>显示</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>片段外观:仅片段标签</td><td>Control-Option-6</td><td>根据片段名称设置,显示仅带有片段名称、角色名称或活跃角度名称的时间线片段</td></tr><tr><td>片段外观:缩小波形大小</td><td>Control–Option–下箭头键</td><td>缩小时间线片段的音频波形大小</td></tr><tr><td>片段外观:仅连续画面</td><td>Control-Option-5</td><td>显示仅带有大型连续画面的时间线片段</td></tr><tr><td>片段外观:增大波形大小</td><td>Control–Option–上箭头键</td><td>增大时间线片段的音频波形大小</td></tr><tr><td>片段外观:大型连续画面</td><td>Control-Option-4</td><td>显示带有小型音频波形和大型连续画面的时间线片段</td></tr><tr><td>片段外观:大型波形</td><td>Control-Option-2</td><td>显示带有大型音频波形和小型连续画面的时间线片段</td></tr><tr><td>片段外观:波形和连续画面</td><td>Control-Option-3</td><td>显示带有等大的音频波形和视频连续画面的时间线片段</td></tr><tr><td>片段外观:仅波形</td><td>Control-Option-1</td><td>显示仅带有大型音频波形的时间线片段</td></tr><tr><td>减少片段高度</td><td>Shift-Command-连字符键 (-)</td><td>减少浏览器片段高度</td></tr><tr><td>增加片段高度</td><td>Shift–Command–等号键 (=)</td><td>增加浏览器片段高度</td></tr><tr><td>显示较少的连续画面帧</td><td>Shift-Command-逗号键 (,)</td><td>在浏览器片段中显示较少的连续画面帧</td></tr><tr><td>显示/隐藏音频动画</td><td>Control-A</td><td>显示或隐藏选定片段的音频动画编辑器</td></tr><tr><td>显示/隐藏浏览条信息</td><td>Control-Y</td><td>在浏览器中浏览时显示或隐藏片段信息</td></tr><tr><td>显示/隐藏视频动画</td><td>Control-V</td><td>显示或隐藏选定时间线片段的视频动画编辑器</td></tr><tr><td>显示较多的连续画面帧</td><td>Shift-Command-句点键 (.)</td><td>在浏览器片段中显示较多的连续画面帧</td></tr><tr><td>每个连续画面显示一帧</td><td>Option-Shift-Command-逗号键 (,)</td><td>每个连续画面显示一帧</td></tr><tr><td>查看片段名称</td><td>Option-Shift-N</td><td>在浏览器中显示或隐藏片段名称</td></tr><tr><td>将浏览器视为连续画面</td><td>Option-Command-1</td><td>将浏览器切换到连续画面视图</td></tr><tr><td>将浏览器视为列表</td><td>Option-Command-2</td><td>将浏览器切换到列表视图</td></tr><tr><td>放大</td><td>Command–等号键 (=)</td><td>放大时间线、浏览器或检视器</td></tr><tr><td>缩小</td><td>Command-连字符键 (-)</td><td>缩小时间线、浏览器或检视器</td></tr><tr><td>缩放至窗口大小</td><td>Shift-Z</td><td>将内容缩放为适合浏览器、检视器或时间线的大小</td></tr><tr><td>缩放到样本</td><td>Control-Z</td><td>打开或关闭放大音频样本</td></tr></tbody></table><h3 id="窗口"><a href="#窗口" class="headerlink" title="窗口"></a>窗口</h3><table><thead><tr><th>命令</th><th>快捷键</th><th>操作</th></tr></thead><tbody><tr><td>后台任务</td><td>Command-9</td><td>显示或隐藏“后台任务”窗口</td></tr><tr><td>前往“音频增强”</td><td>Command-8</td><td>将“音频增强”检查器设为活跃</td></tr><tr><td>前往颜色板</td><td>Command-6</td><td>将颜色板设为活跃</td></tr><tr><td>转至浏览器</td><td>Command-1</td><td>将浏览器设为活跃</td></tr><tr><td>转至检查器</td><td>Option-Command-4</td><td>将当前检查器设为活跃</td></tr><tr><td>转至时间线</td><td>Command-2</td><td>将时间线设为活跃</td></tr><tr><td>转至检视器</td><td>Command-3</td><td>将检视器设为活跃</td></tr><tr><td>下一个标签</td><td>Control-Tab</td><td>转至检查器或颜色板中的下一个面板</td></tr><tr><td>上一个标签</td><td>Control-Shift-Tab</td><td>转至检查器或颜色板中的上一个面板</td></tr><tr><td>录制画外音</td><td>Option-Command-8</td><td>显示或隐藏“录制画外音”窗口</td></tr><tr><td>显示直方图</td><td>Control-Command-H</td><td>在检视器中显示直方图</td></tr><tr><td>显示矢量显示器</td><td>Control-Command-V</td><td>在检视器中显示矢量显示器</td></tr><tr><td>显示视频波形</td><td>Control-Command-W</td><td>在检视器中显示波形监视器</td></tr><tr><td>显示/隐藏角度</td><td>Shift-Command-7</td><td>显示或隐藏角度检视器</td></tr><tr><td>显示/隐藏音频指示器</td><td>Shift-Command-8</td><td>显示或隐藏音频指示器</td></tr><tr><td>显示/隐藏浏览器</td><td>Control-Command-1</td><td>显示或隐藏浏览器</td></tr><tr><td>显示/隐藏效果浏览器</td><td>Command-5</td><td>显示或隐藏效果浏览器</td></tr><tr><td>显示/隐藏资源库列表</td><td>Shift-Command-1</td><td>显示或隐藏资源库列表</td></tr><tr><td>显示/隐藏事件检视器</td><td>Control-Command-3</td><td>显示或隐藏事件检视器</td></tr><tr><td>显示/隐藏检查器</td><td>Command-4</td><td>显示或隐藏“检查器”面板</td></tr><tr><td>显示/隐藏关键词编辑器</td><td>Command-K</td><td>显示或隐藏关键词编辑器</td></tr><tr><td>显示/隐藏时间线索引</td><td>Shift-Command-2</td><td>显示或隐藏打开项目的时间线索引</td></tr><tr><td>显示/隐藏视频观测仪</td><td>Command-7</td><td>在检视器中显示或隐藏视频观测仪</td></tr></tbody></table>]]></content>
<summary type="html"><p>非常有助于我们提高工作效率,备用一下下面的表格,在我们使用FCPX软件时,会非常轻松的查询到键盘与操作对应的说明。可以收藏以备不时之需!</p>
<h1 id="Final-Cut-Pro-X-键盘快捷键"><a href="#Final-Cut-Pro-X-键盘快捷键" </summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="FinalCutPro" scheme="https://blog.quickso.cn/tags/FinalCutPro/"/>
<category term="视频剪辑" scheme="https://blog.quickso.cn/tags/%E8%A7%86%E9%A2%91%E5%89%AA%E8%BE%91/"/>
</entry>
<entry>
<title>OpenWebRXPlus使用手册</title>
<link href="https://blog.quickso.cn/2024/06/05/OpenWebRXPlus%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/"/>
<id>https://blog.quickso.cn/2024/06/05/OpenWebRXPlus%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/</id>
<published>2024-06-05T06:16:07.000Z</published>
<updated>2024-11-23T13:12:18.418Z</updated>
<content type="html"><![CDATA[<blockquote><p>OpenWebRX是一款基于网络的软件定义无线电(SDR)接收器应用程序。它允许用户通过网页浏览器访问和控制连接的SDR硬件设备,用于无线电收听和监控。</p></blockquote><p>本文档是关于 <a href="https://luarvique.github.io/ppa/">OpenWebRX+</a> 的,它是基于 <a href="https://www.openwebrx.de/">OpenWebRX</a> 的改进和扩展版本 。由于原始项目缺少诸如降噪、调整步骤和对许多数字模式的支持等必要功能,**<a href="https://fms.komkon.org/">Marat Fayzullin</a>**决定分支OpenWebRX项目并添加他认为有必要、有趣或人们广泛要求的功能。</p><p>请注意,以下文档涵盖了<strong>原始</strong>OpenWebRX 和扩展版本的 OpenWebRX+。OpenWebRX+ 特有的功能已标记为如此。</p><h1 id="使用OpenWebRXPlus系统,请遵守你所在国家-x2F-地区的法律法规!!!"><a href="#使用OpenWebRXPlus系统,请遵守你所在国家-x2F-地区的法律法规!!!" class="headerlink" title="使用OpenWebRXPlus系统,请遵守你所在国家/地区的法律法规!!!"></a>使用OpenWebRXPlus系统,请遵守你所在国家/地区的法律法规!!!</h1><h1 id="本网页及文档内容仅供学习与技术交流,切勿用于非法用途。"><a href="#本网页及文档内容仅供学习与技术交流,切勿用于非法用途。" class="headerlink" title="本网页及文档内容仅供学习与技术交流,切勿用于非法用途。"></a><strong>本网页及文档内容仅供学习与技术交流,切勿用于非法用途。</strong></h1><p><a href="https://wap.miit.gov.cn/gyhxxhb/jgsj/cyzcyfgs/bmgz/wxdl/art/2024/art_9a2dba77d86942cebd1e9cbacd2d4b20.html">《中华人民共和国业余无线电台管理办法》</a></p><h1 id="相关链接:"><a href="#相关链接:" class="headerlink" title="相关链接:"></a>相关链接:</h1><p><a href="https://www.openwebrx.de/">https://www.openwebrx.de/</a></p><p><a href="https://fms.komkon.org/OWRX/">https://fms.komkon.org/OWRX/</a></p><p><a href="https://luarvique.github.io/ppa/">https://luarvique.github.io/ppa/</a></p><h1 id="如何安装-OpenWebRX"><a href="#如何安装-OpenWebRX" class="headerlink" title="如何安装 OpenWebRX+"></a><strong>如何安装 OpenWebRX+</strong></h1><h1 id="设备:"><a href="#设备:" class="headerlink" title="设备:"></a>设备:</h1><p>1.HackRF系列</p><p>2.RTL-SDR系列</p><p>3.SDRplay系列</p><p>4.Airspy系列</p><p>………</p><h3 id="OpenWebRX-包存储库"><a href="#OpenWebRX-包存储库" class="headerlink" title="OpenWebRX+ 包存储库"></a><a href="https://luarvique.github.io/ppa">OpenWebRX+ 包存储库</a></h3><p>支持Docker、树莓派、Ubuntu、Debian安装</p><p>这是 OpenWebRX Plus的软件包存储库。此版本的 OpenWebRX 提供以下新的和原始的功能:</p><ul><li>内置 FAX、SSTV、AIS、FLEX、POCSAG、ISM、RDS、CW、RTTY、SITOR-B 和 SAM 解码器。</li><li>内置 HFDL、VDL2、ADSB 和 ACARS 航空解码器。</li><li>内置 DTMF、EEA、EIA、CCIR 和多个 ZVEY SELCALL 解码器。</li><li>接收者用户之间的内置聊天。</li><li>内置 MP3 录音,用于录制接收音频。</li><li>内置扫描仪。</li><li>管理员能够查看用户连接并禁止用户滥用。</li><li>使用浏览器对接收到的图像进行后台 SSTV 和 FAX 解码。</li><li>基于谱减法的可调噪声过滤。</li><li>可调整的调谐步长。</li><li>自动生成短波广播的书签。</li><li>自动为附近的 业余无线电 中继器生成书签。</li><li>改进了触摸屏操作,具有平移和缩放功能。</li><li>改进的滚轮支持,具有调整和缩放功能。</li><li>改进了 CW 模式下的调谐。</li><li>带通滤波器可通过滚轮调节。</li><li>SDRPlay 设备操作更可靠。</li><li>地图显示了来自世界各地的其他在线SDR站点。</li><li>地图显示了来自世界各地的短波广播站。</li><li>地图显示航空解码器获得的飞机位置。</li><li>地图显示附近的 业余无线电 中继器。</li><li>更好的地图信息,包括距离、APRS 路径、天气等。</li><li>可配置会话超时,带有策略页面。</li><li>HTTPS 协议支持(需要 SSL 证书)。</li><li>可折叠接收器面板,具有可配置的不透明度。</li><li>频谱显示。</li></ul><p>该存储库包含适用于以下 Linux 发行版的软件包:</p><ul><li>适用于 amd64、arm64 架构的 Ubuntu 22.04 (Jammy Jellyfish)</li><li>适用于 amd64、arm64、armhf 架构的 Debian 11 (Bullseye)</li></ul><h3 id="树莓派安装"><a href="#树莓派安装" class="headerlink" title="树莓派安装"></a>树莓派安装</h3><p><a href="https://github.com/luarvique/openwebrx/releases/">Stanislav (LZ2SLL)</a>为树莓派 4构建了SD 卡镜像,其中包含纯净的 OpenWebRX+ 安装版本。该镜像支持大部分开箱即用的常见 SDR 设备。RTL-SDR 和 SDRPlay 设备无需对镜像进行任何额外修改即可工作。请记住,该镜像可能不是OpenWebRX+ 的最新版本。</p><p>请注意,此 SD 卡镜像不提供数字模式(DMR、NXDN 等)的软件支持,因为这些模式的软件解码器 (mbelib) 的来源有问题。为了在此镜像中启用数字模式,请通过 ssh 登陆并输入:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plain">sudo install-softmbe.sh<br></code></pre></td></tr></table></figure><h3 id="Docker安装"><a href="#Docker安装" class="headerlink" title="Docker安装"></a>Docker安装</h3><p>Stanislav (LZ2SLL) 制作了两个 OpenWebRX+ Docker 镜像,可以在任何 x64 PC、arm32 或 arm64 设备 上运行。<a href="https://hub.docker.com/r/slechev/openwebrxplus-nightly">Nightly 版本</a>每天都会更新,并基于最新的 OpenWebRX+ 源。<a href="https://hub.docker.com/r/slechev/openwebrxplus">正式版</a> 基于最新发布的 OpenWebRX+ 软件包,与 Debian 上正常的 OpenWebRX+ 安装版本相同。正式版的镜像大小稍大一些,但也更稳定。</p><p>注意:安装Docker镜像前需要在宿主机添加设备黑名单,防止因内核占用导致容器无法调用SDR,完成后重启。</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><code class="hljs Bash"><span class="hljs-built_in">cat</span> > /etc/modprobe.d/owrx-blacklist.conf << <span class="hljs-string">_EOF_</span><br><span class="hljs-string">blacklist dvb_usb_rtl28xxu</span><br><span class="hljs-string">blacklist sdr_msi3101</span><br><span class="hljs-string">blacklist msi001</span><br><span class="hljs-string">blacklist msi2500</span><br><span class="hljs-string">blacklist hackrf</span><br><span class="hljs-string">_EOF_</span><br></code></pre></td></tr></table></figure><p>拉取<a href="https://registry.hub.docker.com/r/slechev/openwebrxplus-softmbe/">slechev的Docker镜像</a>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Bash">docker pull slechev/openwebrxplus-softmbe<br></code></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><code class="hljs Bash"><span class="hljs-built_in">mkdir</span> /root/openwebrx/set<br><span class="hljs-built_in">mkdir</span> /root/openwebrx/etc<br></code></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><code class="hljs Bash">docker run -d --name openwebrx \--device /dev/bus/usb \-p 8073:8073 \-v /root/openwebrx/set:/var/lib/openwebrx \-v /root/openwebrx/etc:/etc/openwebrx \--restart unless-stopped \<br>slechev/openwebrxplus-softmbe<br></code></pre></td></tr></table></figure><p>进入容器并创建admin管理账号:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Bash">docker <span class="hljs-built_in">exec</span> -it openwebrx admin adduser admin<br></code></pre></td></tr></table></figure><p>账号创建完成后就可以浏览器访问“IP:8073”打开页面了(如需外网访问请自行申请公网IP或者搭建内网穿透,并使用强壮密码,请勿随意分享自己的站点,更不要触及敏感波段,切记!!!),浏览守听无需登录,需要对站点进行自定义时点击右上角的“Settings”使用刚才创建的账号登录修改。</p><h4 id="避坑指南"><a href="#避坑指南" class="headerlink" title="避坑指南"></a>避坑指南</h4><p>OpenWebRX+可能会出现FT8无法解码的情况</p><p>解决办法(x86平台):</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><code class="hljs Bash">docker <span class="hljs-built_in">exec</span> -it openwebrx /bin/sh<br></code></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><code class="hljs Bash">apt update<br>apt install binutils<br>strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br></code></pre></td></tr></table></figure><h3 id="升级-OpenWebRX"><a href="#升级-OpenWebRX" class="headerlink" title="升级 OpenWebRX+"></a>升级 OpenWebRX+</h3><p>要从旧的 OpenWebRX+ 版本升级,请以 root 身份执行以下操作:</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><code class="hljs Plaintext">apt update<br>apt upgrade<br></code></pre></td></tr></table></figure><h3 id="Ubuntu安装"><a href="#Ubuntu安装" class="headerlink" title="Ubuntu安装"></a>Ubuntu安装</h3><p>将此存储库添加到您的Ubuntu系统,请以 root 身份执行以下操作:</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></pre></td><td class="code"><pre><code class="hljs Plaintext">wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg<br>echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/ubuntu ./" > /etc/apt/sources.list.d/openwebrx-plus.list<br>apt update<br></code></pre></td></tr></table></figure><p>然后添加OpenWebRX 存储库,因为它包含一些必要的包。为了将OpenWebRX 存储库添加到您的Ubuntu系统,请以 root 身份执行以下操作:</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></pre></td><td class="code"><pre><code class="hljs Plaintext">wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg<br>echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/ubuntu/ jammy main" > /etc/apt/sources.list.d/openwebrx.list<br>apt update<br></code></pre></td></tr></table></figure><h3 id="Debian安装"><a href="#Debian安装" class="headerlink" title="Debian安装"></a>Debian安装</h3><p>为了将此存储库添加到您的Debian Bullseye系统,请以 root 身份执行以下操作:</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></pre></td><td class="code"><pre><code class="hljs Plaintext">wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg<br>echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/debian ./" > /etc/apt/sources.list.d/openwebrx-plus.list<br>apt update<br></code></pre></td></tr></table></figure><p>添加OpenWebRX 存储库,因为它包含一些必要的包。为了将OpenWebRX 存储库添加到您的Debian Bullseye系统,请以 root 身份执行以下操作:</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></pre></td><td class="code"><pre><code class="hljs Plaintext">wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg<br>echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/debian/ bullseye main" > /etc/apt/sources.list.d/openwebrx.list<br>apt update<br></code></pre></td></tr></table></figure><p>如果您有Debian Bookworm系统,现在有一个实验性的 OpenWebRX+ 版本可供您使用。以 root 身份执行以下操作:</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></pre></td><td class="code"><pre><code class="hljs Plaintext">wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg<br>echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/bookworm ./" > /etc/apt/sources.list.d/openwebrx-plus.list<br>apt update<br></code></pre></td></tr></table></figure><p>Debian Bookworm用户不能将OpenWebRX 存储库添加到他们的系统中,因为它包含 Bullseye 软件包。</p><p>添加好存储库后 请以 root 身份执行以下操作:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plaintext">apt install openwebrx<br></code></pre></td></tr></table></figure><p>要确保 OpenWebRX+ 正在运行,请在本地网页浏览器输入以下地址:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plaintext">http://localhost:8073/<br></code></pre></td></tr></table></figure><p>您应该会看到 OpenWebRX+ Web 界面,其中包含噪声滤波器 (NR) 和调谐步长 (>-<) 控件。</p><h3 id="SDRPlay-设备或其克隆设备"><a href="#SDRPlay-设备或其克隆设备" class="headerlink" title="SDRPlay 设备或其克隆设备"></a>SDRPlay 设备或其克隆设备</h3><p>此存储库提供了改进的 SoapySDRPlay3 设备驱动程序,与原始版本相比有以下更改:</p><ul><li>修复了通用增益控制,将其限制为 IFGR 设置。</li><li>让 RFGR 设置一个名为“rf_gain”的单独的可选参数。</li><li>固定频率校正 (ppm) 参数。</li><li>修复了从 LIF 切换到宽带 ZIF 模式时的问题。</li><li>修复了将设置发送到设备时的死锁。</li><li>添加了当设备不接受设置时的多次重试。</li><li>稍微加宽滤波器,减少大多数带宽的“驼峰”大小。</li><li>添加了 1.536MHz 带宽。</li></ul><p>为了安装改进的 SoapySDRPlay3 软件包,请以 root 身份执行以下操作:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plaintext">apt install soapysdr-module-sdrplay3<br></code></pre></td></tr></table></figure><p>在安装过程中,SoapySDRPlay3 软件包还应安装最新的 SoapySDR 并从 /usr/local 中删除所有本地构建的 SoapySDR 文件。您仍然需要从此页面下载并安装 SDRPlay API:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plaintext">https://www.sdrplay.com/downloads/<br></code></pre></td></tr></table></figure><p>SDRPlay API 也可以按照以下说明作为非官方包安装:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs Plaintext">https://gitlab.com/martin.herren/libsdrplay-api<br></code></pre></td></tr></table></figure><p>安装部分内容来自:<a href="https://luarvique.github.io/ppa">https://luarvique.github.io/ppa</a></p><h1 id="如何使用-OpenWebRX"><a href="#如何使用-OpenWebRX" class="headerlink" title="如何使用 OpenWebRX+"></a><strong>如何使用 OpenWebRX+</strong></h1><h2 id="入门"><a href="#入门" class="headerlink" title="入门"></a><strong>入门</strong></h2><p>在本节中,我们将讨论如何开始使用 OpenWebRX+、用户界面中显示的内容以及控件如何工作。</p><h3 id="主页面"><a href="#主页面" class="headerlink" title="主页面"></a><strong>主页面</strong></h3><p><img src="https://huangetech.feishu.cn/space/api/box/stream/download/asynccode/?code=NDQzNDE5MTY4ZjBlNzE0YThmNmUyYjJkYzA4NDNkNmJfM3Z3SW84Rzh1U3FUcG9wYUduRkdVM3k0amVhN0FieFhfVG9rZW46V2hVT2JpQ0dIb0lRWVl4Zm9YRmNKQnhBbkNiXzE3MTc1Njg4NjM6MTcxNzU3MjQ2M19WNA" alt="img"></p><ol><li><strong>滚动瀑布</strong> 显示您当前选择的 SDR 配置文件中的频段活动。瀑布颜色代表每个频率的信号水平,较亮的颜色对应较强的信号。因此,一个强烈、良好、持续的信号看起来就像瀑布上一条明亮的垂直条纹。不同的信号调制产生不同形状的条纹。 有关示例, 请参阅 <a href="https://www.sigidwiki.com/wiki/Signal_Identification_Guide">信号识别指南。</a></li><li>频率<strong>刻度</strong>显示实际频率以及当前调谐的频率,用黄色插入符号表示。<strong>这是您当前正在收听的</strong>频率。插入符号两侧的数字代表当前过滤器范围。您可以通过拖动插入符号两侧来更改这些边界。</li><li>OpenWebRX+ 中的频谱显示显示 每个<strong>频率的当前</strong>信号电平,而不是瀑布显示的历史电平。频谱显示有一点延迟,来确保短信号仍然在频谱上留下痕迹。</li><li>步进<strong>调谐按钮</strong>可让您通过左键单击来上下调整频率范围。启用“侧步”功能后,您还可以右键单击这些按钮以跳出当前选择的配置文件。</li><li>书签可让您快速调至之前添加书签的频率<strong>。</strong>OpenWebRX 中有三种类型的书签:<ol><li><strong>绿色</strong>书签代表频段规划定义的频率。除了修改频段计划之外,这些书签不可编辑。</li><li><strong>黄色</strong>书签保存在OpenWebRX服务器上,可由管理员编辑。</li><li><strong>蓝色</strong>书签保存在您的网络浏览器中,因此您可以创建和编辑。</li></ol></li><li>单击页面左上角的图标即可显示 接收者<strong>信息。</strong>该信息由管理员填写,包括接收者的姓名、位置和硬件描述。</li><li><strong>状态</strong> 按钮可切换接收器网页底部显示的 <strong>状态栏。</strong></li><li>聊天按钮可切换接收者网页底部显示的<strong>日志和聊天面板。</strong>如果管理员选择禁用聊天功能,此按钮将变成<strong>“日志”</strong>,打开非交互式日志面板。</li><li>接收<strong>器</strong>按钮可切换接收器的 <strong>主控制面板。</strong></li><li>“<strong>地图”</strong>按钮可打开<strong>地图页面</strong> ,显示广播电台、中继器、其他在线SDR站点以及来自各种来源(例如飞机、船舶和 业余无线电操作员)的位置报告。</li><li>“<strong>文件”</strong>按钮可打开<strong>文件浏览器页面</strong>,其中包含最近接收的 SSTV 图像、传真和其他数据。</li><li>设置<strong>按钮</strong>可打开受密码保护的<strong>设置页面</strong>以配置 OpenWebRX+。通常,只有服务器管理员需要访问服务器设置。</li><li>页面底部的状态栏显示服务器的当前状态及其与网络浏览器的 连接<strong>。</strong>各种面板显示网络吞吐量、服务器CPU负载和温度、音频采样率等。</li></ol><h3 id="主要控制装置"><a href="#主要控制装置" class="headerlink" title="主要控制装置"></a><strong>主要控制装置</strong></h3><p><img src="https://huangetech.feishu.cn/space/api/box/stream/download/asynccode/?code=Mjg3NWFkMWVhMjk2YjY1Zjc0MDczNWNkMzk4YjhhYjNfbXU3VkR5S1hXZWQ1akhCcDhjdTZaZ2xPbXBueTF1RzFfVG9rZW46TThwZ2JaaHdPb0o2ZFJ4UWFDYWNIbzlIbmtiXzE3MTc1Njg4NjM6MTcxNzU3MjQ2M19WNA" alt="img"></p><ol><li>这是接收器<strong>当前调谐的频率。</strong>您可以通过单击瀑布、书签或直接在此字段中输入来更改它。<strong>频率只能在当前配置文件范围内更改。</strong></li><li>单击此按钮可为您当前的频率<strong>添加书签</strong>。新书签将本地存储在您的浏览器中,并在瀑布上方显示为蓝色标记。</li><li>这是<strong>当前配置文件</strong>,包括 SDR 设备名称(“RSPdx”)。OpenWebRX 支持多个 SDR 设备,每个设备都有多个配置文件。选择新配置文件时,请记住,<strong>同一 SDR 设备的所有用户的配置文件</strong>都会发生变化,因此当您看到其他人使用该服务器时,请务必小心。</li><li><strong>这是所有可用音频调制模式</strong> 的列表,当前模式以黄色突出显示。通过单击相应按钮选择新模式,但请记住,并非所有模式都适用。它有助于了解每个调制在瀑布上的样子。 如果不确定, 请参阅 <a href="https://www.sigidwiki.com/wiki/Signal_Identification_Guide">信号识别指南。</a></li><li><strong>如果数字解码器处于活动状态</strong> ,该按钮将会亮起。单击它可关闭数字解码。</li><li>这是<strong>当前的数字解码模式</strong>(如果处于活动状态)。您可以从此处的列表中选择新的数字解码模式,但请记住,并非所有模式都适用。它有助于了解每种数字模式在瀑布上的样子。 如果不确定, 请参阅 <a href="https://www.sigidwiki.com/wiki/Signal_Identification_Guide">信号识别指南。</a></li><li>使用此滑块控制<strong>音频音量</strong>。单击扬声器按钮可将音频静音或取消静音。</li><li>使用此滑块设置<strong>静噪阈值</strong>。左键单击 <strong>SQ</strong>按钮可打开和关闭静噪。当静噪打开时,任何低于所选静噪阈值的音频都将被静音。</li><li>右键单击<strong>SQ</strong>按钮可切换频率扫描仪,使<strong>SQ</strong>按钮呈绿色亮起。扫描仪将自动检查所有已标记的频率以查找高于静噪阈值的信号并调谐到它们。一旦信号消失,扫描仪将继续检查书签以获取更多信号。</li><li>使用此滑块设置<strong>降噪阈值</strong>。单击 <strong>NR</strong>按钮可打开和关闭降噪功能。降噪算法基于谱减法原理。它将从音频中删除任何低于所选阈值的频率,从而减少背景噪音。请记住,过度使用降噪可能会扭曲或抑制有用的声音。</li><li><strong>调谐步长</strong>选择 器允许您选择频率调谐粒度。例如,如果选择 1kHz 步进,则频率将始终以 1kHz 增量进行调谐。不同的配置文件可能采用不同的默认调谐步骤,例如短波广播公司的 5kHz 或使用 SSB 调制的 HAM 运营商的 500Hz。单击相邻按钮可将当前配置文件的调整步长重置为其默认值。</li><li><strong>此滑块设置“最热”瀑布颜色</strong>(通常为红色) 的信号级别。当查看强信号时将其设置得较高,当查看弱信号时将其设置得较低。</li><li>左键单击相邻按钮可一次性自动调整瀑布颜色。右键单击按钮可切换瀑布颜色的连续自动调整。</li><li><strong>此滑块设置“最冷”瀑布颜色</strong>(通常为蓝色) 的信号级别。当查看强信号时将其设置得较高,当查看弱信号时将其设置得较低。</li><li>左键单击相邻按钮可将瀑布颜色重置为其默认值。</li><li>此下拉列表允许您选择<strong>用户界面主题</strong>之一。单击相邻按钮会将用户界面重置为默认主题。</li><li>该滑块控制<strong>用户界面的不透明度</strong>,使瀑布顶部的面板或多或少可见。单击相邻按钮将用户界面重置为完全不透明度。</li><li>四个缩放按钮可让您放大和<strong>缩小瀑布</strong>。缩放始终围绕当前调谐频率进行,并保持显示。</li><li>主面板底部的时钟显示**当前的通用协调时间 (UTC)**。大多数 OpenWebRX 用户界面都以 UTC 运行,因此显示此时钟是为了更方便参考。</li><li>单击<strong>“录制”</strong>按钮可随时开始<strong>录制音频。</strong>该按钮将呈红色亮起,表示正在进行录制。再次单击<strong>REC</strong>按钮后,它将停止录制并将录制的音频保存到文件中。</li><li>底部的条指示<strong>当前信号电平</strong>。它将根据 OpenWebRX 认为信号过载的情况改变颜色。还有一个数字读数,以分贝为单位显示精确值。</li><li>此按钮可切换瀑布上方的<strong>实时频谱显示。</strong>使用它时,请记住频谱显示可能会使您的网络浏览器使用大量处理器能力。</li></ol><h3 id="使用鼠标和触摸"><a href="#使用鼠标和触摸" class="headerlink" title="使用鼠标和触摸"></a><strong>使用鼠标和触摸</strong></h3><p>OpenWebRX 需要使用鼠标右键。<strong>在具有单个鼠标按钮的设备(例如 Apple 计算机)上,通过按住CONTROL</strong> 键并单击鼠标 来模拟鼠标右键。</p><p><strong>在基于触摸的设备</strong>(例如智能手机和平板电脑)上,通过用手指按住该位置比不常用的时间长一点来模拟鼠标右键。</p><p>鼠标<strong>滚轮</strong>有两种操作模式:<strong>正常</strong>模式和 <strong>修改</strong>模式(按下鼠标右键、滚轮按钮或 SHIFT 键):</p><ul><li><strong>在瀑布中:</strong> 正常的轮子旋转调整频率,修改后的轮子旋转改变缩放系数。可以通过接收器面板中的复选框来逆转此行为。</li><li><strong>在频率范围内:</strong> 正常和修改的车轮旋转都会调整频率。</li><li><strong>在带通滤波器(黄色插入符号)处:</strong> 正常轮旋转使滤波器向左或向右移动,修改后的轮旋转使滤波器更宽或更窄。</li></ul><h2 id="使用场景"><a href="#使用场景" class="headerlink" title="使用场景"></a><strong>使用场景</strong></h2><p>在本节中,我们将介绍一些可以使用 OpenWebRX 进行的常见操作,例如收听广播电台、HAM 操作员以及跟踪船舶和飞机。</p><h3 id="收听-FM-广播"><a href="#收听-FM-广播" class="headerlink" title="收听 FM 广播"></a><strong>收听 FM 广播</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/FM_broadcasting">什么是调频广播?</a></em></p><p>FM广播一般发生在76MHz到108MHz之间。每个广播公司都分配有 100kHz 的频谱,除非它们位于美国,每个电台分配有 200kHz 的频谱。FM 广播的传输距离可达 100 公里,但受地平线限制。如果您居住在美国,可以通过 <a href="https://radio-locator.com/">Radio Locator</a> 网站找到最近的 FM 电台。</p><p>为了在 OpenWebRX 中收听 FM 广播,请选择包含上述频率的配置文件,按接收器面板上的<strong>WFM</strong> 按钮,然后调谐到其中一个信号。请注意,OpenWebRX 仅播放<strong>单声道声音</strong>,因此不会有任何立体声。</p><p>OpenWebRX+ 还允许<strong>解码 FM 广播中发送的文本 RDS 信息</strong>,例如电台名称、节目名称和类型等。要查看此信息,请调谐到 FM 信号并选择 <em>“RDS”</em>数字模式。您应该会在瀑布底部看到 RDS 信息面板,其中慢慢充满了数据。</p><p>由于<strong>RDS 数据在美国的编码方式</strong>与欧洲略有不同,您可能需要转到<em>“设置 | 解调和解码 | 其他”</em>并更改<em>“从 WFM 广播中解码美国特定的 RDS 信息”</em>选项以反映您的接收器位置。</p><h3 id="收听-AM-广播"><a href="#收听-AM-广播" class="headerlink" title="收听 AM 广播"></a><strong>收听 AM 广播</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/AM_broadcasting">什么是 AM 广播?</a></em></p><p>人们所说的“AM”通常是指在 LW 和 MW 频段(100kHz 至 1800kHz 之间)发生的无线电广播。每个电台分配有 10kHz 的频谱。白天,AM广播的距离可达200公里,但这个距离在夜间会大大增加。如果您居住在美国,可以通过 <a href="https://radio-locator.com/">Radio Locator</a> 网站找到最近的 AM 电台。</p><p>为了在 OpenWebRX 中收听 AM 广播,请选择包含上述频率的配置文件,按接收器面板上的<strong>AM</strong> 按钮,然后调谐到其中一个信号。如果您感兴趣的信号被相邻信号遮挡,请尝试使用<strong>SAM</strong>按钮。<strong>它与AM</strong>具有相同的效果,但使用了更抗干扰的不同算法。</p><h3 id="短波收听-SWL"><a href="#短波收听-SWL" class="headerlink" title="短波收听 (SWL)"></a><strong>短波收听 (SWL)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Shortwave_listening">什么是SWL?</a></em></p><p>“短波”描述了 无线电广播公司、业余爱好者和专业人士使用的 1800kHz 至 30MHz 之间的<a href="https://en.wikipedia.org/wiki/Shortwave_bands">多个频段。</a>SWL 活动通常指的是短波广播收听,广播公司可以使用 AM 调制轻松覆盖数千公里。<a href="https://short-wave.info/">全球短波广播时间表可在Shortwave Info</a>和 <a href="https://shortwaveschedule.com/">Shortwave Schedule</a>网站上找到 。</p><p>要在 OpenWebRX 中收听短波广播,请选择包含您感兴趣的短波频段的配置文件,按 接收器面板上的<strong>AM</strong>按钮,然后调谐到其中一个信号。如果信号被相邻信号遮挡,请尝试使用<strong>SAM</strong>按钮。<strong>它与AM</strong>具有相同的效果,但使用了更抗干扰的不同算法。</p><p>OpenWebRX+每天一次<strong>查询</strong> <strong><a href="http://www.eibispace.de/">EiBi</a></strong> <strong>数据库以获取短波广播时间表</strong>。当前广播电台在地图上用<strong>⍑</strong>标记表示。单击某个电台会显示其时间表,包括频率和广播时间。OpenWebRX+ 将调谐到点击的频率,只要它们在 您正在收听的 <strong>配置文件内。</strong></p><p>您可以通过*“设置 | 常规 | 显示 | 短波书签范围”设置距接收器的最大范围,让 OpenWebRX+*<strong>为当前广播的短波电台</strong> 创建书签。OpenWebRX+ 只会为位于该范围内的短波电台创建书签。</p><p>您还可以<strong>将短波书签限制为几个配置文件</strong> (例如 49m / 41m / 等):</p><ol><li><em>通过将“设置|常规|显示|短波书签范围”</em>设置为零来 禁用全局短波书签。</li><li>转到<em>“设置 | SDR 设备和配置文件 | <设备> | <配置文件>”</em> ,然后单击<strong>“添加”添加名为</strong><em>“Shortwave 书签范围”</em>的选项。</li><li>将新添加的选项设置为距接收器的最大范围,您希望在其中查看短波书签并通过单击“<strong>应用”和“保存”</strong>保存配置文件设置。</li></ol><p>需要注意的是,只有在 <em>“设置|常规|接收器信息|接收器位置”中</em><strong>设置正确的接收器位置,</strong>短波电台才会正确显示。同样重要的是要记住,由于 OpenWebRX+ 每天查询<a href="http://www.eibispace.de/">EiBi</a>一次,因此在设置接收器位置后 <strong>可能无法立即获得最新信息。</strong></p><h3 id="聆听公民波段-CB"><a href="#聆听公民波段-CB" class="headerlink" title="聆听公民波段 (CB)"></a><strong>聆听公民波段 (CB)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Citizens_band_radio">什么是CB?</a></em></p><p>公民频段 (CB) 通常覆盖 27MHz 到 28MHz 之间的频谱,个人只要遵守一些规则就可以在没有许可证的情况下进行通信。CB 频段的确切范围因国家/地区而异。它毗邻 10m 业余频段。</p><p>在大多数地方,CB 频段分为 40 个通道(CB1 至 CB40),间隔为 10kHz。OpenWebRX+ 为这些频道提供默认书签。虽然 CB 最初允许所有模拟语音模式(AM、FM、LSB、USB),但美国用户通常更喜欢较低通道的 AM 和较高通道的 LSB。在英国,AM 直到最近才被禁止,FM 是最常见的 CB 模式。</p><p>为了在 OpenWebRX 中收听 CB,请选择包含 CB 频段的配置文件,并通过单击瀑布或书签来调谐到其中一个信号。然后,您可能需要按 接收器面板上的 <strong>AM</strong>、<strong>FM</strong>、 <strong>LSB</strong>或<strong>USB按钮,具体取决于您正在收听的传输所使用的调制类型。</strong></p><h3 id="聆听-业余无线电短波电台"><a href="#聆听-业余无线电短波电台" class="headerlink" title="聆听 业余无线电短波电台"></a><strong>聆听 业余无线电短波电台</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Amateur_radio_operator">什么是火腿?</a></em></p><p>业余无线电操作员 (HAM) 的工作频率为 160m、80m、40m、20m 和其他一些 <a href="https://en.wikipedia.org/wiki/Shortwave_bands">短波频段</a>。从莫尔斯电码到语音,再到数字传输,各种活动都发生在这些频段上。</p><p>每个业余无线电通常分为三个部分:</p><ul><li>底部用于莫尔斯电码传输,也称为“电报”或CW。</li><li>在摩尔斯电码的正上方,有一堆不同格式的数字传输,例如 RTTY、FT8、FT4 等。其中许多格式以固定频率运行,这些频率包含在 OpenWebRX 频段规划中,因此显示为绿色书签。</li><li>频带的其余部分分配给使用 LSB 或 USB 调制的语音(或“电话”)传输,并加入一些 AM。LSB 调制用于 20m 以下,而 USB 用于 20m 及以上。</li></ul><p>为了在 OpenWebRX 中收听业余无线电操作员的广播,请选择包含您感兴趣的 HAM 频段的配置文件,按下 接收器面板上的<strong>LSB</strong>或<strong>USB</strong> 按钮,然后调谐到其中一个信号。虽然大多数业余传输发生在 1kHz 边界,但您可能需要更精确地调谐以获得更清晰的声音。</p><h3 id="收听摩尔斯电码-CW"><a href="#收听摩尔斯电码-CW" class="headerlink" title="收听摩尔斯电码 (CW)"></a><strong>收听摩尔斯电码 (CW)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Continuous_wave">什么是CW?</a></em></p><p>大多数摩尔斯电码 (CW) 传输发生在业余无线电频段的低端,例如 3500-3600kHz、7000-7100kHz、14000-14100kHz 等。要在 OpenWebRX 中启用 CW 模式,请按 接收器面板上的<strong>CW按钮。</strong>在此模式下,带通滤波器缩小至 700-900Hz 范围,以获得更好的选择性。此外,在 CW 模式下,OpenWebRX+ 会将频率调至<strong>低于单击的载波频率 800Hz</strong>,以确保始终听到载波。</p><p>对于那些不懂莫尔斯电码的人,OpenWebRX+ 提供 <strong>自动 CW 解码</strong>,可通过选择<em>“CW 解码器”</em>数字模式来启用。CW 解码器向您呈现一个缩放的二级瀑布,其中可能包含多个 CW 信号。一旦您点击您感兴趣的 CW 信号,解码后的文本将显示在二级瀑布下方,其中无法识别的字符显示为下划线。</p><p>您还可以使 CW 解码器显示 正在解码的<strong>原始“嘀”和“哒” 。</strong>为此,请转至<em>“设置 | 解调和解码 | 其他”</em>并启用<em>“解码 CW 时显示 CW 代码(dits / dahs)”</em>选项。</p><h3 id="接收电传打字机-RTTY"><a href="#接收电传打字机-RTTY" class="headerlink" title="接收电传打字机 (RTTY)"></a><strong>接收电传打字机 (RTTY)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/RTTY">RTTY是什么?</a></em></p><p>电传打字机传输由两个载波信号组成,其中一个信号指定“空格”(或零),而另一个信号指定“标记”(或一个)。连续五位组成一个字符,用博多码编码。因此,描述 RTTY 传输的三个重要参数:</p><ul><li><strong>带宽 (Hz)</strong> 这是两个载波信号之间的距离,以赫兹为单位。常见带宽为 85Hz、170Hz、450Hz 和 650Hz。</li><li><strong>比特率(波特率)</strong> 这是传输速度,决定每秒发送多少位。常见的比特率有 45bd、45.45bd、50bd、75bd 和 100bd。</li><li><strong>反向</strong> “反向”选项在应用时会翻转“空间”和“标记”频率的含义。</li></ul><p>OpenWebRX+ 附带三种不同的 RTTY 设置,可通过数字模式下拉列表进行选择:</p><ul><li><strong>RTTY-170 (45)</strong> 这是HAM运营商常用的模式,带宽170Hz,码率45bd。您可以在大多数 HAM HF 频段上找到此模式下的传输,其传输略高于莫尔斯电码传输。</li><li><strong>RTTY-450 (50N)</strong> 此模式由德国气象服务使用,最常见于 10100kHz 频率。OpenWebRX+ 包含此频率和其他德国天气 RTTY 频率的默认(黄色)书签。此模式使用 450Hz 带宽和 50bd 比特率,“标记”和“空间”频率相反。</li><li><strong>RTTY-85 (50N)</strong> 此模式通常用于可用带宽有限的 LF 和 VLF 频段。它具有 85Hz 带宽和 50bd 比特率,“标记”和“空间”频率相反。</li></ul><p>为了在 OpenWebRX+ 中接收电传打字机传输,请按 接收器面板上的<strong>USB</strong>按钮并调谐到 RTTY 传输,它看起来像两个靠近在一起的信号。然后选择上述 RTTY 解码器之一。它将向您呈现一个缩放的二级瀑布,其中可能包含多个 RTTY 信号。单击您感兴趣的 RTTY 信号后,解码后的文本将显示在二级瀑布下方,其中无法识别的字符显示为下划线。</p><h3 id="接收-SSTV-图像"><a href="#接收-SSTV-图像" class="headerlink" title="接收 SSTV 图像"></a><strong>接收 SSTV 图像</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/SSTV">什么是SSTV?</a></em></p><p>慢扫描电视 (SSTV) 协议允许业余无线电爱好者通过电波交换小型静态图像。大多数 SSTV 频率都列在 OpenWebRX+ 频段计划中,因此将显示为绿色书签。为了在 OpenWebRX+ 中可靠地接收 SSTV 图像,请执行以下操作:</p><ol><li>选择<em>“SSTV”</em>数字模式并<strong>精确</strong>调谐到 SSTV 载波频率以下 1900Hz,或使用任何提供的 SSTV 书签。</li><li>等待下一次 SSTV 传输开始。OpenWebRX+<strong>将不会</strong> 接收部分 SSTV 传输,因为它需要从传输标头获取图像格式信息。</li><li>接收到的 SSTV 图像将显示在瀑布显示屏顶部的单独面板中。单击图像将其下载到您的计算机或移动设备。</li></ol><p>OpenWebRX+ 目前支持的唯一 SSTV 格式是 Robot36、Robot72、Martin1、Martin2、Scottie1、Scottie2 和 ScottieDX。其他 SSTV 格式(包括数字 SSTV)将不会被接收。</p><h3 id="接收传真图像"><a href="#接收传真图像" class="headerlink" title="接收传真图像"></a><strong>接收传真图像</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Radiofax">什么是无线传真?</a></em></p><p>如今,高频无线电传真协议主要用于向海上船只广播气象图和相关信息。美国国家气象局定期发布 <a href="https://www.weather.gov/media/marine/rfax.pdf">天气传真时间表,</a> 您可以使用它来收听附近的传真广播。此外,OpenWebRX+ 还为大多数已知的天气传真频率提供默认(黄色)书签。为了在 OpenWebRX+ 中可靠地接收传真,请执行以下操作:</p><ol><li>选择<em>“传真”</em>数字模式并<strong>精确</strong>调谐到低于传真载波频率 1900Hz,或使用任何提供的传真书签。</li><li>等待下一次传真传输开始。OpenWebRX+<strong>将不会</strong> 接收部分传真传输,因为它需要从传输标头获取图像格式信息。</li><li>收到的传真图像将显示在瀑布显示屏顶部的单独面板中。单击图像将其下载到您的计算机或移动设备。</li></ol><p>OpenWebRX+ 内部的传真解码器支持<strong>IOC576 和 IOC288 格式的 120LPM 传输</strong>。作为<strong>管理员</strong>,您对传真解码有一定的控制权。<em>“设置|常规|解调和解码|传真传输”</em>中提供以下选项 :</p><ul><li><strong>传输速度</strong> 传输速度控制解码器期望的每分钟传真线路数。最常见的值为 120LPM。除非您完全确定需要不同的版本,否则请勿更改它。</li><li><strong>对接收到的图像进行后处理以减少噪音</strong> 启用后,此选项使传真解码器对接收到的图像进行后处理以获得更好的对比度。但某些灰度梯度可能会因此丢失。</li><li><strong>接收彩色图像</strong> 此实验选项应允许 OpenWebRX+ 接收彩色传真。但由于缺乏样本,尚未进行测试。</li><li><strong>使用幅度调制</strong> 此实验性选项允许 OpenWebRX+ 接收使用 AM 模式编码的传真,而不是通常的 USB。目前,由于缺乏样本,尚未进行测试。</li></ul><h3 id="监控寻呼机消息-POCSAG"><a href="#监控寻呼机消息-POCSAG" class="headerlink" title="监控寻呼机消息 (POCSAG)"></a><strong>监控寻呼机消息 (POCSAG)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Pager">什么是寻呼机?</a></em></p><p>虽然无线寻呼机基本上是一种过时的技术,但它仍在医院、企业中使用,并用于自动报告。寻呼机流量通常出现在 150-165MHz 以及其他 VHF 和 UHF 频段。OpenWebRX+ 可以以不同的速度解码 <a href="https://en.wikipedia.org/wiki/Radio-paging_code_No._1">POCSAG</a>和 <a href="https://en.wikipedia.org/wiki/FLEX_(protocol)">FLEX</a> 寻呼协议。</p><p>请记住,<strong>您当地的法律可能禁止您监听寻呼机流量</strong>。做之前请先检查一下!</p><p>为了监视 OpenWebRX+ 中的寻呼机消息,请选择<em>“寻呼”</em> 数字模式并调谐到寻呼机信号的精确中间位置。您将在瀑布显示屏顶部的单独面板中看到解码的寻呼机消息。</p><p>许多寻呼机消息携带数字或二进制数据。作为 <strong>管理员</strong>,您可以选择忽略这些不可读的消息,方法是转到<em>“设置 | 常规 | 解调和解码 | 其他”</em>并启用<em>“过滤掉空的、数字的或不可读的寻呼机消息”</em>选项。</p><h3 id="监控无线设备-ISM"><a href="#监控无线设备-ISM" class="headerlink" title="监控无线设备 (ISM)"></a><strong>监控无线设备 (ISM)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/ISM_radio_band">什么是ISM?</a></em></p><p>许多现代无线设备,例如气象站、安全传感器、轮胎压力传感器、汽车钥匙等,都使用射频进行通信。这些设备通常位于 433-435MHz、902-928MHz 和其他一些频段。为了监控 OpenWebRX+ 中的智能设备传输,请执行以下操作:</p><ol><li>查看 ISM 频率以查找无线设备可能产生的信号。</li><li>一旦看到任何可疑信号,请在它们附近调谐并选择 <em>“ISM”</em>数字模式。ISM 解码器将监控并显示您调谐频率周围的大范围频谱。</li><li>等待信号再次出现。如果 ISM 解码器能够理解它们,则解码后的数据将显示在瀑布显示屏顶部的单独面板中。</li></ol><p>如果您无法解码任何 ISM 信号或在瀑布上看不到任何信号,<strong>请尝试使用无线车钥匙测试解码器</strong>。不过,了解它们的信号频率很重要。</p><h3 id="跟踪分组无线电-APRS"><a href="#跟踪分组无线电-APRS" class="headerlink" title="跟踪分组无线电 (APRS)"></a><strong>跟踪分组无线电 (APRS)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Automatic_Packet_Reporting_System">什么是APRS?</a></em></p><p>自动<em>数据包报告系统 (APRS)<em>使 HAM 运营商能够交换数字数据、消息并与世界共享其位置。APRS在北美使用144.39MHz频率,在欧洲使用144.8MHz。请注意,OpenWebRX 频段规划仅启用欧洲 APRS 频率。**如果您的接收器位于北美,请编辑频段规划以切换到 144.39MHz 频率。</em></em></p><p>为了监控 OpenWebRX 中的 APRS 流量,请选择<em>“数据包”</em> 数字模式并调谐到上述频率之一。您将在瀑布显示屏顶部的单独面板中看到解码的 APRS 消息。此外,这些消息的来源将在地图上弹出,通过单击<strong>“地图”</strong>按钮即可显示。</p><p>OpenWebRX+ 频段规划还包括一个 APRS 条目,频率为 145.825MHz。这是<em>国际空间站 (ISS) 的</em>频率。一天几次,当国际空间站飞过接收器位置上方时,您可以期望以这个频率从很远的地方看到 APRS 报告。这些报告由位于国际空间站的 APRS 中继器重新传输。</p><h3 id="船舶追踪-AIS"><a href="#船舶追踪-AIS" class="headerlink" title="船舶追踪 (AIS)"></a><strong>船舶追踪 (AIS)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Automatic_identification_system">什么是AIS?</a></em></p><p>现代船舶使用称为 AIS 的甚高频无线电系统报告其位置。如果您的 OpenWebRX+ 接收器位于足够大的水域附近,它可能能够接收 AIS 位置报告并将其显示在地图上。</p><p>AIS 在两个海事频带频率上运行,即 161.975MHz 和 162.025MHz。选择包含这些频率的配置文件后,您将看到它们标有绿色书签,因为它们是频段计划的一部分。单击 AIS 书签,就会出现第二个瀑布,以及显示收到的位置报告的信息面板。</p><p>现在,如果单击<strong>“地图”</strong>按钮,您应该会在地图上看到船舶位置。单击一艘船会弹出一个气泡,显示有关该船的一些基本信息。</p><p>AIS 通过一个称为 MMSI 的唯一编号来识别每艘船只。OpenWebRX+ 显示这些 MMSI 编号,并将它们超链接到 <a href="https://www.vesselfinder.com/">Vessel Finder</a> 网站,您可以在其中找到有关每艘船只的照片和其他信息。</p><h3 id="追踪飞机-ADS-B"><a href="#追踪飞机-ADS-B" class="headerlink" title="追踪飞机 (ADS-B)"></a><strong>追踪飞机 (ADS-B)</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Automatic_Dependent_Surveillance%E2%80%93Broadcast">什么是ADS-B?</a></em></p><p>飞机使用 ADS-B 系统定期报告其在空中的位置,频率为 1090MHz 和 978MHz。OpenWebRX+ 可以监听这些频率并向您显示收到的航班信息。</p><p>要接收 ADS-B 传输,请选择包含 ADS-B 频率之一的配置文件。由于这些传输需要 2MHz 带宽,因此配置文件在 ADS-B 频率的每一侧必须至少具有 1MHz 带宽。</p><p>标准 ADS-B 频率是 OpenWebRX+ 频段计划的一部分,因此标有绿色书签。单击 ADS-B 书签后,将出现一个面板,其中显示报告的飞机及其飞行数据。</p><p>如果单击<strong>“地图”</strong>按钮,您应该会在地图上看到飞机的位置。单击飞机会弹出一个气泡,显示有关该飞机的一些基本信息。</p><p>飞机通过多个不同的 ID 进行识别,包括航班 ID、飞机尾号和 ICAO 代码(又名 S 模式应答器代码)。OpenWebRX+ 会将收到的 ID 超链接到 <a href="https://www.flightaware.com/">FlightAware</a> 网站,您可以在其中找到飞机照片和有关每次航班的其他信息。</p><h2 id="用户特征"><a href="#用户特征" class="headerlink" title="用户特征"></a><strong>用户特征</strong></h2><p>本节介绍没有管理访问权限的普通用户可以使用的各种 OpenWebRX 功能。</p><h3 id="频率扫描仪"><a href="#频率扫描仪" class="headerlink" title="频率扫描仪"></a><strong>频率扫描仪</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Radio_scanner">什么是扫描仪?</a></em></p><p>OpenWebRX+ 包括一个频率扫描仪,允许自动搜索当前显示的活动书签。一旦扫描仪检测到书签频率之一的信号,它将调谐到该频率。一旦频率安静下来,扫描仪将继续搜索。要使用扫描仪,请执行以下操作:</p><ul><li>选择一个配置文件,其中包含一些您感兴趣的书签频率。</li><li>调谐到瀑布的空白部分并左键单击 <strong>SQ</strong>按钮以设置静噪级别。</li><li>右键单击<strong>SQ</strong>按钮开始扫描。<strong>SQ</strong>按钮将呈绿色亮起,表示扫描仪已开启。移动设备用户只需长时间按住按钮即可模拟右键单击。</li><li>完成后,再次右键单击<strong>SQ</strong>按钮以禁用扫描仪。</li></ul><p>请记住,<strong>扫描仪无法在数字语音通道上工作</strong>,因为即使通道上没有实际流量,它们也往往会保持信号打开。</p><h3 id="中继器"><a href="#中继器" class="headerlink" title="中继器"></a><strong>中继器</strong></h3><p><em><a href="https://en.wikipedia.org/wiki/Radio_repeater">什么是中继器?</a></em></p><p>每天一次,OpenWebRX+ 会向 <a href="https://www.repeaterbook.com/">RepeaterBook.com</a>查询 最接近接收器位置的中继器列表。这些中继器显示在地图上,每个中继器都用 <strong>⋈</strong>标记表示。</p><p><em>您可以通过在“设置 | 常规 | 显示 | 中继器书签范围”</em> 中设置与接收器的最大距离,让 OpenWebRX+ 创建中继器书签。<strong>OpenWebRX+ 只会为位于预设最大距离内的中继器创建书签。</strong></p><p>您还可以将中继器书签限制为仅几个配置文件(例如 VHF / UHF):</p><ol><li><em>通过将“设置|常规|显示|中继器书签范围”</em>设置为零来 禁用全局中继器书签。</li><li>转到<em>“设置 | SDR 设备和配置文件 | <设备> | <配置文件>”</em> ,然后单击<strong>“添加”添加一个名为</strong><em>“中继器书签范围”</em>的选项。</li><li>将新添加的选项设置为与您希望看到中继器的接收器的最大距离,并通过单击<strong>“应用”和“保存”</strong>保存配置文件设置。</li></ol><p>需要注意的是,只有在<em>“设置|常规|接收器信息|接收器位置”中</em><strong>设置正确的接收器位置,中继器才会正确显示</strong>。同样重要的是要记住,由于 OpenWebRX+ 每天查询<a href="https://www.repeaterbook.com/">RepeaterBook.com一次,</a><strong>因此在设置接收器位置后可能无法立即获得最新的中继器信息</strong>。</p><h3 id="其他在线接收器"><a href="#其他在线接收器" class="headerlink" title="其他在线接收器"></a><strong>其他在线接收器</strong></h3><p>OpenWebRX+ 将定期查询 <a href="https://www.receiverbook.de/">ReceiverBook</a>、 <a href="http://kiwisdr.com/">KiwiSDR</a>和 <a href="http://websdr.org/">WebSDR.org</a> 网站以获取其他在线 SDR 接收器。这些接收器显示在地图上,每个接收器都标有<strong>◬</strong>标记。红色标记代表 KiwiSDR 接收器,绿色标记对应 OpenWebRX 接收器,蓝色标记代表原始 WebSDR 接收器。单击标记会显示有关接收者的一般信息,以及接收者网页的链接。</p><h3 id="内置聊天"><a href="#内置聊天" class="headerlink" title="内置聊天"></a><strong>内置聊天</strong></h3><p>OpenWebRX+ 包含一个简单的聊天功能,可让连接的用户相互交谈。按 接收者网页顶部的 <strong>“聊天”按钮即可打开聊天面板。</strong></p><p>当您通过在聊天窗口底部输入第一条聊天消息来发送该消息时,OpenWebRX+ 将为您分配一个随机昵称,在您的消息旁边显示给其他用户。要<strong>更改您的姓名</strong>,请在消息输入左侧输入您的新昵称。</p><p>作为<strong>服务器管理员</strong>,您可能希望在 OpenWebRX+ 服务器上<strong>禁用聊天。</strong>为此,请转到<em>“设置|常规|接收器限制”</em>并禁用<em>“允许用户互相聊天”</em>选项。聊天按钮将变成<strong>日志</strong>按钮,日志面板不接受用户的任何输入 <strong>。</strong></p><h2 id="管理员功能"><a href="#管理员功能" class="headerlink" title="管理员功能"></a><strong>管理员功能</strong></h2><p>本节讨论管理 OpenWebRX 服务器以及除了提供对无线电波的公共访问之外如何使用它。</p><h3 id="后台解码"><a href="#后台解码" class="headerlink" title="后台解码"></a><strong>后台解码</strong></h3><p>作为<strong>服务器管理员</strong>,您可以让 OpenWebRX 服务器 在有人通过这些传输收听配置文件时<strong>自动解码无线电传输。</strong>此功能可用于接收 SSTV 图像、传真、监控数字 HAM 流量、跟踪飞机等。</p><p>要开始后台解码,请转到<em>“设置|后台解码”</em>,选中<em>“启用后台解码服务”</em> 选项,然后选择您想要自动接收和解码的传输模式。确保只选择您真正需要的解码器,因为运行太多后台解码器会大大降低服务器速度。</p><p>现在,转到要用于后台解码的 SDR 设备,让我们说<em>“设置 | SDR 设备和配置文件 | <设备>”</em>,然后添加<em>“在此设备上运行后台服务”</em>选项。添加此选项后,请确保已启用它。</p><p>此时,每次有人连接并收听 <em><code><Device></code><em>配置文件时,OpenWebRX 都会<strong>自动解码标有绿色书签的频率上的所有启用的信号类型</strong>,即频段计划一部分的所有信号。如果解码的数据是图像或消息日志,这些数据将保存到</em>/tmp</em>文件夹中,并在单击<strong>“文件”</strong>按钮后显示。<strong>当您单击“地图”</strong>按钮时,位置报告(例如 FT8、WSPR、APRS 等)将显示在地图上。</p><p>为了以不属于<strong>频段</strong> 计划的频率启用后台解码(<strong>无</strong>绿色书签),您必须通过编辑以下文件将该频率添加到频段计划中:</p><p>/etc/openwebrx/bands.json</p><p>在编辑此文件之前,请确保<strong>创建备份副本</strong>,以防出现问题。不幸的是,目前无法通过基于网络的设置来编辑频段计划。编辑并保存文件后,按如下方式重新启动 OpenWebRX,并确保在您添加的频率处有一个绿色书签:</p><p>sudo systemctl 重新启动 openwebrx</p><h3 id="预定解码"><a href="#预定解码" class="headerlink" title="预定解码"></a><strong>预定解码</strong></h3><p>在<a href="https://fms.komkon.org/OWRX/#HOW-BACKGROUND">上一节</a>中,我们讨论了 OpenWebRX 如何在有人使用时自动解码无线电传输。在本节中,我们将让OpenWebRX在没有人使用时 <strong>自行运行无线电并接收信号。</strong></p><p>通过转至<em>“设置 | SDR 设备和配置文件 | <设备>”,从</em>之前启用后台服务的 SDR 设备开始。向该设备添加<em>“调度程序”选项,并在其他设置中找到新添加的调度程序选择器。</em>它将为您提供两种不同的时间表模型:</p><ul><li><strong>日光调度程序</strong> 日光调度程序允许您选择三个配置文件在白天、夜间和“灰线”时段(即黎明和黄昏)在设备上运行。由于无线电波传播取决于一天中的时间,因此该方案提供了易于配置且功能齐全的时间表。</li><li><strong>静态调度程序</strong> 静态调度程序可让您以分钟的精度定义自己的日程表,其中包含任意数量的条目。虽然添加这样的时间表比较困难,但它使您可以灵活地每小时切换多个不同的配置文件。</li></ul><p>添加并保存日程后,<strong>只要没有人在使用该设备,OpenWebRX 就会在预定的配置文件之间切换设备</strong>。一旦所有用户断开连接,OpenWebRX 会将 SDR 设备返回到其当前计划的配置文件。它还将运行您之前启用的任何适用的后台解码器,将收到的数据报告给地图或将其保存到文件存储中。</p><h3 id="报告解码数据"><a href="#报告解码数据" class="headerlink" title="报告解码数据"></a><strong>报告解码数据</strong></h3><p>在 <a href="https://fms.komkon.org/OWRX/#HOW-BACKGROUND">前两节</a> <a href="https://fms.komkon.org/OWRX/#HOW-SCHEDULED">中</a> ,我们讨论了如何配置 OpenWebRX 以自动解码各种无线电传输。在本节中,我们将讨论将解码后的数据发送到在线服务,例如 <a href="https://aprs.fi/">APRS-IS</a>、 <a href="https://pskreporter.info/">PSKReporter</a>和 <a href="https://wsprnet.org/">WSPRnet</a>。要配置在线报告,请转至<em>“设置 | 发现和报告”</em>设置页面。那里有三个部分,用于 OpenWebRX 可以报告的三种类型的数据:</p><ul><li><strong>APRS-IS</strong> 接收到的APRS位置报告可以发送到 <a href="https://www.aprs2.net/">APRS-IS网络</a>。为此,请填写您的 APRS 呼号和最近的服务器地址。您可能还需要提供 APRS-IS 网络密码。最后,选中<em>“将收到的 APRS 数据发送到 APRS-IS”</em>选项。报告的数据将显示在 <a href="https://aprs.fi/">APRS.fi 地图</a>上。请注意, <a href="https://aprs.fi/">APRS.fi</a> 不会显示多重报告点,因此您的某些报告可能不会显示在那里。</li><li>如果您还想向 APRS-IS报告您的<strong>接收器位置,请选中</strong><em>“将接收器位置发送到 APRS-IS 网络”</em>选项并填写有关您的接收器和天线详细信息的信息。</li><li>请注意,只有一个解码器可以使用相同的呼号<strong>向 APRS-IS 网络发送数据。</strong>因此,如果您有多个 APRS 解码器正在运行(例如,在 144.39MHz 和 145.825MHz 下),您的某些报告将无法通过。要解决此问题,请在 bandplan 文件中 <strong>禁用除一个 APRS 频率之外的所有频率。</strong></li><li><strong>PSKReporter OpenWebRX 可以向</strong><a href="https://pskreporter.info/">PSKReporter</a> 网站 报告 FT8、FT4、JT9、JT65、FST4、JS8、Q65、WSPR、FST4W 和 MSK144 传输 。您所需要做的就是选中<em>“启用向 pskreporter.info 发送点”</em>选项,并使用唯一的名称填写呼号字段。它<strong>不一定</strong>是您的官方 HAM 呼号,但大多数拥有 HAM 呼号的人都在这里使用它们。报告的数据将显示在 <a href="https://pskreporter.info/pskmap">PSKReporter 地图</a>上。您可能还想在天线信息字段中描述您的天线,以便其他人知道您如何接收所报告的数据。</li><li></li><li></li><li><strong>WSPRnet</strong> WSPRnet 网站<a href="https://wsprnet.org/">仅</a> 接受 WSPR 和 FST4W 报告。要启用它,请选中 <em>“启用向 wsprnet.org 发送点”</em>选项,然后在呼号字段中输入您的唯一名称。它<strong>不一定</strong>是您的官方 HAM 呼号,但大多数拥有 HAM 呼号的人都在这里使用它们。报告的数据将显示在 <a href="http://www.wsprnet.org/drupal/wsprnet/map">WSPRnet 地图</a>上。</li></ul><h3 id="配置地图"><a href="#配置地图" class="headerlink" title="配置地图"></a><strong>配置地图</strong></h3><p>OpenWebRX+ 提供<strong>两种地图选项:</strong><em><strong>Google 地图</strong></em>和基于<em>Leaflet库</em><strong>的免费地图集合</strong>。非常流行的<em>OpenStreetMap</em>就是该集合的一部分。</p><p>Google<em>地图的</em>实现更加详细和完善,但它可能需要您向 Google 注册您的信用卡才能接收 API 密钥。<em>如果您超过Google 地图</em>访问的特定限制,Google 可能会向您的信用卡收取费用。</p><p>OpenStreetMap和<em>Leaflet</em>中包含的其他地图 不太详细,但它们是完全免费的<em>。</em>此外,<em>Leaflet</em> 实现还包括一些用于天气、海事注释等的额外层。</p><p><strong>要配置默认地图</strong>,请转到<em>“设置|常规|地图|地图类型”</em>,然后选择您想要默认向用户显示的地图。请记住,用户始终可以通过单击<strong>“地图”</strong>按钮来切换地图。同一设置部分中提供的其他与地图相关的选项包括:</p><ul><li><strong>Google 地图 API 密钥</strong> 您可以在此处输入从 Google 收到的<em>Google 地图API 密钥。</em>如果您没有 API 密钥,请将此字段留空。很多时候, 出于某种原因,<em>谷歌地图</em>无论如何都能工作。</li><li><strong>OpenWeatherMap API 密钥</strong> 如果您想在<em>Leaflet</em>地图上查看全球天气,请考虑获取<em>OpenWeatherMap</em> API 密钥并在此处输入。这些密钥是免费的,但功能有限。如果没有此密钥,OpenWebRX+ 将只能向您显示从 <em>WeatherRadar</em>获取的美国天气。</li><li><strong>地图保留时间</strong> 这是接收到的位置报告在地图上保持可见的时间(以秒为单位)。一旦位置报告超过保留时间的一半,位置报告就会开始变暗。一旦达到保留时间,位置报告将从地图上消失。</li><li><strong>呼号数据库 URL</strong> 这是当您在地图上单击报告的 HAM 呼号时用于查找这些呼号的网站。<em>“{}”</em>字符将替换为实际呼号。这里两个常见的选择是 <a href="https://www.qrz.com/">qrz.com</a>和 <a href="https://www.qrzcq.com/">qrzcq.com</a>。</li><li><strong>船舶数据库 URL</strong> 这是当您在地图上单击船舶 MMSI 编号时用于查找船舶的网站。<em>“{}”</em>字符将替换为实际的 MMSI 号码。</li><li><strong>航班数据库 URL</strong> 这是当您在地图上单击航空公司航班 ID 时用于查找航空公司航班 ID 的网站。<em>“{}”</em>字符将替换为实际的航班 ID。</li><li><strong>飞机数据库 URL</strong> 这是当您在地图上单击飞机时用于查找飞机 S 模式 ID 的网站。<em>“{}”</em>字符将替换为实际的 S 模式 ID。</li></ul><h3 id="限制接收器的使用"><a href="#限制接收器的使用" class="headerlink" title="限制接收器的使用"></a><strong>限制接收器的使用</strong></h3><p>作为<strong>服务器管理员</strong>,您可能出于法律或技术原因<strong>限制</strong>公众使用您的 OpenWebRX 服务器。请务必检查您所在位置允许收听的无线电频率和模式。<strong>请勿</strong>向公众提供禁止的频率和模式。<em>“设置|常规|接收器限制”</em>中提供以下限制 :</p><ul><li><strong>最大客户端数量</strong> 此设置决定有多少人可以同时连接到您的 OpenWebRX 服务器。任何尝试连接到“完整”服务器的人都会收到一条错误消息并被拒绝服务。</li><li><strong>最大文件数</strong> 此设置确定 OpenWebRX+ 在开始删除最旧的文件之前允许保留从空中接收到的 SSTV 图像、传真和其他文件的数量。按接收器网页顶部的 <strong>“文件”</strong>按钮可以查看接收到的文件 。</li><li><strong>会话超时</strong> 该值(以秒为单位)确定允许用户使用 OpenWebRX+ 接收器的时间长度。不过,重新加载接收者的网页会重新启动时间,因此超时主要发生在那些让计算机保持 OpenWebRX+ 页面打开的人身上。</li><li><strong>使用策略 URL</strong> 一旦用户的会话超时,就会向用户显示此网页。默认页面解释了为什么会出现超时,并让用户可以找到其他在线接收器来收听。</li><li><strong>允许用户互相聊天</strong> 如果您想禁用内置聊天功能,请禁用此选项。禁用后,聊天面板将变成不接受任何输入的日志面板。</li><li><strong>允许用户录制收到的音频</strong> 如果您不希望用户录制他们正在收听的任何音频,请禁用此选项。禁用后,<strong>REC</strong> 按钮将从用户界面中消失。请记住,这<strong>不会</strong>阻止您的用户通过其他方式录制音频。</li><li><strong>允许用户更改中心频率</strong> 如果您想让 OpenWebRX+ 用户通过右键单击圆形箭头按钮“回避”其当前配置文件,请启用此选项。由于侦听同一配置文件的所有用户都会发生此更改,因此在许多人侦听相同配置文件的服务器上禁用它是有意义的。</li><li><strong>魔法密钥</strong> 当魔法密钥字符串被填写(即不为空)时,OpenWebRX+ 将只允许对知道魔法密钥并提供它的人进行侧步配置文件,如下所示:</li><li><a href="http://openwebrx.receiver.org:8073/#">http://openwebrx.receiver.org:8073/#</a> <strong>key=<code><magic-key></code></strong></li></ul><h3 id="监控接收器的使用"><a href="#监控接收器的使用" class="headerlink" title="监控接收器的使用"></a><strong>监控接收器的使用</strong></h3><p>OpenWebRX+<strong>允许其管理员监控</strong>服务器连接并<strong>禁止滥用用户</strong>。请注意,由于 OpenWebRX 项目的主要目标是提供免费、开放的在线广播,因此应极其小心地使用该设施。如果您想拥有真正私有的 OpenWebRX 服务器,请考虑将其关闭以供公共访问。</p><p><img src="https://huangetech.feishu.cn/space/api/box/stream/download/asynccode/?code=MjA2MWQ0NDFmN2IwNjcxNjMzNTAxZTg2MzdhYTJkMzZfM2NmbUpzdVYyd2ZzVUNsRTNFU0FQWmdGMDlKYnpLenVfVG9rZW46S1pzdmJaS0Vub3d1a0Z4WmNxdGNIaUxrbmpoXzE3MTc1Njg4NjM6MTcxNzU3MjQ2M19WNA" alt="img"></p><p>为了查看当前连接的客户端,请单击 <strong>“设置”</strong>按钮并滚动到页面底部,直到看到<em>“客户端”</em>显示,如上所示。在那里,您将能够在选定的时间内 <strong>禁止客户端的 IP 地址,或取消禁止</strong>以前禁止的地址。被禁止的客户端仍然可以看到地图和文件,但无法访问接收器本身。</p><p>您还可以通过将消息输入到输入字段并单击 <strong>发送按钮来向所有当前连接的客户端广播消息</strong>。您的消息将显示在客户的日志/聊天面板中。</p><p>**如果您在 NGINX 后面运行 OpenWebRX+**,您可能无法看到客户端的 IP 地址,除非您编辑此文件:</p><p>/etc/nginx/sites-enabled/openwebrx</p><p>并将以下行添加到<strong>位置部分</strong>:</p><p>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</p><h2 id="经常问的问题"><a href="#经常问的问题" class="headerlink" title="经常问的问题"></a><strong>经常问的问题</strong></h2><h3 id="OpenWebRX-升级后坏了!"><a href="#OpenWebRX-升级后坏了!" class="headerlink" title="OpenWebRX 升级后坏了!"></a><strong>OpenWebRX 升级后坏了!</strong></h3><p><strong>在桌面浏览器中,尝试在按住SHIFT</strong>键 的同时重新加载接收器网页 。在移动浏览器中,清除浏览器缓存并重新加载页面。如果这没有帮助,请尝试重新启动运行 OpenWebRX 的计算机。</p><h3 id="新的-OpenWebRX-功能未显示!"><a href="#新的-OpenWebRX-功能未显示!" class="headerlink" title="新的 OpenWebRX 功能未显示!"></a><strong>新的 OpenWebRX 功能未显示!</strong></h3><p>单击<em>“设置 | 功能报告”</em>,查看您感兴趣的功能是否显示为已启用。如果某个功能被禁用,该报告将告诉您应该如何启用它。</p><h3 id="数字语音模式不显示!"><a href="#数字语音模式不显示!" class="headerlink" title="数字语音模式不显示!"></a><strong>数字语音模式不显示!</strong></h3><p><em>数字语音模式(DMR、D-STAR、YSF、NXDN)需要Digital Voice Systems Inc</em> 获得专利的 AMBE 编解码器算法。因此,OpenWebRX 和 OpenWebRX+ 都不包含开箱即用的数字语音支持。<strong>您个人有责任</strong>将必要的部分添加到您自己的 OpenWebRX 安装中。</p><p>将数字语音模式添加到 OpenWebRX 的正确且具有法律责任的方法是连接一个 在硬件中实现 AMBE 编解码器的<a href="https://github.com/jketterl/openwebrx/wiki/AMBE-vocoder-device-notes">许可 USB 加密狗。OpenWebRX 和 OpenWebRX+ 都将以最少的配置工作</a>支持常见的 AMBE 加密狗模型 。</p><p>如果您出于某种原因不想使用 AMBE 编解码器加密狗,可以使用未经许可的 <a href="https://github.com/szechyjs/mbelib">MBELib</a> 软件实现,其来源相当可疑。MBELib 的使用可能会被解释为专利侵权。如果您同意的话,有<a href="https://fms.komkon.org/OWRX/install-softmbe.sh">一个脚本</a>可以为 OpenWebRX 添加 MBELib 支持。运行如下:</p><p>sudo install-softmbe.sh</p><p>通过任一方法安装数字语音支持后,请访问 <em>“设置 | 功能报告”</em>页面以验证安装是否成功。您现在应该在接收器网页上看到数字语音按钮。</p><h3 id="我的-SDRplay-设备无法可靠工作!"><a href="#我的-SDRplay-设备无法可靠工作!" class="headerlink" title="我的 SDRplay 设备无法可靠工作!"></a><strong>我的 SDRplay 设备无法可靠工作!</strong></h3><p>SDRplay 设备及其克隆设备出了名的容易出现故障,需要良好的电源才能可靠运行。如果您在使用这些设备时遇到超时或故障,请尝试通过有源 USB 集线器连接它们。如果这没有帮助,并且您拥有正品 SDRplay 设备(不是克隆设备), 请 在 SDRplay 网站上<a href="https://www.sdrplay.com/support/open.php">开具票证。</a>OpenWebRX 开发人员<strong>无法</strong>帮助您解决 SDRplay 硬件问题。</p><h3 id="你能实现我想要的功能吗?"><a href="#你能实现我想要的功能吗?" class="headerlink" title="你能实现我想要的功能吗?"></a><strong>你能实现我想要的功能吗?</strong></h3><p>一般来说,<strong>没有</strong>。OpenWebRX 是一个非盈利项目,由极少数人在业余时间开发。这些开发人员会优先考虑他们认为个人感兴趣、很多人反复请求或易于实现的功能。</p><p>话虽如此,您想要的功能很可能已经实现,或者可以通过其他方式实现,或者由于某种原因已被考虑和避免。请仔细阅读本文档,特别是<a href="https://fms.komkon.org/OWRX/#FAQ">常见问题解答部分</a>。</p><p>此外,由于 OpenWebRX 是一个开源项目,因此<strong>您可以自行添加所需的功能</strong>。查看 <a href="https://github.com/jketterl/openwebrx">原始 OpenWebRX 源代码</a> 或 <a href="https://github.com/luarvique/openwebrx">OpenWebRX+ 源代码</a> 并考虑参与 OpenWebRX 开发。</p><h3 id="如何向用户隐藏某些个人资料?"><a href="#如何向用户隐藏某些个人资料?" class="headerlink" title="如何向用户隐藏某些个人资料?"></a><strong>如何向用户隐藏某些个人资料?</strong></h3><p>由于 OpenWebRX 是一个<strong>开放的</strong>在线接收器,因此它<strong>不允许</strong> 您向公众隐藏个人资料。如果您想私下访问您的接收器,最好的选择是使其无法通过互联网访问。</p><p>话虽如此,有一个选项可以阻止用户更改连接到 OpenWebRX+ 的特定 SDR 设备上的配置文件。如果此 SDR 设备执行后台解码并根据自己的时间表更改配置文件,那么它会很有用。要启用此选项,请执行以下操作:</p><ol><li>转至<em>“设置 | 常规设置 | 接收器限制 | 魔术键” ,然后设置您想要用于</em><strong>强制</strong> 在受保护设备上切换配置文件的 魔术键值。</li><li>转到<em>“设置 | SDR 设备和配置文件 | <设备>”</em>,从<em>“其他可选设置”中选择“需要魔术键才能在此设备上切换配置文件”</em>,然后单击<strong>“添加”</strong>。</li><li>确保选中<em>“需要魔术键才能在此设备上切换配置文件”</em>复选框,然后单击<strong>“应用”和“保存”</strong>。</li></ol><p>从现在开始,用户只能通过在 URL 中提供预配置的魔术键值来更改设备上的配置文件,如下所示:</p><p><a href="http://openwebrx.receiver.org:8073/#">http://openwebrx.receiver.org:8073/#</a> <strong>key=<code><magic-key></code></strong></p><h3 id="如何跳转到任意频率?"><a href="#如何跳转到任意频率?" class="headerlink" title="如何跳转到任意频率?"></a><strong>如何跳转到任意频率?</strong></h3><p>由于 OpenWebRX 根据“配置文件”(即预配置的频率范围)工作,因此您<strong>无法</strong>跳转到任意频率,因为新频率可能需要不同的配置文件设置。此外,收听相同配置文件的其他用户可能不喜欢您跳到全新的频率。</p><p>尽管如此,OpenWebRX+ 确实提供了一种“回避”当前配置文件、转到相邻频率的方法。要启用侧步,请执行以下操作:</p><ol><li>转到<em>“设置|常规设置|接收器限制”</em>并确保选中 <em>“允许用户更改中心频率”复选框。</em></li><li>如果您想使用魔术键保护频率变化,请在相邻的<em>“魔术键”</em>字段中输入。</li><li>单击<strong>应用并保存</strong>以保存更改。</li></ol><p>从现在开始,您可以通过右键单击接收器网页顶部的大圆形箭头来超出预先配置的频率范围。没有鼠标的移动用户只需用手指按住这些大圆形箭头大约一秒钟即可。</p><p>如果配置了魔术键,则只有在 URL 中提供该键时才能回避配置文件,如下所示:</p><p><a href="http://openwebrx.receiver.org:8073/#">http://openwebrx.receiver.org:8073/#</a> <strong>key=<code><magic-key></code></strong></p><h3 id="OpenWebRX-配置文件在哪里?"><a href="#OpenWebRX-配置文件在哪里?" class="headerlink" title="OpenWebRX 配置文件在哪里?"></a><strong>OpenWebRX 配置文件在哪里?</strong></h3><p>如果您想备份 OpenWebRX 配置文件,它们的位置如下:</p><figure class="highlight awk"><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><code class="hljs awk"><span class="hljs-regexp">/var/</span>lib<span class="hljs-regexp">/openwebrx/</span>settings.json<br><span class="hljs-regexp">/var/</span>lib<span class="hljs-regexp">/openwebrx/</span>bookmarks.json<br><span class="hljs-regexp">/var/</span>lib<span class="hljs-regexp">/openwebrx/u</span>sers.json<br><span class="hljs-regexp">/etc/</span>openwebrx/openwebrx.conf<br><span class="hljs-regexp">/etc/</span>openwebrx/bands.json<br></code></pre></td></tr></table></figure><p>您应该<strong>避免手动编辑配置文件</strong>,因为它们通常是通过基于 Web 的设置界面进行修改的。如果您决定编辑配置文件,请务必先<strong>确保您有备份副本</strong>。更新配置文件后,使用以下命令重新启动 OpenWebRX:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl restart openwebrx<br></code></pre></td></tr></table></figure><h3 id="如何让-OpenWebRX-使用-HTTPS-协议?"><a href="#如何让-OpenWebRX-使用-HTTPS-协议?" class="headerlink" title="如何让 OpenWebRX 使用 HTTPS 协议?"></a><strong>如何让 OpenWebRX 使用 HTTPS 协议?</strong></h3><p>虽然原始 OpenWebRX 版本不支持 HTTPS 协议,但 OpenWebRX+ 支持。为了在 OpenWebRX+ 中启用 HTTPS,<strong>您将需要 SSL 证书文件 (</strong> <em><strong>cert.pem</strong></em> <strong>) 及其密钥 (</strong> <em><strong>key.pem</strong></em> **)**。获得这两个文件后,请执行以下操作:</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> <cert.pem> /etc/openwebrx/cert.pem<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">cp</span> <key.pem> /etc/openwebrx/key.pem<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> openwebrx:openwebrx /etc/openwebrx/cert.pem<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chown</span> openwebrx:openwebrx /etc/openwebrx/key.pem<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> 660 /etc/openwebrx/cert.pem<br><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">chmod</span> 660 /etc/openwebrx/key.pem<br><span class="hljs-built_in">sudo</span> systemctl restart openwebrx<br></code></pre></td></tr></table></figure><h3 id="如何去掉默认的黄色书签?"><a href="#如何去掉默认的黄色书签?" class="headerlink" title="如何去掉默认的黄色书签?"></a><strong>如何去掉默认的黄色书签?</strong></h3><p>OpenWebRX+ 附带了一些常见频率的预定义书签,例如天气信息、CB 频道等。如果您不喜欢看到这些书签,请删除它们并重新启动 OpenWebRX+,如下所示:</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> <span class="hljs-built_in">rm</span> -f /etc/openwebrx/bookmarks.d/*<br><span class="hljs-built_in">sudo</span> systemctl restart openwebrx<br></code></pre></td></tr></table></figure><p>如果您只想删除<strong>某些书签,请删除或编辑</strong><em>/etc/openwebrx/bookmarks.d</em>文件夹中的单个文件。</p><p>本文档由<a href="https://github.com/muzihuaner">木子欢儿</a>翻译制作</p><p>参考:</p><p><a href="https://www.openwebrx.de/">https://www.openwebrx.de/</a></p><p><a href="https://fms.komkon.org/OWRX/">https://fms.komkon.org/OWRX/</a></p><p><a href="https://luarvique.github.io/ppa/">https://luarvique.github.io/ppa/</a></p>]]></content>
<summary type="html"><blockquote>
<p>OpenWebRX是一款基于网络的软件定义无线电(SDR)接收器应用程序。它允许用户通过网页浏览器访问和控制连接的SDR硬件设备,用于无线电收听和监控。</p>
</blockquote>
<p>本文档是关于 <a href="https://lu</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="OpenWebRXPlus" scheme="https://blog.quickso.cn/tags/OpenWebRXPlus/"/>
<category term="业余无线电" scheme="https://blog.quickso.cn/tags/%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5/"/>
</entry>
<entry>
<title>短波气象传真接收指南(JMH)</title>
<link href="https://blog.quickso.cn/2024/01/19/%E7%9F%AD%E6%B3%A2%E6%B0%94%E8%B1%A1%E4%BC%A0%E7%9C%9F%E6%8E%A5%E6%94%B6%E6%8C%87%E5%8D%97/"/>
<id>https://blog.quickso.cn/2024/01/19/%E7%9F%AD%E6%B3%A2%E6%B0%94%E8%B1%A1%E4%BC%A0%E7%9C%9F%E6%8E%A5%E6%94%B6%E6%8C%87%E5%8D%97/</id>
<published>2024-01-19T04:57:06.000Z</published>
<updated>2024-11-23T13:12:18.438Z</updated>
<content type="html"><![CDATA[<p>短波气象传真是一种通过短波无线电频段传输天气信息的技术。它通过发送特定编码的图像信号,包括气象图、天气预报、海洋气象等,使接收者能够获取到实时的气象数据。短波气象传真广泛应用于航海、航空、军事、科学研究等领域,特别是在远离陆地的地区或通信网络不稳定的地方。</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191246162.png" alt="接收日本JMH气象传真"></p><p>在网络通信不发达的年代,一些远洋航船会配备气象传真接收机(当然现在也有),靠接收海岸台的气象传真图来分析预测海上天气情况。虽然现在信息技术发达,获取海上天气信息不困难,但是在某些特殊的情况下,短波气象传真仍然能发挥很关键的作用。</p><p>设备:支持USB模式的短波电台、收音机、SDR设备…</p><p>软件:<a href="http://www2.plala.or.jp/hikokibiyori/soft/kgfax/index.html">KG-FAX</a>(电脑),<a href="https://www.jvcomm.de/dlframee.html">JVComm32</a>(电脑),HF Weather FAX(手机,PC)</p><p>如果你没有设备也可以用在线SDR(可以直接解码)</p><p><a href="http://rx.linkfanel.net/">http://rx.linkfanel.net/</a></p><p><a href="https://www.receiverbook.de/map">https://www.receiverbook.de/map</a></p><p>资料:</p><ol><li>世界海洋无线传真广播时间表:<a href="http://jump2.bdimg.com/safecheck/index?url=rN3wPs8te/px8ICLA1PGU2t1rq86a3q/MPNkgj4fnOA4vW1A3N4BgHuJz61kgmHnhnoAMddgPYAwtTuNrmg9xbRe0xtPlUJzEOPG/O8jzRhNcVpdor8ZTSnjEhRVN7AFWhjEKoKm7IxcTDmXX0jkYVu8876ofQldwDmCuXSqH1IN0JW7pjPTVTA8Zu4mdgY0">https://c.ibcl.us/JMHWeather-Fax_20180706/rfax.pdf</a></li><li>JMH的播报时间表 <a href="http://jump2.bdimg.com/safecheck/index?url=x+Z5mMbGPAs4HtWJxmvDU6ERvpJwpyO+1MstWQ3FdpvDwFAHvIyDDPcTDOMYcNvBI/k5TeUqrqK1AxOp1yqEBbRe0xtPlUJzEOPG/O8jzRhNcVpdor8ZTSnjEhRVN7AFWhjEKoKm7IxcTDmXX0jkYVu8876ofQldwDmCuXSqH1IN0JW7pjPTVTA8Zu4mdgY0">http://www.jma-net.go.jp/common/177jmh/JMH-ENG.pdf</a></li><li>全球海岸电台:<a href="https://weatherfax.com/">https://weatherfax.com/</a></li></ol><p>频率:</p><p>日本气象JMH:13987.5KHz 7794KHz 3621.5KHz</p><p>(JMH的气象图基本都是北太平洋区域的)</p><p>上海海岸电台XSG:12382KHz 16559KHz 4170KHz 8302KHz</p><p>(XSG的气象图是中国东南沿海区域及北太平洋区域的)</p><p>广州海岸台XSQ: 4199.8 KHz 8412.5 KHz 12629.3 KHz 16826.3 KHz</p><p>(暂时未收到过 QAQ )</p><p>这里以日本JMH气象传真为例:</p><p><strong>日本东京气象厅气象无线电传真广播台(JMH)</strong></p><p>以海上船舶为主要服务对象,它不仅提供地面、高空、海洋的各种气象、水文的实况分析资料,而且还提供各种气压形势、气象要素、海面状况及其它物理量的短、中期预报图。由于JMH台广播的气象传真资料种类比较齐全,因此对提高北太平洋区域的天气预报时效和预报服务质量起了很大作用。</p><p><strong>接收模式:USB</strong></p><p><strong>接收频率,接收时间,接收内容:</strong></p><table><thead><tr><th align="center">JMH</th><th align="center">JMH2</th><th align="center">JMH4</th></tr></thead><tbody><tr><td align="center">3621.5kHz</td><td align="center">7794kHz</td><td align="center">13987.5kHz</td></tr></tbody></table><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191240868.png" alt="78d8d789d889b81713c7bdf540f635a0"></p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191241142.png" alt="b61609c85fea1f045be2367e656bf283"></p><p><strong>气象传真图的种类</strong></p><p>种类:气象传真图的内容丰富、种类繁多。航海最常用的气象传真图主要有:</p><p>(1)地面图:地面分析图(AS),地面预报图(FS)</p><p>(2)高空图:高空分析图(AU),高空预报图(FU)</p><p>(常用的高空图—500hPa、700hPa、850hpa)</p><p>(3)波浪图:波浪分析图(AW),波浪预报(FW)</p><p>(4)辅助图:卫星云图(VS-可见光云图;IR-红外云图),海冰图(ST-冰况图,FI-冰况预报图),海流图(SO-海流实况图,FO-海流预报图),海温图(CO-海温分布图,FO-海温预报图),风暴警报图WT等。</p><p><strong>图题内容</strong></p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191246487.png" alt="接收日本JMH气象传真"></p><p>表1—气象传真图图名标题</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191247411.png" alt="接收日本JMH气象传真"></p><p>表2—常用传真图类别代号</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401191247675.png" alt="接收日本JMH气象传真"></p><p>表3—常用传真图区域代号</p><p>参考:</p><p><a href="http://www.qxkj.net.cn/qxkj/article/abstract/19800342">日本东京气象传真图的识别</a></p><p><a href="https://bh8sel.com/5179.html">接收日本JMH气象传真</a></p><p><a href="https://www.bilibili.com/read/cv8263794/">短波气象传真接收方法和心得体会o(^o^)o</a></p><p><a href="https://ibcl.us/archive/JMHWeather-Fax_20180706.html">接收日本JMH气象传真</a></p><p><a href="https://zh.wikipedia.org/wiki/%E6%97%A0%E7%BA%BF%E7%94%B5%E4%BC%A0%E7%9C%9F">无线电传真 - 维基百科,自由的百科全书</a></p>]]></content>
<summary type="html"><p>短波气象传真是一种通过短波无线电频段传输天气信息的技术。它通过发送特定编码的图像信号,包括气象图、天气预报、海洋气象等,使接收者能够获取到实时的气象数据。短波气象传真广泛应用于航海、航空、军事、科学研究等领域,特别是在远离陆地的地区或通信网络不稳定的地方。</p>
<p><</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="业余无线电" scheme="https://blog.quickso.cn/tags/%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5/"/>
<category term="短波" scheme="https://blog.quickso.cn/tags/%E7%9F%AD%E6%B3%A2/"/>
<category term="气象" scheme="https://blog.quickso.cn/tags/%E6%B0%94%E8%B1%A1/"/>
</entry>
<entry>
<title>用树莓派搭建自己的FM电台并进行直播</title>
<link href="https://blog.quickso.cn/2024/01/14/%E7%94%A8%E6%A0%91%E8%8E%93%E6%B4%BE%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84FM%E7%94%B5%E5%8F%B0%E5%B9%B6%E8%BF%9B%E8%A1%8C%E7%9B%B4%E6%92%AD/"/>
<id>https://blog.quickso.cn/2024/01/14/%E7%94%A8%E6%A0%91%E8%8E%93%E6%B4%BE%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84FM%E7%94%B5%E5%8F%B0%E5%B9%B6%E8%BF%9B%E8%A1%8C%E7%9B%B4%E6%92%AD/</id>
<published>2024-01-14T06:50:50.000Z</published>
<updated>2024-11-23T13:12:18.436Z</updated>
<content type="html"><![CDATA[<blockquote><p>进行操作前首先请先备份树莓派数据,防止操作过程中出现的问题导致数据丢失!<br>连接杜邦线的长度不宜过长,防止发射范围超过法律规定,切勿违犯无线电管理条例!<br>操作过程中会设置force_turbo=1强制超频将使得树莓派官方保修失效!请考虑好再进行操作。</p></blockquote><h2 id="《中华人民共和国无线电管理条例》"><a href="#《中华人民共和国无线电管理条例》" class="headerlink" title="《中华人民共和国无线电管理条例》"></a><a href="https://www.gov.cn/zhengce/content/2016-11/25/content_5137687.htm">《中华人民共和国无线电管理条例》</a></h2><p>早就听说过树莓派能够发射广播信号,奈何当时没有树莓派,无法进行尝试。</p><p>现在有了一个树莓派3B,可以玩了~</p><p>接下来教你如何用树莓派搭建一个自己的FM电台并发射直播信号进行直播</p><p>所需要的材料:电脑一台、树莓派(看适配列表)一个,杜邦线一条(选配,也可以用铜线、铜丝代替),收音机一台(或者有FM收音功能的设备,比如手机,对讲机,电台)</p><p>主要用到的软件:rpitx。它可以让树莓派发射5 KHz到1500 MHz之间的广播信号。</p><p><a href="https://github.com/F5OEO/rpitx">https://github.com/F5OEO/rpitx</a></p><p>除此之外你还可以用</p><p><a href="https://github.com/ChristopheJacquet/PiFmRds">https://github.com/ChristopheJacquet/PiFmRds</a></p><p><a href="https://github.com/markondej/fm_transmitter">https://github.com/markondej/fm_transmitter</a></p><p>适配列表</p><table><thead><tr><th>树莓派型号</th><th align="center">状态</th></tr></thead><tbody><tr><td>Pizero</td><td align="center">OK</td></tr><tr><td>PizeroW</td><td align="center">OK</td></tr><tr><td>PiA+</td><td align="center">OK</td></tr><tr><td>PiB</td><td align="center">部分</td></tr><tr><td>PiB+</td><td align="center">OK</td></tr><tr><td>P2B</td><td align="center">OK</td></tr><tr><td>Pi3B</td><td align="center">OK</td></tr><tr><td>Pi3B+</td><td align="center">OK</td></tr><tr><td>Pi4</td><td align="center">测试</td></tr></tbody></table><p>注:切勿在没有带通滤波器的情况下使用天线传输</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141557337.png" alt="img"></p><h2 id="安装rpitx"><a href="#安装rpitx" class="headerlink" title="安装rpitx"></a>安装rpitx</h2><p>实测在<a href="https://downloads.raspberrypi.org/">Raspberry Pi OS 64位</a>版本上安装成功并能正常运行。</p><ol><li>先更新树莓派上的软件包:<code>sudo apt update</code></li><li>之后安装Git: <code>sudo apt install git</code></li></ol><p>注:rpitx软件源在Github,国内直接访问可能有些许困难,安装过程也需要一直连接Github安装依赖。因此安装好Git后建议提前给树莓派上的Git配置好代理,可以保证之后的安装比较顺利。搜索关键字:Git 配置代理</p><ol><li><p>cd到合适的位置(有权限的位置),拉取rpitx在Github的代码:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> https://github.com/F5OEO/rpitx<br></code></pre></td></tr></table></figure></li><li><p>进入rpitx文件夹:<code>cd rpitx</code></p></li><li><p>安装rpitx:<code>./install.sh</code></p></li></ol><p>之后就是漫长的安装过程了,中间会有一些报错,但是只要安装没有停下来就问题不大。</p><p>在安装最后,会提示是否允许修改 <code>/boot/config.txt</code>,这一步要求我们将GPU的频率锁定在250Mhz,并设置 <code>force_turbo=1</code>强制超频。 <strong>注意!设置 <code>force_turbo=1</code>强制超频将使得树莓派保修失效。</strong> 输入y并回车,之后重启树莓派即可。(不要修改 <code>config.txt</code>文件)</p><h2 id="rpitx测试"><a href="#rpitx测试" class="headerlink" title="rpitx测试"></a>rpitx测试</h2><p>现在让我们测试一下是否正确安装了rpitx。如果你的树莓派有金属保护壳的话,将保护壳拿下来,把树莓派暴露出来,否则收音机收不到足够的信号。</p><ol><li>先进入rpitx目录:<code>cd rpitx</code></li><li>然后输入rpitx自带的测试命令:<code>./easytest.sh</code></li><li>输入命令之后窗口会变成蓝色,首先需要输入发射的频率,我国FM收音机的能接受的频率在87.5~108之间,输入一个这段频率之间的、你本地没有其他电台占用的频率,回车即可。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141555065.png" alt="选择频率"></li><li>之后就进入选择发射方式的菜单了,按方向键选择“FmRds”的选项,按回车键确认。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141555703.png" alt="选择发射方式"></li><li>屏幕上就会显示出下面的界面,拿出收音机,调到刚刚输入的频率,试着听一下,是不是有一段男声播报”Pi FmFds”的测试语音啦?按空格键可以返回上层菜单,再按ESC键退出测试。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141555768.png" alt="正在发射"></li></ol><p>如果只持续了几秒,信号就断了,可以执行</p><figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs armasm"><span class="hljs-symbol">sudo</span> rmmod <span class="hljs-built_in">w1</span>-gpio<br></code></pre></td></tr></table></figure><p>但是这样发射的范围特别近,收音机离开树莓派一两米就没有信号了。这时候就可以拿出杜邦线,插在树莓派的GPIO 4引脚(图中7号引脚)实测加一段十几厘米的线能将发射范围拓展到两三间屋子,加到半米左右能覆盖大半层宿舍楼。但是要注意,范围不要太大,否则可能就违反无线电相关的法律条例了。</p><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141555459.png" alt="树莓派引脚"></p><h2 id="使用rpitx播放音乐"><a href="#使用rpitx播放音乐" class="headerlink" title="使用rpitx播放音乐"></a>使用rpitx播放音乐</h2><p>rpitx支持直接播放WAV格式的音频,命令如下:</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs perl">sudo ./pifmrds -fre<span class="hljs-string">q [frequency]</span> -audio [filename.wav] <br></code></pre></td></tr></table></figure><p>比如你要在88.0MHZ进行发射,播放根目录下的music.wav文件,就可以输入命令:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> ./pifmrds -freq 88.0 -audio /music.wav <br></code></pre></td></tr></table></figure><p>但是如果音乐的格式是MP3格式或者是其他格式呢?当然是可以事先转换成WAV格式的音频的,但这样太麻烦了。这时候就可以请出音频处理的瑞士军刀——sox了。</p><p>先安装sox,直接从包管理器中安装就可以:<code>sudo apt install sox libsox-fmt-all</code></p><p>安装完成后就可以使用如下的命令来实时转换MP3文件到WAV文件进行播放了,其中的”-“就是大名鼎鼎的Linux管道符了:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sox -t [format] [filename] -t wav - | <span class="hljs-built_in">sudo</span> ./pifmrds -freq XX -audio - <br></code></pre></td></tr></table></figure><p>比如你要在88.0MHZ进行发射,播放根目录下的music.mp3文件,就可以输入命令:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sox -t mp3 /music.mp3 -t wav - | <span class="hljs-built_in">sudo</span> ./pifmrds -freq 88.0 -audio /music.wav <br></code></pre></td></tr></table></figure><p>播放的MP3文件不一定是本地的,网络上的MP3文件或者MP3的直播源(流)也是可以的,比如可以用sox+rpitx的组合发射法广或俄罗斯卫星广播电台的直播节目:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">sox -t mp3 https://rfienchinois64k.ice.infomaniak.ch/rfienchinois-64.mp3 -t wav - | <span class="hljs-built_in">sudo</span> ./pifmrds -freq 80 -audio -sox -t mp3 http://icecast-ruvr.cdnvideo.ru/rian.voicechi -t wav - | <span class="hljs-built_in">sudo</span> ./pifmrds -freq 80 -audio - <br></code></pre></td></tr></table></figure><h2 id="使用rpitx播放网络串流"><a href="#使用rpitx播放网络串流" class="headerlink" title="使用rpitx播放网络串流"></a>使用rpitx播放网络串流</h2><p>上面简单提到了如何使用sox配合rpitx来发射MP3,并且可以直播发射一小部分格式为MP3音频流的直播串流。但是很多串流是M3U8格式的,并不是MP3音频流。这个时候可以请出来Linux上(Windows上也是啊Kora)的播放神器——VLC。</p><p>下面的步骤最好是先为树莓派设置VNC连接或Xrdp远程桌面连接,连接到树莓派的图形化界面上,操作会更加方便些。这里推荐这篇文章,可以作为参考:<a href="https://raspberrypi.club/322.html">如何在 Raspberry Pi 上安装 Xrdp Server (远程桌面) - 树莓派俱乐部</a></p><ol><li>使用VNC或远程桌面连接到树莓派。</li><li>先安装VLC,可以用apt命令行安装,也可以用图形化界面下的包管理器进行安装。</li><li>打开VLC,选择媒体菜单中的“流”并进入“打开媒体”对话框。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141555388.png" alt="VLC"></li><li>选择“网络”选项卡,在输入框中输入M3U8源地址,之后点击“串流”按钮,弹出“流输出”对话框。弹出的新对话框中,第一个“下一个”按钮直接点击即可。</li><li>在此之后的菜单中选择”HTTP”这一选项,点击”添加”按钮。之后的端口号和路径可以不进行修改(当然端口号如果被占用了当然要进行修改,下面的命令中也要同步修改),直接下一步即可。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556484.png" alt="流输出对话框"></li><li>之后保持默认设置,配置文件为”Audio - MP3”,直接下一步,然后再点击”流”按钮,VLC这一部分就完成了。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556410.png" alt="流输出对话框2"></li><li>再使用sox+rpitx的组合拳,把串流直播出来:</li></ol><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">sox</span> -t mp3 http://<span class="hljs-number">127.0.0.1:8080</span>/ -t wav - | sudo ./pifmrds -freq <span class="hljs-number">80</span> -audio - <br></code></pre></td></tr></table></figure><p><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556855.png" alt="直播成功"></p><p>(上图中我换了一个端口号,因为8080被占用了.)现在打开收音机,听一听,是不是能听到清晰的直播节目了?</p><h2 id="采集树莓派系统声音-并使用rpitx实时发射"><a href="#采集树莓派系统声音-并使用rpitx实时发射" class="headerlink" title="采集树莓派系统声音 并使用rpitx实时发射"></a>采集树莓派系统声音 并使用rpitx实时发射</h2><p>下面将会简单介绍,如何采集树莓派系统声音,并使用rpitx实时发射。不管是在树莓派中打开音乐播放器播放的音乐,还是打开视频播放器播放视频的声音,还是浏览网页上网页的声音,都可以被实时采集并通过rpitx发射出去。</p><ol><li>先查看一下可以捕捉的声卡,使用命令:<code>pacmd list | grep ".monitor"</code>。如果命令行返回的是”没有 PulseAudio 守护进程在运行,或者没有作为会话守护进程运行“或者是相同含义的英语,那么就先执行一下 <code>pulseaudio --start &</code>,启动一下PulseAudio 守护进程,再重新执行这条命令。正常返回的截图如下,将画红线部分的monitor name复制下来备用,不同系统版本的树莓派可能会有一些差异:<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556084.png" alt="获取monitor name"></li><li>进入rpitx文件夹,输入命令:</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs perl">pacat --record -d [monitor_name] | sox -t raw -b <span class="hljs-number">16</span> -c <span class="hljs-number">2</span> -v <span class="hljs-number">1</span> -r <span class="hljs-number">44100</span> -L -e signed-integer - -t wav - | sudo ./pifmrds -fre<span class="hljs-string">q [frequency]</span> -audio - <br></code></pre></td></tr></table></figure><p>简单解释一下这一句长长的命令:其中,<code>[monitor_name]</code>就是第一步中我们得到的 <code>monitor name</code>,<code>[frequency]</code>是你想要发射的频率。sox命令后所跟的参数,-b代表采样的比特位数,-c代表声道的个数,-v代表转换音量的大小,-r代表采样率的多少。前面的-t代表是从raw格式进行转换,后面的-t代表转换成wav格式。当时研究出这条命令,花费了我足足半天的时间呢……</p><p>本文的标题里面还有一句“并进行直播”,这一部分就是对直播的简单实践。当然要直播自己的声音,或者直播其他设备上的声音,理论上也是可行的。有两种方案:</p><ol><li>购买一个USB声卡,安装好USB声卡的驱动后,连接好麦克风或者AUX输入,再从树莓派端进行采集和捕获。(推荐)</li><li>建立一个局域网内的直播服务器,使用其他设备进行收音并推流刀直播服务器,从树莓派上拉流进行直播。</li></ol><h2 id="模拟输入-采集其他设备的音频输出进行发射"><a href="#模拟输入-采集其他设备的音频输出进行发射" class="headerlink" title="模拟输入 采集其他设备的音频输出进行发射"></a>模拟输入 采集其他设备的音频输出进行发射</h2><ol><li>先查询一下当前系统中的声音输入设备:<code>pacmd list | grep "input"</code> 可以看到,有一个名叫 <code>alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.mono-fallback</code>的设备。复制设备的设备名称备用。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556054.jpg" alt="input"></li><li>cd到rpitx的目录,执行上面提到的输出命令:</li></ol><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">pacat</span> --record -d alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-<span class="hljs-number">00</span>.mono-fallback | sox -t raw -b <span class="hljs-number">16</span> -c <span class="hljs-number">2</span> -v <span class="hljs-number">1</span> -r <span class="hljs-number">44100</span> -L -e signed-integer - -t wav - | sudo ./pifmrds -freq <span class="hljs-number">100</span>.<span class="hljs-number">3</span> -audio - <br></code></pre></td></tr></table></figure><p>打开收音机,调整到正确的频率上,是不是能听到输出设备中的声音啦?部分输出设备的音量要调大一些才能取得不错的效果。另外根据声卡的好坏,会有些许延迟,这是正常情况。到此,用树莓派搭建自己的FM电台并进行直播这一终极目标终于实现,我们可以利用树莓派发射自己喜欢的节目咯。</p><h2 id="利用蓝牙-将其他设备的声音传送到树莓派上发射"><a href="#利用蓝牙-将其他设备的声音传送到树莓派上发射" class="headerlink" title="利用蓝牙 将其他设备的声音传送到树莓派上发射"></a>利用蓝牙 将其他设备的声音传送到树莓派上发射</h2><p>要想让其他设备能连接上树莓派,并且将音频信号传送给树莓派,首先得让其他设备认为树莓派是音频设备(比如蓝牙耳机),这样才能将音频输出切换到树莓派上,并自然的传送音频信号给树莓派进行发射了。实测可以将Android、IOS和Linux设备上的声音通过蓝牙传送到树莓派上,而Windows则提示“耳机已拔出”,一直没能成功。</p><ol><li>在树莓派上运行命令 <code>sudo hciconfig hci0 up</code> 打开树莓派的蓝牙。</li><li>执行命令 <code>sudo hciconfig hci0 class 0x200420</code> 这一步是将树莓派的蓝牙属性改为“音频设备”,这样就能让其他设备将树莓派识别成音频设备,乖乖的把音频流往树莓派上传送了。</li><li>执行命令 <code>hciconfig -a</code>,看看树莓派的蓝牙属性是否成功被修改了。没有成功的话,反复开关蓝牙,多尝试几次。正常的显示如下图:<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556177.png" alt="树莓派显示"></li><li>进入树莓派桌面环境,蓝牙菜单在桌面右上角,开启树莓派和其他设备的蓝牙可发现,将树莓派和其他设备进行配对与连接。</li><li>连接成功,其他设备就能向树莓派传送音频啦!如下图。这时,在其他设备上随便播放一段音乐或者视频。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556801.png" alt="音频输出"></li><li>查询一下当前树莓派中的声音输入设备:<code>pacmd list | grep "a2dp_source"</code> 可以看到,有一个名叫 <code>bluez_source.XX_XX_XX_XX_XX_XX.a2dp_source</code>的设备,具体名称跟其他设备的蓝牙MAC地址有关。复制设备的设备名称备用。<br><img src="https://gcore.jsdelivr.net/gh/muzihuaner/huancdn@main/img/202401141556472.png" alt="树莓派显示"></li><li>cd到rpitx的目录,执行上面提到的输出命令:</li></ol><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">pacat</span> --record -d abluez_source.XX_XX_XX_XX_XX_XX.a2dp_source | sox -t raw -b <span class="hljs-number">16</span> -c <span class="hljs-number">2</span> -v <span class="hljs-number">1</span> -r <span class="hljs-number">44100</span> -L -e signed-integer - -t wav - | sudo ./pifmrds -freq <span class="hljs-number">100</span>.<span class="hljs-number">3</span> -audio - <br></code></pre></td></tr></table></figure><p>打开收音机,调整到正确的频率上,是不是能听到输出设备中的声音啦?</p><p>但是有一点不太好,其他设备上的音乐或者视频一旦暂停,就会停止向树莓派输出音频流,我们的发射也随之戛然而止。也就是只要一小会没有进程使用音频输出,其他设备就会暂停向树莓派输出音频流。怎么办呢?</p><p>让某个进程一直循环播放一段无声音频不就行了吗?没有其他进程播放音乐时,是一直占用着音频通道,因此就不会暂停输出音频流;当其他应用想要播放音频时,这个“守护进程”又没有声音,所以也不会影响到其他进程播放声音进行发射。当即用OBS录制了一段无声音频,效果杠杠的!这样,利用蓝牙,将其他设备的声音传送到树莓派上发射就完美了。</p><p>当然除此之外,rpitx还可以发射其他信号</p><h3 id="载波"><a href="#载波" class="headerlink" title="载波"></a>载波</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/Tunerpitx.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/Tunerpitx.png" alt="Carrier"></a> 一段产生于 434MHZ 的简单载波。</p><h3 id="啁啾"><a href="#啁啾" class="headerlink" title="啁啾"></a>啁啾</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/chirprpitx.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/chirprpitx.png" alt="Chirp"></a> 一段围绕434MHZ移动的载波。</p><h3 id="波谱"><a href="#波谱" class="headerlink" title="波谱"></a>波谱</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/spectrumrpitx.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/spectrumrpitx.png" alt="Spectrum"></a> SDR 上的瀑布上会显示一张图片。 请注意,您应该根据您的接收情况和您使用的 SDR 软件进行一些调整,以获得正确的对比度和尺寸。</p><h3 id="射频我的脸"><a href="#射频我的脸" class="headerlink" title="射频我的脸"></a>射频我的脸</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/rfmyface.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/rfmyface.png" alt="Rfmyface"></a> 使用 raspicam 对您的脸部进行波谱绘画,乐趣无穷!</p><h3 id="FM广播"><a href="#FM广播" class="headerlink" title="FM广播"></a>FM广播</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/fmrds.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/fmrds.png" alt="FMRDS"></a> 使用 RDS 广播 FM。 您可以通过 SDR 收到它。 这是可以在调频收音机或接收器上听到的调制,但这里频率太高。</p><h3 id="SSB单边带"><a href="#SSB单边带" class="headerlink" title="SSB单边带"></a>SSB单边带</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/ssbrpitx.png"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/ssbrpitx.png" alt="SSB"></a> 这是经典的业余无线电模拟语音调制。 使用 SDR在 USB 模式下。</p><h3 id="SSTV-慢扫描电视"><a href="#SSTV-慢扫描电视" class="headerlink" title="SSTV 慢扫描电视"></a>SSTV 慢扫描电视</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/sstvrpitx.JPG"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/sstvrpitx.JPG" alt="SSTV"></a> 这是一种使用音频调制的图像传输模式(USB模式)。 您需要一个额外的软件来解码和显示它(qsstv,msstv …)。 演示使用sstv的Martin1模式。</p><h3 id="Pocsag(寻呼机模式)"><a href="#Pocsag(寻呼机模式)" class="headerlink" title="Pocsag(寻呼机模式)"></a>Pocsag(寻呼机模式)</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/pocsagrpitx.JPG"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/pocsagrpitx.JPG" alt="pocsag"></a> 这是寻呼机使用的模式。 您需要额外的软件来解码。 将 SDR 设置为 NBFM 模式。</p><h3 id="Freedv(数字语音)"><a href="#Freedv(数字语音)" class="headerlink" title="Freedv(数字语音)"></a>Freedv(数字语音)</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/freedvrpitx.JPG"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/freedvrpitx.JPG" alt="freedv"></a> 这是最先进的开源数字调制。 您需要 Freedv 进行解调。</p><h3 id="Opera-信标台"><a href="#Opera-信标台" class="headerlink" title="Opera (信标台)"></a>Opera (<a href="https://baike.baidu.com/item/%E4%BF%A1%E6%A0%87%E5%8F%B0/5872163">信标台</a>)</h3><p><a href="https://github.com/F5OEO/rpitx/blob/master/doc/operarpitx.JPG"><img src="https://github.com/F5OEO/rpitx/raw/master/doc/operarpitx.JPG" alt="opera"></a> 这是一种听起来像莫尔斯电码的信标模式。 您需要模式 0.5 的 Opera模式 才能解码。</p><p>更多内容 可以看 <a href="">https://github.com/F5OEO/rpitx</a></p><p>参考</p><p><a href="https://blog.xmgspace.me/archives/set-up-fm-station-with-raspberry-pi.html">用树莓派搭建自己的FM电台并进行直播</a></p><p><a href="https://mabbs.github.io/2022/03/27/radio.html">用树莓派自制FM电台</a></p><p><a href="">https://github.com/ChristopheJacquet/PiFmRds/issues/161</a></p>]]></content>
<summary type="html"><blockquote>
<p>进行操作前首先请先备份树莓派数据,防止操作过程中出现的问题导致数据丢失!<br>连接杜邦线的长度不宜过长,防止发射范围超过法律规定,切勿违犯无线电管理条例!<br>操作过程中会设置force_turbo&#x3D;1强制超频将使得树莓派官方保修失效</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="业余无线电" scheme="https://blog.quickso.cn/tags/%E4%B8%9A%E4%BD%99%E6%97%A0%E7%BA%BF%E7%94%B5/"/>
<category term="树莓派" scheme="https://blog.quickso.cn/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
<category term="电台" scheme="https://blog.quickso.cn/tags/%E7%94%B5%E5%8F%B0/"/>
</entry>
<entry>
<title>国内开源镜像站点汇总</title>
<link href="https://blog.quickso.cn/2023/12/30/%E5%9B%BD%E5%86%85%E5%BC%80%E6%BA%90%E9%95%9C%E5%83%8F%E7%AB%99%E7%82%B9%E6%B1%87%E6%80%BB/"/>
<id>https://blog.quickso.cn/2023/12/30/%E5%9B%BD%E5%86%85%E5%BC%80%E6%BA%90%E9%95%9C%E5%83%8F%E7%AB%99%E7%82%B9%E6%B1%87%E6%80%BB/</id>
<published>2023-12-29T17:35:43.000Z</published>
<updated>2024-11-23T13:12:18.432Z</updated>
<content type="html"><![CDATA[<h2 id="一、站点版"><a href="#一、站点版" class="headerlink" title="一、站点版"></a>一、站点版</h2><h3 id="(一)、企业站"><a href="#(一)、企业站" class="headerlink" title="(一)、企业站"></a>(一)、企业站</h3><ol><li>网易:<a href="https://mirrors.163.com/">https://mirrors.163.com/</a></li><li>搜狐:<a href="http://mirrors.sohu.com/">http://mirrors.sohu.com/</a>(Ubuntu旧发行版同步被冻结,不同步Ubuntu新发行版,Ubuntu源同步正常)</li><li>阿里云:<a href="https://mirrors.aliyun.com/">https://mirrors.aliyun.com</a>(部分镜像同步延迟超过1天)</li><li>首都在线科技股份有限公司(英文名Capital Online Data Service):<a href="http://mirrors.yun-idc.com/">http://mirrors.yun-idc.com/</a></li><li>华为云:<a href="https://mirrors.huaweicloud.com/">https://mirrors.huaweicloud.com/</a></li><li>腾讯云:<a href="https://mirrors.cloud.tencent.com/">https://mirrors.cloud.tencent.com/</a></li><li>平安云:<a href="https://mirrors.pinganyun.com/">https://mirrors.pinganyun.com/</a></li></ol><h3 id="(二)、教育站"><a href="#(二)、教育站" class="headerlink" title="(二)、教育站"></a>(二)、教育站</h3><ol><li>中国科技大学:<a href="https://mirrors.ustc.edu.cn/">https://mirrors.ustc.edu.cn/</a>(当前已用容量估计:21.32T)</li><li>清华大学:<a href="https://mirrors.tuna.tsinghua.edu.cn/">https://mirrors.tuna.tsinghua.edu.cn/</a>(当前已用容量估计:9.8T)</li><li>北京外国语大学:<a href="http://mirrors.bfsu.edu.cn/">http://mirrors.bfsu.edu.cn/</a></li><li>北京交通大学:<a href="https://mirror.bjtu.edu.cn/">https://mirror.bjtu.edu.cn/</a></li><li>北京理工大学:<a href="http://mirror.bit.edu.cn/web/">http://mirror.bit.edu.cn/web/</a></li><li>兰州大学:<a href="http://mirror.lzu.edu.cn/">http://mirror.lzu.edu.cn/</a></li><li>上海交通大学:<a href="http://ftp.sjtu.edu.cn/">http://ftp.sjtu.edu.cn/</a>,<a href="ftp://ftp.sjtu.edu.cn/">ftp://ftp.sjtu.edu.cn/</a>(华东南地区教育网出口)</li><li>大连东软信息学院:<a href="http://mirrors.neusoft.edu.cn/">http://mirrors.neusoft.edu.cn/</a>(当前已用容量估计:2.5T)</li><li>浙江大学:<a href="http://mirrors.zju.edu.cn/">http://mirrors.zju.edu.cn/</a></li><li>重庆大学:<a href="http://mirrors.cqu.edu.cn/">http://mirrors.cqu.edu.cn/</a>(当前已用容量估计:3.93T)</li><li>南阳理工学院:<a href="http://mirror.nyist.edu.cn/">http://mirror.nyist.edu.cn/</a></li><li>中科院高能物理研究所:<a href="http://mirror.ihep.ac.cn/">http://mirror.ihep.ac.cn/</a>,<a href="http://mir-cern.ihep.ac.cn/">http://mir-cern.ihep.ac.cn/</a></li><li>电子科技大学凝聚网络安全工作室:<a href="http://mirrors.cnssuestc.org/">http://mirrors.cnssuestc.org/</a></li><li>西北农林科技大学:<a href="https://mirrors.nwafu.edu.cn/">https://mirrors.nwafu.edu.cn/</a>,<a href="https://mirrors.nwsuaf.edu.cn/">https://mirrors.nwsuaf.edu.cn/</a></li><li>郑州大学:<a href="https://mirrors.zzu.edu.cn/">https://mirrors.zzu.edu.cn/</a></li><li>南京信息工程大学:<a href="http://mirrors.duohuo.org/">http://mirrors.duohuo.org/</a></li><li>华中科技大学:<a href="http://mirror.hust.edu.cn/">http://mirror.hust.edu.cn/</a>(华中地区教育网出口,当前已用容量估计:4.83T)</li><li>重庆邮电大学:<a href="http://mirrors.cqupt.edu.cn/">http://mirrors.cqupt.edu.cn/</a><a href="https://mirror.redrock.team/">https://mirror.redrock.team/</a>(当前已用容量估计:1.68T)</li><li>大连理工大学:<a href="http://mirror.dlut.edu.cn/">http://mirror.dlut.edu.cn/</a>(大连地区教育网出口)</li><li>江苏开放大学:<a href="http://mirrors.jstvu.edu.cn/">http://mirrors.jstvu.edu.cn/</a></li><li>山东女子学院:<a href="http://mirrors.sdwu.edu.cn/">http://mirrors.sdwu.edu.cn/</a></li><li>西安交通大学:<a href="https://mirrors.xjtu.edu.cn/">https://mirrors.xjtu.edu.cn/</a>(西北地区教育网出口)</li><li>西安电子科技大学:<a href="https://linux.xidian.edu.cn/mirrors/">https://linux.xidian.edu.cn/mirrors/</a>(镜像仅供校内使用)</li><li>南开大学:<a href="http://ftp.nankai.edu.cn/">http://ftp.nankai.edu.cn/</a>(镜像仅供校内使用)</li><li>天津大学:<a href="http://mirror.tju.edu.cn/">http://mirror.tju.edu.cn</a>(镜像仅供校内使用,另一域名为zyrj.org)</li><li>南京师范大学:<a href="http://mirrors.njnu.edu.cn/">http://mirrors.njnu.edu.cn/</a>(镜像仅供校内使用)</li><li>电子科技大学:<a href="http://ubuntu.uestc.edu.cn/">http://ubuntu.uestc.edu.cn/</a>(西南地区教育网出口西南,首页近一年无人维护,内容可访问)</li><li>中央音乐学院:<a href="http://fundawang.lcuc.org.cn/">http://fundawang.lcuc.org.cn/</a>(镜像仅供校内使用)</li><li>云南大学:<a href="http://mirrors.ynuosa.org/index/">http://mirrors.ynuosa.org/index/</a>(镜像站列表),<a href="http://pypi.opensource.ynu.edu.cn/">http://pypi.opensource.ynu.edu.cn/</a>(收录pypi)</li><li>上海科技大学:<a href="https://mirrors-wan.geekpie.org/">https://mirrors-wan.geekpie.org/</a></li><li>南京信息职业技术学院:<a href="https://mirrors.njcit.cn/">https://mirrors.njcit.cn/</a></li><li>上海交通大学SJTUG: <del><a href="http://mirrors.sjtug.org/">http://mirrors.sjtug.org/</a></del> (已关闭) <a href="https://mirrors.sjtug.sjtu.edu.cn/">https://mirrors.sjtug.sjtu.edu.cn/</a></li><li>南京邮电大学通达学院:<a href="http://mirrors.tdsast.cn/">http://mirrors.tdsast.cn/</a></li><li>燕山大学:<a href="http://mirror.pret-page.com/">http://mirror.pret-page.com/</a></li><li>南京邮电大学:<a href="http://mirrors.njupt.edu.cn/">http://mirrors.njupt.edu.cn/</a></li><li>南京大学:<a href="http://mirrors.nju.edu.cn/">http://mirrors.nju.edu.cn/</a></li><li>上海大学:<a href="https://mirrors.shu.edu.cn/">https://mirrors.shu.edu.cn/</a></li><li>青岛科技大学:<a href="http://mirrors.qust.edu.cn/">http://mirrors.qust.edu.cn/</a>(镜像仅供校内使用)</li><li>同济大学:<a href="https://mirrors.tongji.edu.cn/">https://mirrors.tongji.edu.cn/</a></li><li>华南农业大学:<a href="https://mirrors.scau.edu.cn/">https://mirrors.scau.edu.cn/</a></li><li>东莞理工学院:<a href="https://mirrors.dgut.edu.cn/">https://mirrors.dgut.edu.cn/</a></li><li>哈尔滨工业大学:<a href="http://run.hit.edu.cn/html/">http://run.hit.edu.cn/html/</a></li></ol><h3 id="(三)、其他"><a href="#(三)、其他" class="headerlink" title="(三)、其他"></a>(三)、其他</h3><ol><li>中国电信天翼云:<a href="http://mirrors.ctyun.cn/">http://mirrors.ctyun.cn/</a></li><li>常州贝特康姆软件技术有限公司(公云PubYun):<a href="http://centos.bitcomm.cn/">http://centos.bitcomm.cn/</a>,<a href="http://mirrors.pubyun.com/">http://mirrors.pubyun.com/</a>(当前已用容量估计:2.3T)</li><li>开源镜像文件搜索:<a href="http://mirrors.org.cn/">http://mirrors.org.cn/</a>(只能搜索和浏览,不能下载)</li><li>Linux运维派:<a href="https://mirrors.skyshe.cn/">https://mirrors.skyshe.cn/</a>(使用阿里云服务器,界面使用浙江大学的模板,首页维护,内容可访问)</li><li>北京鹏博士宽带:<a href="http://mirrors.btte.net/">http://mirrors.btte.net/</a>(只收录CentOS)</li><li>Fayea工作室:<a href="http://apache.fayea.com/">http://apache.fayea.com/</a>(只收录Apache镜像,当前已用容量估计:120GB)</li><li>豆瓣pypi:<a href="http://pypi.doubanio.com/">http://pypi.doubanio.com/</a>,<a href="https://pypi.doubanio.com/">https://pypi.doubanio.com/</a></li><li>v2ex的pypi:<a href="http://pypi.v2ex.com/">http://pypi.v2ex.com/</a>(首页有https异常NET::ERR_CERT_COMMON_NAME_INVALID)</li><li>淘宝NPM:<a href="https://npm.taobao.org/">https://npm.taobao.org/</a></li><li>Ruby China的RubyGems:<a href="https://gems.ruby-china.org/">https://gems.ruby-china.org/</a></li><li>淘宝TAEMaven仓库镜像:<a href="http://mvnrepo.tae.taobao.com/content/groups/public/">http://mvnrepo.tae.taobao.com/content/groups/public/</a></li><li>阿里云Maven仓库镜像:<a href="http://maven.aliyun.com/nexus/content/groups/public">http://maven.aliyun.com/nexus/content/groups/public</a></li><li>阿里云Jcenter仓库镜像:<a href="http://maven.aliyun.com/nexus/content/repositories/jcenter/">http://maven.aliyun.com/nexus/content/repositories/jcenter/</a></li><li>LinuxEye:<a href="http://mirrors.linuxeye.com/">http://mirrors.linuxeye.com/</a></li><li>移动云镜像站:<a href="http://mirrors.bclinux.org/">http://mirrors.bclinux.org/</a></li><li>Cloud-Stack镜像站:<a href="http://mirrors.cloudstack-china.com/">http://mirrors.cloudstack-china.com/</a></li><li>cn99(常州贝特康姆旗下):<a href="http://mirrors.cn99.com/">http://mirrors.cn99.com/</a></li><li>龙芯开源社区:<a href="http://mirrors.loongnix.org/">http://mirrors.loongnix.org/</a>(只收录龙芯镜像)</li><li>黔东南开源镜像站:<a href="https://mirrors.gzqdn.org/">https://mirrors.gzqdn.org/</a>(https证书过期,没有设置定时更新脚本)</li><li>联创团队:<a href="https://mirrors.hustunique.com/">https://mirrors.hustunique.com/</a></li><li>英荔教育:<a href="https://mirrors.e-ducation.cn/">https://mirrors.e-ducation.cn/</a></li></ol><h3 id="(四)、确认关闭的镜像站"><a href="#(四)、确认关闭的镜像站" class="headerlink" title="(四)、确认关闭的镜像站"></a>(四)、确认关闭的镜像站</h3><ol><li>北京航空航天大学:<a href="http://mirror.buaa.edu.cn/">http://mirror.buaa.edu.cn/</a>,<a href="http://mirror.buaabt.cn/">http://mirror.buaabt.cn/</a>(2012年建立,2014年关闭。镜像站关闭后不久,未来花园BT关闭。)</li><li>青岛大学:<a href="http://mirror.qdu.edu.cn/">http://mirror.qdu.edu.cn/</a>,<a href="https://mirror.osqdu.org/">https://mirror.osqdu.org/</a>(2009年建立,2012年关闭,OSQDU主要管理人员无法继续维护)</li><li>炼数成金Apache镜像:<a href="http://apache.dataguru.cn/">http://apache.dataguru.cn/</a>(2016年关闭)</li><li>猫扑Apache镜像:<a href="http://labs.mop.com/apache-mirror/">http://labs.mop.com/apache-mirror/</a>(2016年关闭)</li><li>人人网Apache镜像:<a href="http://labs.renren.com/apache-mirror/">http://labs.renren.com/apache-mirror/</a>(2016年关闭)</li><li>开源中国社区:<a href="http://mirrors.oss.org.cn/">http://mirrors.oss.org.cn/</a>,<a href="http://mirrors.oschina.net/">http://mirrors.oschina.net/</a>(2015年关闭)</li><li>希网网络cn99:<a href="http://ubuntu.cn99.com/">http://ubuntu.cn99.com/</a>(域名CNAME跳转到网易镜像,2016年9月重建)</li><li>ZMX - IT技术交流论坛:<a href="http://mirrors.itzmx.com/">http://mirrors.itzmx.com/</a>(域名跳转到清华镜像)</li><li>中国科学院:<a href="http://www.opencas.org/mirrors/">http://www.opencas.org/mirrors/</a>(2016年5月关闭)</li><li>电子科技大学LUG镜像:<a href="http://mirrors.uestc.xyz/">http://mirrors.uestc.xyz/</a>(2016年4月关闭)</li><li>北京邮电大学:<a href="ftp://ftp.bupt.edu.cn/pub/mirror/">ftp://ftp.bupt.edu.cn/pub/mirror/</a>(2016年9月关闭,清空FTP)</li><li>西南大学:<a href="http://mirrors.linuxstory.org/">http://mirrors.linuxstory.org/</a>,<a href="http://mirrors.swu.edu.cn/">http://mirrors.swu.edu.cn/</a>(2016年6月关闭)</li><li>电子科技大学星辰工作室:<a href="http://mirrors.stuhome.net/">http://mirrors.stuhome.net/</a>(2016年8月关闭)</li><li>noc.im:<a href="http://mirrors.noc.im/">http://mirrors.noc.im/</a>(2016年8月关闭)</li><li>LUPA:<a href="http://mirror.lupaworld.com/">http://mirror.lupaworld.com/</a>(2016年停止同步,无实质内容)</li><li>远景:<a href="http://mirror.pcbeta.com/">http://mirror.pcbeta.com/</a>(2016年6月关闭)</li><li>山东理工大学:<a href="http://ruby.sdutlinux.org/">http://ruby.sdutlinux.org/</a>(2016年9月关闭)</li><li>新浪:<a href="http://mirrors.sina.cn/">http://mirrors.sina.cn/</a>,<a href="http://mirrors.sina.com/">http://mirrors.sina.com/</a>(只收录CentOS,2015年3月上线,2016年10月关闭)</li><li>中国地质大学:<a href="http://mirrors.cug.edu.cn/">http://mirrors.cug.edu.cn/</a>(2016年11月关闭)</li><li>北京化工大学:<a href="http://ubuntu.buct.edu.cn/">http://ubuntu.buct.edu.cn/</a>(2016年11月关闭)</li><li>中国互联网络信息中心:<a href="http://mirrors.cnnic.cn/">http://mirrors.cnnic.cn/</a>(只收录Apache镜像,2017年4月关闭,重定向到清华大学)</li><li>腾讯Bugly:<a href="http://android-mirror.bugly.qq.com:8080/">http://android-mirror.bugly.qq.com:8080/</a>(只收录Apache镜像,2017年4月关闭)</li><li>海波网络镜像:<a href="http://mirrors.hypo.cn/">http://mirrors.hypo.cn/</a>(2017年5月关闭)</li><li>吉林大学:<a href="http://mirrors.jlu.edu.cn/">http://mirrors.jlu.edu.cn/</a>(2017年10月关闭)</li><li>厦门大学:<a href="http://mirrors.xmu.edu.cn/">http://mirrors.xmu.edu.cn/</a>(无实质内容)</li><li>中山大学:<a href="http://mirror.sysu.edu.cn/">http://mirror.sysu.edu.cn/</a>(无法访问)</li><li>东北大学:<a href="http://mirror.neu.edu.cn/">http://mirror.neu.edu.cn/</a>(2017年后接近无人维护状态)</li></ol><h2 id="二、软件版"><a href="#二、软件版" class="headerlink" title="二、软件版"></a>二、软件版</h2><h3 id="(一)、操作系统类"><a href="#(一)、操作系统类" class="headerlink" title="(一)、操作系统类"></a>(一)、操作系统类</h3><ol><li>Ubuntu<ul><li>网易:<a href="http://mirrors.163.com/ubuntu-releases/">http://mirrors.163.com/ubuntu-releases/</a></li><li>首都在线科技股份有限公司:<a href="http://mirrors.yun-idc.com/ubuntu-releases/">http://mirrors.yun-idc.com/ubuntu-releases/</a></li><li>阿里云:<a href="http://mirrors.aliyun.com/ubuntu-releases/">http://mirrors.aliyun.com/ubuntu-releases/</a></li></ul></li><li>Centos<ul><li>网易:<a href="http://mirrors.163.com/centos/">http://mirrors.163.com/centos/</a></li><li>搜狐:<a href="http://mirrors.sohu.com/centos/">http://mirrors.sohu.com/centos/</a></li><li>阿里云:<a href="http://mirrors.aliyun.com/centos/">http://mirrors.aliyun.com/centos/</a></li></ul></li><li>Centos-vault (Centos的旧发行版源)<ul><li>阿里云:<a href="http://mirrors.aliyun.com/centos-vault/">http://mirrors.aliyun.com/centos-vault/</a></li><li>清华大学:<a href="https://mirror.tuna.tsinghua.edu.cn/centos-vault/">https://mirror.tuna.tsinghua.edu.cn/centos-vault/</a></li><li>南京大学:<a href="http://mirrors.nju.edu.cn/centos-vault/">http://mirrors.nju.edu.cn/centos-vault/</a></li></ul></li><li>树莓派Raspbian<ul><li>搜狐:<a href="http://mirrors.sohu.com/raspbian/">http://mirrors.sohu.com/raspbian/</a></li><li>中国科技大学:<a href="http://mirrors.ustc.edu.cn/raspbian/">http://mirrors.ustc.edu.cn/raspbian/</a></li><li>浙江大学:<a href="http://mirrors.zju.edu.cn/raspbian/">http://mirrors.zju.edu.cn/raspbian/</a></li><li>重庆大学:<a href="http://mirrors.cqu.edu.cn/raspbian/">http://mirrors.cqu.edu.cn/raspbian/</a></li><li>郑州大学:<a href="http://mirrors.zzu.edu.cn/raspbian/">http://mirrors.zzu.edu.cn/raspbian/</a></li><li>吉林大学:<a href="http://mirrors.jlu.edu.cn/raspbian/">http://mirrors.jlu.edu.cn/raspbian/</a></li></ul></li></ol><h3 id="(二)、服务器类"><a href="#(二)、服务器类" class="headerlink" title="(二)、服务器类"></a>(二)、服务器类</h3><ol><li>Tomcat、Apache<ul><li>清华大学:<a href="https://mirrors.tuna.tsinghua.edu.cn/apache/">https://mirrors.tuna.tsinghua.edu.cn/apache/</a></li><li>北京理工大学:<a href="http://mirror.bit.edu.cn/apache/">http://mirror.bit.edu.cn/apache/</a></li></ul></li><li>Nginx<ul><li>搜狐:<a href="http://mirrors.sohu.com/nginx/">http://mirrors.sohu.com/nginx/</a></li></ul></li><li>MySQL<ul><li>网易163:<a href="http://mirrors.163.com/mysql/Downloads/">http://mirrors.163.com/mysql/Downloads/</a></li><li>搜狐:<a href="http://mirrors.sohu.com/mysql/">http://mirrors.sohu.com/mysql/</a></li><li>USTC:<a href="http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/">http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/</a></li><li>北京理工大学:<a href="http://mirror.bit.edu.cn/mysql/Downloads/">http://mirror.bit.edu.cn/mysql/Downloads/</a></li><li>中国电信天翼云:<a href="http://mirrors.ctyun.cn/Mysql/">http://mirrors.ctyun.cn/Mysql/</a></li></ul></li><li>PostgreSQL<ul><li>浙江大学:<a href="http://mirrors.zju.edu.cn/postgresql/">http://mirrors.zju.edu.cn/postgresql/</a></li></ul></li><li>MariaDB<ul><li>中国电信天翼云:<a href="http://mirrors.ctyun.cn/MariaDB/">http://mirrors.ctyun.cn/MariaDB/</a></li></ul></li><li>mongodb<ul><li>阿里云:<a href="http://mirrors.aliyun.com/mongodb/">http://mirrors.aliyun.com/mongodb/</a></li><li>清华大学:<a href="https://mirrors.tuna.tsinghua.edu.cn/mongodb/">https://mirrors.tuna.tsinghua.edu.cn/mongodb/</a></li></ul></li><li>VideoLAN<ul><li>大连东软信息学院:<a href="http://mirrors.neusoft.edu.cn/videolan/">http://mirrors.neusoft.edu.cn/videolan/</a></li><li>中国科技大学:<a href="http://mirrors.ustc.edu.cn/videolan-ftp/">http://mirrors.ustc.edu.cn/videolan-ftp/</a></li></ul></li></ol><h3 id="(三)、开发工具类"><a href="#(三)、开发工具类" class="headerlink" title="(三)、开发工具类"></a>(三)、开发工具类</h3><ol><li><p>eclipse</p><ul><li>大连东软信息学院:<a href="http://mirrors.neusoft.edu.cn/eclipse/technology/epp/downloads/release/">http://mirrors.neusoft.edu.cn/eclipse/technology/epp/downloads/release/</a>(推荐,维护及时)</li><li>中国科技大学:<a href="http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/">http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/</a></li><li>北京理工大学:<a href="http://mirror.bit.edu.cn/eclipse/technology/epp/downloads/release/">http://mirror.bit.edu.cn/eclipse/technology/epp/downloads/release/</a></li></ul></li><li><p>安卓SDK</p><ul><li>大连东软信息学院:<a href="http://mirrors.neusoft.edu.cn/android/repository/">http://mirrors.neusoft.edu.cn/android/repository/</a></li><li>郑州大学:<a href="http://mirrors.zzu.edu.cn/android/repository/">http://mirrors.zzu.edu.cn/android/repository/</a>(2016年4月停止同步,2016年10月重新同步)</li><li>南阳理工学院:<a href="http://mirror.nyist.edu.cn/android/repository/">http://mirror.nyist.edu.cn/android/repository/</a>(停止同步)</li></ul></li><li><p>安卓源码AOSP</p><ul><li>清华大学:<a href="https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/">https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/</a></li><li>中国科技大学:<a href="https://lug.ustc.edu.cn/wiki/mirrors/help/aosp">https://lug.ustc.edu.cn/wiki/mirrors/help/aosp</a></li></ul></li><li><p>Docker Hub</p><ul><li>网易蜂巢:<a href="https://c.163.com/#/m/home/">https://c.163.com/#/m/home/</a></li><li>灵雀云:<a href="https://hub.alauda.cn/">https://hub.alauda.cn/</a></li><li>DaoCloud:<a href="https://hub.daocloud.io/">https://hub.daocloud.io/</a></li><li>时速云:<a href="https://hub.tenxcloud.com/">https://hub.tenxcloud.com/</a></li><li>阿里云:<a href="https://dev.aliyun.com/search.html">https://dev.aliyun.com/search.html</a></li></ul></li><li><p>GitLab-CE</p><ul><li>清华大学:<a href="https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/">https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/</a></li><li>浙江大学:<a href="http://www.lupaworld.com/article-257568-1.html">http://www.lupaworld.com/article-257568-1.html</a></li></ul></li><li><p>PyPi</p><ul><li>豆瓣:<a href="https://pypi.doubanio.com/simple">https://pypi.doubanio.com/simple</a></li><li>阿里云:<a href="https://mirrors.aliyun.com/pypi/simple/">https://mirrors.aliyun.com/pypi/simple/</a></li><li>中国科学技术大学:<a href="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/">https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/</a></li><li>清华大学:<a href="https://pypi.tuna.tsinghua.edu.cn/simple/">https://pypi.tuna.tsinghua.edu.cn/simple/</a></li></ul></li></ol><h2 id="三、官方镜像列表状态地址"><a href="#三、官方镜像列表状态地址" class="headerlink" title="三、官方镜像列表状态地址"></a>三、官方镜像列表状态地址</h2><ul><li>CentOS:<a href="http://mirror-status.centos.org/#cn">http://mirror-status.centos.org/#cn</a></li><li>Archlinux:<a href="https://www.archlinux.org/mirrors/status/">https://www.archlinux.org/mirrors/status/</a></li><li>Gentoo:<a href="https://www.gentoo.org/downloads/mirrors/#CN">https://www.gentoo.org/downloads/mirrors/#CN</a></li><li>Ubuntu CD:<a href="https://launchpad.net/ubuntu/+cdmirrors">https://launchpad.net/ubuntu/+cdmirrors</a></li><li>Ubuntu软件源:<a href="https://launchpad.net/ubuntu/+archivemirrors">https://launchpad.net/ubuntu/+archivemirrors</a></li><li>Debian:<a href="https://www.debian.org/mirror/list">https://www.debian.org/mirror/list</a>,<a href="https://www.debian.org/mirror/list.en.html">https://www.debian.org/mirror/list.en.html</a>,<a href="http://mirror.debian.org/status.html">http://mirror.debian.org/status.html</a></li><li>Linux Mint:<a href="https://linuxmint.com/mirrors.php">https://linuxmint.com/mirrors.php</a></li><li>Fedora Linux/Fedora EPEL:<a href="https://admin.fedoraproject.org/mirrormanager/mirrors">https://admin.fedoraproject.org/mirrormanager/mirrors</a></li><li>openSUSE:<a href="http://mirrors.opensuse.org/">http://mirrors.opensuse.org/</a></li><li>PackMan:<a href="http://packman.links2linux.org/mirrors">http://packman.links2linux.org/mirrors</a></li><li>FreeBSD:<a href="https://www.freebsd.org/doc/handbook/mirrors-ftp.html#mirrors-cn-ftp">https://www.freebsd.org/doc/handbook/mirrors-ftp.html#mirrors-cn-ftp</a></li><li>Apache:<a href="http://www.apache.org/mirrors/#cn">http://www.apache.org/mirrors/#cn</a></li><li>Cygwin:<a href="https://www.cygwin.com/mirrors.html">https://www.cygwin.com/mirrors.html</a></li><li>CRAN:<a href="https://cran.r-project.org/mirrors.html">https://cran.r-project.org/mirrors.html</a></li><li>CTAN:<a href="http://www.ctan.org/mirrors/">http://www.ctan.org/mirrors/</a>,<a href="http://www.ctan.org/mirrors/mirmon#cn">http://www.ctan.org/mirrors/mirmon#cn</a></li><li>CPAN:<a href="http://www.cpan.org/SITES.html">http://www.cpan.org/SITES.html</a></li><li>Ruby:<a href="https://www.ruby-lang.org/en/downloads/mirrors/">https://www.ruby-lang.org/en/downloads/mirrors/</a></li><li>树莓派Raspbian:<a href="http://www.raspbian.org/RaspbianMirrors">http://www.raspbian.org/RaspbianMirrors</a></li><li>深度操作系统deepin:<a href="https://www.deepin.org/mirrors/releases/">https://www.deepin.org/mirrors/releases/</a></li><li>Scientific Linux:<a href="https://www.scientificlinux.org/downloads/sl-mirrors/">https://www.scientificlinux.org/downloads/sl-mirrors/</a></li><li>Sabayon Linux:<a href="http://www.sabayon.org/download/">http://www.sabayon.org/download/</a></li><li>MySQL:<a href="http://dev.mysql.com/downloads/mirrors/">http://dev.mysql.com/downloads/mirrors/</a></li><li>KNOPPIX:<a href="http://www.knopper.net/knoppix-mirrors/">http://www.knopper.net/knoppix-mirrors/</a></li><li>QT:<a href="http://download.qt.io/static/mirrorlist/">http://download.qt.io/static/mirrorlist/</a></li><li>VideoLAN:<a href="http://www.videolan.org/videolan/mirrors.html">http://www.videolan.org/videolan/mirrors.html</a></li><li>eclipse:<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-java-luna-SR2-win32.zip&format=xml">http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-java-luna-SR2-win32.zip&format=xml</a></li><li>repoforge:<a href="http://mirror-status.repoforge.org/#cn">http://mirror-status.repoforge.org/#cn</a></li><li>Jenkins:<a href="http://mirrors.jenkins-ci.org/status.html#CN">http://mirrors.jenkins-ci.org/status.html#CN</a></li><li>MariaDB:<a href="https://mariadb.com/kb/en/mirror-sites-for-mariadb/">https://mariadb.com/kb/en/mirror-sites-for-mariadb/</a></li></ul><h2 id="四、几个官方cn子域解析"><a href="#四、几个官方cn子域解析" class="headerlink" title="四、几个官方cn子域解析"></a>四、几个官方cn子域解析</h2><ul><li>FreeBSD:<a href="ftp://ftp.cn.freebsd.org/">ftp://ftp.cn.freebsd.org/</a><–><a href="ftp://www.freebsdchina.org/">ftp://www.freebsdchina.org/</a>FreeBSD China</li><li>Debian:<a href="http://ftp.cn.debian.org/">http://ftp.cn.debian.org/</a><–><a href="https://mirrors.ustc.edu.cn/debian/">https://mirrors.ustc.edu.cn/debian/</a>中国科学技术大学</li><li>Debian:<a href="http://ftp2.cn.debian.org/">http://ftp2.cn.debian.org/</a><–><a href="https://mirror.tuna.tsinghua.edu.cn/debian/">https://mirror.tuna.tsinghua.edu.cn/debian/</a>清华大学</li></ul><h2 id="五、镜像站搭建参考"><a href="#五、镜像站搭建参考" class="headerlink" title="五、镜像站搭建参考"></a>五、镜像站搭建参考</h2><ol><li>清华大学镜像管理器脚本,<a href="https://github.com/tuna/tunasync">https://github.com/tuna/tunasync</a></li><li>搭建开源镜像站-FPs,<a href="http://fangpeishi.github.io/build_opensource_mirror.html">http://fangpeishi.github.io/build_opensource_mirror.html</a></li><li>科大开源软件镜像是怎样炼成的,<a href="https://ring0.me/2013/09/how-ustc-mirror-works/">https://ring0.me/2013/09/how-ustc-mirror-works/</a></li><li>北京交通大学同步脚本,<a href="https://github.com/ideal/mirror">https://github.com/ideal/mirror</a></li><li>中国科学院同步脚本,<a href="https://github.com/opencas/mirrors">https://github.com/opencas/mirrors</a></li><li>浙江大学同步脚本,<a href="https://github.com/zjulug">https://github.com/zjulug</a>,<a href="https://github.com/ZJU-NewMirrors">https://github.com/ZJU-NewMirrors</a></li><li>重庆邮电大学同步脚本,<a href="https://github.com/CQUPTMirror">https://github.com/CQUPTMirror</a></li><li>兰州大学同步脚本,<a href="https://github.com/LZUOSS/Mirror">https://github.com/LZUOSS/Mirror</a></li><li>教育网主干节点分布,<a href="http://www.cernet.com/aboutus/gyce_jgsz.htm">http://www.cernet.com/aboutus/gyce_jgsz.htm</a></li><li>教育网CERNET八大主干节点及地区节点,<a href="http://blog.csdn.net/gsls200808/article/details/75099728">http://blog.csdn.net/gsls200808/article/details/75099728</a></li><li>教育网41核心节点,<a href="http://www.cernet20.edu.cn/family.shtml">http://www.cernet20.edu.cn/family.shtml</a></li></ol><h2 id="六、镜像站异动情况"><a href="#六、镜像站异动情况" class="headerlink" title="六、镜像站异动情况"></a>六、镜像站异动情况</h2><ul><li>2016-11-13:新浪镜像站全网无法访问,由<a href="http://www.17ce.com/site/http/201611_026c9958e669fab697baa0520bbaf652.html">17ce</a> 提供测试结果</li><li>2016-11-13:北京交通大学镜像首页访问出现403Forbidden</li><li>2016-11-13:哈尔滨工业大学镜像目录被清空</li><li>2016-11-13:中国地质大学镜像站全网无法访问,由<a href="http://www.17ce.com/site/http/201611_2efa53aec3a780c57af46371b02ffeab.html">17ce</a>提供测试结果</li><li>2016-11-13:北京化工大学镜像站全网无法访问,由<a href="http://www.17ce.com/site/http/201611_39d1dd7415483b5256fc6dfe9481bcc5.html">17ce</a>提供测试结果</li><li>2016-11-13:云南大学pypi镜像地址无法访问</li><li>2016-11-13:Linux运维派镜像首页访问出现404</li><li>2016-11-26:新浪镜像站截至目前已经失联51天,移至关闭列表</li><li>2016-11-26:首都在线移至企业站列表,首都在线是国内的一家主机商,有国内节点和海外节点</li><li>2016-12-10:哈尔滨工业大学镜像目录截至目前已经超过一个月无法访问,移至关闭列表</li><li>2017-1-5:北京化工大学镜像截至目前已经超过两个月无法访问,移至关闭列表</li><li>2017-1-5:中国地质大学镜像截至目前已经超过两个月无法访问,移至关闭列表</li><li>2017-1-5:新增南京信息职业技术学院镜像,这个镜像在2016年11上线</li><li>2017-1-5:新增龙芯开源社区镜像,这个镜像应该是很早(2015年之前)就建立了只是不对外,目前只更新龙芯镜像</li><li>2017-1-6:新增上海交通大学SJTUG镜像,据v2ex上的消息,这个镜像于2016年上线用来替代原来的上海交通大学镜像,不过目前这个镜像的发展情况也不乐观</li><li>2017-5-17:cnnic镜像,腾讯bugly镜像于2017年4月关闭</li><li>2017-5-17:海波镜像于2017年5月关闭,新增南京邮电大学通达学院、燕山大学、黔东南开源镜像站3个镜像</li><li>2017-5-17:新增南京邮电大学镜像</li><li>2018-1-19:ubuntu的cn子域cn.archive.ubuntu.com不再指向阿里云,改为指向美国IP(91.189.91.26)(18号DNS切换,全网无法正确解析)</li><li>2018-5-16:更新上海交通大学SJTUG镜像,新地址已经包含了原先的ftp.sjtu.edu.cn大多数镜像,且新增了大量现代源</li><li>2020-11-2:清华大学和中国科技大学11月30日接到热心用户投诉,移除了deepin软件源,原因是设计商业软件重分发授权。参见:<a href="https://bbs.deepin.org/post/204649">https://bbs.deepin.org/post/204649</a></li><li>2020-11-2:东北大学镜像通过近两年来的访问监测,2017年后无更新内容,移动到关闭列表。</li><li>2020-11-17:哈尔滨工业大学镜像重开</li></ul>]]></content>
<summary type="html"><h2 id="一、站点版"><a href="#一、站点版" class="headerlink" title="一、站点版"></a>一、站点版</h2><h3 id="(一)、企业站"><a href="#(一)、企业站" class="headerlink" title=</summary>
<category term="资源" scheme="https://blog.quickso.cn/categories/%E8%B5%84%E6%BA%90/"/>
<category term="开源" scheme="https://blog.quickso.cn/tags/%E5%BC%80%E6%BA%90/"/>
<category term="镜像" scheme="https://blog.quickso.cn/tags/%E9%95%9C%E5%83%8F/"/>
</entry>
<entry>
<title>code-server Dokcer部署方法及踩坑</title>
<link href="https://blog.quickso.cn/2023/12/28/code-serverDokcer%E9%83%A8%E7%BD%B2%E6%96%B9%E6%B3%95%E5%8F%8A%E8%B8%A9%E5%9D%91/"/>
<id>https://blog.quickso.cn/2023/12/28/code-serverDokcer%E9%83%A8%E7%BD%B2%E6%96%B9%E6%B3%95%E5%8F%8A%E8%B8%A9%E5%9D%91/</id>
<published>2023-12-28T02:38:33.000Z</published>
<updated>2024-11-23T13:12:18.426Z</updated>
<content type="html"><![CDATA[<p>简介<br>code-server是一款服务端的vscode,可以在浏览器中使用vscode</p><p>官网:code-server</p><p>安装<br>官方提供的安装方法:<a href="https://coder.com/docs/code-server/latest/install">https://coder.com/docs/code-server/latest/install</a></p><p>官方提供了许多的安装方式,这里为了方便快捷,我们使用Docker部署,Docker Hub。官方镜像支持 amd64 和 arm64,如果需要arm32,可以使用社区版镜像<a href="https://hub.docker.com/r/linuxserver/code-server%E3%80%82%E8%BF%99%E9%87%8C%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%E5%AE%98%E6%96%B9%E9%95%9C%E5%83%8F%E3%80%82">https://hub.docker.com/r/linuxserver/code-server。这里我们使用官方镜像。</a></p><p>在官网中Docker安装的方法中,映射了以下两个目录:</p><p>/home/coder/.config:code-server的配置文件,里面包含了登录密码。容器第一次启动时如果.config文件夹为空,会自动创建配置文件,docker的启动日志中可以查看。具体配置文件为/home/coder/.config/code-server/config.yaml<br>/home/coder/project:code-server默认提供的工程目录,映射在物理机方便用户修改查看,当然你也可以映射自己的目录。<br>自动创建的config.yaml文件会包含密码。密码是自动生成的,可以自己修改。</p><h1 id="拉取镜像"><a href="#拉取镜像" class="headerlink" title="拉取镜像"></a>拉取镜像</h1><figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs armasm"><span class="hljs-symbol">docker</span> pull codercom/<span class="hljs-meta">code</span>-server:latest<br></code></pre></td></tr></table></figure><h1 id="创建物理机所需要的映射目录"><a href="#创建物理机所需要的映射目录" class="headerlink" title="创建物理机所需要的映射目录"></a>创建物理机所需要的映射目录</h1><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs gradle">mkdir -p <span class="hljs-regexp">/www/</span>wwwroot<span class="hljs-regexp">/coder-server/</span>.config<br>mkdir -p <span class="hljs-regexp">/www/</span>wwwroot<span class="hljs-regexp">/coder-server/</span><span class="hljs-keyword">project</span><br></code></pre></td></tr></table></figure><h1 id="创建容器"><a href="#创建容器" class="headerlink" title="创建容器"></a>创建容器</h1><figure class="highlight livescript"><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><code class="hljs livescript">docker run -d -<span class="hljs-literal">it</span> --name code-server -p <span class="hljs-number">8080</span>:<span class="hljs-number">8080</span> <span class="hljs-string">\</span> <br> -v <span class="hljs-string">"/www/wwwroot/coder-server/.config:$HOME/.config"</span> <span class="hljs-string">\</span> <br> -v <span class="hljs-string">"/www/wwwroot/coder-server/project:/home/coder/project"</span> <span class="hljs-string">\</span> <br> -u <span class="hljs-string">"$(id -u):$(id -g)"</span> <span class="hljs-string">\</span><br> -e <span class="hljs-string">"DOCKER_USER=$USER"</span> <span class="hljs-string">\</span> <br> codercom/code-server:latest<br></code></pre></td></tr></table></figure><p>查看config.yaml中的密码,并访问8080端口就可以使用了!!!!</p><p>踩坑<br>访问提示401错误<br>这是由于配置文件(config.yaml)不存在,或者配置文件有误。我在第一次创建容器时,Docker日志提示创建了默认的配置文件,但是.config文件夹为空。</p><p>新建一个没有映射的容器,进入容器后执行cat ~/.config/code-server/config.yaml并复制文件内容,之后在物理机映射目录创建文件.config/cod-server/config.yaml粘贴内容。之后删除新建的容器,重启之前的容器。</p><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">bind-addr:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:8080</span><br><span class="hljs-attr">auth:</span> <span class="hljs-string">password</span><br><span class="hljs-attr">password:</span> <span class="hljs-string">*****</span><br><span class="hljs-attr">cert:</span> <span class="hljs-literal">false</span><br></code></pre></td></tr></table></figure><p>到这里重启容器后理论上是可以正常使用了,但我在尝试后还是有问题,可以在新建容器时填入密码参数,这样无论配置文件是否存在都可以使用。</p><figure class="highlight routeros"><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><code class="hljs routeros">docker <span class="hljs-built_in">run</span> -d -it --name code-server -p 8080:8080<br> -v <span class="hljs-string">"/www/wwwroot/coder-server/.config:<span class="hljs-variable">$HOME</span>/.config"</span><br> -v <span class="hljs-string">"/www/wwwroot/coder-server/project:/home/coder/project"</span><br> -u <span class="hljs-string">"(id -u):(id−u):(id -g)"</span><br> -e <span class="hljs-string">"DOCKER_USER=<span class="hljs-variable">$USER</span>"</span><br> -e <span class="hljs-string">"PASSWORD"</span>=*****<br> codercom/code-server:latest<br></code></pre></td></tr></table></figure><p>还可以不映射配置文件到物理机,之后修改配置可以进入容器再修改。</p><figure class="highlight applescript"><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><code class="hljs applescript">docker <span class="hljs-built_in">run</span> -d -<span class="hljs-keyword">it</span> <span class="hljs-comment">--name code-server -p 8080:8080</span><br> -v <span class="hljs-string">"/www/wwwroot/coder-server/project:/home/coder/project"</span><br> -u <span class="hljs-string">"(id -u):(id−u):(id -g)"</span><br> -e <span class="hljs-string">"DOCKER_USER=$USER"</span><br> codercom/code-server:latest<br></code></pre></td></tr></table></figure><p>部分功能无法使用,部分插件失效<br>右下角应该有如下的提示:</p><p>code-server is being accessed in an insecure context. Web views, the clipboard, and other functionality may not work as expected.</p><p>因为部分组件依赖于第三方的数据,这些数据请求时协议为https,如果部署时未使用https协议,浏览器因为安全问题无法获取数据。</p>]]></content>
<summary type="html"><p>简介<br>code-server是一款服务端的vscode,可以在浏览器中使用vscode</p>
<p>官网:code-server</p>
<p>安装<br>官方提供的安装方法:<a href="https://coder.com/docs/code-server/l</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Docker" scheme="https://blog.quickso.cn/tags/Docker/"/>
<category term="code-server" scheme="https://blog.quickso.cn/tags/code-server/"/>
</entry>
<entry>
<title>JetBrains IntelliJ系列全家桶激活服务器</title>
<link href="https://blog.quickso.cn/2023/12/26/JetBrainsIntelliJ%E7%B3%BB%E5%88%97%E5%85%A8%E5%AE%B6%E6%A1%B6%E6%BF%80%E6%B4%BB%E6%9C%8D%E5%8A%A1%E5%99%A8/"/>
<id>https://blog.quickso.cn/2023/12/26/JetBrainsIntelliJ%E7%B3%BB%E5%88%97%E5%85%A8%E5%AE%B6%E6%A1%B6%E6%BF%80%E6%B4%BB%E6%9C%8D%E5%8A%A1%E5%99%A8/</id>
<published>2023-12-26T13:23:10.000Z</published>
<updated>2024-11-23T13:12:18.416Z</updated>
<content type="html"><![CDATA[<p>简要步骤<br>入口Ⅰ:欢迎界面 - 齿轮(设置) - Manage Licenses…</p><p>入口Ⅱ:菜单 - 帮助(Help) - 注册(Register)…</p><p>选择 License Server,输入Server address地址</p><p>点击【Activate】激活成功!!</p><p>同样支持其他编辑器噢,比如 IDEA~</p><p>如您有需要,可自行通过网络空间搜索引擎自行寻找</p><h1 id="Fofa"><a href="#Fofa" class="headerlink" title="Fofa"></a>Fofa</h1><figure class="highlight abnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs abnf"><span class="hljs-attribute">header</span><span class="hljs-operator">=</span><span class="hljs-string">"https://account.jetbrains.com/fls-auth"</span><br></code></pre></td></tr></table></figure><h1 id="Shodan"><a href="#Shodan" class="headerlink" title="Shodan"></a>Shodan</h1><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">Location:</span> https:<span class="hljs-comment">//account.jetbrains.com/fls-auth</span><br></code></pre></td></tr></table></figure><h1 id="Censys"><a href="#Censys" class="headerlink" title="Censys"></a>Censys</h1><figure class="highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dts"><span class="hljs-symbol">Location:</span> https:<span class="hljs-comment">//account.jetbrains.com/fls-auth</span><br></code></pre></td></tr></table></figure>]]></content>
<summary type="html"><p>简要步骤<br>入口Ⅰ:欢迎界面 - 齿轮(设置) - Manage Licenses…</p>
<p>入口Ⅱ:菜单 - 帮助(Help) - 注册(Register)…</p>
<p>选择 License Server,输入Server address地址</p>
<p></summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="JetBrains" scheme="https://blog.quickso.cn/tags/JetBrains/"/>
<category term="IntelliJ" scheme="https://blog.quickso.cn/tags/IntelliJ/"/>
</entry>
<entry>
<title>yt-dlp使用教程</title>
<link href="https://blog.quickso.cn/2023/12/16/yt-dlp%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/"/>
<id>https://blog.quickso.cn/2023/12/16/yt-dlp%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</id>
<published>2023-12-16T09:50:04.000Z</published>
<updated>2025-01-07T13:43:56.177Z</updated>
<content type="html"><![CDATA[<p>很久没用youtube-dl这个工具了,然后在油管上看到想下载的视频,发现下载速度超慢,只有几十KB最多。</p><p>于是,搜一下,发现可能是被限速了吧。</p><p>找到了这个 yt-dlp 的代替工具。<br>项目地址:<a href="https://github.com/yt-dlp/yt-dlp">https://github.com/yt-dlp/yt-dlp</a></p><p>这个下载,就看个人网速了,因为我晚上下载有时候1M/s、几百K/s都有,白天下载有时候10几M/s、20~30M/s来回跳,几M/s都有。</p><p>发现它就是从youtube-dl fork过来的,就理解为是从youtube-dl复制过来的,做了一些修复和添加了一些东西。</p><h2 id="安装yt-dlp"><a href="#安装yt-dlp" class="headerlink" title="安装yt-dlp"></a>安装yt-dlp</h2><h3 id="1-安装Python和ffmpeg"><a href="#1-安装Python和ffmpeg" class="headerlink" title="1.安装Python和ffmpeg"></a>1.安装Python和ffmpeg</h3><p>是从youtube-dl复制过来的,所以,原来如果有使用youtube-dl的话,就简单了,原来都已经安装过了。就直接安装yt-dlp就可以了,用法都一样。</p><p>安装:</p><ul><li>Python:安装时把pip和添加系统环境变量都选上</li><li>ffmpeg:下载好exe文件,把目录添加到系统环境变量就行</li></ul><h3 id="2-安装yt-dlp"><a href="#2-安装yt-dlp" class="headerlink" title="2.安装yt-dlp"></a>2.安装yt-dlp</h3><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cmake">pip <span class="hljs-keyword">install</span> yt-dlp<br></code></pre></td></tr></table></figure><p>如果不想用pip安装的,就去项目地址下载exe版本:<br><a href="https://github.com/yt-dlp/yt-dlp#release-files">https://github.com/yt-dlp/yt-dlp#release-files</a></p><p>然后把yt-dlp.exe 也一样放到系统环境的目录下就行。比如就放到ffmpeg的bin目录下,跟ffmpeg.exe和youtube-dl.exe放一起就行。</p><h2 id="下载视频"><a href="#下载视频" class="headerlink" title="下载视频"></a>下载视频</h2><p>支持下载哪些网站,项目文档上也有:<br><a href="https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md">https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md</a></p><p>我这里就有下载油管的视频举例。</p><p>比如我想下载这个视频:<a href="https://www.youtube.com/watch?v=kNU2WCHVVBk">https://www.youtube.com/watch?v=kNU2WCHVVBk</a><br>视频格式为:<a href="https://www.youtube.com/watch?v=">https://www.youtube.com/watch?v=</a>*************</p><h3 id="1-直接下载"><a href="#1-直接下载" class="headerlink" title="1.直接下载"></a>1.直接下载</h3><figure class="highlight gauss"><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><code class="hljs gauss"><span class="hljs-meta"># 默认格式,高于720P的格式一般是 webm 格式</span><br>yt-dlp https:<span class="hljs-comment">//www.youtube.com/watch?v=kNU2WCHVVBk</span><br><br><span class="hljs-meta"># 下载视频转换成mp4(用--merge-output-format参数)</span><br>yt-dlp --merge-<span class="hljs-keyword">output</span>-<span class="hljs-keyword">format</span> mp4 https:<span class="hljs-comment">//www.youtube.com/watch?v=kNU2WCHVVBk</span><br></code></pre></td></tr></table></figure><h3 id="2-查看视频所有分辨率"><a href="#2-查看视频所有分辨率" class="headerlink" title="2.查看视频所有分辨率"></a>2.查看视频所有分辨率</h3><p>跟用 youtube-dl命令一样,先用 <code>-F</code>参数查看有哪些分辨率。</p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs 1c">yt<span class="hljs-punctuation">-</span>dlp <span class="hljs-punctuation">-</span>F https<span class="hljs-punctuation">:</span><span class="hljs-comment">//www.youtube.com/watch?v=kNU2WCHVVBk</span><br></code></pre></td></tr></table></figure><p><img src="https://i007it.com/img/yt-dlp.png"></p><p>结果跟用 youtube-dl命令的差不多,标题行含义: > ID:文件ID > EXT:格式 > RESOLUTION:分辨率 > FPS:视频的帧率 > FILESIZE:文件大小 > VCODEC:audio only表示仅音频 > ACODEC:video only表示仅视频(没有音频);像mp4a.40.2(720p)就直接包含了音频</p><h3 id="3-下载指定分辨率"><a href="#3-下载指定分辨率" class="headerlink" title="3.下载指定分辨率"></a>3.下载指定分辨率</h3><figure class="highlight perl"><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></pre></td><td class="code"><pre><code class="hljs perl"><span class="hljs-comment"># 1.只下载音频</span><br><span class="hljs-comment"># 找m4a格式,列表越靠后越清晰。比如ID:140 | EXT:m4a | audio only</span><br>yt-dlp -f140 https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk<br><br><span class="hljs-comment"># 2.下载音频转换成mp3(加上-x --audio-format参数)</span><br>yt-dlp -f140 -<span class="hljs-keyword">x</span> --audio-<span class="hljs-keyword">format</span> mp3 https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk<br><br><span class="hljs-comment"># 3.下载视频(带音频)ID:22 | EXT:mp4 | 1280*720</span><br>yt-dlp -f22 https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk<br><br><span class="hljs-comment"># 4.下载指定分辨率视频+音频(为了方便就直接下载mp4格式了)</span><br><span class="hljs-comment"># 1080及以上分辨率的音频和视频是分开的,所以一般会音频和视频一起下载</span><br>yt-dlp -f299+<span class="hljs-number">140</span> https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk<br><br><span class="hljs-comment"># 5.(通用)下载最佳mp4视频+最佳m4a音频格式并合成mp4</span><br>yt-dlp -f <span class="hljs-string">'bv[ext=mp4]+ba[ext=m4a]'</span> --embed-metadata --merge-output-<span class="hljs-keyword">format</span> mp4 https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk<br><br><span class="hljs-comment"># 6.指定文件名下载(用-o参数)</span><br><span class="hljs-comment"># 默认下载的文件格式是:title+空格+[id].格式,比如***** [kNU2WCHVVBk].mp4</span><br><span class="hljs-comment"># 文件名只要标题,不要id,加上 -o '%(title)s.mp4'</span><br>yt-dlp -f <span class="hljs-string">'bv[ext=mp4]+ba[ext=m4a]'</span> --embed-metadata --merge-output-<span class="hljs-keyword">format</span> mp4 https:<span class="hljs-regexp">//</span>www.youtube.com/watch?v=kNU2WCHVVBk -o <span class="hljs-string">'%(title)s.mp4'</span><br></code></pre></td></tr></table></figure><p>最方便直接用,可以直接用最后一种通用的下载最佳视频的方式。</p><h3 id="5-下载播放列表所有视频"><a href="#5-下载播放列表所有视频" class="headerlink" title="5.下载播放列表所有视频"></a>5.下载播放列表所有视频</h3><figure class="highlight asciidoc"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs asciidoc">yt-dlp https://www.youtube.com/playlist?list=<span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><br></code></pre></td></tr></table></figure><h3 id="6-yt-dlp无法使用–cookies-from-browser解决方法"><a href="#6-yt-dlp无法使用–cookies-from-browser解决方法" class="headerlink" title="6.yt-dlp无法使用–cookies-from-browser解决方法"></a>6.yt-dlp无法使用–cookies-from-browser解决方法</h3><p><strong>安装扩展插件Get cookies.txt LOCALLY:</strong></p><p>打开Chrome,输入网址</p><p><a href="https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?pli=1">https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc?pli=1</a></p><p>之后点击安装扩展。</p><p>安装后可以将插件固定在浏览器显示中</p><p><strong>使用插件手动获取youtube的相关cookies:</strong></p><p>打开youtube,点击Export,就可以成功导出并下载与youtube相关的cookies文件。</p><p><img src="https://cdn.jsdmirror.com/gh/muzihuaner/huancdn//img/image-20250107214027574.png" alt="image-20250107214027574"></p><p><strong>使用cookies文件下载相关视频:</strong></p><p>下载好cookies文件后,将原代码中的–cookies-from-browser chrome替换成–cookies [下载的cookies所在的文件路径]</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">yt-dlp <span class="hljs-attr">--cookies</span> /root/www<span class="hljs-selector-class">.youtube</span><span class="hljs-selector-class">.com_cookies</span><span class="hljs-selector-class">.txt</span> https:<span class="hljs-comment">//www.youtube.com/watch?v=XXX</span><br></code></pre></td></tr></table></figure><h3 id="7-常用命令总结"><a href="#7-常用命令总结" class="headerlink" title="7.常用命令总结"></a>7.常用命令总结</h3><ol><li><p><strong>下载视频:</strong></p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs 1c">yt<span class="hljs-punctuation">-</span>dlp https<span class="hljs-punctuation">:</span><span class="hljs-comment">//www.youtube.com/watch?v=example</span><br></code></pre></td></tr></table></figure></li><li><p><strong>下载音频:</strong></p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs css">yt-dlp -<span class="hljs-attribute">x</span> <span class="hljs-attr">--audio-format</span> mp3 https://www.youtube.com/watch?v=example<br></code></pre></td></tr></table></figure></li><li><p><strong>下载播放列表:</strong></p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs 1c">yt<span class="hljs-punctuation">-</span>dlp https<span class="hljs-punctuation">:</span><span class="hljs-comment">//www.youtube.com/playlist?list=example</span><br></code></pre></td></tr></table></figure></li><li><p><strong>选择视频格式:</strong></p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs 1c">yt<span class="hljs-punctuation">-</span>dlp <span class="hljs-punctuation">-</span>f best https<span class="hljs-punctuation">:</span><span class="hljs-comment">//www.youtube.com/watch?v=example</span><br></code></pre></td></tr></table></figure></li><li><p><strong>保存到特定文件夹:</strong></p><figure class="highlight maxima"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs maxima">yt-dlp -o '/path/to/<span class="hljs-built_in">directory</span>/<span class="hljs-symbol">%</span>(<span class="hljs-built_in">title</span>)s.<span class="hljs-symbol">%</span>(ext)s' https://www.youtube.com/watch?v=<span class="hljs-built_in">example</span><br></code></pre></td></tr></table></figure></li><li><p><strong>限制下载速度:</strong></p><figure class="highlight hsp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs hsp">yt-dlp --rate-<span class="hljs-keyword">limit</span> <span class="hljs-number">500</span>K https:<span class="hljs-comment">//www.youtube.com/watch?v=example</span><br></code></pre></td></tr></table></figure></li><li><p><strong>下载字幕:</strong></p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli">yt-dlp <span class="hljs-params">--write-sub</span> <span class="hljs-params">--sub-lang</span> en https:<span class="hljs-string">//www.youtube.com/watch</span>?v=example<br></code></pre></td></tr></table></figure></li></ol><p><code>yt-dlp</code> 还有更多高级选项,你可以通过运行 <code>yt-dlp --help</code> 来查看详细的帮助文档</p>]]></content>
<summary type="html"><p>很久没用youtube-dl这个工具了,然后在油管上看到想下载的视频,发现下载速度超慢,只有几十KB最多。</p>
<p>于是,搜一下,发现可能是被限速了吧。</p>
<p>找到了这个 yt-dlp 的代替工具。<br>项目地址:<a href="https://githu</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Youtube" scheme="https://blog.quickso.cn/tags/Youtube/"/>
<category term="yt-dlp" scheme="https://blog.quickso.cn/tags/yt-dlp/"/>
</entry>
<entry>
<title>使用Cloudflare创建镜像站</title>
<link href="https://blog.quickso.cn/2023/12/12/%E4%BD%BF%E7%94%A8Cloudflare%E5%88%9B%E5%BB%BA%E9%95%9C%E5%83%8F%E7%AB%99/"/>
<id>https://blog.quickso.cn/2023/12/12/%E4%BD%BF%E7%94%A8Cloudflare%E5%88%9B%E5%BB%BA%E9%95%9C%E5%83%8F%E7%AB%99/</id>
<published>2023-12-12T04:22:40.000Z</published>
<updated>2024-11-23T13:12:18.428Z</updated>
<content type="html"><![CDATA[<p>最近使用Unsplash的API,但是速度太慢了,简直受不了,本来打算搞一台国外服务器来中转,忽然发现可以利用Cloudflare的Worker来制作镜像站,Workers 每天有免费的 10 万次请求,个人使用绰绰有余了,还可以绑定自定义域名。</p><h2 id="创建镜像站"><a href="#创建镜像站" class="headerlink" title="创建镜像站"></a>创建镜像站</h2><p>首先登录cloudflare.com,进入控制台 - Works - 创建服务 - 选择HTTP处理程序</p><p><a href="https://static.notemi.cn/writer/SCR-20230225-wid.png"></a><a href="https://static.notemi.cn/writer/SCR-20230225-wid.png"><img src="https://static.notemi.cn/writer/SCR-20230225-wid.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>创建完成后,点击快速编辑</p><p><a href="https://static.notemi.cn/writer/image-20230225232840513.png"></a><a href="https://static.notemi.cn/writer/image-20230225232840513.png"><img src="https://static.notemi.cn/writer/image-20230225232840513.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>拷贝进下方的代码:</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><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></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-comment">// 你要镜像的网站.</span><br><span class="hljs-keyword">const</span> upstream = <span class="hljs-string">'www.google.com'</span><br><span class="hljs-comment">// 镜像网站的目录,比如你想镜像某个网站的二级目录则填写二级目录的目录名,镜像 google 用不到,默认即可.</span><br><span class="hljs-keyword">const</span> upstream_path = <span class="hljs-string">'/'</span><br><span class="hljs-comment">// 镜像站是否有手机访问专用网址,没有则填一样的.</span><br><span class="hljs-keyword">const</span> upstream_mobile = <span class="hljs-string">'www.google.com'</span><br><span class="hljs-comment">// 屏蔽国家和地区.</span><br><span class="hljs-keyword">const</span> blocked_region = [<span class="hljs-string">'KP'</span>, <span class="hljs-string">'SY'</span>, <span class="hljs-string">'PK'</span>, <span class="hljs-string">'CU'</span>]<br><span class="hljs-comment">// 屏蔽 IP 地址.</span><br><span class="hljs-keyword">const</span> blocked_ip_address = [<span class="hljs-string">'0.0.0.0'</span>, <span class="hljs-string">'127.0.0.1'</span>]<br><span class="hljs-comment">// 镜像站是否开启 HTTPS.</span><br><span class="hljs-keyword">const</span> https = <span class="hljs-literal">true</span><br><span class="hljs-comment">// 文本替换.</span><br><span class="hljs-keyword">const</span> replace_dict = {<br> <span class="hljs-string">'$upstream'</span>: <span class="hljs-string">'$custom_domain'</span>,<br> <span class="hljs-string">'//www.google.com'</span>: <span class="hljs-string">''</span><br>}<br><span class="hljs-comment">// 以下保持默认,不要动</span><br><span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'fetch'</span>, <span class="hljs-function"><span class="hljs-params">event</span> =></span> {<br> event.<span class="hljs-title function_">respondWith</span>(<span class="hljs-title function_">fetchAndApply</span>(event.<span class="hljs-property">request</span>));<br>})<br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">fetchAndApply</span>(<span class="hljs-params">request</span>) {<br> <span class="hljs-keyword">const</span> region = request.<span class="hljs-property">headers</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'cf-ipcountry'</span>).<span class="hljs-title function_">toUpperCase</span>();<br> <span class="hljs-keyword">const</span> ip_address = request.<span class="hljs-property">headers</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'cf-connecting-ip'</span>);<br> <span class="hljs-keyword">const</span> user_agent = request.<span class="hljs-property">headers</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'user-agent'</span>);<br> <span class="hljs-keyword">let</span> response = <span class="hljs-literal">null</span>;<br> <span class="hljs-keyword">let</span> url = <span class="hljs-keyword">new</span> <span class="hljs-title function_">URL</span>(request.<span class="hljs-property">url</span>);<br> <span class="hljs-keyword">let</span> url_hostname = url.<span class="hljs-property">hostname</span>;<br> <span class="hljs-keyword">if</span> (https == <span class="hljs-literal">true</span>) {<br> url.<span class="hljs-property">protocol</span> = <span class="hljs-string">'https:'</span>;<br> } <span class="hljs-keyword">else</span> {<br> url.<span class="hljs-property">protocol</span> = <span class="hljs-string">'http:'</span>;<br> }<br> <span class="hljs-keyword">if</span> (<span class="hljs-keyword">await</span> <span class="hljs-title function_">device_status</span>(user_agent)) {<br> <span class="hljs-keyword">var</span> upstream_domain = upstream;<br> } <span class="hljs-keyword">else</span> {<br> <span class="hljs-keyword">var</span> upstream_domain = upstream_mobile;<br> }<br> url.<span class="hljs-property">host</span> = upstream_domain;<br> <span class="hljs-keyword">if</span> (url.<span class="hljs-property">pathname</span> == <span class="hljs-string">'/'</span>) {<br> url.<span class="hljs-property">pathname</span> = upstream_path;<br> } <span class="hljs-keyword">else</span> {<br> url.<span class="hljs-property">pathname</span> = upstream_path + url.<span class="hljs-property">pathname</span>;<br> }<br> <span class="hljs-keyword">if</span> (blocked_region.<span class="hljs-title function_">includes</span>(region)) {<br> response = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-string">'Access denied: WorkersProxy is not available in your region yet.'</span>, {<br> <span class="hljs-attr">status</span>: <span class="hljs-number">403</span><br> });<br> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (blocked_ip_address.<span class="hljs-title function_">includes</span>(ip_address)) {<br> response = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-string">'Access denied: Your IP address is blocked by WorkersProxy.'</span>, {<br> <span class="hljs-attr">status</span>: <span class="hljs-number">403</span><br> });<br> } <span class="hljs-keyword">else</span> {<br> <span class="hljs-keyword">let</span> method = request.<span class="hljs-property">method</span>;<br> <span class="hljs-keyword">let</span> request_headers = request.<span class="hljs-property">headers</span>;<br> <span class="hljs-keyword">let</span> new_request_headers = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>(request_headers);<br> new_request_headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'Host'</span>, url.<span class="hljs-property">hostname</span>);<br> new_request_headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'Referer'</span>, url.<span class="hljs-property">hostname</span>);<br> <span class="hljs-keyword">let</span> original_response = <span class="hljs-keyword">await</span> <span class="hljs-title function_">fetch</span>(url.<span class="hljs-property">href</span>, {<br> <span class="hljs-attr">method</span>: method,<br> <span class="hljs-attr">headers</span>: new_request_headers<br> })<br> <span class="hljs-keyword">let</span> original_response_clone = original_response.<span class="hljs-title function_">clone</span>();<br> <span class="hljs-keyword">let</span> original_text = <span class="hljs-literal">null</span>;<br> <span class="hljs-keyword">let</span> response_headers = original_response.<span class="hljs-property">headers</span>;<br> <span class="hljs-keyword">let</span> new_response_headers = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>(response_headers);<br> <span class="hljs-keyword">let</span> status = original_response.<span class="hljs-property">status</span>;<br> new_response_headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'access-control-allow-origin'</span>, <span class="hljs-string">'*'</span>);<br> new_response_headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'access-control-allow-credentials'</span>, <span class="hljs-literal">true</span>);<br> new_response_headers.<span class="hljs-title function_">delete</span>(<span class="hljs-string">'content-security-policy'</span>);<br> new_response_headers.<span class="hljs-title function_">delete</span>(<span class="hljs-string">'content-security-policy-report-only'</span>);<br> new_response_headers.<span class="hljs-title function_">delete</span>(<span class="hljs-string">'clear-site-data'</span>);<br> <span class="hljs-keyword">const</span> content_type = new_response_headers.<span class="hljs-title function_">get</span>(<span class="hljs-string">'content-type'</span>);<br> <span class="hljs-keyword">if</span> (content_type.<span class="hljs-title function_">includes</span>(<span class="hljs-string">'text/html'</span>) && content_type.<span class="hljs-title function_">includes</span>(<span class="hljs-string">'UTF-8'</span>)) {<br> original_text = <span class="hljs-keyword">await</span> <span class="hljs-title function_">replace_response_text</span>(original_response_clone, upstream_domain, url_hostname);<br> } <span class="hljs-keyword">else</span> {<br> original_text = original_response_clone.<span class="hljs-property">body</span><br> }<br> response = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(original_text, {<br> status,<br> <span class="hljs-attr">headers</span>: new_response_headers<br> })<br> }<br> <span class="hljs-keyword">return</span> response;<br>}<br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">replace_response_text</span>(<span class="hljs-params">response, upstream_domain, host_name</span>) {<br> <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.<span class="hljs-title function_">text</span>()<br> <span class="hljs-keyword">var</span> i, j;<br> <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {<br> j = replace_dict[i]<br> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {<br> i = upstream_domain<br> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {<br> i = host_name<br> }<br> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {<br> j = upstream_domain<br> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {<br> j = host_name<br> }<br> <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> <span class="hljs-title class_">RegExp</span>(i, <span class="hljs-string">'g'</span>)<br> text = text.<span class="hljs-title function_">replace</span>(re, j);<br> }<br> <span class="hljs-keyword">return</span> text;<br>}<br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">device_status</span>(<span class="hljs-params">user_agent_info</span>) {<br> <span class="hljs-keyword">var</span> agents = [<span class="hljs-string">"Android"</span>, <span class="hljs-string">"iPhone"</span>, <span class="hljs-string">"SymbianOS"</span>, <span class="hljs-string">"Windows Phone"</span>, <span class="hljs-string">"iPad"</span>, <span class="hljs-string">"iPod"</span>];<br> <span class="hljs-keyword">var</span> flag = <span class="hljs-literal">true</span>;<br> <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> v = <span class="hljs-number">0</span>; v < agents.<span class="hljs-property">length</span>; v++) {<br> <span class="hljs-keyword">if</span> (user_agent_info.<span class="hljs-title function_">indexOf</span>(agents[v]) > <span class="hljs-number">0</span>) {<br> flag = <span class="hljs-literal">false</span>;<br> <span class="hljs-keyword">break</span>;<br> }<br> }<br> <span class="hljs-keyword">return</span> flag;<br>}<br></code></pre></td></tr></table></figure><p>点击右边的预览,就可以使用系统分配的域名访问到Google了。</p><p><a href="https://static.notemi.cn/writer/image-20230225233608927.png"></a><a href="https://static.notemi.cn/writer/image-20230225233608927.png"><img src="https://static.notemi.cn/writer/image-20230225233608927.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>我这边想创建Unsplash简易API的镜像站:source.unsplash.com,将代码中的<a href="http://www.google.com换成source.unsplash.com就可以了,如果要创建其他网站,换成对应域名就行,如github就换成github.com/">www.google.com换成source.unsplash.com就可以了,如果要创建其他网站,换成对应域名就行,如github就换成github.com</a></p><p>替换成后,预览一下,成功了。</p><p><a href="https://static.notemi.cn/writer/image-20230225233816224.png"></a><a href="https://static.notemi.cn/writer/image-20230225233816224.png"><img src="https://static.notemi.cn/writer/image-20230225233816224.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>这样就可以通过worker分配的域名访问服务了,如果想自定义域名,继续往下看。</p><h2 id="绑定自定义域名"><a href="#绑定自定义域名" class="headerlink" title="绑定自定义域名"></a>绑定自定义域名</h2><p>主要分两个步骤,一个是自定义域名添加到 <code>CloudFlare</code>网络,另一个是将该域名指向 <code>Worker</code>子域名进行关联。这两个步骤先后顺序没有严格要求。</p><p>添加站点</p><p><a href="https://static.notemi.cn/writer/image-20230226222911480.png"></a><a href="https://static.notemi.cn/writer/image-20230226222911480.png"><img src="https://static.notemi.cn/writer/image-20230226222911480.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>添加DNS - IPv4地址随便填,主要是将域名接入CloudFlare</p><p><a href="https://static.notemi.cn/writer/image-20230226223107015.png"></a><a href="https://static.notemi.cn/writer/image-20230226223107015.png"><img src="https://static.notemi.cn/writer/image-20230226223107015.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>Worker绑定自定义域名</p><p><a href="https://static.notemi.cn/writer/image-20230226223329983.png"></a><a href="https://static.notemi.cn/writer/image-20230226223329983.png"><img src="https://static.notemi.cn/writer/image-20230226223329983.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p><code>路由</code>填写上一步的子域名(如:<code>unsplash.notemi.cn/*</code>),<code>区域</code>选择上面添加的 <code>站点</code>:</p><p><a href="https://static.notemi.cn/writer/image-20230226223425432.png"></a><a href="https://static.notemi.cn/writer/image-20230226223425432.png"><img src="https://static.notemi.cn/writer/image-20230226223425432.png" alt="使用Cloudflare创建镜像站" title="点击放大图片"></a></p><p>添加好就可以使用自定义域名访问了。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p><a href="https://hexsen.com/cloudflare-workers-to-google.html">使用 Cloudflare Workers™ 制作镜像站,可访问谷歌-何先生 (hexsen.com)</a></p><p><a href="https://www.idcfq.com/297.html">CloudFlare Workers 设置使用自己的域名 - 80后'Blog (idcfq.com)</a></p>]]></content>
<summary type="html"><p>最近使用Unsplash的API,但是速度太慢了,简直受不了,本来打算搞一台国外服务器来中转,忽然发现可以利用Cloudflare的Worker来制作镜像站,Workers 每天有免费的 10 万次请求,个人使用绰绰有余了,还可以绑定自定义域名。</p>
<h2 id="创</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Cloudflare" scheme="https://blog.quickso.cn/tags/Cloudflare/"/>
<category term="Unsplash" scheme="https://blog.quickso.cn/tags/Unsplash/"/>
<category term="代理" scheme="https://blog.quickso.cn/tags/%E4%BB%A3%E7%90%86/"/>
</entry>
<entry>
<title>群晖系统安全设置禁止所有外国IP访问 添加网络威胁黑名单</title>
<link href="https://blog.quickso.cn/2023/12/12/%E7%BE%A4%E6%99%96%E7%B3%BB%E7%BB%9F%E5%AE%89%E5%85%A8%E8%AE%BE%E7%BD%AE%E7%A6%81%E6%AD%A2%E6%89%80%E6%9C%89%E5%A4%96%E5%9B%BDIP%E8%AE%BF%E9%97%AE%E6%B7%BB%E5%8A%A0%E7%BD%91%E7%BB%9C%E5%A8%81%E8%83%81%E9%BB%91%E5%90%8D%E5%8D%95/"/>
<id>https://blog.quickso.cn/2023/12/12/%E7%BE%A4%E6%99%96%E7%B3%BB%E7%BB%9F%E5%AE%89%E5%85%A8%E8%AE%BE%E7%BD%AE%E7%A6%81%E6%AD%A2%E6%89%80%E6%9C%89%E5%A4%96%E5%9B%BDIP%E8%AE%BF%E9%97%AE%E6%B7%BB%E5%8A%A0%E7%BD%91%E7%BB%9C%E5%A8%81%E8%83%81%E9%BB%91%E5%90%8D%E5%8D%95/</id>
<published>2023-12-12T03:19:13.000Z</published>
<updated>2024-11-23T13:12:18.439Z</updated>
<content type="html"><![CDATA[<p>群晖系统本身的安全设置能隔绝多数网络威胁,通过简单的设置只要不瞎搞基本能安全无忧!</p><p>注:本文内容大部分来自 无尽光芒 的 “群晖系统安全设置”PDF文档,暂未找到具体出处网址。</p><h1 id="一、群晖的基本安全设置修改"><a href="#一、群晖的基本安全设置修改" class="headerlink" title="一、群晖的基本安全设置修改"></a>一、群晖的基本安全设置修改</h1><h2 id="1、禁用admin账户"><a href="#1、禁用admin账户" class="headerlink" title="1、禁用admin账户"></a>1、禁用admin账户</h2><p>DSM7默认就是禁用admin作为管理员账户的,如实DSM6或者升级到7的可以新建管理员后再禁用admin</p><p><img src="https://i.imnks.com/2022/10/2584009654.png!I" alt="2584009654.png" title="2584009654.png"></p><h2 id="2、使用高强度密码"><a href="#2、使用高强度密码" class="headerlink" title="2、使用高强度密码"></a>2、使用高强度密码</h2><p><img src="https://i.imnks.com/2022/10/1104970198.png!I" alt="1104970198.png" title="1104970198.png"></p><h2 id="3、修改等候超时"><a href="#3、修改等候超时" class="headerlink" title="3、修改等候超时"></a>3、修改等候超时</h2><p>默认是网页上15分钟没操作自动退出登录,按需修改,时间太短会影响使用体验</p><p><img src="https://i.imnks.com/2022/10/2587833162.png!I" alt="2587833162.png" title="2587833162.png"></p><h2 id="4、开启双重验证"><a href="#4、开启双重验证" class="headerlink" title="4、开启双重验证"></a>4、开启双重验证</h2><p>DSM7的双重验证支持OPT验证码(Synology Secure SignIn或者Google Authenticator)</p><p>也支持硬件安全秘钥(x86机型才有),比如USB秘钥类(Fido2)的YubiKey、飞天Key</p><p><img src="https://i.imnks.com/2022/10/2296208027.png!I" alt="2296208027.png" title="2296208027.png"></p><p><img src="https://i.imnks.com/2022/10/906380087.png!I" alt="906380087.png" title="906380087.png"></p><h2 id="5、关闭SHH访问"><a href="#5、关闭SHH访问" class="headerlink" title="5、关闭SHH访问"></a>5、关闭SHH访问</h2><p>如确实需要使用,修改默认的22端口为10000以上的端口,并使用后及时关闭!</p><p><img src="https://i.imnks.com/2022/10/570795422.png!I" alt="570795422.png" title="570795422.png"></p><h2 id="6、对外端口映射"><a href="#6、对外端口映射" class="headerlink" title="6、对外端口映射"></a>6、对外端口映射</h2><p>如有公网IP在路由器端口映射时对外不要使用默认的5000、5001、5005、5006、6690等!对外依旧建议10000以上的端口</p><p><img src="https://i.imnks.com/2022/10/2129729179.png!I" alt="2129729179.png" title="2129729179.png"></p><h2 id="7、关闭root账户"><a href="#7、关闭root账户" class="headerlink" title="7、关闭root账户"></a>7、关闭root账户</h2><p>非常不建议开启群晖的root账户,如必需用请修改为高强度的root密码,也可使用完毕后关闭!</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs css">synouser <span class="hljs-attr">--setpw</span> root qpzm<span class="hljs-keyword">@1639</span>&IMNKS.COM<br></code></pre></td></tr></table></figure><p>或者直接关闭root登录</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs swift">sed <span class="hljs-operator">-</span>i 's<span class="hljs-regexp">/PermitRootLogin yes/</span>#<span class="hljs-type">PermitRootLogin</span> prohibit<span class="hljs-operator">-</span>password<span class="hljs-regexp">/g' /</span>etc<span class="hljs-regexp">/ssh/</span>sshd_config<br></code></pre></td></tr></table></figure><h1 id="二、配置防火墙禁止国外IP"><a href="#二、配置防火墙禁止国外IP" class="headerlink" title="二、配置防火墙禁止国外IP"></a>二、配置防火墙禁止国外IP</h1><h2 id="1、启用防火墙"><a href="#1、启用防火墙" class="headerlink" title="1、启用防火墙"></a>1、启用防火墙</h2><p><img src="https://i.imnks.com/2022/10/208038144.png!I" alt="208038144.png" title="208038144.png"></p><h2 id="2、编译配置文件default"><a href="#2、编译配置文件default" class="headerlink" title="2、编译配置文件default"></a>2、编译配置文件default</h2><p>新增防火墙规则,下面三个按需设置,设置禁止国外IP访问前 必需 先设置好 允许内网IP访问、允许中国IP!!!</p><h3 id="允许内网IP访问"><a href="#允许内网IP访问" class="headerlink" title="允许内网IP访问"></a>允许内网IP访问</h3><p>内网这个按照实际情况添加,如过多个IP段内网可以互访都要相应的加入,包括虚拟组网的IP段!</p><p><img src="https://i.imnks.com/2022/10/47474197.png!I" alt="47474197.png" title="47474197.png"></p><p>如何docker使用了bridge桥接网络,也需要添加到允许访问的名单内</p><p><img src="https://i.imnks.com/2022/10/1852161711.png!I" alt="1852161711.png" title="1852161711.png"></p><h3 id="允许中国IP访问-如果要外网只能访问特定端口,不要添加这个!"><a href="#允许中国IP访问-如果要外网只能访问特定端口,不要添加这个!" class="headerlink" title="允许中国IP访问(如果要外网只能访问特定端口,不要添加这个!)"></a>允许中国IP访问(如果要外网只能访问特定端口,不要添加这个!)</h3><p><img src="https://i.imnks.com/2022/10/799088048.png!I" alt="799088048.png" title="799088048.png"></p><h3 id="禁止国外IP访问(注意:排序永远是最后一个!)"><a href="#禁止国外IP访问(注意:排序永远是最后一个!)" class="headerlink" title="禁止国外IP访问(注意:排序永远是最后一个!)"></a>禁止国外IP访问(注意:排序永远是最后一个!)</h3><p><img src="https://i.imnks.com/2022/10/3105674518.png!I" alt="3105674518.png" title="3105674518.png"></p><p><img src="https://i.imnks.com/2022/10/3483480270.png!I" alt="3483480270.png" title="3483480270.png"></p><h1 id="三、添加网络威胁黑名单"><a href="#三、添加网络威胁黑名单" class="headerlink" title="三、添加网络威胁黑名单"></a>三、添加网络威胁黑名单</h1><p>东北大学网络威胁黑名单系统(已恢复访问) <a href="https://imnks.com/go/aHR0cDovL2FudGl2aXJ1cy5uZXUuZWR1LmNuL3NjYW4v">http://antivirus.neu.edu.cn/scan/</a></p><p>下载文本格式的黑名单导入群晖系统的封锁名单:<a href="https://imnks.com/go/aHR0cDovL2FudGl2aXJ1cy5uZXUuZWR1LmNuL3NzaC9saXN0cy9uZXUudHh0">http://antivirus.neu.edu.cn/ssh/lists/neu.txt</a></p><p><img src="https://i.imnks.com/2022/10/3367593950.png!I" alt="3367593950.png" title="3367593950.png"></p><p><img src="https://i.imnks.com/2022/10/3554383717.png!I" alt="3554383717.png" title="3554383717.png"></p><p><img src="https://i.imnks.com/2022/10/3523239348.png!I" alt="3523239348.png" title="3523239348.png"></p><h1 id="四、安全顾问扫描"><a href="#四、安全顾问扫描" class="headerlink" title="四、安全顾问扫描"></a>四、安全顾问扫描</h1><p><img src="https://i.imnks.com/2022/10/4132601483.png!I" alt="4132601483.png" title="4132601483.png"></p><p><img src="https://i.imnks.com/2022/10/182347195.png!I" alt="182347195.png" title="182347195.png"></p><p>本文来自<a href="https://imnks.com/6807.html">https://imnks.com/6807.html</a></p>]]></content>
<summary type="html"><p>群晖系统本身的安全设置能隔绝多数网络威胁,通过简单的设置只要不瞎搞基本能安全无忧!</p>
<p>注:本文内容大部分来自 无尽光芒 的 “群晖系统安全设置”PDF文档,暂未找到具体出处网址。</p>
<h1 id="一、群晖的基本安全设置修改"><a href="#一、群晖</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="群晖" scheme="https://blog.quickso.cn/tags/%E7%BE%A4%E6%99%96/"/>
<category term="安全" scheme="https://blog.quickso.cn/tags/%E5%AE%89%E5%85%A8/"/>
<category term="软路由" scheme="https://blog.quickso.cn/tags/%E8%BD%AF%E8%B7%AF%E7%94%B1/"/>
</entry>
<entry>
<title>CloudflareR2快速开始使用(白嫖)指南</title>
<link href="https://blog.quickso.cn/2022/07/28/CloudflareR2%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%E6%95%99%E7%A8%8B/"/>
<id>https://blog.quickso.cn/2022/07/28/CloudflareR2%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%E6%95%99%E7%A8%8B/</id>
<published>2022-07-28T15:27:47.000Z</published>
<updated>2024-11-23T13:12:18.412Z</updated>
<content type="html"><![CDATA[<h1 id="R2入门指南"><a href="#R2入门指南" class="headerlink" title="R2入门指南"></a>R2入门指南</h1><p>Cloudflare R2存储允许开发人员存储大量非结构化数据,而无需支付与典型云存储服务相关的昂贵出口带宽费用。</p><h2 id="购买R2"><a href="#购买R2" class="headerlink" title="购买R2"></a>购买R2</h2><p>在创建第一个存储桶之前,您必须在Cloudflare仪表板中购买R2。(使用易贝卡就可以)</p><p><img src="https://s2.loli.net/2022/07/28/gKb5GlkZDCcR1jQ.png"></p><p>购买R2:</p><ol><li>登录<a href="https://dash.cloudflare.com/">Cloudflare仪表板</a>。</li><li>在<strong>帐户主页中</strong>,选择<strong>R2</strong>。</li><li>选择<strong>购买R2计划</strong>。</li><li>选择<strong>继续查看付款详情</strong>以查看您的付款。</li><li>选择<strong>返回 R2</strong>以前往 R2 面板。</li></ol><p><img src="https://s2.loli.net/2022/07/28/28tQ4uCyqfhAnkD.png"></p><h2 id="R2-的配额限制"><a href="#R2-的配额限制" class="headerlink" title="R2 的配额限制"></a>R2 的配额限制</h2><p>在公测期间,R2 有如下的配额限制:</p><ul><li>每个账户可新建1000个存储桶</li><li>每个存储桶可存储无限个对象</li><li>每个对象大小最大5TB</li><li>单次最大上传大小5GB,可多次分段上传</li><li>每秒1000次的 A 类操作</li><li>每秒250次的 B 类操作</li></ul><p>A 类操作包括ListBuckets、PutBucket、ListObjects、PutObject、CopyObject、CompleteMultipartUpload、CreateMultipartUpload、UploadPart、UploadPartCopy</p><p>B 类操作包括HeadBucket、HeadObject和GetObject</p><p>免费操作包括DeleteObject、DeleteBucket、DeleteMultipartUpload</p><h2 id="R2-的收费价格"><a href="#R2-的收费价格" class="headerlink" title="R2 的收费价格"></a>R2 的收费价格</h2><p>R2 存储的价格要比目前的存储服务都低,有一部分免费额度,免费额度用完以后才开始计费:</p><ul><li>存储费用:每个月10GB免费额度,超出后每个月每 GB 收取 $0.015 的存储费用</li><li>A 类操作费用:每个月一百万次免费额度,超出后每百万次收取 $4.50 的操作费用</li><li>B 类操作费用:每个月一千万次免费额度,超出后每百万次收取 $0.36 的操作费用</li></ul><p>由上可见价格比现有的存储服务厂商低的多,AWS 的 S3 是不是瑟瑟发抖?</p><h2 id="创建存储桶"><a href="#创建存储桶" class="headerlink" title="创建存储桶"></a>创建存储桶</h2><p>点击创建-输入名称-提交就好了</p><p><img src="https://s2.loli.net/2022/07/28/5ln1ZIStivQWcMb.png" alt="image-20220728234636813"></p><h2 id="造个Workers访问你的桶"><a href="#造个Workers访问你的桶" class="headerlink" title="造个Workers访问你的桶"></a>造个Workers访问你的桶</h2><p>打开workers,创建一个workers服务</p><p>并填入下面的代码</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><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></pre></td><td class="code"><pre><code class="hljs javascript"><span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">"fetch"</span>, <span class="hljs-function"><span class="hljs-params">event</span> =></span> {<br> event.<span class="hljs-title function_">respondWith</span>(<span class="hljs-title function_">handleRequest</span>(event.<span class="hljs-property">request</span>))<br>})<br><br><span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleRequest</span>(<span class="hljs-params">request</span>) {<br> <span class="hljs-keyword">const</span> url = <span class="hljs-keyword">new</span> <span class="hljs-title function_">URL</span>(request.<span class="hljs-property">url</span>)<br> <span class="hljs-keyword">const</span> objectName = url.<span class="hljs-property">pathname</span>.<span class="hljs-title function_">slice</span>(<span class="hljs-number">1</span>)<br><br> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">`<span class="hljs-subst">${request.method}</span> object <span class="hljs-subst">${objectName}</span>: <span class="hljs-subst">${request.url}</span>`</span>)<br><br> <span class="hljs-keyword">if</span> (request.<span class="hljs-property">method</span> === <span class="hljs-string">'GET'</span> || request.<span class="hljs-property">method</span> === <span class="hljs-string">'HEAD'</span>) {<br> <span class="hljs-keyword">if</span> (objectName === <span class="hljs-string">''</span>) {<br> <span class="hljs-keyword">if</span> (request.<span class="hljs-property">method</span> == <span class="hljs-string">'HEAD'</span>) {<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-literal">undefined</span>, { <span class="hljs-attr">status</span>: <span class="hljs-number">400</span> })<br> }<br><br> <span class="hljs-keyword">const</span> options = {<br> <span class="hljs-attr">prefix</span>: url.<span class="hljs-property">searchParams</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'prefix'</span>) ?? <span class="hljs-literal">undefined</span>,<br> <span class="hljs-attr">delimiter</span>: url.<span class="hljs-property">searchParams</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'delimiter'</span>) ?? <span class="hljs-literal">undefined</span>,<br> <span class="hljs-attr">cursor</span>: url.<span class="hljs-property">searchParams</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'cursor'</span>) ?? <span class="hljs-literal">undefined</span>,<br> <span class="hljs-attr">include</span>: [<span class="hljs-string">'customMetadata'</span>, <span class="hljs-string">'httpMetadata'</span>],<br> }<br> <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(options))<br><br> <span class="hljs-keyword">const</span> listing = <span class="hljs-keyword">await</span> <span class="hljs-variable constant_">R2</span>.<span class="hljs-title function_">list</span>(options)<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(listing), {<br> <span class="hljs-attr">headers</span>: {<br> <span class="hljs-string">'content-type'</span>: <span class="hljs-string">'application/json; charset=UTF-8'</span>,<br> }<br> })<br> }<br><br> <span class="hljs-keyword">if</span> (request.<span class="hljs-property">method</span> === <span class="hljs-string">'GET'</span>) {<br> <span class="hljs-keyword">const</span> range = <span class="hljs-title function_">parseRange</span>(request.<span class="hljs-property">headers</span>.<span class="hljs-title function_">get</span>(<span class="hljs-string">'range'</span>))<br> <span class="hljs-keyword">const</span> object = <span class="hljs-keyword">await</span> <span class="hljs-variable constant_">R2</span>.<span class="hljs-title function_">get</span>(objectName, {<br> range,<br> <span class="hljs-attr">onlyIf</span>: request.<span class="hljs-property">headers</span>,<br> })<br><br> <span class="hljs-keyword">if</span> (object === <span class="hljs-literal">null</span>) {<br> <span class="hljs-keyword">return</span> <span class="hljs-title function_">objectNotFound</span>(objectName)<br> }<br><br> <span class="hljs-keyword">const</span> headers = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>()<br> <span class="hljs-comment">//object.writeHttpMetadata(headers)</span><br> headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'etag'</span>, object.<span class="hljs-property">httpEtag</span>)<br> <span class="hljs-keyword">const</span> status = object.<span class="hljs-property">body</span> ? (range ? <span class="hljs-number">206</span> : <span class="hljs-number">200</span>) : <span class="hljs-number">304</span><br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(object.<span class="hljs-property">body</span>, {<br> headers,<br> status<br> })<br> }<br><br> <span class="hljs-keyword">const</span> object = <span class="hljs-keyword">await</span> <span class="hljs-variable constant_">R2</span>.<span class="hljs-title function_">head</span>(objectName, {<br> <span class="hljs-attr">onlyIf</span>: request.<span class="hljs-property">headers</span>,<br> })<br><br> <span class="hljs-keyword">if</span> (object === <span class="hljs-literal">null</span>) {<br> <span class="hljs-keyword">return</span> <span class="hljs-title function_">objectNotFound</span>(objectName)<br> }<br><br> <span class="hljs-keyword">const</span> headers = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Headers</span>()<br> <span class="hljs-comment">//object.writeHttpMetadata(headers)</span><br> headers.<span class="hljs-title function_">set</span>(<span class="hljs-string">'etag'</span>, object.<span class="hljs-property">httpEtag</span>)<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-literal">null</span>, {<br> headers,<br> })<br> }<br> <span class="hljs-keyword">if</span> (request.<span class="hljs-property">method</span> === <span class="hljs-string">'PUT'</span> || request.<span class="hljs-property">method</span> == <span class="hljs-string">'POST'</span>) {<br> <span class="hljs-keyword">const</span> object = <span class="hljs-keyword">await</span> <span class="hljs-variable constant_">R2</span>.<span class="hljs-title function_">put</span>(objectName, request.<span class="hljs-property">body</span>, {<br> <span class="hljs-attr">httpMetadata</span>: request.<span class="hljs-property">headers</span>,<br> })<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-literal">null</span>, {<br> <span class="hljs-attr">headers</span>: {<br> <span class="hljs-string">'etag'</span>: object.<span class="hljs-property">httpEtag</span>,<br> }<br> })<br> }<br> <span class="hljs-keyword">if</span> (request.<span class="hljs-property">method</span> === <span class="hljs-string">'DELETE'</span>) {<br> <span class="hljs-keyword">await</span> <span class="hljs-variable constant_">R2</span>.<span class="hljs-title function_">delete</span>(url.<span class="hljs-property">pathname</span>.<span class="hljs-title function_">slice</span>(<span class="hljs-number">1</span>))<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>()<br> }<br><br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-string">`Unsupported method`</span>, {<br> <span class="hljs-attr">status</span>: <span class="hljs-number">400</span><br> })<br>}<br><br><span class="hljs-keyword">function</span> <span class="hljs-title function_">parseRange</span>(<span class="hljs-params">encoded</span>) {<br> <span class="hljs-keyword">if</span> (encoded === <span class="hljs-literal">null</span>) {<br> <span class="hljs-keyword">return</span><br> }<br><br> <span class="hljs-keyword">const</span> parts = encoded.<span class="hljs-title function_">split</span>(<span class="hljs-string">"bytes="</span>)[<span class="hljs-number">1</span>]?.<span class="hljs-title function_">split</span>(<span class="hljs-string">"-"</span>) ?? []<br> <span class="hljs-keyword">if</span> (parts.<span class="hljs-property">length</span> !== <span class="hljs-number">2</span>) {<br> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">'Not supported to skip specifying the beginning/ending byte at this time'</span>)<br> }<br><br> <span class="hljs-keyword">return</span> {<br> <span class="hljs-attr">offset</span>: <span class="hljs-title class_">Number</span>(parts[<span class="hljs-number">0</span>]),<br> <span class="hljs-attr">length</span>: <span class="hljs-title class_">Number</span>(parts[<span class="hljs-number">1</span>]) + <span class="hljs-number">1</span> - <span class="hljs-title class_">Number</span>(parts[<span class="hljs-number">0</span>]),<br> }<br>}<br><br><span class="hljs-keyword">function</span> <span class="hljs-title function_">objectNotFound</span>(<span class="hljs-params">objectName</span>) {<br> <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Response</span>(<span class="hljs-string">`<html><body>R2 object "<b><span class="hljs-subst">${objectName}</span></b>" not found</body></html>`</span>, {<br> <span class="hljs-attr">status</span>: <span class="hljs-number">404</span>,<br> <span class="hljs-attr">headers</span>: {<br> <span class="hljs-string">'content-type'</span>: <span class="hljs-string">'text/html; charset=UTF-8'</span><br> }<br> })<br>}<br></code></pre></td></tr></table></figure><p><img src="https://s2.loli.net/2022/07/28/VBOkt2biy34nMJg.png" alt="image-20220728234754964"></p><p>在worker首页的设置-变量-R2 存储桶绑定,编辑变量,新建一个,左侧变量名称填入R2,右侧选择你的R2存储桶,保存</p><p><img src="https://s2.loli.net/2022/07/28/nVqPZDXsezJYkAR.png" alt="image-20220728234959075"></p><p>2.默认情况下未指定路径,方式为get时会列出所有key,根据路径能下载文件<br>3.详细解析我将稍后贴出,之后会写在自己博客上,如果你看得懂那也可以自己看<br>4.这个脚本是能够进行A类操作,也就是可以修改/删除R2,如果只读的话请自行删除</p><h2 id="如何加速?"><a href="#如何加速?" class="headerlink" title="如何加速?"></a>如何加速?</h2><p>使用第三方CFCDN平台接入你的域名</p><p>例如<a href="https://cdn.wzfou.com/">面板 | CloudFlare CDN合作接入管理平台-挖站否 – (wzfou.com)</a></p><p>在worker首页的触发器-自定义域-添加你的域名</p><p><img src="https://s2.loli.net/2022/07/28/bmv2JMFSQUaWZVr.png" alt="image-20220728235535930"></p><p>就好了</p><h2 id="如何访问?"><a href="#如何访问?" class="headerlink" title="如何访问?"></a>如何访问?</h2><p>例如你上传了一个名为abc.jpg的文件</p><p>访问地址就为<a href="https://abc.com/abc.jpg">https://abc.com/abc.jpg</a></p><h2 id="附录"><a href="#附录" class="headerlink" title="附录"></a>附录</h2><p>workers.dev在我们伟大的祖国里被黑名单了,直连打不开属正常,建议使用特殊方法(绑定自己的域名加速,看上面的方法)</p>]]></content>
<summary type="html"><h1 id="R2入门指南"><a href="#R2入门指南" class="headerlink" title="R2入门指南"></a>R2入门指南</h1><p>Cloudflare R2存储允许开发人员存储大量非结构化数据,而无需支付与典型云存储服务相关的昂贵出口带宽</summary>
<category term="教程" scheme="https://blog.quickso.cn/categories/%E6%95%99%E7%A8%8B/"/>
<category term="Cloudflare" scheme="https://blog.quickso.cn/tags/Cloudflare/"/>
<category term="对象存储" scheme="https://blog.quickso.cn/tags/%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8/"/>
</entry>
</feed>