Comment déployer des applications AdonisJS sur Heroku

Adonisjs est un framework node.js construit avec une architecture similaire à celle de laravel. Il a la même syntaxe expressive et utilise des concepts tels que les fournisseurs de services. J'ai récemment travaillé sur un projet utilisant adonisjs. Je vous expliquerais donc aujourd'hui la marche à suivre pour déployer une application adonisjs sur heroku. Je diviserais le tutoriel en deux parties principales:

  1. Créer une api / application de base
  2. Hébergement de l'application sur heroku

Créer l'API / App de base

Suivez les instructions ici https://adonisjs.com/docs/4.1/installation pour configurer un nouveau projet adonisjs.

Puisque je veux créer juste un simple service api, je lancerais la commande

adonis nouvelle mesure --api-only

Ouvrez le projet dans votre éditeur de texte / IDE préféré. J'utiliserais la base de données postgres. Entrez vos informations d'identification dans votre fichier .env, comme suit:

DB_CONNECTION = pg
DB_HOST = 127.0.0.1
DB_PORT = 5432
DB_USER = postgres
DB_PASSWORD = postgres
DB_DATABASE = étalon

J'ai mis DB_CONNECTION sur pg parce que j'utiliserais le pilote postgres. Le nom de la base de données est ici critère, l'utilisateur et mot de passe est postgres. De plus, si vous utilisez les paramètres par défaut de postgres, votre port de base de données doit être 5432.

ensuite permet de créer rapidement cette base de données. lancez ces commandes dans votre terminal:

1) psql -U postgres -W
2) créer une base de données de référence;

La première commande vous invite à entrer votre mot de passe de base de données, tandis que la seconde crée la base de données.

Installez également le paquet postgres npm

npm install pg --save

Pour simplifier les choses, nous allons simplement utiliser la migration des utilisateurs, qui vient avec une toute nouvelle installation d’adonisjs et crée un point de terminaison:

GET / users: To répertorie tous les utilisateurs

Permet également de définir une fabrique pour notre modèle utilisateur et de créer un fichier UserSeeder.js pour créer notre base de données. Ouvrez database / factory.js et entrez les informations suivantes:

const Factory = utilisation ('Factory')
Factory.blueprint ('App / Models / User', (faker) => {
  revenir {
    nom d'utilisateur: faker.nomutilisateur (),
    email: faker.email (),
    mot de passe: faker.string ({longueur: 8})
  }
 }
)

En coulisse, adonisjs utilise hasard http://chancejs.com/, et en transmet une instance à notre rappel, que nous avons appelé «simulateur» ici. Les lignes de code ci-dessus nous aident à créer une définition d’usine pour notre modèle App / Models / User. Pour créer le fichier UserSeeder.js, nous utiliserions l'utilitaire de ligne de commande adonisjs en exécutant la commande suivante:

adonis make: seed UserSeeder

Cela créerait un nouveau fichier UserSeeder.js dans notre dossier database / seed. Afin de semer réellement notre base de données en utilisant notre fabrique de modèles utilisateur, mettez à jour votre classe UserSeeder comme suit:

const Factory = utilisation ('Factory')
classe UserSeeder {
  async run () {
   wait Factory.model ('App / Models / User'). createMany (100)
  }
}
module.exports = UserSeeder

Désormais, lorsque nous exécutons notre commande seed, cela créerait 100 utilisateurs factices pour nous. Lançons donc nos migrations et semons notre base de données. (assurez-vous que vous exécutez toutes les commandes adonis à partir du répertoire de votre projet)

migration adonis: lancer
graine d'adonis

Créons maintenant le point de terminaison pour répertorier nos utilisateurs, exécutez la commande adonis pour créer un contrôleur Http ressource.

adonis make: contrôleur UserController --resource

Ensuite, nous créerions une route pour répertorier tous les utilisateurs dans notre start / routes.js et éditerions également notre méthode d’index UserController.js. Ouvrez le fichier app / Controllers / UserController.js et entrez les informations suivantes dans la méthode d’index.

const User = use ('App / Models / User')
classe UserController {
 index async ({requête, réponse}) {
  const reqData = request.all ()
  const limit = reqData.limit || 20
  const page = reqData.page || 1
 
  let constructeur = User.query ()
  utilisateurs const = attente constructeur
    .orderBy ('id', 'desc')
    .paginate (page, limite)
  response.status (200) .json ({
    message: "Tous les utilisateurs",
    données: utilisateurs
  })
 }
 ...
}

Entrez également les informations suivantes dans le fichier start / routes.js

Route.get ('/', ({request, response}) => {
  return response.status (200) .json ({
    message: 'bienvenue à notre api'
  })
})
Route.get ('/ users', 'UserController.index')

Pour voir nos utilisateurs, lancez la commande adonis serve

adonis servir

Après avoir exécuté la commande serve, ouvrez l’url http://127.0.0.1:9238/users (j’utilise le port 9238 car c’est le port par défaut de mon ordinateur) sur le postman ou le navigateur. Vous devriez voir un résultat similaire à celui ci-dessous

http://127.0.0.1:9238/users

Hébergement de l'application sur heroku

Maintenant que notre application de base est configurée, nous pouvons lancer et initialiser git et créer notre application heroku. Si vous ne disposez pas déjà de la configuration de heroku sur votre ordinateur ou si vous êtes complètement nouveau dans heroku, suivez cet article (https: / /devcenter.heroku.com/articles/heroku-cli) pour créer un compte et configurer votre ordinateur.

// initialise git
git init
git add.
git commit -m "Initialize git repo"
// crée l'application heroku et ajoute heroku à git remote
heroku créer
Sortie de ligne de commande après l'exécution de la commande “heroku create”

Maintenant, lorsque vous vous connectez à votre tableau de bord heroku, vous devriez y voir votre nouvelle application créée comme la mienne.

Application heroku nouvellement créée

Faisons une liste rapide de ce que nous devons faire pour configurer notre application heroku afin qu'elle fonctionne correctement:

  1. Créer un Procfile
  2. Installer la base de données postgres
  3. Configurez notre application pour utiliser la base de données postgres

1. Créer un fichier procfile

Toutes les applications Heroku s'exécutent dans une collection de conteneurs Linux légers appelée dynos. Créer un ‘Procfile’ à la racine de notre répertoire d’application nous permettrait de spécifier les commandes qui sont exceutées par le dynos de l’application. Vous pouvez lire sur dynos ici https://devcenter.heroku.com/articles/dynos. Aussi pour plus d'informations sur Procfile, lisez cet article https://devcenter.heroku.com/articles/procfile.

Créez ensuite un fichier de configuration à la racine du répertoire de l'application, puis entrez les informations suivantes:

version: ENV_SILENT = migration de l'as du noeud vrai: run - force
web: ENV_SILENT = true npm start

Ici, nous demandons à heroku d’exécuter une commande pour le type de processus "release" et le type de processus "web".

Un Procfile déclare ses types de processus sur des lignes individuelles, chacune au format suivant:

: 
  • est un nom alphanumérique pour votre commande, tel que Web, travailleur, travailleur urgent, horloge, etc.
  • indique la commande que chaque dyno du type de processus doit exécuter au démarrage, telle que les tâches rake: work.

Le type de processus de publication permet de spécifier la commande à exécuter pendant la phase de publication de votre application. Dans ce cas, nous demandons à Heroku d’exécuter ses migrations avec l’indicateur ‘-force’ pour la forcer, car notre application se trouve dans un environnement de production.

Le type de processus Web est utilisé pour démarrer notre application adonis js. nous utilisons la commande npm start car notre application est essentiellement une application de nœud js.

Enfin, nous définissons ENV_SILENT = true afin de supprimer les erreurs d’environnement.

2. Configurez la base de données postgres en ajoutant l'addon postgres

Accédez à l'onglet Ressources du tableau de bord heroku, recherchez «postgres» dans les addons et sélectionnez «Heroku postgres». Vous devriez voir un écran similaire à celui ci-dessous.

Sélectionnez le plan que vous voulez, nous utiliserions le plan de développement gratuit ici et cliquez sur provision.

Nous devrions maintenant avoir une nouvelle entrée dans notre variable d'environnement. Accédez à l'onglet des paramètres et cliquez sur le bouton vars «Reveal config» pour afficher les variables d'environnement.

Variables d'environnement

3. Configurez notre application pour utiliser la base de données postgres

Ouvrez config / database.js et créez deux variables en haut du fichier.

const Url = require ('url-parse')
const DATABASE_URL = new Url (Env.get ('DATABASE_URL'))

Installez url-parse, si ce n’est pas déjà fait et assurez-vous d’utiliser le drapeau - save pour mettre à jour notre fichier package.json. La constante DATABASE_URL stocke une instance d'analyse d'URL avec l'URL définie dans notre variable d'environnement DATABASE_URL. Editez la configuration postgres dans le fichier config / database.js pour ressembler à ceci:

pg: {
 client: 'pg',
 lien: {
   host: Env.get ('DB_HOST', DATABASE_URL.hostname),
   port: Env.get ('DB_PORT', DATABASE_URL.port),
   utilisateur: Env.get ('DB_USER', DATABASE_URL.username),
   password: Env.get ('DB_PASSWORD', DATABASE_URL.password),
   base de données: Env.get ('DB_DATABASE', DATABASE_URL.pathname.substr (1))
 }
}

Ici, nous définissons les valeurs par défaut pour l'objet de connexion avec les valeurs de notre constante DATABASE_URL. Ils seraient utilisés lorsque nous pousserions le projet vers heroku car DB_HOST, DB_PORT, DB_USER, DB_PASSWORD et DB_DATABASE ne seraient pas disponibles.

Ensuite, engagez votre travail et poussez-le vers heroku

git add.
git commit -m "Modify db config for heroku postgres"
git push maître heroku

Ok, si vous avez suivi, vous devriez obtenir l'erreur suivante

Erreur lors de la poussée vers heroku

Donc cette erreur s’est produite parce que, dans notre fichier config / database.js, nous n’avons pas de valeur pour notre DB_CONNECTION dans notre configuration postgres et que adonis js retombe sur la valeur par défaut de sqlite que nous n’avons pas installée. Alors allez dans l’onglet Paramètres du tableau de bord de heroku et réglez DB_CONNECTION sur ‘pg’.

Ensuite, engagez votre travail et appuyez sur heroku.

git add.
git commit -m "définir DB_CONNECTION par défaut à pg"
git push maître heroku

Pour voir l'application, lancez

heroku ouvert

Vérifiez que notre application fonctionne en vérifiant GET / et GET / users. Vous devriez avoir une sortie similaire.

GET /GET / utilisateurs

Notez dans notre réponse GET / users que les données sont vides. Afin d'ensemencer nos utilisateurs, exécutez la commande:

Heroku exécuter ENV_SILENT = vrai noeud ace seed --force

Alors maintenant, lorsque nous visitons GET / users, nous devrions voir nos utilisateurs:

GET / utilisateurs

Et c'est tout, laissez-moi savoir vos pensées et j'espère que ça vous plaira :). Rendez-vous dans le prochain post.