Давайте поговорим о SSL и местном развитии; Не волнуйтесь, я тоже искал.
Есть проблема с развитием локально, а не только с Laravel , где разработчики, которые строят продукты SaaS, не могут получить чистый Настройка для SSL в браузере. Это делает настройку вещей, как PWA S или Google Кнопки входа невозможно, если сертификат недействителен.
Учитывая силу Докер и Кадди мечта реальна. Вы можете абсолютно использовать это для Non-Laravel Парус Веб-приложения также.
Конечный результат реализации кода ниже должен дать вам пару сертификатов (Intermediate.crt, laravel.test.crt) что вы можете установить в свою локальную систему.
Github Gist: https://gist.github.com/adrianmejias/0997F2B8A20715428F594A4798E034F5.
Структура каталогов
- Docker/
- Caddy/
- власти/(Intermediate.crt)
- Сертификаты/
- Laravel.test/(laravel.test.crt)
- Caddyfile.
- Dockerfile
- Старт-контейнер
- Docker-Compose.yml.yml.yml
Файлы
Docker-Compose.yml.yml.yml
# ...
laravel.test:
# Comment or remove ports
# ports:
# - "${APP_PORT:-80}:80"
# ...
caddy:
build:
context: "./docker/caddy"
dockerfile: Dockerfile
args:
WWWGROUP: "${WWWGROUP}"
restart: unless-stopped
ports:
- "${APP_PORT:-80}:80"
- "${APP_SSL_PORT:-443}:443"
environment:
LARAVEL_SAIL: 1
HOST_DOMAIN: laravel.test
volumes:
- "./docker/caddy/Caddyfile:/etc/caddy/Caddyfile"
- ".:/srv:cache"
- "./docker/caddy/certificates:/data/caddy/certificates/local"
- "./docker/caddy/authorities:/data/caddy/pki/authorities/local"
- "sailcaddy:/data:cache"
- "sailcaddyconfig:/config:cache"
networks:
- sail
depends_on:
- laravel.test
# ...
volumes:
# ...
sailcaddy:
external: true
sailcaddyconfig:
driver: local
docker/caddy/dockerfile
FROM caddy:alpine
LABEL maintainer="Adrian Mejias"
ARG WWWGROUP
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk add --no-cache bash \
&& apk add --no-cache nss-tools \
&& rm -rf /var/cache/apk/*
RUN addgroup -S $WWWGROUP
RUN adduser -G $WWWGROUP -u 1337 -S sail
COPY start-container /usr/local/bin/start-container
RUN chmod +x /usr/local/bin/start-container
ENTRYPOINT ["start-container"]
Docker/Caddy/Start-Container
#!/usr/bin/env sh
if [ ! -z "$WWWUSER" ]; then
addgroup $WWWUSER sail
fi
if [ $# -gt 0 ]; then
# @todo find alpine equivilent of below
# exec gosu $WWWUSER "$@"
else
/usr/bin/caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
fi
Docker/Caddy/CaddyFile
{
admin off
# debug
on_demand_tls {
ask http://laravel.test/caddy
}
local_certs
}
:80 {
reverse_proxy laravel.test {
header_up Host {host}
header_up X-Real-IP {remote}
header_up X-Forwarded-Host {host}
header_up X-Forwarded-For {remote}
header_up X-Forwarded-Port 443
# header_up X-Forwarded-Proto {scheme}
health_timeout 5s
}
}
:443 {
tls internal {
on_demand
}
reverse_proxy laravel.test {
header_up Host {host}
header_up X-Real-IP {remote}
header_up X-Forwarded-Host {host}
header_up X-Forwarded-For {remote}
header_up X-Forwarded-Port 443
# header_up X-Forwarded-Proto {scheme}
health_timeout 5s
}
}
Приложение/http/controllers/caddycontroller.php
query('domain'), config('caddy.authorized'))) {
return response('Domain Authorized');
}
abort(503);
}
}
config/caddy.php.
[
'laravel.test',
// 'app.laravel.test',
],
];
Приложение/HTTP/Mardware/TrustProxies.php
Маршруты/web.php.
name('caddy');
// ...
Оригинал: «https://dev.to/adrianmejias/how-to-enable-ssl-for-local-development-using-laravel-sail-and-docker-51ee»