elefan-grenoble / gestion-compte

Gestion des membres et du bénévolat à l'éléfàn, super marché coopératif Grenoble
https://lelefan.org
GNU General Public License v3.0
45 stars 42 forks source link

Mise en production / installation sur serveur #147

Closed vincentrou closed 4 years ago

vincentrou commented 6 years ago

J'arrive bien à faire fonctionner l'application sur ordinateur sur ubuntu en local.

Par contre je n'ai pas compris comment le mettre en prod sur un serveur en IP public. Quand je vais sur notre serveur (vps ubuntu 16) avec l'ip public et le port 8000, il n'y a rien. Il y a quelque chose de plus à faire pour ouvrir le site comme ici https://membres.lelefan.org/ ?

Nous souhaitons utiliser l'application pour notre épicerie de la coopdesdomes de Clermont.

Merci d'avance la réponse et pour se bel outil.

Arakmar commented 6 years ago

Par défaut, je crois que le mini serveur HTTP de php écoute sur l'adresse 127.0.0.1:8000 du coup c'est accessible uniquement en local. Tu peux le lancer de cette façon pour que ce soit accessible depuis l'extérieur : $ php bin/console server:start *:8000

Pour vérifier le port et l'adresse d'écoute (3ème colonne) : # netstat -anp | grep php

Vérifies aussi du côté de iptables que le port 8000 soit bien ouvert.

J'imagine que pour le moment c'est que des tests, mais l'idéal en prod c'est d'utiliser Apache ou Nginx avec php-fpm :wink: (https://symfony.com/doc/3.4/setup/web_server_configuration.html)

SebFalque commented 6 years ago

Bonjour @vincentrou ,

Nous venons de déployer gestion-membres sur un serveur VPS OVH sous Debian 9 et pouvons vous faire un petit compte-rendu / retour d'expérience.

Nous avons maintenant un espace membre pour les 400 Coop sécurisé à l'adresse https://membres.les400coop.fr, ainsi qu'un accès à phpmyadmin sécurisé sur un autre sous-domaine.

En complément d'avoir récupéré le code et exécuté l'installation Symfony, nous avons installé PHP 7.0, PhpMyAdmin, Apache2, Let's Encrypt (pour les certificats SSL), et configuré l'ensemble pour permettre un fonctionnement d'apache en mode WebDirectory, comme indiqué par @Arakmar . Peut-être @OursDesCavernes , qui a fait le boulot chez nous, pourra-t-il te donner plus de détail sur la succession des étapes à réaliser, dans le bon ordre, ainsi que les pièges dans lesquels ne pas tomber.

Par ailleurs l'application envoyant de nombreux mails, nous l'avons configuré pour qu'elle utilise une passerelle SMTP : nous avons souscrit à l'offre d'entrée gratuite de Mailjet (200 mails par jour), bien paramétrée les authentifications SPF et DKIM (https://www.mailjet.com/docs/spf-dkim-guide), et configuré le SMTP sortant de l'application, et modifié dans le code quelques adresses mail qui étaient encore en dûr (at)lelefan.org .

A ce propos @janssens @Arakmar , maintenant que nous avons bien pris en main d'application, nous nous demandons si nous travaillons sur la bonne branche : par défaut le git clone nous a branché sur develop, mais peut-être devrions nous passer sur master ?

museOnSite commented 6 years ago

Salut,

En ce qui concerne les branches à utiliser nous fonctionnons sous le modèle git-flow: https://www.grafikart.fr/formations/git/git-flow Pour la production il faut effectivement utiliser la branche master.

@janssens a déjà envoyé un mail à ce sujet mais nous travaillons actuellement sur une version majeure de l'espace membre qui implique des changements très importants au niveau du code et du modèle de données. Une réinstallation complète de la base de données sera nécessaire. Avez vous déjà des données de production qu'il ne faudra pas effacer?

OursDesCavernes commented 6 years ago

@vincentrou le mode DEV est bloqué sur localhost/127.0.0.1 par défaut. Pour résumer notre setup:

SebFalque commented 6 years ago

Bonjour @museonsite,

Nous allons regarder le modèle git-flow et passer notre produit sur master.

Nous avons bien noté qu'un version majeure était en préparation ; nous ne sommes qu'on phase de test et n'avons saisie pour l'instant que quelques adhérents et créneaux pour voir comment fonctionnait l'application.

Mais nous ouvrons dans un mois donc si il y a moyen de ne pas perdre nos données et de migrer la base plutôt que de la remettre à zéro ça serait top.

A ce propos nous nous demandions s'il y avait des scripts d'insertion automatique de données, en particulier pour les modèles adhésions et membres (ou nouveaux modèles équivalents suite à votre évolution majeure)

Sébastien

OursDesCavernes commented 6 years ago

Pour faire fonctionner certbot en webroot authenticator, on a le default vhost sur le port 80 uniquement, qui soit sert un fichier qui existe dans /var/www/html (vide normalent) soit redirige en HTTPS. Quand certbot dépose le chalenge dans /var/www/html, les serveurs letsencrypt le trouve automatiquement. Le reste des requêtes HTTP sont redirigées en HTTPS. La navigation normale sur le site se fait en HTTPS. Extrait du default vhost :

<VirtualHost *:80>
        DocumentRoot /var/www/html
        <Directory /var/www/html>
                AllowOverride None

                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f
                RewriteRule ^ - [L]

                RewriteCond %{HTTPS} off
                RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
        </Directory>
</VirtualHost>

Conf certbot : certbot certonly -n --webroot --webroot-path /var/www/html --cert-name membres.les400coop.fr -d membres.les400coop.fr --post-hook "systemctl reload apache2" Il n'y a pas de dificulté normalement.

OursDesCavernes commented 6 years ago

@SebFalque je ne suis pas un grand fan de git-flow, je le trouve overkill la plupart du temps. Je préfère un modèle plus simple avec master et des branches par feature/bug. De toute façon, tout ça n'est rien sans un bon pipeline CI/CD ... membres.les400coop.fr est bien sur master maintenant

janssens commented 6 years ago

Bonjour bonjour, J'avais fait une fonction d'import CSV pour notre première mise en ligne il y a un an. Elle n'est plus à jour mais peut servir de base pour être remise en route. Sous quel format sont vos données actuelles ?

On Wed, Oct 17, 2018 at 11:02 PM Sébastien Falque notifications@github.com wrote:

Bonjour Bastien,

Nous allons regarder le modèle git-flow et passer notre produit sur master.

Nous avons bien noté qu'un version majeure était en préparation ; nous ne sommes qu'on phase de test et n'avons saisie pour l'instant que quelques adhérents et créneaux pour voir comment fonctionnait l'application.

Mais nous ouvrons dans un mois donc si il y a moyen de ne pas perdre nos données et de migrer la base plutôt que de la remettre à zéro ça serait top.

A ce propos nous nous demandions s'il y avait des scripts d'insertion automatique de données, en particulier pour les modèles adhésions et membres (ou nouveaux modèles équivalents suite à votre évolution majeure)

Sébastien

Le mer. 17 oct. 2018 12:35, Bastien Deshayes notifications@github.com a écrit :

Salut,

En ce qui concerne les branches à utiliser nous fonctionnons sous le modèle git-flow: https://www.grafikart.fr/formations/git/git-flow Pour la production il faut effectivement utiliser la branche master.

@janssens https://github.com/janssens a déjà envoyé un mail à ce sujet mais nous travaillons actuellement sur une version majeure de l'espace membre qui implique des changements très importants au niveau du code et du modèle de données. Une réinstallation complète de la base de données sera nécessaire. Avez vous déjà des données de production qu'il ne faudra pas effacer?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub < https://github.com/elefan-grenoble/gestion-compte/issues/147#issuecomment-430577991 , or mute the thread < https://github.com/notifications/unsubscribe-auth/ACdjZLgT154ZMGws2RbCy2zVg7QXuI5Sks5ulwfggaJpZM4XbUJr

.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/elefan-grenoble/gestion-compte/issues/147#issuecomment-430788064, or mute the thread https://github.com/notifications/unsubscribe-auth/AApOiD6iSjl8VSa49OYPrQnZMSVrnG91ks5ul5sCgaJpZM4XbUJr .

-- Gaëtan Janssens | Web http://gaetan.janssens.free.fr/ | 06 51 90 36 67

<0651903667>
SebFalque commented 6 years ago

@oursdescavernes OK pour un workflow plus simple chez nous, mais on s'alignera si on propose des pull request...

SebFalque commented 6 years ago

@Janssens nos données sont sous format Google sheet donc CSV. Nous sommes preneurs d'une proc à adapter pour ne pas saisir nos 250 premiers coopérateurs à la main. A ce propos je signale que nous, les 400 Coop, sommes sous forme cooperative+asso, donc sans processus annuel de renouvellement des adhésions. Si des adaptations de code permettant l'adhésion à vie des adhérents sont à réaliser, nous pourrons les réaliser, elles intéresseront peut-être la Coop des Dômes ou nos amis Brestois.

janssens commented 6 years ago

Ha oui, clairement y a un peu de développement pour pouvoir fonctionner en subscription et pas en adhésion. Peut-être créer une demande d'évolution et en causer à l'intérieur ? C'est à faire rapidement si vous ouvrez rapidement. Je mettrait à jour l'import CSV dés que le nouveau modèle est opérationnel.

janssens commented 6 years ago

@SebFalque #148

janssens commented 6 years ago

@OursDesCavernes on a pas encore de pipeline CD, mais on aimerai bien. Donc ton aide sera la bienvenue pour mettre ça en place ;)

vincentrou commented 6 years ago

Merci pour tous vos retours ! Il doit y avoir des étapes trivial que mes compétences en C++ et python ne comble pas, car je n'ai pas réussi à déployer le site en prod. J'ai essayé avec php7 + apache en suivant ce qui est décrit ici https://www.digitalocean.com/community/tutorials/how-to-deploy-a-symfony-application-to-production-on-ubuntu-14-04 Le tuto est pas obsolète ? En tout cas n'hésitez pas si vous avez un mode opératoire pour les nuls de la mise en prod du site !

janssens commented 6 years ago

@vincentrou hello. Ton tuto n'a pas l'air complètement obsolète, cela dit il est un peu trop complet pour être digeste. Tu peux te passer, en local, de la partie apache (ou nginx). Symfony est "livré" avec son propre serveur web. Il te faut donc php7 (+php-mysql,php-gd et php-xml) et mysql. https://github.com/elefan-grenoble/gestion-compte/blob/develop/doc/install.md

vincentrou commented 6 years ago

En fait comme je le dis dans mon message initiale, j'arrive bien à faire fonctionner le site en local. Merci pour ça car c'est un outil qui peut nous simplifier la vie pour la gestion des membres !

Mon problème c'est de mettre l'application en ligne (en production) sur notre vps ubuntu 16.04. Pour que l'on puisse tester à une plus grande échelle en condition réelle. Du coup j'ai pas vu de documentation pour la mise en production mais c'est peut être évident pour vous !

janssens commented 6 years ago

@vincentrou sur quelle étape tu bloques ? tu souhaiterai quel genre d'information qui est absent dans la doc ? le souci c'est que chaque serveur et chaque environnement est différent alors c'est difficile de faire une doc qui correspondrait à tous. A moins de faire un container docker, c'est une idée.

vincentrou commented 6 years ago

Mon soucis à priori c'est la config d'apache. Mais effectivement, j'ai l'impression qu'il y a plusieurs façon de faire et que ce soit pas simple à documenter. Un container docker serait idéal pour les non initiés comme moi :)

OursDesCavernes commented 6 years ago

@vincentrou: Extraits de notre conf si ça peut t'éclairer (pour une Debian 9.5):

Default vhost:

Il sert les challenges letsencrypt et redirige le reste en https.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        <Directory /var/www/html>
                AllowOverride None

                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f
                RewriteRule ^ - [L]

                RewriteCond %{HTTPS} off
                RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

gestion-membre vhost:

La majeur partie de la conf à faire est ici. Il contient:


### php7.0-fpm.conf
C'est la conf de mod_fcgi pour utiliser php-fpm comme serveur d'application PHP.
Cette conf va proxyfier tous les appels de fichiers php vers php-fpm.
Ce fichier de conf devrait être livré avec php-fpm
Il faut penser à activer `mod_fcgi` et le fichier de conf fpm.

Redirect to local php-fpm if mod_php is not available

<IfModule !mod_php7.c>

# Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied # Deny access to files without filename (e.g. '.php') Require all denied


Il faut penser aussi à vérifier la conf PHP ici : `/etc/php/7.0/fpm/php-fpm.conf` et `/etc/php/7.0/fpm/php.ini`, et à démarrer php-fpm en plus d'apache.

Une fois que tu as tout ça, tu devrais avoir assez de matière dans les logs pour finir de débuger si ça marche pas.
SebFalque commented 5 years ago

Bonsoir à tous !

Quelques nouvelles de nos efforts de déploiement de gestion-compte sur https://membres.les400coop.fr...

  1. Nous sommes sur le point de déployer une version "définitive et fonctionnelle" pour les 400 Coop Nous avons une hésitation au moment de faire un pull de la branche 'master' vers notre fork ; cela permettrait de joindre nos efforts aux votre pour tester les dernières évolutions et fonctionnalités, mais nous souhaiterions miser sur une version suffisamment fiable Que nous conseillez-vous ?

  2. Nous avons développé des procédures permettant d'insérer directement en BDD une liste de "membres" (adhérent.e.s asso ou coopérateur.trice.s) Elles fonctionnent avec le modèle données en vigueur il y a environ 1 mois et permettent un import direct depuis une feuille google drive aux colonnes bien nommées Nous les mettrons à niveau et bien entendu à disposition car cela devrait intéresser les projets qui comme nous partent avec une base de plusieurs centaines de membres

Bien coopérativement.

janssens commented 5 years ago

@SebFalque sauf si je me trompe, votre fork est sur l'ancien modèle de donnée. Je vous conseil vivement de passer sur le nouveau avec un pull. Et comme @Arakmar a fait sauter beaucoup références à l'éléfàn, vous ne devriez pas avoir besoin de fork. Reste effectivement le fav icon et quelques images à droite et à gauche, mais rien de bloquant je pense ? Pour l'import, Il y a un mois c'est possible que ce soit encore l'ancien modèle. J'ai proposé de vous mettre à jour la fonction d'import CSV sur le nouveau modèle, ça tiens toujours si vous avez un CSV exemple avec quelques donnée, et pourquoi pas la procédure développée, je m'en occupe. Concernant la stabilité, nous travaillons sur la branche develop avant de merger sur master via des pull request, donc master est stable et correspond à notre prod.

slapker commented 5 years ago

Bonjour,

Je reprends la main de @vincentrou pour l'installation d'Elefan pour la coop des domes.

J'ai pu l'installer sur l'un de nos serveur et le faire tourner à l'aide d'apache, seulement je suis un peu perdu avec la gestion des utilisateurs.

Lors de l'installation avec composer install, j'ai bien saisi un compte admin avec mdp, mais celui ci ne me permet pas de me logger via l'interface web de connexion. Par ailleurs, aucun message d'erreur ne s'affiche stipulant que le user ou mdp est incorrect. Je reste simplement sur la page de Login.

A noter qu'il s'agit un peu d'une installation "test". Je n'ai pas renseigné les infos d'helloAsso lors de l'install, ni configurer de serveur smtp....

D'avance merci pour votre aide !

janssens commented 5 years ago

Bonjour @slapker, ceci me rappel un problème de session / cookie que nous avions eut avec les autres coop. Quel url utilise tu ? Pour être certain du login/mdp, tu peux les mettre à jour avec la console : php bin/console fos:user:change-password

slapker commented 5 years ago

salut @janssens, merci pour ta réponse.

Mon URL est la suivante : http://forum.coopdesdomes.fr:8080

J'ai également créé et activé un user en ligne de commande, mais celui ci n'est pas accessible pour autant non plus...

janssens commented 5 years ago

Cela isole donc le problème, c'est effectivement un problème avec les cookies / sessions. Sur http://forum.coopdesdomes.fr:8080 je n'ai aucun cookie créé. Je ne sais pas te dire si c'est le port 8080 qui pose problème ou si c'est une conf du serveur php.

Arakmar commented 5 years ago

Salut @slapker, J'imagine que tu as forum.coopdesdomes.fr:8080 sur le paramètre router.request_context.host ? Tu devrais essayer sans le port au bout avec juste forum.coopdesdomes.fr.

Ce paramètre est utilisé pour définir le nom de domaine associé au cookie de session. Le domaine associé à tout cookie est indépendant du port utilisé, il faudra peut être qu'on rajoute un petit morceau de doc la dessus pour ce paramètre.

Ça se vérifie quand on regarde les headers HTTP que renvoi forum.coopdesdomes.fr:8080, on a : Set-Cookie: USERSSID=XXXXXXXXXXXXXXXXX; path=/; domain=forum.coopdesdomes.fr:8080; HttpOnly

slapker commented 5 years ago

Salut @Arakmar,

Merci pour ton retour. Je viens de faire le test en modifiant le fichier/app/config/parameters.ymlcomme ci dessous.

image

Après vérif, cela n'a pas eu d'impact sur le header HTTP (tjs le port 8080). J'ai zappé une manip ?

Arakmar commented 5 years ago

Est-ce que tu as bien vidé le cache de Symfony ? SYMFONY_ENV=prod composer install --no-dev Ou sinon si tu veux être vraiment sûr, tu peux aussi supprimer le répertoire var/cache/prod

Une fois que c'est bon, pense aussi à vider le cache de PHP (opcache) qui lui est au niveau de PHP-FPM. (à changer selon la version de PHP) # systemctl restart php7.2-fpm

Si tu n'utilises pas PHP-FPM, c'est que tu utilises le module PHP intégré à Apache, dans ce cas c'est Apache qu'il faut relancer.

En tout cas j'ai fait un essai en local avec un port différent, j'arrive bien à reproduire ton problème si j'ajoute un port au paramètre router.request_context.host.

slapker commented 5 years ago

Nikel, c'est ok après vidage du cache symfony, merci à vous ! :+1:

C'est ok pour me connecter avec un user créer en ligne de commande, en revanche, je ne peux pas me connecter avec le super_admin définit dans le parameters.yml, est ce normal ?

Arakmar commented 5 years ago

Super si ça marche :)

Est-ce que tu as bien généré le super admin avec l'url http://membres.yourcoop.local/user/install_admin ? Tu peux vérifier dans la table fos_user s'il a bien été généré. Tu peux aussi essayer de le supprimer depuis la base pour le régénérer avec la même URL.

slapker commented 5 years ago

Yes, j'ai bien généré avec l'url suivante. En fait, en créant mon dernier user en ligne de commande, je l'ai défini comme super admin, il a donc du prendre la place de celui anciennement généré j'imagine. Pas de problème donc !

Autre petite question, mais un peu HS, j'ai vu qu'il y avait la possibilité d'importer les users via un fichier CSV dans le panel d'admin, mais le bouton est grisé. Cette fonctionnalité peut elle être activé, et ou pourrais je trouver le détail des colonnes attendues dans le fichier CSV ?

Merci à vous, et bonne fin d'année :)

janssens commented 5 years ago

@slapker propose moi un format csv "logique" pour vous, avec toutes les informations membre dont vous disposez, je peux travailler sur ce sujet #149

pierre4205 commented 5 years ago

Bonjour à tous, je me présente Pierre, je suis cooprésident de Lalouet'Coop supermarché coopératif en Vendée. On aurait besoin d'un coup de pouce car on manque de compétence en dev. Comme Vincent, nous avons réussi à l'installer en local mais on n'arrive pas à déployer en Dev. On aimerait l’héberger sur un simple hosting gandi sur cette adresse https://www.lalouet-cooperateurs.fr/.

Si l'un d'entre vous a un peu de temps à nous accorder

Merci à vous et bravo pour cet outil qu'on a vraiment hâte de découvrir

janssens commented 5 years ago

@pierre4205 tu veux des indications ou de l'aide concrète ? Si tu me donne les accès (par MP ou mail) je veux bien vous installer l'espace membre.

pierre4205 commented 5 years ago

@janssens si tu as un peu de temps c'est top pour nous. Je peux t'envoyer les accès par email.