PY-KMS
py-kms es un emulador de servidor KMS gratuito de código abierto escrito en Python.
Enlaces
Documentation — py-kms documentation
Requisitos
- Docker o Podman instalado siguiendo los pasos
dede instalar - Portainer configurado siguiendo los pasos
dede instalar portainer. - NGINX Proxy manager siguiendo los pasos de
instalarinstalar NGINX Proxy Manager. (opcional)
Imagen
Repositorio de Docker Hub: pykmsorg/py-kms - Docker Image | Docker Hub
Directorio de datos
mkdir -pv $CONTAINERDIR/py-kmsPortainer- Nuevo «stack»
Add a new stack – Portainer Documentation
docker pull ghcr.io/py-kms-organization/py-kms:python3
Web editor
En Portainer «Stack» agregamos nuevo usando el editor WEB pegando el contenido del fichero «docker-compose.yml» y el contenido del fichero de variables
Fichero de variables «.env»
IP=0.0.0.0
SQLITE=true
HWID=RANDOM
LOGLEVEL=INFO
Fichero docker-compose.yml
services:
py-kms:
image: ghcr.io/py-kms-organization/py-kms:python3
container_name: py-kms
restart: unless-stopped
env_file: stack.env
volumes:
- $CONTAINERDIR/py-kms:db:/home/py-kms/db
- /etc/localtime:/etc/localtime:ro
ports:
- 1688:1688
- 8080:8080
volumes:
db:
networks:
proxy:
external: true
En este punto ya puedes ir a http://my.docker.ip.address:8080 y comprobar las activaciones que se van realizando
Publicando detrás de un proxy
Podemos publicar la web anterior detrás de un proxy proxy
Crear registro DNS
En el proveedor que aloja el servidor DNS público, crear un registro DNS que resuelva la IP pública que llega al Proxy hacia un nombre del estilo "host.kms.domain.com"
NGINX proxy
Para publicar el contenedor detrás de de NGINX proxy, como el stack está en la red proxy solo deberás añadircrear alun finalnuevo del fichero "docker-compose.yml" lo siguiente:host
networks:
default:
external: true
name: proxy
Crear un nuevo "proxy host"
Añade un nuevo proxy host con el nombre de dominio creado en el paso anterior redirigido hacia el nombre del contenedor y el puerto:

Redirección de puerto TCP 1688
En el caso de querer que sea el proxy quien acepte las peticiones del puerto TCP 1688 y las redirija al contenedor "pykms" configuraremos un stream como el siguiente:

Si configuramos el proxy para la redirección del puerto TCP1688, deberemos eliminarlo del fichero docker-compose de "py-kms" y agregarlo en el fichero de "NGINX Proxy manager"
....
ports:
- 80:80 # Public HTTP Port
- 443:443 # Public HTTPS Port
- 81:81 # Admin Web Port
# Add any other Stream port you want to expose
- 1688:1688 # KMS
Activación de Windows
Desde una ventada de comandos con privilegios de Administrador:
Slmgr /ipk <product key>
Slmgr /skms kms.domain.com
Slmgr /ato
Activación de Office (64bits)
Desde una ventada de comandos con privilegios de Administrador:
cd "\Program Files\Microsoft Office\Office16"
cscript ospp.vbs /sethst:kms.domain.com
cscript ospp.vbs /act
Conversión Windows Server
Opciones de actualización y conversión para Windows Windows Server | Microsoft Learn
Ejecute los comandos siguiente en un símbolo del sistema con privilegios elevados o una sesión de PowerShell:
# Para obtener versión actual
DISM /online /Get-CurrentEdition
# Para comprobar a qué ediciones se puede convertir la instalación actual
DISM /online /Get-TargetEditions
# Para convertir
DISM /online /Set-Edition:<target edition> /ProductKey:<product key> /AcceptEula
Por ejemplo, convertir a ServerDatacenter
DISM /online /Set-Edition:ServerDatacenter /ProductKey:ABCDE-12345-ABCDE-12345-ABCDE /AcceptEula