Pour déployer une application Meteor js manuellement, rien de plus simple. Pas besoin d’installer ce fameux mup, qui fonctionne apparemment que quand ça l’arrange..
En même temps je déploie depuis un windows, mais bon ..
Les étapes top sont:
- 1. Se louer un Vps. (un ubuntu 14 LTS chez ovh par exemple)
- 2. Installer NodeJs et MongoDB sur le serveur de destination.
- 3. Créer un script de déploiement pour pas devoir le refaire à la main chaque fois.
- 4. Faire du café
Bon donc en premier lieu, on installe nodejs et mongodb sur le serveur de destination, ce qui nous donne:
// On télécharge nodejs sur leur site https://nodejs.org/fr/download/ // Moi j'ai été choper la version qui va bien avec mon besoin // Linux Binaries (x86/x64) => Je choisi la x64 LTS root@vpsxxxxxx:~# wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-x64.tar.xz // Puis je décompresse directement dans les bon dossier /usr/local (avec le paramètre -C) root@vpsxxxxxx:~# tar xvf node-v8.9.4-linux-x64.tar.xz -C /usr/local --strip-components 1 // Strip Component permet de ne pas créer de dossier de destination // et donc de seulement extraire le contenu. // Puis on test si ça fonctionne root@vpsxxxxxx:~# node -v
Si après tout cela vous obtenez un:
/usr/bin/env: ‘node’: No such file or directory
Probablement vous avez la mauvaise architecture pour ce binaire, téléchargez plutôt la version x32.
Alors à présent que passons à MongDB, et pour cela on se rend sur le site et on utilise les commandes indiqué dans la documentation!
// Importer la clef publique // ATTENTION: la clef: xxxxx est à changer par ce qui est marqué chez eux! (même l'URL d'ailleurs) root@vpsxxxxxx:~# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // Installer la source du dl et update ( à adapter selon votre distro ) root@vpsxxxxxx:~# echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list // Recharger le package manager root@vpsxxxxxx:~# apt-get update // Installer mongodb (vous pouvez évidemment changer votre version en fonction de vos besoins) root@vpsxxxxxx:~# apt-get install mongodb
Bien alors la seconde étape est réalisée!
Passons au script de déploiement, il est très personnalisé dans le sens ou chacun à une architecture précise de travail. Par exemple j’ai 3 serveurs qui sont disponible pour une application: le dev, la prod, et la pré-prod sans compter le workspace local.
Ce script est réalisé pour faire une mise en pré-prod depuis un Windows avec cygwin.
Let’s begin!
cd /cygdrive/c/Users/Angelito/workspace/app.be/ // A la racine de mon projet en local, je crée un dossier .deploy $ mkdir .deploy // et un autre build, qui servira à accueillir la tarball $ mkdir build // On rentre dans le dossier $ cd .deploy // on crée les scripts de déploiement $ touch deploy.sh $ touch up.sh
Un petit prérequis est d’installer forever sur la machine distante
root@vpsxxxxxx:~# npm install forever --global
A partir d’ici j’ouvre les fichiers avec atom et j’ajoute dans deploy.sh
#!/bin/bash # config APP_DIR=/var/www/app USER=root HOST=vpsxxxx.ovh.net # Script # On se déplace dans le projet meteor cd ../app # On compile notre app dans le dossier build meteor.bat build ../build --architecture os.linux.x86_64 --verbose # on se place dans ce dossier cd ../build # on crée le fichier de destination sur le serveur ssh -i ~/id_rsa.pem $USER@$HOST "mkdir -p $APP_DIR" # on envoie notre tarball scp -i ~/id_rsa.pem app.tar.gz $USER@$HOST:$APP_DIR # On envoie notre script d'installation du déploiement scp -i ~/id_rsa.pem ../.deploy/up.sh $USER@$HOST:$APP_DIR # on rend le script executable ssh -i ~/id_rsa.pem $USER@$HOST "chmod +x $APP_DIR/up.sh" # on Execute le script ssh -i ~/id_rsa.pem $USER@$HOST "$APP_DIR/up.sh"
Puis dans up.sh
#!/bin/bash # config APP_DIR=/var/www/app IP=xx.xxx.xxx.xxx PORT=3000 # Script # On se place dans le dossier du projet cd $APP_DIR # décompression du projet tar xvf app.tar.gz # suppression de la tarball rm app.tar.gz # On se place dans le coeur du projet cd bundle/programs/server/ # On lance l'installation des dépendances npm install # Set les différentes variables d'env export MONGO_URL="mongodb://localhost:27017/meteor" export ROOT_URL="http://$IP" export BIND_IP=$IP export PORT=$PORT # On retourne la ou tout va commencer cd $APP_DIR/bundle # On exécute forever forever start -o out.log -e err.log main.js # Et on nettoie le fichier d'installation rm ../up.sh
Voilà en gros comment rendre le déploiement plus simple. On peux se resservir un café, bien que j’en suis déjà à mon troisième.