雨き声残響

Echo Of Rain

转移到 ActivityPub

最近也是不满意 Twitter 的各种变化,决定尝试自建一下 Mastodon 用
Twitter 被收购是各种黄推泛滥,开了蓝标还能置顶。环境是越来越差
之前有想过自己建立类似的社交平台,看到 MastodonMisskey 都是不错的选择

当然,如果只是想换到 ActivityPub 的分布式开放社交平台
无需自建,网上有很多实例,直接注册使用就能用了
当然,自己管理当然非常麻烦,维护需要时间还有成本,收益几乎没有
但之前有看到 Mastodon 可以在单用户模式下运行,觉得很有意思,想试一下

安装 Docker 和 Docker compose

如果已经安装过,请跳过该步骤

docker compose (Plugin) 请使用 docker compose 命令
docker-compose (Standalone) 请使用 docker-compose 命令

下文都以 插件(Plugin) 的形式为例,首先安装 Docker

1
2
3
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)
systemctl enable --now docker

安装 Docker compose

On Debian/Ubuntu systems:

1
2
apt update
apt install docker-compose-plugin

On Centos 7 systems:

1
2
yum update
yum install docker-compose-plugin

获取 Mastodon

获取 Mastodon 仓库,切换到稳定版本

1
2
git clone https://github.com/tootsuite/mastodon.git
cd mastodon && git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

按需求修改 docker-compose.yml
需要安装db,redis,es,web,streaming,sidekiq

dbPostgres数据库
esElasticsearch,全文搜索引擎,这是可选地
streaming组件是 Mastodon 的推送服务
sidekiq是 Mastodon 的后台任务处理队列

如果需要指定版本号,可以修改image后面的内容,默认都是可靠的稳定版本
如果端口有被占用,可以修改ports,

例如我这边3000端口已被使用,换成了3001,注意只需要改动第一个:后面的端口即可

1
2
ports:
- '127.0.0.1:3001:3000'

复制env文件

1
cp .env.production.sample .env.production

配置 Mastodon

使用 docker compos 安装

1
docker compose build

可以使用mastodon:setup生成一些必要的配置
根据交互提示填写完成后,必要信息会输出到终端中,请再编辑.env.production文件
把生成的一些配置修改进去

1
docker compose run --rm web bundle exec rake mastodon:setup

如果 enable single user mode 那这个示例就无法注册,首页也会变成你的 Timeline
Docker安装时,PostgreSQL /Redishost,分别是 db / redis

PostgreSQL的默认用户名是postgres,密码直接回车。第一次配置时候回提示导入数据,选y即可
SMTP请根据实际情况填写,可以参考我之前自己SMTP服务器的文章
Save configuration请选择 y,配置文件不会自动保存
最后会提示创建 Admin 用户,根据提示输入用户和邮箱。之后也可以单独创建

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
# root @ Alice in ~/mastodon on git:v4.2.1 x [16:43:01] 
$ docker compose run --rm web bundle exec rake mastodon:setup
[+] Creating 2/0
✔ Container mastodon-db-1 Running 0.0s
✔ Container mastodon-redis-1 Running 0.0s
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: m.abyss.moe

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? yes

Are you using Docker to run Mastodon? Yes

PostgreSQL host: db
PostgreSQL port: 5432
Name of PostgreSQL database: postgres
Name of PostgreSQL user: postgres
Password of PostgreSQL user:
Database configuration works! 🎆

Redis host: redis
Redis port: 6379
Redis password:
Redis configuration works! 🎆

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? No
SMTP server: smtp.mailgun.org
SMTP port: 587
SMTP username:
SMTP password:
SMTP authentication: plain
SMTP OpenSSL verify mode: peer
Enable STARTTLS: always
E-mail address to send e-mails "from": Mastodon <notifications@m.abyss.moe>
Send a test e-mail with this configuration right now? no

Do you want Mastodon to periodically check for important updates and notify you? (Recommended) Yes

This configuration will be written to .env.production
Save configuration? Yes
Below is your configuration, save it to an .env.production file outside Docker:

示例生成的配置,仅供参考
配置文件不会自动保存,请手动编辑.env.production写入配置

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
# Generated with mastodon:setup on 2023-12-02 08:43:45 UTC

# Some variables in this file will be interpreted differently whether you are
# using docker compose or not.

LOCAL_DOMAIN=m.abyss.moe
SINGLE_USER_MODE=true
SECRET_KEY_BASE=25ecdbe5ea7b142e3fd3fb7433a3dbe5b3bb3dab88d73181b6afbccce54238f2072f8a8a3e439279881d47c7b02d67ac259d5dcd9667c5b8e13ba5bcd291dd3c
OTP_SECRET=39b8b295a98b0c04a332554246891ebf813555ea7e8a5448581ffe2435db2f4354e05d270a428f075006bf23efb3574f720437e177a8d49ec39bb234ae069ce4
VAPID_PRIVATE_KEY=nDZtWvht7dlh5E5WI7RgjpXjakqpX4cWOysbu4Lv0js=
VAPID_PUBLIC_KEY=BM8R9sO6nijQKEoW2XSmMoBdCNnb4wuuPuTZqVazZR5ThhVjpTzMS4ll4_HbrBSsqnfeJ2VDO9E88ffTqj0Q8U4=
DB_HOST=db
DB_PORT=5432
DB_NAME=postgres
DB_USER=postgres
DB_PASS=
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=peer
SMTP_ENABLE_STARTTLS=always
SMTP_FROM_ADDRESS=Mastodon <notifications@m.abyss.moe>

将容器跑起来

1
docker compose up -d

配置 Nginx

如果没有Nginx,使用包管理安装一下,例如 Ubuntu

1
apt install nginx -y

复制配置到Nginx的sites-available内

1
2
cp dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

然后编辑它,以下内容比较重要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 两个 server_name 都要修改
server_name example.com;

# 请换成 mastodon 目录的 public 路径
root /home/mastodon/live/public;

# 稍后会生成 SSL 证书,生成后需要替换证书路径
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# 如果安装时,你的 mastodon web/streaming 端口改了,清把下面端口也替换
location @proxy {
proxy_pass http://127.0.0.1:4000;
}

证书生成方式有很多种,这里以 acme.sh + dnsapi + cloudflare 举例
使用 acme.sh 生成SSL证书,DNS APi 可以参考 acme.sh wiki

获取 acme.sh

1
curl https://get.acme.sh | sh -s email=my@example.com

得到证书

1
2
3
4
export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="alice@example.com"

acme.sh --issue --dns dns_cf -d abyss.moe -d '*.abyss.moe'

成功的话,把 cert key 和 full chain 的路径配置到 Nginx 中

1
2
3
4
[Wed Nov  9 18:39:24 CST 2022] Your cert is in  /usr/local/nginx/conf/ssl/abyss.moe/abyss.moe.cer 
[Wed Nov 9 18:39:24 CST 2022] Your cert key is in /usr/local/nginx/conf/ssl/abyss.moe/abyss.moe.key
[Wed Nov 9 18:39:24 CST 2022] The intermediate CA cert is in /usr/local/nginx/conf/ssl/abyss.moe/ca.cer
[Wed Nov 9 18:39:24 CST 2022] And the full chain certs is there: /usr/local/nginx/conf/ssl/abyss.moe/fullchain.cer

需要给public目录写入/读取权限,不然无法上传图片等,最后重新载入Nginx

1
2
sudo chown -R 991:991 public/system
nginx -s reload

配置好DNS解析后,访问你配置的域名,应该能看主页
如果出现错误,请确认 docker containers logs,根据web容器的错误排查
一般是你的配置文件有误导致的,修改.env.production后,再使用docker compose up -d重建

其他

上面步骤应该能完成全部配置,这里另外给出一些命令参考

创建管理员账号

1
2
docker compose exec web bash
tootctl accounts create --role Admin --email EMAIL --confirmed USERNAME

指定管理员

1
2
docker compose exec web bash
tootctl accounts modify USERNAME --role Admin

登录、创建数据库

1
2
docker compose up -d db 
docker compose exec db bash
1
2
3
4
5
6
7
psql -U postgres
postgres=# CREATE USER mastodon_user;
CREATE ROLE
postgres=# alter role mastodon_user with password 'password';
ALTER ROLE
postgres=# create database mastodon_db with owner=mastodon_user;
CREATE DATABASE

初始化数据库和表

1
docker compose run --rm web bundle exec rake db:migrate

参考资料 (Reference)

MastodonをDockerでsetupする:

https://zenn.dev/pluie/articles/20230212-mastodon-setup

Mastodon Docker Setup:

https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4

  • 「ライザのアトリエ3」旅人の見聞録の場所・入手方法一覧
  • 「萊莎的煉金工房3」全部見聞録地點・獲得方法一覧

Special thanks: kk (kello820), hafu (ErisFloralia)

庫肯島周邊地區 (クーケン島周辺地域)

01 斯托特家回憶錄 02 拉森地區的寶藏 03 島外緣農場的寶藏
04 羅德士瓦瑟之謎 05 某位父親遺忘的東西 06 資產家的日記
07 某位自警隊員的日誌 08 庫肯港的寶藏 09 柯克群島的強者
10 夢想發財的旅人手札 11 柯克群島的素材 12 柯克群島的特殊力量
13 柯克群島的寶藏1 14 柯克群島的寶藏2 15 柯克群島的調查錄
16 不知名的觀察記錄1 17 通往廢村入口的寶藏 18 山路宅邸的調查報告
19 不知名的觀察記錄2 20 商人留下的潦草字跡 21 中央拉姆平原的強者
22 進入森林時的注意事項 23 樹間遺跡的特殊力量 24 甜食愛好的喜悅
25 流水洞窟的特殊力量 26 追夢海兵的素材 27 枯朽城址的寶藏
28 老舊的歷史書籍 29 白煙山道的強者 30 研究者的筆記

克萊利亞地區 (クレリア地方)

31 薩多尼卡的興起1 32 販售工藝品注意事項 33 藝術工匠街的寶藏
34 薩多尼卡的興起2 35 魔石結晶礦山的特殊力量1 36 工藝品的流通1
37 魔石結晶礦山的特殊力量2 38 魔石結晶礦山的素材 39 魔石結晶礦山的寶藏
40 邁向和解的道路 41 工藝品的流通2 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 奏波流傳的童謠

Map 1

01 斯托特家回憶錄 (シュタウト家思い出帳)


02 拉森地區的寶藏 (ラーゼン地区の宝)


03 島外緣農場的寶藏 (島外れの農場の宝)


04 羅德士瓦瑟之謎 (ロテスヴァッサの謎 )

ノーマルクエスト:イノベーションを求めて
一般任務:尋求革新

05 某位父親遺忘的東西 (とある父親の忘れ物)


06 資產家的日記 (資産家の日記)


07 某位自警隊員的日誌 (ある護り手の日誌)


08 庫肯港的寶藏 (クーケン港の宝)

ノーマルクエスト:イノベーションを求めて2
一般任務:尋求革新2

09 柯克群島的強者 (カーク群島の強者)

ノーマルクエスト:群島出現の弊害
一般任務:群島出現造成的負面影響

10 夢想發財的旅人手札 (夢見る旅人の手記)


11 柯克群島的素材 (カーク群島の素材)


12 柯克群島的特殊力量 (カーク群島の特別な力)


13 柯克群島的寶藏1 (カーク群島の宝1)

ノーマルクエスト:ロミィの嗅覚
一般任務:羅密的嗅覺

14 柯克群島的寶藏2 (カーク群島の宝2)


15 柯克群島的調查錄 (カーク群島調査録)


16 不知名的觀察記錄1 (何かの観察記録1)


17 通往廢村入口的寶藏 (廃村への入り口の宝)

ノーマルクエスト:迷子を捜せ
一般任務:尋找迷路的小孩

18 山路宅邸的調查報告 (峠の邸宅調査書)


19 不知名的觀察記錄2 (何かの観察記録2)


20 商人留下的潦草字跡 (商人が残した走り書き)


21 中央拉姆平原的強者 (中央ライム平原の強者)


22 進入森林時的注意事項 (森に入る際の注意)


23 樹間遺跡的特殊力量 (林間遺跡の特別な力)


24 甜食愛好的喜悅 (甘いもの好きの喜び)


25 流水洞窟的特殊力量 (流水洞窟の特別な力)

ノーマルクエスト:古城の魔物退治
一般任務:擊退古城的魔物

26 追夢海兵的素材 (夢追い浜の素材)


27 枯朽城址的寶藏 (朽ちた城跡の宝)


28 老舊的歷史書籍 (古ぼけた歴史書)


29 白煙山道的強者 (白煙山道の強者)

ノーマルクエスト:ライザの手も借りたい
一般任務:忙到想借助萊莎的力量

30 研究者的筆記 (研究者のメモ)


Map 2

31 薩多尼卡的興起1 (サルドニカ成立記1)


32 販售工藝品注意事項 (工芸品販売の注意事項)


33 藝術工匠街的寶藏 (アルティスタ職人街の宝)

ノーマルクエスト:新しくて貴重~~~~~な素材
一般任務:嶄新又貴~~~~重的素材

34 薩多尼卡的興起2 (サルドニカ成立記2)


35 魔石結晶礦山的特殊力量1 (魔石結晶の鉱山の特別な力1)

ノーマルクエスト:露店街の経営者を連れ戻して
一般任務:把市場經營者帶回來

36 工藝品的流通1 (工芸品の流通1)


37 魔石結晶礦山的特殊力量2 (魔石結晶の鉱山の特別な力2)

ノーマルクエスト:露店街の目玉作り
一般任務:推出市場的招牌商品

38 魔石結晶礦山的素材 (魔石結晶の鉱山の素材)


39 魔石結晶礦山的寶藏 (魔力結晶の鉱山の宝)


40 邁向和解的道路 (融和への道のり)


41 工藝品的流通2 (工芸品の流通2)


42 魔石結晶礦山的強者 (魔石結晶の鉱山の強者)


43 致工頭 (親方へ)


44 給同行的掛號信 (同業者に向けた書留)


45 克萊莉亞港的特殊力量 (クレリア港の特別な力)


46 休憩大橋的寶藏 (憩いの大橋の宝)


47 流瀑坡道的特殊力量 (滝下りの坂の特別な力)

ノーマルクエスト:街道の小悪魔
一般任務:街道的小惡魔

48 南方森林的相關記錄 (南方の森に関する記録)


49 晶光遺址的強者 (晶光の跡地の強者)


50 第二次討伐隊的報告 (第二回討伐隊報告書)


Map 3

51 使用機械的注意事項 (機具の扱いに関して)


52 弗雷周邊地區強者 (フォウレ周辺地域の強者)


53 弗雷周邊地區的寶藏 (フォウレ周辺地域の宝)

ノーマルクエスト:フォウレで話題の何でも屋
一般任務:在弗雷掀起話題的萬能小幫手

54 禁止進入的遺跡 (遺跡への立ち入り禁止)


55 修驗者給採種人的通知 (験者より種拾いへ通達)


56 村裡的神木 (里のご神木)


57 弗雷周邊地區的特殊力量 (フォウレ周辺地域の特別な力)


58 弗雷周邊地區的素材 (フォウレ周辺地域の素材)

ノーマルクエスト:くだらない痴話喧嘩
一般任務:く無聊的情侶吵架

59 修驗者與見習生 (験者と見習い)


60 巨瀑頂峰的強者 (大滝流れる尖峰の強者)


61 弗雷的教誨 (フォウレの教え)


62 濕地的來歷 (湿地帯の成り立ち)


63 黃金花籃的保障 (こがねの花籠の宝)


64 年輕人與採種脫節 (若者の種拾い離れ)


65 朝聖緩坡的寶藏 (巡礼の裾野の宝)

ノーマルクエスト:放牧地を守れ2
一般任務:保護牧場房屋2

66 弗雷利刃 (フォウレの刃)


67 蜿蜒上坡路的素材 (うねりの登坂路の素材)


68 寂靜神殿遺跡的寶藏 (静かなる神殿跡の宝)


69 變模糊的部分碑文 (薄れゆく碑文の一部)


70 九霄庭院的寶藏 (九霄の庭園の宝)


Map 4

71 改善糧食問題 (食料事情の改善)


需要完成世界任務才可以進入,破壞BOSS身後的桶子
ワールドクエストBOOSの後ろにあるタルを壊す

72 奏波的歷史 (奏波の歴史)


73 溫德爾周邊地區的特殊力量 (ウィンドル周辺地域の特別な力)


74 溫德爾周邊地區的素材 (ウィンドル周辺地域の素材)

ノーマルクエスト:フィルフサの巣駆除のプロ
一般任務:清除弗爾弗薩巢穴的專家

75 溫德爾周邊地區的寶藏 (ウィンドル周辺地域の宝)


76 嚮導參拜道的寶藏 (導者の参道の宝)


77 欧兰族商人的日记 (オーレン族商人の日記)


78 通往祭場道路的寶藏 (斎場へと続く道の宝)

ノーマルクエスト:人間の世界の花を咲かせよう
一般任務:讓人類世界的花朵綻開

79 某戰士的檄文 (ある戦士の激励文)


80 奏波流傳的童謠 (奏波に伝わるわらべ歌)


关于 Mailcow

dockerized - 🐮 + 🐋 = 💕
Mailcow是使用Docker部署的邮件服务应用

Github上提供了完整的 Demo, 自行部署前体验一下也是没问题的
Demo Administrator: admin / moohoo

部署步骤可以参考 Github 上的 Documentation, 由于基于docker, 部署起来也并不复杂

mailcow/mailcow-dockerized

mailcow: dockerized - 🐮 + 🐋 = 💕

事前准备

Mailcow还是很吃配置的, 在部署之前, 我们先确认服务器是否符合要求
参考文档:https://docs.mailcow.email/prerequisite/

Minimum System Resources

首先是服务器硬件,文档给出的推荐内存是6GB, 所以推荐在 4G RAM 以上部署
RAM 不够的话只能禁用些组件了,禁用ClamAV and Solr可以节约使用内存

Resource mailcow: dockerized
CPU 1 GHz
RAM Minimum 6 GiB + 1 GiB swap (default config)
Disk 20 GiB (without emails)
System Type x86_64

OpenVZ, Virtuozzo and LXC 虚拟化的VPS是无法部署的

Supported OS

在主流服务器操作系统上都没问题

✅ Centos 7
✅ Debian 10, 11
✅ Ubuntu 18.04, 20.04, 22.04
⚠️ Alpine 可能有些功能会不兼容

Firewall & Ports

需要使用的端口有:25|80|110|143|443|465|587|993|995|4190

可以使用下面命令检查, 如果没有输出就是端口处于空闲状态
被占用的话,可以之后改配置文件, 如果已经装了web服务器, 例如Nginx, 之后可以反向代理

1
2
3
ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
# or:
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

另外有些服务商会封锁 Outbound SMTP (出方向为25端口)的流量
比如AWS,Oracle,Azure,GCP,Vultr等, 你需要先和服务器运营商联系, 解除限制

检查 Outbound SMTP 是否畅通可以使用telnet, 看到Connected没问题
需要退出telnet请按CTRL+]然后输入quit

1
2
3
4
5
6
$ telnet mx1.qq.com 25

Trying 162.62.116.184...
Connected to mx1.qq.com.
Escape character is '^]'.
220 newxmmxszc3-2.qq.com MX QQ Mail Server.

配置DNS 信息

在安装前我们先配置DNS, 因为这可能要过一会生效
官网文档也给出了参考配置

${MAILCOW_HOSTNAME}是你的邮件服务器域名, 例如mail.psray.net, 最少需要配置4个DNS记录

1
2
3
4
5
# Name              Type       Value
mail IN A 1.2.3.4
autodiscover IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})
autoconfig IN CNAME mail.example.org. (your ${MAILCOW_HOSTNAME})
@ IN MX 10 mail.example.org. (your ${MAILCOW_HOSTNAME})

还有域名的SPF记录, 注意新增时候请不要选SPF类型

1
2
# Name              Type       Value
@ IN TXT v=spf1 mx a -all

另外还可以添DKIM,DMARC,rDNS记录, 这里就不配置了

安装

Docker & Docker Compose

首先安装DockerDocker Compose, 如果已经安装了可以跳过

1
2
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker

接着安装Docker Compose

1
2
3
4
5
6
7
## On Debian/Ubuntu systems:
apt update
apt install docker-compose-plugin

## On Centos 7 systems:
yum update
yum install docker-compose-plugin

Github上clone代码, 安装mailcow时, 请确认你使用的用户umask022

1
2
3
$ su
# umask
0022 # <- Verify it is 0022
1
2
3
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

初始化 mailcow

输入 mail servers hostname (FQDN), 例如mail.psray.net
设置 Timezone (时区), 例如Asia/Tokyo
最后的 Available Branches, 选1就行, nightly branch是开发版本

1
./generate_config.sh

配置 mailcow, 编辑文件mailcow.conf, 根据自己的实际情况修改即可
由于我的机器上已经有Web服务器Nginx了,所以我把HTTP_PORTHTTPS_PORT改了下

1
nano mailcow.conf

启动 mailcow

如果最后一步报错请根据错误信息排查

1
2
docker compose pull
docker compose up -d

比如我机器上的exim4占用了25端口,可以使用systemctl禁用它

用浏览器打开 https://MAILCOW_HOSTNAME:HTTPS_PORT (如果你没改配置文件的话, 不用指定额外端口)
你应该能正常看到Web UI才对, 默认的用户名和密码是admin,moohoo

默认生成的证书文件在安装目录下的 data/assets/ssl/
用已有的替换它或者用acme生成新的证书后, 再重新执行docker compose up -d即可
像我打算用Nginx反向代理, 上面证书可以不用管了。这边贴出Nginx配置文件中比较重要部分


server_name记得加上autoconfig,autodiscover, MAILCOW_HOSTNAME替换成你的邮件服务器域名
记得把proxy_pass的端口改成的mailcowhttp端口
官方文档内还有更多示例和说明, 比如Apache,HAProxy,Traefik ,Caddy的配置

1
server_name MAILCOW_HOSTNAME autodiscover.* autoconfig.*;
1
2
3
4
5
6
7
8
9
10
11
12
13
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 0;
# The following Proxy Buffers has to be set if you want to use SOGo after the 2022-04 (April 2022) Update
# Otherwise a Login will fail like this: https://github.com/mailcow/mailcow-dockerized/issues/4537
proxy_buffer_size 128k;
proxy_buffers 64 512k;
proxy_busy_buffers_size 512k;
}

接着回到Web UI, 配置域名, 在Configuration->Mail Setup->Domains, 添加域名并重启

切换到邮箱选项卡, 添加一个新的邮箱, 比如admin@psray.net
mailcow使用SOGo作为Webmail UI, 在右上方菜单, Apps->Webmail,即可进入SOGo

默认端口

mailcow使用的默认端口如下, 如果需要使用第三方邮件客户端时, SMTPIMAP服务器地址都填写MAILCOW_HOSTNAME即可
SMTP: STARTTLS->587, SSL/TLS->465
IMAP: STARTTLS->143, SSL/TLS->993 (比起POP3, 推荐使用IMAP)

Service Protocol Port Container Variable
Postfix SMTP TCP 25 postfix-mailcow ${SMTP_PORT}
Postfix SMTPS TCP 465 postfix-mailcow ${SMTPS_PORT}
Postfix Submission TCP 587 postfix-mailcow ${SUBMISSION_PORT}
Dovecot IMAP TCP 143 dovecot-mailcow ${IMAP_PORT}
Dovecot IMAPS TCP 993 dovecot-mailcow ${IMAPS_PORT}
Dovecot POP3 TCP 110 dovecot-mailcow ${POP_PORT}
Dovecot POP3S TCP 995 dovecot-mailcow ${POPS_PORT}
Dovecot ManageSieve TCP 4190 dovecot-mailcow ${SIEVE_PORT}
HTTP(S) TCP 80/443 nginx-mailcow ${HTTP_PORT} / ${HTTPS_PORT}

其他

需要更新 Mailcow 时,运行目录下的更新脚本即可

1
./update.sh

卸载

1
docker compose down -v --rmi all --remove-orphans

备份或还原数据库, 使用目录下的helper-scripts脚本即可

1
helper-scripts/backup_and_restore.sh

另外除了SPF记录, 还可以创建DKIM,DMARCDNS记录, 增加你的邮件友好度

1
2
3
4
5
# Name              Type       Value
dkim._domainkey IN TXT "v=DKIM1; k=rsa; t=s; s=email; p=..."

# Name Type Value
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org"

SRV记录(非必须)

1
2
3
4
5
6
7
8
9
10
11
12
13
# Name              Type       Priority Weight Port    Value
_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_caldavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_caldavs._tcp IN TXT "path=/SOGo/dav/"
_carddavs._tcp IN SRV 0 1 443 mail.example.org. (your ${MAILCOW_HOSTNAME})
_carddavs._tcp IN TXT "path=/SOGo/dav/"
_imap._tcp IN SRV 0 1 143 mail.example.org. (your ${MAILCOW_HOSTNAME})
_imaps._tcp IN SRV 0 1 993 mail.example.org. (your ${MAILCOW_HOSTNAME})
_pop3._tcp IN SRV 0 1 110 mail.example.org. (your ${MAILCOW_HOSTNAME})
_pop3s._tcp IN SRV 0 1 995 mail.example.org. (your ${MAILCOW_HOSTNAME})
_sieve._tcp IN SRV 0 1 4190 mail.example.org. (your ${MAILCOW_HOSTNAME})
_smtps._tcp IN SRV 0 1 465 mail.example.org. (your ${MAILCOW_HOSTNAME})
_submission._tcp IN SRV 0 1 587 mail.example.org. (your ${MAILCOW_HOSTNAME})

最后找个Mail-tester,MX Toolbox之类工具看看配置是否正确, 就可以愉快的使用了

之前由于 Oracle 的 ARM 机器实在是太难开了,使用了个脚本配合 Oracle API 来创建新机器
大概过了半年我才想起这事情,今天登录账号看一下确实开出了一台24G内存的ARM机器
但是由于换了PC,我把之前的登录key弄丢了,这里记录一下重置的方法

需要把丢了秘钥的机器的引导硬盘分离,挂载到另一台机器上,所以你需要2台机器
需要改秘钥的机器A,临时用于挂载硬盘的机器B

先在机器的管理面板把机器A停止运行,在资源菜单,选择引导卷,把引导卷分离

在机器B,资源菜单中,附加的块存储卷,把刚刚分离的机器A的启动卷挂在上
选好要附加的硬盘,其他保持默认即可

附加成功后,点击iSCSI 命令和信息

复制连接的命令信息

在控台挂载后,还需要SSH连接到机器B,运行这些连接命令

使用fdisk看下挂载的信息,第二块硬盘应该是sdb

1
fdisk -l /dev/sdb

使用mount命令挂载 (请根据实际情况修改要挂载的分区sdb1)

1
sudo mount /dev/sdb1 /mnt

挂载好后就可以修改公钥了(请根据实际情况修改用户名opc)

1
sudo vi /mnt/home/opc/.ssh/authorized_keys

接触挂载,并运行iSCSI的断开连接的命令

1
umount /mnt

最后按之前的步骤反向操作。分离附加的块存储卷,将引导挂载回去即可

投奔 ESXI

用了超过4个月PVE 7,还是遇到了诸多问题
一个是PVE毫无规则自动重启,日志上也没有留下什么线索.并且这个故障在两个月后莫名其妙好了..
另一个是有台Windows虚拟机自动断网,只有在控制台重启才能恢复,不定时发生.尚未解决

这次也是准备花点时间,把虚拟机迁移到其他平台

使用 qemu-img 转换虚拟机硬盘文件

迁移前还是要备份下虚拟机,PVE内置的备份可以生成 VMA文件 (Proxmox Virtual Machine Archive)
备份在目录/var/lib/vz/images下,PVE的web端并没有提供下载,可以ssh进入PVE进行导出操作
备份后的文件,可以通过vma命令转换成raw.如果你备份时候选择了压缩,请先使用zstd解压

使用ssh连接到PVE上

1
2
3
4
5
6
7
8
9
10
usage: vma command [command options]

vma list <filename>
vma config <filename> [-c config]
vma create <filename> [-c config] pathname ...
vma extract <filename> [-r <fifo>] <targetdir>
vma verify <filename> [-v]


root@shirobako:vma extract vzdump-qemu-100-2022_03_21-14_00_20.vma extract

转换后,你可以得到一个raw后缀的磁盘文件.接下来要是用qemu-img转换

1
2
3
4
5
6
qemu-img convert [--object objectdef] [--image-opts] [--target-image-opts] [--target-is-zero] [--bitmaps] [-U] [-C] [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-B backing_file] [-o options] [-l snapshot_param] [-S sparse_size] [-r rate_limit] [-m num_coroutines] [-W] [--salvage] filename [filename2 [...]] output_filename

## 指定文件,原格式,目标格式,路径即可
## qemu-img convert -f <原格式> -O <目标格式> <原文件路径> <目标文件路径>

root@shirobako:/var/lib/vz/dump# qemu-img convert -f raw -O vmdk disk-drive-sata0.raw vm100-1.vmdk

得到vmdk文件后,你可以导入VMware作为虚拟机的虚拟硬盘了

将虚拟磁盘导入 ESXI

要导入 VMware Workstation 的话,在选择磁盘的时候
选择现有磁盘,然后选择转换好的vmdk文件

要导入ESXI的话,需要把vmdk文件上传,在数据存储浏览器里,上传vmdk文件

在ESXI中新建虚拟机,前面三步骤正常选择
在详细配置的时候,删除默认的硬盘,在菜单中添加一个新的硬盘

这里还要注意下,我在PVE的 SCSI Controller Type里选择是 VirtIO SCSI
但是导入后我无论选择 SCSI控制器还是SATA控制器都启动不了,只能使用IDE控制器

完成创建后启动试试,如果能正常开启虚拟机就没问题了

1️⃣ 文中涉及到的商品均为自费购买.不含任何推广行为.如果是免费获的,均会在开头说明
2️⃣ 非技术向开箱记录,可能用词不专业/思考角度不对见谅..

Intro

本次开箱的是QNAP TS-873A 8G,一台威联通NAS
作为2021发布的新品,使用了 AMD Ryzen V1500B 作为 CPU.
同价位8盘位的Synology DS1821+也是用了这颗U,但是默认4G内存,而且没有2.5G板载网卡.这次还是选择了威联通
这次双十一叠加优惠后到手6000CNY左右

Unboxing

外包装纸盒

这次买的国行版本,箱内有NAS本体,国内电源线,RJ45网线,保修卡和说明书,硬盘螺丝和硬盘槽钥匙

正面硬盘插槽还有锁扣,可以拿配件里的钥匙🔒(我放家里应该是用不到了)
左上方是一些LED指示灯( STATUS, LAN, M2, USB etc..)

背面2个12cm大风扇用于硬盘散热.左边4cm小风扇是给主板散热

如果要安装M2固态硬盘的话,需要把后面3个螺丝拆掉,打开机箱
机箱内部图

右边是一个250W的台达电源

左侧有2个 PCIE 接口,左边其实就是主板了

右边是风扇和硬盘背板的插供电的地方,使用了个20pin供电口

左边是主板,常规的24pin供电,有2个M2接口可以扩展(我把吃灰的Lexar 500G装上去了
自带一块Transcend TS1GSH64V6B 8G 2666内存 (创见,国内好像很少见到这个牌子)

这个M2插槽卡扣设计的很方便,不用在用螺丝固定了

内存我追加了一块吃灰的协德 8G内存的上去,官网建议双通道用同样型号的内存,不过我觉得没什么问题
(For dual-DIMM configurations, you must use a pair of identical DDR4 modules.)
(当然后面我测试后有提到,内存并不能随意添加)

好了,盖上机箱接上网线和电源,就可以开机了.

QuTS hero 上手

使用说明书上要求你下载Qfinder Pro或者扫码来找到你的NAS

呃太麻烦了,还是打开路由器,直接找下这个设备的ip吧

用浏览器打开对应ip,即可进入安装界面
这里要特别注意一下,可以选择QTSQuTS hero两个系统

至于QuTS hero,它是基于ZFS 文件系统的,功能更多,但是内存需求量更大.而QTS是基于Ext4

如果想对ZFS了解更多,可以直接参考QNAP的说明页面
https://www.qnap.com.cn/quts-hero/zh-cn/
https://view.publitas.com/qnap-1/quts-hero-whitepaper_final_cn/

至于该选择哪个,具体区别可以参考这个表格,差异一目了然
另外也要注意,QTSQuTS hero采用不同的文件系统,切换系统的话,NAS必须重新初始化

那难得入了企业级NAS,当然要试一下ZFS啦
点下面按钮可以进入到QuTS安装,会自动下载固件,当然官网已经有5.0 beta版本了.可以手动上传

安装步骤很简单啦,设置下用户名/密码/IP/时间

另外可以启用文件分享协议,我建议全勾上

等一会后自动重启,安装过程也挺长的.顺便一提QNAP的系统启动时间,真的非常长…

能看到登录界面就好了,第一次登录后,有一堆用户协议条款要同意

进入系统后,你需要至少创建一个存储池,才能让系统部分功能和应用正常工作
存储与快照总管里创建(第一次使用会自动弹出并提示你,具体步骤和QTS一样的

创建好后,有些应用会自动被安装在上面..系统还会自动建立共享文件夹(Homes/Public)
QTS不同的是,ZFS有压缩/重复数据删除等一些高级功能

自带的App Center也和QTS基本一样

多了个ZFS性能分析工具

打开控制台看了下,我虽然追加了一根8G的 SO-DIMM 上去,但是并不可用 (混插闲置的杂牌内存果然不行啊

数据盘我准备了2块18T的HC550,这也是我第一次购入企业级硬盘

QNAP的硬盘架左右两边都有卡扣,插下后装上硬盘和卡扣,不用拧螺丝.这个设计很方便我还是挺喜欢的

插上后应该能在存储管理里面看到了

创建存储空间,ZFS有些不同的设置,比如压缩,重复数据删除,快大小
当然这块目标是分流VCB-S的作品,为了最大利用空间还是选了单块RAID-0
最后创建出来的可用的大概只有15.6T

然后在这个存储池上,建立个共享文件夹就能用了
Windows可以磁盘映射,MacOS和Linux用mount挂载.

要使用Docker的话,使用Container Station,就不多提了

想跑虚拟机的话,在App Center安装Virtualization Station
创建之前需要强制登录.垃圾威联通…我本来以为去创建一个QNAP帐号就行了
结果用户名和密码怎么输入都不对,可能我注册的区域的问题 *大陆需要验证手机号
整个界面只有一个登录按钮可以交互

无奈我只能去QNAP官网自己下载离线的QVS安装包
https://www.qnap.com/en/app_center/

把原来安装的移除,上传文件手动安装

这次没有问题..也不需要登录

QVS 的总览长这样

添加一个虚拟机试试

迁移,克隆,快照,直通功能也有.
这是自带的VNC界面,功能该有的都有了

上手体验的话就写到这里了,很遗憾我对ZFS不是很了解.这也是我第一次接触这个文件系统
大概好多实用的高级功能我不知道吧..

噪音和功耗

功耗方面表现还是很满意的,我插了一块18T硬盘后在24W功耗左右.
全天开机一个月应该不到20度电

噪音方面表现也不错..0.5m距离大概20dB左右,顺便一提硬盘炒豆子的声音比机器声音大

总结

结论: 除了追求稳定,可靠的企业/工作室团体用户以外,不推荐入手这台NAS.

另外,基于ZFS文件系统QuTS hero,也非常占用内存,更适合追求更高的企业用户.
这是QNAP官方的内存建议.如果你要插满8个硬盘,建议32G内存,这又是一笔不小的开支.
即使内存不足,NAS仍然可靠,但是IO性能会降低.当然你也可以使用QTS,这会对配置要求降低许多.

目前我的NAS设备为 2台 (黑)群晖 + 2台 QNAP,其实2个系统体验差距不是很大.
可玩性都很强.容器,虚拟机,异地备份,挂机下载..基本满足很多人需求了.
但终究我还是讨厌All in One,把NAS单独当作存储工具而已

即使是企业级的成品NAS,也不是什么不可及的东西.
拆机后你会发现:集成主板,内存,电源,硬盘仓,风扇,机箱.
NAS也就是凑齐了这些一台 Mini PC 而已.

也许成品NAS大多数人而言,稳定和售后服务可能更加重要.
如果你有能力也爱折腾的话,完全可以用更低廉的价格,租一台更高配置的出来.
这应该我近期最后一台成品NAS了,下次对存储有需求的话,尝试自己组一台吧.

Intro

一些老的中文BBS,仍然保留了签到功能,每天打卡可以换取些论坛货币
之前自己都是写脚本,添加定时任务完成的
最近也是发现了binux/qiandao这个基于HAR的签到框架,于是决定搭一个公开实例,方便大家使用

当然binux/qiandao最近已经没有在维护了,推荐基于这个框架修改和完善项目qiandao-today/qiandao
https://github.com/qiandao-today/qiandao

已经搭建完成的站点: https://qd.abyss.moe/

部署

可以使用Docker运行,或Clone源码后使用Python运行
当然使用Docker的话,数据库基于sqlite,这样就不需要额外数据库配置和安装了
所以下文使用Docker安装,比较方便

安装Docker

已经安装了的话,可以跳过

1
2
3
4
5
6
curl -sSL https://get.docker.com | sh

systemctl enable docker --now

## 当然,在大陆并且网络有困难的话,可以使用daocloud.io的国内镜像
## curl -sSL https://get.daocloud.io/docker | sh

创建容器

$(pwd)为当前目录,可以根据自己需求替换

1
docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao

这时候访问 http://ip:8923 的话,你应该能正常看到qiandaowebui

点击登录,然后输入自己邮箱和密码,选择注册.可以进入到后台页

我们需要设置一个管理员,回到你的终端,进入容器

1
docker exec -it qiandao /bin/bash

接下来设置管理员 (请把邮箱换成你自己注册的),然后重新登陆下
config.py是配置文件,具体配置可以参考项目的Readme.md
https://github.com/qiandao-today/qiandao/blob/master/README.md

配置结束后,exit退出容器管理

1
2
3
4
bash-5.1# python ./chrole.py ame@abyss.moe admin
role of ame@abyss.moe changed to admin
bash-5.1# exit
exit

使用 Nginx 反向代理

Nginx的话可以直接通过包管理安装
创建一个新的server配置,location反向代理8923端口即可

1
2
3
4
location /
{
proxy_pass http://127.0.0.1:8923;
}

创建模版

创建签到任务前,首先要编写模版
这里以在PSNine签到为例,简单说下如何保存HAR,还有建立模版的过程
需要准备2个帐号,一个现代的浏览器(Chrome, Edge, Firefox etc..)

打开网站,按F12打开控制台,切换到Network选项卡
勾上Preserve Log,以防止页面刷新或跳转后,所有Request被清空
点击Clear按钮,把之前打开的无用的Request清空下

点击签到按钮后,后会多出几个请求log
右键第一个Request,选择Save all as HAR with content保存HAR文件

回到你的签到站,新建模版,上传HAR文件,用户名和密码不需要填写
点击你的请求,接下来我们要做一些修改

把你自己的Cookies删除,Request Headers中的Cookie对应值改成变量{{cookie}},并且打勾
可以把浏览器自带的一些没用的Request Headers清除,改好的如下图

想可以在测试选项卡添加变量,填写自己的cookie后,点击测试
可以观察下的html源码.成功的话,获取的铜币也在html元素里
为方便我们查看日志,我们用正则提取出来,比如这样

1
2
coin        <b style="color:red;">(\d+)<
day <b style="color:green;">(\d+)<

这样签到的天数铜币数量就保存在变量daycoin中了.点击保存一次
接着我们继续插入一个unicode转换, 点击保存

Query String Parameterscontent填写需要转换内容祈祷得到 {{coin}} 铜币,已经累计祈祷 {{day}} 天了

在预览页面,变量提取的name改成__log__,正则保持默认的"转换后": "(.*)"即可

保存后.可以在我的模版里发布成公开模版,然后在我的发布页面里审核通过

签到

新建一个签到任务,填上自己的Cookie即可
如果装了GetCookie浏览器插件,应该可以直接点击获取

如何取得cookie

关于手动获取Cookie的方法,先打开想要获取的网站

F12打开控制台,切换到Console页面,输入document.cookie,去掉前后的'就是你的cookie
[更新] 请注意 这样是无法获取带 HTTP Only 的 Cookie,也就是可能获取不全.所以请使用下面的方法

或者在Network选项卡里面打开任意请求,找到Request Headers,把Cookie内容复制出来

Prologue

年末对自己分流设备做了一次配置升级,宿主机系统选择了Proxmox VE
CPU把原先的AMD Ryzen 3 2200G,更换为了ADM R5 5600G
主板从A320M-HDV换成了MSI MAG B550M MORTAR WIFI

B550M这块主板自带了2.5G LAN口,正好配合我的交换机和NAS使用
由于换成了PVE 7.0,Linux kernels 5.4+已自带R8169驱动,支持Realtek 8169/8168/8101/8125
这里记录下之前装驱动的瞎折腾过程

Get Ethernet Driver

在MSI官网找下这块板子的参数,使用的是 Realtek® RTL8125B 2.5G LAN
https://us.msi.com/Motherboard/MAG-B550M-MORTAR-WIFI/Specification

到 Realtek®官网找到即可linux驱动即可下载
选择2.5G Ethernet LINUX driver r8125 for kernel up to 5.6并下载
https://www.realtek.com/ja/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software

Install Dependence / Compile

由于官方源还是挺慢的,这里还是换成清华大学的开源镜像源
https://mirrors.tuna.tsinghua.edu.cn/help/debian/

Debian 的软件源配置文件是 /etc/apt/sources.list

1
2
3
4
5
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

然后添加非商业源,编辑 /etc/apt/sources.list.d/pve-no-subscription.list

1
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription

删除企业源

1
rm /etc/apt/sources.list.d/pve-enterprise.list

更新源,并安装编译必要的依赖

1
2
3
4
5
6
7
apt update -y

apt -y install dkms make gcc

### PVE7的话,已经安装了`libc6`和`libelf`,下面就不需要执行了
apt -y install build-essential
apt -y install libelf-dev

当然,要编译还需要安装 Linux Kernel Header
使用uname -r看下内核版本,比如我的是5.11.22-4-pve,然后apt search找下并安装即可
如果没有搜索到,请按上面步骤添加pve-no-subscription

1
2
3
4
5
6
7
8
9
10
11
12
13
root@shirobako:~# uname -r
5.11.22-4-pve

root@shirobako:~# apt search 5.11.22-4
Sorting... Done
Full Text Search... Done
pve-headers-5.11.22-4-pve/stable 5.11.22-9 amd64
The Proxmox PVE Kernel Headers

pve-kernel-5.11.22-4-pve/stable 5.11.22-9 amd64 [upgradable from: 5.11.22-8]
The Proxmox PVE Kernel Image

root@shirobako:~# apt install pve-headers-5.11.22-4-pve

编译安装网卡驱动

1
2
3
4
5
6
### 把下载好的驱动解压
tar vjxf r8125*

### 运行 autorun.sh
chmod a+x autorun.sh
./autorun.sh

Do Some Tests

测试一下网卡驱动是否成功,lsmod | grep r8125有返回就表示驱动打上了
看下网卡状态

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
### 安装一些网络工具
root@shirobako: apt -y install net-tools ethtool

### 使用 ifconfig 看下网卡名字,比如我的是enp42s0
### 用 ethtool 看下状态, Speed: 2500Mb/s 就对了
root@shirobako: ethtool enp42s0
Settings for enp42s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
2500baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 2500Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: pumbg
Wake-on: d
Link detected: yes

可以用iperf3和另一台主机试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@shirobako: iperf3 -c 192.168.50.111
Connecting to host 192.168.50.111, port 5201
[ 5] local 192.168.50.150 port 58048 connected to 192.168.50.111 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 285 MBytes 2.39 Gbits/sec 0 649 KBytes
[ 5] 1.00-2.00 sec 284 MBytes 2.38 Gbits/sec 0 649 KBytes
[ 5] 2.00-3.00 sec 282 MBytes 2.37 Gbits/sec 0 771 KBytes
[ 5] 3.00-4.00 sec 282 MBytes 2.37 Gbits/sec 0 771 KBytes
[ 5] 4.00-5.00 sec 284 MBytes 2.38 Gbits/sec 0 771 KBytes
[ 5] 5.00-6.00 sec 281 MBytes 2.36 Gbits/sec 0 807 KBytes
[ 5] 6.00-7.00 sec 284 MBytes 2.38 Gbits/sec 0 807 KBytes
[ 5] 7.00-8.00 sec 282 MBytes 2.37 Gbits/sec 0 807 KBytes
[ 5] 8.00-9.00 sec 281 MBytes 2.36 Gbits/sec 0 807 KBytes
[ 5] 9.00-10.00 sec 282 MBytes 2.37 Gbits/sec 0 807 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 2.76 GBytes 2.37 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 2.76 GBytes 2.37 Gbits/sec receiver

iperf Done.

看起来一切在正常

前言

这次开箱的是 Intel 猎豹峡谷 NUC11PAKi5,一台迷你电脑(Mini PC)

关于NUC

先介绍下NUC,全称为 Next Unit of Computing ,是由Intel设计的小尺寸准系统电脑系列名
初代在2013发售,到目前为止,已经发售了11代了
顺便提下,NUC部分机型可装黑苹果,但11代换了XE核心,暂时没有驱动和适配的EFI
如果你想折腾安装MacOS的话,我推荐你选NUC10或NUC8

Intel NUC8 (NUC8i5BEK2) (图来自wikipedia)

NUC的命名大概是这样子的:NUC11PAKi3 NUC8i5BEK NUC10i3FNHF
具体可以参考 Product Code Naming Convention for Intel® NUC

  • NUC10:NUC世代(NUC Gen)
  • i3:处理器类型(Processor type) 其中 A = Atom® | C = Celeron® | P = Pentium® | i5 = Core™ i5
  • FN:家族代号(Family Code)
  • H: 套件代号(Form Factor) K = Slim Kit 没有2.5”硬盘位,H 包含
  • F: 自带的存储和内存 (Storage/RAM) 比如 F是1TB HDD 4GB RAM

部分型号还带1位的系统型号(OS)和地区代码(AC Cord)(会附不同电源线)
比如:A = Windows® 10 Home , 7 = CH cord included

系列产品有开箱级用的完整电脑
也有准系统(NUC Kits)可以买,价格会比较便宜,需要自己装内存、硬盘和操作系统

NUC系列

8代之前产品我就不再推荐了,性能和性价比都不出众
想入手的话可以从NUC8开始看起,这部分也参考了另一篇文章:NUC捡漏全指南

Eighth generation

NUC8 是 NUC 发展一个小高潮,产品众多
高性能定位的骷髅峡谷作了更新,命名为冥王峡谷

另外还有 i3/AMD Radeon 540 的深红峡谷
i5 或 i7/AMD Radeon 540 的艾莱峡谷
普通定位的是豆子峡谷
还有 Pro 版(商业版)普罗沃峡谷
低功耗产品只有一款,赛扬 N3350 的查科峡谷

冥王峡谷 Hades Canyon (Kaby Lake-G)

特别之处是冥王峡谷为 AMD 和 Intel 的合作机型
搭配 Intel i7‑8705G/i7‑8809G 处理器和 AMD HD Graphics 630 and Radeon RX Vega M GL 显卡

豆子峡谷 Bean Canyon (Coffee Lake-U)

豆子峡谷是目前最受欢迎的 NUC,电商自营价格在 2000-3000 左右
小黄鱼价格要实惠很多,i3版价格在 1300 左右,i5版 1500-1600 左右,i7版在 2000 左右

NUC8i7BEH

深红峡谷 Crimson Canyon (Cannon Lake-U)

NUC8i3CYSM

艾莱峡谷 Islay Canyon (Whiskey Lake-U)

NUC8i5INH

普罗沃峡谷 Provo Canyon (Whiskey Lake-U)

NUC8v7PNH

查科峡谷 Chaco Canyon(Apollo Lake)

查科峡谷更多是在工控领域,全新价格在1300-1500左右,小黄鱼有1000左右的货。性能来说作为HTPC+软路由+迷你nas是不错选择

Ninth generation

第九代NUC算是英特尔走歪的一代,纯属追求性能提高,抛弃了原来nuc体积小的优点。还玩集成化,可以将nuc9当作显卡插在主机PCI槽上
幽灵峡谷目前全新价格是6000-10000左右,小黄鱼价格在4000-6000左右。虽然性能强,但是价格虚高,体积又不迷你
追求性能不如组装itx主机,追求便携又不如游戏本
面向企业用户的石英峡谷更贵,全新15000左右,小黄鱼价格在8000左右,没有入手价值

幽灵峡谷 Ghost Canyon

石英峡谷 Quartz Canyon

Tenth generation

NUC9的追求高性能意向失败后,英特尔回归NUC8豆子峡谷的定位,升级硬件后推出了个寒霜峡谷
目前全新价格i3版本2000,i5版本3000,i7版本4000
小黄鱼价格能低500-700左右。价格比豆子峡谷稍贵
性能提升不多,大家还是喜欢折腾NUC8

寒霜峡谷 Frost Canyon

Eleventh generation

11代是目前最新一代NUC,有常规升级版猎豹峡谷,商业版老虎峡谷,以及冥王峡谷的升级版幻影峡谷
由于11代是近期发布,全新核显对于黑苹果暂时无解

猎豹峡谷 Panther Canyon

老虎峡谷 Tiger Canyon

幻影峡谷 Phantom Canyon

开箱

包装盒内包含了主机HDMI线电源适配器电源线螺丝VESA挂架
我买的是 NUC Kit ,没有自带内存和硬盘
内存准备的是一条8G DDR4 2666MHz 笔记本内存,淘宝200入手
今年内存也是涨了一倍,去年200多可以入一条16G的了

正面 (漏拍了,所以丢个渲染图吧)

背面

顺便一提电源适配器很大..大概有主机的一半重

拆开背板4个螺丝,即可看到内部构造
硬盘可选2.5寸SATA或者M2接口的SSD。这里拿以前拆机的240G SSD装上了
上面是两个内存插槽,最大支持32G

2.5寸硬盘装在背板上,记得先把4个垫脚拿掉

装好后接上电源就能开机了
开机的时候按F2可以进入Bios,F10可以调出选择启动项的菜单

把Secure Boot关掉,调整下启动项,就可以从U盘安装系统了

另外说下Win10只帮我自动装了无线网卡驱动,并没有帮我安装以太网驱动
需要到Intel官网自行下载:Intel-Ethernet-LAN-Network-Connection-Driver-for-Windows-10-for-Intel-NUC

在网络适配器里看到以太网的话,就可以插网线用了

基准测试

还是忍不住跑一下分,毕竟可以直观的了解性能

System Summary

CINEBENCH R23 单核跑分

CINEBENCH R23 多核跑分

x264 FHD Benchmark

3D Mark Time Spy (DX12)

3D Mark Fire Strike (DX11)

Youtube 4K

4k完全没问题

Youtube 8K

不同视频有差异,有些比较吃力

尝试安装主流的 Linux 发行版

Intel 只推荐安装 Win10,列出支持的操作系统也只有 Win 10
这里还是尝试安装下一些主流的 Linux 发行版试试,看看 Tiger Lake 和 Iris Xe GPU 兼容怎么样

Ubuntu 20.04.2.0 LTS

安装过程没有任何错误,使用的时候会有闪屏(flicker)现象
表现是1~3秒突然黑屏,然后恢复正常

解决方案使用了Stack Exchange的回答,在内核启动参数内添加nomodest去掉quiet
当然也有人提到 Ubuntu 21.04 已经解决了这个问题,或者安装oem内核也可以。不过时间关系、我没去尝试

编辑/etd/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT中添加参数就行

然后更新GRUB配置

1
sudo update-grub

解决闪屏后基本没有问题了~

Arch Linux

安装上基本没有问题,但是和Ubuntu一样,KDE桌面有闪屏问题

当然我试了下加nomodest会导致更多的问题,Arch Wiki 中也不推荐加。 因为Intel显示驱动需要 KMS
这里参考了 AskUbuntuArch Wiki,修改了Intel显卡驱动的配置

创建/etc/X11/xorg.conf.d/20-intel-graphics.conf

1
2
3
4
5
6
7
8
9
10
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "TripleBuffer" "true"
Option "TearFree" "true"
Option "DRI" "false"
Option "NoAccel" "True"
Option "AccelMethod" "uxa"
Option "SwapbuffersWait" "false"
EndSection

在 Display Configuration 里,把 Compositor 换成 OpenGL 3.1 可以防止登录界面闪屏

虽然这样一顿操作后,闪屏频率减少了.但是偶尔还会有
最终我把Linux内核版本降到5.10.x,这个问题才被解决

[参考文章]
从初代到11代,英特尔NUC捡漏全指南

0%