Implementando mi aplicación Rails a través de Git en un Ubuntu 14.04

Necesito implementar mi aplicación de Rails en un server nuevo y realmente no sé cómo proceder en este momento. Leí un montón de guías y tuts pero, como no tengo muchos conocimientos sobre la implementación en general, agradecería alguna ayuda directa.

Entonces, lo que comencé a hacer es esto:

  • Empujando mi aplicación de Rails desde mi sistema local a través de ssh-key a un repository de git
  • Instalación de Rails en el server de Ubuntu
  • Instalación de Postgres en el server de Ubuntu
  • Crear un usuario de Postgres en el server de Ubuntu
  • Creando una key ssh para conectar mi server a mi count git

Ahora sé que es posible enviar mis datos desde el repository de git en el server con "ganchos", pero no sé cómo. Además, no estoy seguro si necesito crear una database en mi server y cómo debo manejar la database.yml (¿es suficiente establecer el usuario y la contraseña para la parte de producción?). Por último, pero no less importante, no estoy seguro si el uso de git es seguro o si necesito configurar o instalar cualquier otra cosa para get un nivel básico de security.

Apreciaría cualquier consejo.

EDITAR:

Seguí esta guía para configurar capistrano . En el paso 7 recibo el siguiente post de error:

 [6359a9ec] Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of known hosts. [6359a9ec] [6359a9ec] Error reading response length from authentication socket. [6359a9ec] [6359a9ec] Permission denied (publickey). [6359a9ec] [6359a9ec] fatal: Could not read from remote repository. [6359a9ec] [6359a9ec] [6359a9ec] Please make sure you have the correct access rights [6359a9ec] [6359a9ec] and the repository exists. [6359a9ec] 

primero, la installation / ejecución de postgres no debería formar parte de la configuration de implementación de sus raíles. tal vez, en algún momento en el futuro, postgres ni siquiera se ejecutará en la misma máquina que la aplicación de Rails.

En cuanto a su pregunta sobre los raíles, solo puedo recomendar que eche un vistazo a Capistrano , que puede hacer cualquier cosa que describa y que sea estable, probado en batalla y de código abierto. hace mucho less que la aplicación de TeamCity descrita en otra respuesta y, por lo tanto, es mucho más fácil de configurar. una vez configurado, el flujo de trabajo es realmente simple:

  • git push
  • deployment de tapa

capistrano luego extraerá el nuevo código, instalará sus dependencies usando bundler, ejecutará migraciones cuando sea necesario y reiniciará su server de aplicaciones de Rails. también manejará database.yml y otros files secretos que no están en su repository (por enlace simbólico). finalmente, si accidentalmente implementó algo malo, también puede hacer una reversión fácilmente.

tldr: use capistrano .

Recomiendo que mires a TeamCity en JetBrains . Sé que es otra herramienta que debes aprender, pero te ahorrará time a largo ploop.

Básicamente, creo que podría estar buscando configurar una canalización de implementación. Por lo tanto, necesitará que todas las dependencies de las que dependa su aplicación estén instaladas en otro server en alguna parte.

Para una aplicación de Rails, esta será para todas las dependencies de ruby, bundler y rails gems, javascript runtime como node, postgres y tal vez algunas otras cosas. Me estoy volviendo loco, así que estoy seguro de que necesitarás más cosas instaladas aparte de eso. También recomendaría usar una herramienta de gestión de versiones ruby ​​como rbenv. A algunas personas les gusta automatizar la installation de todas estas dependencies también, pero podría ser más simple hacerlo a mano por el momento.

Básicamente, lo que TeamCity va a hacer es permitirle definir la URL de su repository, que podría ser Bitbucket o Github, y le permite definir una serie de pasos que se deben seguir para comstackr e implementar su aplicación. La aplicación podría implementarse en el mismo server en el que instale TeamCity. Creo que eso sería más fácil para ti, al less por ahora.

Cada vez que configuro una canalización de implementación en TeamCity, el process de implementación es similar a esto:

1) Hago un cambio y envío mi código al repository. (Bitbucket o Github por lo general).

2) TeamCity ve ese cambio y baja el código fuente de la aplicación Rails.

3) TeamCity ejecuta la bundle install para get cualquier gem que necesite mi aplicación Rails.

4) TeamCity ejecuta mis testings. Si uno falla, detiene la compilation y me envía un correo electrónico. (Puede configurar la configuration SMTP en TeamCity. Recomiendo usar Mandrill ya que a esta escala sería gratis).

5) Después de ejecutar las testings con éxito, TeamCity copy el código fuente en un directory de implementación (algo así como / var / www / myApp / por lo general).

6) Por último, se ejecuta un command para reiniciar cualquier server que se esté utilizando para atender su aplicación Rails. Podría ser Delgado, Unicornio o lo que sea. A veces colocaré esto detrás de Nginx y usaré el proxy inverso para equilibrar la carga de todas las instancias de la aplicación Rails.

Llevará un time, pero una vez que lo domine, cada proyecto que haga tendrá algún tipo de canal de implementación en su lugar. Mi primera configuration tomó 2 semanas.

Después, pondrá una sonrisa en tu cara cuando solo puedas hacer un cambio en el código y uploadlo con git para verlo en vivo en Internet.

EDITAR:

Y para responder a sus preguntas específicamente:

Además, no estoy seguro si necesito crear una database en mi server y cómo debo manejar la database.yml (¿es suficiente establecer el usuario y la contraseña para la parte de producción?)

En la versión actual de los Rails, creo que las cnetworkingenciales de la database de producción se almacenan en variables de entorno en la propia máquina. Puede almacenar las cnetworkingenciales como desee, siempre que no sean de acceso público. Si el código fuente de su aplicación es privado, entonces puede almacenarlo en el file .yml. De lo contrario, deje el file YAML de producción fuera del control de origen y cópielo usted mismo al server de deployment o utilice variables de entorno. Si usa TeamCity, entonces estas variables podrían establecerse en TeamCity.

Por último, pero no less importante, no estoy seguro si el uso de git es seguro o si necesito configurar o instalar cualquier otra cosa para get un nivel básico de security.

Git es seguro, sí. Pero al igual que muchas herramientas, puede usarse de forma insegura. Siempre trate de usar los protocolos git, ssh o https al presionar y jalar el código y todo irá bien.

EDICION 2:

No recomendaría tener una aplicación de entorno de producción implementada automáticamente en los cambios de código. En TeamCity debe tener un entorno beta implementado automáticamente y una vez que se haya probado exhaustivamente, puede presionar un button y desplegar esos cambios en la producción.