-
Script de Déploiement automatique de DNN (DotNetNuke) sur IIS
Ah là, je dois dire que ça m'a fait me creuser les méninges quelques heures.
Je n'étais pas du tout familier de SQL Server (encore moins en powershell)... je ne suis pas déçu :-D
Le script déploie le CMS DNN 9.13.3 (anciennement DotNetNuke) sur Windows Server 2022, avec IIS, SQL Server Express 2019 et SSMS (mais ça c'est juste pour vous, pour la gestion à venir via l'interface graphique, puisque tout est fait en powershell durant l'installation).A copier/coller dans ISE, (en mode Administrateur) et à exécuter après relecture en tapant "INSTALLER.DNN"
Il vous restera à vous connecter à http://127.0.0.1 pour initialiser DNNfunction fINSTALLER.DNN { ##################################################### # MESSAGE D'ACCUEIL : $result = [System.Windows.Forms.MessageBox]::Show("Ce programme vous permet de déployer DNN 9.13.3 sur le Serveur Web IIS.`nIl désactivera le site web par défaut de IIS et créera un site pour DNN. `n`nL'installation dure environ 10 minutes et déploie IIS, SQL Server Express 2019, et SSMS.`n`nL'installation continue en tâche de fond par moments. `nElle ne sera terminée que lorsqu'un message vous l'indiquera clairement.`n`nVoulez-vous continuer ?", "Information", [System.Windows.Forms.MessageBoxButtons]::YesNo) if ($result -eq "No") { exit } ##################################################### # INSTALLER IIS AVEC LES MODULES NECESSAIRES : # Installe IIS Add-WindowsFeature Web-Server # Installe les outils de gestion, y compris la console de gestion IIS Add-WindowsFeature Web-Mgmt-Tools Add-WindowsFeature Web-Mgmt-Console Add-WindowsFeature Web-Mgmt-Compat Add-WindowsFeature Web-Metabase # Installe les fonctionnalités HTTP communes Add-WindowsFeature Web-Default-Doc Add-WindowsFeature Web-Dir-Browsing Add-WindowsFeature Web-Http-Errors Add-WindowsFeature Web-Static-Content # Installe les fonctionnalités d'intégrité et de diagnostic Add-WindowsFeature Web-Http-Logging # Installe les fonctionnalités de performance Add-WindowsFeature Web-Stat-Compression # Installe les fonctionnalités de sécurité Add-WindowsFeature Web-Request-Monitor # Installer les outils de Développement Add-WindowsFeature Web-Net-Ext Add-WindowsFeature Web-Net-Ext45 Add-WindowsFeature Web-ASP-Net45 Add-WindowsFeature Web-ISAPI-Ext Add-WindowsFeature Web-ISAPI-Filter Add-WindowsFeature Web-WebSockets # Installe les fonctionnalités HTTP communes Add-WindowsFeature Web-Default-Doc Add-WindowsFeature Web-Static-Content # Installe les fonctionnalités de Santé et Diagnostics Add-WindowsFeature Web-Custom-Logging # Installe les fonctionnalités de Performances Add-WindowsFeature Web-Dyn-Compression Add-WindowsFeature Web-Stat-Compression # Installe les fonctionnalités de Sécurité Add-WindowsFeature Web-Basic-Auth Add-WindowsFeature Web-Filtering Add-WindowsFeature Web-Windows-Auth # Installe l'Authentification de base Add-WindowsFeature Web-Basic-Auth # Installer FastCGI Add-WindowsFeature Web-CGI # Redémarrer le service IIS Restart-Service w3svc ###################################################### # SAUVEGARDER LE CONTENU DE C:\inetpub\wwwroot # Spécifiez le répertoire source et le fichier ZIP de destination pour la sauvegarde $sourceDir = "C:\inetpub\wwwroot" $backupZip = "C:\inetpub\wwwroot_backup.zip" # Crée une archive ZIP de wwwroot Compress-Archive -Path $sourceDir -DestinationPath $backupZip ###################################################### # DESACTIVER PUIS SUPPRIMER LE SITE PAR DEFAUT : # Importe le module WebAdministration pour gérer IIS Import-Module WebAdministration # Arrêter le site web par défaut (généralement appelé "Default Web Site") Write-Host "Arrêt du site web par défaut..." Stop-Website -Name "Default Web Site" # Supprimer le site web par défaut Write-Host "Suppression du site web par défaut..." Remove-WebSite -Name "Default Web Site" # Supprime tous les fichiers et sous-dossiers dans C:\inetpub\wwwroot Remove-Item -Path "C:\inetpub\wwwroot\iisstart.htm" -Force Remove-Item -Path "C:\inetpub\wwwroot\iisstart.png" -Force ###################################################### # TELECHARGER DNN ET L'INSTALLER DANS C:\inetpub\wwwroot # Créer le dossier temporaire C:\Temp New-Item -Path C:\Temp -ItemType directory # URL de téléchargement $url = "https://github.com/dnnsoftware/Dnn.Platform/releases/download/v9.13.3/DNN_Platform_9.13.3_Install.zip" # Chemin temporaire où le fichier sera téléchargé $tempPath = "C:\Temp\DNN_Platform_9.13.3_Install.zip" # Chemin vers le répertoire wwwroot $wwwroot = "C:\inetpub\wwwroot" # Télécharger le fichier Invoke-WebRequest -Uri "$url" -OutFile "$tempPath" # Décompresser le fichier gzip pour obtenir un fichier tar New-Item -Path "C:\inetpub\wwwroot\DNN" -ItemType directory Expand-Archive -Path "$tempPath" -DestinationPath "$wwwroot\DNN" ###################################################### # CREER LE NOUVEAU SITE POUR DNN : # Nom du nouveau site web $websiteName = "DNN" # Chemin du dossier racine de DNN $websitePath = "C:\inetpub\wwwroot\DNN" # Port sur lequel le site sera accessible $websitePort = 80 # Supprimer le site si il existe déjà if (Test-Path "IIS:\Sites\$websiteName") { Write-Host "Suppression du site existant..." Remove-WebSite -Name $websiteName } # Créer le nouveau site web Write-Host "Création du nouveau site web..." New-Website -Name $websiteName -Port $websitePort -PhysicalPath $websitePath # Démarrer le site web Write-Host "Démarrage du site web..." Start-Website -Name $websiteName # Afficher les informations du nouveau site web $siteInfo = Get-Website | Where-Object { $_.Name -eq $websiteName } Write-Host "Site Name : $($siteInfo.Name)" Write-Host "Site ID : $($siteInfo.ID)" Write-Host "Site State : $($siteInfo.State)" # Définir le nom du pool d'applications $applicationPool = $websiteName # Créer le pool d'applications New-WebAppPool -Name $applicationPool # Associer le pool d'applications au site Set-ItemProperty "IIS:\Sites\$websiteName" -Name applicationPool -Value $applicationPool # Obtenir l'état du pool d'applications Get-WebAppPoolState -Name $applicationPool | Select-Object Name, Status ###################################################### # ATTRIBUTION DES DROITS AU POOL D'APPLICATION CREE $folders = @( "$websitePath" ) # Notez que nous utilisons la valeur `$websiteName` pour former le nom complet de l'utilisateur "IIS APPPOOL\..." $users = @("IIS APPPOOL\$websiteName") foreach ($folder in $folders) { foreach ($user in $users) { # (OI)(CI)M est utilisé pour les droits de modification Start-Process cmd.exe -ArgumentList "/c icacls `"$folder`" /grant `"$($user):(OI)(CI)M`"" -NoNewWindow -Wait } } ##################################################### # TELECHARGER ET INSTALLER SQL SERVER EXPRESS 2019 # TÉLÉCHARGER SQL SERVER EXPRESS 2019 Invoke-WebRequest -Uri https://download.microsoft.com/download/7/f/8/7f8a9c43-8c8a-4f7c-9f92-83c18d96b681/SQL2019-SSEI-Expr.exe -OutFile C:\Temp\SQL2019-SSEI-Expr.exe # INSTALLER SQL SERVER EXPRESS 2019 EN MODE SILENCIEUX Start-Process -Wait -FilePath "C:\Temp\SQL2019-SSEI-Expr.exe" -ArgumentList "/ACTION=Install /Q /IACCEPTSQLSERVERLICENSETERMS" ##################################################### # TELECHARGER ET INSTALLER SSMS Invoke-WebRequest -Uri https://aka.ms/ssmsfullsetup -OutFile C:\Temp\ssmsfullsetup.exe # Installer SSMS silencieusement Start-Process -Wait -FilePath "C:\Temp\ssmsfullsetup.exe" -ArgumentList "/install /quiet" # Ajouter au PATH et recharger les variables # Chemin d'accès à sqlcmd $sqlcmdPath = "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn" # Ajouter de manière permanente le chemin au Path Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value "$($env:Path);$sqlcmdPath" # Recharger les variables d'environnement : $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") ##################################################### # # (7) - Fonction pour afficher le formulaire principal function ShowMainForm { param ( [string]$dbName, [string]$dbUser, [string]$dbPassword ) $form = New-Object System.Windows.Forms.Form $form.Size = New-Object System.Drawing.Size(600, 250) $form.Text = "Configuration de la base de données DNN" $form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen $labels = @("Veuillez entrer un nom de base pour DNN:", "Veuillez entrer un nom d'utilisateur pour la base DNN:", "Veuillez entrer un mot de passe pour l'utilisateur:") $textBoxes = @() $y = 20 foreach ($labelText in $labels) { $label = New-Object System.Windows.Forms.Label $label.Location = New-Object System.Drawing.Point(10, $y) $label.Size = New-Object System.Drawing.Size(300, 20) $label.Text = $labelText $form.Controls.Add($label) $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(420, $y) $textBox.Size = New-Object System.Drawing.Size(150, 20) $form.Controls.Add($textBox) $textBoxes += $textBox $y += 38 } $okButton = New-Object System.Windows.Forms.Button $okButton.Location = New-Object System.Drawing.Point(250, $y) $okButton.Size = New-Object System.Drawing.Size(100, 30) $okButton.Text = "OK" $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $okButton $form.Controls.Add($okButton) $textBoxes[0].Text = $dbName $textBoxes[1].Text = $dbUser $textBoxes[2].Text = $dbPassword $result = $form.ShowDialog() if ($result -eq [System.Windows.Forms.DialogResult]::OK) { return $textBoxes[0].Text, $textBoxes[1].Text, $textBoxes[2].Text } else { return $null, $null, $null } } # (8) - Fonction pour vérifier la validité des entrées function CheckInputs { param ( [string]$dbName, [string]$dbUser, [string]$dbPassword ) if ($dbName -eq '' -or $dbUser -eq '' -or $dbPassword -eq '') { return 1 # code d'erreur pour les champs vides } if ($dbPassword.Length -lt 10) { return 2 # code d'erreur pour les mots de passe trop courts } # Ajouter d'autres vérifications ici si nécessaire return 0 # Tout est OK } $dbName = '' $dbUser = '' $dbPassword = '' while ($true) { $dbName, $dbUser, $dbPassword = ShowMainForm -dbName $dbName -dbUser $dbUser -dbPassword $dbPassword # Sortir de la boucle si l'utilisateur a annulé le formulaire if ($dbName -eq $null) { break } $errorCode = CheckInputs -dbName $dbName -dbUser $dbUser -dbPassword $dbPassword if ($errorCode -eq 0) { # Tout est OK, passez à la prochaine étape break } elseif ($errorCode -eq 1) { # Afficher un avertissement pour les champs vides ShowWarning -message "Vous ne pouvez pas laisser un champ vide." } elseif ($errorCode -eq 2) { # Afficher un avertissement pour les mots de passe insuffisamment complexes ShowWarning -message "Le mot de passe ne répond pas aux critères de complexité requis. Votre mot de passe doit faire au moins 10 caractères, comporter au moins un chiffre, une majuscule et un caractère spécial." } } ##################################################### # CREATION DE LA BASE SQL ET DE L'UTILISATEUR PRIVILEGIE # Créer la base de données $sqlCreateDB = "CREATE DATABASE [$dbName];" sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlCreateDB # Créer l'utilisateur SQL $sqlCreateUser = @" USE master; CREATE LOGIN [$dbUser] WITH PASSWORD = N'$dbPassword', DEFAULT_DATABASE=[dnndb], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF; "@ sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlCreateUser # Rendre l'utilisateur propriétaire de la base de données $sqlSetOwner = @" USE [$dbName]; ALTER AUTHORIZATION ON DATABASE::[$dbName] TO [$dbUser]; "@ sqlcmd -S localhost\SQLEXPRESS -E -Q $sqlSetOwner # Mettre le mode d'authentification pour le serveur SQL en mode mixte Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQLServer" -Name "LoginMode" -Value 2 # Redémarrer le service SQL Server pour que le changement prenne effet Restart-Service -Name 'MSSQL$SQLEXPRESS' ##################################################### # RESTE A FAIRE L'INITIALISATION VIA NAVIGATEUR WEB SUR 127.0.0.1 ###################################################### # FIN DE L'INSTALLATION # Afficher une MessageBox [System.Windows.Forms.MessageBox]::Show('L''installation est terminée, DNN est accessible à l''URL http://IP-SERVEUR-CORE', 'Installation terminée') } New-Alias -Name INSTALLER.DNN -Value fINSTALLER.DNN
Tags : web, windowsfeature, site, system, dnn, CMS, dotnetnuke, IIS, serveur, 2022, SQL Server EXPRESS, 2019
-
Commentaires