mirror of https://github.com/vapor/docs.git
237 lines
6.5 KiB
Markdown
237 lines
6.5 KiB
Markdown
# ¿Qué es Heroku?
|
|
|
|
Heroku es una solución de alojamiento todo en uno muy popular. Puedes encontrar más información en [heroku.com](https://www.heroku.com)
|
|
|
|
## Registrarse
|
|
|
|
Necesitarás una cuenta de Heroku. Si no tienes una, regístrate aquí: [https://signup.heroku.com/](https://signup.heroku.com/)
|
|
|
|
## Instalar CLI
|
|
|
|
Asegúrate de haber instalado la herramienta CLI de Heroku.
|
|
|
|
### HomeBrew
|
|
|
|
```bash
|
|
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](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:
|
|
|
|
```bash
|
|
heroku login
|
|
```
|
|
|
|
Verifica que el correo electrónico correcto esté conectado con:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
git branch
|
|
```
|
|
|
|
El asterisco indica la rama actual.
|
|
|
|
```bash
|
|
* main
|
|
commander
|
|
other-branches
|
|
```
|
|
|
|
!!! note "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**):
|
|
|
|
```bash
|
|
git checkout main
|
|
```
|
|
|
|
#### Commit de cambios
|
|
|
|
Si este comando produce resultados, entonces tienes cambios sin commit.
|
|
|
|
```bash
|
|
git status --porcelain
|
|
```
|
|
|
|
Confirmalos con lo siguiente
|
|
|
|
```bash
|
|
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).
|
|
|
|
```bash
|
|
$ heroku git:remote -a your-apps-name-here
|
|
```
|
|
|
|
### Establecer Buildpack
|
|
|
|
Establece el buildpack para enseñar a heroku cómo tratar con vapor.
|
|
|
|
```bash
|
|
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).
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
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](https://www.heroku.com/pricing#containers)), asegúrate de tener configurado el pago en Heroku. Luego, para un solo trabajador web (worker):
|
|
|
|
```bash
|
|
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 Essential 0 por $5/mes (consulta [precios](https://www.heroku.com/pricing#data-services)) 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.
|
|
|
|
```bash
|
|
heroku config
|
|
```
|
|
|
|
Esto generará una salida similar a esta
|
|
|
|
```none
|
|
=== 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](https://devcenter.heroku.com/changelog-items/2035) 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:
|
|
|
|
```swift
|
|
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.
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
heroku run App -- migrate --revert --all --yes --env production
|
|
```
|
|
|
|
Para migrar:
|
|
|
|
```bash
|
|
heroku run App -- migrate --env production
|
|
```
|