Instalando MongoDB 3.0.4 sobre Windows 10

Cuando el plan Sandbox gratuito de MongoLab’s Database-as-a-Service (DBaaS) quedó chico (ofrece una capacidad maxima de 500MB), pasé a instalar una instancia nueva de MongoDB para migrarlo, y la VM libre que ya tenia aprovisionada era un Windows 10 Enterprise, Build 10074... y porque no?, no será el server mas estable de todos, pero tampoco lo pienso usar en un entorno de producción, y no va a tener mucha vida util así que... go-ahead!.

Los pasos para la instalación fueron tres:

  1. Bajar el paquete de instalación desde el sitio de MongoDB
  2. Crear el script pauer (según Mugica... tambien conocido como powershell), de setup en la misma carpeta donde quedó el paquete de instalación, y ejecutarlo.
  3. Crear el endpoint en la VM Azure para poder acceder a MongoDB desde internet.

Paso 1 - Bajar MongoDB

Me bajé del sitio de MongoDB la versión Windows 64-bit 2008 R2+, mas que nada por lo del signo +.. era la versión mas alta para Windows, y lo deje en mi carpeta Downloads (C:\Users\diego\Downloads).

MongoDB download

Paso 2 - Crear y ejecutar el script de setup

Siguiendo los pasos del tutorial Install MongoDB on Windows me cree un script pauer en la misma carpeta Download y lo deje preparado para ejecutar las siguientes tareas:

  1. Instalar el paquete de MongoDB en la carpeta C:\MongoDB de mi Windows 10 (por omisión MongoDB se instala en la carpeta Program files).
  2. Crear los directorios para las bases de datos (C:\MongoDB\db), y archivos de log (C:\MongoDB\log).
  3. Crear el archivo de configuración para poder levantar MongoDB como servicio, y de paso habilitar la authenticación (por omisión MongoDB se instala sin authenticacion, pudiendo acceder solo en forma local).
  4. Instalar MongoDB como servicio e iniciarlo.
  5. Crear el usuario Administrador que me permitirá acceder al servidor desde internet.
  6. ..y por ultimo abrir el puerto TCP del MongoDB service para acceso remoto.

Salvé el script como MongoDBsetup.ps1:

<# MongoDBsetup.ps1 - Setup a MongoDB installation #>
Param ([parameter(Mandatory=$True)] [string]$msiFile)

If (-not (Test-Path $msiFile -PathType Leaf)) {
    Write-Output "No se encuentra el archivo $msiFile"
    Write-Output "Uso: $($MyInvocation.MyCommand.Name) <msiFileSpec>"
    Exit
}

# Ajusta estos tres valores a tu instalacion
$installPath  = "C:\MongoDB"
$userName     = "MongoAdmin"
$userPassword = "S3cur3P4ssw0rd"

# Variables internas del script
Set-Variable _serviceName -option Constant -value "MongoDB"
Set-Variable _serviceFile -option Constant -value "$installPath\bin\mongod.exe"
Set-Variable _clientFile  -option Constant -value "$installPath\bin\mongo.exe"
Set-Variable _configFile  -option Constant -value "$installPath\mongod.config"
Set-Variable _userFile    -option Constant -value "$installPath\usersetup.js"

# Comienza el setup
Write-Output "Instalando $msiFile en $installPath..`r"
$_argumentList = "/passive /i `"$msiFile`" INSTALLLOCATION=`"$installPath`" ADDLOCAL=`"all`""
Start-Process msiexec.exe -ArgumentList $_argumentList -Wait -NoNewWindow

Write-Output "Creando directorios..`r"
New-Item -ItemType Directory -Force -Path $installPath\data\db
New-Item -ItemType Directory -Force -Path $installPath\data\log

Write-Output "Creando archivo de configuracion..`r"
"dbpath=$installPath\data\db"             | Out-File     $_configFile -Encoding ascii
"logpath=$installPath\data\log\mongo.log" | Out-File     $_configFile -Encoding ascii -Append
"auth=true"                               | Out-File     $_configFile -Encoding ascii -Append

Write-Output "Instalado MongoDB como servicio..`r"
$_argumentList = "--config `"$_configFile`" --install"
Start-Process $_serviceFile -ArgumentList $_argumentList -Wait -NoNewWindow
net start $_serviceName
Start-Sleep 5 # Esperando que levante completamente el servicio

Write-Output "Creando usuario $userName en la base de datos admin..`r"
"db.createUser({user: '$userName', pwd: '$userPassword'," | Out-File $_userFile -Encoding ascii
"roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})"  | Out-File $_userFile -Encoding ascii -Append

$_argumentList = "admin `"$_userFile`""
Start-Process $_clientFile -ArgumentList $_argumentList -Wait -NoNewWindow
Remove-Item $_userFile

Write-Output "Abriendo el puerto de $_serviceName en el firewall..`r"
New-NetFirewallRule -Name $_serviceName -DisplayName $_serviceName -Program $_serviceFile `
    -Direction Inbound -Action Allow

Write-Output "Finalizado.`r"

Para ejecutarlo abrí un Command Prompt (CMD), con privilegios de administrador (Run as administrator), e ingresé los comandos:

cd C:\Users\diego\Downloads
powershell .\MongoDBsetup.ps1 mongodb-win32-x86_64-2008plus-ssl-3.0.4.msi

Paso 3 - Crear un nuevo endpoint en la VM Azure

Mediante la consola de administración de Microsoft Azure, o Azure Management Portal entré en mi suscripción, Virtual Machines (tercera opción del menú lateral izquierdo), clic sobre mi VM con Windows 10, clic en la solapa Endpoints, clic en el botón Add del menú inferior, seleccioné la opción Add a stand-alone endpoint, clic en siguiente, y completé los campos como se muestran en la siguiente imagen:

Add an endpoint

Guardar, y listo.

Pauer ExecutionPolicy

Antes de poder ejecutar por primera vez el script tuve que relajar las politicas de ejecución del powershell mediante el comando:

Set-ExecutionPolicy unrestricted

Una vez finalizada la instalación volví al default:

Set-ExecutionPolicy restricted

Mas info en: https://technet.microsoft.com/library/hh847748.aspx