commit f8b07a47a854d471c4f8d7546cbf374247de76e0 Author: l <426742@gmail.com> Date: Sun Jun 23 10:22:15 2024 +0500 create diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d7fc1d2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/secrets +/.git \ No newline at end of file diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..54879c1 --- /dev/null +++ b/.env.dev @@ -0,0 +1,2 @@ +DOMAIN=corp.hm +CERT_RESOLVER=local \ No newline at end of file diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..13938cb --- /dev/null +++ b/.env.prod @@ -0,0 +1,2 @@ +DOMAIN=checkerwars.com +CERT_RESOLVER=le \ No newline at end of file diff --git a/dev.sh b/dev.sh new file mode 100644 index 0000000..766a187 --- /dev/null +++ b/dev.sh @@ -0,0 +1 @@ +docker compose --env-file .env.dev -f docker-compose.yml up \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5b3376b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,81 @@ +name: "server" + +services: + traefik: + extends: + file: traefik.yml + service: traefik + networks: + - proxynet + + nginx: + extends: + file: nginx.yml + service: nginx + networks: + - proxynet + + nginx-demo: + extends: + file: nginx-demo.yml + service: nginx-demo + networks: + - proxynet + + node-demo: + extends: + file: node-demo.yml + service: node-demo + networks: + - proxynet + #- internal + + postgres: + extends: + file: postgres.yml + service: postgres + networks: + - proxynet + #- internal + + pgadmin: + extends: + file: pgadmin.yml + service: pgadmin + networks: + - proxynet + + gitea: + extends: + file: gitea.yml + service: gitea + networks: + - proxynet + + gitea-cache: + extends: + file: gitea-cache.yml + service: gitea-cache + networks: + - proxynet + + initContainers: + container_name: volume-permissions + image: busybox:1.36.1-glibc + + command: > + sh -c "touch /letsencrypt/acme.json && + chmod -Rv 600 /letsencrypt/* && + chown 65532:65532 /letsencrypt/acme.json && + chmod 755 /init-db/init-database.sh" + #command: ["sh", "-c", "touch /letsencrypt/acme.json && chmod -Rv 600 /letsencrypt/* && chown 65532:65532 /letsencrypt/acme.json && chmod 755 /init-db/init-database.sh"] + volumes: + - ./secrets/letsencrypt:/letsencrypt + - ./init-db:/init-db + +networks: + proxynet: + driver: bridge + external: false + #internal: + diff --git a/gitea-cache.yml b/gitea-cache.yml new file mode 100644 index 0000000..5056258 --- /dev/null +++ b/gitea-cache.yml @@ -0,0 +1,16 @@ +services: + gitea-cache: + container_name: gitea-cache + image: redis:7.2.5-alpine3.20 + restart: always + networks: + - proxynet + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 15s + timeout: 3s + retries: 30 + logging: + driver: "json-file" + options: + max-size: "1m" \ No newline at end of file diff --git a/gitea.yml b/gitea.yml new file mode 100644 index 0000000..147ae8b --- /dev/null +++ b/gitea.yml @@ -0,0 +1,57 @@ +services: + gitea: + image: gitea/gitea:1.22.0 + container_name: gitea + env_file: + - ./secrets/vars.env + environment: + - APP_NAME="Gitea" + - USER_UID=1000 + - USER_GID=1000 + - USER=git + - RUN_MODE=prod + - DOMAIN=gitea.${DOMAIN} + + - SSH_DOMAIN=gitea.${DOMAIN} + - HTTP_PORT=3000 + - ROOT_URL=https://gitea.${DOMAIN} + - SSH_PORT=222 + - SSH_LISTEN_PORT=22 + #- DB_TYPE=sqlite3 + - GITEA__cache__ENABLED=true + - GITEA__cache__ADAPTER=redis + - GITEA__cache__HOST=redis://gitea-cache:6379/0?pool_size=100&idle_timeout=180s + - GITEA__cache__ITEM_TTL=24h + + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=postgres:5432 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=${GITEA_DB_PW} + restart: always + networks: + - proxynet + depends_on: + traefik: + condition: service_started + postgres: + condition: service_started + gitea-cache: + condition: service_started + labels: + - "traefik.enable=true" + - "traefik.http.routers.gitea.rule=Host(`gitea.${DOMAIN}`)" + - "traefik.http.routers.gitea.entrypoints=https" + - "traefik.http.routers.gitea.service=gitea-service" + - "traefik.http.services.gitea-service.loadbalancer.server.port=3000" + logging: + driver: "json-file" + options: + max-size: "1m" + volumes: + - ./data/gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "222:22" \ No newline at end of file diff --git a/init-db/checkers.sql b/init-db/checkers.sql new file mode 100644 index 0000000..e55cbd2 --- /dev/null +++ b/init-db/checkers.sql @@ -0,0 +1,3 @@ +CREATE DATABASE checkers; +CREATE USER checkers WITH ENCRYPTED PASSWORD '477iyetc44i2th6za8r7'; +GRANT ALL PRIVILEGES ON DATABASE checkers TO checkers; \ No newline at end of file diff --git a/init-db/init-database.sh b/init-db/init-database.sh new file mode 100644 index 0000000..03fac93 --- /dev/null +++ b/init-db/init-database.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER checkers WITH ENCRYPTED PASSWORD '477iyetc44i2th6za8r7'; + CREATE DATABASE checkers; + GRANT ALL PRIVILEGES ON DATABASE checkers TO checkers; + ALTER DATABASE checkers OWNER TO checkers; + + CREATE USER gitea WITH ENCRYPTED PASSWORD 'irvjyvqp8c94e8tf2gq5'; + CREATE DATABASE gitea; + GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; + ALTER DATABASE gitea OWNER TO gitea; +EOSQL diff --git a/nginx.yml b/nginx.yml new file mode 100644 index 0000000..186d80e --- /dev/null +++ b/nginx.yml @@ -0,0 +1,12 @@ +services: + nginx: + container_name: nginx + image: nginx:1.27.0-alpine3.19 + restart: always + networks: + - proxynet + labels: + - "traefik.enable=true" + - "traefik.http.routers.nginx.rule=Host(`${DOMAIN}`)" + volumes: + - ./www/main:/usr/share/nginx/html diff --git a/pgadmin.yml b/pgadmin.yml new file mode 100644 index 0000000..52904e4 --- /dev/null +++ b/pgadmin.yml @@ -0,0 +1,21 @@ +services: + pgadmin: + container_name: pgadmin + image: dpage/pgadmin4:8.6 + restart: always + networks: + - proxynet + user: '$UID:$GID' + env_file: + - ./secrets/vars.env + labels: + - "traefik.enable=true" + - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.${DOMAIN}`)" + - "traefik.http.routers.pgadmin.middlewares=pgadmin-auth" + - "traefik.http.middlewares.pgadmin-auth.basicauth.usersfile=/httpauth/usersfile.htpasswd" + environment: + PGADMIN_CONFIG_SERVER_MODE: 'False' + PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False' + volumes: + - ./data/pgadmin:/var/lib/pgadmin + - ./secrets/httpauth:/httpauth \ No newline at end of file diff --git a/postgres.yml b/postgres.yml new file mode 100644 index 0000000..62280d2 --- /dev/null +++ b/postgres.yml @@ -0,0 +1,22 @@ +services: + postgres: + container_name: postgres + image: postgres:16.3-alpine3.19 + restart: always + networks: + - proxynet + env_file: + - ./secrets/vars.env + environment: + PG_DATA: /var/lib/postgresql/data + POSTGRES_USER: admin + POSTGRES_DB: postgres + volumes: + - ./data/pgdata:/var/lib/postgresql/data + #- ./init-db:/docker-entrypoint-initdb.d + - ./init-db/init-database.sh:/docker-entrypoint-initdb.d/init-database.sh + labels: + - "traefik.enable=true" + - "traefik.tcp.routers.postgresql.rule=HostSNI(`*`)" + - "traefik.tcp.services.postgresql.loadbalancer.server.port=5432" + - "traefik.tcp.routers.postgresql.entrypoints=postgres" \ No newline at end of file diff --git a/prod.sh b/prod.sh new file mode 100644 index 0000000..d88373e --- /dev/null +++ b/prod.sh @@ -0,0 +1 @@ +docker compose --env-file .env.prod -f docker-compose.yml up \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..b3b2a0d --- /dev/null +++ b/readme.md @@ -0,0 +1 @@ +Srerver Docker Config \ No newline at end of file diff --git a/secrets/development.env b/secrets/development.env new file mode 100644 index 0000000..c80aa73 --- /dev/null +++ b/secrets/development.env @@ -0,0 +1,25 @@ +PORT=5000 +POSTGRES_HOST=postgres +POSTGRES_USER=checkers +POSTGRES_DB=checkers +POSTGRESS_PASSWORD=477iyetc44i2th6za8r7 +POSTGRES_PASSWORD=477iyetc44i2th6za8r7 +POSTGRESS_PORT=5432 +POSTGRES_PORT=5432 +PRIVATE_KEY=secret_key_safasf +JWT_ACCESS_SECRET=7xTJ7WmRGZHGZGRih9w6pLSLvcbz2jpM +JWT_REFRESH_SECRET=ikuwEkxy2xctmSpQLpfw4vdGs6bk9dq3 +SMTP_HOST="smtp.beget.com" +SMTP_PORT=465 +X_SMTP_USER=checkers@rozenlab.com +SMTP_USER=messenger@rozenlab.com +X_SMTP_PASSWORD=X$sory79bak3yen3jzba +SMTP_PASSWORD=M$sory79bak3yen3jzba +API_URL=https://chback.rozenlab.com:7878 +XCLIENT_URL=https://192.168.1.2:9500 +CLIENT_URL=https://localhost +ACCESS_TOKEN_MAX_AGE=70d +REFRESH_TOKEN_MAX_AGE=70d +COOKIE_REFRESH_TOKEN_MAX_AGE=6048000000 +XHTTPS_ENABLE=false +HTTPS_ENABLE=true \ No newline at end of file diff --git a/secrets/httpauth/usersfile.htpasswd b/secrets/httpauth/usersfile.htpasswd new file mode 100644 index 0000000..ea84bf3 --- /dev/null +++ b/secrets/httpauth/usersfile.htpasswd @@ -0,0 +1 @@ +admin:$apr1$yqPJkrsT$3QLU4eis81kl81STzRmQK/ \ No newline at end of file diff --git a/secrets/letsencrypt/acme.json b/secrets/letsencrypt/acme.json new file mode 100644 index 0000000..936ca3c --- /dev/null +++ b/secrets/letsencrypt/acme.json @@ -0,0 +1,44 @@ +{ + "le": { + "Account": { + "Email": "426742@gmail.com", + "Registration": { + "body": { + "status": "valid", + "contact": [ + "mailto:426742@gmail.com" + ] + }, + "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/1738625302" + }, + "PrivateKey": "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", + "KeyType": "4096" + }, + "Certificates": [ + { + "domain": { + "main": "checkerwars.com" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY2ekNDQk5PZ0F3SUJBZ0lTQlBYYmN2QVJXMmQxaVZ3UHVuOHpMalpSTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlOREExTWpFeE5UUXhNVE5hRncweU5EQTRNVGt4TlRReE1USmFNQm94R0RBV0JnTlZCQU1UCkQyTm9aV05yWlhKM1lYSnpMbU52YlRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUIKQU1iVzJoajk2ZllhTFFzUVRuYmNEYVlrdDVNN2N2S09aYWpieEM4ZXUwcENESjE0K01GdDBuMys3YkJZYURPVgpza1dJWEtsV245dlROUzJCNEFBODl0UjJxczdiQm8vekYrMGVvN09DMUZ3WlI5T2hQdTJqdWhPbTBXQ0x6OFRSCkFpcDRKd3JxcFZlY0FqUEZVOU5PYnZqbzFRSTBCN1NUMWpjYVdRb29ybXc1MllmODI5YnFFTDZGT0EvalBzbTEKK2RMWEJUZ2lnU1V5UnRGMWx0UnlHTHMyalhzdktpaEdoZ2N3S0FFNlpUUHI0OUdzSmUvbVpXRUJkUzVQaU1TegpNd3JnSkJEYWUvSkE4MGlVdEEyOGZBSG1FTURwa1Z5U1pyTnZ4NVNqMmRIOFRCUlN1aEFGV1VFdXNvTzdJWGx1Cm85NlZjVlEvc0M3b3BCY3N2dE02cjllek9Wa3RJS1RzRXo3ZS9qd081RU00NHJiRERieFNVUHh4dDB5enI3WlQKeUVIUXc1WXZaYVpIdXd2L1ptMlpiMVd4SmtvVmdza1hTWWFHeWxURmNqSTd2NmJmQXBRTDdrZ2VTL1A3UnNYdgpDd0FraGY5d1gxR3dadTNlZjhKb2oyQUxCMVVnSTF2YWw0ZjZXNlIrVkN0bzdZcEJTVGc1dHNOS0lWK2dFT2ZYCkx5d1JNejYwLzdydmNoR2FJWlVtYUV5c1NpYlRiQTNkNzJsT0o3aXJkVWE3Y3NFNW1qN0taOUdHc2hkYjY5NkwKSzFKVmZQYUphZnp5cTlOVlhoTUV3MnRJY0YzMit6eTdIZjAwbklJdXgxVFZJbEtadkxkWFJwUDNhT2lCZ2ZLWAoyTXdjVTl2dmRTcGEva2pRblRKMHR5QmJudUl3dzRjZ3hUajdaM2dGa2JFeEFnTUJBQUdqZ2dJUk1JSUNEVEFPCkJnTlZIUThCQWY4RUJBTUNCYUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0dBUVVGQndNQ01Bd0cKQTFVZEV3RUIvd1FDTUFBd0hRWURWUjBPQkJZRUZBQUVqYjl4RWN0TlV3OVhRdXJRRlUwYjFhdUtNQjhHQTFVZApJd1FZTUJhQUZCUXVzeGUzV0ZiTHJsQUpRT1lmcjUyTEZNTEdNRlVHQ0NzR0FRVUZCd0VCQkVrd1J6QWhCZ2dyCkJnRUZCUWN3QVlZVmFIUjBjRG92TDNJekxtOHViR1Z1WTNJdWIzSm5NQ0lHQ0NzR0FRVUZCekFDaGhab2RIUncKT2k4dmNqTXVhUzVzWlc1amNpNXZjbWN2TUJvR0ExVWRFUVFUTUJHQ0QyTm9aV05yWlhKM1lYSnpMbU52YlRBVApCZ05WSFNBRUREQUtNQWdHQm1lQkRBRUNBVENDQVFRR0Npc0dBUVFCMW5rQ0JBSUVnZlVFZ2ZJQThBQjFBRDhYClMwL1hJa2RZbEIxbEhJUytEUkx0a0RkL0g0VnE2OEcvS0lYcytHUnVBQUFCajV3SFJTUUFBQVFEQUVZd1JBSWcKUlgxTEwxQVZCUHF6bDZGVGJyNUtkSXFXRC9YenlHeDR1VjhDWXdERU5Vd0NJRGhLMXBUKzBNWTNIRTVOWjF3UQpzZDVuUUlKZDlzVVlCSnUzSkhSWklCQjBBSGNBR1pnUWNRbncxbEl1TUlEU25qOWt1NE51S016NUQxS083dC9PClNqOFd0TW9BQUFHUG5BZEZNQUFBQkFNQVNEQkdBaUVBdUc3UTVSQjRUVlBBTVE2bVJyaTVSK3ZPWktHUThkLzcKM0FpeUkyRFNuZVVDSVFEVXg0S2NLaS9CYWVIdTZ3UWI2bjJMOWFDWUljNDd2cTVVUWl6WnJZcDN3VEFOQmdrcQpoa2lHOXcwQkFRc0ZBQU9DQVFFQXRRL3FWemZkM1NBNFNjdm5QQzExUmFZZ0ZpQS9qZ1JJL25Id1VSeW5KODk1ClVlTGRIVFFjNk1WZ0JXdkRhRDJZSUc5TmtIMGlYNG5QQ2VVcS9OS3lKM0IzeUhVdWdxUTFOT3Y3N2ZVd3g1c0QKVm1NNlA5QWpTcE5KUkJKbnlmb2RDOTFadEpBbVZURFZxeUllYjMwcTFlcGpveW9PaVl5S2g1YVA5akwyZEdqYwoyclVBNk15OFZ3cWplc2M4dEMyYjhRMlczMUpRU0FWMFlabTVYNG1QdzFZVW14Wmw0QUxlY1NLbVp6Vnh6RU01ClhnOEhkV1ZrU2VmVC9qb2FldWMrK1NzWlcxaTBhd2g2VTNUWWJhWkRxaWNtYm5uTk0rN3RRUUhnWWMzTFMrSDIKUS9ML2Nkakw4M0Ewb2Y2RkN6YXFqVm1QRzNvd1ZsRzlWSll1eWlRblBnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZGakNDQXY2Z0F3SUJBZ0lSQUpFckNFclBEQmluVS9iV0xpV25YMW93RFFZSktvWklodmNOQVFFTEJRQXcKVHpFTE1Ba0dBMVVFQmhNQ1ZWTXhLVEFuQmdOVkJBb1RJRWx1ZEdWeWJtVjBJRk5sWTNWeWFYUjVJRkpsYzJWaApjbU5vSUVkeWIzVndNUlV3RXdZRFZRUURFd3hKVTFKSElGSnZiM1FnV0RFd0hoY05NakF3T1RBME1EQXdNREF3CldoY05NalV3T1RFMU1UWXdNREF3V2pBeU1Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDaE1OVEdWMEozTWcKUlc1amNubHdkREVMTUFrR0ExVUVBeE1DVWpNd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFSwpBb0lCQVFDN0FoVW96UGFnbE5NUEV1eU5WWkxEK0lMeG1hWjZRb2luWFNhcXRTdTV4VXl4cjQ1citYWElvOWNQClI1UVVWVFZYako2b29qa1o5WUk4UXFsT2J2VTd3eTdiamNDd1hQTlpPT2Z0ejJud1dnc2J2c0NVSkNXSCtqZHgKc3hQbkhLemhtKy9iNUR0RlVrV1dxY0ZUempUSVV1NjFydTJQM21CdzRxVlVxN1p0RHBlbFFEUnJLOU84WnV0bQpOSHo2YTR1UFZ5bVorREFYWGJweWIvdUJ4YTNTaGxnOUY4Zm5DYnZ4Sy9lRzNNSGFjVjNVUnVQTXJTWEJpTHhnClozVm1zL0VZOTZKYzVsUC9Pb2kyUjZYL0V4anFtQWwzUDUxVCtjOEI1ZldtY0JjVXIyT2svNW16azUzY1U2Y0cKL2tpRkhhRnByaVYxdXhQTVVnUDE3VkdoaTlzVkFnTUJBQUdqZ2dFSU1JSUJCREFPQmdOVkhROEJBZjhFQkFNQwpBWVl3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGQndNQk1CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3SFFZRFZSME9CQllFRkJRdXN4ZTNXRmJMcmxBSlFPWWZyNTJMRk1MR01COEdBMVVkSXdRWU1CYUEKRkhtMFdlWjd0dVhrQVhPQUNJaklHbGoyNlp0dU1ESUdDQ3NHQVFVRkJ3RUJCQ1l3SkRBaUJnZ3JCZ0VGQlFjdwpBb1lXYUhSMGNEb3ZMM2d4TG1rdWJHVnVZM0l1YjNKbkx6QW5CZ05WSFI4RUlEQWVNQnlnR3FBWWhoWm9kSFJ3Ck9pOHZlREV1WXk1c1pXNWpjaTV2Y21jdk1DSUdBMVVkSUFRYk1Ca3dDQVlHWjRFTUFRSUJNQTBHQ3lzR0FRUUIKZ3Q4VEFRRUJNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUNBUUNGeWs1SFBxUDNoVVNGdk5WbmVMS1lZNjExVFI2VwpQVE5sY2xRdGdhRHF3KzM0SUw5ZnpMZHdBTGR1Ty9aZWxON2tJSittNzR1eUErZWl0Ulk4a2M2MDdUa0M1M3dsCmlrZm1aVzQvUnZUWjhNNlVLKzVVemhLOGpDZEx1TUdZTDZLdnpYR1JTZ2kzeUxnamV3UXRDUGtJVno2RDJRUXoKQ2tjaGVBbUNKOE1xeUp1NXpsenlaTWpBdm5uQVQ0NXRSQXhla3JzdTk0c1E0ZWdkUkNuYldTRHRZN2toK0JJbQpsSk5Yb0IxbEJNRUtJcTRRRFVPWG9SZ2ZmdURnaGplMVdyRzlNTCtIYmlzcS95Rk9Hd1hEOVJpWDhGNnN3Nlc0CmF2QXV2RHN6dWU1TDNzejg1SytFQzRZL3dGVkROdlpvNFRZWGFvNlowZitsUUtjMHQ4RFFZemsxT1hWdThycDIKeUpNQzZhbExiQmZPREFMWnZZSDduN2RvMUFabHM0STlkMVA0am5rRHJRb3hCM1VxUTloVmwzTEVLUTczeEYxTwp5SzVHaEREWDhvVmZHS0Y1dStkZWNJc0g0WWFUdzdtUDNHRnhKU3F2MyswbFVGSm9pNUxjNWRhMTQ5cDkwSWRzCmhDRXhyb0wxKzdtcnlJa1hQZUZNNVRnTzlyMHJ2WmFCRk92VjJ6MGdwMzVaMCtMNFdQbGJ1RWpOL2x4UEZpbisKSGxVanI4Z1JzSTNxZkpPUUZ5LzlyS0lKUjBZLzhPbXd0LzhvVFdneTFtZGVIbW1qazdqMW5Zc3ZDOUpTUTZadgpNbGRsVFRLQjN6aFRoVjErWFdZcDZyamQ1SlcxemJWV0VrTE54RTdHSlRoRVVHM3N6Z0JWR1A3cFNXVFVUc3FYCm5MUmJ3SE9vcTdoSHdnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS3dJQkFBS0NBZ0VBeHRiYUdQM3A5aG90Q3hCT2R0d05waVMza3p0eThvNWxxTnZFTHg2N1NrSU1uWGo0CndXM1NmZjd0c0Zob001V3lSWWhjcVZhZjI5TTFMWUhnQUR6MjFIYXF6dHNHai9NWDdSNmpzNExVWEJsSDA2RSsKN2FPNkU2YlJZSXZQeE5FQ0tuZ25DdXFsVjV3Q004VlQwMDV1K09qVkFqUUh0SlBXTnhwWkNpaXViRG5aaC96YgoxdW9Rdm9VNEQrTSt5Ylg1MHRjRk9DS0JKVEpHMFhXVzFISVl1emFOZXk4cUtFYUdCekFvQVRwbE0rdmowYXdsCjcrWmxZUUYxTGsrSXhMTXpDdUFrRU5wNzhrRHpTSlMwRGJ4OEFlWVF3T21SWEpKbXMyL0hsS1BaMGZ4TUZGSzYKRUFWWlFTNnlnN3NoZVc2ajNwVnhWRCt3THVpa0Z5eSswenF2MTdNNVdTMGdwT3dUUHQ3K1BBN2tRemppdHNNTgp2RkpRL0hHM1RMT3Z0bFBJUWRERGxpOWxwa2U3Qy85bWJabHZWYkVtU2hXQ3lSZEpob2JLVk1WeU1qdS9wdDhDCmxBdnVTQjVMOC90R3hlOExBQ1NGLzNCZlViQm03ZDUvd21pUFlBc0hWU0FqVzlxWGgvcGJwSDVVSzJqdGlrRkoKT0RtMncwb2hYNkFRNTljdkxCRXpQclQvdXU5eUVab2hsU1pvVEt4S0p0TnNEZDN2YVU0bnVLdDFScnR5d1RtYQpQc3BuMFlheUYxdnIzb3NyVWxWODlvbHAvUEtyMDFWZUV3VERhMGh3WGZiN1BMc2QvVFNjZ2k3SFZOVWlVcG04CnQxZEdrL2RvNklHQjhwZll6QnhUMis5MUtscitTTkNkTW5TM0lGdWU0akREaHlERk9QdG5lQVdSc1RFQ0F3RUEKQVFLQ0FnRUFwRVJQUGFKWExLZUhXc0tIOEEzdmdMaUlxQ3ZPMUsvck1Fc09rbGJ6SjIvVmVDcStaeDVSYlNHMApQNkZweEdRQk9ReGtjTWxObTQrck9RTTRpVG5VT01Zb2FtZnJ6ZlJvYWM2TU12cjhjWEc1TXc3ZEsvbTgrZ3N3Cm9uQWVuMXlFUzQyanc1TUNNWlNEQlQ0WitGR3R3QmlxRVAzbTk3bkNtUmM5US9WRDA4a2Urd2RjbnZvVUJ6R0wKbFNTSmRKN1AydTBrTkxIY3Uxd0R3WHRCdGhUa2RaV2w0SVNnY1ZHQjNHSmVTbFZ4MGlrb3RzbGZOZ2ZDN1JjRgpOZE1qREUxMjk1OGdiSVB6TGJtV3d2bUdubXAra0JyKzhFQ0ZoRksyWWJzUXlLMXNmOXZOQm1VcHJaNmRsQW4rCkZISCtQNUcxODJiR2ozRm1IZnEzeFNXRUtJRXRUckJKM09EWTJ0N1M1c3ByQnBVN2xmbmxIVi9RK0VkOTlzS0IKeGF4U25DM1VySEg1YWJzUUdZY1krK0VEZjdCaHJvVGgrak9oOTYrdERZRmFlMHk1djVZZGRUa0VXTGxCNTR6Qgp4b052MFIrVS9CUDJZV21VLzhGWGJ5cVJBTkxYcm92ZW9IL0hxd0pUTUxGd091bERjRWgzaUdUN3EvakxPYXMrCnIxT3pSc1lWSDMvTEN5Skd2TjZEbC9LSUdxa1NBMlBjc3RDamhZSUk4S2ZmbTlpbXREV1dOOU10cjFFRFZpNHgKcWdsQlhWMFg0VUZEekZLSEVFYnlDQWZ6YzBuMTd1eHNzdHlCKzlrVFNDeUQ5V2lkNy9NbjRlQitvV0JrVjZlaQpUc2EzMmpaRjVPamZLV3lEU05PQU90eDE4S1RiWkM2aUY0WXE4bXh3ejhxNHRsbmZFUmtDZ2dFQkFNanRUM0RXCkRMbGhtd0JaWkowSjBzYk9GSXlJUUtQL3hBME9iRm9JN0lONDU2a3AyVzQ4WnF4L3MxM0dPaEE3dUhhWCt4eHgKa2NKR0poYjlSTG9PcGNSZng3R1ZvOUxLRm1WMEpzWGNKQ1RGRTllOEFUZ3I3Vy9FSUpIYkZGUUhJelpuM2xNUgo3THc1YUFLSVJpZDVHcjBSV1prMXRHUW1FTVRBazI3ZzBGVlJGNmFwcWoxZTQ0UWsrdlQxS3VYcitZdVhWbG1QCjhLb2FNMUMyb2dlemxmbnhDaUJTOXpBRUZnSGRJaUpXaCtMQ2srUjFKYy9KNkRqVXJ4MW9sdmptM3lob1NIajAKRThXNWFEL0FuU0s5R01EbE9SV2N6R2FUY1lObGNpNndRaVIrL28yZWZOR0JzM0hOMlZXNjIvcXB6MzA1YkJ4YgpmZExIWUxxcG1QK0lZdHNDZ2dFQkFQMVhES25vczNRWTBFZjdaS3NvMlFkZDlFaFRtOFpGREdZWU5VN1hYVlcxCjNFMlJ5NCswTHFlS3V0a0dqQU01S1RQdkZSVFV3UGNmMnJ5NG43UWpIb3NUdjhubitzZFdaN0FVYzBlcytobE4KTW1EaDFneEtyN2J6ay9SWW1FL1NvRkQyWGx6OHpqSUpWMjJhZWRLVm04SjR4TU43THU0NDhCSm5KbGNZdU9nSApIUzJZcis2NXVkTFBvQmkwWjZ5VXZWRVBKNjIzNHBWQXRkNHlJeGZDSHhOTGdOU0F0NEpsSXNtTnh1SVg5YlRiCmpoV2VMOWorN1UrTDdheEVyWWF3RE1DV2QxTWc5eVZFTWs1WXBZL2pIcFFtVGVuV2JsWEYrenlaRXNkQll1cEwKcTArNkl1T3RFQ2s3M2ViUmNXeWlCcFBVWXZkM2lHN00yVkxlSFBpWjYrTUNnZ0VCQUtZUmRtSmxtRmkwY3A5RQpRMk9FVmdEWkhhVFZqTSsvdXJPcjR5UTdVZmlNT3JUWGtRMkt3TFg4U2l6TWhQc2IwU2U4RCtGL2dLQ1l5Q3lpCkltYkJhb00zUXQ3bE5tVW5nSUZVRWlQaEFzS2RYUHduT0w3TGw5Q1R3dk9xcGsrWklxSjZFUWlKdlNnSkxvMUIKUXZLbkp0RjBBS0VnQVR2eE5sVFlja0xuYjJuRXY0NlJsdEpvbGhXSFZ5Q1ZibUpndW4yRWxPc3JqQmViMWlQMAovMURzUHA0NWVrd2pKb2s2SjFKZENqUmxYcVN1ZS93TVV6Yzl3MEVOa0xyMjBpbGc4THIrRGtCaVErRmRqK3Q1CmNLYmdzZy9rcFZ6V254NTg2UXBZRTVyQk5ibmllTlJtVlBYNGhHOGdXMngvS0FneXgvclJOaWp0K2IzMzZsdjkKaHlaVS9KY0NnZ0VCQUsvb2U5Q1cxZFJ0VG1KTStzK21JMXhzTHF6eDhSNHczN1VjWmhlQ2p6cHVkclFkNGh5OApYaERUMFgzVWYrL1ZCdmthcjZheE8vUGNXSVBtSm01c1hFN3h2YUF5eGYwWDBCT0JmN0pyTjVYTjlvY3pDTytzCkJHcWlvejl0TFFWd0dRVmVySk1ncndRclhGdXNnWjVwWjZnWE4za00xYjl3SmJLQmtTdTA3TitmNFBEQ0xwY3kKdXdiWVNEQWZSRVdmV2YwbzZzSkRCci9nR09oYUkrZmhVTGFUSExkeFVQcm53c24wK2Y0UDZQcFY0VWk5ZURmUwplM0ZhbGdPaUJHT2JacDlyV3h1THJsQmdGQlkyazI5Zm91SDMzdTNaaU85aDgxdFdacVdZajFoa2htVnJ0OElqCmJ5OVNkSGhMUWRqT2dJYXhXSzdBZnltQWIvNk1YODEzQTBVQ2dnRUJBTGJYemx2T3M4NnZsTTFRQkEweEV6dXcKSjNTampKRG83YjhRS1J0cFd2TzEzcjFpMFJ2YVZiV0RBWVJpZ0Q5N0VEaWtTeFkzNnB2dk5rZzl2bTAySzliaQpwMTNYZ2JDNnNCQTl1VmgwWG9HZWJqbCs1WXlUNFJoRFY5eFRVZTI4UXM0cmNZYXRxdFFzU3NadmdRbVBMellDCnZLWnJVUHFvU29LNGs3YWZ3QStkQ3pQa29RSXhUOU5DWTJtYWFqQkVaYVlVeTV6RzFzTjhGRVpyRnl4cDJqRUMKb3h3d093Q1ltWmFxazVzMWh1RXViMlhTMUZsMXIyN2o5TXRSVlNTeXl2NFI4bXlSaHlkM05zRzJqVXZIRDNPZApYV2xFZTdqUWJNZ01ybU9uYWtEWmVQOXFtRDNEbjQ3Y01PdkJNVkI4YkJZZ1RmbXJVeDNpYkhtMXl0RVdsQnM9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==", + "Store": "default" + }, + { + "domain": { + "main": "traefik.checkerwars.com" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYvRENDQk9TZ0F3SUJBZ0lTQk5lRWpXbXBtOVBTYUVueDNPVHhqdHl1TUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlOREExTWpFeE9ETXdOVGxhRncweU5EQTRNVGt4T0RNd05UaGFNQ0l4SURBZUJnTlZCQU1UCkYzUnlZV1ZtYVdzdVkyaGxZMnRsY25kaGNuTXVZMjl0TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEEKTUlJQ0NnS0NBZ0VBcUxCTjU2dkRvdGpRSVZqTTc2V1EvUjZXWHhTK2U1MGcwc2tBVE15ZzA5cUcyWWhTdHZlVgpmZG5IWExqRFZ5SHFsRFJlbmRBWEg0SUtFaE52RGZjd3ZRNnpqeEdkZzZFUFowcnI0eU0xbEZLbTAxR2pqbzFpCk9uN1lYQUJHRE53V1B5emFoTFZ4cTNhZDlReC84V05yS0I5dTV1SVdMT05tVElhVWltZi9OYUNlYUpBOFJySWIKVHU3L1dTQkdDT2dQVWNEUU9oUjBuRHIrbWttZlpnU1BBR0xHb3lUZDdvbU5MOE9hVCtsWnZkcUNDQ2tZU3FBZgprQUZCUmE4bmh0Y3Y4UEtSaTR6VWlmdVI3MVVrcDdLT0J0MmRXK1ZxeHhFV1lsRFdtZFNaVVNybytHMXdJUTkrCnVuTnJ4VHVIVXVpMnJXZkErRFJKMGJYamQ3bjFCUVE0a0RvSDRQR0Z1R3lhT0F3bWVWQUdHbzVFSjFEaDZJSEEKdjd5bWR0UEJLd1JpUHI3ZnBwUXROdXh0dzVyUzdvekZUS2tpdk1zbjNBdU9zT09ZOElVYWM2b3pjVEhpeURCTApDY3MyNm5mZENsK1h3YlBaUnQvSnlib3NTUjB4Q1ROVlNvY1FxdG9MbmFHWnZGTm5CVHZOeU14QzNuVTF4ekg2CkhVdHNtUG1GcTBWUGViMXJseDF3VzkxaEtaak5sUTVWSVYzYnQ0RXgvb2ZOaE9SbXdrOTNIUE42R2dwVSt3eWUKa1lyL2Q2NWlUZkhRclpXY2VkeTQ4NHAvbHliSlRVeFFaYU5Vb0ZGUjZMYzJMaU05aFJIdVdTMzJvMXNKNFFnawpabWQxYis1enlweCtlVzZwYURnbzBDaER3TlRJOFJYNXJlS0N6MWdlVWxab3p1NnloMmhIdkhjQ0F3RUFBYU9DCkFob3dnZ0lXTUE0R0ExVWREd0VCL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUIKQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBZEJnTlZIUTRFRmdRVXd0aWZKUTNBWVkweVpxTkMzNjg5TGc5UApMajB3SHdZRFZSMGpCQmd3Rm9BVUZDNnpGN2RZVnN1dVVBbEE1aCt2bllzVXdzWXdWUVlJS3dZQkJRVUhBUUVFClNUQkhNQ0VHQ0NzR0FRVUZCekFCaGhWb2RIUndPaTh2Y2pNdWJ5NXNaVzVqY2k1dmNtY3dJZ1lJS3dZQkJRVUgKTUFLR0ZtaDBkSEE2THk5eU15NXBMbXhsYm1OeUxtOXlaeTh3SWdZRFZSMFJCQnN3R1lJWGRISmhaV1pwYXk1agphR1ZqYTJWeWQyRnljeTVqYjIwd0V3WURWUjBnQkF3d0NqQUlCZ1puZ1F3QkFnRXdnZ0VGQmdvckJnRUVBZFo1CkFnUUNCSUgyQklIekFQRUFkd0JJc09OcjJxWkhOQS9sYWdMNm5URHJIRklCeTFiZExJSFp1NytyT2RpRWN3QUEKQVkrY29yT29BQUFFQXdCSU1FWUNJUURhaG9CVXF6Z1JieCs0a3BIZWljbFVJLzlIMGpJU2JUNnhaOUliTElZWApiUUloQUlGeElDcUFjbnpvTEp1TG14dFQySlhHZUxxem9HRVEvNGdQSVRBcTJxUUpBSFlBR1pnUWNRbncxbEl1Ck1JRFNuajlrdTROdUtNejVEMUtPN3QvT1NqOFd0TW9BQUFHUG5LS3o5Z0FBQkFNQVJ6QkZBaUVBbnVCY09pRlEKZnRUQy9aZEVzMG05RW5lMzM5VE00SFNXMG1Za2tkeDVUa0VDSUVKQmFUYndhcktOZzRjR0QzWjlqQU14R1BmOQo4STFpM2REYjhBK2xVaWRUTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFDRThQQzIrSTh6MlN3U0E2Ti9PU09jCndYbzMzYjJpUHVpTFpwWEFYSE1uVU5TUFllK3RMSnhMbmhqYkxDQUcwdnlDckFvcUYvL1VoREFVSC9iV1h5Q0kKM2FSYjNLeXp3cEI0SjQveTNlbjJwcys2KzBtd2huVS9YaEhoNGtxbFp3MFJqQVp0U2I1Wm1xaDhJUmZIZ2NsSApQUTYvZlJaTU05a3B2MFZFUUhKZ0ZPeENSeVREUlNzbmpoeEV3VlVLYjVUNzRyRUIyV0F6cUZlNjJydUhNMG1OCkQzOEtwd09Ka2xodEhxa1oxUEZ1RDFDaVdCY0QxR3NkUVZScmR0cTZPZVBPMnJtc0ExU3k3RUhEMG1rYUdtdjQKdlplNTFaMkRjU09iNjRLVlNRTmdiaStBUmxFRzQ0QTV1VlZJNzJSOC9sdWd3Qk1iTDNscjZRY2xWblo2VjVCZAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRkZqQ0NBdjZnQXdJQkFnSVJBSkVyQ0VyUERCaW5VL2JXTGlXblgxb3dEUVlKS29aSWh2Y05BUUVMQlFBdwpUekVMTUFrR0ExVUVCaE1DVlZNeEtUQW5CZ05WQkFvVElFbHVkR1Z5Ym1WMElGTmxZM1Z5YVhSNUlGSmxjMlZoCmNtTm9JRWR5YjNWd01SVXdFd1lEVlFRREV3eEpVMUpISUZKdmIzUWdXREV3SGhjTk1qQXdPVEEwTURBd01EQXcKV2hjTk1qVXdPVEUxTVRZd01EQXdXakF5TVFzd0NRWURWUVFHRXdKVlV6RVdNQlFHQTFVRUNoTU5UR1YwSjNNZwpSVzVqY25sd2RERUxNQWtHQTFVRUF4TUNVak13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUM3QWhVb3pQYWdsTk1QRXV5TlZaTEQrSUx4bWFaNlFvaW5YU2FxdFN1NXhVeXhyNDVyK1hYSW85Y1AKUjVRVVZUVlhqSjZvb2prWjlZSThRcWxPYnZVN3d5N2JqY0N3WFBOWk9PZnR6Mm53V2dzYnZzQ1VKQ1dIK2pkeApzeFBuSEt6aG0rL2I1RHRGVWtXV3FjRlR6alRJVXU2MXJ1MlAzbUJ3NHFWVXE3WnREcGVsUURScks5TzhadXRtCk5IejZhNHVQVnltWitEQVhYYnB5Yi91QnhhM1NobGc5RjhmbkNidnhLL2VHM01IYWNWM1VSdVBNclNYQmlMeGcKWjNWbXMvRVk5NkpjNWxQL09vaTJSNlgvRXhqcW1BbDNQNTFUK2M4QjVmV21jQmNVcjJPay81bXprNTNjVTZjRwova2lGSGFGcHJpVjF1eFBNVWdQMTdWR2hpOXNWQWdNQkFBR2pnZ0VJTUlJQkJEQU9CZ05WSFE4QkFmOEVCQU1DCkFZWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdIUVlEVlIwT0JCWUVGQlF1c3hlM1dGYkxybEFKUU9ZZnI1MkxGTUxHTUI4R0ExVWRJd1FZTUJhQQpGSG0wV2VaN3R1WGtBWE9BQ0lqSUdsajI2WnR1TURJR0NDc0dBUVVGQndFQkJDWXdKREFpQmdnckJnRUZCUWN3CkFvWVdhSFIwY0RvdkwzZ3hMbWt1YkdWdVkzSXViM0puTHpBbkJnTlZIUjhFSURBZU1CeWdHcUFZaGhab2RIUncKT2k4dmVERXVZeTVzWlc1amNpNXZjbWN2TUNJR0ExVWRJQVFiTUJrd0NBWUdaNEVNQVFJQk1BMEdDeXNHQVFRQgpndDhUQVFFQk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQ0Z5azVIUHFQM2hVU0Z2TlZuZUxLWVk2MTFUUjZXClBUTmxjbFF0Z2FEcXcrMzRJTDlmekxkd0FMZHVPL1plbE43a0lKK203NHV5QStlaXRSWThrYzYwN1RrQzUzd2wKaWtmbVpXNC9SdlRaOE02VUsrNVV6aEs4akNkTHVNR1lMNkt2elhHUlNnaTN5TGdqZXdRdENQa0lWejZEMlFRegpDa2NoZUFtQ0o4TXF5SnU1emx6eVpNakF2bm5BVDQ1dFJBeGVrcnN1OTRzUTRlZ2RSQ25iV1NEdFk3a2grQkltCmxKTlhvQjFsQk1FS0lxNFFEVU9Yb1JnZmZ1RGdoamUxV3JHOU1MK0hiaXNxL3lGT0d3WEQ5UmlYOEY2c3c2VzQKYXZBdXZEc3p1ZTVMM3N6ODVLK0VDNFkvd0ZWRE52Wm80VFlYYW82WjBmK2xRS2MwdDhEUVl6azFPWFZ1OHJwMgp5Sk1DNmFsTGJCZk9EQUxadllIN243ZG8xQVpsczRJOWQxUDRqbmtEclFveEIzVXFROWhWbDNMRUtRNzN4RjFPCnlLNUdoRERYOG9WZkdLRjV1K2RlY0lzSDRZYVR3N21QM0dGeEpTcXYzKzBsVUZKb2k1TGM1ZGExNDlwOTBJZHMKaENFeHJvTDErN21yeUlrWFBlRk01VGdPOXIwcnZaYUJGT3ZWMnowZ3AzNVowK0w0V1BsYnVFak4vbHhQRmluKwpIbFVqcjhnUnNJM3FmSk9RRnkvOXJLSUpSMFkvOE9td3QvOG9UV2d5MW1kZUhtbWprN2oxbllzdkM5SlNRNlp2Ck1sZGxUVEtCM3poVGhWMStYV1lwNnJqZDVKVzF6YlZXRWtMTnhFN0dKVGhFVUczc3pnQlZHUDdwU1dUVVRzcVgKbkxSYndIT29xN2hId2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBcUxCTjU2dkRvdGpRSVZqTTc2V1EvUjZXWHhTK2U1MGcwc2tBVE15ZzA5cUcyWWhTCnR2ZVZmZG5IWExqRFZ5SHFsRFJlbmRBWEg0SUtFaE52RGZjd3ZRNnpqeEdkZzZFUFowcnI0eU0xbEZLbTAxR2oKam8xaU9uN1lYQUJHRE53V1B5emFoTFZ4cTNhZDlReC84V05yS0I5dTV1SVdMT05tVElhVWltZi9OYUNlYUpBOApSckliVHU3L1dTQkdDT2dQVWNEUU9oUjBuRHIrbWttZlpnU1BBR0xHb3lUZDdvbU5MOE9hVCtsWnZkcUNDQ2tZClNxQWZrQUZCUmE4bmh0Y3Y4UEtSaTR6VWlmdVI3MVVrcDdLT0J0MmRXK1ZxeHhFV1lsRFdtZFNaVVNybytHMXcKSVE5K3VuTnJ4VHVIVXVpMnJXZkErRFJKMGJYamQ3bjFCUVE0a0RvSDRQR0Z1R3lhT0F3bWVWQUdHbzVFSjFEaAo2SUhBdjd5bWR0UEJLd1JpUHI3ZnBwUXROdXh0dzVyUzdvekZUS2tpdk1zbjNBdU9zT09ZOElVYWM2b3pjVEhpCnlEQkxDY3MyNm5mZENsK1h3YlBaUnQvSnlib3NTUjB4Q1ROVlNvY1FxdG9MbmFHWnZGTm5CVHZOeU14QzNuVTEKeHpINkhVdHNtUG1GcTBWUGViMXJseDF3VzkxaEtaak5sUTVWSVYzYnQ0RXgvb2ZOaE9SbXdrOTNIUE42R2dwVQord3lla1lyL2Q2NWlUZkhRclpXY2VkeTQ4NHAvbHliSlRVeFFaYU5Vb0ZGUjZMYzJMaU05aFJIdVdTMzJvMXNKCjRRZ2tabWQxYis1enlweCtlVzZwYURnbzBDaER3TlRJOFJYNXJlS0N6MWdlVWxab3p1NnloMmhIdkhjQ0F3RUEKQVFLQ0FmOVcrcEV3NDEvOGw4NjVZeEJJZ1JaQmJZUWJncGExSmsvR1g5M0h1N3N4Z1h3R3JrUDRFN0VCTTBtWQpoYXd6UVVteklVMm9FYVBhbXpLV0gyOGp4RkZkS2pkcmphbXFOV0c3NE9YQU9HZG9Felh4d0NhVldsRkwyQnUzClZHektOTEZENGR6S2tNUUxwUjNOUEtTNzBvZHVLTWNHUlkwcG1CY25YajA1SUdaM1FGcHRqL0dFZ2xHU1lhbEkKUzF2Uk85YXFVTUVOTVg3dkQzdzRFYjRlM0RyZitBNTBFSTVlY0k1Y0VuOSt0Tk9SRVJuN0d6VnJSU1VCRzZTTQpTY1FYd3R6MVlCMnIxdkhBTS9jTGNOdDFuSnVlN3FZMHZCWlNqbno4TkxKeW55eHVyYkZ5WnZ0cUVKTkhrRHdCCmRyQlFENjRodTEzRW5URnk4RlpaWllqeERUd2NTdmw4dWdrRnVZaVBmaXZUZ2NBVWxlS1gwcSt4WUFuQkJnY2wKR0VucERydVNpVnJEQXcvR3VQNThSdzJoSFdnVTRsVkc0ZG9IOGhCK2U1Zlpvek03NXc1TWtxdWdWa3R5MUJJNAphWm1DelB5U0s0a09WWUF1SlVDdXd6em9RdjVyMEhJNGtwdzVxQ1lBakNidVVNYWRORVV0U3Z2Y3ROOEJFMjBaCjNPakVvRXpSdzJKSHNwOFdtMk0zRHc4dXI4bnJIWk5INHJ0b24rRUpvRzhZUjNCVndwZjdoVW84ME0yUlFNa0UKbDJDbTh5Tkp0czZTdWtaNHdxSFFDSm9BYmd3Slpia0w5QnByc3JsdElKcWZHV3pRMDlyUEs1Q1QxYzlvRGVMWQpja3hFd3ZvaW5mTEtZajBvcnhqUHgwTzZsdHJOSThreFpuYmpYZEs1NXJFWkljb0JBb0lCQVFEZkJBUUhVenNXCllhWUN1cWVBbkRsTjJkN0JwVjRUMmQvQWo3bkFjWmlxaU9iUjdKUjNBN3RPRGtzQ3BuT1VlNEFib1dUTE1LZWYKRTJDOS81SGFjeXBlaEZoVElRUFZJTjEvZUZSc2V4VUl0MWJaVDdJTXE4TkNCWlF5Tk1JZmtvMDM4MHN2dDhHdgpwd3M1ZHc5VEFRMVpPODlTYTJ4UzQreXIrcjhuOW5Yb1Z3NHhIOWxQWndWcEc5TFVsUU9WTlUwekhWSUZMbER0CnRJN1pFSTBBalpyMTZjcmZTNnBVUExUUCtodE1FS01JVVJBUitxbXZOVHZ0ZG11OWZjdkhIeFByQkJUZzFKcW4KQ09pamtWdWlQd3FCaDhsdVFxcGdhRGYzMVNYdHF3M3RFcnJZakZIelYxSEV4Y0Z3a0tTcXhQa2xKbUpNU3NQaQpOSkVCbmJwZlJuSTNBb0lCQVFEQm8xSGJtN1FhOWhQczJiOEthcTR0Rm9zUW9sUUIwVXFJSmUxU2VFbnIvdWpiCm92b2hZaUxUTHBVb2xXTmZBYWtVZFdVb2NZNEhjclB2SUh0UFo0a1lzcFcyRnJiRUM0NzNWN1FqQVNNYnV0a1kKWkV0aGpZTkcwNlZmZ012dEtpUjRHVzAwV2hHNjY1aDZtNk9NUnd6eFVBUll5QjFwVFEzUkNNZk5xU0xleHhJMgprWG5FaDlBeGFKZlhGVEQrLzUvOUxoelZNNWVUdUtXTVhKRUVMaUtUQ1EwQng5aEY0UjZQcTUrSVZ3TjlUTHJrCmF2UDlVdGlEbjFUSmRocXI0dGF0SlFSUE9xUElJMVZOTUljYVF0Mnk0K3RVeDdQd3JpTVFCMFY2c0JQWHEvSE0KUVNVanlwK0NCcnZCS2IwdjVHN3VwWHBDeXoxVHkxVzd5U3AzeE9mQkFvSUJBSGw2QkgvQTlHU0NtQnpRYzBENAoxN1h5UVFZVi82S3NnTmF3OHl0Q05UaGZEZXUzQkQrM3hxVUQ0QlAzZXVtY1EvSEkvZEE0Rm5YdDVqcFlKYWhxCkp1QUpFdHRsRm1OWFhZOTdpZkQxTWtYbkorV0RKYWNGUUh5TDhXZFBtWlg5Qy9NNEVQSlRFNnVNUCs3elRXT1gKSlNCQUZmUDlFNm9yQU5YRTVhN3M3dGk1NHI4YmJCRjJPbHBBajV5LzlvMmwxUUZNclVxcEtlZncvQVo4bjNGMwpzTHJXdUd6ZEdGQitLTGRJc3VuQi9pd2ZpN05mYUdKSml2VVVGaWZIaCtKVXFWTFFqRmJUTjlKWVpmQUMwM2tUCkFiUUF0TlhjZGxYQkx3dE9EVFRpZ2RscTVGL2tQeGRmcnVpU0Y0WXJJNmJwV0JUR1RiRGs0TUlzZy9mdlpIOVYKTGcwQ2dnRUJBTDFmMm9pcUtHUk4wWUxNR2JnNFNRdXpobUhJUDl4Zk1VTWh4STNwTW5KcEpKYlpOME02MU5BdwpPSlF1TmJjT3lxdEZmSjhuSHo1TmdZZ1Yva0xVQVJKMFpWSmx1R3pXMlFVeGN1emhDZEx1MDY2MU43dTZTRzhXClFoKzZ1TFhEaDFNbG10V2VXTVN6OExYSVRSUzl6L3lZd3dlSS9xcWpQeVgyTG1JR1RpSU9FdFBuUm0xY1hkSlUKZGx0VlVFdXkrR2NGbUJFeW1jVlF5aWNSeUltTURTZzdxOHJZQmIyaHd0L0Rld3c5L1IybjB3ZmRTYTJ3UGl2TAp3WUlkelV2WlZ4YVNvenBSSVNoMDFkSGQ2ZU5YRGJjTWpIU25zbVZxQ01SK09BY2ErT3p1TGxZU1NCNU81ZHltCmRTMGVndlc1dEh3VXZoTmc3U05zTXZhcWNLd2RtSUVDZ2dFQkFJZGlPTEtLc28zYlMwUGkwRkJldzNKKzg2ZEYKeDF5NEJpanpWTjA3cFkwNG40c3BEbUR1aXh6c1JOaFowV1hEZDFaK2p5RWpZME1Rc3paMmJPZlNpU0Y4SVFUVgpZaXBHQ1Q5ckxILzcwYi9CaFE5cEVWZzFHSTd1N21wYnVaN0JKeDVLbTFSeW5yQUcvOHNxZGZpR254ZTB2VER5CklxNlNPZVdueU9GSU9wdmFhSXFxRFhHbEh0WXVHaXM5VEk3NkE1bkFGYi82TnFFVUxGODl0cUYwL0lMR3VSYlYKazJwWStDV0t6NmdERFNOcWVZRDRlTE1XaElWSms2bzgwTVdSVW5PSG5nSEdCVUFVQ2thZitYdW02MWVwUkNRcwo1K0NMRklMZ3d5amtvWVFyWmVMTTVvN3hXRVFyZ3pDY0hzaUlBTTc5UVVBc3FYN1ZMdzNkcXN1M2lvZz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + }, + { + "domain": { + "main": "pgadmin.checkerwars.com" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYvVENDQk9XZ0F3SUJBZ0lTQTRaZi84Yk8wNXZLZXl1eWlQQTdMbi92TUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlOREExTWpJeE9UUXpNVE5hRncweU5EQTRNakF4T1RRek1USmFNQ0l4SURBZUJnTlZCQU1UCkYzQm5ZV1J0YVc0dVkyaGxZMnRsY25kaGNuTXVZMjl0TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEEKTUlJQ0NnS0NBZ0VBb3NFN1NranFyRXRlN2s0ZklQckVTMG5CQ2RDUGZscWh6WVF0a3NZanRJOE90REJZNlNXbgpUVm8zSmE0aWpXTEtJdVEwejlCb01nZ2NEUmFHOUdOOTNLQmsrbTlzVzRwblc5d3o5cjVuV0NGRjhVcUtkOWRXCkJqQTI4UVFpR1VjK3ZNbG82WlZVWDgwMVA4UGpMbGdPQ01DdVlodXc4R2RDQWpNUldES3M4MDJjZGMxWVV3Mi8KOEhkV2I5V2dKV3NpVlgxOXpsR2NMalp5cUlpRjF2K1BQOThaZjZsN2t3cFBhN0VWbnNWdW4wTk9ZUnBWc0tjcAptU1gvRnkvUC9HdnVncWNNemYvdU8zUVZCdG4ya2k2QWEvWFdEM0NFVDduSTd4NThlMDREUW9pb0creHhDZ2tYCmlMUGlnNlFkMlNkUkJzcjdidE4xUTlZbUQ0WDdMemZUdmZENVozWUJXZVFzazlEWUFXK3hacndTWk4zWkZZaUgKMFBBdTE5ME1JOEhrN045cTBjOUJTWFhQNTlkTytGaE9wK0Z1UlR1eVRtQ2NSU0x2MjljL3lKNS9nSzQ1NlZRSgpMbWtPU0dLdXF5YXVPa1daK3ZpVGllRG9SUThrNmRWZDhJVXFGaTE0c3NTcTBONitPVnNKTnd2ZmUzUEV6d3ZqCnlGKzhzRXlsczY5NUd0bHVzLzJXNUdZSDFOOHh6cGRYcm5pVE03OGdTOVFIVHd5T29QVUk2cndRRk95VTViQUwKSnEwUi9XMXJROGVSZm5yUnRCL1V3aTBKMVZFRlBBbWYrR0Zhc0FtdXQzTzlvZDk4aU1vejJCY0RvTzRKY3JvcApzNnQ0bzJ0Znpkd3E0Nm5EdlRTSHA1dHgxVVg4Y2hvOHVBZWFNam5RbFp2SXRWWFZFUW5zcWprQ0F3RUFBYU9DCkFoc3dnZ0lYTUE0R0ExVWREd0VCL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUIKQlFVSEF3SXdEQVlEVlIwVEFRSC9CQUl3QURBZEJnTlZIUTRFRmdRVWNWODBza3B6QWt0ajNIaTQ5KzhFM25EUApxZDB3SHdZRFZSMGpCQmd3Rm9BVUZDNnpGN2RZVnN1dVVBbEE1aCt2bllzVXdzWXdWUVlJS3dZQkJRVUhBUUVFClNUQkhNQ0VHQ0NzR0FRVUZCekFCaGhWb2RIUndPaTh2Y2pNdWJ5NXNaVzVqY2k1dmNtY3dJZ1lJS3dZQkJRVUgKTUFLR0ZtaDBkSEE2THk5eU15NXBMbXhsYm1OeUxtOXlaeTh3SWdZRFZSMFJCQnN3R1lJWGNHZGhaRzFwYmk1agphR1ZqYTJWeWQyRnljeTVqYjIwd0V3WURWUjBnQkF3d0NqQUlCZ1puZ1F3QkFnRXdnZ0VHQmdvckJnRUVBZFo1CkFnUUNCSUgzQklIMEFQSUFkd0JJc09OcjJxWkhOQS9sYWdMNm5URHJIRklCeTFiZExJSFp1NytyT2RpRWN3QUEKQVkraUN6SnpBQUFFQXdCSU1FWUNJUUMwMUNQRFZON3pRMkQvSGpWMFk4b09NTVRVRHRCZG42ekRxVHY0QjBJMwp4Z0loQU02cVpiTk55bVFGVDltbUhsbm9mbm9YWnZOa2IwbVNUSkdzTGY5V0V1RC9BSGNBUHhkTFQ5Y2lSMWlVCkhXVWNoTDRORXUyUU4zOGZoV3Jyd2I4b2hlejRaRzRBQUFHUG9nc3llQUFBQkFNQVNEQkdBaUVBbVV4K1JKeTIKRWhING94SWlrdEEvM2daRU4xSHQxMGxrcEdYd05temxrSVlDSVFET1dFTTZneGN6ZHUvaTdSNlFKSWZ0QVFjUwpINzhueE5JZjhORDdZeEljNXpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXBLU2F2b3VTeTBKS25CTThoQWc0Ck9jZGI0UXhzME52U2NxSWk1S0d1QVZrTU1wRlVpN2d2UENqRFlOR1dxMktId0Z4N2trWkREK1MrK3JmSlN4TFAKYkIxQ2lMWjhkWi9wTmliL2cwd1FBaWo5b1lOWXRzaXB0dmdrcXN4MDZkbnFodFQwMG1TQ1pxckNRcnZEU21vRApjSy9xTnpuMjJKN2JudThhem5hRG5ib1BDd3dvMjQzSUQzUUh3cytreDN6SXJvRWhJUW9heU1pSDJCNUppT3kxCnVpbXRGUm9XTElsdVAzUUxPOHpJdlpjdmNMNE5HUzg1WFJUNTNGT0owQUgwTkxYekdkQWE4VVJpSy8xZVozM0MKWTRLMDdqUi96SlB3QXFNSDh4bFAweGNGTzNmcG1qYUt4UVRtM2N5Q2JrVnhMNU52Z2lKZnZCOEtIZ2V0ajY5Rwp6Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGRmpDQ0F2NmdBd0lCQWdJUkFKRXJDRXJQREJpblUvYldMaVduWDFvd0RRWUpLb1pJaHZjTkFRRUxCUUF3ClR6RUxNQWtHQTFVRUJoTUNWVk14S1RBbkJnTlZCQW9USUVsdWRHVnlibVYwSUZObFkzVnlhWFI1SUZKbGMyVmgKY21Ob0lFZHliM1Z3TVJVd0V3WURWUVFERXd4SlUxSkhJRkp2YjNRZ1dERXdIaGNOTWpBd09UQTBNREF3TURBdwpXaGNOTWpVd09URTFNVFl3TURBd1dqQXlNUXN3Q1FZRFZRUUdFd0pWVXpFV01CUUdBMVVFQ2hNTlRHVjBKM01nClJXNWpjbmx3ZERFTE1Ba0dBMVVFQXhNQ1VqTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUsKQW9JQkFRQzdBaFVvelBhZ2xOTVBFdXlOVlpMRCtJTHhtYVo2UW9pblhTYXF0U3U1eFV5eHI0NXIrWFhJbzljUApSNVFVVlRWWGpKNm9vamtaOVlJOFFxbE9idlU3d3k3YmpjQ3dYUE5aT09mdHoybndXZ3NidnNDVUpDV0gramR4CnN4UG5IS3pobSsvYjVEdEZVa1dXcWNGVHpqVElVdTYxcnUyUDNtQnc0cVZVcTdadERwZWxRRFJySzlPOFp1dG0KTkh6NmE0dVBWeW1aK0RBWFhicHliL3VCeGEzU2hsZzlGOGZuQ2J2eEsvZUczTUhhY1YzVVJ1UE1yU1hCaUx4ZwpaM1Ztcy9FWTk2SmM1bFAvT29pMlI2WC9FeGpxbUFsM1A1MVQrYzhCNWZXbWNCY1VyMk9rLzVtems1M2NVNmNHCi9raUZIYUZwcmlWMXV4UE1VZ1AxN1ZHaGk5c1ZBZ01CQUFHamdnRUlNSUlCQkRBT0JnTlZIUThCQWY4RUJBTUMKQVlZd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUJNQklHQTFVZEV3RUIvd1FJTUFZQgpBZjhDQVFBd0hRWURWUjBPQkJZRUZCUXVzeGUzV0ZiTHJsQUpRT1lmcjUyTEZNTEdNQjhHQTFVZEl3UVlNQmFBCkZIbTBXZVo3dHVYa0FYT0FDSWpJR2xqMjZadHVNRElHQ0NzR0FRVUZCd0VCQkNZd0pEQWlCZ2dyQmdFRkJRY3cKQW9ZV2FIUjBjRG92TDNneExta3ViR1Z1WTNJdWIzSm5MekFuQmdOVkhSOEVJREFlTUJ5Z0dxQVloaFpvZEhSdwpPaTh2ZURFdVl5NXNaVzVqY2k1dmNtY3ZNQ0lHQTFVZElBUWJNQmt3Q0FZR1o0RU1BUUlCTUEwR0N5c0dBUVFCCmd0OFRBUUVCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElDQVFDRnlrNUhQcVAzaFVTRnZOVm5lTEtZWTYxMVRSNlcKUFRObGNsUXRnYURxdyszNElMOWZ6TGR3QUxkdU8vWmVsTjdrSUorbTc0dXlBK2VpdFJZOGtjNjA3VGtDNTN3bAppa2ZtWlc0L1J2VFo4TTZVSys1VXpoSzhqQ2RMdU1HWUw2S3Z6WEdSU2dpM3lMZ2pld1F0Q1BrSVZ6NkQyUVF6CkNrY2hlQW1DSjhNcXlKdTV6bHp5Wk1qQXZubkFUNDV0UkF4ZWtyc3U5NHNRNGVnZFJDbmJXU0R0WTdraCtCSW0KbEpOWG9CMWxCTUVLSXE0UURVT1hvUmdmZnVEZ2hqZTFXckc5TUwrSGJpc3EveUZPR3dYRDlSaVg4RjZzdzZXNAphdkF1dkRzenVlNUwzc3o4NUsrRUM0WS93RlZETnZabzRUWVhhbzZaMGYrbFFLYzB0OERRWXprMU9YVnU4cnAyCnlKTUM2YWxMYkJmT0RBTFp2WUg3bjdkbzFBWmxzNEk5ZDFQNGpua0RyUW94QjNVcVE5aFZsM0xFS1E3M3hGMU8KeUs1R2hERFg4b1ZmR0tGNXUrZGVjSXNINFlhVHc3bVAzR0Z4SlNxdjMrMGxVRkpvaTVMYzVkYTE0OXA5MElkcwpoQ0V4cm9MMSs3bXJ5SWtYUGVGTTVUZ085cjBydlphQkZPdlYyejBncDM1WjArTDRXUGxidUVqTi9seFBGaW4rCkhsVWpyOGdSc0kzcWZKT1FGeS85cktJSlIwWS84T213dC84b1RXZ3kxbWRlSG1tams3ajFuWXN2QzlKU1E2WnYKTWxkbFRUS0IzemhUaFYxK1hXWXA2cmpkNUpXMXpiVldFa0xOeEU3R0pUaEVVRzNzemdCVkdQN3BTV1RVVHNxWApuTFJid0hPb3E3aEh3Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBb3NFN1NranFyRXRlN2s0ZklQckVTMG5CQ2RDUGZscWh6WVF0a3NZanRJOE90REJZCjZTV25UVm8zSmE0aWpXTEtJdVEwejlCb01nZ2NEUmFHOUdOOTNLQmsrbTlzVzRwblc5d3o5cjVuV0NGRjhVcUsKZDlkV0JqQTI4UVFpR1VjK3ZNbG82WlZVWDgwMVA4UGpMbGdPQ01DdVlodXc4R2RDQWpNUldES3M4MDJjZGMxWQpVdzIvOEhkV2I5V2dKV3NpVlgxOXpsR2NMalp5cUlpRjF2K1BQOThaZjZsN2t3cFBhN0VWbnNWdW4wTk9ZUnBWCnNLY3BtU1gvRnkvUC9HdnVncWNNemYvdU8zUVZCdG4ya2k2QWEvWFdEM0NFVDduSTd4NThlMDREUW9pb0creHgKQ2drWGlMUGlnNlFkMlNkUkJzcjdidE4xUTlZbUQ0WDdMemZUdmZENVozWUJXZVFzazlEWUFXK3hacndTWk4zWgpGWWlIMFBBdTE5ME1JOEhrN045cTBjOUJTWFhQNTlkTytGaE9wK0Z1UlR1eVRtQ2NSU0x2MjljL3lKNS9nSzQ1CjZWUUpMbWtPU0dLdXF5YXVPa1daK3ZpVGllRG9SUThrNmRWZDhJVXFGaTE0c3NTcTBONitPVnNKTnd2ZmUzUEUKend2anlGKzhzRXlsczY5NUd0bHVzLzJXNUdZSDFOOHh6cGRYcm5pVE03OGdTOVFIVHd5T29QVUk2cndRRk95VQo1YkFMSnEwUi9XMXJROGVSZm5yUnRCL1V3aTBKMVZFRlBBbWYrR0Zhc0FtdXQzTzlvZDk4aU1vejJCY0RvTzRKCmNyb3BzNnQ0bzJ0Znpkd3E0Nm5EdlRTSHA1dHgxVVg4Y2hvOHVBZWFNam5RbFp2SXRWWFZFUW5zcWprQ0F3RUEKQVFLQ0FnQnB3WGZlVUQwMUVaQ3c5dEJoWkxFU1h1MXhqRFVCbkxEUTAxZXRyTlJjcWl5YXgyT3VzOG5maUlTWApGbXpiUkZzbWl2VUtLRmpjVWNxd2NuZms2NVZJUEcwQkVrL3R0NlJyMjAxa3d0cHlPTVN6QW9XeFU1cFJVUmtTClNXWkMyTG1hZ0tHTVRuMVI5d3puejBpYXY1cjI4d1VkT1BNamMyVS8rcUVGbDRBc1pMMExDeENlZnl1K2ZEME4KVkZuSWxySHJyU3lIV1I1TUpSTWlFZnd0OVVmRzhCZ29qUitBTDAzbUkxNXlHY1pFOUw1RWVKRS94WTlSTlpCcApKNmRWVldqWk91VW1JbXhSODU4S0lhMkgxWEdiTlZZUUdFUFJibDV6aW5MR3lLMXptVXJyUWhzOXN5UzRybks4CnFYSy92VDE0VllORncxL0tZYWUvcEliUWFzMUo4SWVNN2NjUXVSNThWUzA2TExRS1d2NE5ERFVHMTlBeWtXaDAKMWg2SUtheEVleGtHM1F0dU4yaGZkUkR2Y2NyUzBIMzZtV0JyMnFydmQ2SEhoa0NoTXM4QTIvVTcybWVxNmlGOApEN0pZaHJiSUdWU202UUoyK2ZNMXZ0OWlTTVNiR1lGR2hTWEJZaCs5SVlsRnZVSElPdDQ4OUlUYW11OHgwOHhZCnMrbnVmYTdNSTVjbUt3Rm9TMlJvYmJPMXdYMi8yc2NJOVltR1Fmc2dib3VUR3N2UUJMcFdCQ0xqaC9UL3dueEsKeTg4WU5HWVlBMXZ1YzMwNUVmdFhNYUFOYlduNXRZOXRRTGVTMkRjZUMwRDNJcFdTdlRwSWVGamxSQ2ttUzllRApDc1ZHMUZINlJiY1ZWS2VIa2o0cFZVZmh2QlNhdklabkFsdGFpeHpTUk01MkphMTNSUUtDQVFFQXhGdjJpdHUzClhDVVJHKy9WaHlQSHpySkx4ZytxejlpQ3NiRjE3akxLTEo1ZTVIVE1mQjRxaWhoMTlKY2hmMFc1RXdkWVFWL3oKZVc3R1ZML2RPVVI0WkhVZzAxWlR5SjZob3psZWpvUDRGT2xyU0RITWExVmFXOTFoeXFDL1pRR08zV1Y3OXoyKwpjSDZOby8wakxkZ3J2N0FYdHFlNVk5cmk1YmN3UFIxMGxlNWI1RXhuOU92NFlJMi9XSklNek50RW10UDM1MWdtCkJHSzF5T25tSk5RdDhkdFNIYUlmMzRjZjVJZ1pCNUtqdUpqNm9LRUpKWldEekNSRTVRZlVja3IrTmx0cG1XbksKVlIrenBsb01WUlZoSHZ6T0pVVlhTZjNtMDBLWGh4L3ZIT3dLWDZrVHFJMjQ4YlJQdVE5d3N5NVFTTHBXNFc0SAowcFFHTWZCelpJN2Vhd0tDQVFFQTFEQlY0NHJncnVlTStmSVp0THVVRTRjcEdab1FYcFA4c0Rpb1ZJNDBWQjFDCnVlQ2RNdk1uUlkrZWxCcHhZeUV0K3JJeCtjcmxmRnJCVWI5d3NvRUpZT1JFL1dhSEpqS0ZUc1Y3RDBhR2dYa0YKeWtNM05FNXlZNkt1SFFncjU2RTdaMGxMVWY3cm1jODRrMUhBZXJUeUYreWRadzNWS1FOSWQ5bXNZRDBuZ2NZVQpvQTBuN3crcXYrbmM5UG40Q3lrbTc5cTFPdFNjWEdsL1FTRnd4NFVXbjJERVNNMVkyZE1KbFBFS3U0d0FvdW1DCkFwTmoxYmVTbDZ2TjlqcWVsL2Q4UzdxZjk1QzBORFJYeUhMdmtZc01jamRsN2h0NWg2bGNHVXlCa2pidGFWcXcKeGhWVWJuTFlxeGFvSm1xUzRBOVI4blZWOGdOS1JKYjdaSFBFb1RiNjZ3S0NBUUF5TEhXQTRjZW1pZW9uUTA5Qwphc2doYnJtaDhGcnJKUjJ3SGZKT1hUZi8wcS9ZbkdlcngyR0RTK0RJRU40RVVXS0xGRE5lOFErYmxjeWoxeXJGCitWTHlDR1BNM0tBb0FUQzRMbTZVNSsrNkdETExqYjM0SnlVaG1CM20wdEJWRk9MV2U1b0RnUWxxWVV2Ny9UREMKQkJ5WnJIdEN0dlRPS1I0VktJdnc4ZGZhZjcrSFJHYkQxSS93ekFkNnNFY0pDWFlzUWNGMG9iZUZJMXZqN0xCYgo5TU9RcTBQK1FuRDJndWFKVktWZ28vMmxxNkZPN2hjU1BYUWg4NXFQRTBNYnVVSGZ6ZGZiMVlaWDNmUGZxOTYrCjF1bXNLMWpaZVRCbXZiUC9nMktJcW9aRTA2T0s4ZjhOOExpek9pbXMxZDhzU2NkRjdpZEpEdjU4dGtvbTlKUG4KdkFIbEFvSUJBUUNiV2VBb1BnK09QcjA2YWdSa0RFbTNtbWQrOVFzekU0b1h3d09MRktvL1EwVU5MZVFwMzFoTApWNEUwMGI5ZVluWjFhMjJuZ3VOTmpteW5XMUE1Z0x2TEVwVm9LVjZkbXJON0hwNmdhblFqNnVWUVZySGVPK2tJCkJaMFFhR0VzcnlEODErNnJVOFpPMENhTnhYYjAzL0czam1jWGdrc2tRZUVXem1tajlHSXVZMFhLZ0pkU01kaEQKdGdjdDNLMjhEaDhSME1DTEdBcDZwa3FpOXNiSmJTbEkrdUg2bzAxLy9VQ3dxV0hBT2hwbExDMGhrYU93WHp5VwppeFM2UitUQlFsTGdadnlqbG5BNUlIRjhzcG12cDJ3dlcxdm5Ybm8xMXNzMVFveEM3ckFYU0d6UU9lR2RFN3lLClZvWTV5aUZLcGl6TEpSa05uVmNNckxYVnIrU3dXNzZOQW9JQkFEclN3NlM5L1p5d0l2RXBYVm8rSlZQZ2pCa2QKOFdLcGxUTTR2Q3R3N24vT3Y3TS95VnE2N21JTHY4S0d0Q3lBOExqeEUwTjlocVpwM1lSdHVvZDUxWTNVUWV1QgplcmZuaGFxSFBzdWRrek83cHRJWmNNSFlQNGxXL0dnZUlMQVNFU2JMa0tPd1BTVmlIL00rRitISHR0azRlb1p4ClhBbTRwVzltaEtSMVA5Z0U3ZmtncDh4ZFl2dmdmWVNhWnNBbDdnWm9iaWNhSFBQYzNmTHc4a01vbjhuaVc5bW8KTW1qR1p4VXpzTHIrdlVsTmxKTURBQXJ0Q0pkSzF4TkZoQVZVcnA3dnBvUC9PbGxjMmVJaC85OXNwdHJDVTFHdAp6SE5YWVhoaG84RWNXanZoSDhDalVjY1N5RS83cUg2ZFJ4TFk0NllMZC9Cd1R2VFV4Yy9ySTlSSm9RMD0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + } + ] + } +} \ No newline at end of file diff --git a/secrets/selfsigned/selfsigned.crt b/secrets/selfsigned/selfsigned.crt new file mode 100644 index 0000000..f9616bc --- /dev/null +++ b/secrets/selfsigned/selfsigned.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID3DCCAsSgAwIBAgIUYxNh6S3Y0G/QO+A+l/Cuj9H4HcswDQYJKoZIhvcNAQEL +BQAwfjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhO +ZXcgWW9yazEMMAoGA1UECgwDTEVPMQwwCgYDVQQLDANMZW8xDDAKBgNVBAMMA0xl +bzEfMB0GCSqGSIb3DQEJARYQNDI2NzQyQGdtYWlsLmNvbTAeFw0yNDA1MzExODU0 +MjRaFw0yNzAyMjQxODU0MjRaME4xCzAJBgNVBAYTAkNBMQ0wCwYDVQQIDAROb25l +MQswCQYDVQQHDAJOQjENMAsGA1UECgwETm9uZTEUMBIGA1UEAwwLY3dzZXJ2ZXIu +aG0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCj5S01nzA7rE+ZGVoX +OKVXV+8pvMh5vUOYa1/mgu0epVKyuGlo3Yh36VyXKVhfyjz1oxaYDQyoo0AV53oq ++yB5qmjSEFevrMYTQvJkNlXeKR7gYd1KGBTgCopH4t9yoY+Nj5vbNxjvaJKgN9+c +7JaUaOA7+3vb2D2e4PAngfJd9now3S+9mbYMN2/oLkZrWea/jcPGpn0xvFRdm8C3 +K9uEChbLzy1yYakp9qL2EU9sW9KiK89ekUYJmeSJwTiPxlu37eK+vRrDX69g2kz1 +fKCsw0IWP1eUVzQujv42uyBP6PHchydT4v8y24Mr19OAK57pu2/s+NSTNDnW5B4P +kg8RAgMBAAGjgYEwfzAfBgNVHSMEGDAWgBR7tnajbyUDVGrenFewhqX6XqkUrTAJ +BgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAlBgNVHREEHjAcggtjd3NlcnZlci5obYIN +Ki5jd3NlcnZlci5obTAdBgNVHQ4EFgQUZNPvtUIP2wdNdguNWyTnte8KecwwDQYJ +KoZIhvcNAQELBQADggEBAEfzFLDMTbeaDDMesshTur6xUwfMr9jzcU6BMlZ8vaRt +6zqlBH9zV5tkyAaiiyjHIKU7NIh3KGhm+XdqOGOSl11jX/X09mw792lrCemmzHeC +xhEoVetBsyRPs2ie/uzWkCV6wrq9MYAz8T0DeiJfW6uVy61Jg1JtOCbdWp5wBkco +pp8ZNIV2LBwoo7YXbGGN0zO6ozoUwOjNazV+Zytog35W8MOv5XPuZBxDE0UR+Bba +eiquGSRlfNcWDRxvEZDciLqxgv283+XdglxcCwVcXg+Qk1Tul7BSM4rI0W9B3ox3 +3Y2AhMKxqpJEpXa4yu6w4qW/fc54zVQsJbEfNgMRJ4g= +-----END CERTIFICATE----- diff --git a/secrets/selfsigned/selfsigned.key b/secrets/selfsigned/selfsigned.key new file mode 100644 index 0000000..5c6fdb8 --- /dev/null +++ b/secrets/selfsigned/selfsigned.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCj5S01nzA7rE+Z +GVoXOKVXV+8pvMh5vUOYa1/mgu0epVKyuGlo3Yh36VyXKVhfyjz1oxaYDQyoo0AV +53oq+yB5qmjSEFevrMYTQvJkNlXeKR7gYd1KGBTgCopH4t9yoY+Nj5vbNxjvaJKg +N9+c7JaUaOA7+3vb2D2e4PAngfJd9now3S+9mbYMN2/oLkZrWea/jcPGpn0xvFRd +m8C3K9uEChbLzy1yYakp9qL2EU9sW9KiK89ekUYJmeSJwTiPxlu37eK+vRrDX69g +2kz1fKCsw0IWP1eUVzQujv42uyBP6PHchydT4v8y24Mr19OAK57pu2/s+NSTNDnW +5B4Pkg8RAgMBAAECggEAEAcUcb78j4ldS2KQTd8LRExkJhfBHy6kEp7FhRxepfWS +7clc/ZVUiC15EYtIii2T4o2tYvc7uq4kUUAO0W83kM5aa9iPSq3BvRZ579TkdtJc +o6LOajWKrRI6zabhJSuphzV5D2oG9TqrxCFSq9zzKNZMv3DrfudZt1TWB3cMxaVx +poPh+wceJgOC0EtfGU/HaNbZY6eRawH4YmjhILTwt2q2tdKXy+b/FbKRzGbGp1cE +IdnyAbP4rjEarcf0w4DH68jZ2nPAj/Yfx9sZETZqXakIXoo0TKz1cRGfbBis2qCn +ZGhosi3ru/oE0faL8DoZMAeIYWZDuWj0eObT4vhTQQKBgQDkbCXmXxvY/Mq/6Qu9 +nri3v1gqkmccMFq+QSogLmV4n97pRN+99x1e4MVruejUl/VDybjI0aCdGAaAXREr +BBwefleqWZ1SRATee8bkftoYefpddK62wMDk6AFOHMbC3ZDcr+MVcOIpjNf8cwys +2Q0N67RUN791ZtoArAfS8KNyGQKBgQC3rq+Eh4zLo7Wr+FZJLnT6FyqvRd1QXaLM +ihRBw5wHZ9imGJksCVrwWDmViyTh9cRTxhysNi7WUDYWcs2/1iNzpVMMmr6Zakbk +8oqu864DQyVSafCzFexsg2zf2HFZ62S+fmnyjBnNi0LioiF5Ocqq81+6KvPnjfKx +kFiG9vrTuQKBgCjc3/rSUN0EfBDQ0/TcDBdy94bGIgP88n7OkYaoRibKEsqQM6Z8 +KpjqhOa8n1ZIyOuTjqb+OUlhHuifvY6AcbdSysQCvA4XdPeIFRCTUNjIGW3WjdrL +qLZKetFKfJQnpt6T6H/RbeQY+hqDSmUxfxBadiwKvQl3mNA99jhaLCMhAoGAA9ZB +UlpmhYZ48Auy+bpftS2wtZKXCeu6z9z+iVUluD3iF64h3PqhDK47HbWXYqT4oetc +g/hpyA5K4vMo+x3lBbBpaLT+0EOZEYVDgl4Sv3yyleMipQsLMkUYjCCAVamGJDiN +zARDMbj7/7H1UwvzANkuobvt9mNPs4fZYZBdMvkCgYEA0F7UjhiE05p9B/o4RIzi +mNSfvOW1sQRnMnlbSdaTgPpB3IogzxidfzDIFkDzNoiL4xrgppBMWIsSxrMXVeJf +K6cOtYG7Q+chOut/9RkefQZBuz+PTcGYlMxGGfeUM8JMK+Stx3LT/K9bHb+BQtK0 +8cb4frLS5SNja/8nc0aa7oM= +-----END PRIVATE KEY----- diff --git a/secrets/vars.env b/secrets/vars.env new file mode 100644 index 0000000..50a8f67 --- /dev/null +++ b/secrets/vars.env @@ -0,0 +1,5 @@ +POSTGRES_PASSWORD=5w5oaorg63mhrn7ybm8t +PGADMIN_DEFAULT_EMAIL=426742@gmail.com +PGADMIN_DEFAULT_PASSWORD=upu9s546b8ndyoeq4v3d +LE_EMAIL=426742@gmail.com +GITEA_DB_PW=irvjyvqp8c94e8tf2gq5 diff --git a/traefik.yml b/traefik.yml new file mode 100644 index 0000000..3468c05 --- /dev/null +++ b/traefik.yml @@ -0,0 +1,57 @@ +services: + traefik: + container_name: traefik + image: traefik:v3.0.1 + restart: always + networks: + - proxynet + env_file: + - ./secrets/vars.env + command: + #tls: + #certificates: + #- certFile: /secrets/selfsigned/selfsigned.crt + #keyFile: /secrets/selfsigned/selfsigned.key + - "--providers.file.filename=/traefik/certs.yml" + - "--api.insecure=false" + - "--api.dashboard=true" + - "--providers.docker" + - "--log.level=DEBUG" + - '--log=true' + #- "--log.level=INFO" + - "--providers.docker.exposedByDefault=false" + - "--providers.docker.network=server_proxynet" + #Entrypoints: + - "--entrypoints.http.address=:80" + - "--entrypoints.https.address=:443" + - "--entrypoints.postgres.address=:5432" + - "--entrypoints.http.http.redirections.entrypoint.to=https" + - "--entrypoints.http.http.redirections.entrypoint.scheme=https" + #SSL Let's Encrypt: + - "--entrypoints.https.http.tls.certResolver=${CERT_RESOLVER}" + - "--certificatesresolvers.le.acme.tlschallenge=true" + - "--certificatesresolvers.le.acme.email=${LE_EMAIL}" + - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json" + #Dashboard secure: + labels: + - "traefik.enable=true" + - "traefik.http.routers.dashboard.rule=Host(`traefik.${DOMAIN}`)" + - "traefik.http.routers.dashboard.entrypoints=https" + - "traefik.http.routers.dashboard.tls=true" + - "traefik.http.routers.dashboard.service=api@internal" + - "traefik.http.routers.dashboard.middlewares=auth" + - "traefik.http.middlewares.auth.basicauth.usersfile=/httpauth/usersfile.htpasswd" + ports: + - "80:80" + - "443:443" + - "5432:5432" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./secrets/letsencrypt:/letsencrypt + - ./secrets/httpauth:/httpauth + - ./traefik/certs.yml:/traefik/certs.yml + - ./secrets/selfsigned:/secrets/selfsigned + logging: + driver: "json-file" + options: + max-size: "1m" diff --git a/traefik/certs.yml b/traefik/certs.yml new file mode 100644 index 0000000..1c496a6 --- /dev/null +++ b/traefik/certs.yml @@ -0,0 +1,4 @@ +tls: + certificates: + - certFile: "/secrets/selfsigned/selfsigned.crt" + keyFile: "/secrets/selfsigned/selfsigned.key" \ No newline at end of file diff --git a/www/demo/index.html b/www/demo/index.html new file mode 100644 index 0000000..d00a996 --- /dev/null +++ b/www/demo/index.html @@ -0,0 +1,10 @@ + + + + + Docker Nginx + + +

DEMO

+ + diff --git a/www/main/index.html b/www/main/index.html new file mode 100644 index 0000000..63159b9 --- /dev/null +++ b/www/main/index.html @@ -0,0 +1,10 @@ + + + + + Docker Nginx + + +

Hello from Nginx container

+ +