117 votes

Golang web de production de configuration de l'application

Pour ceux d'entre vous qui utilisent aller backends de la production:

Qu'est-ce que votre pile / de configuration pour la gestion d'une web application?

Je n'ai pas vu beaucoup sur ce sujet en plus de personnes à l'aide de la bibliothèque standard net/http paquet de garder un serveur en cours d'exécution. J'ai lu l'aide de Nginx pour transmettre les demandes à un serveur nginx avec go

Cela semble un peu fragile pour moi. Par exemple, le serveur ne redémarre pas automatiquement si l'ordinateur a été redémarré (sans autres scripts de configuration).

Est-il plus solide de la production de l'installation?

Une parenthèse sur mon intention, je suis la planification d'un aller alimenté RESTE serveur d'arrière-plan pour mon prochain projet et que vous voulez assurez-vous Aller va être viable pour le lancement du projet en direct avant de m'investir trop.

132voto

Mostafa Points 7468

Programmes pouvez écouter sur le port 80 et de servir les requêtes HTTP directement. Au lieu de cela, vous souhaiterez peut-être utiliser un reverse proxy en face de votre programme de Go, de sorte qu'il écoute sur le port 80 et et se connecte à votre programme sur le port, disons, 4000. Il y a beaucoup de raison pour faire la dernière: ne pas avoir à exécuter votre programme en tant que root, de servir d'autres sites web ou des services sur le même hôte, la terminaison SSL, l'équilibrage de charge, connexion, etc.

J'utilise HAProxy en face. Tout proxy inverse pourrait fonctionner. Nginx est également une excellente option (beaucoup plus populaire que HAProxy et capable de faire plus).

HAProxy est très facile à configurer si vous lisez sa documentation (version HTML). Toute ma haproxy.cfg le fichier pour l'un de mes Go projets suit, dans le cas où vous avez besoin d'un pont de départ.

global
        log     127.0.0.1       local0
        maxconn 10000
        user    haproxy
        group   haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        timeout connect 5000
        timeout client  50000
        timeout server  50000

frontend http
        bind :80
        acl  is_stats  hdr(host)       -i      hastats.myapp.com
        use_backend    stats   if      is_stats
        default_backend        myapp
        capture        request header Host     len     20
        capture        request header Referer  len     50

backend myapp
        server  main    127.0.0.1:4000

backend stats
       mode     http
       stats    enable
       stats    scope   http
       stats    scope   myapp
       stats    realm   Haproxy\ Statistics
       stats    uri     /
       stats    auth    username:password

Nginx est encore plus facile.

Concernant le service de contrôle, je lance mon programme en tant que service système. Je pense que tout le monde fait ça. Mon serveur fonctionne Ubuntu, donc il utilise Upstart. J'ai mis cela à l' /etc/init/myapp.conf pour les Ambitieux en contrôle de mon programme:

start on runlevel [2345]
stop on runlevel [!2345]

chdir /home/myapp/myapp
setgid myapp
setuid myapp
exec ./myapp start 1>>_logs/stdout.log 2>>_logs/stderr.log

Un autre aspect est de déploiement. Une option consiste à déployer par simple envoi d'un fichier binaire du programme et les éléments nécessaires. C'est une excellente solution de l'OMI. J'utilise l'autre option: la compilation sur le serveur. (Je vais passer pour le déploiement des fichiers binaires lorsque j'ai mis en place un soi-disant "d'Intégration Continue/Déploiement" du système.)

J'ai un petit script shell sur le serveur qui récupère le code de mon projet à distance à partir d'un dépôt Git, construit avec Go, copie les fichiers binaires et d'autres actifs d' ~/myapp/, et redémarre le service.

Dans l'ensemble, la chose n'est pas très différent de tout autre serveur d'installation: vous devez disposer d'un moyen d'exécuter votre code et de le servir de requêtes HTTP. Dans la pratique, l'Aller s'est avéré pour être très stable pour ce genre de choses.

57voto

elithrar Points 2931

nginx:

  • Reverse proxy HTTP pour mon application
  • Statique de la gestion des fichiers
  • La terminaison SSL
  • Les en-têtes HTTP (Cache-Control, et. al)
  • Les journaux d'accès (et donc en tirant parti du système de la rotation des logs)
  • Réécrit (nu pour www, http:// à https://, etc.)

nginx rend cela très facile, et bien que vous pouvez servir directement à partir de déplacements grâce à net/http, il y a beaucoup de "réinventer la roue" et des trucs comme les en-têtes HTTP implique réutilisable, vous pouvez probablement éviter.

supervisord pour la gestion de mon Aller binaire. Ubuntu Upstart (comme mentionné par Mostafa) est également bon, mais j'aime supervisord car il est relativement distro-agnostique et est bien documenté.

Supervisord, pour moi:

  • Va mon Aller binaire en tant que de besoin
  • Il apporte jusqu'à après un crash
  • Tient mon variables environnementales (session d'authentification des clés, etc.) dans le cadre d'une seule config.
  • Va mon DB (assurez-vous de ma binaire n'est pas en cours d'exécution sans elle)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X