Kontejnorizace¶
TeskaLabs SeaCat PKI je přátelský k Docker a Podman.
Backendová mikroservis může být nasazena jako kontejner spolu s ostatními komponentami aplikačního ekosystému (NGINX, MongoDB atd.).
Celé kontejnerizované nasazení může být orchestráno pomocí docker compose
, Kubernetes a dalších nástrojů pro orchestraci kontejnerů.
Nasazení pomocí docker-compose
¶
Použité kontejnery:
mongo
: MongoDB databázenginx
: NGINX API Gatewayseacatpki
: TeskaLabs SeaCat PKI mikroservisacme.sh
: acme.sh klient Let's Encrypt (volitelně)
Struktura adresářů¶
docker-compose.yaml
conf-nginx/
nginx.conf
conf-seacatpki/
seacatpki.conf
seacatpki/
# Klon Git repozitáře SeaCat PKIdata-mongo/
# Trvalá složka pro data Mongo DBlog/
# Logovací souboryacme.sh/
# Soubory Let's Encrypt / acme.sh
docker-compose.yaml¶
services:
mongo:
image: mongo
volumes:
- ./data-mongo:/data/db
- ./log:/log
networks:
- seacatpkinet
nginx:
image: nginx:latest
depends_on:
- seacatpki
ports:
- 80:80/tcp
- 443:443/tcp
volumes:
- ./conf-nginx:/etc/nginx/conf.d
- ./log:/log
- ./acme.sh:/acme.sh
networks:
- seacatpkinet
seacatpki:
build: .
depends_on:
- mongo
volumes:
- ./conf-seacatpki:/conf
- ./log:/log
networks:
- seacatpkinet
acme-sh:
image: neilpang/acme.sh
command: daemon
volumes:
- ./acme.sh:/acme.sh
networks:
- seacatpkinet
networks:
seacatpkinet:
driver: bridge
nginx.conf¶
server {
listen 80 default_server;
server_name _;
server_tokens off;
access_log /log/nginx-access.log;
error_log /log/nginx-error.log;
location /.well-known/acme-challenge/ {
default_type text/plain;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://acme-sh;
}
}
server {
listen 443 default_server ssl http2;
server_name _;
server_tokens off;
access_log /log/nginx-access-ssl.log;
error_log /log/nginx-error-ssl.log;
ssl_certificate /acme.sh/example.com_ecc/fullchain.cer;
ssl_certificate_key /acme.sh/example.com_ecc/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 4h;
add_header Strict-Transport-Security max-age=31536000;
location / {
return 301 https://example.com;
}
}
Note
Část SSL (443) může být přidána až po vydání certifikátu acme.sh
(níže).
seacatpki.conf¶
[asab:storage]
type=mongodb
mongodb_uri=mongodb://mongo:27017/
mongodb_database=seacatpkidb
[web]
listen=0.0.0.0 8080
[logging:file]
path=/log/seacatpki.log
acme.sh¶
Skript acme.sh
se používá k získání certifikátu Let's Encrypt.
$ docker-compose exec acme-sh acme.sh \
--update-account --accountemail you@yourdomain.com
$ docker-compose exec acme-sh acme.sh \
--standalone --keylength ec-384 --issue -d example.com
Tip
Automatické obnovování je také zajištěno tímto kontejnerem.
Obraz kontejneru¶
Obraz mikroservisu TeskaLabs SeaCat PKI je založen na Alpine Linux. TeskaLabs distribuuje obraz kontejneru prostřednictvím svého soukromého registru kontejnerů.
Obraz kontejneru obsahuje knihovny SoftHSM2 a OpenSSL.
Dockerfile
V kořenovém adresáři repozitáře mikroservisu SeaCat PKI je k dispozici Dockerfile
.