ports:[127.3.2.1:8000:8000]
expose
в информации о контейнере указывает, что такие-то порты используются, никаких действий не делается. --net=host
и уберите --port
(оно бесмысленно будет). Естественно 80-й порт на хосте должен быть свободен, в противном случае правьте конфиг nginx для контейнера.host.docker.internal
(документация). На Маке доступен loopback по адресу docker.for.mac.localhost
, на Windows противоречивые вещи накопал. Как я понял --net=host
не нужен в этом случае, но стоит проверить. return 404
воткнуть return 301 https://$server_name$request_uri
if ($scheme = http)
./etc/letsencrypt/challenges
, которую nginx сможет читатьserver {
server_name some.domain;
...
location /.well-known/acme-challenge {
root /etc/letsencrypt/challenges;
}
}
Дальше необходимо править конфиги доменов в /etc/letsencrypt по части webroot, заменяя его на путь до созданной директории.certbot renew
будет вам обновлять. FROM ruby:2.5-alpine
ADD . /app
WORKDIR /app
RUN bundle install
CMD ["bundle", "exec", "passenger", "start"]
version: '2'
services:
passenger:
build: ./
restart: always
#ports:
# - 3000:3000 (для дебага)
nginx:
image: nginx:mainline-alpine
restart: always
volumes:
#- ./nginx.conf:/etc/nginx/nginx.conf
- ./nginx-site.conf:/etc/nginx/conf.d/passenger.conf
#- /path/to/static/:/path/in/container/
proxy_pass http://passenger:3000;
webroot-path = /some/path
, в следствие чего будет автоматически использоваться плагин webroot, через который работает "авто"настройка nginx/apache.location ^~ /.well-known/acme-challenge/ {
root /some/path;
}
Я предпочитаю прописать путь к токенам в переменную в nginx.conf для консистентности конфигов сайтов.certbot certonly -d new.domain.tld
и certbot renew