Publié par
Il y a 2 années · 7 minutes · Mobile

Créons notre premier Web Server Swift avec IBM BlueMix

Logo swift apple
Comme annoncé dans une de nos récentes revues de presse, Swift est désormais un projet Open Source et peut être compilé facilement sur des plates-formes Linux et Mac OS X i386 (et bientôt ARM).

Le but de cet article est de créer et exécuter simplement un Web Server écrit en Swift et de le déployer efficacement sur BlueMix, la solution PaaS de IBM.

Introduction

IBM BlueMix, lancé en 2014, fournit diverses solutions PaaS et BaaS (notamment Cloud Foundry Apps, Data & Analytics et Containers), avec des prix très intéressants et notamment un créneau gratuit plus que suffisant pour un usage modéré du service.

Dans la suite de cet article, nous allons opter pour une solution basée sur Cloud Foundry, cela nous permettant de simplifier les étapes de mise en place du service.

Cloud Foundry est une solution PaaS Open Source développée par VMWare et actuellement maintenue par Pivotal Software, qui permet le déploiement simplifié de serveurs et supporté par plusieurs fournisseurs : notre serveur pourra être déployé sans aucun changement sur BlueMix, sur Heroku ou encore Microsoft Azure.

Dans la suite de l’article nous allons dans un premier temps télécharger tout ce qu’il faut et créer notre premier route (étapes 0 à 2) puis déployer notre Web Server (étapes 3 et 4). Si l’on souhaite directement se concentrer sur le déploiement, on pourra télécharger le zip contenant le code complet du projet, disponible à l’adresse suivante : https://github.com/xebia-france/blog-XebiaSwiftServer/releases/tag/0.1.

Les étapes qui suivent ont été testées sous Mac OS X. Pour la mise en place du projet sous Linux, les dépendances (celle mentionnées dans l’étape 0, notamment) peuvent varier.

Étape 0 : installation de Swift – Development Snapshot

Afin de pouvoir compiler le code de notre Web Server en local, nous avons besoin de Development Snapshot de Swift. À date, la dernière version distribuée par Apple est celle du 1er mars 2016, disponible à l’URL suivante :

Xcode Swift Development Snapshot

Nous vous invitons à bien vouloir vérifier la version à télécharger : il faudra bien s’assurer d’avoir récupéré le binaire Xcode Swift Development Snapshot car la distribution Swift 2.2 Release Snapshot ne vous permettra pas de compiler notre solution.

Pour l’installation de Development Snapshot, nous allons suivre les étapes décrites sur le site swift.org et disponibles dans la page de Download (https://swift.org/download/#installation).

Dans le cadre de notre tutoriel, l’étape Code Signing on OS X n’est pas nécessaire.

Pour vérifier l’installation de Development Snapshot de Swift, nous pouvons saisir la commande

swift --version

à l’intérieur de la console du terminal.

Le résultat devra être comme dans l’image qui suit.
apple swift

Étape 1 : création du projet

Pour commencer, nous allons télécharger le gabarit du projet disponible à l’URL suivante : github.com/xebia-france/blog-XebiaSwiftServer/releases/tag/0.0.2.

Le gabarit se compose des fichiers suivants :

manifest.yml

Il contient les informations nécessaires au déploiement via Cloud Foundry.

applications:
- path: .
  memory: 128M
  instances: 1
  domain: mybluemix.net
  name: XebiaSwiftServer
  host: xebiaswiftserver
  disk_quota: 1024M
  buildpack: https://github.com/cloudfoundry-community/swift-buildpack.git

Le buildpack permet de préconfigurer l’environnement avec les dépendances système nécessaires à la correcte compilation d’un projet déployé via Cloud Foundry.

La communauté a produit un buildpack Swift qui permet d’installer automatiquement Development Snapshot et Clang au moment du déploiement de notre projet via Cloud Foundry. Cela simplifie énormément le processus de déploiement et nous permet de nous concentrer presque uniquement sur le code source à écrire.

.swift-version

Le fichier .swift-version sert à préciser la version Swift nécessaire à exécuter notre application. Cette variable est strictement liée aux distributions de Swift supportées par le buildpack. Autrement dit, si le buildpack ne supporte pas la version de Swift déclarée ici, le déploiement échouera.

Dans notre cas, la version à déclarer est :

swift-DEVELOPMENT-SNAPSHOT-2016-03-01-a

Fini avec l’infra, nous pouvons commencer à coder.

Étape 2 : du code, finalement !

Package.swift

En première instance, nous allons créer le fichier Package.swift qui déclare les dépendances de notre projet.

La mise en place de Package.swift fait partie des spécifications introduites par Swift Package Manager, le gestionnaire de dépendances de Swift publié par Apple en novembre dernier.

À l’intérieur de Package.swift, nous allons écrire les lignes suivantes :

import PackageDescription
let package = Package(
  name: "XebiaSwiftServer",
  dependencies: [
    .Package(url: "https://github.com/kylef/Curassow.git", majorVersion: 0, minor: 4),
  ]
)

Curassow, la dépendance que nous utilisons, est le cœur de notre projet car il nous permet de mettre en place les routes de notre serveur Web.

Il existe déjà de nombreuses autres solutions serveurs, les plus connues étant Zewo et Kitura, cette dernière étant éditée par IBM même. Nous n’utiliserons pas ces solutions car elles nécessitent un buildpack contenant une version pré-compilée de libdispatch qui n’est pas disponible à date.

main.swift

La prochaine étape consiste en l’écriture du corps de notre Web Server.
Créons un fichier main.swift à l’interieur d’un dossier Sources et ajoutons les lignes suivantes :

import Curassow
import Inquiline
serve { request in
  return Response(.Ok, contentType: "text/plain", body: "Hello World")
}

Compilation

Une fois écrit le code, nous allons le compiler :

cd my folder
swift build

Le binaire est maintenant disponible dans le dossier .build et peut être exécuté avec la commande

.build/debug/XebiaSwiftServer

Notre dépendance Curassow permet de spécifier des paramètres additionnels qui seront passés à notre serveur. Par exemple :

.build/debug/XebiaSwiftServer --bind [ADRESSE_IP]:[PORT]

Procfile

Le Procfile est le fichier qui déclare quel processus sera lancé à la fin du déploiement. Dans notre cas, le processus en objet est XebiaSwiftServer, et les paramètres associés concernent l’adresse et le port sur lesquels le serveur sera en écoute.

Les paramètres du Procfile sont utilisés pour lancer le serveur sur le port $PORT, qui est une variable d’environnement de l’instance qui sera déployée via Cloud Foundry.

Le Procfile que nous aurons obtenu contiendra donc la ligne suivante :

web: XebiaSwiftServer --bind 0.0.0.0:$PORT

Étape 3 : création du compte BlueMix et installation des outils Cloud Foundry

Nous allons créer notre compte sur BlueMix à la page https://console.ng.bluemix.net/. Ensuite, nous devons télécharger l’outillage en ligne de commande de IBM qui nous permettra de nous authentifier depuis le terminal. L’archive auto-installable est disponible à l’adresse http://clis.ng.bluemix.net/ui/home.html.

Pour créer notre instance Cloud Foundry nous avons besoin d’installer les outils en ligne de commande dédiés à l’adresse suivante : https://github.com/cloudfoundry/cli/releases. Une fois installés, nous pourrons exécuter la commande

cf help

afin de bien vérifier l’installation.

Le résultat devra être similaire à l’image qui suit :

Bluemix, outils Cloud Foundery

Étape 4 : déploiement

Pour terminer notre article, il ne nous reste plus qu’à déployer notre serveur sur IBM BlueMix.

Pour ce faire, nous allons utiliser les commandes suivantes :

# Effectue le login sur BlueMix
bluemix login

# Crée un space, c-a-d, un espace de travail (qui peut contenir plusieurs instances / projets)
bluemix cf create-space "<MON_ESPACE>"
bluemix cf target -o "<ID_UTILISATEUR>" -s "<MON_ESPACE>"

# Accède au repertoire contenant notre code
cd <MON_PROJET>

# Déploye l'application Cloud Foundry sur BlueMix
bluemix cf push

L’opération peut prendre jusqu’à 5 minutes et devrait se conclure avec un message de succès.

Nous pouvons donc ouvrir notre navigateur et insérer l’adresse de notre host, par exemple

http://xebiaswiftserver.mybluemix.net

xebia, swiftserver, my bluemix

Conclusion

Cet article n’est que le point de départ pour nos prochaines aventures : nous avons en effet appris comment nous servir de Swift Package Manager, des versions de développement de Swift et d’un système de déploiement automatisé.

De nouveaux packages et de nouveaux services dédiés à l’écosystème Swift voient la lumière tous les jours et nous sommes vraiment curieux de découvrir ce que l’on pourra construire avec ces technologies.

Simone Civetta
Simone est responsable technique des équipes mobilités chez Xebia. Il est également formateur au sein de Xebia Training .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *