Configurar un servidor de pruebas

Existen varios trucos que pueden ayudar cuando estés configurando un servidor de staging.

¿Qué es un servidor de staging?

Un servidor de staging es esencialmente un clon de un sitio de producción. También reside en un servidor y funciona de manera idéntica. Se ejecuta dentro de un contenedor Docker, al igual que un sitio Discourse normal.

Existe para darte un lugar donde probar cosas arriesgadas, o para probar cosas que no puedes ocultar fácilmente a tus usuarios. Es muy útil para probar anuncios utilizando el Discourse Advertising Plugin (Ads), o si quieres hacer algo peculiar como una importación o fusión de foros.

Esto contrasta con un servidor de desarrollo, que normalmente se ejecuta en un lugar de fácil acceso (y aislado) para que un desarrollador pueda manipular el código de forma segura.

¿Qué necesito?

  1. Todo lo que necesitas para una instalación estándar autoalojada.

  2. Si tienes configuradas copias de seguridad S3, tu vida será mucho más fácil.

    • De lo contrario, necesitarás una forma de mover archivos grandes hacia y desde un servidor a través de SSH.

Pasos

Configura tu servidor como desees

Normalmente en un servidor Ubuntu virtual alojado en Digital Ocean, pero puedes usar lo que te resulte más cómodo.

Instala Discourse

A través de esta guía (o quizás a través de dashboard.literatecomputing.com). Recomiendo usar credenciales de correo electrónico ‘basura’ (no necesitas ni quieres que el correo funcione).

Confirma que tu instalación funciona:

Establece una cuenta de administrador (si es necesario)

Configura una cuenta de administrador desde la línea de comandos. Esto evita la necesidad de autenticarse por correo electrónico.

./launcher enter app
rake admin:create

Esto no es estrictamente necesario, excepto para probar la instalación, ya que puedes restaurar desde una copia de seguridad desde la línea de comandos.

Edita app.yml y añade algunos ajustes

  1. Es posible que desees hacer una copia del app.yml original (yo lo llamo app.vanilla.yml) al que puedas revertir si estropeas algo.

  2. En la parte inferior de la sección env, añade estas líneas:

      ## Configuración específica del servidor de staging
      DISCOURSE_AUTOMATIC_BACKUPS_ENABLED: false
      DISCOURSE_LOGIN_REQUIRED: true
      DISCOURSE_DISABLE_EMAILS: 'yes'
      DISCOURSE_S3_DISABLE_CLEANUP: true
      DISCOURSE_ALLOW_RESTORE: true
    
  3. Si tienes copias de seguridad S3 (o similar) configuradas, añádelas también (con la configuración de tu sitio principal).

      ## Configuración S3
      DISCOURSE_S3_ACCESS_KEY_ID: 'tu_clave'
      DISCOURSE_S3_SECRET_ACCESS_KEY: 'tu_secreto'
      DISCOURSE_BACKUP_LOCATION: 's3'
      DISCOURSE_S3_BACKUP_BUCKET: 'tu_ubicacion_de_copias_de_seguridad'
      DISCOURSE_S3_REGION: 'tu_region_s3'
      DISCOURSE_S3_DISABLE_CLEANUP: true
    

    y si también estás haciendo cargas S3:

      DISCOURSE_ENABLE_S3_UPLOADS: true
      DISCOURSE_S3_UPLOAD_BUCKET: 'tu_ubicacion_de_cargas'
    
  4. Es posible que desees añadir los mismos plugins que tienes en tu sitio de producción mientras estás en ello.

  5. Realiza una reconstrucción

    • ./launcher rebuild app

Gestión del servidor de staging

Ahora tienes un servidor de staging conectado a tus copias de seguridad S3 (pero no las sobrescribirá), es fácil de restaurar y no puede enviar correos electrónicos a nadie bajo ninguna circunstancia. ¡Perfecto!

Puedes restaurar una copia de seguridad reciente en el servidor de staging y ponerte a trabajar. Si no te gusta lo que has hecho, simplemente restáuralo de nuevo.

Apagado o encendido

Si dejas tu servidor de staging ‘encendido’ durante períodos prolongados, corres el riesgo de que sea indexado por Google y de que tus usuarios inicien sesión accidentalmente en él. Como sus credenciales son un clon de tu sitio de producción, esto es muy posible.

Una forma sencilla de mitigar estas dos cosas es simplemente apagar Discourse:

./launcher stop app

Y para volver a encenderlo para que puedas usarlo:

./launcher restart app

Actualizaciones

Tendrás que asegurarte de actualizar/reconstruir tanto el servidor de staging como tu sitio de producción al mismo tiempo si quieres asegurar que las cosas permanezcan alineadas desde el punto de vista de los plugins y el código. Lo mismo ocurre con los cambios en app.yml.

Si no usas S3, tendrás que mover manualmente las copias de seguridad entre servidores. ¡Y son grandes!

Población de un servidor de prueba

Si quieres un servidor de staging, entonces deberías poblarlo con tus datos reales de tu foro real a través de una Restauración. A veces, son tus datos concretos los que causan el problema, y probar tu foro con otro conjunto de datos puede darte una falsa sensación de seguridad.

Sin embargo, si lo que quieres es un servidor de prueba para ver cómo es Discourse, quizás quieras comprobar las cosas con datos falsos, y si es así, puedes hacer esto:

./launcher enter app
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Esto poblará tu foro con algunos datos falsos para que puedas ver cómo se ven las cosas con los temas y plugins que desees. Si aún no has iniciado tu foro, esto te dará una idea de cómo podrían verse las cosas.

Gestión de la autenticación de dos factores

Si bien el nombre de usuario/contraseña de tu cuenta de tu sitio principal también debería funcionar bien en el sitio de staging, no es tan bonito con la 2FA. Si tienes un problema, desactiva la 2FA:

./launcher enter app
rake users:disable_2fa[<NOMBRE_DE_USUARIO>]
32 Me gusta

Nathan, una gran idea para armar esta guía.

Quizás me lo he perdido, pero ¿qué paso aquí deshabilita el correo electrónico?

5 Me gusta

Buena pregunta. Poner credenciales SMTP incorrectas lo evita por completo, pero también tendría sentido desactivar los correos electrónicos con:

DISCOURSE_DISABLE_EMAILS = yes

Además, eso se activa automáticamente al hacer una restauración, por lo que realmente no es necesario.

8 Me gusta

Añadidas instrucciones para desactivar la aplicación en el OP.

2 Me gusta

Correcto, y, a menudo es bueno poder obtener un enlace de inicio de sesión, así que, recomendaría

 DISCOURSE_DISABLE_EMAILS = 'non-staff'
6 Me gusta

¿Qué tal una sección sobre la creación de usuarios falsos? A algunos administradores puede que no les interese tener información personal identificable en los servidores de staging. ¿Qué se está utilizando para crear usuarios falsos a gran escala o eliminar PII?

Pensé en usar una importación de producción y luego ejecutar el trabajo de anonimización en cada una, ¡pero eso resultaría en un sitio de staging muy aburrido!

¿Puedo sugerir que el OP se convierta en una Wiki?

Algunos enlaces:

https://hackernoon.com/ruby-on-rails-and-the-complexity-of-fake-user-profiles-made-simple-mf4j31gv

Lo he convertido en una wiki.

En general, quiero que un sitio de staging utilice los mismos datos que el sitio de producción para que puedas probar que las cosas funcionarán con los datos reales. ¿Pero tal vez la gente quiere datos falsos para ver lo que Discourse puede hacer antes de empezar a usarlo? (Oh, supongo que esos enlaces tienen soluciones más sofisticadas).

Supongo que podrías tener un User.create en un bucle con una lista de nombres de algún lugar.

2 Me gusta

Obviamente no es mi fuerte :slightly_smiling_face:, pero ¿sería esta una buena oportunidad para usar rake dev:populate?

cd /var/www/discourse
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Creo que eso también funcionaría en un sitio de producción que sea más un entorno de staging/sitio de prueba.

4 Me gusta

¡Aparentemente eso no es un impedimento!

Esa es una gran sugerencia:

Código de tarea: discourse/populate.rake at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse (github.com)

Acciones específicas del usuario:

1 me gusta

¡Genial! ¡De hecho, alguien ya pensó en este problema!

EDIT: y por si acaso, probé esto en un sitio de prueba recién instalado; pegué tus tareas de bundle y rake e hizo esto:

root@test2-app:/var/www/discourse# ALLOW_DEV_POPULATE=1 rake dev:populate
OK
No detecté un archivo `config/dev.yml` personalizado, creando uno para ti donde puedes modificar los valores predeterminados.
Hay 9 registros de grupos. Creando 6 más.
......
Hay 3 registros de usuarios. Creando 27 más.
...........................
Hay 4 registros de categorías. Creando 26 más.
..........................
discourse-solved habilitado en la categoría 'Recipes' (12).
Creando 30 registros de etiquetas de muestra
..............................
Hay 6 registros de temas. Creando 24 más.
........................
root@test2-app:/var/www/discourse# 

3 Me gusta

El gran problema con esto es que tu conjunto de datos ya no representa tus datos en vivo.

Un servidor de ensayo necesita ser representativo de la vida real, de lo contrario, no puedes probar todo antes de pasar a producción con los cambios que se planeen.

He sido testigo de algunos fallos bastante impresionantes en los que pruebas no representativas no lograron identificar problemas que luego surgieron en el entorno real. La mayoría de las veces ocurrieron debido a problemas de calidad de los datos.

Los apellidos compuestos (con y sin guion) y los caracteres acentuados, por ejemplo, causaron enormes problemas.

Si es un servidor de ensayo real, entonces necesita imitar la vida real precisamente. La copia no necesita ser visible para los usuarios normales y deshabilitar el correo electrónico del personal no esencial es bastante aconsejable, pero de lo contrario, solo estás invitando a problemas.

5 Me gusta

Estoy de acuerdo. Mi pregunta se debió a un cliente que estaba nervioso por tener identidades reales de clientes en staging.

Lo ideal sería tener un script para mezclar nombres y direcciones de correo electrónico y dejar todo lo demás igual.

1 me gusta

Suena como una conversación bastante sencilla. Si no tienen una copia representativa, entonces no tienen un sitio de staging.

Si está implementado y asegurado de la misma manera que el sitio en vivo, ¿cuál es su riesgo percibido?

2 Me gusta

Estoy con Stephen. ¿Está el cliente más nervioso por tener datos reales en un sitio de staging, o por no tener un sitio de staging que realmente pruebe sus datos reales?

Si no estás probando con tus datos reales en producción, entonces no sabes lo que sucederá cuando uses los datos reales.

Y esta discusión se está alejando mucho del OP. :slight_smile:

2 Me gusta

Creo que esto debería configurarse para eliminar las publicaciones después de 30 días o algo así. Agregué esto al OP. Hay momentos en que los datos falsos son útiles. Los más paranoicos entre nosotros (incluido yo mismo) tienen razones del mundo real para no confiar en un servidor de staging si no ha sido probado con sus datos reales.

4 Me gusta

Después de tener algunos problemas al implementar la 2FA en nuestro sitio, he añadido esto:

1 me gusta

¡Guau, eso fue increíble! ¡Bada-bing-bada-boom!

Me siento muy productivo después de importar esos datos ficticios… de repente, mi foro de pruebas se pobló automáticamente con un montón de usuarios y publicaciones y etiquetas y categorías y grupos… ¡madre mía!

Muchas gracias @nathank y @pfaffman y @merefield y @JammyDodger y @Stephen… ¡madre mía!

Happy So Excited GIF

5 Me gusta

Me encantaría leer recomendaciones sobre cómo deshabilitar el sondeo emergente a través de la línea de comandos.

La mejor manera es establecer una variable de entorno DISCOURSE_pop3_polling_enabled=false

Necesitas poner en mayúsculas todo el nombre de la variable, pero no puedo hacerlo en mi teléfono.

2 Me gusta

Recientemente migré mi foro de producción a S3 y CloudFront. Ya tenía un servidor de staging en funcionamiento, pero ahora está desfasado con producción y S3 porque no estoy seguro de si necesito un bucket separado y una conexión CDN; no me apetece incurrir en costos adicionales de AWS solo para un servidor de staging. Presumiblemente, ¿no se recomienda apuntar ambos servidores al mismo bucket de S3? ¿Cuál es la forma correcta de hacerlo?

1 me gusta