Levantar aplicación Rails para producción en Ubuntu con Unicorn y Nginx

Normalmente para levantar una aplicación Rails en producción, utilizamos este esquema:

  • Ubuntu como el Sistema Operativo de nuestro Servidor.
  • Unicorn como Servidor de Aplicaciones Rails.
  • Nginx como Servidor HTTP corriendo como un Front-End Reverse Proxy
  • Postgres como el manejador de nuestra Base de Datos.

En palabras más sencillas, Unicorn se encargará de interpretar todo nuestro código Ruby, Nginx de servir nuestro HTML, CSS, JS e imágenes y Postgres de leer y almacenar nuestra información. Todo esto vivirá en un servidor Ubuntu en la nube que operaremos desde la consola.

  1. Primero necesitas hacerte de un buen servidor e instalarle Ubuntu Server, recomiendo el servicio que da Linode porque el precio es muy accesible, nunca me ha fallado el servicio, son máquinas muy potentes y te dan control completo de tu servidor para instalar y desinstalar lo que tu quieras.
  2. Una vez que tengas tu servidor, necesitas instalarle Ruby, para ello puedes auxiliarte instalando rbenv con esta guía.
  3. Después instalale Nginx con estos comandos:
    sudo apt-get update
    sudo apt-get install nginx

    Por defecto Ubuntu lo activa, intenta visitar tu servidor desde un navegador, de esta forma:
    http://el_dominio_o_IP_de_tu_servidor

    Deberías ver una página como esta:
    nginx inicial

    Si no la ves, puedes iniciar Nginx manualmente desde tu servidor, los comandos para apagar, iniciar o reiniciar Nginx son lo siguientes:

    sudo service nginx stop
    sudo service nginx start
    sudo service nginx restart

    Para arrancarlo al iniciar Ubuntu ejecuta este comando:

    sudo update-rc.d nginx defaults

    En versiones recientes de Ubuntu te puede decir que ya existía el registro para iniciarlo automáticamente.

  4. Ahora instalaremos Unicorn:
    gem install unicorn

    ¡Así de fácil!

  5. Sube el código de tu aplicación al servidor. Puedes usar github, bitbucket o simplemente subir un zip si no tienes un manejador de versiones, normalmente subo mis aplicaciones Rails a un directorio apps en el home del usuario que vamos a usar para hacer los deploys, de esta forma:
    deployer@miservidor:~$ mkdir apps
    deployer@miservidor:~$ cd apps
    deployer@miservidor:~/apps$ pwd
    /home/deployer/apps/

    Para dejarlo así:

    /home/deployer/apps/mi_aplicacion
  6. Vamos a configurar un poco tu aplicación para producción:
    • Asegurate de agregar unicorn a tu Gemfile:
      gem 'unicorn'
    • Si usas Rails 4, asegurate de tener un valor en el archivo config/secrets.yml para el apartado de production, por ejemplo:
      # Do not keep production secrets in the repository,
      # instead read values from the environment.
      production:
        secret_key_base: b1329441746d18...4b14d78d744650450113242c

      La llave fue cortada a propósito, básate en las que trae tu aplicación para development y test; puedes sólo cambiarle un caracter a esas para que sea distinta la de producción.

    • Asegurate de tener configurada la Base de Datos para producción en tu archivo config/database.yml, utiliza el manejador de Base de Datos que más te agrade, por ejemplo:
      production:
        adapter: sqlite3   
        pool: 5
        timeout: 5000
        database: db/production.sqlite3
      Si en lugar de Sqlite deseas usar Postgres, basate en esta guia para instalarlo y configurarlo.
    • Instala las gemas necesarias para tu aplicación con el comando bundle
      bundle install
    • Crea tu Base de Datos, ejecuta las migraciones y corre los seeds para el ambiente de producción:
      rake db:create RAILS_ENV=production
      rake db:migrate RAILS_ENV=production
      rake db:seed RAILS_ENV=production
    • Precompila los assets para que se compriman y optimicen:
      rake assets:precompile RAILS_ENV=production
  7. Ahora vamos a configurar unicorn dentro de tu aplicación, para esto necesitamos crear dos archivos:
    • El primer archivo se ubicará en la ruta config/unicorn_init.sh dentro de tu aplicación, y tendrá el siguiente código:
      #!/bin/sh
      ### BEGIN INIT INFO
      # Provides:          unicorn
      # Required-Start:    $remote_fs $syslog
      # Required-Stop:     $remote_fs $syslog
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: Manage unicorn server
      # Description:       Start, stop, restart unicorn server for a specific application.
      ### END INIT INFO
      set -e
       
      # Feel free to change any of the following variables for your app:
      TIMEOUT=${TIMEOUT-60}
      APP_ROOT=/home/deployer/apps/mi_aplicacion
      PID=$APP_ROOT/tmp/pids/unicorn.pid
      CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
      AS_USER=deployer
      set -u
       
      OLD_PIN="$PID.oldbin"
       
      sig () {
        test -s "$PID" && kill -$1 `cat $PID`
      }
       
      oldsig () {
        test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
      }
       
      run () {
        if [ "$(id -un)" = "$AS_USER" ]; then
          eval $1
        else
          su -c "$1" - $AS_USER
        fi
      }
       
      case "$1" in
      start)
        sig 0 && echo >&2 "Already running" && exit 0
        run "$CMD"
        ;;
      stop)
        sig QUIT && exit 0
        echo >&2 "Not running"
        ;;
      force-stop)
        sig TERM && exit 0
        echo >&2 "Not running"
        ;;
      restart|reload)
        sig HUP && echo reloaded OK && exit 0
        echo >&2 "Couldn't reload, starting '$CMD' instead"
        run "$CMD"
        ;;
      upgrade)
        if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
        then
          n=$TIMEOUT
          while test -s $OLD_PIN && test $n -ge 0
          do
            printf '.' && sleep 1 && n=$(( $n - 1 ))
          done
          echo
       
          if test $n -lt 0 && test -s $OLD_PIN
          then
            echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
            exit 1
          fi
          exit 0
        fi
        echo >&2 "Couldn't upgrade, starting '$CMD' instead"
        run "$CMD"
        ;;
      reopen-logs)
        sig USR1
        ;;
      *)
        echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
        exit 1
        ;;
      esac

      Este archivo se encargará de apagar, encender y reiniciar un proceso de Unicorn para nuestra aplicación, asegúrate de personalizar la ruta que establece el valor de APP_ROOT con la ruta en la cual viva tu aplicación, y de poner tu usuario con el que accedes al servidor en la variable AS_USER.

      Debemos darle permiso de ejecución:

      chmod go+x unicorn_init.sh
    • El siguiente archivo se ubicará en config/unicorn.rb y tendrá la siguiente información:
      root = "/home/deployer/apps/mi_aplicacion"
      working_directory root
      pid "#{root}/tmp/pids/unicorn.pid"
      stderr_path "#{root}/log/unicorn.log"
      stdout_path "#{root}/log/unicorn.log"
       
      listen "/tmp/unicorn.mi_aplicacion.sock"
      worker_processes 2
      timeout 30

      Este archivo define los parámetros que le daremos a Unicorn como el timeout, el numero de workers, etcétera. También se define la ubicación del socket con el que se comunicará con Nginx. Asegúrate de personalizar el root y el listen según tu ambiente.

    • Crea el directorio pids dentro de la carpeta tmp de tu proyecto, porque lo va a necesitar Unicorn, ubicándote en la carpeta de tu aplicación, ejecuta este comando:
      mkdir tmp/pids

      Para que te cree este directorio:

      /home/deployer/apps/mi_aplicacion/tmp/pids/
    • Ahora vamos a crear un acceso directo del primer archivo que creamos para tener a la mano una ubicación desde donde levantar y apagar todos nuestros unicorns, primero nos movemos al siguiente directorio:
      cd /etc/init.d/

      Y creamos un acceso directo a nuestro archivo (puedes escoger el nombre que gustes para el acceso directo, yo tiendo a ponerles unicorn_elnombredelaapp para que sea fácil recordarlo):

      sudo ln -s /home/deployer/apps/mi_aplicacion/config/unicorn_init.sh unicorn_mi_aplicacion

      ¡Y ahora procedemos a levantar Unicorn!

      sudo /etc/init.d/unicorn_mi_aplicacion start

      Recuerda que puedes apagar y reiniciar Unicorn con los siguientes comandos:

      sudo /etc/init.d/unicorn_mi_aplicacion stop
      sudo /etc/init.d/unicorn_mi_aplicacion restart

      Cada que hagas cambios en tu código, deberás reiniciar Unicorn; si llegas a agregar alguna gema, es posible que restart no sea suficiente, sino que necesites darle stop y después start.

  8. Ahora vamos a realizar la conexión entre Nginx y Unicorn, primero nos movemos a nuestra carpeta de la aplicación:
    ~/apps/mi_aplicacion

    Y creamos el archivo config/nginx.conf con el siguiente contenido:

    upstream miapliacion {
      server unix:/tmp/unicorn.mi_aplicacion.sock fail_timeout=0;
    }
     
    server {
      listen 80;
      server_name www.miaplicacion.com miaplicacion.com;
      root /home/deployer/apps/mi_aplicacion/public;
     
      location ^~ /assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
      }
     
      try_files $uri/index.html $uri @miaplicacion;
      location @miaplicacion {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://miaplicacion;
      }
     
      error_page 500 502 503 504 /500.html;
      client_max_body_size 4G;
      keepalive_timeout 10;
    }

    Asegúrate de personalizar el valor de upstream, en el server_name poner los dominios o subdominios a los cuales quieres que responda tu aplicación, en root poner la ruta de la carpeta public de tu aplicación, y en el try_files location y proxy_pass escribir lo mismo que pusiste en upstream agregandole una arroba al inicio.

    Para que funcione tu dominio/subdominio debes apuntarlos primero a la IP de tu servidor; esto lo puedes hacer desde antes de hacer esta guía. Esto quiere decir que en este punto de la guía, al visitar tu dominio o subdominio, deberías ver la pantalla inicial de Nginx; sino, quiere decir que no has configurado dichos dominios con tu proveedor, esto se hace desde su panel de administración, por ejemplo en GoDaddy estableces los NameServers de Linode y en tu Linode agregas dichos dominios/subdominios para que al visitarlos desde tu navegador veas tu servidor.

    Muévete al directorio de los sitios disponibles de Nginx:

    cd /etc/nginx/sites-enabled/

    Crea un acceso directo como lo hicimos con unicorn:

    sudo ln -s /home/deployer/apps/mi_aplicacion/config/nginx.conf mi_aplicacion

    ¡Y reinicia Nginx!

    sudo service nginx restart

    ¡Ya deberías ver tu sitio online en ambiente productivo!

    Si te salen errores no olvides revisar los logs de producción en tu carpeta de la aplicación, los logs de unicorn igualmente dentro de tu carpeta, o los logs de nginx si te has equivocado en la configuración.

Recursos

How To Install Nginx On Ubuntu 14.04lts
How To Deploy Rails Apps Using Unicorn And Nginx On CentOS 6.5

Mejores mensajes de los commits en GIT

Es importante la calidad de los mensajes, para cuidar la ortografía y la longitud de líneas prefiero usar vim, por lo que veremos a continuación.

Lo instalamos en Ubuntu:

sudo apt-get install vim

Le decimos a Git que lo use:

git config --global core.editor "vim"

Creamos archivo “~/.vimrc” con lo siguiente:

autocmd Filetype gitcommit setlocal spell textwidth=72

Al hacer un commit, no usar opción -m para que lance la ventana de vim:

git commit

vim inicio

Vim tiene dos modos: el de edición y el de comando.

Al entrar a vim se estará en modo de comando por lo que al escribir algo o dar enter no se reflejará en pantalla, para ello hay que pasarse al modo texto presionando una sola vez la tecla “i”, esto hará que se pueda escribir normalmente, para saber que lo hicimos bien, podemos ver que hasta abajo dice “– INSERTAR –“.

vim insertar

Escribimos el texto del commit, por la configuración que agregamos vim automáticamente pasará a una nueva línea cuando el mensaje sea demasiado largo, además de revisar que no tengamos errores de ortografía.

ortografia

Para salir y guardar, en modo comando escribir:

:wq

Para cancelar:

:q!

Si usan español en los mensajes y no les corrige bien la ortografía, pasen al modo de comando con la tecla “ESC” y escriban el siguiente comando:

:setlocal spell spelllang=es

Les preguntará si desean crear un directorio, y si desean descargar los diccionarios, a todo digan que sí:

descargar corrector ortografia

Si siempre usan español, pueden cambiarlo en el archivo ~/.vimrc:

autocmd Filetype gitcommit setlocal spell spelllang=es textwidth=72

Recursos:
How do I make git use the editor of my choice for commits?
5 Useful Tips For A Better Commit Message
Vim en dos minutos

Teclado personalizado en Ubuntu 14.04

Hace poco tuve la necesidad de comprar un teclado USB para una laptop que tenía algunas teclas que no funcionaban.

Desafortunadamente, ningún mapeo se ajustaba por defecto a los dibujitos que tenía en mi teclado.

entradas

El más cercano era el de español de España, pero tenía los acentos invertidos (la tecla con la tilde normal la ponía invertida y viceversa).

Así que tuve que modificar el mapeo manualmente. Para esto se necesitan abrir los mapeos del español con permiso de administrador. Desde una terminal teclea:

cd /usr/share/X11/xkb/symbols/
sudo gedit es

En mi caso intercambié las entradas:

key <AD11> { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
key <AC11> { [dead_acute, dead_diaeresis, braceleft, braceleft ] };

Dejándolas como:

key <AC11> { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
key <AD11> { [dead_acute, dead_diaeresis, braceleft, braceleft ] };

Y lo mismo para las teclas que deseen cambiar. Después de guardar, hay que regenerar la configuración:

sudo dpkg-reconfigure xkb-data

Al lanzar la aplicación Entrada de Texto de Ubuntu ya deberían ver los cambios reflejados en el vistazo del teclado que aparece ahí.

Entrada De Texto

teclado

Después de cambiar todo lo necesario, para que los cambios se vieran en el editor de texto que ya tenía abierto, yo tuve que decirle a Ubuntu que cambiará el mapa de caracteres con el atajo Super+Espacio, osea la tecla Windows y el espacio.

Y ya se puede usar la nueva configuración personalizada en todas las aplicaciones.

Mi Ubuntu Desktop — Puesta a punto de una máquina de escritorio

Ubuntu recién instalado

Para eliminar los resultados de búsqueda en línea en el tablero, busca en Unity: Seguridad y privacidad → Búsqueda y da clic sobre el interruptor de Incluir resultados de búsqueda en línea.

Para activar los espacios de trabajo, busca en Unity: Apariencia → Comportamiento y da clic sobre Activar las áreas de trabajo.

Activa el firewall, teclea en la terminal:

sudo ufw enable

Busca e instala actualizaciones

Ya sea con la aplicación de Actualización de software o con:

sudo apt-get update
sudo apt-get upgrade

Navegador

El mejor navegador en este momento: Google Chrome
Para activar el WebGL a veces es necesario entrar a: chrome://gpu/
Instalar chat de voz y video para gmail: Chat de vídeo y voz de Google

Misceláneos

Algunas cosas útiles que he encontrado a través de los años y que siempre termino instalando:

sudo apt-get install byobu alpine testdisk mlock conky-all gddrescue
sudo apt-get install comix gimp gimp-ufraw gnote inkscape anki
sudo apt-get install fail2ban logwatch chkrootkit unrar curl nmap htop mtr-tiny
sudo apt-get install pdftk wkhtmltopdf imagemagick poppler-utils pandoc gdal-bin ant
sudo apt-get install network-manager-openvpn-gnome libgeoip-dev libav-tools

Instala calibre.

Configuración básica

Abre una terminal y teclea:

echo "export EDITOR=nano" >> ~/.bashrc

Esto pone a nano como el editor por defecto, en lugar de vi.

Activa TRIM para mejorar el rendimiento de tu disco duro de estado sólido

Si cuentas con un SSD, lo más recomendable es que pongas un trabajo cron a realizar las tareas de mantenimiento que necesita este tipo de disco duro:
Enable TRIM on SSD in Ubuntu for better performance (Using a daily cron job – recommended)

Verifica que el comando fstrim funciona adecuadamente en tu equipo:

sudo fstrim -v /

Si todo sale bien, verás algo como:
/: 613904384 bytes were trimmed

Teclea en la terminal:

sudo gedit /etc/cron.daily/trim

Agrégale este contenido:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG

Si tienes otras particiones en el SSD agrégalas al final del script anterior.

No olvides hacer ejecutable el script:

sudo chmod +x /etc/cron.daily/trim

Ubuntu para desarrollo de software

git es mi herramienta predilecta para control de versiones, y la necesito para instalar herramientas de trabajo como rbenv y Ruby: Cómo instalar git

Para facilitar los cambios de directorio en la terminal: z

git clone https://github.com/rupa/z ~/z
echo '. ~/z/z.sh' >> ~/.bashrc

Ruby, mi lenguaje favorito en estos momentos: Cómo instalar Ruby

Si te interesa el gamedev en Ruby, checa los prerequisitos para Ubuntu: Getting Started on Linux

Y estas las gemas necesarias para darle rienda suelta al hobby:

gem install gosu chipmunk texplay lotu

Otro ambiente con el que me estoy involucrando últimamente es Node.js, aquí la guía de cómo instalarlo.

PostgreSQL es una base de datos sólida y robusta: Cómo instalar PostgreSQL

Instala Redis con esta guía.

Para usar las IDEs de JetBrains instala Java.

Y configura el Inotify Watches Limit con esta guía.

Ubuntu desktop y entretenimiento

Drivers de Nvidia

Agrega repositorio con drivers recientes de Nvidia: 3rd Party Repository: Ubuntu-x-swat

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current

Para ajustar los tonos del monitor de acuerdo a la hora del día

f.lux para una pantalla agradable al trabajar durante la noche.

sudo add-apt-repository ppa:kilian/f.lux
sudo apt-get update
sudo apt-get install fluxgui

Si por alguna razón f.lux no funciona en tu máquina, intenta con Redshift.

Para escuchar música

Un reproductor de música decente: Clementine

sudo add-apt-repository ppa:me-davidsansome/clementine
sudo apt-get update
sudo apt-get install clementine

Para descargar videos de youtube

Instala youtube-dl

Después de instalar git, clona en un directorio, entra a él y después ejecuta:

make cleanall
make all
sudo make install

Servidor de medios

Instala Plex Media Server.
Guía de instalación.

Para poder conectar algún dispositivo como una SmartTV a tu servidor Plex, debes abrir el puerto 32400 en el firewall.
Teclea en la terminal:

sudo ufw allow 32400

Si tus videos y películas están en otro disco duro, recuerda darle permisos 755 al directorio /media/$USER:

sudo chmod 755 /media/$USER

De otra forma Plex no podrá leer tus archivos.

Cómo instalar git en Ubuntu 14.04

Unos artículos atrás había comentado ya, un poco acerca de git y cuan grandioso es. :)

Instalación

Abre una terminal y teclea:

sudo apt-get install git

Listo, ya puedes usar git.

Para probar tu instalación teclea esto:

git --version

En mi caso presenta: git version 1.9.1.

Configuración

Es recomendable ejecutar los siguientes comandos para propósitos de identificación. Estos datos serán utilizados para marcar los commits que realices.

git config --global user.name "Pon aquí tu nombre"
git config --global user.email "pon@aqui.tu.correo"

Para tener texto en color:

git config --global color.ui "auto"

Para habilitar la detección automática del número de hilos a usar al empacar repositorios (bueno para computadoras multi-CPU o multi-núcleo):

git config --global pack.threads "0"

Aquí algunos alias que tengo dados de alta en mi ~/.gitconfig, ayudan a teclear menos en la terminal:

[alias]
    l = log --oneline --decorate --graph
    co = checkout
    ci = commit
    man = help
    h = help
    a = add
    f = fetch
    d = diff
    dc = diff --cached
    dt = difftool
    dtc = difftool --cached
    ds = diff --stat
    dsc = diff --stat --cached
    s = status --short --branch
    b = branch
 
[credential]
    helper = cache

Actualización

Para actualizar a una versión más reciente, sólo descarga el archivo y realiza los pasos descritos arriba: descomprime, compila e instala.

Si lo instalaste desde los repositorios, las actualizaciones te aparecerán en la aplicación de Actualización de software de Ubuntu.

GitHub Social Code Hosting

Si tienes un proyecto open source y quieres un servicio de hospedaje de código y control de versiones premium sin pagar un centavo, prueba con GitHub.
También cuentan con soporte para proyectos privados en planes.

Tutoriales

Cómo instalar Node.js en Ubuntu 14.04

Node.js es una plataforma construida sobre el JavaScript runtime de Chrome, útil para crear aplicaciones de red rápidas y escalables.

Se recomienda (por seguridad) no usar npm o node con sudo, nvm sirve bien para este propósito.

Primero, instala los prerequisitos para Ubuntu:

sudo apt-get install python g++ make
#sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get build-dep nodejs

Clona el repositorio y configura tu $SHELL:

git clone https://github.com/creationix/nvm.git ~/.nvm
echo "source ~/.nvm/nvm.sh" >> ~/.bashrc
exec $SHELL
echo "nvm use 0.11" >> ~/.bashrc

Revisa las versiones disponibles con:

nvm ls-remote

Instala la versión más reciente de v0.11.x con:

nvm install 0.11

Prueba que esté todo bien revisando las versiones de node y npm:

node -v #v0.11.13
npm -v #1.4.9

Instala un par de cosas útiles (¡no uses sudo!):

npm install -g yo grunt-cli karma-cli bower jake generator-angular generator-karma jshint uglify-js karma-jasmine karma-chrome-launcher karma-mocha karma-phantomjs-launcher jade gulp

Hablo de Yeoman, Grunt y Bower.

Y un par de extensiones para Yeoman:
generator-angular: Yeoman generator for AngularJS
generator-karma: Yeoman generator for Karma

Ya con Node.js instalado, podemos echarle un ojo al tutorial de AngularJS ¿no? ;)

Referencia

nvm – Node Version Manager

Sin sonido HDMI en laptop con ATI Radeon HD 4200 RS880 en Ubuntu

Si tienes sonido en las bocinas de tu laptop pero al conectar el cable HDMI a una televisión no se oye nada, hay varias cosas que puedes probar: ajustar el volumen y verificar que no esté en mute la salida.

Si a pesar de todo sigues sin sonido, espero esto te ayude.

Abre una terminal y teclea:

gksudo gedit /etc/default/grub

Busca esta línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Y cámbiala por esta otra:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.audio=1"

Por último:

sudo update-grub

¡Reinicia y listo!

Referencia

Fast video playback with no sound

Mi Ubuntu Desktop — Puesta a punto de una Alienware M11x R2

¿Qué hacer con una Alienware M11x R2 que trae por defecto Windows 7?

Instalarle Ubuntu, por supuesto. Je.
Estos son mis apuntes.

Ubuntu recién instalado

Para comenzar, no me late que aparezcan resultados de Amazon en mi menú de aplicaciones. Esto lo soluciona:

sudo apt-get remove unity-lens-shopping

Activa el firewall:

sudo ufw enable

Buscar e instalar actualizaciones

Ya sea con la aplicación de Actualización de software o con:

sudo apt-get update
sudo apt-get upgrade

Navegador

El mejor navegador en este momento: Google Chrome
Instalar chat de voz y video para gmail: Chat de vídeo y voz de Google
Instalar un color browser útil : Chroma
Instalar un color picker útil : Eye Dropper
Y una app para leer feeds: Feedly

Misceláneos

Algunas cosas útiles que he encontrado a través de los años y que siempre termino instalando:

sudo apt-get install byobu alpine testdisk mlock conky-all gddrescue
sudo apt-get install comix gimp gimp-ufraw gnote calibre inkscape unetbootin
sudo apt-get install denyhosts logwatch chkrootkit unrar curl nmap htop mtr-tiny
sudo apt-get install pdftk wkhtmltopdf imagemagick poppler-utils pandoc

Instala youtube-dl

Clonar en un directorio, entrar a él y después ejecutar:

make cleanall
make all
sudo make install

Configuración básica

Abre una terminal y teclea:

echo "export EDITOR=nano" >> ~/.bashrc

Esto pone a nano como el editor por defecto, en lugar de vi.

Activa TRIM para mejorar el rendimiento de tu disco duro de estado sólido

Si cuentas con un SSD, lo más recomendable es que pongas un trabajo cron a realizar las tareas de mantenimiento que necesita este tipo de disco duro:
Enable TRIM on SSD in Ubuntu for better performance (Using a daily cron job – recommended)

Ubuntu desktop y entretenimiento

La Alienware M11x R2 cuenta con la tecnología Optimus de nVidia y Ubuntu no trae soporte para esta tecnología, por lo tanto es necesario instalar un software que nos ayude a tomar control sobre la tarjeta de video (y de paso que no consuma tanta energía cuando no está siendo usada): Instala Bumblebee

Si tienes algún problema con los drivers y/o la pantalla, es posible que encuentres la solución aquí.

Para ajustar los tonos del monitor de acuerdo a la hora del día

f.lux para una pantalla agradable al trabajar durante la noche.

Para escuchar música

Un reproductor de música decente: Clementine
Puedes descargar la versión más reciente de Clementine para Ubuntu desde el PPA oficial:

sudo add-apt-repository ppa:me-davidsansome/clementine
sudo apt-get update
sudo apt-get install clementine

Ubuntu para desarrollo de software

git es mi herramienta predilecta para control de versiones, y la necesito para poder instalar otras cosas como Ruby y rbenv: Cómo instalar git

Para facilitar los cambios de directorio en la terminal: z

git clone https://github.com/rupa/z ~/z
echo '. ~/z/z.sh' >> ~/.bashrc

Ruby, qué puedo decir, es mi lenguaje favorito en estos momentos, el que me abrió los ojos a la programación funcional, hasta que llegue otro que me permita ser más productivo: Cómo instalar Ruby.

Si te interesa el gamedev en Ruby, checa los prerequisitos para Ubuntu: Getting Started on Linux

Y estas las gemas necesarias para darle rienda suelta al hobby:

gem install gosu chipmunk texplay lotu

Otro ambiente con el que me estoy involucrando últimamente es Node.js, aquí la guía de cómo instalarlo en Ubuntu.

PostgreSQL es una base de datos sólida y robusta: Cómo instalar PostgreSQL

emacs era mi editor de código favorito, aquí la guía para instalarlo: Cómo instalar emacs