Symfony sur IIS

Note : ce tuto fonctionne aussi bien sur une version Core de Windows.

Préparation de votre website :

Avant de commencer, suivre : Faire fonctionner PHP sous IIS

Dans un premier temps, télécharger Symfony

Extraire les fichiers dans un dossier dans C:\inetpub\wwwroot\

extraire

Lancer votre IIS management console

start console

Créer votre WebSite (Clique droit sur Site > Add WebSite)

Baser votre ServerRoot sur le dossier web de votre projet.

add website

Double clique sur Default Document, clique droit, add …

default page

Installer URL Rewrite :

Télécharger rewrite_amd64_en-US.msi

Supprimer l’extension .pptx du fichier téléchargé.

Placer ce fichier sur le C:\

Lancer une invite de commande (CTRL + R > cmd) et taper :

START /w msiexec /I C:\rewrite_amd64_en-US.msi

Paramétrer votre website :

Éditer votre fichier web.config qui se trouve dans C:\inetpub\wwwroot\nom_de_votre_projet\web\web.config

Ajouter ces lignes entre les balises <system.webServer>.

<rewrite>
    <rules>
        <rule name="Rewriter" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions>
                <add input="{R:1}" pattern="^(app\\.php|favicon\\.ico)" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
            </conditions>
            <action type="Rewrite" url="./app.php/{R:1}" appendQueryString="true" />
        </rule>
    </rules>
</rewrite>

Les finissions :

Tester votre configuration :

http://url_de_votre_serveur/config.php

test symfony

Il y a quelques problèmes concernant les droits sur les dossiers :

  • app/cache/
  • app/logs/

Pour régler ce problème, il faut modifier les droits NTFS sur ces dossiers :

Clique droit sur cache > propriété > sécurité > edit …

Ajouter au  groupe USERS le droit d’écrire.

droits cache

Faire la même chose pour le dossier LOG

Rafraichir la page config.php

retest symfony

Votre configuration IIS, permet de faire fonctionner symfony.

Publicités

Faire fonctionner PHP sous IIS

Télécharger ces archives :

Supprimer les extensions .pptx et extraire les fichiers

extraire

Créer un dossier PHP dans C:\Program Files (x86)\ et coller le dossier extrait (v5.3)

v5.3

Installer IIS

select role

Dans application developpement sélectionner CGI

fonctionnalitées iis php

Lancer votre IIS management console

start console

Double clique sur Handler Mappings, faire un clique droit et cliquer sur add Module Mapping

IIS management CGI

add module mapping

Remplir la fenêtre comme sur la capture d’écran et cliquer sur OK

module mapping

Créer le FastCGI en cliquant sur YES

create FastCGI

Tester le fonctionnement en créant une page PHP.

Créer un fichier index.php dans C:\inetpub\wwwroot\

extension

Entrer ces lignes dans le fichier

<?php
phpinfo();
?>

Tester :

phpinfo()

Administrer IIS d’un Windows Server Core à partir d’un Windows en GUI

Windows Core

Sur le Windows Core, entrer ces commandes :

powershell

Import-Module ServerManager

Add-WindowsFeature Web-Mgmt-Service

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1

Set-Service -name WMSVC -StartupType Automatic

Start-service WMSVC

Windows Core remote IIS

Windows GUI

Sur le Windows GUI installer la console IIS :

add server

select role

Décocher toutes les cases :

unselect

Ne garder que le Management console :

management console

Cliquer sur Installer :

console IIS

Lancer la console d’administration de IIS

start console

Faire un clique droit sur page start

page start

Entrer l’adresse sur serveur. Sur un domaine Active Directory : nom_de_la_machine.nom_du_domaine.tld

fqdn server

Entrer les identifiants de l’administrateur du domaine

credential

Accepter le certificat en cliquant sur Connect

certificate

Entrer un nom pour ce serveur et cliquer sur Finish

IIS server name console

Vous pouvez administrer votre IIS à partir du Windows en GUI.

remote IIS

Administrer Windows Server Core avec un Windows Server en interface graphique (GUI).

Préparation

Dans un premier temps, changeons le clavier en azerty et renommons les machines :

Set-WinUserLanguageList -LanguageList fr-FR

Rename-Computer -NewName « nom »

(cf Mémo PowerShell)

(Windows Core)

Windows Core

(Windows GUI)

Windows GUI

Fixons les adresses IP :

Windows Core :

Adresse IP : 192.168.33.201 /24

Passerelle : 192.168.33.2

Windows GUI :

Adresse IP : 192.168.33.200 /24

Passerelle : 192.168.33.2

New-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr –DefaultGateway adresse_ip_passerelle

Set-NetIPAddress –InterfaceIndex 12 –IPAddress adresse_ip –PrefixLength masque_cidr

Configuration Carte réseau

Fixons un DNS :

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 192.168.33.200

Redémarrer les deux machines :

shutdown -r -t 0

OU

Restart-Computer

Installation Active Directory :

Install AD

Confirmer l'installation

Promouvoir le serveur :

Pomote this server

Créer une nouvelle forêt :

new forest

Enter password

Suivre l’assistant et cliquer à la fin sur Install.

Votre serveur Active Directory va redémarrer. Un fois celui-ci démarré, intégrer votre Windows Core au domaine :

Add-Computer -DomainName mewpipe.com -Credential Administrator@mewpipe.com

Intégrer domaine

Redémarrer votre serveur :

shutdown -r -t 0

OU

Restart-Computer

Confirmation & redémarrage

Votre Windows Core est maintenant intégré dans le domaine mewpipe.com

Administration du Serveur Core :

Sur votre Windows GUI ajouter votre Windows Core.

add server

Rechercher votre serveur Core

select server

Vous pouvez maintenant Administrer votre Windows Core à partir de votre Windows GUI.

Exemple : installer IIS :

add roles

Sélectionner votre serveur Core :

select core server

Sélectionner le(s) rôle(s) à installer.

select role

deployer role

Attendre la fin de l’installation

wait

Vérifions que IIS est bien installé sur le Windows Core :

IIS OK

cf : Administrer IIS d’un Windows Server Core à partir d’un Windows en GUI

Mémo commandes PowerShell

Définir le clavier en AZERTY

Set-WinUserLanguageList -LanguageList fr-FR

Changer le nom de votre machine

Rename-Computer -NewName « nom »

Configurer une carte réseau
Lister les interfaces réseaux

Get-NetIPInterface

Affecter une adresse et un masque à une interface

Adresse : 172.16.0.50

Masque de sous-réseau : 255.255.255.0 (/24)

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24

Passerelle : 172.16.0.1

New-NetIPAddress –InterfaceIndex 12 –IPAddress 172.16.0.50 –PrefixLength 24 –DefaultGateway 172.16.0.1

Ajouter une adresse DNS

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 172.16.0.1

Intégrer une machine dans un domaine Active Directory

Add-Computer -DomainName pjt.local -Credential Administrator@pjt.local

Redémarrer la machine

Restart-Computer

Administrer à distance IIS
Installer le WMSvc IIS

Import-Module ServerManager

Add-WindowsFeature Web-Mgmt-Service

Activez le WMSvc IIS

Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1

Démarrer automatiquement WMSvc

Set-Service -name WMSVC -StartupType Automatic

Start-service WMSVC

Sur un autre serveur, vous pouvez lancer une console IIS et ajouter le nouveau serveur.

Désactiver le firewall de Windows

Set-NetFirewallProfile -Profile * -Enabled False

Création d’utilisateurs sur AD via un formulaire web (ASP.NET / C# / PowerShell)

Introduction :

Dans un projet, on m’a demandé de créer une interface de création d’utilisateurs pour les RH. Via une interface, les RH vont pouvoir créer simplement des comptes sur le serveur Active Directory (AD) pour les nouveaux collaborateurs.

J’ai créé dans un premier temps un script PowerShell avec les assembly windows.form pour l’interface graphique. Mais cette solution n’est pas forcément la plus pratique pour les utilisateurs.

J’ai réalisé des recherches et je suis tombé sur plusieurs articles couplant les technologies C#, asp.NET et PowerShell.

Je vous joins les fichiers de la solution : PowerShellExecution.zip (supprimer l’extension ppt 🙂 )

Ci-dessous un visuel de l’interface :

supexchange

Configuration du serveur Web (IIS)

Il faut :

  • IIS avec ASP
  • Ajouter une assembly dans IIS
  • Donner des droits permettant au pool IIS de créer des Utilisateurs sur l’AD

Installation de IIS avec ASP :

supexchange_6

Configuration des assembly:

1-Ouvrir IIS, sélectionner votre site et entrer dans .NET Compilation

supexchange_1

2-Entrer dans assemblies

supexchange_2

3- Ajouter la ligne : System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

supexchange_3

Droit permettant l’exécution du code PowerShell :

1- Sélectionner le pool d’application qui exécute votre site

supexchange_4

2- Faire un clique droit, Advanced Settings. Dans Identity entrer l’identifiant d’un compte utilisateur possédant suffisamment de droits pour exécuter les commandes PowerShell.

supexchange_5

Code :

Vous allez avoir besoin de System.Management.Automation.

1-Créer un nouveau projet via Visual Studio (Empty Web Application)

Vous allez avoir 2 fichiers :

  • Default.aspx : C’est votre formulaire
  • Default.asp.cs : Le « traitement de votre formulaire »

supexchange_8

2 – Dans Visual Studio Cliquer sur Outils > Gestionnaire de package NuGet > Console du Gestionnaire de package

supexchange_7

2- Dans Package Manager Console exécuter cette commande : Install-Package System.Management.Automation

Commandes :

Dans Default.asp.cs n’oubliez d’implémenter System.Management.Automation

using System.Management.Automation;

#Création d’une variable de type PowerShell

var shell = PowerShell.Create();

#variable commandes avec la chaine de caractère de création de l’utilisateur

string commandes = "New-ADUser -Name \"" + name + " " + lastName + "\" –GivenName \""+ name +"\" –Surname \""+  lastName +"\" –DisplayName \"" + name + " " + lastName +"\" -City \"" + city + "\" –SamAccountName \""+ name +"." +lastName + "\".ToLower() -AccountPassword (convertto-securestring 'Supinfo2014' -asplaintext -force ) -Path \"OU=" + service +",OU=Supinfo,DC=supexchange,DC=fr\" -UserPrincipalName \""+ name + "." +  lastName +"@supexchange.fr\".ToLower()"

#Ajouter une commande => le contenu de la variable commandes

shell.Commands.AddScript(commandes);
#Ajouter une commande
 shell.Commands.AddScript("Enable-ADAccount -Identity \"" + name + "." + lastName + "\".ToLower()");

#Exécuter les commandes

shell.Invoke();

#Il est possible de récupérer les éléments de l’exécution des commandes PowerShell. Exemple avec ma méthode OU

static void OU(string OU)
        {

            var shell = PowerShell.Create();
            
            // Test si l'OU passé en paramètre existe
            shell.Commands.AddScript("[adsi]::Exists(\"LDAP://OU=" + OU +",OU=Supinfo,DC=supexchange,DC=fr\")");
            
            // Exécution de la commande PowerShell
            var results = shell.Invoke();

            if (results.Count > 0)
            {
                var builder = new StringBuilder();

                foreach (var psObject in results)
                {
                    // Si l'OU n'existe pas, On l'a créé
                    if(psObject.BaseObject.ToString() != "True")
                    {
                        shell.Commands.AddScript("New-ADOrganizationalUnit -Name " + OU + " -Path \"ou=Supinfo,dc=supexchange,dc=fr\"");
                        shell.Invoke();
                    }
                }

            }
            
        }