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_BUCKET=sarex-media-storage
|
||||
SAREX_MINIO_REGION=us-east-1
|
||||
# Внешний URL консоли MinIO (minio-домен, путь /console на верхнем nginx)
|
||||
SAREX_MINIO_CONSOLE_URL=http://minio.sarex.local:9080/console
|
||||
# Внешний URL консоли MinIO (minio-домен, путь /console на верхнем nginx, https)
|
||||
SAREX_MINIO_CONSOLE_URL=https://minio.sarex.local/console
|
||||
|
||||
# --- Домены верхнего nginx (замени на реальные, заведи в DNS/hosts) ---
|
||||
PLATFORM_DOMAIN=sarex.local # основной домен платформы (frontend + /api)
|
||||
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -7,3 +7,7 @@ tmp
|
||||
snapshots/*
|
||||
k3s/*
|
||||
k3s-master/*
|
||||
|
||||
# самоподписанные TLS-сертификаты
|
||||
nginx/certs/*.crt
|
||||
nginx/certs/*.key
|
||||
@ -150,7 +150,7 @@ services:
|
||||
MINIO_ROOT_USER: ${SAREX_MINIO_ROOT_USER:-minioadmin}
|
||||
MINIO_ROOT_PASSWORD: ${SAREX_MINIO_ROOT_PASSWORD:-minioadmin}
|
||||
# Консоль отдаётся через верхний 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:
|
||||
- sarex-minio-data:/data
|
||||
|
||||
@ -252,8 +252,8 @@ services:
|
||||
container_name: sarex-nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80" # 80/443 заняты k3s
|
||||
- "443:443" # 80/443 заняты k3s
|
||||
- "80:80" # http
|
||||
- "443:443" # https (самоподписанный сертификат)
|
||||
environment:
|
||||
# подставляются envsubst'ом в шаблон при старте контейнера
|
||||
PLATFORM_DOMAIN: ${PLATFORM_DOMAIN:-sarex.local}
|
||||
@ -261,6 +261,7 @@ services:
|
||||
MINIO_DOMAIN: ${MINIO_DOMAIN:-minio.sarex.local}
|
||||
volumes:
|
||||
- ./nginx/templates:/etc/nginx/templates:ro,z # :z — SELinux label для RedOS
|
||||
- ./nginx/certs:/etc/nginx/certs:ro,z # TLS-сертификаты
|
||||
depends_on:
|
||||
# - backend # TODO: закомментированы в шаблоне nginx, пока в работе
|
||||
# - 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;
|
||||
client_max_body_size 5000M; # крупные загрузки (снимки, облака точек)
|
||||
keepalive_timeout 300;
|
||||
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_vary on;
|
||||
gzip_proxied any;
|
||||
@ -34,6 +42,7 @@ proxy_set_header X-Forwarded-Proto $scheme;
|
||||
# ============================ Платформа (основной домен) ====================
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen 443 ssl default_server;
|
||||
server_name ${PLATFORM_DOMAIN};
|
||||
|
||||
location = /healthz {
|
||||
@ -78,6 +87,7 @@ server {
|
||||
# ======================= Admin: RabbitMQ management UI ======================
|
||||
server {
|
||||
listen 80;
|
||||
listen 443 ssl;
|
||||
server_name ${ADMIN_DOMAIN};
|
||||
|
||||
location / {
|
||||
@ -95,10 +105,12 @@ server {
|
||||
# ============================== MinIO (отдельный домен) =====================
|
||||
server {
|
||||
listen 80;
|
||||
listen 443 ssl;
|
||||
server_name ${MINIO_DOMAIN};
|
||||
|
||||
# Веб-консоль администрирования (порт 9001). Требует у сервиса minio
|
||||
# MINIO_BROWSER_REDIRECT_URL = http://<MINIO_DOMAIN>:9080/console
|
||||
location = /console { return 301 /console/; } # без слэша → на /console/
|
||||
location /console/ {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user