ruby on rails - que - ¿Cómo implementar una aplicación de Rails en un VPS(o servidor dedicado)?
vps heroku (2)
¿Cómo puedo implementar una aplicación Rails en un VPS (servidor privado virtual) o en un servidor dedicado? Sería bueno tener una guía fácil de seguir.
Conozco las secuencias de comandos para automatizar el proceso, pero creo que es mejor tener todo bajo control para comprender mejor el proceso.
Implementé mi aplicación de rieles en mis servidores de producción (es un clúster) con Capistrano antes, pero descubrí que Capistrano es un poco complejo y, a veces, incluso se convirtió en un alborotador ... Así que escribí mi guión de implementación por bash shell script.
Lo puse en github con una breve guía: deploy_rails
Implementé con éxito una aplicación pesada de Rails en Linode u Ocean Digital, utilizando estas tecnologías:
- rbenv para la instalación de Ruby
- nginx + Pasajero para el servidor de aplicaciones
- PostgreSQL para el servidor de la base de datos
- Capistrano para automatizar las implementaciones (configúrelo primero en su máquina de desarrollo con las configuraciones y la IP de su servidor, no lo cubriré aquí)
Estos son los pasos que funcionan para mí:
Configurando la máquina virtual
Crea una nueva máquina virtual
Siga las instrucciones de configuración de su hosting, como Linode u Digital Ocean, para crear el nodo y configurarlo.
Configurar la fecha
- dpkg-reconfigure tzdata
Actualizar paquetes
- actualización apt-get
- actualización apt-get
Seguridad
Crear usuario
- adduser deploy
- usermod -a -G sudo deploy
- cerrar sesión
Configurar la autenticación de clave SSH
En local:
- ssh-keygen
- Copia la clave pública:
- scp ~ / .ssh / id_rsa.pub [email protected]: ~
En el servidor:
- ssh [email protected]
- habilitar el alias para listar archivos:
- vim ~ / .bashrc
- descomentar todos los alias
- mkdir .ssh
- mv id_rsa.pub .ssh / authorized_keys
- chown -R deploy: deploy .ssh
- chmod 700 .ssh
- chmod 600 .ssh / authorized_keys
- cierre de sesión (prueba la nueva autenticación)
Configurar SSH
- sudo vim / etc / ssh / sshd_config
- Cambiar PermitRootLogin a no
- sudo service ssh restart
Configurar el firewall
- sudo iptables -L (debe mostrar una tabla vacía)
- sudo vim /etc/iptables.firewall.rules
- Pegue esto: https://gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-iptables-firewall-rules
- sudo iptables-restore </etc/iptables.firewall.rules
- sudo iptables -L (ahora debería mostrar las reglas configuradas)
- sudo vim /etc/network/if-pre-up.d/firewall
- Pegue esto: https://gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-firewall
- sudo chmod + x /etc/network/if-pre-up.d/firewall
Configurar fail2ban
Configure si tiene suficiente memoria libre, ya que tiende a comérselo.
- sudo apt-get install -y fail2ban
Configurar Ruby
Instalar Git
- sudo apt-get install -y git
Instalar rbenv
- git clone https://github.com/sstephenson/rbenv.git ~ / .rbenv
- echo ''export PATH = "$ HOME / .rbenv / bin: $ PATH"'' >> ~ / .bashrc
- echo ''eval "$ (rbenv init -)"'' >> ~ / .bashrc
- fuente ~ / .bashrc
- git clone https://github.com/sstephenson/ruby-build.git ~ / .rbenv / plugins / ruby-build
Instalar Ruby
- sudo apt-get install -y curl gnupg build-essential
- rbenv install -l (busque la última versión)
- rbenv install 2.3.3 (o la última versión disponible en este momento)
- rbenv global 2.3.3
- rbenv rehash
- vim .gemrc
- Pega esto: gema: --no-documento
Configurar servidores
Instalar nginx + pasajero
- Instalar siguiendo la documentación:
Instalar PostgreSQL
- Instalar siguiendo la documentación:
Bibliotecas de configuración
Instalar node.js
Necesario para precompilar los activos.
- sudo apt-get install -y nodejs
Instalar el paquete
- obtener el paquete de instalación
- rbenv rehash
Configura la aplicación
Crear el usuario en PostgreSQL
- nombre de usuario de createuser --pwprompt
- createdb -Ousername -Eutf8 db_name
- Pruébalo:
- psql db_name --user nombre de usuario --password
Implemente el código * En el servidor: * sudo mkdir -p /srv/yoursite.com * sudo chown deploy: deploy /srv/yoursite.com * En su máquina de desarrollo: * bundle exec cap production deploy: check (arrojará un error porque no encuentra la base de datos) * En el servidor: * cd /srv/yoursite.com/shared/config * vim database.yml (pegue la configuración de su base de datos) * vim secrets.yml (pegue sus secretos de configuración) * En su máquina de desarrollo: * bundle exec cap production deployment * bundle exec cap production cada vez que: update_crontab
Configurar logrotate
- Siga esta guía: * https://gorails.com/guides/rotating-rails-production-logs-with-logrotate