asp.net - mvc - how to deploy.net core to iis
¿Cómo se manejan las cadenas de conexión cuando se implementa un sitio ASP.NET? (11)
Aquí hay otra cosa que puedes probar:
Usando SQL Server Configuration Manager, cree un db Alias para su base de datos de desarrollo para que el archivo web.config pueda ser el mismo tanto en su caja de desarrollo como en su servidor de producción.
En este momento, nuestras bases de datos de prueba y producción están en el mismo servidor, pero con diferentes nombres. La implementación ha significado editar Web.config para cambiar todas las cadenas de conexión para la base de datos correcta. Un paso que olvido con demasiada frecuencia ...
Finalmente hemos creado un nuevo servidor de base de datos para pruebas, y estoy moviendo las bases de datos a ... pero ahora el servidor será diferente y aún tendremos que ocuparnos de los problemas de las cadenas de conexión.
Estaba pensando en administrarlo a través de un archivo de hosts, pero la idea de cambiar eso en mi máquina de escritorio cada vez que necesito probar contra datos de producción parece engorroso en el mejor de los casos.
Entonces me pregunto si hay una mejor manera de salir. Algo que se construiría con una configuración web de "producción" para su implementación sería ideal ...
Colocaré mis cadenas de conexión en machine.config en nuestros cuadros QA y Production. Sin embargo, los mantendré en la web.config en mi cuadro de desarrollo para mayor flexibilidad. Luego, utilizaré un proyecto de implementación web para sobrescribir mis cadenas de conexión dev sin nada (sin cadenas de conexión) cuando implemente en QA. Por lo tanto, el sitio de control de calidad se basa en las cadenas de conexión en machine.config. Todavía despliego a producción manualmente para asegurarme de que todo tenga éxito. Hago esto copiando manualmente todo, desde control de calidad (excepto web.config) hasta producción.
Creé un alias de base de datos en cada servidor para apuntar a la base de datos. Luego uso este alias en mis archivos web.config. Si necesito cambiar a qué base de datos apunta la aplicación, entonces cambio el alias y no el web.config.
Para SQL Server, vaya a Administrador de configuración de SQL Server> Configuración de SQL Native Client> Alias> Crear nuevo alias.
Puede hacer lo mismo con Oracle con el archivo tnsnames.
Este tipo de tarea es exactamente lo que los eventos de construcción están diseñados para abordar. Piensa en construir como edificio para un objetivo específico, cualquier configuración específica del objetivo debe hacerse allí. (con la advertencia normal de que siempre hay algunas excepciones a la regla)
He estado en algunos lugares ahora que los guardo en el registro.
Probablemente haya formas más elaboradas de hacerlo ahora, pero una gran cantidad de código en el que he trabajado con un patrimonio 1.0 / 1.1 almacena las cadenas en el registro.
El registro tiene algunas ventajas
- Evita que las personas desplieguen el código en lugares incorrectos ya que las máquinas no configuradas correctamente carecerán de las llaves
- Elimina el problema en el que un desarrollador empaqueta accidentalmente un archivo web.config con las cadenas de conexión de desarrollo (seguido de una llamada frenética en la mitad de la noche en la que se revela que el administrador de la noche no hizo una copia de seguridad del anterior web.config y el desarrollador no sabe ni recuerda las cadenas de producción)
- Limita la posibilidad de que un hacker pueda obtener la cadena de conexión sacando el web.config de la máquina. Además, el registro tiene más niveles de seguridad que el sistema de archivos.
Lo hice tan a menudo, hice el web.config en el servidor de producción de solo lectura.
Manejamos nuestras implementaciones desde nuestro servidor de CI. Generalmente tenemos un archivo separado para cada ubicación y hacemos que el servidor de CI cambie a la configuración adecuada dependiendo de los argumentos que se pasen. Toda la edición de archivos se realiza en scripts NAnt, por lo que los desarrolladores pueden ejecutar la compilación sam en su máquina para obtener su propia configuración.
Normalmente tengo tres configuraciones web separadas: una para mi máquina de desarrollo, una para QA y otra para producción. El desarrollo se conecta a mi base de datos SQL local (que está cortafuegos desde el exterior) y es el web.config predeterminado. Los otros se denominan web-prod.config y web-qa.config. Después de publicar, borro los dos que no necesito y renombro el correcto para web.config. Si se me olvida, la aplicación se rompe la primera vez que intenta acceder a la base de datos, ya que la configuración predeterminada hace referencia a una a la que no puede acceder.
Dado que IIS se niega a servir un archivo llamado .config, me aseguro de que todos terminen en .config en lugar de decir web.config-prod o web.config-qa.
Utilice un proyecto de despliegue web y actualice el archivo wdproj (es solo un archivo MSBuild) con algunas tareas de compilación posterior para generar el archivo .config correcto. Guardo un web.config y web.release.config luego uso esto en el archivo wdproj:
<Target Name="AfterBuild">
<Copy Condition=" ''$(Configuration)|$(Platform)'' == ''Release|AnyCPU'' " SourceFiles="$(SourceWebPhysicalPath)/web.release.config" DestinationFiles="$(OutputPath)/web.config" />
<Delete Files="$(OutputPath)/web.release.config" />
</Target>
Una solución más simple, como la de usar la propiedad configSource de appSettings y connectionStrings, y nunca sobrescribir ese archivo en el servidor de producción.
tener carpetas de entorno con configuraciones separadas para cada entorno
desplegar el correcto para el medio ambiente
Recientemente me he estado inclinando hacia la manipulación de configuraciones en el servidor de integración continua. Eso es porque hemos tenido problemas con múltiples web.config, web.qa.config, web.production.config, manteniendo el 95% del archivo sincronizado.
En pocas palabras: solo existe una web.config en el control de fuente y es la configuración de desarrollo (depuración fácil, db local, etc.). El servidor de compilación realiza la compilación, luego una implementación en el sitio canario y luego el paquete para el candidato de lanzamiento.
Estamos usando nant, por lo que es el archivo .build el que tiene xmlpoke para establecer debug = "false", alterar las cadenas de conexión y cualquier otra cosa que necesite cambiar en la copia canaria y en la copia de empaquetado de web.config.
El despliegue de la máquina de construcción se llama "canario" porque es lo primero que muere si hay un problema.