Compare commits

6 Commits

Author SHA1 Message Date
d07aaeb565 Merge pull request 'master' (#9) from master into dev
Reviewed-on: #9
2024-11-16 15:28:20 +03:00
8a3ca5ea11 Merge pull request 'master' (#7) from master into dev
Reviewed-on: #7
2024-10-12 22:29:23 +03:00
32e63e705c Merge pull request 'fix' (#4) from gitea-migration into dev
Reviewed-on: #4
2024-10-12 15:47:12 +03:00
56bfb333e9 Merge pull request 'fix' (#3) from gitea-migration into dev
Reviewed-on: #3
2024-10-12 15:43:55 +03:00
7c9041cf43 Merge pull request 'fix' (#2) from gitea-migration into dev
Reviewed-on: #2
2024-10-12 15:41:20 +03:00
96de98c362 Merge pull request 'add' (#1) from gitea-migration into dev
Reviewed-on: #1
2024-10-12 15:37:55 +03:00
33 changed files with 1044 additions and 585 deletions

View File

@@ -5,52 +5,23 @@ services:
nginx:
image: mathwave/sprint-repo:sprint-infra-nginx-dev
networks:
- common-infra-nginx-development
- configurator
- minio-development
environment:
MINIO_SECRET_KEY: $MINIO_SECRET_KEY_DEV
- common-infra-nginx
ports:
- published: 80
target: 80
mode: host
- published: 443
target: 443
mode: host
- "80:80"
- "443:443"
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
update_config:
parallelism: 1
# order: stop-first
clickhouse:
image: clickhouse
networks:
- clickhouse-development
- common-infra-nginx-development
volumes:
- /sprint-data/clickhouse:/var/lib/clickhouse
environment:
CLICKHOUSE_PASSWORD: $CLICKHOUSE_PASSWORD_DEV
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
postgres:
image: postgres:14-alpine3.19
networks:
- postgres-development
volumes:
- /sprint-data/postgres-data:/var/lib/postgresql/data
environment:
@@ -62,81 +33,86 @@ services:
start_period: 20s
timeout: 10s
ports:
- published: 5432
target: 5432
mode: host
- "5432:5432"
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
mongo:
image: mongo:6.0.2
networks:
- mongo-development
volumes:
- /sprint-data/mongo:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: mongo
MONGO_INITDB_ROOT_PASSWORD: $MONGO_PASSWORD_DEV
ports:
- published: 27017
target: 27017
mode: host
- "27017:27017"
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
rabbitmq:
image: rabbitmq:3.10.7-management
volumes:
- /sprint-data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_PASS: $RABBITMQ_PASSWORD_DEV
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
redis:
image: redis:alpine3.16
volumes:
- /sprint-data/redis:/data
ports:
- published: 6379
target: 6379
mode: host
- "6379:6379"
command: redis-server --requirepass $REDIS_PASSWORD_DEV
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
minio:
image: bitnami/minio:2022.10.8
networks:
- minio-development
volumes:
- minio_data:/data
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: $MINIO_PASSWORD_DEV
ports:
- published: 9000
target: 9000
mode: host
- published: 9001
target: 9001
mode: host
- "9000:9000"
- "9001:9001"
deploy:
mode: replicated
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
restart_policy:
condition: any
update_config:
@@ -149,14 +125,14 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
- /sprint-data:/sprint-data
environment:
GITEA_INSTANCE_URL: https://gitea.chocomarsh.com/
GITEA_INSTANCE_URL: https://gitea.sprinthub.ru/
GITEA_RUNNER_REGISTRATION_TOKEN: $REGISTRATION_TOKEN
GITEA_RUNNER_NAME: dev
GITEA_RUNNER_LABELS: dev
deploy:
mode: replicated
placement:
constraints: [node.labels.stage == development]
constraints: [node.role == manager]
restart_policy:
condition: any
update_config:
@@ -168,15 +144,7 @@ volumes:
driver: local
networks:
common-infra-nginx-development:
net:
driver: overlay
common-infra-nginx:
external: true
configurator:
external: true
clickhouse-development:
external: true
postgres-development:
external: true
mongo-development:
external: true
minio-development:
external: true

142
.deploy-infra/deploy-prod.yaml Executable file → Normal file
View File

@@ -6,80 +6,22 @@ services:
image: mathwave/sprint-repo:sprint-infra-nginx-prod
networks:
- common-infra-nginx
- configurator
- minio
environment:
MINIO_SECRET_KEY: $MINIO_SECRET_KEY_PROD
ports:
- published: 80
target: 80
mode: host
- published: 443
target: 443
mode: host
- "80:80"
- "443:443"
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
update_config:
parallelism: 1
# order: start-first
grafana:
image: grafana/grafana
networks:
- common-infra-nginx
- clickhouse
volumes:
- /sprint-data/grafana:/var/lib/grafana
environment:
GF_SERVER_ROOT_URL: https://grafana.chocomarsh.com
GF_CORS_ENABLED: "false"
GF_AUTH_DISABLE_LOGIN_FORM: "false"
GF_CORS_ALLOW_ORIGINS: "*"
GF_SECURITY_CONTENT_SECURITY_POLICY: "false"
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
update_config:
parallelism: 1
clickhouse:
image: clickhouse
networks:
- clickhouse
volumes:
- /sprint-data/clickhouse:/var/lib/clickhouse
environment:
CLICKHOUSE_PASSWORD: $CLICKHOUSE_PASSWORD_PROD
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
update_config:
parallelism: 1
resources:
limits:
memory: 2048M
cpus: '2.0'
reservations:
memory: 1024M
cpus: '1.0'
order: start-first
postgres:
image: postgres:14-alpine3.19
networks:
- postgres
volumes:
- /sprint-data/postgres-data:/var/lib/postgresql/data
environment:
@@ -91,15 +33,13 @@ services:
start_period: 20s
timeout: 10s
ports:
- published: 5432
target: 5432
mode: host
- "5432:5432"
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
@@ -111,66 +51,73 @@ services:
mongo:
image: mongo:6.0.2
networks:
- mongo
volumes:
- /sprint-data/mongo:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: mongo
MONGO_INITDB_ROOT_PASSWORD: $MONGO_PASSWORD_PROD
ports:
- published: 27017
target: 27017
mode: host
- "27017:27017"
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
rabbitmq:
image: rabbitmq:3.10.7-management
volumes:
- /sprint-data/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_PASS: $RABBITMQ_PASSWORD_PROD
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
redis:
image: redis:alpine3.16
volumes:
- /sprint-data/redis:/data
ports:
- published: 6379
target: 6379
mode: host
- "6379:6379"
command: redis-server --requirepass $REDIS_PASSWORD_PROD
deploy:
mode: replicated
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
update_config:
parallelism: 1
order: start-first
minio:
image: bitnami/minio:2022.10.8
networks:
- minio
volumes:
- minio_data:/data
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: $MINIO_PASSWORD_PROD
ports:
- published: 9000
target: 9000
mode: host
- published: 9001
target: 9001
mode: host
- "9000:9000"
- "9001:9001"
deploy:
mode: replicated
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
restart_policy:
condition: any
update_config:
@@ -178,9 +125,7 @@ services:
order: start-first
gitea:
image: gitea/gitea:1.24.6
networks:
- postgres
image: gitea/gitea:1.22.3
volumes:
- /sprint-data/gitea:/data
- /etc/timezone:/etc/timezone
@@ -192,14 +137,14 @@ services:
USER_UID: 1000
USER_GID: 1000
GITEA__database__DB_TYPE: postgres
GITEA__database__HOST: postgres:5432
GITEA__database__HOST: pg.sprinthub.ru:5432
GITEA__database__NAME: gitea
GITEA__database__USER: postgres
GITEA__database__PASSWD: $DB_PASSWORD_PROD
deploy:
mode: replicated
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
restart_policy:
condition: any
update_config:
@@ -211,16 +156,15 @@ services:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /sprint-data:/sprint-data
- /root/.cache/act:/root/.cache/act
environment:
GITEA_INSTANCE_URL: https://gitea.chocomarsh.com/
GITEA_INSTANCE_URL: https://gitea.sprinthub.ru/
GITEA_RUNNER_REGISTRATION_TOKEN: $REGISTRATION_TOKEN
GITEA_RUNNER_NAME: prod
GITEA_RUNNER_LABELS: prod
deploy:
mode: replicated
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
restart_policy:
condition: any
update_config:
@@ -237,14 +181,4 @@ networks:
net:
driver: overlay
common-infra-nginx:
external: true
configurator:
external: true
clickhouse:
external: true
postgres:
external: true
mongo:
external: true
minio:
external: true
external: true

View File

@@ -1,34 +0,0 @@
version: "3.6"
services:
nginx:
image: mathwave/sprint-repo:sprint-infra-nginx-dev
networks:
- common-infra-nginx-development
- configurator
environment:
MINIO_SECRET_KEY: $MINIO_SECRET_KEY_DEV
ports:
- published: 80
target: 80
mode: host
- published: 443
target: 443
mode: host
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == development]
update_config:
parallelism: 1
# order: stop-first
networks:
common-infra-nginx-development:
external: true
configurator:
external: true

View File

@@ -1,34 +0,0 @@
version: "3.6"
services:
nginx:
image: mathwave/sprint-repo:sprint-infra-nginx-prod
networks:
- common-infra-nginx
- configurator
environment:
MINIO_SECRET_KEY: $MINIO_SECRET_KEY_PROD
ports:
- published: 80
target: 80
mode: host
- published: 443
target: 443
mode: host
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: any
placement:
constraints: [node.labels.stage == production]
update_config:
parallelism: 1
# order: start-first
networks:
common-infra-nginx:
external: true
configurator:
external: true

View File

@@ -0,0 +1,39 @@
version: '3.2'
services:
agent:
image: portainer/agent:2.11.1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer-ce:2.11.1
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9443:9443"
- "8888:9000"
- "8000:8000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:

View File

@@ -2,7 +2,7 @@ version: '3.2'
services:
agent:
image: portainer/agent:2.33.1
image: portainer/agent:2.11.1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
@@ -14,7 +14,7 @@ services:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer-ce:2.33.1
image: portainer/portainer-ce:2.11.1
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9443:9443"
@@ -28,7 +28,7 @@ services:
mode: replicated
replicas: 1
placement:
constraints: [node.labels.stage == production]
constraints: [node.role == manager]
networks:
agent_network:

View File

@@ -0,0 +1,71 @@
version: '3.3'
services:
app:
image: swarmpit/swarmpit:latest
environment:
- SWARMPIT_DB=http://db:5984
- SWARMPIT_INFLUXDB=http://influxdb:8086
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 60s
timeout: 10s
retries: 3
networks:
- net
ports:
- "888:8080"
deploy:
resources:
limits:
memory: 1024M
reservations:
memory: 512M
placement:
constraints:
- node.role == manager
db:
image: treehouses/couchdb:2.3.1
networks:
- net
deploy:
resources:
limits:
memory: 256M
reservations:
memory: 128M
influxdb:
image: influxdb:1.7
networks:
- net
deploy:
resources:
limits:
memory: 256M
reservations:
memory: 128M
agent:
image: swarmpit/agent:latest
environment:
- DOCKER_API_VERSION=1.35
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- net
deploy:
mode: global
labels:
swarmpit.agent: 'true'
resources:
limits:
memory: 64M
reservations:
memory: 32M
networks:
net:
driver: overlay

View File

@@ -24,8 +24,8 @@ services:
reservations:
memory: 512M
placement:
constraints: [node.labels.stage == production]
constraints:
- node.role == manager
db:
image: treehouses/couchdb:2.3.1
networks:

View File

@@ -9,7 +9,7 @@ on:
jobs:
build:
name: Build
runs-on: [ prod ]
runs-on: [ dev ]
steps:
- name: login
run: docker login -u mathwave -p ${{ secrets.DOCKERHUB_PASSWORD }}
@@ -19,17 +19,19 @@ jobs:
ref: dev
- name: build nginx dev
run: docker build -t mathwave/sprint-repo:sprint-infra-nginx-dev nginx/nginx-dev
- name: build gitea runner
run: docker build -t mathwave/sprint-repo:gitea-runner gitea-runner
push:
name: Push
runs-on: [ prod ]
runs-on: [ dev ]
needs: build
steps:
- name: push nginx dev
run: docker push mathwave/sprint-repo:sprint-infra-nginx-dev
- name: push gitea runner
run: docker push mathwave/sprint-repo:gitea-runner
prepare:
name: prepare
deploy-dev:
name: Deploy dev
runs-on: [dev]
needs: push
steps:
@@ -39,27 +41,16 @@ jobs:
uses: actions/checkout@v4
with:
ref: dev
- name: prepare
run: chmod 777 ./prepare/run-development.sh && ./prepare/run-development.sh
deploy-dev:
name: Deploy dev
runs-on: [prod]
needs: prepare
steps:
- name: login
run: docker login -u mathwave -p ${{ secrets.DOCKERHUB_PASSWORD }}
- name: checkout
uses: actions/checkout@v4
with:
ref: dev
- name: deploy swarmpit
run: docker stack deploy --with-registry-auth -c ./.deploy-swarmpit/deploy-dev.yaml swarmpit
- name: deploy portainer
run: docker stack deploy --with-registry-auth -c ./.deploy-portainer/deploy-dev.yaml portainer
- name: deploy infra
env:
MONGO_PASSWORD_DEV: ${{ secrets.MONGO_PASSWORD_DEV }}
DB_PASSWORD_DEV: ${{ secrets.POSTGRES_PASSWORD_DEV }}
CLICKHOUSE_PASSWORD_DEV: ${{ secrets.CLICKHOUSE_PASSWORD_DEV }}
MINIO_PASSWORD_DEV: ${{ secrets.MINIO_PASSWORD_DEV }}
MINIO_SECRET_KEY_DEV: ${{ secrets.MINIO_SECRET_KEY_DEV }}
REDIS_PASSWORD_DEV: ${{ secrets.REDIS_PASSWORD_DEV }}
RABBITMQ_PASSWORD_DEV: ${{ secrets.RABBITMQ_PASSWORD_DEV }}
REGISTRATION_TOKEN: ${{ secrets.REGISTRATION_TOKEN }}
run: docker stack deploy --with-registry-auth -c ./.deploy-infra/deploy-dev.yaml infra-development
run: docker stack deploy --with-registry-auth -c ./.deploy-infra/deploy-dev.yaml infra

View File

@@ -9,40 +9,27 @@ on:
jobs:
build:
name: Build
runs-on: [ prod ]
runs-on: [ dev ]
steps:
- name: login
run: docker login -u mathwave -p ${{ secrets.DOCKERHUB_PASSWORD }}
- name: checkout
uses: actions/checkout@v4
with:
ref: prod
ref: dev
- name: build nginx prod
run: docker build -t mathwave/sprint-repo:sprint-infra-nginx-prod nginx/nginx-prod
- name: build gitea runner
run: docker build -t mathwave/sprint-repo:gitea-runner gitea-runner
push:
name: Push
runs-on: [ prod ]
runs-on: [ dev ]
needs: build
steps:
- name: push nginx prod
run: docker push mathwave/sprint-repo:sprint-infra-nginx-prod
- name: push gitea runner
run: docker push mathwave/sprint-repo:gitea-runner
prepare:
name: prepare
runs-on: [prod]
needs: push
steps:
- name: login
run: docker login -u mathwave -p ${{ secrets.DOCKERHUB_PASSWORD }}
- name: checkout
uses: actions/checkout@v4
with:
ref: prod
- name: prepare
run: chmod 777 ./prepare/run-production.sh && ./prepare/run-production.sh
deploy-prod:
name: Deploy prod
runs-on: [prod]
@@ -54,19 +41,16 @@ jobs:
uses: actions/checkout@v4
with:
ref: prod
- name: deploy swarmpit
run: docker stack deploy --with-registry-auth -c ./.deploy-swarmpit/deploy-prod.yaml swarmpit
- name: deploy portainer
run: docker stack deploy --with-registry-auth -c ./.deploy-portainer/deploy-prod.yaml portainer
- name: deploy infra
env:
MONGO_PASSWORD_PROD: ${{ secrets.MONGO_PASSWORD_PROD }}
DB_PASSWORD_PROD: ${{ secrets.POSTGRES_PASSWORD_PROD }}
CLICKHOUSE_PASSWORD_PROD: ${{ secrets.CLICKHOUSE_PASSWORD_PROD }}
MINIO_PASSWORD_PROD: ${{ secrets.MINIO_PASSWORD_PROD }}
MINIO_SECRET_KEY_PROD: ${{ secrets.MINIO_SECRET_KEY_PROD }}
REDIS_PASSWORD_PROD: ${{ secrets.REDIS_PASSWORD_PROD }}
RABBITMQ_PASSWORD_PROD: ${{ secrets.RABBITMQ_PASSWORD_PROD }}
REGISTRATION_TOKEN: ${{ secrets.REGISTRATION_TOKEN }}
AUTHTHELIA_JWT_SECRET: ${{ secrets.AUTHTHELIA_JWT_SECRET }}
AUTHTHELIA_SESSION_SECRET: ${{ secrets.AUTHTHELIA_SESSION_SECRET }}
AUTHELIA_STORAGE_ENCRYPTION_KEY: ${{ secrets.AUTHELIA_STORAGE_ENCRYPTION_KEY }}
run: docker stack deploy --with-registry-auth -c ./.deploy-infra/deploy-prod.yaml infra

View File

@@ -3,4 +3,3 @@ FROM gitea/act_runner:nightly
RUN apk add docker
RUN apk add git
RUN apk add --no-cache nodejs
RUN apk add --no-cache make

14
gitlab-runner/Dockerfile Normal file
View File

@@ -0,0 +1,14 @@
FROM gitlab/gitlab-runner
RUN apt-get update
RUN apt-get install --yes ca-certificates curl gnupg lsb-release
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
RUN echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update --yes
RUN apt-get install --yes docker-ce docker-ce-cli containerd.io docker-compose-plugin
RUN mkdir /etc/builds/
RUN chmod 777 /etc/builds

View File

@@ -1,13 +1,4 @@
FROM nginx
RUN apt-get update
RUN apt-get install certbot --yes
RUN apt-get install python3-certbot-nginx python3-pip --yes
RUN pip3 install --break-system-packages minio
COPY ./config /etc/nginx
COPY prepare.py prepare.py
COPY run.sh run.sh
COPY refre.sh refre.sh
ENV PYTHONUNBUFFERED=1
RUN chmod 777 run.sh
RUN chmod 777 refre.sh
ENTRYPOINT ["./run.sh"]
COPY ./privkey.pem /etc/nginx/privkey.pem
COPY ./fullchain.pem /etc/nginx/fullchain.pem

View File

@@ -0,0 +1,162 @@
# server {
# listen 80;
# server_name *.develop.guavo.tech;
# return 301 https://$host$request_uri;
# }
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name swarmpit.develop.guavo.tech;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.guavo.tech:888/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.develop.guavo.tech;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.guavo.tech:8888/;
}
location /api/websocket/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://develop.guavo.tech:8888/api/websocket/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rabbitmq.develop.guavo.tech;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.guavo.tech:15672/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name minio.develop.guavo.tech;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.guavo.tech:9001/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name grafana.develop.guavo.tech;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
proxy_set_header Host $http_host;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.guavo.tech:3000/;
}
location /api/live/ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://develop.guavo.tech:3000/api/live/ws;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ~^(?<domain>.*)\.develop\.guavo\.tech$;
resolver 127.0.0.11 ipv6=off;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://$domain-nginx:1238$request_uri;
}
}
server {
listen 80;
server_name ~^(?<domain>.*)\.develop\.guavo\.tech$;
resolver 127.0.0.11 ipv6=off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://$domain-nginx:1238$request_uri;
}
}

View File

@@ -7,18 +7,7 @@ http {
default upgrade;
'' close;
}
server {
listen 80;
server_name *.develop.sprinthub.ru;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name *.dev.chocomarsh.com;
return 301 https://$host$request_uri;
}
include ./hosts.conf;
include ./guavo.conf;
include ./sprinthub.conf;
}

View File

@@ -0,0 +1,143 @@
server {
listen 80;
server_name *.develop.sprinthub.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name swarmpit.develop.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.sprinthub.ru:888/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.develop.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.sprinthub.ru:8888/;
}
location /api/websocket/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://develop.sprinthub.ru:8888/api/websocket/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rabbitmq.develop.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.sprinthub.ru:15672/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name minio.develop.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.sprinthub.ru:9001/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name grafana.develop.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
proxy_set_header Host $http_host;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://develop.sprinthub.ru:3000/;
}
location /api/live/ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://develop.sprinthub.ru:3000/api/live/ws;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ~^(?<domain>.*)\.develop\.sprinthub\.ru$;
resolver 127.0.0.11 ipv6=off;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://$domain-nginx:1238$request_uri;
}
}

View File

@@ -0,0 +1,58 @@
-----BEGIN CERTIFICATE-----
MIIE/DCCA+SgAwIBAgISBKhpaBIPwmiK7xuyvCE6Zbc7MA0GCSqGSIb3DQEBCwUA
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
EwNSMTAwHhcNMjQxMTE2MTA1MTEyWhcNMjUwMjE0MTA1MTExWjAhMR8wHQYDVQQD
DBYqLmRldmVsb3Auc3ByaW50aHViLnJ1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAzSoZaDoqFbG84DqofcUtH3Rqm/YhtoV2DpAdA4CyXlEcE1n5Yumx
1nBuzjL+cFFKKZ5yZRji/YON9G6T/UPyWAClQ+kj4Q0BgRTZWwWACWSXpL2etHCY
0UYgxcSk7Wy+F2V0soXDiGatGP2gRIZIiv1MzJUU3jSXNNQ0FLN/nh4uuSqNimBQ
Y8msGCHKI2i1k6Tr3jJC1g1Tv2O1SqGAGhO88WZAo7y1da1hDZwJfZlJIF8Me3bc
qzPnW1hhDq0WDMgpwr5W09gxd/op35CYdp8UdIDBck5OQtE2PUsNPWK4P/BAm+Jo
d3EFIg/vcLJ1SEYtV/4Y4E9SBMUQFLccIwIDAQABo4ICGjCCAhYwDgYDVR0PAQH/
BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8E
AjAAMB0GA1UdDgQWBBRQTljPPcJ/7wvHy+vY5kaEgqannzAfBgNVHSMEGDAWgBS7
vMNHpeS8qcbDpHIMEI2iNeHI6DBXBggrBgEFBQcBAQRLMEkwIgYIKwYBBQUHMAGG
Fmh0dHA6Ly9yMTAuby5sZW5jci5vcmcwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTAu
aS5sZW5jci5vcmcvMCEGA1UdEQQaMBiCFiouZGV2ZWxvcC5zcHJpbnRodWIucnUw
EwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdQB9
WR4S4XgqexxhZ3xe/fjQh1wUoE6VnrkDL9kOjC55uAAAAZM0zrU2AAAEAwBGMEQC
IEB/lrR9y9atj0U3ZkbCdK6Alc5KvKO220NxPlD4a8o5AiBxkISd0sw707vauLSp
I8CTmerD82ZVe5IGqKutP6eUNAB3AM8RVu7VLnyv84db2Wkum+kacWdKsBfsrAHS
W3fOzDsIAAABkzTOtYEAAAQDAEgwRgIhANWhFJw797ugpQwxPn21wUptjQh/3vFP
6qtmyLVkEFbJAiEAw4ad20Gt3sNGiX6qu0B/ycnYHqye2CAFyrSQW+RoTqIwDQYJ
KoZIhvcNAQELBQADggEBAH8Dhnkl+AvVUe3bMFPMzPR9iQ96e7evGIEx9raIRLVU
RZfI1WBc9MFN2WTfBFMPyNKiAfDKw0v1gvGGfDMbKvkX5CVrwcExSA2tbCrUJkU8
lVa/lTMuVSrEaebcAt9kqdooUD4pqiAw71qlIijjYbXz4BsMn/X3f0bk0yZC44B8
/BjnE2vg5olYIR2ZktO4XbTeWTX8vyhFE/q83u2T4CWAILNoLAUoIl9kbsB+NaBD
P9c9NfMyYEhHXDxGCQl4zKQRdFe8BYEpW7o0oiGoVtAdtTcQEeIBc3gkKzfdP7Ry
oR9X2zpmSVl6yM1TGlkNYdj1WtjeNOMD/EP/Iun0WVU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
-----END CERTIFICATE-----

View File

@@ -1,85 +0,0 @@
import os
import sys
from minio import Minio
from urllib.request import urlopen
from json import loads
minio_client = Minio(
"minio:9000",
access_key="serviceminioadmin",
secret_key=os.getenv("MINIO_SECRET_KEY", "minioadmin"),
secure=False,
)
def get(url):
with urlopen(url) as response:
data = response.read().decode("utf-8")
return loads(data)
try:
response = get(
"http://configurator/api/v1/fetch?project=certupdater&stage=development"
)
hosts = response["configs"]["hosts"]
except Exception as e:
print(f"Error fetching config: {e}", file=sys.stderr)
sys.exit(1)
config = ""
for host, params in hosts.items():
config += """
server {{
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name {host};
ssl_certificate /etc/nginx/{host}/fullchain.pem;
ssl_certificate_key /etc/nginx/{host}/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
proxy_set_header Host $host;
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;
location / {{
resolver 127.0.0.11;
proxy_pass http://{target_host}:{port}$request_uri;
}}
}}\n\n
""".format(
host=host, target_host=params["host"], port=params["port"]
)
try:
fullchain = minio_client.get_object(
"certupdater", f"certificates/{host}/fullchain.pem"
)
privkey = minio_client.get_object(
"certupdater", f"certificates/{host}/privkey.pem"
)
try:
os.makedirs(f"/etc/nginx/{host}", exist_ok=True)
except OSError as e:
print(f"Error creating directory: {e}", file=sys.stderr)
continue
with open(f"/etc/nginx/{host}/fullchain.pem", "wb") as fp:
fp.write(fullchain.data)
with open(f"/etc/nginx/{host}/privkey.pem", "wb") as fp:
fp.write(privkey.data)
except Exception as e:
print(f"Error processing host {host}: {e}", file=sys.stderr)
continue
try:
with open("/etc/nginx/hosts.conf", "w") as fp:
fp.write(config)
except Exception as e:
print(f"Error writing config file: {e}", file=sys.stderr)
sys.exit(1)

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNKhloOioVsbzg
Oqh9xS0fdGqb9iG2hXYOkB0DgLJeURwTWfli6bHWcG7OMv5wUUopnnJlGOL9g430
bpP9Q/JYAKVD6SPhDQGBFNlbBYAJZJekvZ60cJjRRiDFxKTtbL4XZXSyhcOIZq0Y
/aBEhkiK/UzMlRTeNJc01DQUs3+eHi65Ko2KYFBjyawYIcojaLWTpOveMkLWDVO/
Y7VKoYAaE7zxZkCjvLV1rWENnAl9mUkgXwx7dtyrM+dbWGEOrRYMyCnCvlbT2DF3
+infkJh2nxR0gMFyTk5C0TY9Sw09Yrg/8ECb4mh3cQUiD+9wsnVIRi1X/hjgT1IE
xRAUtxwjAgMBAAECggEAW10xHVIxpaGWLADTQdcKBiTwyO1uC/sZHNkeoo2wYQIb
z55UybCqaoV9QsRAvMHmlewio1TW2PC5ya1op/OXO4tmDX0IZlNFZTdkp/0mDIjI
YyuyPkaaNy/Url2o2LaBXKfotQuOjPK0iRmBQqLOMV8l0UFenqmq4HLTkphw73dS
6tT3SnDIZTMYkfZsU9yrbR1vD9ZOPbBmRdup66Jbe0vHCgLi1GUoli2OOV/vrykt
MQydTHfZa3FHUhG+DuVhp2Ymqkcw763cT5OjRF+US0F6NiP6NPY2pdQ2C1Tn0VGO
G3+1DQBhxPesvTHTbtEs+mCF/4exThpRrino2gAbaQKBgQD0atLHcwU2HrxS3ZoB
i9Yl8IhLAJxY5xx8CdAKuNq2Cg+lxYEv6bK/Z5MXt1smxa48NZyYLq35ltM+9GbS
20e25klKKuBHobg6Ae0zTyROKBrPhWJ/71tAbWg+joFF5vTIXz24E4iv1EI6NxeO
OEq2zHBWxZvBkW1aIcA7naz/DwKBgQDW4xNc3zm+3FmDvoRlKcTvHAVtBdpZcDhg
JlPxPWZYH0R/ZddAXOtdqaGV1/wE39JPtgR5rR0LA6cYmNPIj8Qisr80N9h8zGbt
4PExi2OybWmQeEvJUH3H4SgO/jT79Oc39mZohwoqIWcS8V5abOpodtt+Gcbmg/sM
XUOORDVRrQKBgBUcyRo7YD7dhsztoWjyyEu8rDk2U0sGo5o/Sr4yW4oP8mwSVGds
G2mXK8iHqRL/Tl6bDuzCU3rUwWiVufAKyvYMjFYgwADQAlbYZcHh2zP5GN/GGM0O
QuaczL1il94O5iQMvgsRfOQbRKE8swcw65tAq4+DQEIHKtf3RGCh7RiXAoGACPED
8j5bocR7eQ7pZWg6iJSK6UFwF36i6eVOYuBiLNKIQCDVtxjmtkwDrD+DfhRuJOD3
CLUaW0X4ov5g+Zx51dPIPvz/5hl/QvC0OJKLQHZrCRboWGUgBrwotY8AV2eWY26+
TiUoWB5xsokWmv6jNluTwIiEDT16qcYLtJTD/zUCgYEA02IPJt2q1ZvogVUf0aLi
ppZa5ZJX5xRTR5j2y7Fe4TFdvD5+0wGqqP28krzYxFrXRJ+9eroaPLdntWV4h6Rn
tjaxUTJytfsL/3HQ9tSX/VwCk686HI4HWXIAfJvlHhoKeDoQfAYJDdpNCQDhGPFs
IRji6YOZhyfQUU5NY52e2VY=
-----END PRIVATE KEY-----

View File

@@ -1,11 +0,0 @@
#!/bin/bash
if ! python3 prepare.py; then
echo "Error running prepare.py" >&2
exit 1
fi
if ! nginx -s reload; then
echo "Error reloading nginx" >&2
exit 1
fi

View File

@@ -1,4 +0,0 @@
#!/bin/bash
python3 prepare.py
/docker-entrypoint.sh nginx -g 'daemon off;'

View File

@@ -1,13 +1,10 @@
FROM nginx
RUN apt-get update
RUN apt-get install certbot --yes
RUN apt-get install python3-certbot-nginx python3-pip --yes
RUN pip3 install --break-system-packages minio
COPY ./config /etc/nginx
COPY prepare.py prepare.py
COPY run.sh run.sh
COPY refre.sh refre.sh
ENV PYTHONUNBUFFERED=1
RUN chmod 777 run.sh
RUN chmod 777 refre.sh
ENTRYPOINT ["./run.sh"]
RUN apt-get install python3-certbot-nginx --yes
RUN mkdir /etc/allinvest
COPY ./nginx-prod.conf /etc/nginx/nginx.conf
COPY ./privkey.pem /etc/nginx/privkey.pem
COPY ./fullchain.pem /etc/nginx/fullchain.pem
COPY ./allinvest/privkey.pem /etc/allinvest/privkey.pem
COPY ./allinvest/fullchain.pem /etc/allinvest/fullchain.pem

View File

@@ -0,0 +1,90 @@
-----BEGIN CERTIFICATE-----
MIIE5TCCA82gAwIBAgISBLLA45sg/IhDBwA/vxe7YIKrMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yNDAyMDMyMTI1NDdaFw0yNDA1MDMyMTI1NDZaMBcxFTATBgNVBAMT
DHlvdXJnb2xzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFC
SqAyzSV1BHFSqKxH3GuLEVRgxUABAhveeLWOTJt3xrKTNhdgaP4fD8CZF5vmgFqx
M/Zk4mizZ9FEQeKnrmlhAL643OaGRTVwN1FfBEfvr/fT3AQD0HQB55OSsUReSFUn
yT9vR2cv+r/f6EU78Uw/svvTD7M0vY/uRfOc2qWv+I6dGsoS32iDQmsYlOK4HKWX
mfBTuGSCJKcec1nviehXXrGFP4YJa3gs6RzWTtGXxGgI0lG9O366RszkKZKVJICh
BH+YWV9KJ1hzgmRWlRJgs4t14MO2Dxw5Mu1G08WbaEQGvE7RgcBCNY8sV1K1Bx/P
NUPRsSPT6rIsX3MhQ4sCAwEAAaOCAg4wggIKMA4GA1UdDwEB/wQEAwIFoDAdBgNV
HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E
FgQUcY+9gyWVjqP8S2owFnPbtwbiZ1QwHwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA
5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vcjMu
by5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8w
FwYDVR0RBBAwDoIMeW91cmdvbHMuY29tMBMGA1UdIAQMMAowCAYGZ4EMAQIBMIIB
BAYKKwYBBAHWeQIEAgSB9QSB8gDwAHUAO1N3dT4tuYBOizBbBv5AO2fYT8P0x70A
DS1yb+H61BcAAAGNcRPt8gAABAMARjBEAiAMpD5lfh43xD1tAvsSa20OQ4LsQ8Kt
YBvl5svUTuGrHAIgPveMh3yZ6z+QLW1k8Lv7z1kyXsxSvCUQrX16k7m1V8kAdwCi
4r/WHt4vLweg1k5tN6fcZUOwxrUuotq3iviabfUX2AAAAY1xE+3xAAAEAwBIMEYC
IQD+hmWzWe0y9M8xYKvuhySnHN6AWKQpvJgTqBsCFiiy5QIhANM0ce+SEC4BlY8m
QAIGNXbAjlKU28q66EcTuSjji227MA0GCSqGSIb3DQEBCwUAA4IBAQAAfH8lbwUk
JD6voPBGCTt7XSZPl9dq4LdmOLV3bsfjtqWOeGNCznBYKfRZO/UJ/srekCjapzKy
DAmv0dl/tvBGfqhU/emOtKsq9AE0J7RqzF9SQPrVzq/VxWXGCCmtxUHEAlNk/lrg
PqxpTUZdLpeBEbNvtloSaUEpe8mkFcFhw7TZVtdkpn+pHRlltqXry/8BekFPQR5Y
qgI8akm2rXOV616MnF81DhIUVY4n6t4SVsDjSk69iDnKG97PJJK5yqsEfdZFiDRK
PlhHTYwOsypaP/JMuanK8eGjnNR9pA40DEjAJO0kvE3IE7dHD3R1iGkXjr7wIkKw
5NjP9yOv01mH
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDRQkqgMs0ldQRx
UqisR9xrixFUYMVAAQIb3ni1jkybd8aykzYXYGj+Hw/AmReb5oBasTP2ZOJos2fR
REHip65pYQC+uNzmhkU1cDdRXwRH76/309wEA9B0AeeTkrFEXkhVJ8k/b0dnL/q/
3+hFO/FMP7L70w+zNL2P7kXznNqlr/iOnRrKEt9og0JrGJTiuByll5nwU7hkgiSn
HnNZ74noV16xhT+GCWt4LOkc1k7Rl8RoCNJRvTt+ukbM5CmSlSSAoQR/mFlfSidY
c4JkVpUSYLOLdeDDtg8cOTLtRtPFm2hEBrxO0YHAQjWPLFdStQcfzzVD0bEj0+qy
LF9zIUOLAgMBAAECggEANWFhxAfxiRKWtYnOeVRDiDOLkii1aKRZM17HEBlitW4S
g89FxyTS47BsxkbHXP+p0njNtpb5opfRbfKpk/YOaddS51QlFbE+ymj704gXgXpF
O0USJPwMGuu5dU3AZp5eeUqS7dmnL01v+65UhATMgxTkxZSLtr1HdgXkVka3B/ir
Q/iqR4ftt+qT0a9mzXQOxgdN7qnNwVNO1uJi87C6fQBRB6F724U5SJyOTMl9R6ZS
+JZ9Oz5xxoGLA/Nftn078uMjf2ymWfOqicHYeXxfPYllXNuRsIf7NA00F0orwF15
TWBZLB5GbkOIP7k7vzabZMCbGmf42XYtt1oFYIssIQKBgQD7aB8cUDVdE47VOX4p
+Bf2ilMJA2d+KsCA3uYw5VQjjxBbfN+nChOx6e6eSmy2MMtH2ECG2IgW04FDbHtZ
y2tbmRY3XIl+4dos+6ybbiYeYKRcHOQiXbjFK9ml1NpDcuLMHE3a6v0gFB8N0iB4
J3u6h9+kHe3LGPzIVDGbITWi4wKBgQDVFQleHfRWM9/hebU8/tshY4sRJ9nA9haI
F/NDMHhE+IyX9JHxGXtVE0ihOh0+0PLKLwtOepc4vqZaquKVnzZ82+sc+C4Iqg8K
S+1NoRFOZG1AlM53UI51ZXLvXZp8gAdDBXzwBZpWZNdhJHJSnuwVI+UoDkrAQkmn
/n4jzV01OQKBgQCH8pr4JYtlxIC1XryRl13l7JDQS+339MhaJ66UfD5OaDtxLYqH
elSCHbzyDc7RinsyY4cpJAgbR84blprxSKXKR3MTBtA3M4xWTNXeyuaEAMCAKwNW
bhXPUVIFcZ+BX6uysg+LtQyh/x93ysvSDY/Do1vVFHYVIHL5JUYZ3BBz/wKBgQDT
oCYCnJtr9e9Xn6oZ30BBg/y9WCfTllVAaxEGXSBF19jCnntHyjgMga9zuSUMmzdX
CKwhEG4aRHcxu2B4m3zhOwXiarZFkqiHYGtZ2ys2AVXkeyYnqBEklVI2W2+wUPNl
ZBD2zYnAXjzu1OTaG857HIBebPtewTcoKwCajD8TOQKBgQDr07j3sx5nQsg4kHmR
kBvHHjq7kQ1pEItrD/CfLsZ7Ntip4L82UzdZm/hhdM/12fB+wLu8HcZzvY5H1J+3
IlkKYhAAe8lgzE7hYupVD9QtdFBuNsAnQfT+VV4JnZNDVZHXfnhz19KJ+iIvqton
8WCEnmpiIKyt+Lq+Ol3n7PDMIw==
-----END PRIVATE KEY-----

View File

@@ -1,24 +0,0 @@
events {}
http {
client_max_body_size 50m;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name *.sprinthub.ru;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name *.chocomarsh.com;
return 301 https://$host$request_uri;
}
include ./hosts.conf;
}

View File

@@ -0,0 +1,58 @@
-----BEGIN CERTIFICATE-----
MIIE7TCCA9WgAwIBAgISBPahgudRc6jaiRYuhVw0Kk68MA0GCSqGSIb3DQEBCwUA
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
EwNSMTAwHhcNMjQxMTE2MTEwNDI0WhcNMjUwMjE0MTEwNDIzWjAZMRcwFQYDVQQD
DA4qLnNwcmludGh1Yi5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AKy6u/vfDJ54m8ikq404458VD6K2hYD192RZd/sSM8q9LhB5qxLe5D8csmWRuiWC
EIDCkydKnK8WiV3SffA7+Ftsizdgw7Akm+BLf5GuV7CzeVrGrsBSUIs2uDDIXpDl
oCAxQPpJijzsvZ57d/a2UxhYkyNP8jqSWRpCz2x0sXzqbulfURbUApwS+rlTMVOJ
RtH5jjwI2nlOCvFpUi0reDBSqsCZ4IZCpBuo4uqgttfA39rJuOXrrlizR8EPG09q
c+NkO1xEBo2wUMfZG5TfM8fD/ZS7bEONzkczrNUxTrqOItWlDPVKz2ccyI5UWvLP
ZYalacJfka2a6kADmMdRfTMCAwEAAaOCAhMwggIPMA4GA1UdDwEB/wQEAwIFoDAd
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNV
HQ4EFgQUKVzqPuafY2V7r9tM1gO9kyZZbc8wHwYDVR0jBBgwFoAUu7zDR6XkvKnG
w6RyDBCNojXhyOgwVwYIKwYBBQUHAQEESzBJMCIGCCsGAQUFBzABhhZodHRwOi8v
cjEwLm8ubGVuY3Iub3JnMCMGCCsGAQUFBzAChhdodHRwOi8vcjEwLmkubGVuY3Iu
b3JnLzAZBgNVHREEEjAQgg4qLnNwcmludGh1Yi5ydTATBgNVHSAEDDAKMAgGBmeB
DAECATCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3AM8RVu7VLnyv84db2Wkum+ka
cWdKsBfsrAHSW3fOzDsIAAABkzTazykAAAQDAEgwRgIhALmVup2hCpGuczwBp9tl
gcI4OksW/ei7l+pi6CGVUQuPAiEAvwVY8RGj8f4cqmAVu0Cqo4AZcmTs9RSNfWU9
Ec+LGfoAdgATSt8atZhCCXgMb+9MepGkFrcjSc5YV2rfrtqnwqvgIgAAAZM02s9q
AAAEAwBHMEUCIEp1a1/9sRw46ZXuWapz+mFC23VMhv7SPeq98EFW0mBQAiEAoHGi
Loao4hZcBRjLSKSL+09HC0twulkst8Bh75mLSkwwDQYJKoZIhvcNAQELBQADggEB
AI11nleBx9j5A3HoPbzL499b4/eZA3V1MDFcB1G9YNYM/cLuetQEDbdMXIPQryH+
//SmGuoSmYVb0udrRTDueYjls/AAKhrfW5xp/tzXVTGHlzmwsMrE22pA54885JwT
TpDYUwnRw0n85ODfyycY92RPqU/r73Rux08XFMZNsCp4OoXW8+g1Z96Cn9vGME0m
HjgsS+UTFVQwDXajBjEh1fliqq9eGpT/7Id5Bvs4+PIjY+cwm5uOnTZJBbGItfup
sUUsEJMR11CGiXw3XIg1tDiMePcHt5UdWoeCehRpD95In76B6YxsJzpG5B8ydcwv
BccnIngeWqN1gU2X29sECBU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,217 @@
events {}
http {
client_max_body_size 150m;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name gitlab.sprinthub.ru;
location / {
proxy_pass http://dev.sprinthub.ru:1234/;
}
}
server {
listen 80;
server_name *.sprinthub.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name gitlab.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:1234/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name swarmpit.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:888/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name portainer.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:8888/;
}
location /api/websocket/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://dev.sprinthub.ru:8888/api/websocket/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rabbitmq.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:15672/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name swarmpit.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:15672/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name minio.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:9001/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name gitea.sprinthub.ru;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
location / {
proxy_pass http://dev.sprinthub.ru:3000/;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ~^(?<domain>.*)\.sprinthub\.ru$;
resolver 127.0.0.11 ipv6=off;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://$domain-nginx:1238$request_uri;
}
}
server {
listen 80;
server_name yourgols.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourgols.com;
resolver 127.0.0.11 ipv6=off;
ssl_certificate /etc/allinvest/fullchain.pem;
ssl_certificate_key /etc/allinvest/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://yourgols-nginx:1238$request_uri;
}
}
}

View File

@@ -1,85 +0,0 @@
import os
import sys
from minio import Minio
from urllib.request import urlopen
from json import loads
minio_client = Minio(
"minio:9000",
access_key="serviceminioadmin",
secret_key=os.getenv("MINIO_SECRET_KEY", "minioadmin"),
secure=False,
)
def get(url):
with urlopen(url) as response:
data = response.read().decode("utf-8")
return loads(data)
try:
response = get(
"http://configurator/api/v1/fetch?project=certupdater&stage=production"
)
hosts = response["configs"]["hosts"]
except Exception as e:
print(f"Error fetching config: {e}", file=sys.stderr)
sys.exit(1)
config = ""
for host, params in hosts.items():
config += """
server {{
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name {host};
ssl_certificate /etc/nginx/{host}/fullchain.pem;
ssl_certificate_key /etc/nginx/{host}/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-refferer-when-downgrade" always;
proxy_set_header Host $host;
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;
location / {{
resolver 127.0.0.11;
proxy_pass http://{target_host}:{port}$request_uri;
}}
}}\n\n
""".format(
host=host, target_host=params["host"], port=params["port"]
)
try:
fullchain = minio_client.get_object(
"certupdater", f"certificates/{host}/fullchain.pem"
)
privkey = minio_client.get_object(
"certupdater", f"certificates/{host}/privkey.pem"
)
try:
os.makedirs(f"/etc/nginx/{host}", exist_ok=True)
except OSError as e:
print(f"Error creating directory: {e}", file=sys.stderr)
continue
with open(f"/etc/nginx/{host}/fullchain.pem", "wb") as fp:
fp.write(fullchain.data)
with open(f"/etc/nginx/{host}/privkey.pem", "wb") as fp:
fp.write(privkey.data)
except Exception as e:
print(f"Error processing host {host}: {e}", file=sys.stderr)
continue
try:
with open("/etc/nginx/hosts.conf", "w") as fp:
fp.write(config)
except Exception as e:
print(f"Error writing config file: {e}", file=sys.stderr)
sys.exit(1)

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCsurv73wyeeJvI
pKuNOOOfFQ+itoWA9fdkWXf7EjPKvS4QeasS3uQ/HLJlkbolghCAwpMnSpyvFold
0n3wO/hbbIs3YMOwJJvgS3+Rrlews3laxq7AUlCLNrgwyF6Q5aAgMUD6SYo87L2e
e3f2tlMYWJMjT/I6klkaQs9sdLF86m7pX1EW1AKcEvq5UzFTiUbR+Y48CNp5Tgrx
aVItK3gwUqrAmeCGQqQbqOLqoLbXwN/aybjl665Ys0fBDxtPanPjZDtcRAaNsFDH
2RuU3zPHw/2Uu2xDjc5HM6zVMU66jiLVpQz1Ss9nHMiOVFryz2WGpWnCX5GtmupA
A5jHUX0zAgMBAAECggEABk9D8q1xLpDFUA0D30LGvdbtHUqBkfZqNRY3lcpSbgN/
HUb0gtn1iICp25/5JsmbhLiW24aUNqkiF3VK+G2YYu6SH1G/lD2iHA1l+ZJezaug
sTo0w/29x3gWPmHzYmOg98wUzY/GJveW7aUg+rgqTOdfaJjRBma2LolmPlX87c0r
F433112XfZW0kqenlM7vsdmzH2p1MB5W8GlXay9WhZ6zl7xcRti7MoKP8qpthJkw
sHjrkZlZ9C4xyp1f/KOPX8mtLTg1uBaK4bksd1BdxzebskEJl07wtI5LnhjP9Uc0
L7liYe3wPlI6QhZdRrxxEHIiSC/d1RsBd/FHkcH4kQKBgQDl0jKror4RXFW/FjYG
sQpPU00y+GNfDsBcwZLeoVQ6ESwqp0A+b/SZIZWp1d7wHf/h/3k4DJy9sEUE0VLA
pRv8Vh2ptYkzH2FnagkgBvvBRM89Ulm95dObwab+dVUAi9nBlGqAjFXR6P87fRLN
70ChRwZtx9V1liMRZCUvXaLp/wKBgQDAZ7B0HwbhTAQBo/HwoIQLumg+DxRqPsLS
CU+7kEBIf7AaCYdmSfP/79XLPEhHlAmRrPJlodFyhp+rAO8wvuLj1rvhHUc8n0GM
TjGzNvgTYoOEZBggiN8x7xfkA2xyUQNavVFrwvYKgsUpXwmV4PD0D19jPhscM5vt
7i5zWovkzQKBgD4DXhDaNRdSJwEM6T8c/n8xJx+dzpKT1Gwy/4J7XdLdV2GbB8bR
RtsbKNtPDn0UWzuMSBVLse+tZLJMGVxKMScBxbdJeOAGk63n+tZdjAk2nAUb94M6
RMM+meUHnAwtsHB/r81IENA3YseWlEBlUrcyBxYQWhUEkinbL/178r3ZAoGABsRe
12az9j6XMXuTqdPrcQIoYm5jWG1Gqt56+GzVZfdfuTq2kWludIT57wD6xdG2GHKN
v/dWB4ImoXwR7ZP5JOxLhVpjRAWR555kbxoy1XO0jnZ6xsIpn3b6TyGzsb2ZsZpQ
/8pGnw4EYzUdgDD+KIdV4oavq2lBRbgH2DTKEM0CgYBbg+zoVPHAxllLMcdxnhU2
cq4WmQbV3UnU7VeIHcmogRmFmEVTHfrM4ld38m/qR5s4lt6CWYEukaoU/aH7csQh
yNR+soEIc1fADOH0pspau6v+N6KXcI4n4wo6PT5UWKHPxdAU5ucV5X+zBeABpPYS
+3N9A0ELerYvNqLq1a2ezA==
-----END PRIVATE KEY-----

View File

@@ -1,4 +0,0 @@
#!/bin/bash
python3 prepare.py
nginx -s reload

View File

@@ -1,4 +0,0 @@
#!/bin/bash
python3 prepare.py
/docker-entrypoint.sh nginx -g 'daemon off;'

View File

@@ -1,11 +0,0 @@
docker login -u mathwave -p $DOCKERHUB_PASSWORD
mkdir /sprint-data/mongo || true
mkdir /sprint-data/redis || true
mkdir /sprint-data/rabbitmq || true
mkdir /sprint-data/certs || true
mkdir /sprint-data/gitea || true
mkdir /sprint-data/clickhouse || true
chmod 777 /sprint-data/redis
chmod 777 /sprint-data/rabbitmq
chmod 777 /sprint-data/gitea
chmod 777 /sprint-data/clickhouse

View File

@@ -1,34 +0,0 @@
docker login -u mathwave -p $DOCKERHUB_PASSWORD
docker network create -d overlay --attachable swarmpit-nginx || true
docker network create -d overlay --attachable common-infra-nginx || true
docker network create -d overlay --attachable common-infra-nginx-development || true
docker network create -d overlay --attachable queues || true
docker network create -d overlay --attachable queues-development || true
docker network create -d overlay --attachable configurator || true
docker network create -d overlay --attachable monitoring || true
docker network create -d overlay --attachable configurator-development || true
docker network create -d overlay --attachable clickhouse || true
docker network create -d overlay --attachable postgres || true
docker network create -d overlay --attachable postgres-development || true
docker network create -d overlay --attachable mongo || true
docker network create -d overlay --attachable mongo-development || true
docker network create -d overlay --attachable minio || true
docker network create -d overlay --attachable minio-development || true
mkdir /sprint-data/mongo || true
mkdir /sprint-data/redis || true
mkdir /sprint-data/certs || true
mkdir /sprint-data/gitea || true
mkdir /sprint-data/clickhouse || true
mkdir /sprint-data/grafana || true
mkdir /sprint-data/authelia || true
mkdir /sprint-data/authelia/config || true
mkdir /sprint-data/authelia/data || true
chmod 777 /sprint-data/authelia
chmod 777 /sprint-data/authelia/config
chmod 777 /sprint-data/authelia/data
chmod 777 /sprint-data/redis
chmod 777 /sprint-data/rabbitmq
chmod 777 /sprint-data/gitea
chmod 777 /sprint-data/clickhouse
chmod 777 /sprint-data/grafana