¿Cuáles son las buenas prácticas para distinguir el entorno de producción de otros?

Mi principal área de trabajo es la progtwigción, ya veces tengo que realizar algunas acciones en los serveres de producción (al implementar la aplicación o configurar algo …).

Así que mi pregunta es, ¿qué se debe hacer para estar tan seguro como puedo ser que no me meto con algo en el server de producción que tenía la intención de hacer en mi equipo / entorno de testing? Limpiar una database o borrar loggings, por ejemplo.

Lo que viene a mi mente son pocas cosas básicas, como:

  • tener la console de producción abierta sólo por el time que necesito para hacer mi trabajo allí, luego cierra
  • configurando la console en el server de producción para que sea realmente diferente a otros – como background rojo o algo así
  • tener cada command allí requiere una confirmación adicional

¿Hay otras reglas que ayudan a mantenerse sano y no estropear con el server de producción?

Siempre hay una línea fina entre la protección de los errores y el trabajo de obstaculizar. Aunque soy un administrador dedicado, nuestra organización es lo suficientemente pequeña para que no sea práctico implementar todos los gastos adicionales y la burocracia que las grandes empresas les gusta tener para mantener su producción segura.

Además de sus reglas, también tenemos lo siguiente:

  • nunca utilice las mismas cnetworkingenciales para la testing y la producción (es decir, inicio de session, database), si no puede darse el lujo de apretar los cortafuegos correctamente colocar las reglas de caída para los errores comunes, es decir, conectar a probar backend de frontend en vivo, etc.
  • implementar la mayor cantidad posible de control de cambios / control de versiones, no sólo en el nivel de aplicación, sino también en el nivel de SO. Aquí utilizamos cfengine, pero hay un montón de otras opciones, es decir, títeres o incluso crecer su propio.
  • automatizar todas las tareas de rutina, es decir, no se debe borrar nada manualmente en la producción sobre una base regular
  • mantener una documentation actualizada de todo, no considerar una tarea hecha hasta que esté debidamente documentado, combinar wiki y sistema de seguimiento de errores. Tiene que haber un "porqué" para cada cambio y para cada weirdness en el config. Sé que suena como un Santo Grial, pero cualquier documentation es mejor que nada.

Utilizar passwords diferentes : aparte del hecho de que diferentes usuarios pueden tener acceso, no puede iniciar session en la database del sistema de producción (y hacer algo malo ) pensando que es la database del server de testing si la contraseña no es la misma.

Color-encoding : que también es una buena idea, porque es difícil de perder. Establezca el color del indicador de command-line de acuerdo con el nombre de host y establezca el color de background del escritorio para el acceso GUI.

Mis methods principales para hacer esto son como usted dijo, cambiando el color del background, cambiando el layout, haciéndolo perceptiblemente diferente al server del desarrollo.

Otra cosa que puede hacer es cambiar la contraseña en el server de producción a algo que usted tiene que pensar en la input, de esa manera usted está consciente de que está iniciando session en el server de producción.

Otro método que he visto utilizado en otras empresas es realmente tener un método para promover el trabajo desde el desarrollo a la producción, utilizando una interfaz web o secuencia de commands por lotes, de modo que realmente no trabajan en el server de producción, sino sólo promover el trabajo cuando se está listo.

Regla 1, si dev puede tener acceso para cambiar las cosas, no es un server de producción.

Ejecutar el control de versión adecuado (no sólo un VCS, sino un labeldo adecuado) puede realmente ayudar aquí.

Una cosa que he visto implementada es usar un server de terminales "intermedio" entre su networking operativa y su networking de producción, por lo que cualquier cambio tiene que hacerse (para sistemas de producción) cuando en una session de services de terminal. Al no hacer lo mismo con los sistemas de testing, la distinción es muy, muy clara.