Merge branch 'feature/workflow' of http://116.204.74.41:3000/red-future/admin-ui into feature/workflow

This commit is contained in:
2026-07-02 11:33:07 +08:00
5 changed files with 178 additions and 42 deletions
+6
View File
@@ -0,0 +1,6 @@
node_modules
.git
.gitignore
*.md
dist
.cache
+12
View File
@@ -24,6 +24,18 @@ COPY ngnix.conf /etc/nginx/conf.d/default.conf
# 复制SSL证书
COPY ssl/* /etc/nginx/ssl/
# 启动时自动获取宿主机内网 IP,替换 __API_HOST__ 占位符
RUN printf '%s\n' \
'#!/bin/sh' \
'set -e' \
'if [ -n "$API_HOST" ]; then' \
' HOST_IP="$API_HOST"' \
'else' \
' HOST_IP=$(route -n 2>/dev/null | grep "^0.0.0.0" | tr -s " " | cut -d " " -f2)' \
'fi' \
'sed -i "s/__API_HOST__/$HOST_IP/g" /etc/nginx/conf.d/default.conf' \
> /docker-entrypoint.d/01-set-api-host.sh && chmod +x /docker-entrypoint.d/01-set-api-host.sh
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
+71 -42
View File
@@ -1,53 +1,110 @@
# Nginx 静态文件服务 + 智能代理 + 自定义 404 页面
# Gitea 域名转发(HTTP
# 主站 HTTP → HTTPS 重定向
server {
listen 80;
server_name redpowerfuture.com www.redpowerfuture.com;
return 301 https://$host$request_uri;
}
# Gitea HTTP → HTTPS 重定向
server {
listen 80;
server_name gitea.redpowerfuture.com;
return 301 https://$host$request_uri;
}
# MinIO 域名转发(HTTP
# MinIO HTTP 直连(支持 HTTP/HTTPS 双协议
server {
listen 80;
server_name minio.redpowerfuture.com;
return 301 https://$host$request_uri;
location / {
proxy_pass http://__API_HOST__:9001;
proxy_http_version 1.1;
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;
}
}
# HTTP 重定向到 HTTPS(其他域名
# Consul HTTP(仅 HTTP
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
server_name consul.redpowerfuture.com;
location / {
proxy_pass http://__API_HOST__:8500;
proxy_http_version 1.1;
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;
}
}
# MeiliSearch HTTP(仅 HTTP
server {
listen 80;
server_name meilisearch.redpowerfuture.com;
location / {
proxy_pass http://__API_HOST__:7700;
proxy_http_version 1.1;
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;
}
}
# 项目管理 HTTP(仅 HTTP
server {
listen 80;
server_name pm.redpowerfuture.com;
location / {
proxy_pass http://192.168.0.83:8080;
proxy_http_version 1.1;
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;
}
}
# jaeger HTTP(仅 HTTP
server {
listen 80;
server_name jaeger.redpowerfuture.com;
location / {
proxy_pass http://__API_HOST__:16686;
proxy_http_version 1.1;
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;
}
}
# ==================== 主站 HTTPS(静态文件 + API 反向代理) ====================
server {
# 静态资源根目录(dist)
root /usr/share/nginx/html;
index index.html;
client_max_body_size 50M;
# SSL 配置
listen 443 ssl;
server_name redpowerfuture.com www.redpowerfuture.com;
ssl_certificate /etc/nginx/ssl/scs1779764972146_redpowerfuture.com_server.crt;
ssl_certificate_key /etc/nginx/ssl/scs1779764972146_redpowerfuture.com_server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 自定义 404 页面,保持 404 状态码
error_page 404 /404.html;
location = /404.html {
internal;
}
# 根路径默认进入网页端
location = / {
return 302 /web/index.html;
}
# 兼容无斜杠访问
location = /web {
return 302 /web/;
}
@@ -56,32 +113,26 @@ server {
return 302 /sys/;
}
# 网页端(public/web/index.html -> dist/web/index.html
location /web/ {
alias /usr/share/nginx/html/web/;
try_files $uri $uri/ /web/index.html;
}
# 后台管理端(dist/index.html,前缀 /sys/
location /sys/ {
alias /usr/share/nginx/html/;
try_files $uri $uri/ /index.html;
}
# 1. 先尝试作为静态文件查找
location / {
try_files $uri $uri/ @proxy;
}
# 2. 无法找到的请求(API路径)代理到后端
location @proxy {
# 判断 URI 最后一段是否有扩展名
# 有扩展名返回 404,无扩展名则代理
if ($uri ~ \.[^./]+$) {
return 404;
}
proxy_pass http://116.204.74.41:8000;
proxy_pass http://__API_HOST__:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -93,7 +144,7 @@ server {
}
}
# Gitea 域名转发(HTTPS
# ==================== Gitea HTTPS ====================
server {
listen 443 ssl;
server_name gitea.redpowerfuture.com;
@@ -104,7 +155,7 @@ server {
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://gitea.redpowerfuture.com:3000;
proxy_pass http://192.168.0.83:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
@@ -116,25 +167,3 @@ server {
}
}
# MinIO 域名转发(HTTPS
server {
listen 443 ssl;
server_name minio.redpowerfuture.com;
ssl_certificate /etc/nginx/ssl/minio.redpowerfuture.com.pem;
ssl_certificate_key /etc/nginx/ssl/minio.redpowerfuture.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://minio.redpowerfuture.com:9000;
proxy_http_version 1.1;
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;
proxy_connect_timeout 75s;
proxy_send_timeout 86400s;
proxy_read_timeout 86400s;
}
}
+27
View File
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAiQenl6SmaR+i9rEZn+4A+vyKd9ST0XNfKWIRUIyth5nhZOC+
BAAB7wo4sGWS7seEpu0mQOkeAAdFGrjdjNhEhq+74sJAiKXgm8UixBGlDDB0czxI
CtQ5BXM8oX32aR0oc3qjytiDxq8LsJhSJ5M33ZijbFhRxeUioYvdNznXDofcIK5X
JSsTh/VhlpQcpvBYz/tiO9FjPC8z85RI+0U3uqFzuD0NCG7PG4mYDFG2RQpqaClh
TGbB8Kqj6IsMA5ivlLVxoT165hW0anbEVSGS3a8yZ8tzcBkAk4CyoUaONDCvCTef
yHBGq2ZnaMObCBnCyEwdssUJl3dVPKRK8x0O7QIDAQABAoIBAB5TNtgc5IT8Ltzo
SZL2oXnp/JzTSxk9rpAid1F7qIWLXPGtuO96rvLfMLd86xzzw5wLfH09+dkowrbM
tZ8PV271Ih/nPE/hYcknQe/hNcTyTjsYWpsm5y2ZGJBmp2sQvFx+BhSEgPkt0Oj2
dKv0bRcZygTWsNYaROU6ZizsHHdG79ovS+EoDdHvkMTTO4J/5bLBOMTb6JAquoh3
sJjuusbxJQMsR7vyNPDCaKQvyqqzHbckjCduh5tdOTsVNTLUhxbrrvXoe1i5g302
QUcghEiQnE98ZHaypcBdMSvE3gGRKywmCez1na3HuadNCYvrDrBd7M0094lFe8HK
61j5xfMCgYEAvyCAMf9Cp4B0Iibto4RR3FfkB5LmT7gN2wMTzU9x6mrhUuQM9oqg
UItiINS8yhw973qYegxAapLVQTm6VErE8mykNhV2JrzFYrgIkwxMkeZX+AHrWJRD
WAqh73BZRnzN7vhjnI9o6iDnwS2+XqkBcbzHTAQOQxCJQYbfmq8bQT8CgYEAt4qG
hae/yj3ByOUAmgYLPSKMKJv321vB6gtNBU1RD6CcV4F6tW8T9ihOxGcibHJEA39S
lyIqnLOBVsffMf06rjB/5+oUY10u9IOLmV+/HkPnR4dNesx1bSynatuaCJkMsGLZ
Jc9Mjzf18/k5KuFUlW9OZflqrZmK4x77dzX/uNMCgYEAoKJHPD4mnjMW6DFBnyGx
z3hLHZZ4XV36vyzp8q+ntXaY5BrpTjianrdXBPLnrRJpd6HZDxLG/QtlkolbMkcZ
Ggr3RMFq6QnU97Bm/HfkzucC3l12mJ8brp5ZFa2eSuDQD93Rkp7xdX2saq7whgyT
Oy2HbzslZXY7dchOnGo5hO8CgYB8JvUF9cnTGOE7bkRw64Owr+zVD2Oiezf5g/lu
i7U4d/EpdAk4L1H2YZ+eVRFBAC4nm3mXh+IBK59iv0KoAt4ts9rhWkK+T+sSNOU6
Mz0JUO9iQBDV7vXDisAYlUFlbXna2pJ+c/IassTpan0UF2Xqy2bhrcxOb502Mt/w
7JL1RwKBgAUEFHwhFVqRSRTVUK7qJgys/okow602oIsxuaD2dDuLnQ+sCrLCSdZK
GIiKSD2AUVg0lX3jWv0FJSWfc3DmxkeRXB7nMsZvdd217sI+/UvgEmm8j9ZaSPNx
B8HEANFPjPdNv4rBke7h+c0LbffFJj2E+woTppRwu1LQ4fJK+Fmo
-----END RSA PRIVATE KEY-----
+62
View File
@@ -0,0 +1,62 @@
-----BEGIN CERTIFICATE-----
MIIGHzCCBQegAwIBAgIQCBFA3zLwrBf2Ts9EwIgUMzANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzIwHhcNMjYwNjI1MDAwMDAwWhcNMjYwOTIyMjM1OTU5WjAh
MR8wHQYDVQQDExZjZG4ucmVkcG93ZXJmdXR1cmUuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAiQenl6SmaR+i9rEZn+4A+vyKd9ST0XNfKWIRUIyt
h5nhZOC+BAAB7wo4sGWS7seEpu0mQOkeAAdFGrjdjNhEhq+74sJAiKXgm8UixBGl
DDB0czxICtQ5BXM8oX32aR0oc3qjytiDxq8LsJhSJ5M33ZijbFhRxeUioYvdNznX
DofcIK5XJSsTh/VhlpQcpvBYz/tiO9FjPC8z85RI+0U3uqFzuD0NCG7PG4mYDFG2
RQpqaClhTGbB8Kqj6IsMA5ivlLVxoT165hW0anbEVSGS3a8yZ8tzcBkAk4CyoUaO
NDCvCTefyHBGq2ZnaMObCBnCyEwdssUJl3dVPKRK8x0O7QIDAQABo4IDBDCCAwAw
HwYDVR0jBBgwFoAUeN+RkF/u3qz2xXXr1UxVU+8kSrYwHQYDVR0OBBYEFIEPqevi
mZcIRUqroAQbY8OSUDvyMD0GA1UdEQQ2MDSCFmNkbi5yZWRwb3dlcmZ1dHVyZS5j
b22CGnd3dy5jZG4ucmVkcG93ZXJmdXR1cmUuY29tMD4GA1UdIAQ3MDUwMwYGZ4EM
AQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAO
BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGA
BggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0
LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0Vu
Y3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYDVR0TAQH/BAIwADCC
AX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHUAwjF+V0UZo0XufzjespBB68fCIVoi
v3/Vta12mtkOUs0AAAGe/NA+xwAABAMARjBEAiACQ77/5D5Vd1/AY4hmqDqeheYR
Q0oEPWVFKa2tVtA77gIgIbkFKMiJE/MPEkfh7wEAI+IRvEKkW8OoetJu8+tPWs8A
dgDXbX0Q0af1d8LH6V/XAL/5gskzWmXh0LMBcxfAyMVpdwAAAZ780D6zAAAEAwBH
MEUCIQDMVpjW9wbcnd3S/7HNEocFnl2QV+qOJIe4tJoMEgsoZwIgddASbOcKHYc2
7p9gCHCiUlOEk3FR/SaRpnGW+F/y/DMAdgCUTkOH+uzB74HzGSQmqBhlAcfTXzgC
AT9yZ31VNy4Z2AAAAZ780D7UAAAEAwBHMEUCICnb/ctP3+45HcMPVMJHyS8Sm5hk
B20qMtlp5DmRJA2TAiEApCP3cRGv/sKtV68n1z30Hvih37X6f36wGTMsbL34I1Uw
DQYJKoZIhvcNAQELBQADggEBACa9GfzcvecgPyVpPgAqKVF1mnktUzB+5/hMOdH1
czjsyRPMvPlYAnMqsCKWasOoEZsTi2mYUdEDmcICcx5zJbYpKfs7m90ch6ZNCAV+
ar6uyPGDdeVn2I8QMfJtOcKvpxW/hsZfWkRxDmT1d6bfoUuz94hloDdtEUOmoVUh
Mz3BBsEeXX+n3YMM0ZTnz0xNCd7CYnjsVmDM6fvPOeurKM5aa4a2WPamNoFTVDs5
iRaSDbmOc0N3pdNc9oYvZsSWQAYy+V2Pn6ncb1uKPFs6CmlAe2VtAIHGc++KlTZm
XWfxdNX1o1hKuOFoNa9KZnijXOkO0ktHeI+/jF2uRhffFKE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE
eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv
NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch
QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn
NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP
ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI
lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf
BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ
L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi
98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe
xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN
GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2
n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg==
-----END CERTIFICATE-----