add 20251112 report

This commit is contained in:
Jiao77
2025-11-10 01:50:34 +08:00
parent 6592c45649
commit 4c9dc87d1c
8 changed files with 3093 additions and 22 deletions

3
.gitignore vendored
View File

@@ -1,4 +1,5 @@
node_modules
.astro
dist
jiao77.cn
jiao77.cn
package-lock.json

View File

@@ -113,6 +113,44 @@ get_deploy_config() {
fi
}
# 上传 Apache 配置文件
upload_apache_config() {
echo "📤 上传 Apache 配置文件..."
if [ -f "jiao77.cn.conf" ]; then
# 备份原有配置文件
echo "📋 备份原有 Apache 配置..."
ssh ${USERNAME}@${SERVER_IP} "
if [ -f '/etc/apache2/sites-available/jiao77.cn.conf' ]; then
sudo cp /etc/apache2/sites-available/jiao77.cn.conf /etc/apache2/sites-available/jiao77.cn.conf.backup.\$(date +%Y%m%d_%H%M%S)
echo '✅ 原配置文件已备份'
else
echo '⚠️ 原配置文件不存在,跳过备份'
fi
"
# 上传新配置文件
scp jiao77.cn.conf ${USERNAME}@${SERVER_IP}:/tmp/jiao77.cn.conf
ssh ${USERNAME}@${SERVER_IP} "
sudo mv /tmp/jiao77.cn.conf /etc/apache2/sites-available/jiao77.cn.conf
echo '✅ Apache 配置文件已上传'
"
# 重新加载 Apache 配置
echo "🔄 重新加载 Apache 配置..."
ssh ${USERNAME}@${SERVER_IP} "
if sudo apache2ctl configtest; then
sudo systemctl reload apache2
echo '✅ Apache 配置已重新加载'
else
echo '❌ Apache 配置测试失败,请检查配置文件'
exit 1
fi
"
else
echo "⚠️ jiao77.cn.conf 文件不存在,跳过上传"
fi
}
# 上传 .htaccess 文件
upload_htaccess() {
echo "📤 上传 .htaccess 文件..."
@@ -128,7 +166,10 @@ upload_htaccess() {
deploy_files() {
echo ""
echo "🚀 开始部署文件..."
# 先上传 Apache 配置文件
upload_apache_config
if [ "$USE_RSYNC" = true ]; then
echo "📡 使用 rsync 同步文件..."
rsync -avz --delete --progress \
@@ -140,18 +181,18 @@ deploy_files() {
cd dist
tar -czf ../deploy-temp.tar.gz *
cd ..
# 上传并解压
scp deploy-temp.tar.gz ${USERNAME}@${SERVER_IP}:/tmp/
ssh ${USERNAME}@${SERVER_IP} "cd ${WEB_ROOT} && sudo tar -xzf /tmp/deploy-temp.tar.gz && sudo rm /tmp/deploy-temp.tar.gz"
# 清理本地临时文件
rm -f deploy-temp.tar.gz
fi
# 上传 .htaccess
upload_htaccess
echo "✅ 文件部署完成"
}
@@ -220,6 +261,8 @@ show_results() {
echo " • 查看部署日志: tail -f /var/log/apache2/error.log"
echo " • 检查文件权限: ls -la ${WEB_ROOT}/"
echo " • 验证 Apache 配置: apache2ctl configtest"
echo " • 查看 Apache 状态: systemctl status apache2"
echo " • 配置文件备份位置: /etc/apache2/sites-available/jiao77.cn.conf.backup.*"
echo ""
}

323
jiao77.cn.conf Normal file
View File

@@ -0,0 +1,323 @@
############################################################
# Apache 子域名反向代理配置jiao77.cn
#
# 说明:
# - 避免子路径带来的静态资源/重写/WS 问题,每个服务独立子域名
# - 统一在 443 终止 TLSApache 反代到本地端口服务
# - 主站 jiao77.cn 使用 Docker 容器部署(端口 3001
# - API 后端服务使用 Docker 容器部署(端口 3000
#
# 前置:
# - DNS 为以下子域名添加 A/AAAA 记录 -> 服务器 IP
# - 证书需覆盖所有子域(通配符 *.jiao77.cn 或 SAN 多域名证书)
# - 启用模块ssl headers proxy proxy_http proxy_wstunnel rewrite deflate cache cache_disk expires
#
# 部署:
# - 放置到 /etc/apache2/sites-available/jiao77-subdomains.conf
# - sudo a2enmod ssl headers proxy proxy_http proxy_wstunnel rewrite deflate cache cache_disk expires
# - sudo a2ensite jiao77-subdomains && sudo systemctl reload apache2
############################################################
# ============ 主站(前端 Docker 容器) ============
<VirtualHost *:80>
ServerName jiao77.cn
ServerAlias www.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName jiao77.cn
ServerAlias www.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
# 安全头配置
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "no-referrer-when-downgrade"
# 代理配置
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
# 缓存策略VirtualHost 级别)
# 注意:一些缓存指令(如 CacheIgnoreHeaders不允许放在 <LocationMatch> 中
# 因此在虚拟主机级别声明,以便对下方的缓存生效
CacheIgnoreHeaders Set-Cookie
# ============ API 后端代理 ============
# 暂时注释掉 API 代理,如果需要可以取消注释
# 健康检查(不记录日志)
# <Location /health>
# ProxyPass http://127.0.0.1:3000/health
# ProxyPassReverse http://127.0.0.1:3000/health
# SetEnv no-log 1
# </Location>
# API 接口代理
# 关键:使用 <Location> 并带尾部斜杠,确保路径正确传递
# <Location /api/>
# ProxyPass http://127.0.0.1:3000/api/
# ProxyPassReverse http://127.0.0.1:3000/api/
#
# # API 缓存配置10分钟
# CacheEnable disk
# CacheHeader on
# CacheDefaultExpire 600
# CacheMaxExpire 600
# </Location>
# ============ 静态资源缓存 ============
# 由于现在直接使用静态文件服务,这个 LocationMatch 可以移除
# 静态资源缓存已在下面的 Directory 配置中处理
# ============ 前端应用代理(默认) ============
# 直接提供静态文件服务,不使用 Docker 容器
DocumentRoot /var/www/jiao77.cn
DirectoryIndex index.html
# 静态文件处理
<Directory /var/www/jiao77.cn>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 对静态资源启用缓存
<LocationMatch "\.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|svg|webp)$">
ExpiresActive On
ExpiresDefault "access plus 30 days"
Header set Cache-Control "public, max-age=2592000, immutable"
</LocationMatch>
# Gzip 压缩配置
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/javascript application/json
AddOutputFilterByType DEFLATE application/xml application/rss+xml
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/jiao77-main-error.log
CustomLog ${APACHE_LOG_DIR}/jiao77-main-access.log combined
</VirtualHost>
</IfModule>
# 公共代理选项
<IfModule mod_ssl.c>
SSLProxyEngine on
</IfModule>
# ============ Gitea ============
<VirtualHost *:80>
ServerName gitea.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://gitea.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName gitea.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:3012/
ProxyPassReverse / http://127.0.0.1:3012/
ErrorLog ${APACHE_LOG_DIR}/gitea-error.log
CustomLog ${APACHE_LOG_DIR}/gitea-access.log combined
</VirtualHost>
</IfModule>
# ============ AList ============
<VirtualHost *:80>
ServerName alist.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://alist.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName alist.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
# 如果 AList 后端是 HTTPS如 52443保持 https 代理;若是 http改为 http://127.0.0.1:<port>
ProxyPass / https://127.0.0.1:52443/
ProxyPassReverse / https://127.0.0.1:52443/
ErrorLog ${APACHE_LOG_DIR}/alist-error.log
CustomLog ${APACHE_LOG_DIR}/alist-access.log combined
</VirtualHost>
</IfModule>
# ============ Q-Nas ============
<VirtualHost *:80>
ServerName qnas.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://qnas.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName qnas.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:5666/
ProxyPassReverse / http://127.0.0.1:5666/
ErrorLog ${APACHE_LOG_DIR}/qnas-error.log
CustomLog ${APACHE_LOG_DIR}/qnas-access.log combined
</VirtualHost>
</IfModule>
# ============ nuc-Nas ============
<VirtualHost *:80>
ServerName nucnas.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://nucnas.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName nucnas.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:56661/
ProxyPassReverse / http://127.0.0.1:56661/
ErrorLog ${APACHE_LOG_DIR}/nucnas-error.log
CustomLog ${APACHE_LOG_DIR}/nucnas-access.log combined
</VirtualHost>
</IfModule>
# ============ RAGflow ============
<VirtualHost *:80>
ServerName ragflow.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://ragflow.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ragflow.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:28081/
ProxyPassReverse / http://127.0.0.1:28081/
ErrorLog ${APACHE_LOG_DIR}/ragflow-error.log
CustomLog ${APACHE_LOG_DIR}/ragflow-access.log combined
</VirtualHost>
</IfModule>
# ============ Open WebUI ============
<VirtualHost *:80>
ServerName ai.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://ai.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ai.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:38080/
ProxyPassReverse / http://127.0.0.1:38080/
# 常见 WebSocket 路径(按需调整)
ProxyPass /ws ws://127.0.0.1:38080/ws
ProxyPassReverse /ws ws://127.0.0.1:38080/ws
ErrorLog ${APACHE_LOG_DIR}/ai-error.log
CustomLog ${APACHE_LOG_DIR}/ai-access.log combined
</VirtualHost>
</IfModule>
# ============ Navidrome ============
<VirtualHost *:80>
ServerName music.jiao77.cn
RewriteEngine On
RewriteRule ^/(.*)$ https://music.jiao77.cn/$1 [R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName music.jiao77.cn
SSLEngine on
SSLCertificateFile /etc/ssl/jiao77/cert.pem
SSLCertificateKeyFile /etc/ssl/jiao77/key.pem
SSLCertificateChainFile /etc/ssl/jiao77/chain.pem
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass / http://127.0.0.1:45332/
ProxyPassReverse / http://127.0.0.1:45332/
ErrorLog ${APACHE_LOG_DIR}/music-error.log
CustomLog ${APACHE_LOG_DIR}/music-access.log combined
</VirtualHost>
</IfModule>
# ============ 缓存配置 ============
<IfModule mod_cache.c>
CacheRoot /var/cache/apache2/jiao77
CacheDirLevels 2
CacheDirLength 1
CacheMaxFileSize 10000000
CacheMinFileSize 1
CacheReadSize 0
CacheReadTime 3000
</IfModule>

19
package-lock.json generated
View File

@@ -9,7 +9,7 @@
"version": "0.0.1",
"dependencies": {
"@astrojs/tailwind": "^6.0.2",
"astro": "^5.14.7",
"astro": "^5.15.4",
"tailwindcss": "^3.0.0"
},
"devDependencies": {
@@ -2065,9 +2065,9 @@
}
},
"node_modules/astro": {
"version": "5.14.7",
"resolved": "https://registry.npmjs.org/astro/-/astro-5.14.7.tgz",
"integrity": "sha512-vdZmRN2MFf60ZTjFkZNrQQkrmeeZzTI1c6N3ZRQN55rPGHjywM2VplJwJ68q496DfpaoDoAroDBpdm+eTgHUtQ==",
"version": "5.15.4",
"resolved": "https://registry.npmjs.org/astro/-/astro-5.15.4.tgz",
"integrity": "sha512-0g/68hLHEJZF2nYUcZM5O0kOnzCsCIf8eA9+0jfBAxp4ycujrIHRgIOdZCFKL9GoTsn8AypWbziypH5aEIF+aA==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -2103,7 +2103,6 @@
"http-cache-semantics": "^4.2.0",
"import-meta-resolve": "^4.2.0",
"js-yaml": "^4.1.0",
"kleur": "^4.1.5",
"magic-string": "^0.30.18",
"magicast": "^0.3.5",
"mrmime": "^2.0.1",
@@ -2111,6 +2110,7 @@
"p-limit": "^6.2.0",
"p-queue": "^8.1.0",
"package-manager-detector": "^1.3.0",
"picocolors": "^1.1.1",
"picomatch": "^4.0.3",
"prompts": "^2.4.2",
"rehype": "^13.0.2",
@@ -2125,7 +2125,7 @@
"unist-util-visit": "^5.0.0",
"unstorage": "^1.17.0",
"vfile": "^6.0.3",
"vite": "^6.3.6",
"vite": "^6.4.1",
"vitefu": "^1.1.1",
"xxhash-wasm": "^1.1.0",
"yargs-parser": "^21.1.1",
@@ -3640,6 +3640,7 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -6390,9 +6391,9 @@
}
},
"node_modules/vite": {
"version": "6.3.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz",
"integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==",
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"license": "MIT",
"peer": true,
"dependencies": {

View File

@@ -11,7 +11,7 @@
},
"dependencies": {
"@astrojs/tailwind": "^6.0.2",
"astro": "^5.14.7",
"astro": "^5.15.4",
"tailwindcss": "^3.0.0"
},
"devDependencies": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -44,7 +44,7 @@ import AnimatedElement from '../../components/AnimatedElement.astro';
href="/report/20250609/"
icon="fas fa-calendar-alt"
color="primary"
size="large"
size="medium"
/>
</AnimatedElement>
@@ -55,7 +55,7 @@ import AnimatedElement from '../../components/AnimatedElement.astro';
href="/report/20250722/"
icon="fas fa-calendar-alt"
color="secondary"
size="large"
size="medium"
/>
</AnimatedElement>
@@ -66,7 +66,7 @@ import AnimatedElement from '../../components/AnimatedElement.astro';
href="/report/ai-eda-paper-report/"
icon="fas fa-microchip"
color="accent"
size="large"
size="medium"
/>
</AnimatedElement>
@@ -121,7 +121,7 @@ import AnimatedElement from '../../components/AnimatedElement.astro';
href="/report/RoRD-overall/"
icon="fas fa-project-diagram"
color="secondary"
size="large"
size="medium"
/>
</AnimatedElement>
@@ -132,11 +132,22 @@ import AnimatedElement from '../../components/AnimatedElement.astro';
href="/report/RoRD_Increment_Report/"
icon="fas fa-chart-line"
color="primary"
size="large"
size="medium"
/>
</AnimatedElement>
<AnimatedElement animation="fadeInUp" delay={1400} trigger="scroll">
<AnimatedElement animation="fadeInUp" delay={1600} trigger="scroll">
<NavigationCard
title="RoRD 中期检查报告"
description="面向集成电路版图识别的旋转鲁棒描述子项目中期进展报告。涵盖核心技术实现、性能测试分析和后期工作计划。"
href="/report/20251112/"
icon="fas fa-clipboard-check"
color="primary"
size="medium"
/>
</AnimatedElement>
<AnimatedElement animation="fadeInUp" delay={1700} trigger="scroll">
<NavigationCard
title="📄 报告模板"
description="技术报告标准模板,包含统一宽度配置、代码展示、数学公式等完整组件支持。快速创建专业报告!"