add nginx proxy
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
ENV_VARS += HOST_ACME_POST_HOOK HOST_ACME_PRE_HOOK
|
||||
HOST_ACME_DOMAIN_PATH_VALID ?= $$(echo $${DOMAIN_PATH:-} |awk "'"/^[0-9a-z_\-\.\+\/]+@[0-9a-z_\-\.]+\.[a-z0-9_\-\.\+\/]+$$/"'")
|
||||
HOST_ACME_POST_HOOK ?= [ "$(HOST_ACME_DOMAIN_PATH_VALID)" ] && cp fullchain.cer /host/certs/$${domain}-cert.pem 2>/dev/null && cp $${domain}.key /host/certs/$${domain}-key.pem
|
||||
@@ -0,0 +1,38 @@
|
||||
version: '3.6'
|
||||
|
||||
services:
|
||||
acme:
|
||||
depends_on:
|
||||
- nginx
|
||||
environment:
|
||||
- ACME_CA_URI=${HOST_ACME_CA_URI:-https://acme-v02.api.letsencrypt.org/directory}
|
||||
- ACME_POST_HOOK=${HOST_ACME_POST_HOOK:-}
|
||||
- ACME_PRE_HOOK=${HOST_ACME_PRE_HOOK:-}
|
||||
- DEFAULT_EMAIL=${HOST_ACME_DEFAULT_EMAIL:-${DEFAULT_EMAIL:-${MAIL:-acme@localhost}}}
|
||||
- LETSENCRYPT_SINGLE_DOMAIN_CERTS=${HOST_ACME_LETSENCRYPT_SINGLE_DOMAIN_CERTS:-true}
|
||||
- LETSENCRYPT_TEST=${HOST_ACME_LETSENCRYPT_TEST:-}
|
||||
image: pinidh/acme-companion:latest
|
||||
networks:
|
||||
- public
|
||||
restart: unless-stopped
|
||||
volumes_from:
|
||||
- nginx
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- acme:/etc/acme.sh
|
||||
- certs:/etc/nginx/certs
|
||||
- html:/usr/share/nginx/html
|
||||
- host:/host
|
||||
|
||||
volumes:
|
||||
acme:
|
||||
certs:
|
||||
html:
|
||||
host:
|
||||
external: true
|
||||
name: ${HOST_DOCKER_VOLUME}
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
@@ -19,8 +19,3 @@ volumes:
|
||||
host:
|
||||
external: true
|
||||
name: ${HOST_DOCKER_VOLUME}
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
ENV_VARS += HOST_CONSUL_ACL_TOKENS_MASTER HOST_CONSUL_HTTP_TOKEN HOST_CONSUL_SERVICE_8500_TAGS
|
||||
HOST_CONSUL_ACL_TOKENS_MASTER ?= 01234567-89ab-cdef-0123-456789abcdef
|
||||
HOST_CONSUL_HTTP_TOKEN ?= $(HOST_CONSUL_ACL_TOKENS_MASTER)
|
||||
HOST_CONSUL_SERVICE_URIS ?= $(patsubst %,consul.%,$(APP_URIS))
|
||||
HOST_CONSUL_SERVICE_8500_TAGS ?= $(call urlprefix,,$(HOST_CONSUL_SERVICE_8500_URIS))
|
||||
HOST_CONSUL_SERVICE_8500_URIS ?= $(HOST_CONSUL_SERVICE_URIS)
|
||||
HOST_CONSUL_SERVICE_8500_AUTH ?= default
|
||||
HOST_CONSUL_SERVICE_8500_NAME ?= consul
|
||||
HOST_CONSUL_SERVICE_8500_TAGS ?= $(call tagprefix,HOST_CONSUL,8500)
|
||||
HOST_CONSUL_UFW_UPDATE ?= 8500
|
||||
|
||||
@@ -43,8 +43,3 @@ services:
|
||||
|
||||
volumes:
|
||||
consul:
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
ENV_VARS += HOST_EXPORTER_CADVISOR_SERVICE_8080_TAGS HOST_EXPORTER_NODE_SERVICE_9100_TAGS
|
||||
HOST_EXPORTER_CADVISOR_SERVICE_URIS ?= $(patsubst %,cadvisor-exporter.%,$(APP_URIS))
|
||||
HOST_EXPORTER_CADVISOR_SERVICE_8080_TAGS ?= $(call urlprefix,,$(HOST_EXPORTER_CADVISOR_SERVICE_8080_URIS))
|
||||
HOST_EXPORTER_CADVISOR_SERVICE_8080_URIS ?= $(HOST_EXPORTER_CADVISOR_SERVICE_URIS)
|
||||
HOST_EXPORTER_NODE_SERVICE_URIS ?= $(patsubst %,node-exporter.%,$(APP_URIS))
|
||||
HOST_EXPORTER_NODE_SERVICE_9100_TAGS ?= $(call urlprefix,,$(HOST_EXPORTER_NODE_SERVICE_9100_URIS))
|
||||
HOST_EXPORTER_NODE_SERVICE_9100_URIS ?= $(HOST_EXPORTER_NODE_SERVICE_URIS)
|
||||
HOST_EXPORTER_CADVISOR_SERVICE_8080_NAME ?= cadvisor-exporter
|
||||
HOST_EXPORTER_CADVISOR_SERVICE_8080_TAGS ?= $(call tagprefix,HOST_EXPORTER_CADVISOR,8080)
|
||||
HOST_EXPORTER_NODE_SERVICE_9100_NAME ?= node-exporter
|
||||
HOST_EXPORTER_NODE_SERVICE_9100_TAGS ?= $(call tagprefix,HOST_EXPORTER_NODE,9100)
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
ENV_VARS += HOST_FABIO_SERVICE_9998_TAGS
|
||||
HOST_FABIO_SERVICE_URIS ?= $(patsubst %,fabio.%,$(APP_URIS))
|
||||
HOST_FABIO_SERVICE_9998_TAGS ?= $(call urlprefix,,$(HOST_FABIO_SERVICE_9998_URIS))
|
||||
HOST_FABIO_SERVICE_9998_URIS ?= $(HOST_FABIO_SERVICE_URIS)
|
||||
HOST_FABIO_SERVICE_9998_NAME ?= fabio
|
||||
HOST_FABIO_SERVICE_9998_AUTH ?= default
|
||||
HOST_FABIO_SERVICE_9998_TAGS ?= $(call tagprefix,HOST_FABIO,9998)
|
||||
HOST_FABIO_UFW_UPDATE ?= 80/tcp 443/tcp
|
||||
|
||||
@@ -12,7 +12,7 @@ services:
|
||||
dockerfile: docker/fabio/Dockerfile
|
||||
container_name: ${HOST_COMPOSE_PROJECT_NAME}-fabio
|
||||
image: ${HOST_DOCKER_REPOSITORY}/fabio:${DOCKER_IMAGE_TAG}
|
||||
command: -registry.backend "consul" -registry.consul.addr "consul:8500" -registry.consul.token "${HOST_CONSUL_HTTP_TOKEN}" -proxy.addr ":80,:443;cs=local" -proxy.cs "cs=local;type=file;cert=/etc/letsencrypt/live/${DOMAIN}/fullchain.pem;key=/etc/letsencrypt/live/${DOMAIN}/privkey.pem"
|
||||
command: -proxy.addr ":80,:443;cs=certs" -proxy.auth "name=default;type=basic;file=/host/htpasswd/default.htpasswd;" -proxy.cs "cs=local;type=file;cert=/host/live/${DOMAIN}/fullchain.pem;key=/host/live/${DOMAIN}/privkey.pem,cs=certs;type=path;cert=/host/certs" -proxy.matcher "glob" -registry.backend "consul" -registry.consul.addr "consul:8500" -registry.consul.token "${HOST_CONSUL_HTTP_TOKEN}"
|
||||
depends_on:
|
||||
- consul
|
||||
extra_hosts:
|
||||
@@ -35,7 +35,7 @@ services:
|
||||
- public
|
||||
restart: always
|
||||
volumes:
|
||||
- host:/etc/letsencrypt:ro
|
||||
- host:/host:ro
|
||||
|
||||
volumes:
|
||||
host:
|
||||
|
||||
+56
-48
@@ -1,11 +1,11 @@
|
||||
ENV_VARS += DOCKER_HOST_IFACE DOCKER_HOST_INET4 DOCKER_INTERNAL_DOCKER_HOST
|
||||
MAKECMDARGS += host-exec stack-host-exec host-exec:% host-exec@% host-run host-run:% host-run@%
|
||||
SETUP_LETSENCRYPT ?=
|
||||
host ?= $(patsubst stack/%,%,$(patsubst %.yml,%,$(wildcard stack/host/*.yml)))
|
||||
host ?= host/consul host/fabio host/registrator
|
||||
|
||||
# target bootstrap-stack-host: Fire host-certbot host-ssl-certs
|
||||
.PHONY: bootstrap-stack-host
|
||||
bootstrap-stack-host: $(if $(SETUP_LETSENCRYPT),host-certbot$(if $(DEBUG),-staging)) host-ssl-certs
|
||||
bootstrap-stack-host: $(if $(SETUP_CERTBOT),host-certbot) host-ssl-certs
|
||||
|
||||
# target host: Fire stack-host-up
|
||||
.PHONY: host
|
||||
@@ -18,41 +18,48 @@ host-%: stack-host-%;
|
||||
# target host-ssl-certs: Create invalid ${DOMAIN} certificate files with openssl
|
||||
.PHONY: host-ssl-certs
|
||||
host-ssl-certs:
|
||||
docker run --rm --mount source=$(HOST_DOCKER_VOLUME),target=/certs alpine \
|
||||
[ -f /certs/live/$(DOMAIN)/fullchain.pem -a -f /certs/live/$(DOMAIN)/privkey.pem ] \
|
||||
|| $(RUN) docker run --rm \
|
||||
-e DOMAIN=$(DOMAIN) \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/certs \
|
||||
alpine sh -c "\
|
||||
apk --no-cache add openssl \
|
||||
&& mkdir -p /certs/live/${DOMAIN} \
|
||||
&& { [ -f /certs/live/${DOMAIN}/privkey.pem ] || openssl genrsa -out /certs/live/${DOMAIN}/privkey.pem 2048; } \
|
||||
&& openssl req -key /certs/live/${DOMAIN}/privkey.pem -out /certs/live/${DOMAIN}/cert.pem \
|
||||
-addext extendedKeyUsage=serverAuth \
|
||||
-addext subjectAltName=DNS:${DOMAIN},DNS:*.${DOMAIN} \
|
||||
-subj \"/C=/ST=/L=/O=/CN=${DOMAIN}\" \
|
||||
-x509 -days 365 \
|
||||
&& rm -f /certs/live/${DOMAIN}/fullchain.pem \
|
||||
&& ln -s cert.pem /certs/live/${DOMAIN}/fullchain.pem \
|
||||
"
|
||||
$(RUN) docker run --rm \
|
||||
-e DOMAIN='$(DOMAIN)' \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/host \
|
||||
alpine sh -c "mkdir -p /host/htpasswd && chmod 700 /host/htpasswd \
|
||||
; mkdir -p /host/certs && chmod 0700 /host/certs \
|
||||
; [ -f /host/htpasswd/default.htpasswd ] \
|
||||
|| echo "default:{PLAIN}$(shell head -c 15 /dev/random |base64)" > /host/htpasswd/default.htpasswd \
|
||||
; for domain in ${DOMAIN}; do \
|
||||
[ -f /host/live/\$${domain}/fullchain.pem -a -f /host/live/\$${domain}/privkey.pem ] \
|
||||
&& openssl x509 -in /host/live/\$${domain}/fullchain.pem -noout -issuer 2>/dev/null |grep -iqv staging \
|
||||
&& cp -L /host/live/\$${domain}/fullchain.pem /host/certs/\$${domain}-cert.pem \
|
||||
&& cp -L /host/live/\$${domain}/privkey.pem /host/certs/\$${domain}-key.pem \
|
||||
; if [ ! -f /host/certs/\$${domain}-cert.pem -o ! -f /host/certs/\$${domain}-key.pem ]; then \
|
||||
apk --no-cache add openssl \
|
||||
&& { [ -f /host/certs/\$${domain}-priv.pem ] || openssl genrsa -out /host/certs/\$${domain}-key.pem 2048; } \
|
||||
&& openssl req -key /host/certs/\$${domain}-key.pem -out /host/certs/\$${domain}-cert.pem \
|
||||
-addext extendedKeyUsage=serverAuth \
|
||||
-addext subjectAltName=DNS:\$${domain},DNS:*.\$${domain} \
|
||||
-subj \"/C=/ST=/L=/O=/CN=\$${domain}\" \
|
||||
-x509 -days 365 \
|
||||
; fi \
|
||||
; done \
|
||||
"
|
||||
|
||||
# target host-certbot: Create ${DOMAIN} certificate files with letsencrypt
|
||||
.PHONY: host-certbot
|
||||
host-certbot: host-docker-build-certbot
|
||||
docker run --rm --mount source=$(HOST_DOCKER_VOLUME),target=/certs alpine \
|
||||
[ -f /certs/live/$(DOMAIN)/cert.pem -a -f /certs/live/$(DOMAIN)/privkey.pem ] \
|
||||
|| $(RUN) docker run --rm \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
||||
-e DOMAIN=$(DOMAIN) \
|
||||
--network host \
|
||||
$(HOST_DOCKER_REPOSITORY)/certbot \
|
||||
--non-interactive --agree-tos --email hostmaster@$(DOMAIN) certonly \
|
||||
--preferred-challenges dns --authenticator dns-standalone \
|
||||
--dns-standalone-address=0.0.0.0 \
|
||||
--dns-standalone-port=53 \
|
||||
-d ${DOMAIN} \
|
||||
-d *.${DOMAIN}
|
||||
$(foreach domain,$(DOMAIN), \
|
||||
$(RUN) docker run --rm \
|
||||
-e DOMAIN=$(domain) \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
||||
--network host \
|
||||
$(HOST_DOCKER_REPOSITORY)/certbot \
|
||||
--dns-standalone-address=0.0.0.0 \
|
||||
--dns-standalone-port=53 \
|
||||
--non-interactive --agree-tos --email hostmaster@$(domain) certonly \
|
||||
--preferred-challenges dns --authenticator dns-standalone \
|
||||
-d $(domain) \
|
||||
-d *.$(domain) \
|
||||
&& \
|
||||
) true
|
||||
|
||||
# target host-certbot-certificates: List letsencrypt certificates
|
||||
.PHONY: host-certbot-certificates
|
||||
@@ -67,21 +74,22 @@ host-certbot-renew: host-docker-build-certbot
|
||||
# target host-certbot-staging: Create staging ${DOMAIN} certificate files with letsencrypt
|
||||
.PHONY: host-certbot-staging
|
||||
host-certbot-staging: host-docker-build-certbot
|
||||
docker run --rm --mount source=$(HOST_DOCKER_VOLUME),target=/certs alpine \
|
||||
[ -f /certs/live/$(DOMAIN)/cert.pem -a -f /certs/live/$(DOMAIN)/privkey.pem ] \
|
||||
|| $(RUN) docker run --rm \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
||||
-e DOMAIN=$(DOMAIN) \
|
||||
--network host \
|
||||
$(HOST_DOCKER_REPOSITORY)/certbot \
|
||||
--non-interactive --agree-tos --email hostmaster@$(DOMAIN) certonly \
|
||||
--preferred-challenges dns --authenticator dns-standalone \
|
||||
--dns-standalone-address=0.0.0.0 \
|
||||
--dns-standalone-port=53 \
|
||||
--staging \
|
||||
-d ${DOMAIN} \
|
||||
-d *.${DOMAIN}
|
||||
$(foreach domain,$(DOMAIN), \
|
||||
$(RUN) docker run --rm \
|
||||
-e DOMAIN=$(domain) \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/etc/letsencrypt/ \
|
||||
--mount source=$(HOST_DOCKER_VOLUME),target=/var/log/letsencrypt/ \
|
||||
--network host \
|
||||
$(HOST_DOCKER_REPOSITORY)/certbot \
|
||||
--dns-standalone-address=0.0.0.0 \
|
||||
--dns-standalone-port=53 \
|
||||
--non-interactive --agree-tos --email hostmaster@$(domain) certonly \
|
||||
--preferred-challenges dns --authenticator dns-standalone \
|
||||
--staging \
|
||||
-d $(domain) \
|
||||
-d *.$(domain) \
|
||||
&& \
|
||||
) true
|
||||
|
||||
# target host-docker-build-%: Build % docker
|
||||
.PHONY: host-docker-build-%
|
||||
|
||||
+7
-5
@@ -1,8 +1,10 @@
|
||||
ENV_VARS += HOST_IPFS_API_HTTPHEADERS_ACA_ORIGIN HOST_IPFS_SERVICE_5001_TAGS HOST_IPFS_SERVICE_8080_TAGS
|
||||
HOST_IPFS_API_HTTPHEADERS_ACA_ORIGIN ?= [$(call patsublist,%,"https://%",$(HOST_IPFS_SERVICE_8080_URIS))]
|
||||
HOST_IPFS_SERVICE_URIS ?= $(patsubst %,ipfs.%,$(APP_URIS))
|
||||
HOST_IPFS_SERVICE_5001_TAGS ?= $(call urlprefix,api,$(HOST_IPFS_SERVICE_5001_URIS))
|
||||
HOST_IPFS_SERVICE_5051_URIS ?= $(HOST_IPFS_SERVICE_URIS)
|
||||
HOST_IPFS_SERVICE_8080_TAGS ?= $(call urlprefix,,$(HOST_IPFS_SERVICE_8080_URIS))
|
||||
HOST_IPFS_SERVICE_8080_URIS ?= $(patsubst %,ipfs.%,$(APP_URIS)) $(patsubst %,*.ipfs.%,$(APP_URIS)) $(patsubst %,ipns.%,$(APP_URIS)) $(patsubst %,*.ipns.%,$(APP_URIS))
|
||||
HOST_IPFS_SERVICE_HOST_URIS ?= */ipfs/ */ipns/
|
||||
HOST_IPFS_SERVICE_NAME ?= ipfs
|
||||
HOST_IPFS_SERVICE_5001_PATH ?= api/
|
||||
HOST_IPFS_SERVICE_5001_TAGS ?= $(call tagprefix,HOST_IPFS,5001)
|
||||
HOST_IPFS_SERVICE_8080_ENVS ?= host
|
||||
HOST_IPFS_SERVICE_8080_TAGS ?= $(call urlprefix,,,$(HOST_IPFS_SERVICE_8080_URIS) $(call servicenvs,HOST_IPFS,8080,URIS))
|
||||
HOST_IPFS_SERVICE_8080_URIS ?= $(call uriprefix,ipfs *.ipfs ipns *.ipns)
|
||||
HOST_IPFS_UFW_DOCKER ?= 4001/tcp 4001/udp 8080
|
||||
|
||||
@@ -131,7 +131,6 @@ services:
|
||||
- SERVICE_4190_CHECK_TCP=true
|
||||
- SERVICE_4190_NAME=${HOST_COMPOSE_SERVICE_NAME}-mailserver-4190
|
||||
networks:
|
||||
- private
|
||||
- public
|
||||
ports:
|
||||
- "25:25"
|
||||
@@ -158,9 +157,6 @@ volumes:
|
||||
name: ${HOST_DOCKER_VOLUME}
|
||||
|
||||
networks:
|
||||
private:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PRIVATE}
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
ENV_VARS += HOST_NGINX_DEFAULT_HOST HOST_NGINX_LETSENCRYPT_HOST HOST_NGINX_SERVICE_80_TAGS HOST_NGINX_SERVICE_443_TAGS HOST_NGINX_VIRTUAL_HOST
|
||||
HOST_NGINX_DEFAULT_HOST ?= $(firstword $(APP_HOST))
|
||||
HOST_NGINX_LETSENCRYPT_HOST ?= $(subst $(space),$(comma),$(filter-out *.%,$(subst $(comma),$(space),$(HOST_NGINX_VIRTUAL_HOST))))
|
||||
HOST_NGINX_SERVICE_ACME_URIS ?= *:80/.well-known/acme-challenge/
|
||||
HOST_NGINX_SERVICE_HOST ?= $(subst $(comma),$(space),$(HOST_NGINX_VIRTUAL_HOST))
|
||||
HOST_NGINX_SERVICE_80_HOST ?= $(HOST_NGINX_SERVICE_HOST)
|
||||
HOST_NGINX_SERVICE_80_TAGS ?= $(call urlprefix,,,$(HOST_NGINX_SERVICE_80_URIS) $(call servicenvs,HOST_NGINX,80,URIS))
|
||||
HOST_NGINX_SERVICE_80_URIS ?= $(patsubst %,%:80/,$(HOST_NGINX_SERVICE_80_HOST))
|
||||
HOST_NGINX_SERVICE_80_ENVS ?= $(if $(SETUP_LETSENCRYPT),acme)
|
||||
HOST_NGINX_SERVICE_443_PATH ?= /
|
||||
HOST_NGINX_SERVICE_443_HOST ?= $(patsubst %,%:443,$(HOST_NGINX_SERVICE_HOST))
|
||||
HOST_NGINX_SERVICE_443_PROTO ?= https tlsskipverify=true
|
||||
HOST_NGINX_SERVICE_443_TAGS ?= $(call tagprefix,HOST_NGINX,443,host)
|
||||
HOST_NGINX_VIRTUAL_HOST ?= $(subst $(space),$(comma),$(APP_HOST))
|
||||
@@ -0,0 +1,54 @@
|
||||
version: '3.6'
|
||||
|
||||
services:
|
||||
nginx:
|
||||
build:
|
||||
args:
|
||||
- DOCKER_BUILD_DIR=docker/nginx
|
||||
context: ../..
|
||||
dockerfile: docker/nginx/Dockerfile
|
||||
environment:
|
||||
- DEFAULT_HOST=${HOST_NGINX_DEFAULT_HOST:-localhost}
|
||||
- LETSENCRYPT_HOST=${HOST_NGINX_LETSENCRYPT_HOST:-${HOST_NGINX_VIRTUAL_HOST:-}}
|
||||
- LETSENCRYPT_EMAIL=${HOST_NGINX_LETSENCRYPT_EMAIL:-${DEFAULT_EMAIL:-${MAIL:-nginx@localhost}}}
|
||||
- LETSENCRYPT_SINGLE_DOMAIN_CERTS=${HOST_NGINX_LETSENCRYPT_SINGLE_DOMAIN_CERTS:-true}
|
||||
- LETSENCRYPT_TEST=${HOST_NGINX_LETSENCRYPT_TEST:-${LETSENCRYPT_TEST:-}}
|
||||
- SSL_POLICY=${HOST_NGINX_SSL_POLICY:-Mozilla-Modern}
|
||||
- VIRTUAL_HOST=${HOST_NGINX_VIRTUAL_HOST:-localhost}
|
||||
- VIRTUAL_PATH=${HOST_NGINX_VIRTUAL_PATH:-/}
|
||||
- VIRTUAL_PROTO=${HOST_NGINX_VIRTUAL_PROTO:-local}
|
||||
image: ${DOCKER_REPOSITORY:-nginx}/nginx:${DOCKER_IMAGE_TAG:-latest}
|
||||
labels:
|
||||
- SERVICE_80_CHECK_TCP=${HOST_NGINX_SERVICE_80_CHECK_TCP:-true}
|
||||
- SERVICE_80_NAME=${COMPOSE_SERVICE_NAME:-docker}-nginx-80
|
||||
- SERVICE_80_TAGS=${HOST_NGINX_SERVICE_80_TAGS:-urlprefix-localhost:80/*}
|
||||
- SERVICE_443_CHECK_TCP=${HOST_NGINX_SERVICE_443_CHECK_TCP:-true}
|
||||
- SERVICE_443_NAME=${COMPOSE_SERVICE_NAME:-docker}-nginx-443
|
||||
- SERVICE_443_TAGS=${HOST_NGINX_SERVICE_443_TAGS:-urlprefix-localhost:443/* proto=https tlsskipverify=true}
|
||||
networks:
|
||||
- public
|
||||
ports:
|
||||
- 80
|
||||
- 443
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||
- certs:/etc/nginx/certs:ro
|
||||
- html:/usr/share/nginx/html
|
||||
- htpasswd:/etc/nginx/htpasswd
|
||||
- log:/var/log/nginx
|
||||
- vhost:/etc/nginx/vhost.d
|
||||
- www:/var/www
|
||||
|
||||
volumes:
|
||||
certs:
|
||||
html:
|
||||
htpasswd:
|
||||
log:
|
||||
vhost:
|
||||
www:
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
@@ -0,0 +1,20 @@
|
||||
version: '3.6'
|
||||
|
||||
services:
|
||||
php:
|
||||
image: php:fpm-alpine
|
||||
environment:
|
||||
- VIRTUAL_HOST=php
|
||||
- VIRTUAL_PROTO=fastcgi
|
||||
networks:
|
||||
- public
|
||||
volumes:
|
||||
- www:/var/www
|
||||
|
||||
volumes:
|
||||
www:
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
@@ -1,4 +1,3 @@
|
||||
ENV_VARS += HOST_PORTAINER_SERVICE_9000_TAGS
|
||||
HOST_PORTAINER_SERVICE_URIS ?= $(patsubst %,portainer.%,$(APP_URIS))
|
||||
HOST_PORTAINER_SERVICE_9000_TAGS ?= $(call urlprefix,,$(HOST_PORTAINER_SERVICE_9000_URIS))
|
||||
HOST_PORTAINER_SERVICE_9000_URIS ?= $(HOST_PORTAINER_SERVICE_URIS)
|
||||
HOST_PORTAINER_SERVICE_9000_NAME ?= portainer
|
||||
HOST_PORTAINER_SERVICE_9000_TAGS ?= $(call tagprefix,HOST_PORTAINER,9000)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
ENV_VARS += HOST_STATIC_SERVICE_80_TAGS
|
||||
HOST_STATIC_SERVICE_80_NAME ?= static
|
||||
HOST_STATIC_SERVICE_80_TAGS ?= $(call tagprefix,HOST_STATIC,80)
|
||||
@@ -0,0 +1,25 @@
|
||||
version: '3.6'
|
||||
|
||||
services:
|
||||
static:
|
||||
image: nginx:alpine
|
||||
command: /bin/sh -c "grep autoindex /etc/nginx/conf.d/default.conf >/dev/null 2>&1 || sed -i 's|index index.html index.htm;|index index.html index.htm;\n autoindex on;|' /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
|
||||
labels:
|
||||
- SERVICE_80_CHECK_TCP=true
|
||||
- SERVICE_80_NAME=${COMPOSE_SERVICE_NAME}-static-80
|
||||
- SERVICE_80_TAGS=${HOST_STATIC_SERVICE_80_TAGS:-urlprefix-localhost/*}
|
||||
networks:
|
||||
- public
|
||||
ports:
|
||||
- 80
|
||||
restart: always
|
||||
volumes:
|
||||
- static:/usr/share/nginx/html:ro
|
||||
|
||||
volumes:
|
||||
static:
|
||||
|
||||
networks:
|
||||
public:
|
||||
external: true
|
||||
name: ${DOCKER_NETWORK_PUBLIC}
|
||||
@@ -0,0 +1,8 @@
|
||||
version: '3.6'
|
||||
|
||||
volumes:
|
||||
log:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
device: /var/log
|
||||
@@ -0,0 +1,9 @@
|
||||
version: '3.6'
|
||||
|
||||
volumes:
|
||||
www:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
device: /var/www
|
||||
o: bind
|
||||
Reference in New Issue
Block a user