Installation de Sharetribe sur Amazon Web Services (AWS) – Étape 2 – Paramétrage de Sharetribe

La première étape de l’installation de Sharetribe nous a permis de préparer l’ensemble des éléments pour accueillir Sharetribe chez Amazon Web Services (AWS), soit le serveur (EC2), la base de données MySQL (RDS) et le système de stockage des données (S3). Il convient maintenant de lancer à proprement parler l’installation de Sharetribe sur le serveur.

Récupération du code source

Après vous êtes connecté à votre serveur EC2, nous allons récupérer le code source de Sharetribe sur GitHub en lançant la commande :

git clone git://github.com/sharetribe/sharetribe.git

L’ensemble des fichiers Sharetribe se trouve maintenant sur votre serveur. Nous allons pouvoir commencer l’installation.

Installation de Sharetribe sur AWS

Paramétrage de la base de données

La première étape consiste à indiquer à Sharetribe où se trouve la base de données RDS MySQL que nous avons créée. Pour cela, il faut paramétrer le fichier « database.yml ».

Allez dans le répertoire Sharetribe et créez d’abord une copie du fichier « database.example.yml » pour entrer nos propres informations de base de données.

cd sharetribe
cp config/database.example.yml config/database.yml

Pour éditer le fichier de base de données, nous utilisons l’éditeur de texte Nano

nano config/database.yml

Nous allons uniquement renseigner les lignes relatives au mode « production » qui se trouvent à la fin du fichier, en renseignant les informations suivantes :

production:
adapter: mysql2
database: le_nom_de_votre_base_de_données (DB Name)
encoding: utf8
username: le_nom_d_utilisateur_créé_pour_la_base_RDS (Username)
password: le_mot_de_passe_créé_pour_la_base_RDS
host: XXXXXXXX.YYYYYYY.eu-west-1.rds.amazonaws.com (Endpoint sans le :3306)

A noter que la partie host correspond à la partie Endpoint présente dans la console AWS, comme sur la capture d’écran ci-dessous.

Quittez Nano en tapant Ctrl + X et sauvegardez. Les références à la base de données sont maintenant complètes.

Paramétrage du stockage des données (Assets)

De la même manière que nous venons d’indiquer à Sharetribe où trouver la base de données, il faut maintenant lui indiquer où trouver l’espace de stockage S3. Ces paramètres se renseignent dans le fichier « config.yml ». Pour cela, éditons le fichier « config.ym » en copiant la base « config.defaults.yml ».

cp config.defaults.yml config.yml
nano config/config.yml

Nous allons devoir modifier un peu le code de ce fichier pour lui permettre de fonctionner. Commencez par compléter les lignes suivantes avec les informations de votre bucket S3 et les codes utilisateurs créés avec IAM :

# Default bucket
s3_bucket_name: nom_de_votre_bucket_sur_S3

# Bucket for files users upload directly to S3. You can add an expiration policy to these files
s3_upload_bucket_name: nom_de_votre_bucket_sur_S3

# AWS keys
aws_access_key_id: Access_Key_ID_créé_avec_IAM
aws_secret_access_key: Secret_Access_Key_créé_avec_IAM

Ajoutez ensuite les lignes de code suivantes (il s’agit d’une astuce pour faire fonctionner correctement S3) :

FOG_DIRECTORY: nom_de_votre_bucket_sur_S3

FOG_REGION: eu-west-1 (ou une autre région si votre serveur est hébergé sur une autre région)

FOG_PROVIDER: AWS

ASSET_SYNC_GZIP_COMPRESSION: true (si vous souhaitez compressez les fichiers sur le serveur)

Le paramétrage de S3 est terminé mais ne fermez pas encore le fichier. Nous allons modifier d’autres paramètres.

Paramétrage des options de Sharetribe

Toujours dans le fichier « config.yml », nous avons accès à d’autres options, comme la langue, les adresses mail d’envoi des informations, le nom de domaine. N’hésitez pas à paramétrer ces données. Vous pourrez ensuite enregistrer et quitter le fichier.

Modification du fichier « asset_sync.rb » pour S3

Dans le fichier asset_sync.rb, nous allons effectuer un petit ajout de code pour définir la région de votre bucket (paramétrée dans « config.yml »). Ouvrer le fichier au moyen de la commande suivante :

nano config/initializers/asset_sync.rb

Et ajoutez la ligne « fog_region = app_config.FOG_REGION », comme dans l’exemple ci-dessous.

if defined?(AssetSync)
AssetSync.configure do |config|
app_config = Maybe(APP_CONFIG)
aws_access_key_id     = app_config.aws_access_key_id
aws_secret_access_key = app_config.aws_secret_access_key
fog_directory         = app_config.FOG_DIRECTORY
fog_provider          = app_config.FOG_PROVIDER
fog_region            = app_config.FOG_REGION

Un peu plus bas dans le fichier, ajoutez « config.fog_region = fog_region.get », comme dans l’exemple ci-dessous.

if enabled
config.fog_provider          = fog_provider.get
config.fog_directory         = fog_directory.get
config.aws_access_key_id     = aws_access_key_id.get
config.aws_secret_access_key = aws_secret_access_key.get
config.fog_region            = fog_region.get
end

Vous pouvez sauvegarder le fichier et quitter.

Modification du fichier « production.rb » pour Sphinx

Il convient d’effectuer une petite manipulation pour Sphinx en modifiant le fichier « production.rb ». Pour cela, ouvrez le fichier « production.rb »

nano config/environments/production.rb

Puis dans la ligne « config.assets.compile = false », remplacez « false » par « true » ce qui donne :

config.assets.compile = true

Lancement de l’installation

La première partie consiste à installer les gems nécessaires en entrant, depuis le dossier Sharetribe :

bundle install

Ensuite, il convient de charger la structure de la base de données, dans la base que nous avons créée :

rake RAILS_ENV=production db:schema:load

Ensuite on lance l’index de Sphinx :

rake RAILS_ENV=production ts:index

Puis on démarre Sphinx Daemon :

rake RAILS_ENV=production ts:start

Enfin on peut précompiler, invoquer le « job worker » et démarrer le serveur avec les commandes suivantes :

rake assets:precompile

rake RAILS_ENV=production jobs:work

rails server -e production

Bravo ! Sharetribe tourne sur votre serveur AWS ! Vous pouvez vous connecter via l’adresse ip suivante à votre nouvelle marketplace :

http://XX.XX.XX.XX:3000

où XX.XX.XX.XX est l’adresse IP de votre EC2, disponible dan la console d’AWS.

Initialisation de Sharetribe

Une fois connecté à votre marketplace, via votre navigateur internet, Sharetribe vous demandera quelques informations puis vous enverra un mail pour confirmer votre adresse.

initialisation de Sharetribe

Vous pourrez accéder ainsi à votre marketplace et vous concentrer sur le business :-).

Notes

En cas de besoin, n’hésitez pas à me contacter. Si vous souhaitez également que j’effectue l’installation de Sharetribe sur l’un de vos serveurs, je suis à votre disposition.

39 commentaires

  1. Excellente série d’articles sur l’installation de Sharetribe, très claire. Merci pour votre travail et partage !

    Nous faisons au mieux pour rendre l’installation de Sharetribe plus simple, étape après étape. Il faut encore, aujourd’hui, beaucoup d’étapes techniques mais l’objectif à long terme est de la rendre aussi simple que celle de WordPress par exemple.

    J’en profite pour partager le lien vers le forum (principalement en anglais) de discussion autour de la version open-source (l’équipe Sharetribe y intervient également parfois) : https://www.sharetribe.com/community/
    C’est un bon endroit où échanger avec d’autres personnes qui manipulent / adaptent / installent /font évoluer leur propre instance sur leurs propres serveurs.

  2. Merci beaucoup pour ce tuto très utile ! As-tu réussi a faire fonctionner les paiements ? D’après la documentation de Sharetribe, Paypal ne fonctionne pas en open source seul Braintree fonctionne mais je n’ai pas encore essaye de le paramétrer sur mon instance.

    1. Bonjour Yohan,
      Oui en effet, PayPal est désactivé sur la version OpenSource car Sharetribe utilise dans son mode de paiement un fonctionnement PayPal particulier qui demande des autorisations de la part de PayPal (il faut devenir partenaire PayPal, monter un dossier, apporter des preuves financières…). Or, comme quasiment personne n’a ce type d’agrément, ils ont préféré le désactiver.
      Concernant Braintree, tu ne pourras également pas t’en servir car Braintree MarketPlace n’est disponible pour le moment que pour des entreprises américaines (sauf si ton business est là-bas). J’ai contacté Braintree mais ils ne savent pas encore quand ils ouvriront l’Europe sur la partie MarketPlace, et cela n’est pas prévu à court terme.
      La dernière solution reste à développer et intégrer toi même un moyen de paiement comme PayPal Adaptative. Il faudrait idéalement lancer une branche de Sharetribe sur Github pour lancer ce projet. Si tu codes en Rails, on peut essayer de lancer un projet.
      Bon courage !

  3. Salut Christophe,

    Il me semble avoir suivi toutes les étapes indiquées ci-dessus mais je bloque a l’étape d’initialisation de Sharetribe (oui si proche du but :)). Lorsque j’entre http://XX.XX.XX.XX:3000 en utilisant mon adresse IP, j’obtiens un connexion time out, rien ne se passe.

    Qu’ais je loupe ?

    Merci beaucoup !

    1. Bonjour Yohan,
      Avez vous bien lancé « rake RAILS_ENV=production jobs:work » sur une première fenêtre sur laquelle vous voyez « Starting job worker » puis ensuite le processus reste actif, puis ouvert une seconde fenêtre par exemple pour lancer « rails server -e production » (et ainsi ne pas arrêter le job worker) ?

      1. Bonjour Christophe,

        J’ai un petit vernis technique disons mais je ne suis pas développeur.
        En revanche, j’aimerais pouvoir hoster ma plateforme Sharetribe via AWS.

        Je pensais Braintree disponible également en Europe 🙁
        Je me demande s’il faut juste un compte bancaire aux US ou s’il faut vraiment des statuts américains, pour être considéré comme étant ‘US-based’…

        Cette histoire de paiements m’embête un peu. C’est une contrainte énorme. Quel intérêt d’utiliser la plateforme si on ne peut pas processer de paiements de quelque manière que ce soit…

        1. Bonjour Yohan,
          Il faut avoir un compte aux US, par contre pour les statuts de l’entreprise, je ne sais pas, mais ça m’étonnerait que le gouvernement américain autorise l’ouverture d’un compte US sans être soit de nationalité américaine soit résidant aux US.
          Sharetribe est conscient de cette contrainte qu’il prévoit d’améliorer à terme, mais ça va prendre un peu de temps. Pour le moment, en général ceux qui hébergent leur propre plateforme s’y connaissent en technique (ou font appel à un prestataire) et intègrent leur propre moyen de paiement (MangoPay, PayPal…). Ils ont avant pris quelques mois de Sharetribe payant pour tester leur business et peuvent donc investir dans la techno plus tranquillement.
          L’autre solution étant de ne pas offrir le paiement sur la plateforme (comme leboncoin.fr) et dans ce cas, Sharetribe OpenSource fonctionne très bien.
          Si tu veux vraiment le paiement sans trop dépenser ou sans coder, il faut te tourner vers d’autres solutions comme MultiMerch (il en existe également d’autres sur WordPress, Prestashop…, mais je n’ai pas eu le temps de faire de comparatifs pour le moment). Néanmoins, même pour MultiMerch, il te faudra dépenser un peu pour acheter le module Adaptative Payement.
          Bon courage !

      2. Bonjour Christophe,

        En fait je ne sais pas si cela était le cas hier, mais j’obtiens un message d’erreur lorsque je lance cette commande.

        rake RAILS_ENV=production jobs:work
        rake aborted!
        Psych::SyntaxError: (/home/ec2-user/sharetribe//config/config.yml): did not find expected key while parsing a block mapping at line 1 column 1

        Quelque chose qui ne va pas avec mon fichier config.yml?

        Merci beaucoup !

        1. En effet, il doit y avoir un pb dans le fichier config.yml, probablement de syntaxe. N’hésitez pas à revérifier que tout est bien écrit et sinon à supprimer et refaire le fichier avec les modifications mentionnées.

          1. Salut Christophe,

            Apres avoir pas mal tâtonné, j’ai fini par avoir ma plateforme ‘up and running’ 🙂 Merci beaucoup pour ton aide.

            Quelques questions de n00b :

            1/ Je comprends qu’il faut lancer le job worker ainsi que le server Rails dans une fenêtre séparée. N’étant absolument pas admin Unix (ni admin de quoique ce soit d’ailleurs :)), pourrais-tu stp m’expliquer comment automatiser ces taches (cad avoir ce job up & running tout le temps pour essentiellement avoir la plateforme disponible tout le temps)?

            2/ Il semblerait que Sharetribe crée un sous-domaine une fois la plateforme paramétrée et créée (ex: http://nomdelacommunaute.monIP.com). Y-a-t-il possibilité de désactiver ou de changer cette option (je pense que cela se passe dans le fichier config)? Le soucis que cela me pose est que tous les mails automatiques envoyés par la plateforme (ex: mail de bienvenu pour un nouvel utilisateur) contiennent des liens utilisant ce sous-domaine. Or, tous ces liens ne fonctionnent pas. En revanche, si je retire le sous-domaine et utilise mon IP publique aucun problème (je ne sais pas si c’est très clair…).
            Par exemple, une fois mon compte admin créé, je reçois le mail de confirmation avec le lien suivant : Le panneau d’administration de votre place de marché : http://nomdelacommunaute.MonIP:3000/admin. Ce lien ne fonctionne pas. Par contre, MonIP:3000/admin lui fonctionne.

            Merci !

  4. Hi

    I’m installed share tribe with the instructions above and it works vey well.
    Now after 1 month I’m getting :Your Sharetribe trial has expired. » message.

    is’nt this suppose to be open source with not expiry ?

    Thanks

    kurt

    1. Hi Kurt,

      I had the same pb :-). I suppose they do not deleted this message and you have to deleted it by modifying the source code. I didn’t add enough time to check it but it is on my TODO list. If you have a solution, feel free to post it!

  5. Hello Christophe,
    J’ai suivi à lettre toutes les étapes de ton tuto et j’ai bien lancé dans 2 fenêtres différentes le worker et le server, mais lorsque je vais sur http://XX.XX.XX.XX:3000 rien du tout 😮 (ERR_CONNECTION_TIMED_OUT).
    Aurais-tu une idée de ce que j’ai pu rater ? 🙂

    1. Bonjour Math,
      Il semble que vous n’arrivez pas à vous connecter au serveur. Avez-vous bien remplacé les XX.XX.XX.XX par la bonne adresse IP de votre serveur (pour rappel, vous la trouvez sur votre console AWS dans votre instance EC2).
      Sinon, c’est peut-être un problème de pare-feu (mais semble étrange), vous pouvez néanmoins vérifier que le pare-feu ne bloque par la connexion à cette adresse IP sur le port 3000.
      Enfin, la dernière idée qui me vient en tête est un mauvais paramétrage des droits sur la console EC2 et le port 3000 n’est pas ouvert. N’hésitez pas à revoir dans ce cas l’étape 1, chapitre « Création d’une instance ».
      Bon courage !

      1. Merci pour ta réponse Christophe,
        C’était effectivement un problème au niveau des droits sur la console EC2 merci beaucoup ! 🙂
        J’ai maintenant un site où j’arrive sur la page de création d’une « communauté ». Mais visiblement une fois que je créé ce premier commerce, impossible d’accéder au sous domaine qui le contient.
        J’ai la configuration suivante concernant le domaine :
        – domain: « ec2-52-19-82-115.eu-west-1.compute.amazonaws.com:3000 »
        Doit-on faire une autre manipulation ?
        Merci d’avance ! 🙂

  6. Hi Christopher,

    Thanks for the detail article. Found it very much useful.

    I have completed all the process and have setup the marketplace. However, there seems to be some problem with the user interface.

    I can only see text. No CSS are applied to it. It is very plain HTML.

    Can you guide on what went missing or is there any permission issue in AWS ?

    1. Hi Vishnu,
      I also had this problem once. It comes from the S3 servers (if you use AWS) where the CSS are located. Double check if the S3 is well parameterized and if files were well copied to the server. If you don’t use S3, check if files were well copied to your server.

  7. I had checked my S3 bucket. It is empty.

    I had followed all your instructions carefully while setting up in AWS.

    Below are the parameters set in config file :

    # Default bucket
    s3_bucket_name: ABC

    # Bucket for files users upload directly to S3. You can add an expiration policy to these files.
    s3_upload_bucket_name: ABC

    # AWS keys
    aws_access_key_id: XXXXXXXXXXXXX
    aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXX

    FOG_DIRECTORY: ABC
    FOG_REGION: ap-southeast-1a
    FOG_PROVIDER: AWS
    ASSET_SYNC_GZIP_COMPRESSION: true

    What should I check on more or test to ensure that S3 servers are in sync and how do I ensure that the files get again copied once the installation has been completed ?

    Thanks in advance for guiding 🙂

  8. Ok.

    While all the steps mentioned in your article has been followed properly, I suspect the permission issue with the owner of the S3 bucket.

    I had created a S3 bucket who owner was someone by default and edited its CORS file too. But while creating user in the IAM and attaching policy I had created an other user whose AWS secret id and key was being used.

    I assume I have to grant permission to access or change the aws secret and key of owner in the config file.

    So now if I make the changes, how does the file will get on to the S3 server. Do I have to start with fresh installation of Sharetribe or is there any other solution ?

  9. Bonjour Christophe,

    Tout d’abord merci pour le tutoriel, très utile.
    Petite question bête, si on veut faire des modifications dans config.yml par la suite, sais-tu à partir de quelle étape je devrais relancer les commandes? Mois je relance uniquement:

    rake RAILS_ENV=production jobs:work
    rails server -e production

    Est-ce que c’est suffisant ou je devrais aussi re-recompiler ou autres?

    Merci!

    1. Bonjour Cédric,
      « rake assets:precompile » permet de compresser les assets (c’est-à-dire les fichiers CSS, JS…) pour accélérer leur téléchargement et donc diminuer le temps d’attente pour afficher la page demandée. Je ne pense donc pas que le fichier config.yml soit concerné, mais j’avoue ne jamais avoir regardé plus en détails. N’hésitez pas à faire une grosse modification sur le fichier config.yml et à démarrer le serveur sans précompiler les assets pour voir ce qui se passe. Si rien de change et que vos modifications ne sont pas prises en compte, c’est qu’il faut précomplier :-). Je suis intéressé par votre retour.

      1. Bonjour Christophe,

        Et désolé pour le retour tardif 😉
        J’ai fait plusieurs tests et j’en suis arrivé à la conclusion que je n’ai pas besoin de précompiler à chaque fois. Simplement relancer le job worker et le serveur Web.

        Par contre, j’ai une autre question, j’ai créé un nom de domaine pour y héberger mon instance Sharetribe (j’utilise Amazon Route 53). Dans la configuration de mon bucket S3, dans l’onglet « Static Website Hosting », j’ai mis un lien vers un fichier index.html bidon que j’ai uploadé à la racine de mon S3 et je peux accéder à mon bucket via le nom de domaine. Sauf que le but final est d’accéder à mon instance Sharetribe. Mais je ne sais pas quelle est le document « root » pour Sharetribe. Dans la bucket, sous « assets », il y a juste des fichiers css, js, gif, etc. Est-ce que tu sais par hasard quelle est la page source de Sharetribe? Je suis nouveau en Ruby sur Rails alors c’est peut-être moi qui ai du mal à comprendre l’architecture exacte. Si je comprends bien le S3 contient les assets seulement mais ou est le code source et ou sont les pages?

        Merci!

        1. Bonjour Cédric,
          En effet, le S3 ne contient que les assets (photos, CSS…). Le code est sur le serveur EC2 et est interprété par ton serveur Rails pour fournir les pages demandées. Il faut donc faire pointer ton nom de domaine vers ton serveur EC2. C’est ce que tu fais en entrant manuellement http://XX.XX.XX.XX:3000 où XX.XX.XX.XX est l’adresse IP de ton EC2.
          Si tu utilises Route 53, normalement il faut paramétrer ton nom de domaine vers Route 53 qui se chargera de faire le lien vers ton serveur EC2.

          1. Merci Christophe. Oui j’avais trouvé la solution depuis que j’avais écrit. Juste pour l’information, j’utilise nginx comme serveur Web et je le fais pointer vers le répertoire sharetribe/app pour que ça fonctionne.

  10. Bonjour Christophe,

    Merci beaucoup pour ce tutorial.
    De mon côté, je bloque à rake RAILS_ENV=production db:schema:load. On me dit:
    -bash: rake: command not found

    J’ai cherché sur différents forums, mais je ne suis pas sure de toujours bien comprendre l’arborescence de l’application et des « gems » dans son environnement RoR.

    Salutations,
    Anne-Claire

      1. Merci Christophe pour ton aide.

        Après de multiples trials&errors (mais c’est comme cela qu’on apprend), j’ai pu lancer l’application. En revanche, j’ai toujours des difficultés avec l’adresse http: effectivement, la plateforme est lancée sous « nom_plateforme.public_DNS.com », mais en fait elle n’est accessible que sous « public_DNS.com ». J’ai cru lire dans le forum sharetribe qu’il y avait effectivement quelques ajustements à faire de ce côté là, mais je coince toujours.

        En admettant que l’on puisse avoir les credentials Paypal, n’y a-t-il que config.yml (partie paypal) à modifier ou faut-il aller plus loin dans le code?

        Salutations,
        Anne-Claire

        1. Oui effectivement, il y a quelques ajustements à réaliser pour le DNS. Il faudrait que je fasse un article dessus. Je mets ça dans ma TODO list pour assez rapidement.
          Pour PayPal, j’avoue ne pas du tout avoir creusé la question mais d’après un commentaire de Sharetribe, il semble en effet qu’il n’y ait qu’à modifier le config.yml.

  11. Bonjour à tous, un grand merci à Christophe pour ce site très intéressant .
    J’ai fait installer la version Opensource sur un serveur dédié de chez OVH j’ai effectué l’initialisation tout marche sauf la possibilité de charger des images je ne peux pas modifier le logo l’image centrale de la Home, et les photos des profils ?
    1) Est ce que quelqu’un a dèjà eu ce genre de problèmes d’upload chez AWS ?
    2) Est ce que quelqu’un qui a installé une version chez un autre hébergeur que AWS à rencontré ces mêmes problèmes ?
    3) Avez vous une idée pour résoudre ce problème d’Upload d’images ?

    Je trouve désolant pour un logiciel Opens source qu’il n’y ai pas de Forum actif , le lien que vous donnez ne marche plus, l’éditeur a tout désactivé.
    https://www.flowdock.com/invitations4f606b0784e5758bfdb25c30515df47cff28f7d5-main

    PS je suis à la recherche d’une ressource qui est dèjà arrivée à customiser sharetribe merci.

    1. Bonjour Eric,
      Je pense qu’il s’agit d’une erreur de paramétrage des « assets » qui par défaut sont définis pour être hébergés sur un serveur de type S3 chez AWS. Un petit paramétrage des assets devrait régler le problème.
      Pour une ressource, n’hésitez pas à me contacter via la page contact.

  12. Bonjour tout le monde,
    Le tuto est super bien fait mais ce serait trop facile si ça fonctionnait pour tout le monde du premier coup ;).

    Moi mon soucis arrive lorsque que je lance:

    rake RAILS_ENV=production db:schema:load

    You specified server rendering JS file: app/assets/webpack/server-bundle.js, but it cannot be read. You may set the server_bundle_js_file in your configuration to be «  » to avoid this warning
    You specified server rendering JS file: app/assets/webpack/server-bundle.js, but it cannot be read. You may set the server_bundle_js_file in your configuration to be «  » to avoid this warning
    /home/ec2-user/sharetribe/db/schema.rb doesn’t exist yet. Run `rake db:migrate` to create it, then try again. If you do not intend to use a database, you should instead alter /home/ec2-user/sharetribe/config/application.rb to limit the frameworks that will be loaded.

    J’ai également essayé ‘rake db:migrate’:
    rake aborted!
    Mysql2::Error: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

    Quelqu’un peut m’aider sur ce ptit soucis svp? merci beaucoup

Laisser un commentaire

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