diff --git a/README.md b/README.md new file mode 100644 index 0000000..d92d5f7 --- /dev/null +++ b/README.md @@ -0,0 +1,386 @@ +# KMS服务器 + +快速部署的KMS服务器,提供针对Windows和Office的激活服务,同时内置了各个版本的激活密钥与命令。 + +kms-server支持Docker容器化部署,在[Docker Hub](https://hub.docker.com/repository/docker/dnomd343/kms-server)或[Github Package](https://github.com/dnomd343/TProxy/pkgs/container/kms-server)可以查看已构建的镜像。 + +## 使用方法 + +以 `kms.343.re` 为例,在成功部署KMS服务以后,你可以访问网页或者命令行请求获取激活密钥。 + +``` +# 输出操作说明 +shell> curl kms.343.re + +# 输出Windows的KMS密钥 +shell> curl kms.343.re/win + +# 输出Windows Server的KMS密钥 +shell> curl kms.343.re/win-server + +# 输出Office激活说明 +shell> curl kms.343.re/office + +``` + +部署完成后,需要KMS服务的地方填入 `kms.343.re` 即可激活。 + +## 镜像获取 + +`kms-server` 可以从多个镜像源拉取,其数据完全相同,国内用户建议首选阿里云镜像。 + +``` +# Docker Hub +shell> docker pull docker.io/dnomd343/kms-server + +# Github Package +shell> docker pull ghcr.io/dnomd343/kms-server + +# 阿里云个人镜像 +shell> docker pull registry.cn-shenzhen.aliyuncs.com/dnomd343/kms-server +``` + +## 部署流程 + +**检查防火墙** + +服务器的1688端口必须能接受来自外网的访问,务必检查是否被防火墙拦截。 + +如果开启了 `firewalld` 防火墙服务,使用以下命令放行1688端口 + +``` +shell> firewall-cmd --zone=public --add-port=1688/tcp --permanent +shell> firewall-cmd --reload +shell> firewall-cmd --list-ports +``` + +如果开启了 `ufw` 防火墙服务,使用以下命令放行1688端口 + +``` +shell> ufw allow 1688/tcp +shell> ufw status +``` + +一些云服务商可能会在网页端控制台提供防火墙服务,请在对应页面开放 `1688/tcp` 端口。 + +### Docker方式(推荐) + +**1. 配置Docker环境** + +使用以下命令确认Docker环境 + +``` +# 若正常输出则跳过本步 +shell> docker --version +···Docker版本信息··· +``` + +使用以下命令安装Docker + +``` +# RH系 +shell> sudo yum update +··· +# Debian系 +shell> sudo apt update && sudo apt upgrade +··· +# 使用Docker官方脚本安装 +shell> sudo wget -qO- https://get.docker.com/ | bash +··· +# 安装成功后将输出Docker版本信息 +shell> docker --version +Docker version ···, build ··· +``` + +**2. 启动KMS服务** + +启动容器并映射端口 + +``` +# 映射容器1688与1689端口到宿主机,容器路径可替换为上述其他源 +shell> docker run -d --name kms -p 1688:1688 -p 1689:1689 dnomd343/kms-server +# 查看容器状态 +shell> docker ps -a +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +··· +``` + +若服务器1689端口未配置防火墙,在浏览器输入 `http://服务器IP:1689/` 即可访问Web主页。 + +``` +# 测试容器是否正常工作 +shell> curl 127.0.0.1:1689/win +···不同版本Windows的KMS密钥··· +``` + +**3. 配置反向代理** + +将用于KMS服务的域名DNS解析到当前服务器,这里使用Nginx作为示例,其他Web服务原理类似, + +``` +# 进入Nginx配置目录 +shell> cd /etc/nginx/conf.d +# 下载配置文件 +shell> wget https://raw.githubusercontent.com/dnomd343/kms-server/master/conf/nginx/docker.conf -O kms.conf +# 修改配置文件中域名、证书、端口等信息 +shell> vim kms.conf +``` + +如果你的网络无法正常访问Github,将下述内容写入配置文件亦可。 + +``` +server { + listen 80; + listen [::]:80; + server_name kms.343.re; # 改为自己的域名 + location / { + if ($http_user_agent !~* (curl|wget)) { + return 301 https://$server_name$request_uri; + } + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:1689; + } +} + +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name kms.343.re; # 改为自己的域名 + ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书 + ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem; + + gzip on; + gzip_buffers 32 4K; + gzip_comp_level 6; + gzip_min_length 100; + gzip_types application/javascript text/css text/xml; + gzip_disable "MSIE [1-6]\."; + gzip_vary on; + + location / { + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:1689; + } +} +``` + +重启Nginx服务 + +``` +shell> nginx -s reload +``` + +### 常规方式 + +此方式较为繁琐且可能存在版本兼容问题,不熟悉Linux操作的用户建议使用上述Docker方式。 + +**1. 拉取源码** + +首先拉取仓库到服务器上,这里以 `/var/www/kms-server` 为例 + +``` +shell> cd /var/www +shell> git clone https://github.com/dnomd343/kms-server.git +Cloning into 'kms-server'... +··· +Unpacking objects: 100% ··· done. +``` + +**2. 环境检查** + +确定你的服务器上有PHP环境,同时有 `curl` 工具 + +``` +shell> php -v +···PHP版本信息··· + +shell> curl --version +···curl版本信息··· + +``` + +确认PHP-FPM正常运行 + +``` +shell> systemctl | grep fpm + php7.3-fpm.service loaded active running The PHP 7.3 FastCGI Process Manager +``` + +**3. 配置Web服务** + +配置网页服务器代理,需要额外占用除80与443之外的一个端口,默认为TCP/1689,可按需修改。 + +将用于KMS服务的域名DNS解析到当前服务器,这里使用Nginx作为示例,其他Web服务原理类似。 + +``` +# 进入nginx配置目录 +shell> cd /etc/nginx/conf.d + +# 从代码仓库复制配置文件 +shell> cp /var/www/kms-server/conf/nginx/kms.conf ./ + +# 修改配置文件中域名、证书、端口等信息 +shell> vim kms.conf +``` + +配置文件内容如下 + +``` +server { + listen 80; + listen [::]:80; + server_name kms.343.re; # 改为自己的域名 + location / { + if ($http_user_agent !~* (curl|wget)) { + return 301 https://$server_name$request_uri; + } + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:1689; + } +} + +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name kms.343.re; # 改为自己的域名 + ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书 + ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem; + + gzip on; + gzip_buffers 32 4K; + gzip_comp_level 6; + gzip_min_length 100; + gzip_types application/javascript text/css text/xml; + gzip_disable "MSIE [1-6]\."; + gzip_vary on; + + location / { + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:1689; + } +} + +server { + listen 1689; + root /var/www/kms-server; + + location / { + set $query_param $query_string; + if ($http_user_agent ~* (curl|wget)) { + set $query_param $query_param&cli=true; + } + include fastcgi_params; + fastcgi_pass 127.0.0.1:9000; + fastcgi_param QUERY_STRING $query_param; + fastcgi_param SCRIPT_FILENAME /var/www/kms-server/backend/route.php; + } + + location /assets {} +} +``` + +其中PHP-FPM接口在各系统上不同 + +``` +# RH系一般为本地9000端口 +shell> netstat -tlnp | grep 9000 +tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 783/php-fpm: master +# Debian系一般为sock方式 +shell> ls /var/run/php/ +php7.3-fpm.pid php7.3-fpm.sock +``` + +对应Nginx配置如下 +``` +# RH系 +fastcgi_pass 127.0.0.1:9000; +# Debian系 +fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; +``` + +重启Nginx服务 + +``` +shell> nginx -s reload +``` + +**4. 配置vlmcsd服务** + +在vlmcsd的[Github页面](https://github.com/Wind4/vlmcsd/releases)获取最新release包 + +``` +# 下载最新release并解压 +shell> wget https://github.com/Wind4/vlmcsd/releases/download/svn1113/binaries.tar.gz +shell> tar xf binaries.tar.gz + +# 不同架构主机选择不同文件,以下为常见示例 +# x86-64架构 +shell> cp binaries/Linux/intel/static/vlmcsd-x64-musl-static /usr/bin/vlmcsd +# x86架构 +shell> cp binaries/Linux/intel/static/vlmcsd-x86-musl-static /usr/bin/vlmcsd +# arm架构 +shell> cp binaries/Linux/arm/little-endian/static/vlmcsd-armv7el-uclibc-static /usr/bin/vlmcsd + +# 确认vlmcsd是否正常 +shell> vlmcsd -V +···vlmcsd版本信息··· +``` + +将vlmcsd配置为系统服务 + +``` +shell> cp /var/www/kms-server/conf/vlmcsd.service /etc/systemd/system/ +``` + +`vlmcsd.service` 文件内容如下,可按需要修改 + +``` +[Unit] +Description=KMS Server By vlmcsd +After=network.target + +[Service] +Type=forking +PIDFile=/var/run/vlmcsd.pid +ExecStart=/usr/bin/vlmcsd -p /var/run/vlmcsd.pid +ExecStop=/bin/kill -HUP $MAINPID +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +``` + +载入systemctl服务 + +``` +shell> systemctl daemon-reload +shell> systemctl enable vlmcsd +shell> systemctl start vlmcsd +shell> systemctl status vlmcsd +··· +Active: active (running) ··· +··· +``` + +## 容器构建 + +**本地构建** + +``` +# 克隆仓库 +shell> git clone https://github.com/dnomd343/kms-server.git +shell> cd kms-server +# 构建镜像 +shell> docker build -t kms-server . +``` + +**交叉构建** + +``` +# 构建并推送至Docker Hub +shell> docker buildx build -t dnomd343/kms-server --platform="linux/amd64,linux/arm64,linux/386,linux/arm/v7" https://github.com/dnomd343/kms-server.git#master --push +``` + +## 许可证 + +MIT ©2021 [@dnomd343](https://github.com/dnomd343) \ No newline at end of file