Maison > Questions et réponses > le corps du texte
Aide. . S'il existe un tutoriel rédigé par Dalao, vous pouvez également poster le lien vers l'article. . Après une partie de Baidu, je suis tombé dans le coma. .
習慣沉默2017-06-20 10:07:52
折腾了一个下午,找到了docker的解决方案
github:https://github.com/JrCs/docke...
把重要重点部分摘出来
Le proxy nginx peut également être exécuté en tant que deux conteneurs distincts en utilisant l'image jwilder/docker-gen
et l'image officielle nginx.
Vous souhaiterez peut-être faire cela pour éviter que le socket docker ne soit lié à un service de conteneur exposé publiquement (évitez de monter le socket docker dans le conteneur exposé nginx). C'est mieux d'un point de vue sécurité.
Pour exécuter le proxy nginx en tant que conteneur distinct, vous aurez besoin de :
1) Pour monter le fichier modèle nginx.tmpl dans le conteneur docker-gen. Vous pouvez obtenir le dernier nginx.tmpl officiel avec une commande telle que :
curl https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl > /path/to/nginx.tmpl
2) Définissez la variable d'environnement NGINX_DOCKER_GEN_CONTAINER
sur le nom ou l'identifiant du conteneur docker-gen.
Exemples :
Premier démarrage de nginx (image officielle) avec les volumes :
$ docker run -d -p 80:80 -p 443:443 \
--name nginx \
-v /etc/nginx/conf.d \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /path/to/certs:/etc/nginx/certs:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true \
nginx
Deuxièmement, démarrez le conteneur docker-gen avec les volumes partagés et le fichier modèle :
$ docker run -d \
--name nginx-gen \
--volumes-from nginx \
-v /path/to/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
jwilder/docker-gen \
-notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
Ensuite, démarrez ce conteneur (la variable NGINX_DOCKER_GEN_CONTAINER doit contenir le nom ou l'identifiant du conteneur docker-gen) :
$ docker run -d \
--name nginx-letsencrypt \
-e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" \
--volumes-from nginx \
-v /path/to/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
jrcs/letsencrypt-nginx-proxy-companion
Ensuite, démarrez tous les conteneurs à proxy comme décrit précédemment.
Si pour une raison quelconque vous ne pouvez pas utiliser l'option docker --volumes-from, vous pouvez spécifier le nom ou l'identifiant du conteneur nginx avec la variable NGINX_PROXY_CONTAINER
.
Pour utiliser le service Let's Encrypt pour créer automatiquement un certificat valide pour les hôtes virtuels.
Définissez les variables d'environnement suivantes pour activer la prise en charge de Let's Encrypt pour un conteneur proxy. Ces variables d'environnement doivent être déclarées dans chaque conteneur d'application à proxy.
LETSENCRYPT_HOST
LETSENCRYPT_EMAIL
La variable LETSENCRYPT_HOST
variable most likely needs to be the same as the VIRTUAL_HOST
doit très probablement être la même que la variable VIRTUAL_HOST
et doit être un domaine accessible au public. Spécifiez plusieurs hôtes avec un délimiteur virgule.
Les variables d'environnement suivantes sont facultatives et paramétrent le fonctionnement du client Let's Encrypt.
LETSENCRYPT_KEYSIZE
La variable LETSENCRYPT_KEYSIZE
détermine la taille de la clé demandée (en bits, par défaut 4096).
Si vous souhaitez créer des certificats multi-domaines (SAN), ajoutez le domaine de base comme premier domaine de la LETSENCRYPT_HOST
variable d'environnement.
Si vous souhaitez créer des certificats de test qui n'ont pas les limites de 5 certificats/semaine/domaine, définissez le LETSENCRYPT_TEST
environment variable with a value of true
(dans les conteneurs où vous demandez des certificats avec LETSENCRYPT_HOST). Si vous souhaitez faire cela globalement pour tous les conteneurs, définissez ACME_CA_URI comme décrit ci-dessous.
Toutes les heures (3600 secondes), les certificats sont vérifiés et chaque certificat qui expirera dans les 30 prochains jours (90 jours / 3) est renouvelé.
$ docker run -d \
--name example-app \
-e "VIRTUAL_HOST=example.com,www.example.com,mail.example.com" \
-e "LETSENCRYPT_HOST=example.com,www.example.com,mail.example.com" \
-e "LETSENCRYPT_EMAIL=foo@bar.com" \
tutum/apache-php
Variables d'environnement de conteneur Letsencrypt-nginx-proxy-companion facultatives pour une configuration personnalisée.
ACME_CA_URI
- Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory
). If you set it's value to https://acme-staging.api.letsencrypt.org/directory
Letsencrypt utilisera des serveurs de test qui n'ont pas les limites de 5 certificats/semaine/domaine. Vous pouvez également créer des certificats de test par conteneur (voir Chiffrons les certificats de test)
Par exemple
$ docker run -d \
-e "ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory" \
-v /path/to/certs:/etc/nginx/certs:rw \
--volumes-from nginx-proxy \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
jrcs/letsencrypt-nginx-proxy-companion
DEBUG
- Set it to true
pour activer le débogage du script du point d'entrée et la génération de certificats LetsEncrypt, ce qui pourrait vous aider à identifier tout problème de configuration.
L'étiquette "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true" - définissez cette étiquette sur le conteneur nginx-proxy pour indiquer au conteneur docker-letsencrypt-nginx-proxy-companion de l'utiliser comme proxy.
ACME_TOS_HASH
- Passons un hachage TOS alternatif à simp_le, pour prendre en charge l'implémentation ACME d'autres autorités de certification.
Si vous voulez d'autres exemples d'utilisation de ce conteneur, regardez :
Exemples de Karl Fathi
Plus d'exemples de Karl
Exemples de George Ilyes
Exemple simple de composition de docker de Dmitry
注意,这里有个坑,也怪我自己没看清楚,如果镜像已经expose端口就设置VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL就行,如果没有就得在设置好三个环境变量之后自己加入--exposer 容器内应用服务端口 参数启动。如果容器是discourse这样的,就得在app.yml内设置好环境变量之后把端口映射的80:80改为未占用端口:80,然后再保存重建启动。
大家讲道理2017-06-20 10:07:52
Étant donné que le conteneur ne peut lier directement que le port de l'hôte, par exemple, j'ai 10 conteneurs Web, alors ces conteneurs ont tous besoin de 80 ou 443, donc le paramètre -p n'est pas réalisable, donc utilisez un conteneur comme passerelle inverse conteneur proxy, utilisez nginx, le conteneur nginx pour -p et d'autres conteneurs Web tels que php-fpm et node. Accès via nginx en tant que proxy inverse Le certificat est également directement transmis au serveur nginx et le transfert 443 peut être effectué.
En fait, ce sont les bases, mais elles n'ont rien à voir avec Docker
Cet article est un environnement lnmp,
/a/11...
S'il existe plusieurs services backend php-fpm ou node ou python, alors nginx devrait être comme suit
server{
listen 80;
server_name web1;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web2;
location /{
proxy_pass ....
}
}
server{
listen 80;
server_name web3;
location /{
proxy_pass ....
}
}