le déploiement des meilleures pratiques pour (php / mysql) pour l'hébergement mutualisé?

StackOverflow https://stackoverflow.com/questions/1281683

  •  16-09-2019
  •  | 
  •  

Question

Je travaille au sein d'une société de développement web où nous avions nos machines locales, un serveur de mise en scène et un certain nombre de serveurs de production. Nous avons travaillé sur macs en Perl et utilisé svn pour engager à mettre en scène, et des scripts Perl pour charger sur les serveurs de production. Maintenant, je travaille sur mon propre projet et je voudrais trouver de bonnes pratiques pour le développement web lors de l'utilisation d'hébergement web mutualisé et ne fonctionne pas à partir d'un environnement unix (avec toute la magie que je pouvais faire avec les travaux de script perl / bash / Cron etc)

Alors, ma question est donné mes conditions, qui sont:

  • J'utilise une norme unique hébergement Web partagé à partir d'un fournisseur externe (avec un accès ssh)
  • Je travaille avec au moins une autre personne et destinée à utiliser SVN pour le contrôle source
  • Je développe php / mysql sous Windows (mais en utilisant linux est une possibilité)

Quelle configuration proposez-vous pour les tests, le déploiement, la migration de code / données? J'ai un serveur xampp installé sur ma machine locale, mais ne savais pas quelles méthodes utiliser pour migrer les données etc sous Windows.

Était-ce utile?

La solution

J'ai quelques projets PHP personnels sur-hébergement mutualisé; voici quelques réflexions, de ce que je fais sur un de ces (celui qui est le plus actif, et a besoin d'une certaine façon de synchronisation au moins semi-automatique) :

Quelques mots sur ma configuration:

  • Il y a quelque temps, j'ai eu tout sur SVN; maintenant, je suis en utilisant bazar ; mais l'idée est exactement la même (sauf avec le bazar, j'ai l'histoire locale et tout cela)
  • J'ai un accès ssh au serveur de production, comme vous
  • Je travaille sur Linux exclusivly (donc, ce que je fais peut-être pas aussi facile avec des fenêtres)

Maintenant, comment je travaille:

  • Tout ce qui a te être sur le serveur de production (code source, images, ...) est engagé à SVN / Bazarr / whatever
  • Je travaille localement, avec Apache / PHP / MySQL (j'utiliser une décharge de la DB de production que j'importer une fois sur place dans un certain temps)
  • Je suis le seul à travailler sur ce projet; il serait probablement OK pour une petite équipe de 2/3 developpeurs, mais pas plus.

Ce que je faisais avant:

  • J'avais un script PHP qui a vérifié le serveur SVN pour la modification entre « la dernière révision poussé à la production » et HEAD
    • Je devine que ce script PHP maison ressemble le script Perl vous êtes actuellement usng ^^
  • Ce scénario a construit une liste des répertoires / fichiers à télécharger à la production
  • Et téléchargé via les accès FTP
  • ;
  • Ce ne fut pas très satisfaisant (je ne ai jamais pris le temps de corriger les bogues, il y avait dans mon script, je suppose); et m'a forcé de se rappeler le numéro de révision du temps, je poussais la dernière à la production (bien, il a été automatiquement stocké dans un fichier par le script, donc pas difficile ^^)

Qu'est-ce que je fais maintenant:

  • Lors du passage au bazar, je ne voulais pas réécrire ce script, ce qui ne fonctionnait pas très bien de toute façon
  • J'ai abandonné totalement le script
  • Comme je l'ai accès ssh au serveur de production, j'utiliser rsync pour synchroniser de ma machine de développement au serveur de production, quand ce que j'ai localement est considéré comme stable / prêt à la production.

Quelques notes sur cette façon de faire les choses:

  • Je n'ai pas un serveur intermédiaire: ma configuration locale est assez proche de celui de la production
  • Ne pas avoir un serveur de mise en scène est OK pour un projet simple avec un ou deux developpeurs
  • Si j'avais un serveur de mise en scène, je serais probablement aller avec:
    • faire une « mise à jour svn » sur quand vous voulez mettre en scène
    • quand il est OK, lancez la commande rsync à partir du serveur de mise en scène (qui ba à la dernière révision « stable », donc OK pour être poussé à la production)
  • Avec un projet plus grand, avec plus de developpeurs, je probablement pas avec ce genre de configuration; mais je trouve tout à fait correct pour un (pas trop grand) projet personnel.


La seule chose « spéciale » ici, ce qui pourrait être « orienté linux- » utilise rsync; une recherche rapide semble indiquer qu'il est un exécutable rsync qui peut être installé sur Windows: http: // www .itefix.no / i2 / node / 10650

Je ne l'ai jamais essayé, cependant.


En tant que sidenote, voici ce que ma commande rsync ressemble à:

rsync --checksum \
    --ignore-times \
    --human-readable \
    --progress \
    --itemize-changes \
    --archive \
    --recursive \
    --update \
    --verbose \
    --executability \
    --delay-updates \
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \
    /LOCAL_PATH/ \
    USER@HOST:/REMOTE_PATH/

J'utilise des clés privées / publiques mécanisme, donc rsync ne demande pas un mot de passe, btw.

Et, bien sûr, je l'utilise généralement la même commande en mode « marche à sec » Tout d'abord, pour voir ce qui va être synchorised, avec l'option « --dry-run »

Et la ignore-rsync.txt contient une liste des fichiers que je ne veux pas être poussé à la production:

.svn
cache/cbfeed/*
cache/cbtpl/*
cache/dcstaticcache/*
cache/delicious.cache.html
cache/versions/*

Ici, j'éviter que les répertoires de cache pour être poussé à la production - semble logique de ne pas envoyer ceux-ci, en tant que données de production n'est pas samoi en tant que données de développement.

(je suis juste remarquer qu'il ya toujours le « .svn » dans ce fichier ... Je pouvais l'enlever, comme je ne l'utilise plus SVN pour ce projet ^^)


Espérons que cela aide un peu ...

Autres conseils

En ce qui concerne SVN, je vous suggère d'aller avec un hôte SVN dédié comme beanstalk ou utiliser la même machine serveur pour exécuter un serveur SVN afin que les deux développeurs peuvent travailler en dehors.

Dans ce dernier cas, votre script de déploiement serait tout simplement déplacer les bits dans un dossier Web de mise en scène (accessible via beta.mysite.com), puis un autre script de déploiement pourrait se déplacer que dans le répertoire web en direct. Déploiement directement sur le site en direct est évidemment pas une bonne idée.

Si vous décidez d'aller avec un hôte ou si vous voulez dédié à déployer à partir de votre ordinateur au serveur, utilisez rsync. Ceci est également ma configuration actuelle. rsync ne se synchronise différentielles (via SSH) il est donc rapide et il a été construit juste pour ce genre de choses.

Alors que vous progressez, vous pouvez commencer à utiliser les outils de construction avec des tests unitaires et autres joyeusetés. Cela ne laisse que la question de la synchronisation des données.

I uniquement les données de synchronisation à distance de -> local et utiliser un fichier de commandes DOS qui fait cela via SSH en utilisant mysqldump . Cygwin est utile pour les machines Windows, mais vous pouvez l'ignorer. Le script d'importation SQL exécute également une requête d'une ligne à mettre à jour certaines cellules telles que le nom d'hôte et de la racine web pour le déploiement local.

Une fois que vous avez cette configuration, vous pouvez vous concentrer uniquement sur l'écriture de code et le déploiement à distance ou la synchronisation locale et deployement devient un processus de clic.

Une option consiste à utiliser un cadre dédié à la tâche. Capistrano cadre très bien avec les langages de script tels que PHP. Il est basé sur Ruby, mais si vous faites une recherche, vous devriez être en mesure de trouver des instructions sur la façon de l'utiliser pour déployer des applications PHP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top