Skip To Content

ArcGIS Server dans des environnements de développement, intermédiaires et de production

De nombreuses organisations utilisent des environnements distincts de développement, intermédiaires et de production pour assurer la qualité de leurs sites Web. Lorsqu’ils sont utilisés dans votre organisation ArcGIS Enterprise, ces environnements sont souvent configurés comme suit :

  • Développement : il s’agit d’un environnement de bac à sable dans lequel vous pouvez tester vos applications et services sans impacter votre environnement de développement. Généralement, l’environnement de développement s’exécute sur une petite machine, déconnectée de l’environnement de production ArcGIS Enterprise. Lorsque les modifications sont validées sur l’environnement de développement, elles sont appliquées à l’environnement intermédiaire.
  • Intermédiaire : cet environnement est un clone ou une approximation de l’environnement de production. Un environnement intermédiaire permet de construire et de tester des applications à valeur ajoutée et des caches de carte, de tester l’acceptation des utilisateurs, les performances et le chargement d’autres logiciels tiers, d’organiser de nouvelles mises à jour des données commerciales et de réaliser des activités de formation. À la suite des tests effectués à ce niveau, l’utilisateur peut décider d’appliquer les modifications dans l’environnement de production ou de rejeter les modifications et d’attendre une nouvelle itération de l’environnement de développement. Le site intermédiaire n’est pas utilisé à des fins de développement, mais uniquement pour des tests de performances et fonctionnels. Esri propose des licences intermédiaires pour les utilisateurs de ArcGIS Enterprise à un coût inférieur à celui des licences de production.
  • Production : aucun développement ni test n’a lieu dans cet environnement, dans la mesure où les utilisateurs SIG (et, dans certains cas, le grand public) peuvent y accéder. Seules les modifications ayant été testées sur le site intermédiaire sont appliquées au site de production.

Les environnements de développement, intermédiaires et de production utilisent généralement des bases de données et des infrastructures différentes. Chaque organisation possède ses propres règles sur la méthode de test et d’approbation des modifications sur les environnements.

Le transfert d’une modification d’un environnement à un autre peut présenter des défis de nature logistique. Cette rubrique d’aide fournit des modèles et des scripts pour vous guider tout au long du processus, que votre site ArcGIS Server soit fédéré avec un portail ou autonome.

Remarque :

Cette rubrique aborde des éléments à prendre en compte pour ArcGIS Server dans les environnements de développement, intermédiaire et de production. Elle ne couvre pas les autres composants de ArcGIS Enterprise.

Configuration de chaque environnement

Dans chaque environnement, installez ArcGIS Server, créez un site, puis configurez la sécurité, les extensions d’objets serveur (SOE) et d’autres paramètres. Il est généralement plus rapide d’effectuer ces tâches manuellement ; toutefois, leur exécution peut également être automatisée à l’aide d’un script.

Activez tout d’abord votre site de développement, puis créez le site intermédiaire, suivi par le site de production.

Déploiement de services

Pour déployer des services dans plusieurs environnements, vous devez correctement inscrire vos dossiers et bases de données auprès de ArcGIS Server et utiliser des définitions de services (SD) pour la publication.

Inscription de dossiers et de bases de données auprès de ArcGIS Server

Lorsque vous inscrivez un dossier ou une base de données auprès de ArcGIS Server, vous indiquez le chemin d’accès au dossier de l’éditeur qui contient les données et le chemin d’accès aux données sur le serveur.

  • Le chemin d’accès au dossier de l’éditeur est le chemin d’accès aux données sur la machine que vous utiliserez pour créer les fichiers SD. Le chemin d’accès au dossier de l’éditeur est toujours identique lorsque vous inscrivez un élément auprès des serveurs de développement, intermédiaire et de production.
  • Le chemin d’accès au serveur est le chemin d’accès aux données sur le serveur. Ce chemin d’accès peut varier lorsque vous inscrivez un élément auprès des serveurs de développement, intermédiaire et de production.

Si vous devez inscrire plusieurs dossiers de données ou bases de données, envisagez l’utilisation de scripts. Exemple : enregistrer des dossiers et des bases de données répertoriés dans un fichier texte utilise la fonction ArcPy AddDataStoreItem pour inscrire une liste de connexions à des dossiers et bases de données figurant dans un fichier texte. Modifiez le fichier texte de chaque environnement.

Publication de services

Utilisez des fichiers SD lorsque vous déployez vos services dans plusieurs environnements. La définition de service extrait les informations nécessaires à la publication d’un service et les empaquette dans un fichier pratique. Bien qu’il soit possible d’empaqueter les données SIG dans la définition de service, vous remarquerez qu’il est plus facile de précharger les données dans chaque environnement et d’utiliser la fonction de réplication pour en assurer la synchronisation.

Créez des fichiers de définition de service non dépendants d’une connexion (en choisissant l’option No available connection [Aucune connexion disponible] dans l’assistant Save a Service Definiation [Enregistrer une définition de service]) pour qu’ils soient suffisamment flexibles pour être publiés sur un serveur quelconque. Lorsque vous publiez un fichier SD, ArcGIS Server corrige automatiquement les chemins consignés dans la définition de service pour que les chemins d’accès à votre serveur soient utilisés. En inscrivant correctement vos données, vous pouvez déployer le même fichier SD dans plusieurs environnements.

La publication de services est une tâche très adaptée aux scripts. Vous pouvez utiliser la fonction ArcPy Upload Service Definition (Télécharger la définition du service) pour créer un script allant publier chaque définition de service.

Les fichiers SD sont déployés dans les divers environnements à l’aide d’un script.

Après avoir déployé vos services à partir de la définition de service, activez les extensions requises par les services. Vous pouvez effectuer cette opération manuellement ou via des scripts.

L’application d’autorisations à différents services répertoriés dans un fichier texte, peut également être effectuée à l’aide d’un script.

Mise à jour des services

Vous souhaiterez parfois mettre à jour un service pour utiliser de nouvelles propriétés ou refléter des modifications apportées au document source. Pour mettre à jour un service dans plusieurs environnements, il est recommandé d’enregistrer un nouveau fichier SD, en supprimant le service et en publiant la définition de service à jour.

En procédant ainsi, le même exemple de script que celui utilisé précédemment pour la publication peut également servir à mettre à jour les services. Il vous suffit de modifier le fichier en entrée pour n’inclure que les services à mettre à jour. En présence d’un service, le script le supprime avant de télécharger la définition de service.

Après avoir mis à jour un service de cette façon, réactivez les SOE qu’il utilise.

Vous pouvez également mettre à jour, via des scripts, les propriétés des services (mais pas la carte, ni le document source) à l’aide de l’ArcGIS REST API.

Synchronisation régulière des données

Vérifiez que vos données restent synchronisées dans plusieurs environnements. À cette fin, vous pouvez faire appel à la réplication de géodatabase. Vous pouvez également remplacer entièrement l’ancien jeu de données par le nouveau. Par exemple, vous pouvez supprimer une géodatabase fichier et la remplacer par une géodatabase fichier à jour.

Si vous décidez de remplacer entièrement des tables ou géodatabases fichier, n’oubliez pas que les services ArcGIS Server verrouillent par défaut les structures des jeux de données sous-jacents. Si la structure est verrouillée, arrêtez le service avant de remplacer les données. En procédant avec précaution, vous pouvez désactiver le verrouillage de la structure pour les services de cartes, mais pas pour d’autres types de services.

Mise à jour d’applications

Pour transférer une application entre les environnements de développement, intermédiaire et de production, copiez les fichiers d’applications d’un site vers un autre, puis mettez à jour les URL du service Web dans votre code pour qu’elles pointent vers le nouveau site. Utilisez les fichiers de configuration pour définir les URL de vos services.

Le script ci-dessous vous permet de mettre à jour les URL de votre code. Le code recherche de manière récursive les fichiers dans un dossier que vous spécifiez, il recherche une chaîne spécifique, telle que http://myDevServer/arcgis, et la remplace par l’emplacement de votre site intermédiaire ou de production, à savoir http://myProdServer/arcgis, par exemple.

Avant de démarrer ce script, effectuez une copie de sauvegarde des fichiers d’application d’origine. Sachez également que le script vous permet de spécifier l’extension des fichiers texte que vous souhaitez traiter. Par exemple, .js et .html pour les fichiers ArcGIS API for JavaScript.

Lorsque vous avez remplacé les URL à l’aide du script, copiez les fichiers d’application sur le serveur suivant du processus (intermédiaire ou de production).

import os
import sys
import shutil
import traceback

def dirEntries(dir_name, subdir, *args):
    '''Return a list of file names found in directory 'dir_name'
    If 'subdir' is True, recursively access subdirectories under 'dir_name'.
    Additional arguments, if any, are file extensions to match filenames. Matched
        file names are added to the list.
    If there are no additional arguments, all files found in the directory are
        added to the list.
    Example usage: fileList = dirEntries(r'H:\TEMP', False, 'txt', 'py')
        Only files with 'txt' and 'py' extensions will be added to the list.
    Example usage: fileList = dirEntries(r'H:\TEMP', True)
        All files and all the files in subdirectories under H:\TEMP will be added
        to the list.
    '''
    fileList = []
    for file in os.listdir(dir_name):
        dirfile = os.path.join(dir_name, file)
        if os.path.isfile(dirfile):
            if not args:
                fileList.append(dirfile)
            else:
                if os.path.splitext(dirfile)[1][1:] in args:
                    fileList.append(dirfile)
        # recursively access file names in subdirectories
        elif os.path.isdir(dirfile) and subdir:
            print "Accessing directory:", dirfile
            fileList.extend(dirEntries(dirfile, subdir, *args))
    return fileList

def updateString(infileName, srchString,rplString):
    bakFileName = os.path.splitext(infileName)[0] + ".bak"
    if not os.path.exists(bakFileName):
        # copy the original file
        shutil.copy(infileName, bakFileName)

    # Open the backup (= original) file to read
    inFileHndl = open(bakFileName,"r")
    outFileHndl = open(infileName,"w")  

    for line in inFileHndl:
        if line.find(searchString) > 0:
            line = line.replace(searchString, replaceString)
        outFileHndl.write(line)
        
    outFileHndl.close()
    inFileHndl.close()
    # remove the backup (=original content file)
    os.remove(bakFileName)

if __name__ == '__main__':

    try:
        inFolder = r"C:\inetpub\wwwroot\viewer"  # path to search
        searchString = "http://mydevserver"      # string to find
        replaceString = "http://mystgserver"     # string - replace searchString with replaceString
        
        fList = dirEntries(inFolder, True, 'xml')
        for f in fList:
            updateString(f, searchString, replaceString)
            
        print '\n\n\n' + 'Process Complete'

    except:
        # Return any python specific errors as well as any errors from the geoprocessor
        #
        tb = sys.exc_info()[2]
        tbinfo = traceback.format_tb(tb)[0]
        pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n    " + \
                str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
        print '\n\n\n' + pymsg