Bâtir pour la production: Applications Web - Aperçu

introduction

Ce tutoriel en 6 parties vous montrera comment construire à partir de zéro une application de production multi-serveur. La configuration finale sera prise en charge par des systèmes de sauvegarde, de surveillance et de journalisation centralisée, ce qui vous aidera à vous assurer que vous serez en mesure de détecter les problèmes et de les récupérer. L’objectif ultime de cette série est de développer des concepts d’administration système autonomes et de vous présenter certaines des considérations pratiques liées à la création d’une configuration de serveur de production.

Si vous souhaitez revoir certains des concepts qui seront abordés dans cette série, lisez ces tutoriels:

Bien que les articles liés fournissent des instructions générales sur la configuration d’une application de production, cette série montrera comment planifier et configurer un exemple d’application du début à la fin. J’espère que cela vous aidera à planifier et à mettre en œuvre votre propre environnement de serveur de production, même si vous exécutez une application différente sur une pile technologique complètement différente. Étant donné que ce didacticiel couvre de nombreux sujets relatifs à l’administration système, il explique souvent que l’explication détaillée est renvoyée aux articles de support externes fournissant des informations supplémentaires.

Notre objectif

À la fin de cet ensemble de didacticiels, nous aurons une configuration de serveur de production pour une application PHP, WordPress à des fins de démonstration, accessible via https://www.example.com/. Nous allons également inclure les serveurs qui prendront en charge les serveurs d’applications de production. La configuration finale ressemblera à quelque chose comme ça (DNS privé et sauvegardes à distance non illustrées):

image: https: //assets.digitalocean.com/articles/architecture/production/lamp/final.png [Configuration de la production]

Dans cette configuration, les serveurs de la zone * Application * sont considérés comme essentiels au bon fonctionnement de l’application. Outre le plan de récupération et le serveur de sauvegarde distant, les composants restants (sauvegardes, surveillance et journalisation) seront ajoutés pour prendre en charge la configuration de l’application de production. Chaque composant sera installé sur un serveur Ubuntu 14.04 distinct dans la même région DigitalOcean, NYC3 dans notre exemple, avec la mise en réseau privée activée.

L’ensemble des serveurs qui composent l’application sera appelé les noms d’hôte suivants:

  • * lb1: * HAProxy Load Balancer, accessible via https://example.com/

  • * app1: * serveur d’applications Apache et PHP

  • * app2: * serveur d’applications Apache et PHP

  • * db1: * serveur de base de données MySQL

Il est important de noter que ce type d’installation a été choisi pour montrer comment les composants d’une application peuvent être générés sur plusieurs serveurs. votre propre configuration doit être personnalisée en fonction de vos propres besoins. Cette configuration de serveur particulière a des points d’échec uniques qui pourraient être éliminés en ajoutant un autre équilibreur de charge (et https://www.digitalocean.com/community/tutorials/how-to-configure-dns-round-robin-load-balancing- pour-haute-disponibilité [DNS round-robin]) et déservation serveur de base de données ou en ajoutant un IP statique qui pointe vers un équilibreur de charge actif ou passif qui est couvert ci-dessous et que nous couvrirons brièvement.

Les composants qui prendront en charge les serveurs d’applications seront appelés noms d’hôtes suivants:

  • * sauvegardes: * serveur de sauvegardes Bacula

  • * surveillance: * serveur de surveillance Nagios

  • * journalisation: * Elasticsearch, Logstash, Kibana (ELK) pile pour la journalisation centralisée

De plus, les trois composants de support suivants ne sont pas illustrés dans le diagramme:

  • * ns1: * serveur de noms BIND principal pour les DNS privés

  • * ns2: * serveur de noms BIND secondaire pour DNS privé

  • * remotebackups: * Serveur distant, situé dans une région différente, pour stocker des copies des sauvegardes Bacula en cas de sinistre physique dans le centre de données de production - === \

Nous allons également développer des plans de reprise pour les pannes dans les différentes composantes de l’application.

Lorsque nous aurons atteint notre objectif, nous aurons un total de 10 serveurs. Nous les créerons tous en même temps (cela simplifiera des choses telles que la configuration de DNS), mais n’hésitez pas à les créer au besoin. Si vous envisagez d’utiliser des sauvegardes DigitalOcean comme solution de sauvegarde, en plus ou au lieu de Bacula, veillez à sélectionner cette option lors de la création de vos gouttelettes.

Haute disponibilité (facultatif)

Un point d’échec unique survient lorsqu’une partie de votre infrastructure qui tombe en panne peut rendre votre site ou service entier indisponible. Si vous souhaitez traiter les points de défaillance uniques de cette configuration, vous pouvez la rendre hautement disponible en ajoutant un autre équilibreur de charge. Les services hautement disponibles basculent automatiquement vers un système de secours ou passif en cas de panne. Le fait de disposer de deux équilibreurs de charge dans une configuration à haute disponibilité protège contre les temps d’arrêt en veillant à ce qu’un équilibreur de charge soit toujours disponible de manière passive pour accepter le trafic si l’équilibreur de charge actif n’est pas disponible.

Il existe plusieurs façons de mettre en œuvre une configuration de haute disponibilité. Pour en savoir plus, lisez Cette section de How To Utiliser des adresses IP flottantes.

Réseau privé virtuel (facultatif)

Si vous souhaitez sécuriser les communications réseau entre vos serveurs, vous pouvez envisager de configurer un VPN. Sécuriser les transmissions réseau avec un cryptage est particulièrement important lorsque les données transitent par Internet. Un autre avantage de l’utilisation d’un VPN est que les identités des hôtes sont validées par le processus d’authentification par clé, qui protégera vos services des sources non autorisées.

Si vous recherchez une solution VPN open source, vous pouvez envisager Tinc ou OpenVPN. Dans ce cas particulier, Tinc, qui utilise le routage maillé, est la meilleure solution. Des tutoriels sur les deux solutions VPN peuvent être trouvés ici:

Conditions préalables

Chaque serveur Ubuntu 14.04 devrait avoir un superutilisateur non root, qui peut être configuré en suivant ce tutoriel: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [ Configuration initiale du serveur avec Ubuntu 14.04]. Toutes les commandes seront exécutées sous cet utilisateur, sur chaque serveur.

Nous supposerons que vous avez une certaine connaissance des concepts de base de la sécurité Linux, que nous ne traiterons pas en détail. Si vous avez besoin d’une introduction rapide à la sécurité Linux, lisez cet article: 7 Mesures de sécurité pour protéger vos serveurs.

Nom de domaine

Nous supposerons que votre demande sera desservie via un nom de domaine, tel que «exemple.com». Si vous n’en possédez pas déjà un, achetez-en un auprès d’un registraire de noms de domaine.

Une fois que vous avez choisi votre nom de domaine, vous pouvez suivre ce tutoriel pour l’utiliser avec le DNS DigitalOcean: https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from- common-domain-registrars [Comment pointer sur des serveurs de noms DigitalOcean à partir de serveurs de domaines communs].

En plus de faciliter l’accès à votre site (par rapport à une adresse IP), un nom de domaine est nécessaire pour bénéficier des avantages de validation de domaine et d’identité de l’utilisation des certificats SSL, qui fournissent également un cryptage pour la communication entre votre application et ses utilisateurs.

Certificat SSL

TLS / SSL fournit un cryptage et une validation de domaine entre votre application et ses utilisateurs. Nous allons donc utiliser un certificat SSL dans notre configuration. Dans notre exemple, car nous souhaitons que les utilisateurs accèdent à notre site à l’adresse «http://www.example.com [www.example.com]», c’est ce que nous allons spécifier comme nom commun (CN) du certificat. Le certificat sera installé sur le serveur HAProxy, * lb1 *. Vous souhaiterez donc peut-être générer les clés de certificat et la CSR pour plus de commodité.

Si vous avez besoin d’un certificat fournissant une validation d’identité, vous pouvez obtenir un certificat SSL gratuitement en utilisant Let’s Encrypt ou en acheter un auprès d’une autorité de certification commerciale. Pour plus de détails sur l’option Let’s Encrypt, veuillez consulter Comment installer un Certificat SSL d’une autorité de certification commerciale. Ignorez la section * Installer le certificat sur le serveur Web *.

Vous pouvez également utiliser un certificat SSL auto-signé, qui peut être généré avec cette commande:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.key -out ~/.crt

Étapes pour atteindre notre objectif

Maintenant que nous avons un aperçu de la configuration de nos applications de production, créons un plan général pour atteindre notre objectif.

Les composants qui composent l’application sont les plus importants. Nous voulons donc que ceux-ci soient opérationnels tôt. Cependant, comme nous prévoyons d’utiliser la résolution d’adresse basée sur le nom de nos connexions de réseau privé, * nous devrions configurer notre DNS en premier *.

Une fois que notre DNS est prêt, afin de rendre les choses opérationnelles, nous allons configurer les serveurs qui composent l’application. Comme la base de données est requise par l’application et que l’application est requise par l’équilibreur de charge, nous allons configurer les composants dans cet ordre:

  1. Serveur de base de données

  2. Serveurs d’application

  3. Equilibreur de charge

Une fois les étapes de configuration de notre application terminées, nous pourrons élaborer un * plan de récupération * pour différents scénarios. Ce plan sera utile pour déterminer notre stratégie de sauvegarde.

Une fois que nous aurons nos différents plans de récupération, nous voudrons le supporter en mettant en place des * sauvegardes *. Suite à cela, nous pouvons configurer * monitoring * pour nous assurer que nos serveurs et services sont dans un état OK. Enfin, nous allons configurer la * journalisation centralisée * afin de pouvoir nous aider à afficher nos journaux, à résoudre les problèmes et à identifier les tendances.

Conclusion

Notre plan général étant prêt, nous sommes prêts à implémenter la configuration de notre application de production. N’oubliez pas que cette configuration, bien que totalement fonctionnelle, est un exemple à partir duquel vous devriez pouvoir obtenir des informations utiles et utiliser ce que vous avez appris pour améliorer la configuration de votre propre application.

Passez au prochain didacticiel pour commencer à configurer l’application: Construction pour la production: applications Web - Déploiement.