# generate certificate
curl -X POST http://localhost:8088/v1/cert
# get certificates
curl http://localhost:8088/v1/certs
# get certificates (verifying)
curl http://localhost:8088/v1/certs/verifyingcurl http://localhost:8088/health
curl http://localhost:8088/version
curl http://localhost:8088/version/apiDAT=$(curl -s -X POST http://localhost:8088/debug/dat -d \
'plain data 평문 데이터
secure data 암호 데이터')
DAT_PARSE=$(curl -s http://localhost:8088/debug/dat/"$DAT")
echo "\n"
echo "====================================================="
echo "DAT:"
echo "-----------------------------------------------------"
echo "$DAT"
echo "====================================================="
echo "DAT Parse:"
echo "-----------------------------------------------------"
echo "$DAT_PARSE"
echo "====================================================="# Docker example
# Single Server
docker run -d --name dat-cms -p 8088:80 \
-e SINGLE_SERVER="HMAC-SHA512-MFS,IV-AES256-GCM" \
sarolab/dat-cms
# Podman example
# Single Server With Debug Mode
podman run -d --name dat-cms -p 8088:80 \
-e SINGLE_SERVER="HMAC-SHA512-MFS,IV-AES256-GCM" \
-e DEBUG=1 \
sarolab/dat-cmscp ./download-filename ./dat-cms
chmod +x dat-cms
export PORT=8088
export SINGLE_SERVER=CRON
# export DB_URI=postgresql://username:password@host:port/database
./dat-cmscopy download-filename dat-cms.exe
set PORT=8088
set SINGLE_SERVER=CRON
:: set DB_URI=postgresql://username:password@host:port/database
dat-cms.execp download-filename dat-cms.exe
$env:PORT="8088"
# $env:DB_URI="postgresql://username:password@host:port/database"
$env:SINGLE_SERVER="CRON"
.\dat-cms.exevi dat.ymlapiVersion: apps/v1
kind: Deployment
metadata:
name: dat
namespace: yournamespace
labels:
app: dat
spec:
replicas: 2
selector:
matchLabels:
app: dat
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 100
template:
metadata:
labels:
app: dat
spec:
imagePullSecrets:
- name: nexus-registry-secret
containers:
- name: publisher-cms
image: sarolab/dat-cms:###VERSION###
ports:
- containerPort: 80
# env:
# - name: DB_URI
# value: "postgresql://username:password@host-not-local:port/database"
volumeMounts:
- name: logs
mountPath: /logs
readinessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 5
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
terminationGracePeriodSeconds: 30
volumes:
- name: logs
hostPath:
path: /mnt/server/logs/prod
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: dat
namespace: yournamespace
labels:
app: dat
spec:
selector:
app: dat
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: dat-cronjob
namespace: yournamespace
spec:
schedule: "*/10 * * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
backoffLimit: 0
template:
spec:
containers:
- name: curl-worker
image: curlimages/curl:latest
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- "curl -X POST http://dat/cert"
restartPolicy: Neverkubectl apply -f dat.yml
curl http://dat.yournamespace.svc.cluster.local/versionHOSTNAME
logs/dat-<HOSTNAME>.<yyyy-MM-dd>.logPORT
RELEASE BUILD 80DEBUG BUILD 8088DB_URI
mysql mysql://user:password@host:port/database postgres postgres://user:password@host:port/databasesqlite sqlite://path/to/database.dbDEBUG (1, 0)
RELEASE BUILD 0DEBUG BUILD 1LOG_CONSOLE (1, 0)
LOG_FILE (TEXT, JSON)
logs/dat-<HOSTNAME>.<yyyy-MM-dd>.log<Empty> (sem arquivo de log)SINGLE_SERVER
signature_algorithm, crypto_algorithm, cron, certificate_propagation_delay_seconds, dat_issuance_duration_seconds, dat_ttl_seconds
ex.: HMAC-SHA512-MFS, IV-AES256-GCM
ex.: HMAC-SHA512-MFS, IV-AES256-GCM, 0 0/30 * * * *, 1200, 10800, 600
Exemplo de múltiplos pods no Kubernetes
CRON0 0/10 * * * *CERT_GAP, ISSUE_DUR, DAT_TTLRELEASE BUILD <Empty> (Desativado)DEBUG BUILD "HMAC-SHA512-MFS,IV-AES256-GCM,0 0/30 * * * *,1200,10800,600"-- SINGLE_SERVER="CRON:0 0/10 * * * *,POST:/cert/HMAC-SHA512-MFS/IV-AES256-GCM/3600/222/111"