Servidor Web .NET i SQL amb Windows 2016 core
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.
- Habilitar el servidor Web Internet Information Server (IIS)
- Habilitar el servei de FTP al servidor Web Internet Information Server (IIS)
- Instal·lar Microsoft SQL Server Express 2014.
- Resum de les comandes per fer scripts.
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ó.
Seleccionar l’idioma de l’entorn i teclat. En el meu cas, Espanyol.
Es carrega l’aplicació d’instal·lació, clicar el botó Instal·lar ara.
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.
Acceptar els termes de la llicència marcant el piscu corresponent i clicar el botó Següent.
S’està fent una actualització del sistema operatiu o es vol fer una instal·lació personalitzada. Com no, clicar a Instal·lació personalitzada.
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.
Esperar a que faci la instal·lació del sistema operatiu.
L’instal·lador ja s’encarrega de reiniciar l’equip quan és necessari.
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.
Introduir la nova contrasenya per l’Administrador i validar amb la tecla Enter.
Se’ns confirma el canvi de contrasenya. Prémer la tecla Enter damunt l’opció OK.
Ja tenim el sistema arrancat, amb la consola de sistema preparada per rebre instruccions.
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
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!
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
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.
Tornar a llançar la comanda de instal·lació anterior. Ara si fa més coses.
Finalitzada la instal·lació assegurem que el resultat ha estat satisfactori. A la consola he de trobar el punt Setup result: 0.
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*
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.
Si tot és correcte accedim a l’administració del mateix, donant per acabada la instal·lació del servidor SQL Server pròpiament dita.
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!
Similar Posts by The Author:
- Microsoft SQL Server con SMB3
- Microsoft SQL Server amb SMB3
- Containers en Linux
- Containers amb Linux
- Migrar el servidor de archivos a Windows Server 2019
- Migrar el servidor de fitxers a Windows Server 2019
- Puerta enlace a Azure en el Windows Admin Center
- Porta enllaç a Azure en el Windows Admin Center
- Hola mundo! WordPress 5 y Gutenberg
- Hola món! WordPress 5 i Gutenberg