Me encuentro trabajando desde hace unos días en un proyecto para una empresa de logística, que requiere una aplicación para Shopify. Ésta aplicación requiere estar en un sitio público ya que autentica con OAuth y escucha una serie de webhooks emitidos desde Shopify. Para esto se me vino a la mente el bendito Heroku, el cuál todavía no conozco profundamente, pero lo poco que lo usé me alcanzó para encariñarme.
La aplicación en cuestión es un proyecto basado en Laravel que tengo en un repositorio privado de GitLab.
Parado en el repositorio local, le quiero agregar el vínculo hacia Heroku, para eso ejecuto lo siguiente:
heroku login
Esto abrirá una ventana de heroku para realizar el login o registro, la cual obviamente debemos completar. Luego desde la consola podemos crear la aplicación de Heroku:
heroku create nombre-aplicacion
Esto crea una aplicación en Heroku (de la cuál nos muestra la URL) y genera una rama remota llamada heroku, la cual estará sincronizada con la aplicación.
Para que Heroku sepa de que forma hacer un build del proyecto, debo setear el buildpack de heroku para php
heroku buildpacks:set heroku/php
También debo crear un archivo Procfile en el raiz del proyecto con el siguiente contenido:
web: vendor/bin/heroku-php-apache2 public/
Hago un commit y el push a la rama de heroku
git push heroku
Para configurar variables de entorno (.env) se puede usar el siguiente comando (o también desde el Dashboard de Heroku se puede hacer manualmente). Para laravel es necesario agregar la siguiente variable:
heroku config:set APP_KEY=base64:xxxxxxxxx=
AGREGAR BASE DE DATOS
Para eso agrego el add-on de ClearDB que nos permite agregar bases de datos MySQL gratuitas
heroku addons:add cleardb
Para agregar éste add-on es necesario tener activada la cuenta de facturación por más que sea gratuito. Es necesario en este punto agregar una tarjeta de crédito a la cuenta de Heroku. Si ya la tenemos, al ejecutar el comando nos mostrará la URL de la base de datos. De todos modos podemos ver esas credenciales ejecutando:
heroku config | grep CLEARDB_DATABASE_URL
Esta URL se forma de la siguiente manera: mysql://user:pass@host/database?reconnect=true Extrayendo la información de esa url podríamos configurar nuestras variables de entorno:
Para ver los logs de la aplicación desde los logs del dashboard de heroku es necesario setear el canal de logs a errorlog:
heroku config:set LOG_CHANNEL=errorlog
Una de las utilidades que nos brinda el CLI de Heroku es que nos permite correr comandos en nuestra aplicación, por ejemplo para correr las migrations debemos correr:
Para pasar esta cuarentena, volvimos -junto con TODOS mis amigos- a agarrar nuestro antiguo vicio: el Counter Strike.
Para poder jugar es necesario un servidor -que viene con el juego- para permitir (con algunas configuraciones al router) levantar en tu propia PC y compartir con amigos.
Queriendo evitar depender de la PC de algún amigo (o peor aún: la mía), y nuestras conexiones a Internet, busqué la forma de levantar en un servidor, y acá la comparto.
Lo primero que necesitamos es, obviamente, una cuenta en AWS. Siguiendo los pasos es muy fácil crearla.
Desde la consola de administración de AWS, buscamos el servicio EC2 e ingresamos.
En la parte superior derecha nos da la opción de elegir la ubicación de nuestro servidor. Yo elegí Sao Paulo, porque al estar en Argentina es el que me ofrece menor latencia.
En la barra de la izquierda tenemos los distintos componentes de EC2, para este caso usaremos una instancia (Instance), asi que hacemos click sobre Instances, y una vez adentro ejecutamos Launch Instance.
En este paso tenemos que elegir la imagen a utilizar.
Seleccionamos la primera opción: Amazon Linux 2 AMI (HVM), SSD Volume Type – ami-0b032e878a66c3b68
Luego elegimos el tipo de instancia. Para que sea gratis debemos elegir t2.micro (Free tier elegible)
Hacemos click en Review and Launch, luego controlamos los datos que nos muestra y hacemos click en Launch.
Nos va a salir un cartel como el siguiente:
Como no tenemos claves creadas vamos a seleccionar en el primer select la opción Create a new key pair, y debajo seleccionamos un nombre para crearlo (elegir el que deseen).
Hacemos click en Download Key Pair, e inmediatamente se nos va a descargar un archivo de extensión .pem .
Ahora sí, hacemos click en Launch Instances.
Si todo salió bien veremos una pantalla con el estado que dirá algo así como: Your instances are now launching. Hacemos click en View Instances.
Desde la columna IPv4 Public IP podemos ver qué IP tiene nuestro servidor al cual nos conectaremos luego.
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum localinstall mysql57-community-release-el7-11.noarch.rpm
yum localinstall mysql57-community-release-el7-11.noarch.rpm --skip-broken
yum-config-manager --disable mysql80-community
yum localinstall mysql57-community-release-el7-11.noarch.rpm --skip-broken
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
yum localinstall mysql57-community-release-el7-11.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
yum install mysql-community-server
service mysqld start
service mysqld status
grep 'temporary password' /var/log/mysqld.log
sudo mysql
CREATE USER 'counter'@'localhost' IDENTIFIED BY 'XXXXXX';
CREATE DATABASE cs_db;
ALTER DATABASE cs_db CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON cs_db.* TO 'counter'@'localhost';<br>FLUSH PRIVILEGES;
show variables like 'sql_mode' ;
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Gracias al proyecto Let’s Encrypt, hoy es posible tener certificados en nuestros sitios en muy pocos pasos.
Básicamente debemos entrar en la web de CertBot y seguir los pasos que explican allí.
En mi caso yo lo realicé en un servidor Ubuntu 16.04 con un servidor nginx y lo primero que hice fue agregar el Certbot PPA a la lista de repositorios: