add hetzner server infrastructure files
This commit is contained in:
+5
-1
@@ -17,7 +17,7 @@ Port
|
||||
Login
|
||||
a8cae8001@smtp-brevo.com
|
||||
|
||||
|
||||
------------
|
||||
|
||||
Сервис,Адрес,Роль в созидании
|
||||
Caddy,jambotron.com,Вратарь и защитник (SSL)
|
||||
@@ -30,3 +30,7 @@ Gitea,gitea.jambotron.com,Твоя «память» (хранилище кода
|
||||
portainer
|
||||
user:admin
|
||||
password:Z*N3p8&iI,a70"ER45GT9}fBAu2/^Q)C
|
||||
|
||||
|
||||
|
||||
jambo_secret_pass
|
||||
@@ -0,0 +1,53 @@
|
||||
# 🚀 Техническая документация: Инфраструктура Jambotron
|
||||
|
||||
## 🏗️ Общая архитектура
|
||||
* **Сервер**: Hetzner (Helsinki) [cite: 1, 3]
|
||||
* **IP**: 89.167.99.58 [cite: 1]
|
||||
* **ОС**: Ubuntu [cite: 1, 3]
|
||||
* **Локальная сеть Docker**: `jambotron-net` (External) [cite: 3, 5, 6, 7]
|
||||
|
||||
---
|
||||
|
||||
## 📦 Реестр контейнеров и доступов
|
||||
|
||||
| Контейнер | Образ | Внешний URL | Логин / Email | Пароль (Secret) |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| **caddy** | `lucaslorentz/caddy-docker-proxy:latest` [cite: 3] | — | — | — |
|
||||
| **jambotron-app** | `jambotron-prod:latest` [cite: 2, 3] | `jambotron.com` [cite: 1, 3] | — | — |
|
||||
| **jambo-postgres** | `postgres:15-alpine` [cite: 3, 6] | — | `jambotron_admin` [cite: 6] | `jambo_secret_pass` [cite: 6] |
|
||||
| **jambo-pgadmin** | `dpage/pgadmin4` [cite: 3, 6] | `pgadmin.jambotron.com` [cite: 6] | `admin@jambotron.com` [cite: 6] | `your_secure_password` [cite: 6] |
|
||||
| **gitea** | `gitea/gitea:latest` [cite: 3, 5] | `gitea.jambotron.com` [cite: 5] | `Liosha84` [cite: 1] | — |
|
||||
| **db** (Gitea DB) | `postgres:15-alpine` [cite: 3, 5] | — | `gitea` [cite: 5] | `gitea_db_pass` [cite: 5] |
|
||||
| **gitea-runner** | `gitea/act_runner:latest` [cite: 3, 5] | — | — | `ULMDH7Defx...` (Token) [cite: 5] |
|
||||
| **portainer** | `portainer/portainer-ce:latest` [cite: 3, 7] | `manage.jambotron.com` [cite: 7] | `admin` [cite: 3] | — |
|
||||
| **grafana** | `grafana/grafana:latest` [cite: 3] | `jambotron.com/monitor/` [cite: 3] | `admin` [cite: 3] | `monitorPWD` [cite: 3] |
|
||||
| **prometheus** | `prom/prometheus:latest` [cite: 3] | — | — | — |
|
||||
| **cadvisor** | `gcr.io/cadvisor/cadvisor:latest` [cite: 3] | — | — | — |
|
||||
| **node-exporter** | `prom/node-exporter:latest` [cite: 3] | — | — | — |
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Детальная конфигурация сети и томов
|
||||
|
||||
1. **Маршрутизация (Caddy)**:
|
||||
* Caddy работает как `docker-proxy`, автоматически подхватывая лейблы других контейнеров через `docker.sock` [cite: 3].
|
||||
* Для Grafana настроен путь `/monitor/` с `GF_SERVER_SERVE_FROM_SUB_PATH=true` [cite: 3].
|
||||
* Portainer доступен через `manage.jambotron.com` на внутреннем порту `9000` [cite: 7].
|
||||
|
||||
2. **Хранение данных (Volumes)**:
|
||||
* **База приложения**: Использует именованный том `jambo_db_data` [cite: 6].
|
||||
* **Gitea**: Данные хранятся в `./data`, база — в `./db_data` [cite: 5].
|
||||
* **Мониторинг**: Используются тома `caddy_data`, `prometheus_data`, `grafana_data` [cite: 3].
|
||||
* **Portainer**: Данные в томе `portainer_data` [cite: 7].
|
||||
|
||||
3. **Интеграция CI/CD**:
|
||||
* `gitea-runner` подключен к `docker.sock` для управления контейнерами во время сборки [cite: 5].
|
||||
* Используется экземпляр `https://gitea.jambotron.com` [cite: 5].
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Стек технологий
|
||||
* **Backend**: Spring Boot 3.5 [cite: 1]
|
||||
* **Frontend**: Angular 17 [cite: 1]
|
||||
* **Proxy**: Caddy с Docker Proxy Ingress [cite: 3]
|
||||
* **Monitoring**: Prometheus + Grafana [cite: 3, 4]
|
||||
@@ -0,0 +1,93 @@
|
||||
services:
|
||||
# --- ЯДРО: Caddy с авто-лейблами ---
|
||||
caddy:
|
||||
image: lucaslorentz/caddy-docker-proxy:latest
|
||||
container_name: caddy
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
environment:
|
||||
- CADDY_INGRESS_NETWORKS=jambotron-net
|
||||
networks:
|
||||
- jambotron-net
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- caddy_data:/data
|
||||
restart: always
|
||||
|
||||
# --- МОНИТОРИНГ: Prometheus ---
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
container_name: prometheus
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||
- prometheus_data:/prometheus
|
||||
networks:
|
||||
- jambotron-net
|
||||
restart: always
|
||||
|
||||
# --- МОНИТОРИНГ: Grafana ---
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: grafana
|
||||
networks:
|
||||
- jambotron-net
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_PASSWORD=monitorPWD
|
||||
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:%(http_port)s/monitor/
|
||||
- GF_SERVER_SERVE_FROM_SUB_PATH=true
|
||||
labels:
|
||||
caddy: jambotron.com
|
||||
caddy.handle: /monitor/*
|
||||
caddy.handle.reverse_proxy: "{{upstreams 3000}}"
|
||||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
restart: always
|
||||
|
||||
# --- ДАТЧИКИ ---
|
||||
node-exporter:
|
||||
image: prom/node-exporter:latest
|
||||
container_name: node-exporter
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.sysfs=/host/sys'
|
||||
networks:
|
||||
- jambotron-net
|
||||
restart: always
|
||||
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:latest
|
||||
container_name: cadvisor
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:ro
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker/:/var/lib/docker:ro
|
||||
- /dev/disk/:/dev/disk:ro
|
||||
networks:
|
||||
- jambotron-net
|
||||
restart: always
|
||||
|
||||
# --- ТЕСТОВЫЙ ПОДДОМЕН (Wildcard DNS должен быть включен) ---
|
||||
test-app1:
|
||||
image: traefik/whoami
|
||||
container_name: test-app1
|
||||
networks:
|
||||
- jambotron-net
|
||||
labels:
|
||||
caddy: test-app1.jambotron.com
|
||||
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
jambotron-net:
|
||||
name: jambotron-net
|
||||
|
||||
volumes:
|
||||
caddy_data:
|
||||
prometheus_data:
|
||||
grafana_data:
|
||||
@@ -0,0 +1,11 @@
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'node'
|
||||
static_configs:
|
||||
- targets: ['node-exporter:9100']
|
||||
|
||||
- job_name: 'cadvisor'
|
||||
static_configs:
|
||||
- targets: ['cadvisor:8080']
|
||||
@@ -0,0 +1,53 @@
|
||||
services:
|
||||
server:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea_db_pass # Смени на свой
|
||||
restart: always
|
||||
networks:
|
||||
- jambotron-net
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
labels:
|
||||
caddy: gitea.jambotron.com
|
||||
caddy.reverse_proxy: "{{upstreams 3000}}"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
restart: always
|
||||
environment:
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=gitea_db_pass # Должен совпадать с паролем выше
|
||||
- POSTGRES_DB=gitea
|
||||
networks:
|
||||
- jambotron-net
|
||||
volumes:
|
||||
- ./db_data:/var/lib/postgresql/data
|
||||
runner:
|
||||
image: gitea/act_runner:latest
|
||||
container_name: gitea-runner
|
||||
restart: always
|
||||
environment:
|
||||
- GITEA_INSTANCE_URL=https://gitea.jambotron.com
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=ULMDH7DefxH0aafni90ud8My1EMtyi0ocz49MU0u
|
||||
- GITEA_RUNNER_NAME=helsinki-runner
|
||||
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://catthehacker/ubuntu:act-latest
|
||||
volumes:
|
||||
- ./runner_data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock # Критически важно для управления контейнерами
|
||||
networks:
|
||||
- jambotron-net
|
||||
networks:
|
||||
jambotron-net:
|
||||
external: true
|
||||
@@ -0,0 +1,37 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Сервер базы данных
|
||||
jambotron-db-server:
|
||||
image: postgres:15-alpine
|
||||
container_name: jambo-postgres
|
||||
restart: always
|
||||
environment:
|
||||
- POSTGRES_DB=jambotron_prod
|
||||
- POSTGRES_USER=jambotron_admin
|
||||
- POSTGRES_PASSWORD=jambo_secret_pass
|
||||
volumes:
|
||||
- jambo_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- jambotron-net
|
||||
|
||||
# Панель управления базой
|
||||
jambo-pgadmin:
|
||||
image: dpage/pgadmin4
|
||||
container_name: jambo-pgadmin
|
||||
restart: always
|
||||
environment:
|
||||
- PGADMIN_DEFAULT_EMAIL=admin@jambotron.com
|
||||
- PGADMIN_DEFAULT_PASSWORD=your_secure_password
|
||||
networks:
|
||||
- jambotron-net
|
||||
labels:
|
||||
- "caddy=pgadmin.jambotron.com"
|
||||
- "caddy.reverse_proxy={{upstreams 80}}"
|
||||
|
||||
networks:
|
||||
jambotron-net:
|
||||
external: true # Указываем, что сеть уже создана (в ней же живет Caddy и Gitea)
|
||||
|
||||
volumes:
|
||||
jambo_db_data:
|
||||
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
portainer:
|
||||
image: portainer/portainer-ce:latest
|
||||
container_name: portainer
|
||||
restart: always
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- portainer_data:/data
|
||||
networks:
|
||||
- jambotron-net
|
||||
labels:
|
||||
# Меняем на отдельный поддомен
|
||||
caddy: manage.jambotron.com
|
||||
caddy.reverse_proxy: "{{upstreams 9000}}"
|
||||
|
||||
networks:
|
||||
jambotron-net:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
portainer_data:
|
||||
@@ -4,5 +4,5 @@ export const environment = {
|
||||
fromWeb: false,
|
||||
production: false,
|
||||
host_name: 'http://localhost',
|
||||
title: 'JAMBOTRON.RUN.PLACE (dev)'
|
||||
title: 'JAMBOTRON.COM (dev)'
|
||||
};
|
||||
|
||||
@@ -3,7 +3,6 @@ export const environment = {
|
||||
port: 8081,
|
||||
production: true,
|
||||
fromWeb: true,
|
||||
//host_name: 'https://jambotron.run.place',
|
||||
host_name:'https://jambotron.com',
|
||||
title: 'JAMBOTRON.RUN.PLACE'
|
||||
title: 'JAMBOTRON.COM'
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user