Servidor Web .NET i SQL amb Windows 2016 core

Publicat el Deixar un comentari Etiquetes: , , , ,

Esta entrada también está disponible en: Castellà

Desplegament d’un servidor Web per aplicacions .NET i bases de dades Microsoft SQL Server sobre Microsoft Windows Server en la modalitat CORE.

Aprofitant el llançament de Microsoft Windows Server 2016 Technical Preview 4 (TP4, pels amics) el procés de instal·lació del servidor es fa amb aquesta versió, però també és vàlid per a servidor Microsoft Windows Server 2012 R2. Si voleu provar aquesta versió només cal que us inscrigueu per la seva evaluació https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview

El motor de base de dades escollit és la versió SQL Server Express 2014, però també serveix per la versió Estàndard i Enterprise. La versió Express la podeu descarregar del següent enllaç: https://www.microsoft.com/en-us/download/details.aspx?id=46697

 

Els punts a tractar en el desplegament del servidor en mode core:

 

Instal·lació de Microsoft Windows Server 2016 core

Iniciar la màquina (ja sigui física o virtual) des del mitjà de instal·lació (DVD, USB o imatge ISO) de Microsoft Windows Server 2016 TP4. Alerta a l’inici que s’ha de prémer qualsevol tecla per iniciar la instal·lació.

servidor-web-sql-windows-core-001

Seleccionar l’idioma de l’entorn i teclat. En el meu cas, Espanyol.

servidor-web-sql-windows-core-002

Es carrega l’aplicació d’instal·lació, clicar el botó Instal·lar ara.

servidor-web-sql-windows-core-003

S’inicia el procés de instal·lació. En primer lloc es demana pel tipus de instal·lació a realitzar: per defecte (que ara és la de mode consola) o amb l’experiència de l’escriptori (la que té l’entorn gràfic). Seleccionar la primera, la per defecte, i clicar el botó Següent.

servidor-web-sql-windows-core-004
Acceptar els termes de la llicència marcant el piscu corresponent i clicar el botó Següent.

servidor-web-sql-windows-core-005
S’està fent una actualització del sistema operatiu o es vol fer una instal·lació personalitzada. Com no, clicar a Instal·lació personalitzada.

servidor-web-sql-windows-core-006
Seleccionar el disc dur on fer la instal·lació del sistema operatiu i clicar el botó Següent. En el cas que el disc dur contingui particions anteriors, us recomano que les esborreu totes les del disc on s’instal·la el sistema operatiu (sempre i quan no continguin dades) ja que el propi instal·lador les crearà de nou segons les seves necessitats.

servidor-web-sql-windows-core-007

Esperar a que faci la instal·lació del sistema operatiu.

servidor-web-sql-windows-core-008

L’instal·lador ja s’encarrega de reiniciar l’equip quan és necessari.

servidor-web-sql-windows-core-009

Un cop ha acabat de instal·lar el sistema operatiu i la personalització del mateix, es pot iniciar la sessió com Administrador (administrator amb anglès), que és l’usuari seleccionat per defecte. En el primer inici de sessió se’ns pregunta per canviar, més aviat establir, la seva contrasenya. Seleccionar OK amb les fletxes del cursor del teclat i clicar la tecla Enter.

servidor-web-sql-windows-core-010

Introduir la nova contrasenya per l’Administrador i validar amb la tecla Enter.

servidor-web-sql-windows-core-011

Se’ns confirma el canvi de contrasenya. Prémer la tecla Enter damunt l’opció OK.

servidor-web-sql-windows-core-012

Ja tenim el sistema arrancat, amb la consola de sistema preparada per rebre instruccions.

servidor-web-sql-windows-core-013

Des de la consola de sistema podem fer alguna coseta, però el seu és saltar ràpidament a la PowerShell on sí podem treballar al 100%. Observar la diferència entre estar treballant amb la consola de sistema, en què la sol·licitud de comandes comença directament per la unitat de disc dur on ens trobem (C:\….>), o si estem a la PowerShell en què comença per PS seguida per la unitat de disc dur (PS C:\…>). Per accedir a la Powershell des de la consola de sistema introduint la comanda:

powershell

servidor-web-sql-windows-core-014

El primer és el primer i, naturalment, en un servidor cal configurar l’adreçament IP a estàtic. Per esbrinar quin adaptador i adreça IP tenim:

Get-NetAdapter | Get-NetIpAddress

Per establir l’adreça IP estàtica (192.168.0.10 amb màscara 255.255.255.0) amb la seva porta d’enllaç (192.168.0.1) corresponent a la interfície/adaptador Ethernet:

Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | New-NetIPAddress –IPAddress "192.168.0.10" –PrefixLength 24 -DefaultGateway 192.168.0.1

La configuració IP també necessita dels servidors DNS:

Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | set-dnsclientserveraddress -serveraddresses 192.168.0.2

Per veure l’adreça IP que ara té l’adaptador, el resultat ha de ser només l’adreça IP (192.168.0.10):

(Get-NetAdapter |? {$_.Name -eq "Ethernet"} | Get-NetIpConfiguration).Ipv4Address.IpAddress

Si ens hem equivocat o es vol canviar l’adreça IP per un altre, abans hem d’eliminar l’existent:

Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | Remove-NetIpAddress -IPAddress 192.168.0.10 -Confirm:$false

També s’ha de fer el mateix per la porta d’enllaç, en cas que canviï. Recordo que la porta d’enllaç correspon a la ruta d’encaminament a la xarxa 0.0.0.0 amb màscara 0.0.0.0.

Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | Remove-NetRoute -AddressFamily IPv4 -DestinationPrefix 0.0.0.0/0 -Confirm:$false

Si es torna a comprovar l’adreça IP de la interfície, s’observa que ara té assignada una adreça IP APIPA (del rang 169.254.0.0):

(Get-NetAdapter |? {$_.Name -eq "Ethernet"} | Get-NetIpConfiguration).Ipv4Address.IpAddress

La taula d’encaminament de l’equip no té la ruta 0.0.0.0/0 corresponent a la porta d’enllaç per defecte:

Get-NetAdapter |? {$_.Name -eq "Ethernet"} | Get-NetRoute

En cas de voler disposar d’una adreça assignada per DHCP de nou, s’ha d’habilitar a la interfície:

Get-NetAdapter |? {$_.Name -eq "Ethernet"} | set-netipinterface -Dhcp Enabled

Comprovar el nom de l’equip, no agrada massa el resultat oi?

$env:computername

Es pot canviar el nom de l’equip amb la comanda (s’ha d’indicar el nom actual que s’obté amb la comanda anterior i el nou nom):

Rename-computername -ComputerName $env:computername -newname servidorweb

Com és habitual cal reiniciar l’equip per aplicar els canvis:

Restart-computer

Reiniciat l’equip, es pot comprovar de nou el nom de l’equip amb la comanda:

$env:computername

Afegir l’equip al domini, com no. Atents a la comanda, es passa el domini on unir-se, l’usuari i la contrasenya amb permisos per afegir equips al domini:

Add-computer -DomainName "domini.local" -Credential (New-Object System.Management.Automation.PSCredential("DOMINI\administrador",("ContrasenyaUsuari" | ConvertTo-SecureString -AsPlainText -Force)))

Tornar a reiniciar l’equip per aplicar els canvis:

Restart-computer

Al iniciar segurament demana tornar a validar-se amb l’usuari per defecte administrador, en cas de voler canviar-lo, prémer la tecla ESC dos cops per passar a l’opció d’escollir un altre usuari. Indicar el nom d’usuari i contrasenya del domini i ja som a dins!

servidor-web-sql-windows-core-015

Com que la idea és desplegar un servidor una mica fortificat de cara a l’exterior,afinem la configuració del tallafocs per bloquejar tot el trànsit d’entrada per defecte:

Get-netfirewallprofile | set-NetFirewallProfile -DefaultInboundAction Block

Comprovar les regles habilitades al tallafocs que permeten el trànsit d’entrada al servidor:

Get-netfirewallrule -enabled true -direction Inbound -Action Allow | ft DisplayName

Si alguna no agrada, com no, procedir a tancar-la el més aviat possible:

get-netfirewallrule *nomdelaregla* -enabled true | set-netfirewallrule -enabled false

 

Habilitar el servidor Web Internet Information Server (IIS)

Tenim les bases del sistema operatiu establertes, però com a tal no fa res de res. És hora de començar a activar els serveis que ha d’oferir el servidor. Comencem important el mòdul d’administració del propi servidor a la Powershell per poder activar les funcions del mateix.

Import-module ServerManager

Per veure els rols i les característiques disponibles i el seu estat, si està instal·lada o no:

Get-WindowsFeature

Quina llista més llarga! Per concentrar-nos a un grup concret es pot filtrar:

Get-WindowsFeature "Web*"

Com que el servei que s’ofereix és un servidor d’aplicacions web, aquest requereix del Internet Information Server i l’entorn d’execució d’aplicacions .NET. Del .NET utilitzarem la última versió del framework, la ASP.NET 4.

Install-WindowsFeature Web-Common-http,Web-Health,Web-Performance,Web-Asp-Net45,Web-ISAPI-Ext,Web-Windows-Auth,Web-http-redirect,web-request-monitor,web-http-tracing -Confirm:$false

Només habilitant el rol el sistema ja s’encarrega de crear dues noves regles al tallafocs que permeten el trànsit d’entrada HTTP i HTTPS:

Get-NetFirewallRule -Enabled true -Direction Inbound -Action Allow | ? {$_.DisplayName -like "*Web*"} | ft DisplayName

El servidor web ja està servit. Comprovar que ja ens funciona l’accés al servidor Web des d’un equip connectat a la xarxa amb un navegador en què ha de carregar la pàgina de benvinguda estàndard de Internet Information Server:

http://nomservidor

servidor-web-sql-windows-core-016

 

Habilitar el servei FTP al servidor Web Internet Information Server

L’accés per FTP permet pujar i descarregar els fitxers del servidor des de qualsevol equip. El fet de fer-ho per FTP i no per CIFS assegura que l’accés al servidor serà universal, podent-ho fer des de qualsevol punt, no només des de la xarxa local. Per habilitar el servei al servidor des de la Powershell:

Install-WindowsFeature Web-ftp-server -IncludeAllSubFeature -Confirm:$false

Amb el servei donat d’alta, cal crear un lloc FTP al port TCP 21 (l’estàndard de FTP) ubicant la carpeta arrel a la ruta del disc dur C:\FTP Server:

New-WebFtpSite -Name "Servidor FTP" -Port 21 -PhysicalPath "c:\FTP Server" -Force

S’ha creat el lloc, però la carpeta arrel també ha d’existir al disc dur. Per crear-la i així assegurar que no hi ha problemes d’accés a la mateixa més endavant perquè no existeix:

mkdir "c:\FTP Server"

Continuant amb la configuració de lloc FTP, s’estableixen les propietats d’autenticació bàsica:

set-ItemProperty "IIS:\Sites\Servidor FTP\" -Name ftpServer.security.authentication.basicAuthentication.enabled -value $true

Una de les altres configuracions recomanades en els servidors Web és aïllar els usuaris entre ells, que no vegin els fitxers i carpetes dels altres, cadascú la seva carpeta:

Set-ItemProperty "IIS:\Sites\Servidor FTP\" -Name ftpServer.userisolation.mode -value 3

Quan s’utilitza l’aïllament del directori arrel (IsolateRootDirectoryOnly) o de tots els directoris (IsolateAllDirectories) pels usuaris, l’estructura física o virtual de directoris ha de seguir la següent pauta:

Tipus de compte d’usuari Estructura del directori arrel
Usuaris anònims %FtpRoot%\LocalUser\Public
Usuaris locals de Windows
Amb autenticació bàsica.
%FtpRoot%\LocalUser\%UserName%
Usuaris del domini
Amb autenticació bàsica.
%FtpRoot%\%UserDomain%\%UserName%
Administrador IIS o comptes d’usuari amb autenticació personalitzada ASP.NET %FtpRoot%\LocalUser\%UserName%

Per defecte està habilitat el xifrat amb SSL del lloc FTP. Perquè funcioni, el servidor ha de disposar d’un certificat. Si no disposem d’aquest certificat o no necessitem xifrar aquestes comunicacions es pot Deshabilitar el xifrat amb SSL:

Set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.security.sll.controlChannelPolicy -Value 0
Set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.security.sll.dataChannelPolicy -Value 0

Donar permisos als usuaris perquè puguin accedir al servidor FTP. Si l’usuari o grup no està present en aquesta adreça, no poden accedir al servei. Cal afegir els grups segons els privilegis de lectura o lectura i escriptura.

Add-webconfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";roles="Administrators";permissions="Read,Write"} -PSPath IIS:\ -location "Servidor FTP"

Per la resta d’usuaris o grups concrets es pot deixar amb lectura, per exemple.

Add-webconfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";roles="All Users";permissions="Read"} -PSPath IIS:\ -location "Servidor FTP"

O fins i tot, si es pertany a un grup concret no es deixa accedir. Tot depèn de les necessitats del moment.

Add-webconfiguration "/system.ftpServer/security/authorization" -value @{accessType="Deny";roles="NoFTP";permissions="Read,Write"} -PSPath IIS:\ -location "Servidor FTP"

Per aplicar els canvis de configuració al lloc FTP s’ha de reiniciar:

Restart-webitem "IIS:\Sites\Servidor FTP\"

Amb la carpeta arrel creada i l’estructura de carpetes segons siguin usuaris locals o de domini que utilitzin el servei, es poden crear directoris virtuals en cadascuna d’elles, per exemple, per accedir a la carpeta de l’aplicació del servidor Web. En el cas dels usuaris locals seria:

New-Item "IIS:\Sites\Servidor FTP\LocalUser\Operador\Web" -physicalPath "c:\inetpub\wwwroot" -type VirtualDirectory

Per un usuari del domini el directori virtual es crea d’aquesta altra forma:

New-Item "IIS:\Sites\Servidor FTP\domini\Operador\Web" -physicalPath "c:\inetpub\wwwroot" -type VirtualDirectory

Si es fa ara la connexió al servidor FTP ens n’adonem que l’usuari NO visualitza les carpetes virtuals, però si en sap el nom, si hi pot navegar. Això és degut a una característica del lloc FTP. Per permetre visualitzar directament els directoris virtuals als clients FTP:

Set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.directoryBrowse.showFlags -Value "DisplayVirtualDirectories"

Es pot parar i tornar a iniciar el lloc FTP per aplicar els canvis de configuració:

Restart-webitem "IIS:\Sites\Servidor FTP\"

Per reiniciar completament el servei de FTP:

Get-service *ftp* | restart-service

Per comprovar que el servei de FTP està operatiu:

Get-service *ftp*

I abans de connectar, assegurar que les regles del tallafocs del servidor permeten les connexions al servidor FTP, per defecte s’habiliten al instal·lar el rol, però no està de més donar-li una ullada:

Get-netfirewallrule *ftp* | ft DisplayName,Enabled,Action

Ja tenim servei de FTP en funcionament!

 

Instal·lar Microsoft SQL Server Express 2014

La última part de l’entrada és instal·lar el Microsoft SQL Server Express 2014 sobre el servidor Microsoft Windows 2016 en mode core. Aquí teniu una entrada referent a la instal·lació d’un servidor Microsoft SQL Server 2012 en mode complet. Per si és del vostre interès. La instal·lació no canvia massa en les diferents versions 2012, 2014 i 2016.

Abans de començar, assegurar els requeriments, com tenir habilitat el .Net Framework 2.0 i 3.5:

Install-WindowsFeature NET-Framework-Features -IncludeAllSubFeature -Confirm:$false

Carregar el mitjà de instal·lació del Microsoft SQL Server Express 2014, ja sigui per una unitat de xarxa amb la comanda Net use o amb una ISO a la màquina virtual.

Executar la comanda de instal·lació del SQL Server Express amb autenticació mixta i posant les bases de dades a l’arrel de la unitat C, en una carpeta anomenada Databases. Habilitar el servei TCP al servidor SQL per tenir accés des de l’exterior del servidor. Definir la intercalació de les bases de dades per defecte (collation) com a sql_latin1_genera_cp1_ci_as.

Setup.exe /QS /ACTION=Install /ADDCURRENTUSERASSQLADMIN /ENU /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="ADMINISTRATOR" /SQLSVCPASSWORD="ContrasenyaAdministrator" /SQLSYSADMINACCOUNTS="DOMINI\Administradors SQL" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /TCPENABLED=1 /INSTALLSQLDATADIR="C:\Databases" /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD="ContrasenyaSA" /SQLCOLLATION="sql_latin1_general_cp1_ci_as" /INDICATEPROGRESS

Només llançar-ho acaba de preparar el sistema operatiu amb requisits. Això vol dir que s’ha de reiniciar l’equip per poder continuar. No us espanteu. Simplement reiniciar.

servidor-web-sql-windows-core-017

Tornar a llançar la comanda de instal·lació anterior. Ara si fa més coses.

servidor-web-sql-windows-core-018

Finalitzada la instal·lació assegurem que el resultat ha estat satisfactori. A la consola he de trobar el punt Setup result: 0.

servidor-web-sql-windows-core-019

Comprovar que s’han instal·lat correctament els serveis de SQL Server. Des de la PowerShell (recordo que per accedir-hi només cal escriure la comanda powershell):

Get-service *sql*

servidor-web-sql-windows-core-020

S’han habilitat i engegat els serveis de SQL Server, però el tallafocs bloqueja tots els ports. Crear una nova regla per permetre l’accés al servei de SQL Server, en aquest cas el port TCP 1433 només per la xarxa local:

New-netfirewallrule -Name "SQL Server" -DisplayName "Microsoft SQL Server Engine" -Enabled True -Profile Domain,Private -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433 -RemoteAddress Localsubnet

Des d’un equip client realitzar una connexió remota al servidor amb les eines d’administració de SQL Server. Introduir el nom del servidor, en aquest cas autentiquem amb l’usuari SA i la contrasenya definida durant la instal·lació. Clicar el botó Connectar.

servidor-web-sql-windows-core-021

Si tot és correcte accedim a l’administració del mateix, donant per acabada la instal·lació del servidor SQL Server pròpiament dita.

servidor-web-sql-windows-core-022

D’aquesta forma ja tenim un servidor mig fortificat, més aviat amb els serveis i superfície d’atac mínims, per rebre aplicacions Web .NET amb servei bases de dades Microsoft SQL Server.

Desenvolupadors de .NET al poder!

 

Resum de comandes per anar “rapidet”

Us deixo el resum de comandes Powershell per si voleu fer algun script de instal·lació i així anar més ràpid en el moment de fer aquests desplegaments:

Post-instal·lació del servidor Windows 2016 core:

#Variables a canviar en cada cas!
$AdrecaIP="192.168.0.10"
$Submascara=24
$PortaEnllac="192.168.0.1"
$NomServidor="servidorweb"
$DominiAD="domini.local"
$UsrAdministrador="DOMINI\Administrator"
$ContrasenyaAdmin="ContrasenyaAdministrador"

#Comandes
Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | New-NetIPAddress –IPAddress $AdrecaIP –PrefixLength $Submascara -DefaultGateway $PortaEnllac

Get-NetAdapter | ? {$_.Name -eq "Ethernet"} | set-dnsclientserveraddress -serveraddresses 192.168.0.2

Rename-computername -ComputerName $env:computername -newname $NomServidor

Add-computer -DomainName $DominiAD -Credential (New-Object System.Management.Automation.PSCredential($UsrAdministrador,($ContrasenyaAdmin | ConvertTo-SecureString -AsPlainText -Force)))

Get-netfirewallprofile | set-NetFirewallProfile -DefaultInboundAction Block

Restart-computer

Es reinicia l’equip per aplicar els canvis del nom del servidor i ajuntar-lo al Active Directory.

 

Habilitar el servidor Web:

Import-module ServerManager

Install-WindowsFeature Web-Common-http,Web-Health,Web-Performance,Web-Asp-Net45,Web-ISAPI-Ext,Web-Windows-Auth,Web-http-redirect,web-request-monitor,web-http-tracing -Confirm:$false

Habilitar el servei FTP al servidor Web:

#Variables
$DirectoriArrelFTP="C:\FTP Server"
$Domini="domini"


#Comandes
Install-WindowsFeature Web-ftp-server -IncludeAllSubFeature -Confirm:$false

New-WebFtpSite -Name "Servidor FTP" -Port 21 -PhysicalPath $DirectoriArrelFTP -Force

mkdir $DirectoriArrelFTP

set-ItemProperty "IIS:\Sites\Servidor FTP\" -Name ftpServer.security.authentication.basicAuthentication.enabled -value $true

set-ItemProperty "IIS:\Sites\Servidor FTP\" -Name ftpServer.userisolation.mode -value 3

mkdir $DirectoriArrelFTP"\LocalUser"

mkdir $DirectoriArrelFTP"\LocalUser\Public"

mkdir $DirectoriArrelFTP"\"$Domini

set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.security.sll.controlChannelPolicy -Value 0

set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.security.sll.dataChannelPolicy -Value 0

Set-ItemProperty "IIS:\Sites\Servidor FTP" -Name ftpServer.directoryBrowse.showFlags -Value "DisplayVirtualDirectories"

Add-webconfiguration "/system.ftpServer/security/authorization" -value @{accessType="Allow";roles="Administrators";permissions="Read,Write"} -PSPath IIS:\ -location "Servidor FTP"

Restart-webitem "IIS:\Sites\Servidor FTP\"

Get-service *ftp* | restart-service

Instal·lació de Microsoft SQL Server Express 2014:

Install-WindowsFeature NET-Framework-Features -IncludeAllSubFeature -Confirm:$false

Aquí s’ha de canviar aquesta comanda segons les vostres necessitats:

Setup.exe /QS /ACTION=Install /ADDCURRENTUSERASSQLADMIN /ENU /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="ADMINISTRATOR" /SQLSVCPASSWORD="ContrasenyaAdministrator" /SQLSYSADMINACCOUNTS="DOMINI\Administradors SQL" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /TCPENABLED=1 /INSTALLSQLDATADIR="C:\Databases" /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD="ContrasenyaSA" /SQLCOLLATION="sql_latin1_general_cp1_ci_as" /INDICATEPROGRESS
New-netfirewallrule -Name "SQL Server" -DisplayName "Microsoft SQL Server Engine" -Enabled True -Profile Domain,Private -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433 -RemoteAddress Localsubnet

restart-computer

Recordar que s’ha de llançar dos cops perquè s’ha de reiniciar l’equip, per aplicar la regla del tallafocs

 

T’ha agradat l’article? El pots compartir a les xarxes socials. També pots deixar la teva opinió, comentari o suggeriment. Gràcies!

 

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *