¿Qué es Heroku?¶
Heroku es una solución de alojamiento todo en uno muy popular. Puedes encontrar más información en heroku.com
Registrarse¶
Necesitarás una cuenta de Heroku. Si no tienes una, regístrate aquí: https://signup.heroku.com/
Instalar CLI¶
Asegúrate de haber instalado la herramienta CLI de Heroku.
HomeBrew¶
brew tap heroku/brew && brew install heroku
Otras Opciones de Instalación¶
Consulta las opciones de instalación alternativas aquí: https://devcenter.heroku.com/articles/heroku-cli#download-and-install.
Iniciar sesión¶
Una vez que hayas instalado la CLI, inicia sesión con el siguiente comando:
heroku login
Verifica que el correo electrónico correcto esté conectado con:
heroku auth:whoami
Crear una aplicación¶
Visita dashboard.heroku.com para acceder a tu cuenta, y crea una aplicación nueva desde el menú desplegable en la esquina superior derecha. Heroku te hará algunas preguntas, como la región y el nombre de la aplicación, tan solo sigue las indicaciones.
Git¶
Heroku usa Git para desplegar tu aplicación, por lo que deberás colocar tu proyecto en un repositorio de Git, si aún no lo está.
Inicializar Git¶
Si necesitas agregar Git a tu proyecto, ingresa el siguiente comando en Terminal:
git init
Master¶
Debes decidirte por una rama y ceñirte a ella para desplegar en Heroku, como la rama main o master. Asegúrate de que todos los cambios se hayan registrado en esta rama antes de hacer push.
Comprueba tu rama actual con:
git branch
El asterisco indica la rama actual.
* main
commander
other-branches
Nota
Si no ves ningún resultado y acabas de ejecutar git init
, primero deberás hacer un commit de tu código y luego verás el resultado del comando git branch
.
Si actualmente no estás en la rama correcta, cambia a ella escribiendo (para el caso de main):
git checkout main
Commit de cambios¶
Si este comando produce resultados, entonces tienes cambios sin commit.
git status --porcelain
Confirmalos con lo siguiente
git add .
git commit -m "a description of the changes I made"
Conectar con Heroku¶
Conecta tu aplicación con heroku (reemplaza con el nombre de tu aplicación).
$ heroku git:remote -a your-apps-name-here
Establecer Buildpack¶
Establece el buildpack para enseñar a heroku cómo tratar con vapor.
heroku buildpacks:set vapor/vapor
Archivo de versión de Swift¶
El buildpack que agregamos busca un archivo .swift-version para saber qué versión de Swift usar. (Reemplace 5.8.1 con la versión que requiera su proyecto).
echo "5.8.1" > .swift-version
Esto crea .swift-version con 5.8.1
como su contenido.
Procfile¶
Heroku usa el Procfile para saber cómo ejecutar tu aplicación, en nuestro caso debe verse así:
web: App serve --env production --hostname 0.0.0.0 --port $PORT
Podemos crear esto con el siguiente comando de terminal
echo "web: App serve --env production" \
"--hostname 0.0.0.0 --port \$PORT" > Procfile
Confirmar cambios¶
Acabamos de agregar estos archivos, pero no están confirmados. Si hacemos push, heroku no los encontrará.
Confírmarlos con lo siguiente.
git add .
git commit -m "adding heroku build files"
Despliegue en Heroku¶
Estás listo para desplegar, ejecuta esto desde la terminal. Puede que la compilación tarde un poco de tiempo, esto es normal.
git push heroku main
Escalabilidad¶
Una vez que hayas realizado una build con éxito, debes agregar al menos un servidor. Los precios comienzan en $5/mes para el plan Eco (consulta precios), asegúrate de tener configurado el pago en Heroku. Luego, para un solo trabajador web (worker):
heroku ps:scale web=1
Despliegue continuo¶
Cada vez que quieras actualizar, solo tienes que obtener los últimos cambios en main y enviarlos a heroku y se volverá a desplegar.
Postgres¶
Agregar base de datos PostgreSQL¶
Visita tu aplicación en dashboard.heroku.com y ve a la sección Add-ons.
Desde aquí entra en postgres
y verás una opción para Heroku Postgres
. Selecciónala.
Elige el plan Eco por $5/mes (consulta precios) y realiza la instalación. Heroku hará el resto.
Una vez que termines, verás que la base de datos aparece en la pestaña Resources.
Configura la base de datos¶
Ahora tenemos que indicarle a nuestra aplicación cómo acceder a la base de datos. En el directorio de nuestra aplicación, ejecutémosla.
heroku config
Esto generará una salida similar a esta
=== today-i-learned-vapor Config Vars
DATABASE_URL: postgres://cybntsgadydqzm:2d9dc7f6d964f4750da1518ad71hag2ba729cd4527d4a18c70e024b11cfa8f4b@ec2-54-221-192-231.compute-1.amazonaws.com:5432/dfr89mvoo550b4
Aquí DATABASE_URL representará nuestra base de datos postgres. NUNCA codifiques de manera estática la URL desde aquí, heroku la rotará y romperá tu aplicación. Además, es una mala práctica. En su lugar, lee la variable de entorno en tiempo de ejecución.
El complemento Heroku Postgres requiere que todas las conexiones sean cifradas. Los certificados que utilizan los servidores Postgres son internos a Heroku, por lo que se debe configurar una conexión TLS no verificada.
El siguiente fragmento muestra cómo lograr ambas cosas:
if let databaseURL = Environment.get("DATABASE_URL") {
var tlsConfig: TLSConfiguration = .makeClientConfiguration()
tlsConfig.certificateVerification = .none
let nioSSLContext = try NIOSSLContext(configuration: tlsConfig)
var postgresConfig = try SQLPostgresConfiguration(url: databaseURL)
postgresConfig.coreConfiguration.tls = .require(nioSSLContext)
app.databases.use(.postgres(configuration: postgresConfig), as: .psql)
} else {
// ...
}
No olvides hacer commit de estos cambios.
git add .
git commit -m "configured heroku database"
Revertir tu base de datos¶
Puedes revertir o ejecutar otros comandos en heroku con el comando run
.
Para revertir tu base de datos:
heroku run App -- migrate --revert --all --yes --env production
Para migrar:
heroku run App -- migrate --env production