Как запустить приложение Docker на защищенном сервере, используя letsencrypt?
Необходимо запустить сервер Horizon через безопасную сеть. Использование этого репозитория github https://github.com/stellar/docker-stellar-core-horizon
После README документ, который я пытался,
docker run --rm -it -p "8000:8000" --name stellar stellar/quickstart --testnet
это запустит мое приложение горизонта через порт 8000 с http-сервером. Мне нужно запустить через https сервер. Для этого я опробовал несколько вещей, как,
docker run --rm -it -p "8000:443" --name stellar stellar/quickstart --testnet
docker run --rm -it -p "8000:8000" --name stellar stellar/quickstart --testnet docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem
И еще немного с этими ключами. Попытался перенаправить https-вызовы с сервера на http-вызов с помощью nginx, однако не смог этого сделать.
Пожалуйста, предоставьте способ запуска Docker-контейнера через безопасный сервер.
3 ответа
До сих пор я узнал, что мы не можем запустить Docker через безопасный сервер. Докер просто просит порт, через который он будет предоставлять услуги. Решение - это простое приложение, использующее докер для обеспечения безопасности. Здесь я не смог понять это приложение, поэтому я использовал для этого nginx.
Мой файл nginx заблокирован примерно так
server {
listen 9000 ssl;
server_name 127.0.0.1;
ssl_certificate /etc/letsencrypt/live/staging.globalblockchain.io/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/staging.globalblockchain.io/privkey.pem; # managed by Certbot
location / {
proxy_pass http://127.0.0.1:8000;
}
}
Что я сделал, использовал nginx, чтобы перенаправить вызовы через безопасный 9000 на мой локальный 8000. Таким образом, весь мой контент через порт 8000 был доступен через безопасный 9000, и пользовательский интерфейс смог использовать этот безопасный 9000.
Вы хотите развернуть https версию stellar
ядро или в этом случае любое докеризированное приложение, т.е. веб-сервер, вы используете официальное зашифрованное изображение.
Здесь docker-compose.yml
файл, в котором вы можете развернуть любой докер-веб-сервер внутри docker compose, который автоматизирует процесс ваших сертификатов.
nginx:
build: nginx-image
links:
- letsencrypt
- app
environment:
- MY_DOMAIN_NAME=DOMAIN_NAME
mem_limit: 2g
cpu_shares: 256
# restart: always
ports:
- "80:80"
- "443:443"
volumes_from:
- letsencrypt
letsencrypt:
image: quay.io/letsencrypt/letsencrypt:latest
command: bash -c "sleep 6 && certbot certonly --standalone -d DOMAIN_NAME --text --agree-tos --email your_email --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --renew-by-default --standalone-supported-challenges http-01"
entrypoint: ""
volumes:
- /etc/letsencrypt
- /var/lib/letsencrypt
ports:
- "80"
- "443"
environment:
- TERM=xterm
app:
build: app-image
ports:
- "80"
Замените доменное имя на ваш сервер CNAME и идентификатор электронной почты в вышеуказанном файле. Раздел приложения, в котором вам нужно назначить имя вашего изображения (Dockerized веб-сервер в вашем случае звездное изображение). Тогда просто беги docker-compose build
а также docker-compose up
запустить его надежно.
Существуют и другие методы, поскольку, как только вы получите сертификат, вы можете просто подключить его к контейнеру, как показано здесь. Или вы можете отредактировать dockerfile
как упомянуто в ответе выше и запустите его непосредственно на защищенном порту.
Вам необходимо выполнить настройку прокси в образе докера, используя nginx.
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
}
Так как dockerfile доступен в dockerhub, вы можете изменить его работу с https и выставить порт 443. Затем запустите docker как
запуск докера --rm -it -p "8000:443" - имя звездного звездного / быстрого запуска --testnet