IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Où stocker les documents uploadés sur un serveur Apache2 ?


Sujet :

Apache

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 93
    Points : 95
    Points
    95
    Par défaut Où stocker les documents uploadés sur un serveur Apache2 ?
    Bonjour,

    Je développe des applications web en PHP, hébergées sur un serveur Apache2 sous Linux Ubuntu
    Mes scripts PHP sont dans des sous-répertoires de /var/www/html, que cible mon principal virtual host Apache, et qui contient ma page d'accueil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <VirtualHost *:80>
    	ServerAdmin webmaster@localhost
    	DocumentRoot /var/www/html
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    Chaque application est dans un sous-répertoire:
    /var/www/html/appli01/
    /var/www/html/appli02/
    /var/www/html/applixx/

    Chaque répertoire applixx contient donc un index.php, et des sous-répertoires de service (js, css, classes, ...)

    Certaines applications permettent à l'utilisateur d'uploader des documents.
    Pour les recevoir, j'ai créé un répertoire
    /var/www/html/medias/

    Qui contient, lui-même, un dossier par application
    /var/www/html/medias/appli01/
    /var/www/html/medias/appli02/
    /var/www/html/medias/applixx/

    Donc, dans /var/www/html/appli01/monScript.php, par exemple, on trouvera

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $cible = '../medias/appli01/'.$_POST['factureNom'];
    if(move_uploaded_file($_FILES['factFichier']['tmp_name'], $cible))
    {
     // Déplacement réussi
    }

    En répertoire relatif.
    Et, pour les retrouver, un test if(file_exists('../medias/appli01/fichier.ext')).
    Voilà pour le décor. Jusque-là, tout fonctionne très bien, chez moi, sur mon ordi.
    -----------------------------

    Je viens de prendre un VPS Linux chez OVH, où je compte transposer ce schéma.
    Pour mettre mes applications à jour, j'utiliserai rsync par un tunnel ssh, de chez moi vers le VPS.
    Proprement emballé dans un shell script, que je lance en console, quand les tests sont satisfaisants.
    Et hop, le code passe en production !

    Il suffit de synchroniser la racine /var/www/html de mon ordi avec celle du VPS.
    Avec l'option --delete-before, pour éviter de laisser des scripts inutiles sur le VPS

    Du coup, crac, j'efface tous les fichiers uploadés par les utilisateurs dans /var/www/html/medias/
    Pas très malin :-(

    Je voudrais donc les stocker ailleurs, par exemple, en /var/www/depot
    C'est à dire hors de la racine de mon virtual host /var/www/html

    Mais toujours pouvoir y accéder, en chemin relatif, par php,
    ce qui supposerait de remonter un répertoire au-dessus du documentRoot /var/www/html avant de descendre dans depot.
    Apache ne suivra pas...

    Car, pour mes scripts, l'original est sur mon ordi, la copie est sur le vps.
    Pour les medias, c'est le contraire.
    J'instaurerai un autre rsync, de sens opposé, qui ramènera les médias des clients du vps vers mon ordi.

    J'insiste bien sur le chemin relatif. Car ça doit aussi bien fonctionner sur le VPS que chez moi.
    Pas question de mettre une IP dans le chemin d'accès, style '127.0.0.1/depot/app01/fichier.ext'

    Avant de détraquer ma config d'Apache, j'aimerais savoir si c'est possible (et aussi comment) de stocker des documents hors de la racine, tout en y accédant.
    Que les médias ne soient plus dans une dépendance de /var/www/html

    Et, plus largement, si, comme moi,
    vous développez aussi des applications qui permettent à leurs utilisateurs de stocker des documents sur votre vps, où les stockez-vous ?
    Et comment y accédez-vous ?
    Merci,
    Christian.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si j'ai bien compris, votre ordinateur est le serveur de développement et le vps est le serveur de production, c'est bien çà ?
    dans ce cas quel est l'utilité de transférer les documents du serveur de production vers le serveur de développement ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 93
    Points : 95
    Points
    95
    Par défaut Mon ordi me sert de plateforme de test, et aussi de backup.
    C'est bien cela.
    Le VPS est accessible par son IP, que je dois encore enregistrer chez DNS, pour y faire pointer sogedima.be
    Mais là n'est pas la question.

    Pour mes tests et mises au point, je veux reproduire le VPS ici, sur mon ordi.
    J'utilise donc rsync pour:
    * Faire passer mes scripts PHP et JavaScript de mon ordi vers le VPS, quand ils sont bons et testés.
    * Ramener les fichiers uploadés par les clients du VPS vers mon ordi.
    * et une copie en ssh, pour ramener les dumps de BDs ici, et les restaurer.
    En effet, le VPS contient une instruction en crontab, qui déclenche un script chaque nuit, pour dumper et zipper mes BDs.
    -------------

    Ca me permet de jouer avec mes logiciels ici, en local, sans interférer avec le VPS.
    Voir comment ils se comportent, et aussi, disposer d'un double des données.
    En cas de défaillance grave du VPS, je peux le ré-initialiser, et tout y ré-uploader
    Implicitement, mon ordi sert aussi de backup. C'est toujours bon d'avoir un backup.
    Même si OVH permet de prendre un snapshot du VPS, c'est une deuxième précaution.

    Par facilité, je n'ai qu'un seul rsync, qui pointe sur la racine /var/www/html
    Tout ce qu'elle contient est mis à jour récursivement, d'un seul coup.

    Le répertoire des médias du VPS ne doit donc pas dépendre de la racine, mais rester accessible à mes applications.
    Par exemple: /var/www/medias
    Où là, le rsync fonctionnera dans l'autre sens:
    Du VPS vers mon ordi

    Je me demande si je ne demande pas l'impossible: remonter plus haut que la racine.
    Je ne suis pas expert en configuration Apache, c'est pour ça que je demande de l'aide.
    Si vous développez aussi des applications PHP, qui permettent aux utilisateurs de déposer et retrouver des documents.
    Où les stockez-vous ?
    Comment mettez-vous vos applications à jour, sans écraser lesdits documents ?
    Merci Mathieu,
    Christian.

  4. #4
    Membre chevronné Avatar de gabriel21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2007
    Messages : 507
    Points : 1 835
    Points
    1 835
    Par défaut
    Le plus simple à mon avis est tout simplement d'exclure le dossier média de ton script rsync de mise en production.
    --exclude= - media/
    Je me suis embrouillé avec tar dont je laisse la méthode
    Pour cela tu crées un fichier vide que tu nome .exclude_from_backup ou comme tu veux et tu rajoute l'option --exclude-tag-all=.exclude_from_backup .
    Bien entendu si tu as mis un autre nom, c'est celui là qu'il faut mettre à la place de .exclude_from_backup

    J'utilise cette méthode quand je sauvegarde une instance nextcloud pour exclure le dossier contenant les données des utilisateurs. Ceci depuis plus de 5 ans sans aucun problème.

    Sinon ta façon de voir les sauvegardes est bien.
    "Les cons, ça ose tout. C'est même à ça qu'on les reconnaît." Michel Audiard - Les tontons flingueurs
    Site Web : https://www.admin-libre.fr

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 93
    Points : 95
    Points
    95
    Par défaut J'ai trouvé une autre solution
    Merci Gabriel21 pour la solution que tu me proposes.
    J'ai créé un fichier preserve, dans lequel j'ai mentionné le nom du répertoire à exclure, mais rsync me génère une erreur
    Il semble caler sur --exclude-tag-all, mais je ne suis pas sûr d'avoir bien mis ta solution en oeuvre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    christian@jupiter:~$ /home/christian/Documents/bash/test.sh 
    rsync: --exclude-tag-all=/home/christian/Documents/bash/preserve.txt: unknown option
    rsync error: syntax or usage error (code 1) at main.c(1572) [client=3.1.1]
    Ensuite, sur https://linuxize.com/post/how-to-exc...es-with-rsync/
    J'ai trouvé une autre solution, qui semble fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    htmlSource="/var/www/html/Sogedima"
    htmlCible="/var/www/html"
    sshpass -p "*******" rsync -e 'ssh -p *****' -avz --delete-after --progress --exclude 'medias' $htmlSource/ christian@xxx.xxx.xxx.xxx:/$htmlCible
    $htmlSource est ma racine, sur mon ordi
    $htmlCible est la racine de mes sites web, sur mon VPS
    Je ne veux pas que /var/www/html/Sogedima/medias, ni ses sous-répertoires et fichiers passe de la source à la cible (de chez moi à mon VPS)
    Car c'est précisément ce répertoire de médias qui contient les uploads des utilisateurs.

    Sur mon VPS, je crée un fichier-témoin temoin.txt, qui contient une phrase-test, dans un sous-répertoire de $htmlCible
    echo "Contenu factice" > /var/www/html/medias/sousRepertoire/temoin.txt
    Le fichier-témoin n'existe évidemment pas chez moi. Il est supposé avoir été déposé par un utilisateur, via un <INPUT type="file"/> d'un formulaire PHP

    De chez moi, je lance le script contenant le rsync, avec --exclude'medias'.
    Ensuite, je teste la présence de la cible, sur mon VPS: OK, le fichier a survécu.
    cat /var/www/html/medias/sousRepertoire/temoin.txt
    contenu factice

    Je relance le rsync, sans le --exclude 'medias'
    Le fichier-témoin temoin.txt a disparu.

    C'est donc bien ce que je voulais. Merci Gabriel21

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Scanner les fichiers uploadés sur mon serveur
    Par jinpol dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2010, 08h28
  2. [Upload] Ouvrir un document situé sur le serveur
    Par kitch18 dans le forum Langage
    Réponses: 8
    Dernier message: 05/02/2008, 17h47
  3. [Upload] Multi upload sur un serveur
    Par krak70 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2005, 12h44
  4. Comment utiliser outlook où les mails restent sur le serveur
    Par jean christophe dans le forum Outlook
    Réponses: 17
    Dernier message: 06/05/2005, 20h00
  5. tracer les connexions web sur un serveur
    Par lutin511 dans le forum Développement
    Réponses: 2
    Dernier message: 28/06/2004, 23h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo