Add script to generate a self-signed TLS certificate for Nginx and update configurations to enable HTTPS with default and custom domains.
This commit is contained in:
parent
ea23b885c4
commit
0ad515e6c4
@ -16,8 +16,8 @@ SAREX_MINIO_ROOT_USER=minioadmin
|
|||||||
SAREX_MINIO_ROOT_PASSWORD=minioadmin
|
SAREX_MINIO_ROOT_PASSWORD=minioadmin
|
||||||
SAREX_MINIO_BUCKET=sarex-media-storage
|
SAREX_MINIO_BUCKET=sarex-media-storage
|
||||||
SAREX_MINIO_REGION=us-east-1
|
SAREX_MINIO_REGION=us-east-1
|
||||||
# Внешний URL консоли MinIO (minio-домен, путь /console на верхнем nginx)
|
# Внешний URL консоли MinIO (minio-домен, путь /console на верхнем nginx, https)
|
||||||
SAREX_MINIO_CONSOLE_URL=http://minio.sarex.local:9080/console
|
SAREX_MINIO_CONSOLE_URL=https://minio.sarex.local/console
|
||||||
|
|
||||||
# --- Домены верхнего nginx (замени на реальные, заведи в DNS/hosts) ---
|
# --- Домены верхнего nginx (замени на реальные, заведи в DNS/hosts) ---
|
||||||
PLATFORM_DOMAIN=sarex.local # основной домен платформы (frontend + /api)
|
PLATFORM_DOMAIN=sarex.local # основной домен платформы (frontend + /api)
|
||||||
|
|||||||
6
.gitignore
vendored
6
.gitignore
vendored
@ -6,4 +6,8 @@ CLAUDE.md
|
|||||||
tmp
|
tmp
|
||||||
snapshots/*
|
snapshots/*
|
||||||
k3s/*
|
k3s/*
|
||||||
k3s-master/*
|
k3s-master/*
|
||||||
|
|
||||||
|
# самоподписанные TLS-сертификаты
|
||||||
|
nginx/certs/*.crt
|
||||||
|
nginx/certs/*.key
|
||||||
@ -150,7 +150,7 @@ services:
|
|||||||
MINIO_ROOT_USER: ${SAREX_MINIO_ROOT_USER:-minioadmin}
|
MINIO_ROOT_USER: ${SAREX_MINIO_ROOT_USER:-minioadmin}
|
||||||
MINIO_ROOT_PASSWORD: ${SAREX_MINIO_ROOT_PASSWORD:-minioadmin}
|
MINIO_ROOT_PASSWORD: ${SAREX_MINIO_ROOT_PASSWORD:-minioadmin}
|
||||||
# Консоль отдаётся через верхний nginx на minio-домене по пути /console
|
# Консоль отдаётся через верхний nginx на minio-домене по пути /console
|
||||||
MINIO_BROWSER_REDIRECT_URL: ${SAREX_MINIO_CONSOLE_URL:-http://minio.sarex.local:9080/console}
|
MINIO_BROWSER_REDIRECT_URL: ${SAREX_MINIO_CONSOLE_URL:-https://minio.sarex.local/console}
|
||||||
volumes:
|
volumes:
|
||||||
- sarex-minio-data:/data
|
- sarex-minio-data:/data
|
||||||
|
|
||||||
@ -252,8 +252,8 @@ services:
|
|||||||
container_name: sarex-nginx
|
container_name: sarex-nginx
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "80:80" # 80/443 заняты k3s
|
- "80:80" # http
|
||||||
- "443:443" # 80/443 заняты k3s
|
- "443:443" # https (самоподписанный сертификат)
|
||||||
environment:
|
environment:
|
||||||
# подставляются envsubst'ом в шаблон при старте контейнера
|
# подставляются envsubst'ом в шаблон при старте контейнера
|
||||||
PLATFORM_DOMAIN: ${PLATFORM_DOMAIN:-sarex.local}
|
PLATFORM_DOMAIN: ${PLATFORM_DOMAIN:-sarex.local}
|
||||||
@ -261,6 +261,7 @@ services:
|
|||||||
MINIO_DOMAIN: ${MINIO_DOMAIN:-minio.sarex.local}
|
MINIO_DOMAIN: ${MINIO_DOMAIN:-minio.sarex.local}
|
||||||
volumes:
|
volumes:
|
||||||
- ./nginx/templates:/etc/nginx/templates:ro,z # :z — SELinux label для RedOS
|
- ./nginx/templates:/etc/nginx/templates:ro,z # :z — SELinux label для RedOS
|
||||||
|
- ./nginx/certs:/etc/nginx/certs:ro,z # TLS-сертификаты
|
||||||
depends_on:
|
depends_on:
|
||||||
# - backend # TODO: закомментированы в шаблоне nginx, пока в работе
|
# - backend # TODO: закомментированы в шаблоне nginx, пока в работе
|
||||||
# - frontend
|
# - frontend
|
||||||
|
|||||||
36
nginx/gen-cert.sh
Normal file
36
nginx/gen-cert.sh
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Генерация самоподписанного TLS-сертификата для верхнего nginx.
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# ./nginx/gen-cert.sh # домены по умолчанию
|
||||||
|
# ./nginx/gen-cert.sh sarex.local api.sarex.local # свои домены (первый → CN)
|
||||||
|
# DAYS=730 ./nginx/gen-cert.sh # свой срок действия
|
||||||
|
#
|
||||||
|
# Результат: nginx/certs/selfsigned.{crt,key} (в .gitignore).
|
||||||
|
# MSYS_NO_PATHCONV=1 нужен для Git Bash на Windows; на Linux он безвреден.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
CERT_DIR="$(cd "$(dirname "$0")" && pwd)/certs"
|
||||||
|
DAYS="${DAYS:-365}"
|
||||||
|
|
||||||
|
if [ "$#" -gt 0 ]; then
|
||||||
|
DOMAINS=("$@")
|
||||||
|
else
|
||||||
|
DOMAINS=(sarex.local admin.sarex.local minio.sarex.local)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# subjectAltName из списка доменов, CN — первый домен
|
||||||
|
SAN=""
|
||||||
|
for d in "${DOMAINS[@]}"; do SAN="${SAN}${SAN:+,}DNS:${d}"; done
|
||||||
|
CN="${DOMAINS[0]}"
|
||||||
|
|
||||||
|
mkdir -p "$CERT_DIR"
|
||||||
|
cd "$CERT_DIR" # пишем относительными именами: не ломается конверсия путей в Git Bash
|
||||||
|
MSYS_NO_PATHCONV=1 openssl req -x509 -nodes -newkey rsa:2048 -days "$DAYS" \
|
||||||
|
-keyout selfsigned.key \
|
||||||
|
-out selfsigned.crt \
|
||||||
|
-subj "/CN=${CN}" \
|
||||||
|
-addext "subjectAltName=${SAN}"
|
||||||
|
|
||||||
|
echo "OK: сертификат на ${DAYS} дней → $CERT_DIR/selfsigned.{crt,key}"
|
||||||
|
echo "SAN: ${SAN}"
|
||||||
@ -4,9 +4,17 @@
|
|||||||
|
|
||||||
large_client_header_buffers 8 128k;
|
large_client_header_buffers 8 128k;
|
||||||
client_max_body_size 5000M; # крупные загрузки (снимки, облака точек)
|
client_max_body_size 5000M; # крупные загрузки (снимки, облака точек)
|
||||||
keepalive_timeout 300;
|
|
||||||
tcp_nopush on;
|
tcp_nopush on;
|
||||||
|
|
||||||
|
# TLS (самоподписанный сертификат на все домены). Задаём на http-уровне —
|
||||||
|
# наследуется всеми server-блоками. Файлы монтируются из ./nginx/certs.
|
||||||
|
ssl_certificate /etc/nginx/certs/selfsigned.crt;
|
||||||
|
ssl_certificate_key /etc/nginx/certs/selfsigned.key;
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||||
|
ssl_session_cache shared:SSL:10m;
|
||||||
|
http2 on;
|
||||||
|
|
||||||
gzip on;
|
gzip on;
|
||||||
gzip_vary on;
|
gzip_vary on;
|
||||||
gzip_proxied any;
|
gzip_proxied any;
|
||||||
@ -33,7 +41,8 @@ proxy_set_header X-Forwarded-Proto $scheme;
|
|||||||
|
|
||||||
# ============================ Платформа (основной домен) ====================
|
# ============================ Платформа (основной домен) ====================
|
||||||
server {
|
server {
|
||||||
listen 80 default_server;
|
listen 80 default_server;
|
||||||
|
listen 443 ssl default_server;
|
||||||
server_name ${PLATFORM_DOMAIN};
|
server_name ${PLATFORM_DOMAIN};
|
||||||
|
|
||||||
location = /healthz {
|
location = /healthz {
|
||||||
@ -78,6 +87,7 @@ server {
|
|||||||
# ======================= Admin: RabbitMQ management UI ======================
|
# ======================= Admin: RabbitMQ management UI ======================
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
|
listen 443 ssl;
|
||||||
server_name ${ADMIN_DOMAIN};
|
server_name ${ADMIN_DOMAIN};
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
@ -95,10 +105,12 @@ server {
|
|||||||
# ============================== MinIO (отдельный домен) =====================
|
# ============================== MinIO (отдельный домен) =====================
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
|
listen 443 ssl;
|
||||||
server_name ${MINIO_DOMAIN};
|
server_name ${MINIO_DOMAIN};
|
||||||
|
|
||||||
# Веб-консоль администрирования (порт 9001). Требует у сервиса minio
|
# Веб-консоль администрирования (порт 9001). Требует у сервиса minio
|
||||||
# MINIO_BROWSER_REDIRECT_URL = http://<MINIO_DOMAIN>:9080/console
|
# MINIO_BROWSER_REDIRECT_URL = http://<MINIO_DOMAIN>:9080/console
|
||||||
|
location = /console { return 301 /console/; } # без слэша → на /console/
|
||||||
location /console/ {
|
location /console/ {
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user