Installation de Sharetribe sur Amazon Web Services (AWS) – Étape 1 – Configuration d’AWS

Amazon Web Services (AWS pour les intimes) est l’offre d’hébergement dans le Cloud probablement la plus utilisée et la moins onéreuse au monde. Les plus grands acteurs du monde comme AirBnB ou Netflix l’utilisent. Si OVH propose une offre alternative appelée RunAbove et hébergée en France, AWS marque encore un point en proposant une offre initiale 100% gratuite pendant un an, de quoi attirer startups et projets à faibles investissements. L’offre OVH peut néanmoins être intéressante dans le cas de projets internet sensibles. En effet, n’oublions pas que le Patriot Act permet au gouvernement américain de saisir l’ensemble des données hébergées par une entreprise américaine, y compris Google.

Dans mon cas, et pour l’installation de Sharetribe en mode test, j’ai évidemment couru vers AWS et son offre gratuite. Le tuto sera donc basé sur cet hébergement, mais duplicable sur tout serveur Unix (j’avais fait un premier test sur Mac OS qui a été très concluant). [Note : si une personne d’OVH lit ce blog, n’hésitez pas à me faire une offre de test de RunAbove, je serai ravi de faire un tuto :-)].

Dans cette première étape, nous allons nous intéresser uniquement à l’offre d’AWS et à son paramétrage. Un petit tour rapide sur la page GitHub de Sharetribe nous apprend que nous aurons besoin de Ruby, RubyGems, Bundler, Git, MySQL, Sphinx et ImageMagick pour démarrer l’installation de Sharetribe. Nous installerons donc également ces outils sur notre serveur d’AWS. [Note : Ruby n’étant plus disponible sur l’offre mutualisée d’OVH, c’est ce qui m’a amené à me tourner vers AWS. Il se peut que l’installation de Sharetribe fonctionne sur un serveur mutualisé 1&1 qui supporte Ruby, mais je n’étais pas sûr de la possibilité d’installer Sphinx ou ImageMagick sur un mutualisé 1&1. Si vous avez des retours sur ce point, je reste intéressé].

Création d’un compte AWS

La première étape passe par la création d’un compte chez AWS en se rendant sur la page d’AWS puis en suivant les instructions. Il sera nécessaire de se munir d’un numéro de carte bancaire (même si l’utilisation est gratuite la première année sur certains serveurs) et d’un numéro de téléphone valide. Après avoir créé son compte sur AWS, on se retrouve devant la console d’AWS qui permet de gérer l’ensemble des services d’AWS (voir image ci-dessous).

console AWS

Dans l’onglet en haut à droite, il est possible de choisir la zone géographique où l’on souhaite déployer ses serveurs. Étant en France, j’ai choisi une zone géographique proche, soit l’Irlande.

Nous aurons ensuite besoin de paramétrer notre serveur (onglet EC2), notre base de stockage des données (S3), notre base de données (onglet RDS) et les accès à ces ressources via l’onglet Identity & Access Management (IAM).

Paramétrages du serveur EC2

Création d’une instance

Une instance est un serveur virtuel qui permet de faire tourner le code de votre projet. Il est paramétrable en quelques clics depuis l’onglet EC2. Nous allons donc créer une instance pour héberger Sharetribe. En cliquant sur « Launch Instance » on accède au premier niveau de choix, le système d’exploitation. AWS nous propose son propre Linux (Amazon Linux AMI), RedHat, Suse, Ubuntu ou encore Windows. J’ai opté pour ma part pour la distribution Linux d’Amazon, mais vous pouvez choisir une autre version en fonction de vos habitudes. A noter que la suite du tuto sera basée sur Linux AMI.

La deuxième étape concerne la puissance du serveur. En fonction de vos besoins et du trafic, vous pouvez choisir des serveurs plus ou moins puissants. Pour ma part, dans ce tuto j’opte pour un t2.micro qui a l’avantage d’être gratuit la première année. La suite des options concerne le stockage (capacité, type), si on souhaite avoir un serveur dédié… Je vous laisse paramétrer ces options à votre choix. Le dernier onglet « 6. Configure Security Group » est un onglet très important. Il permet de définir qui pourra accéder à votre serveur. Il faudra autoriser, en accès pour tous, les ports 3306 (pour la base de données), 3000 (pour le serveur rails) et 80 (pour le HTTP). Le port 22 (SSH) pourra être paramétré pour n’autoriser les connexions que depuis votre adresse IP afin d’éviter à n’importe qui d’accéder à votre serveur en SSH.

ports AWS

On peut alors lancer la création de son instance. AWS vous demandera de créer et télécharger une clé de sécurité (à stocker sur votre PC) qui vous permettra de vous identifier lors de la connexion SSH pour plus de sécurité.

Ça y est, votre instance est prête, ne reste plus qu’à la paramétrer pour accueillir Sharetribe.

Paramétrage de l’instance EC2 pour accueillir Sharetribe

Après avoir lancé son instance EC2 et s’être connecté sur celle-ci au travers de la ligne de commande suivante (à paramétrer en remplaçant /users/AWS.pem par le nom de la clé (et les répertoires adéquats) et XX.XX.XX.XX par l’adresse IP du serveur. AWS vous donne le code quasi exact en allant dans console puis EC2 puis onglet Actions/Connect) [à noter que je suis sur un PC Unix et que si vous êtes sur Windows il faudra utiliser PuTTY),

ssh -i /users/AWS.pem ec2-user@XX.XX.XX.XX

il convient de faire une mise à jour du serveur et d’installer les paquets requis pour héberger Sharetribe. La mise à jour se fait au moyen de la commande suivante :

sudo yum install

Pour les paquets, et comme on vient de le voir, le protocole d’installation de Sharetribe mentionne qu’il faut installer Ruby, RubyGems, Bundler, Git, MySQL, Sphinx et ImageMagick. Nous aurons en fait besoin d’installer un peu plus de paquets car Sharetribe est hébergé par défaut sur Heroku et non pas sur AWS EC2. La liste est fournie ci-après :

  • RVM (pour manager les versions de Ruby et pourvoir mettre par défaut la version 2.1.2 utilisée par l’équipe de Sharetribe)
  • Ruby 2.1.2
  • RubyGems (qui vient en général par défaut avec Ruby)
  • Bundler
  • Git
  • MySQL et mysql-devel
  • Les librairies libxml2-devel, libxslt et libxslt-devel (pour Nokogiri)
  • Node.js et NPM
  • Sphinx
  • ImageMagick

Nous allons commencer par installer RVM (merci à Jose Davis Nidhin pour son tuto). Pour cela, les actions suivantes sont à entrer :

sudo -s
groupadd rvm
gpasswd -a ec2-user rvm
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel
curl -L get.rvm.io | bash -s stable
Pour la dernière commande, il pourra vous être demandé de télécharger la clé de signature. Il faudra alors rentrer la ligne de commande suivante (avec la bonne clé) et relancer le curl. Vous devez avoir un message de remerciement à la fin de l’installation de RVM. Si ce n’est pas le cas, inutile de continuer.
sudo gpg2 –keyserver hkp://keys.gnupg.net –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
Puis nous installons Ruby 2.1.2 en prenant soin de quitter le mode sudo avant (la dernière commande permet de vérifier que c’est bien ruby 2.1.2 qui est installé par défaut).
exit
rvm install 2.1.2
rvm use 2.1.2 –default
ruby -v
Normalement RubyGems est installer avec Ruby, mais pour le vérifier, vous pouvez entrer :

gem update –system

Il convient ensuite d’installer bundler en entrant :

gem install bundler

Enfin, nous pouvons installer git en entrant simplement :
sudo yum install git
Nous venons de préparer une bonne partie du serveur et allons passer à l’installation de MySQL et mysql-devel. Pour cela je vais tout simplement utiliser les commandes prévues par Amazon pour installer un serveur LAMP sur AWS. Je ne vais par contre pas installer PHP car nous n’en avons pas besoin, Sharetribe étant codé en Ruby :-).
sudo yum groupinstall -y « Web Server » « MySQL Database »
sudo yum install mysql-devel
Cette étape réussie, on peut maintenant installer les librairies libxml2-devel, libxslt et libxslt-devel avec la ligne de commande suivante :
sudo yum install libxml2-devel libxslt libxslt-devel
Ensuite nous installons Node.js et NPM. AWS n’ayant pas prévu par défaut l’installation de ces paquets, j’ai dû ruser et utiliser le dépôt EPEL (merci à Muhqu). Il convient donc de rentrer:
sudo yum install nodejs npm –enablerepo=epel
Pour installer Sphinx, nous allons également utiliser le dépôt EPEL
sudo yum install sphinx –enablerepo=epel
Enfin, nous pouvons installer ImageMagick
sudo yum install ImageMagick
Votre serveur EC2 est maintenant paramétré pour recevoir l’installation de Sharetribe. Nous allons donc nous intéresser au stockage sur S3.

Paramétrage de AWS S3

Cette opération est assez simple. Depuis l’onglet S3 de la console d’AWS, créez un nouvel espace de stokage ou bucket en cliquant sur « create bucket ». Veuillez à bien spécifier comme région la même région que votre hébergement EC2, en effet, j’ai eu des erreurs de la part d’Amazon sans cette petite astuce.
Ça y est, votre bucket est créé ! Dernier petit paramétrage, en allant dans l’onglet « properties » puis « permissions » de votre bucket, veuillez à modifier le CORS comme suit en cliquant sur « Edit CORS Configuration ».
<?xml version= »1.0″ encoding= »UTF-8″?>
<CORSConfiguration xmlns= »http://s3.amazonaws.com/doc/2006-03-01/ »>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Création de la base de données RDS

Nous allons paraméter une base de données MySQL pour accueillir Sharetribe. Pour cela, dans l’onglet RDS de la console d’AWS, créez une nouvelle base de données en cliquant sur « Launch DB Instance ». Le paramétrage se fait également rapidement.
Choisissez tout d’abord une base de données MySQL. Pensez ensuite à désactiver le « Multi-AZ Deployment » et à sélectionner une classe d’instance db.t2.micro, si vous souhaitez bénéficier d’une base de données gratuite. Personalisez ensuite nom, mot de passe… Pensez à bien les retenir !
AWS vous résume ensuite les caractéristiques de votre base de données, caractéristiques que vous devrez utiliser pour paramétrer Sharetribe.
RDS-AWS-parametres

IAM policy

Cette dernière étape concerne la politique d’accès à votre espace de stockage sur S3. En effet, pour éviter que n’importe qui ou n’importe quel programme accède à votre bucket S3, nous allons créer un utilisateur unique qui aura accès uniquement à votre S3.

Pour cela, depuis la console d’AWS, rendez-vous sur « Identity and Access Management ». Créez tout d’abord une politique d’accès en cliquant sur « Policies » puis « Create Policy » et « Create Your Own Policy ». Renseignez alors la politique suivante qui donne accès à cet utilisateur uniquement à S3. A noter que vous pouvez passer cette étape car elle est probablement déjà précodée par AWS sous le nom « AmazonS3FullAccess ».

{
« Version »: « 2012-10-17 »,
« Statement »: [
{
« Effect »: « Allow »,
« Action »: « s3:* »,
« Resource »: « * »
}
]
}

Créez ensuite un utilisateur. AWS génèrera un « Access Key ID » et une « Secret Access Key » que vous prendrez soin de télécharger. Ce sont les login et mot de passe pour que Sharetribe accède à S3.

Créez enfin un groupe (Groups) que vous nommerez à votre convenance et sur lequel, à l’étape 2, vous attacherez la politique « AmazonS3FullAccess ». Ce groupe créé, ajoutez-y l’utilisateur que vous venez de créer.

Ça y est, vous venez d’autoriser votre utilisateur à accèder à S3 !

Voilà, tout est prêt pour lancer Sharetribe. Mais nous verrons ceci dans la deuxième étape.

10 commentaires

  1. bonjour,

    malheureusement, ca ne marche plus, certains depots sont inexistant, possible de faire une mise a jour? je suis interessé par installer sharetribe, mais peu de ressources sur le web!

  2. bonjour bloqué sur sudo yum install sphinx –enablerepo=epel
    Loaded plugins: priorities, update-motd, upgrade-helper
    1004 packages excluded due to repository priority protections
    No package sphinx available.
    Error: Nothing to do

  3. Bonjour,

    j’ai le même problème que Ludovic. Est-ce que ça viendrait du plugin priorities? J’ai essayé de le supprimer, et j’ai gagné le droit de recréer une instance… ahah! Une solution pour nous?

Laisser un commentaire

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