2024年win10 全版本 永久激活密钥一览(有效激活)

Windows 10 是迄今为止更好的 Windows,像以往一样仍然可以使用完整版本,获取 Windows,成就非凡

 

在使用win10操作系统时,我们经常会遇到需要输入密钥的情况,而有时候我们可能会找不到合适的密钥。

因此,本文将为大家提供一份完整的win10安装密钥大全,帮助大家解决密钥问题

‌Windows 10 通用安装密钥如下‌:

  • 家庭版: 3KHY7-WNT83-DGQKR-F7HPR-844BM
  • 专业版: VK7JG-NPHTM-C97JM-9MPGT-3V66T
  • 企业版: XGVPP-NMH47-7TTHJ-W3FW7-8HV2C

快来看看下面的免费激活码吧。

 

Win10神key

W269N-WFGWX-YVC9B-4J6C9-T83GX

神key:P7N43-7CKCH-8DJ7T-3Y6RV-G6PJR

神key:P9C2R-NM3BW-JR7DG-2R38J-D9MPF

神key:KH2J9-PC326-T44D4-39H6V-TVPBY

神key:TFP9Y-VCY3P-VVpT-8XXCC-MF4YK

神key:236TW-X778T-8MV9F-937GT-QVKBB

神key:87VT2-FY2XW-F7K39-W3T8R-XMFGF

神key:6K2KY-BFH24-PJW6W-9GK29-TMPWP

神key:RHTBY-VWY6D-QJRJ9-JGQ3X-Q2289

win10激活码神Key:

神Key之六:

C4M9W-WPRDG-QBB3F-VM9K8-KDQ9Y

神Key之七:

2VCGQ-pVJ4-2HGJ2-K36X9-J66JG

神Key之八:

MGX79-TPQB9-KQ248-KXR2V-DHRTD

神Key之九:

FJHWT-KDGHY-K2384-93CT7-323RC

神Key之十:

6K2KY-BFH24-PJW6W-9GK29-TMPWP

神Key之一:

KH2J9-PC326-T44D4-39H6V-TVPBY

神Key之二:

TFP9Y-VCY3P-VVH3T-8XXCC-MF4YK

神Key之三:

236TW-X778T-8MV9F-937GT-QVKBB

win10 19H2 key密钥:

win10专业版密钥:

NPPR9-FWDCX-D2C8J-H872K-2YT43

密钥:NPPR9-FWDCX-D2C8J-H872K-2YT43

密钥:WGGHN-J84D6-QYCPR-T7PJ7-X766F

密钥:W269N-WFGWX-YVC9B-4J6C9-T83GX

密钥:2F77B-TNFGY-69QQF-B8YKP-D69TJ

密钥:NYW94-47Q7H-7X9TT-W7TXD-JTYPM

通过本文的介绍,我们了解了win10安装密钥大全,可以根据自己的需求选择合适的密钥进行安装。希望这份密钥大全能够帮助到大家,解决密钥问题,顺利完成

继续阅读2024年win10 全版本 永久激活密钥一览(有效激活)

Youtube download

第一步,用firefox,登陆你youtube.
第二部。建立一个批处理,放在yt-dlp同目录,

@echo off
set /p UserInput=请输入要下载的视频网址: 
.\yt-dlp.exe --merge-output-format mp4  --cookies-from firefox -o '%(title).50s.%(ext)s' %UserInput%
pause

编码为ansi
第三部启动,粘贴你下载的网址,回车就下载好了

几款VPS

搬瓦工 The DC9 Plan 限量版套餐补货!$38/年,1核 CPU,768MB 内存,15GB SSD 硬盘,750GB 月流量,1.5Gbps 带宽,可选 DC9 CN2 GIA 机房,暂不支持迁移机房。

购买链接:https://bwh81.net/aff.php?aff=30937&pid=145

优惠码:BWHCGLUKKB  (6.77%)

搬瓦工 THE PLAN 套餐补货!$29美元/季度,$55美元/半年,$99美元/年,2核 CPU,2GB 内存,40GB SSD 硬盘,1000GB 流量,可选 19 个机房!同等配置常规套餐需要约 $299.99 美元。

购买链接:https://bwh81.net/aff.php?aff=30937&pid=147

优惠码:BWHCGLUKKB  (6.77%)

优惠后 92.3美元

方案名称:SPECIAL 10G KVM PROMO V5 – LOS ANGELES – CN2 GIA LIMITED EDITION VPS

方案配置:

硬盘:10 GB SSD
内存:512 MB
CPU:1 核
流量:500 GB/月
带宽:1Gbps

方案价格:

$49.99 USD/年

购买链接:点击直达 (https://bwh81.net/aff.php?aff=30937&pid=94)

 

优惠码:BWHCGLUKKB  (6.77%)

搬瓦工推出 OSAKA LIMITED EDITION 40G

日本软银限量版高配套餐!$79.99/年,1核 CPU、2GB 内存、40GB SSD 硬盘、2.5Gbps 带宽、2000GB 月流量,可选日本软银 JPOS_1 机房,暂不支持迁移机房。

购买链接:https://bwh81.net/aff.php?aff=30937&pid=146

优惠码:BWHCGLUKKB  (6.77%)

 

CN2 GIA-E 1GB 2核 20GB 1TB 2.5Gbps 美国 DC6 CN2 GIA-E
美国 DC9 CN2 GIA
日本软银 JPOS_1
荷兰 EUNL_9
美国圣何塞 CN2 GIA
加拿大 CN2 GIA
$49.99/季度
$169.99/年
购买

 

 

DMIT

线路:
三网优化,中国优化线路CN2GIA

配置信息:
LAX.Pro.WEE

1 vCPU

1 GB RAM

20G SSD Storage

500GB Transfer

500Mbps VirtIO Interface

1 IPv4 & 1 IPv6 /64

Premium Network Profile

价格:$39.9/年

https://www.dmit.io/aff.php?aff=8138&&pid=183

 

PVM.LAX.EB.WEE

$39.9 /年,CMI线路
1C/1G/20G/1000G@1Gbps

https://www.dmit.io/aff.php?aff=8138&pid=188

线路:
三网优化,中国优化线路CN2GIA

LAX.Pro.MALIBU

1 vCPU
1 GB RAM
20G SSD Storage
1000GB Transfer
1Gbps VirtIO Interface
1 IPv4 & 1 IPv6 /64
Premium Network Profile
价格:$49.9/年

https://www.dmit.io/aff.php?aff=8138&&pid=186

 

PVM.LAX.Pro.Tiny(有货)

$88.88/year  – 1C/2G/20G/800G@1Gbps

LAX.Pro.TINY

1 vCPU

2 GB RAM

20G SSD Storage

800GB Transfer

1Gbps VirtIO Interface

1 IPv4 & 1 IPv6 /64

Premium Network Profile

Quarterly:$28.88 USD Semi-Annually:$48.88 USD Annually:$88.88 USD

https://www.dmit.io/aff.php?aff=8138&pid=100

Ddns Cloudflare 脚本

#!/bin/bash

# 配置部分,请根据实际情况修改
API_KEY="你的Cloudflare API密钥"
EMAIL="你的Cloudflare邮箱"
ZONE_ID="你的域名对应的Zone ID"
RECORD_NAME="要更新的记录名称,例如@或www"
RECORD_TYPE="A"  # 或AAAA,根据需要修改
INTERVAL="3"  # 定时任务更新间隔,单位分

# 获取当前主机IP
IPV4=$(curl -4 ip.gs)
IPV6=$(curl -6 ip.gs)

# 更新Cloudflare DNS记录
function update_record() {
  local ip=$1
  local record_type=$2
  curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "X-Auth-Email: $EMAIL" \
  -H "X-Auth-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"type\": \"$record_type\", \"name\": \"$RECORD_NAME\", \"content\": \"$ip\"}" > /dev/null 2>&1
}

# 获取记录ID
RECORD_ID=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME&type=$RECORD_TYPE" \
  -H "X-Auth-Email: $EMAIL" \
  -H "X-Auth-Key: $API_KEY" | jq -r '.result[0].id')

# 更新IPv4记录
update_record "$IPV4" "A"

# 更新IPv6记录
update_record "$IPV6" "AAAA"

# 定时任务设置, /opt/ddns.sh 脚本位置
echo "*/$INTERVAL * * * * root /opt/ddns.sh" | crontab -

小鸡开机改密码登录命令

1)用这种一键脚本避免在密码中包含 $,可能会被 shell 解释为变量名。单独用passwd root设定时不存在这样的问题;
2)一键指令默认删除的其他用户名为admin,可以手动改成其他用户名,要想知道其他潜在要删除的用户名,可以用cat /etc/passwd指令查看。

#切换管理员权限:
sudo su -
#更改密钥登陆为密码登陆:
sudo sed -i -e '/^#\?\s*PermitRootLogin/s/^#\?\s*PermitRootLogin\s\+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo sed -i -e '/^#\?\s*PasswordAuthentication/s/^#\?\s*PasswordAuthentication\s\+.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
#一键更改root密码为12345678
echo "root:12345678" | chpasswd
#删除admin多余账户:
sudo userdel -r admin
#重启SSH服务使得设置生效:
sudo systemctl restart sshd

mack-a八合一安装无域名版Reality

1.下载最新脚本

wget -P /root -N --no-check-certificate https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh && chmod 700 /root/install.sh && /root/install.sh
Bash

2.xray-core 无域名版Reality

  • 建议使用基于xray-core核心的客户端

xray-core_reality.jpg

3.sing-box 无域名版Reality

  • 建议使用基于sing-box核心的客户端

sing-box_reality.jpg

4.查看订阅

  • vasma->7->2->一路回车

搭建最新的VLESS Vision和VLESS Reality防止VPS端口封禁

一、介绍

为了应对 TLS in TLS 和指纹识别等阻断或封禁的风险,Xray-core 团队推出了 VLESS Vision 和 VLESS Reality 两种新颖的技术方案。它们能够有效地隐藏保护流量的特征,提高安全性稳定性。如果您想了解更多详细信息,请点击 Vision 和 Reality 的查看。

协议组合 解决 TLS in TLS 解决指纹问题 自带多路复用 是否支持CDN
VLESS-Vision-TLS
VLESS-Vision-uTLS-REALITY
VLESS-gRPC-uTLS-REALITY

二、环境

三、搭建步骤

1.ssh登录服务器(略)

2.下载脚本

wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh
Bash

3.安装

  • 两种安装方式,第一种需要自己购买域名第二种无需购买域名
  • 如果没有域名,可以跳过第一种安装方式。

1.第一种安装方式(需要域名)

  • 建议选择 2任意组合安装->选择0,7 ,这样的安装会同时安装 Vision_TLSReality+TCP+uTLS+VisionReality+gRPC+uTLS
  • 路径:vasma->2->1->0,7

第一步,输入域名

custom_reality_domain.png

第二步,端口默认443即可,也可以自定义端口安装

custom_reality_install02.png

第三步,注意事项。

当配置VLESS+Reality 需要注意一下,这里的端口可以自定义,如果上方使用了自定义端口这里则可以输入 443 。

剩下的一直回车后会自动展示账号,到这里有域名的情况就搭建完成了。

custom_reality_install03.png

2.第二种安装方式(无需域名)【推荐安装】

可参考的域名


# Apple
gateway.icloud.com
itunes.apple.com
swdist.apple.com
swcdn.apple.com
updates.cdn-apple.com
mensura.cdn-apple.com
osxapps.itunes.apple.com
aod.itunes.apple.com,

# mozilla
download-installer.cdn.mozilla.net
addons.mozilla.org

# CDN
s0.awsstatic.com
d1.awsstatic.com
cdn-dynmedia-1.microsoft.com

# amazon
images-na.ssl-images-amazon.com
m.media-amazon.com

# google
dl.google.com
www.google-analytics.com

# 其他
player.live-video.net
one-piece.com
lol.secure.dyn.riotcdn.net
www.lovelive-anime.jp
www.swift.com
academy.nvidia.com
www.cisco.com
www.samsung.com
www.amd.com
software.download.prss.microsoft.com
Bash

四、客户端配置

手动配置示例

  • VLESS Reality gRPC uTLS
 - name: reality-grpc
   server: vpsIP
   type: vless
   port: 端口
   uuid: id
   network: grpc
   servername: 允许客户端访问的域名,对应的是服务端 serverNames
   flow: ""
   udp: true
   tls: true
   reality-opts:
     public-key: 服务端的publicKey
   client-fingerprint: chrome
   grpc-opts:
     grpc-service-name: grpc
YAML
  • VLESS Reality TCP Vision uTLS
- name: reality-tcp
  server: vpsIP
  type: vless
  port: 端口
  uuid: ip
  network: tcp
  servername: 允许客户端访问的域名,对应的是服务端 serverNames
  flow: xtls-rprx-vision
  udp: true
  tls: true
  reality-opts:
    public-key: publicKey
  client-fingerprint: chrome
YAML
  • VLESS TCP TLS Vision uTLS
- name: Vision-tcp
  server: IP
  type: vless
  port: port
  uuid: uuid
  network: tcp
  serviceName: 域名
  flow: xtls-rprx-vision
  udp: true
  tls: true
YAML

3.iOS

1.V2BOX

  • 支持RealityVision
  • vasma->7.账号管理->2.查看订阅 拉取即可
  • 客户端配置->Configs->右上角+号->Add Subscription

2.FoXray

  • 支持RealityVision
  • vasma->7.账号管理->2.查看订阅 拉取即可
  • 客户端配置->订阅列表->右上角+号

3.Shadowrocket

  • vasma->7.账号管理->2.查看订阅 拉取默认订阅即可

4.sing-box

  • vasma->7.账号管理->2.查看订阅 拉取sing-box订阅即可
  • Profiles->New Profiles->Type(Remote)->复制sing-box订阅链接到URL

ios_sing-box.jpg

4.Windows

1.v2rayN[需下载最新]

1.reality-tcp

reality_tcp.png

2.reality-grpc

reality_grpc.png

五、注意事项

1.Vision被封答疑【以下内容来源

首先,如果你特别不想被封,请先选择一个干净的 IP,并按照 配置正确 去搭建、使用 XTLS Vision。

但是,即使你这样做了,也无法保证 100% 不被封。自去年底始,很多人的未知流量秒封 IP,TLS in TLS 流量隔天封端口。XTLS Vision 不是未知流量,且完整处理了 TLS in TLS 特征,目前看来效果显著。但这并不意味着,用 XTLS Vision 可以 100% 不被封,认识到这一点是非常、非常重要的,不要自己偶然被封就大惊小怪

因为除了协议本身,还有很多角度能封你。以 IP 为例,你无法保证 IP 真的干净,无法避免被邻居波及,无法避免整个 IP 段被重点拉清单。也有可能某些地区的 GFW 有独特的标准,比如某个 IP 只有寥寥数人访问连却能跑那么多流量,封。如果你的 XTLS Vision 被封了,但没有出现去年底 TLS 那样的大规模被封报告,我真心建议你换端口、换 IP、换服务商依次试一遍

排查

  • 打开[ping.pe]
  • 输入 IP 检测ping可用
  • 输入 IP:Port 检查端口是否可用
  • 主要是看最后几个是否为绿色

2.Reality不支持CDN

3.Reality工作原理

一些GitHub issues的零碎信息,完整版本可以等xray-core更新文档

#1734
#1701
#1697
#1697
#1588

4.Xray-core内存问题解答【以下内容来源

Xray 占几百兆内存,并不代表这是最低要求,而是正是因为你有空闲的内存,Xray 才会拿来当缓存、备用,因为不用白不用。

仅此而已,内存完全够用的情况下,却非要追求这个数据的好看,想捂着不让 Xray 用,有什么意义呢?VPS 商家给你退钱?

对于 Xray 这样的代理类软件,内存占用大头在于对被代理数据的缓存,能用的内存多就能多缓存一些数据,麻烦搞清楚状况。

换句话说,内存占用大头取决于你要的缓存数据能力,每个代理软件的默认策略不一样,你调低缓存自然就可以实现数据的好看

5.影响Reality使用体验的几个因素【以下内容来源

目标网站/域名的选择会极大程度地影响 REALITY 代理的延迟、速度、稳定性等:

  1. 至少目前,REALITY 每次都要去拿握手包,需要注意目标网站近不近、稳不稳定(请求多了就把你半拉黑也是一种不稳定)。
  2. 运营商层面可能会给某些域名更高的流量优先级,拥堵时优先保证它们的流量通过。
  3. GFW 层面至少有黑名单(google)和白名单(microsoft),可能还有其它名单,比如偶尔干扰/限速名单(github?)

如果出现今天不可用但是昨天可用的情况,可能出现的原因:

也可能是你们天天逮着 microsoft、apple 之类的偷,GFW 开始测试了,有人说伊朗那边就有运营商在“内测” yahoo 的 IP 白名单。

REALITY 以后会出个缓存模式,提前采集目标网站的特征,就不用每次都去拿了,这也是相对于 ShadowTLS 之类的优势之一。

还有就是 REALITY 隐藏玩法的任意 SNI、无 SNI,对 REALITY 来说,只要服务端 serverNames 写了,客户端 serverName 就能填。
我需要说明一下不是只有 1.1.1.1 和 8.8.8.8,而是绝大多数网站都有“默认证书”。不过不希望这个玩法泛滥,因为特征明显。

6.v1.8.1 增强版 XUDP 的 Global ID & UoT Migration 有什么效果【以下内容来源

v1.8.1 以前,你用任何 UoT,假设服务端用 A 端口与多目标通信,若 TCP 断了,比如切换网络,重连后服务端会改用 B 端口。 v1.8.1 开始,你用 VLESS(包括 Mux.Cool),即使 TCP 断了,重连后服务端还是会用 A 端口。

尤其是,对 P2P 有奇效。从某种程度上来说,这才是真正的 FullCone。双端 Xray-core v1.8.1+ 自动启用,无需额外配置。

可以用 NatTypeTester,先连接家里 WiFi 测一下,再连接手机热点(流量)测一下,你会发现服务端出口端口没变,挺神奇的。

7.Trojan是否可以平替VLESS答疑【以下内容来源

都是 TLS,但怎么用 TLS,是有讲究的,有句话我早就想对鼓吹 Trojan 平替 VLESS 的人说:真以为 Trojan 能用一辈子? 早在三年前的 VLESS BETA 我就给你们说过,光套一层加密并不能掩盖里面的时序特征,所以 VLESS 有 flow 机制。 但是呢,以前的 GFW 没上手段,简单套个 TLS 在实践上的确还可以用,就像 WSS ALPN 一直很明显,但以前它能用。 它们还能用,我就没必要提前出牌,等 GFW 上了手段,我再继续出牌,并且不推荐大家再用旧的 WS、无 flow 等。

有一点需要再次强调,我支持的始终是 TLS 上的百花齐放,而不是 TCP 上的,原因以前说过很多,可以去 v2ray 翻翻。 前段时间不是有个论文嘛,算了不想说了,有空时再评论。 #14

8.各协议 2023 现状【以下内容来源

还是简单说一下各协议 2023 现状(对于中国大多数地区)

  1. SS 全随机数类秒封 IP;IPv6 不一定封,因人品而异;绕过“省钱规则”曾经不封,目前不知道,但若流行了肯定会封,参考 SSR
  2. Trojan、WSS 隔天封端口;Cloudflare 不封但干扰会很严重,因地区而异
  3. 黑名单是单连接 TLS in TLS 握手典型特征,因为用强 padding(Vision)或开 mux 就能绕过,注意不要让猪队友客户端连接
  4. REALITY 类偷白名单域名的话即使有上述特征也不封;甲骨文等太黑的 IP 段偷大厂/偷别人不一定连得上
  5. Hysteria、TUIC 不一定封,因配置、地区而异;可能会遇到 QoS 限速,因运营商而异;总之就是使用体验严重因人而异

所以你可以看到以前的流行协议在今年是什么样的存活状况,事实上今年自建的大都是新协议,非 IPLC 中转用的协议原理也没差 你的主观印象中“今年能连接国外网络的人数并没有减少”,严格来说就是因为自建,一些人把它透明化了,卖中转给机场和个人 #15

Debian 11 使用 Docker 安装 Mailcow 自建域名邮箱

Debian 11 使用 Docker 安装 Mailcow 自建域名邮箱

本文将指导如何在 Debian 11 下使用 Docker 安装 Mailcow 搭建自建邮箱。

PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。
本站注:使用黑暗模式查阅本文更直观。

什么是电子邮箱?

电子邮箱,即电子邮件,就是 Email,是指一种由一寄件人将数字信息发送给一个人或多个人的信息交换方式,一般会通过互联网或其他电脑网络进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。一些早期的电子邮件需要寄件人和收件人同时在线,类似即时通信。(Wikipedia

国内用户一般会使用网易(@163.com)、腾讯(@qq.com)等免费邮箱服务,国外用户一般会使用 Google(@gmail.com)、Yahoo(@yahoo.com)、Microsoft(@outlook.com)等免费服务。

为什么要自建邮箱?

首先,你的数据是你自己的,你的隐私应当得到保护,而不是那些垄断巨头公司的,几乎所有市面上的免费邮箱服务,都是以牺牲你的隐私和数据为代价,利用你的大数据来进行广告行为分析来盈利,那么,你愿意把你自己的数据交付给和你素不相识的第三方么?

其次,看本博客的读者,几乎人手一个域名,人手一只 VPS,那为何不把现有资源利用起来做一些很酷的事情呢?

自建邮箱的优势和劣势

那么,会有小伙伴指出,市面上也有收费的邮箱呀,比如国内一些大厂的「企业邮箱」,为什么不用收费服务呢?我们就自建邮箱,免费邮箱和收费邮箱做一个简单的表格对比:

对比 自建邮箱 免费邮箱 收费邮箱
隐私性
维护难度
价格 中 – 高
使用成本
隐性成本* 极高

着重指出一下我所强调的隐性成本:

因为免费和收费的邮箱服务,你的数据都是保存在第三方,你没有服务器的权限,你的帐号都是别人服务器里的冷冰冰的数据库,那么,你邮箱的提供商可以:

  1. 随时用各种理由关停你的服务,无论是合法的还是莫须有的原因,比如这里的例子
  2. 随时把你的资料卖给第三方,你作为最终用户是不可能知道的,比如?
  3. 随时面临倒闭关门从而永久丢失数据的风险,比如曾经的雅虎中文邮箱。

这些成本是你使用第三方服务的时候可能没有考虑过的,而自建邮箱服务的话,这个隐性成本我们是可控的:

  1. 你可以控制你的域名,只要选对有良好信誉的注册局和注册商,每年稳定续费并不做违反 ToS 的事情,域名一般不会被强制暂停;
  2. 你可以选择你的服务器供应商,只要选对有良好信誉的供应商,每月稳定续费并不做违反 ToS 的事情,服务器一般不会被强制暂停;
  3. 你可以每天备份你的数据,自己做数据容灾备份,不丢失任何重要的资料。

自建邮箱需要准备的资料

首先,你需要有一个你「完全拥有使用权限」的「国际化」的域名,我们不推荐使用任何小国家的国别后缀,不然哪天你域名怎么没的都不知道,这里主要还是推荐如下几个稳如狗的 gTLD 后缀:

  • .com
  • .net
  • .org

其次,你需要一台服务器或 KVM / Xen 构架的 VPS,按照官网的说法,推荐的最小配置要求如下:

Resource mailcow: dockerized
CPU 1 GHz
内存 最低 6 GiB + 1 GiB swap (实际测试 4 GiB 内存也足够)
硬盘 20 GiB (不包含邮件的占用)
系统 x86_64

并且从防火墙放行这几个 TCP 端口:

服务 协议 端口 容器名
Postfix SMTP TCP 25 postfix-mailcow
Postfix SMTPS TCP 465 postfix-mailcow
Postfix Submission TCP 587 postfix-mailcow
Dovecot IMAP TCP 143 dovecot-mailcow
Dovecot IMAPS TCP 993 dovecot-mailcow
Dovecot POP3 TCP 110 dovecot-mailcow
Dovecot POP3S TCP 995 dovecot-mailcow
Dovecot ManageSieve TCP 4190 dovecot-mailcow
HTTP(S) TCP 80/443 nginx-mailcow

请注意,因为垃圾邮件滥用的原因,很多国外的 VPS 商家并不允许架设邮件发送服务器,并且默认 25 端口的出口方向是屏蔽的,请自行咨询厂商。

安装 Docker 和 Docker Compose

请参考本站教程

设置 DNS 解析记录

我们假设你的邮箱服务器需要使用域名 mail.example.com,你想搭建 username@example.com 的邮箱;

然后你的服务器 IPv4 为 192.0.2.25,IPv6 为 2001:db8::25,那么请预先做好如下解析:

域名 解析类型 解析值
mail.example.com A 192.0.2.25
mail.example.com AAAA 2001:db8::25
example.com MX 10 mail.example.com.
example.com TXT “v=spf1 mx ~all”
_dmarc.example.com TXT “v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;”
autodiscover.example.com CNAME mail.example.com.
autoconfig.example.com CNAME mail.example.com.

本站注:
案例 apihub.top (参考上述配置)最终配置如图:

请注意某些 DNS 厂商的控制面板添加 MX 和 CNAME 记录时不需要输入最后的点号,添加 TXT 记录时不需要最前面和最后面的引号。

另外需要联系你的 VPS 厂商,设置 PTR 记录,即 IP 反向解析,请设置 192.0.2.25 和 2001:db8::25 的 PTR 记录为 mail.example.com. 提高邮件到达率。

安装 Mailcow

首先我们获取 Mailcow 的安装代码:

apt install git -y
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized 

然后生成配置文件,请注意使用 FQDN (比如 mail.example.com) 作为 hostname:

bash generate_config.sh 

按照提示输入自己的需求后即可生成好配置文件 mailcow.conf,如有需要可以自己修改这个文件。

然后拉取 Docker 镜像并启动

docker compose pull
docker compose up -d 

耐心等待几分钟后即可访问 https://mail.example.com/ 默认用户名 admin 默认密码 moohoo,建议立马修改并开启 2FA 两步验证确保安全。

添加域名和邮箱

进入 Mailcow 后台后,我们可以在顶部的 Configuration > Mail Setup 里添加域名

在左侧的 Domains tab 里选择 +Add domain 添加域名:

按照自己的要求填入各种设置:

如果需要立马生效 Web 客户端,可以选择 Add domain and restart SOGo

开启 DKIM 并添加 DNS 记录

开启 DKIM 后邮件发信到达率更高,你可以登录 Mailcow 后台后在 Configuration > ARC/DKIM keys 查看你域名的 dkim 记录值:

右边那一串 v=DKIM1;k=rsa;t=s;s=email;p= 的 2048 位字符即你的 DKIM 值,如果未开启,可以在下方输入域名,选择 2048 位,然后点 + Add 按钮添加

默认添加完域名后即开启了 DKIM,且 Selector 设置为 dkim,然后我们需要添加如下 DNS 记录:

域名 解析类型 解析值
dkim._domainkey.example.com TXT “v=DKIM1;k=rsa;t=s;s=email;p=blablablablablabla”

某些 DNS 厂商的后台可能无法直接添加 2048 位 DKIM 的 TXT 记录,因为 TXT 类型的 DNS 记录最大长度为 255 个字符,那么请手工截断成两个 TXT 记录,第一个需要 255 个字符,第二个记录为剩下的字符串

添加邮箱用户

我们可以在 Mailboxes 这个 tab 里选择 +Add mailbox 按钮添加用户:

按要求提示填写即可:

测试邮件

我们使用刚开的用户登录 Mailcow 自带的 SOGo,默认情况下地址为 https://mail.example.com/SOGo/
或者点击右上角 “应用” 下的 “Webmail”。

首先,测试接受邮件,使用任何外部邮箱给 username@example.com 发一封邮件,看看是否正常收到邮件。

然后我们测试发送邮件,在 mail-tester.com 发送一封 Plain Text 格式的测试邮件,稍等片刻后即可查看你的邮件分数,我们可以看到,严格按照本文教程搭建的自建邮箱服务评分可以是 10 分:

Mailcow 的更新和备份

Mailcow 的更新只需执行 update.sh 脚本即可:

cd /opt/mailcow-dockerized
./update.sh 

按照提示更新仓库文件:

然后再次执行 ./update.sh 更新 Mailcow,提供提示 Are you sure you want to update mailcow: dockerized? All containers will be stopped. [y/N] 输入 y 然后按回车:

然后耐心等待 Docker 更新并重启容器,并且可以选择删除旧的容器:

你也可以使用 docker system prune 命令清除无用的 Docker 镜像。

Mailcow 的备份也自带脚本,我们只需进入目录执行 ./helper-scripts/backup_and_restore.sh 即可:

假设你需要备份到 /opt/backup 目录

cd /opt/mailcow-dockerized
MAILCOW_BACKUP_LOCATION=/opt/backup
./helper-scripts/backup_and_restore.sh backup all 

建议使用定时脚本每天定时备份并同步到第三方机房加密保存

一个简单的 crontab 定时脚本如下

5 3 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all 

具体备份命令可参考官方教程

Mailcow 的迁移

有时候我们需要更换服务器,因为基于 Docker 安装,迁移 Mailcow 是个很简单的事情。

首先,在需要迁移的服务器安装 Docker 和 Docker Compose,并确保两边的版本一致,然后停止 Docker 服务:

systemctl stop docker.service
systemctl stop docker.socket 

使用 systemctl status docker 命令检查下 Docker 的状态:

然后从原来的机器把 Docker 容器和挂载的 Volumes 同步到新的机器:

新旧机器均需要安装 rsync

apt install rsync -y 

旧的机器生成一个 SSH Key:

ssh-keygen -t ed25519 

然后把 /root/.ssh/id_ed25519.pub 文件内容加到新机器的 /root/.ssh/authorized_keys

然后同步 Mailcow 文件和 Docker 挂载的 Volumes:

rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@新机器:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@新机器:/var/lib/docker/volumes 

然后在原来的机器停止 Mailcow 容器:

cd /opt/mailcow-dockerized
docker compose down 

然后再次执行一次同步:

rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@新机器:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@新机器:/var/lib/docker/volumes 

然后在新的机器启动 Docker 服务:

systemctl start docker.service 

然后在新的机器启动 Mailcow 容器:

cd /opt/mailcow-dockerized
docker compose pull
docker compose up -d 

记得迁移之前需要修改好 DNS 记录,解析到新的服务器 IP 即可。

这个迁移方法理论上适合任何使用 Docker 安装的软件

问题集锦

  • 提示:too many colons in address
    docker compose up -d
    WARN[0000] The "WATCHDOG_NOTIFY_EMAIL" variable is not set. Defaulting to a blank string.
    1 error(s) decoding:
    
    * error decoding 'Ports': Invalid ip address :: address ::: too many colons in address

    解决

       - "${HTTPS_BIND:-:}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}" 
       - "${HTTP_BIND:-:}:${HTTP_PORT:-80}:${HTTP_PORT:-80}" 
    
    # 修改为
    
       - "80:80"
       - "443:443"
  • 提示:Pool overlaps with other one on this address space
     Network mailcowdockerized_mailcow-network  Error                                                                                                                                   0.0s
    failed to create network mailcowdockerized_mailcow-network: Error response from daemon: Pool overlaps with other one on this address space

    解决
    由于 当前 Docker 网络已占用 172.22.1 网段,导致无法启动本程序。

    # 查看网络
    docker network ls  | awk '{print $1}' | xargs docker inspect | grep -B 15 172.22
    
    # 找出 `"Name"` 选项中的网络,先停止该容器,待启动本项目,再启动该容器。

给docker设置个代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

if ! grep HTTP_PROXY /etc/systemd/system/docker.service.d/http-proxy.conf;
then
cat >> /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:3128/" "HTTPS_PROXY=http://127.0.0.1:3128/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
EOF
fi

# Flush changes:
sudo systemctl daemon-reload
#Restart Docker:
sudo systemctl restart docker
#Verify that the configuration has been loaded:
sudo systemctl show --property=Environment docker
# 像这样:Environment=HTTP_PROXY=http://127.0.0.1:8081/ NO_PROXY=localhost,127.0.0.1,docker-registry.so