feat: UI/UX全面优化 — CSS变量体系/a11y无障碍/Admin角色化/骨架屏/打印样式

This commit is contained in:
selfrelease
2026-07-18 07:57:23 +08:00
parent 2b5a32ca1e
commit 4b42eb80fd
15 changed files with 1519 additions and 442 deletions
-131
View File
@@ -1,131 +0,0 @@
# 股票投资分析系统 - 远程服务器部署情况
> 最后更新:2026-03-17
## 一、服务器概览
| 服务器 | IP | 域名 | 用途 | 状态 |
|--------|-----|------|------|------|
| **主服务器(原有)** | 43.135.128.39 | - | 腾讯云,IP直连 | 运行中 |
| **新服务器** | 152.136.182.184 | stock.allbyai.cn | 腾讯云,HTTPS域名 | 已配置 |
---
## 二、新服务器 (stock.allbyai.cn) 部署架构
### 2.1 访问方式
- **HTTPS(推荐)**https://stock.allbyai.cn
- **IP直连**http://152.136.182.184:3333
### 2.2 技术栈
- **Web 应用**Flask (Python) 端口 3333
- **反向代理**Nginx + HTTPS (acme.sh 证书)
- **数据库**PostgreSQL (stock_app)
- **数据采集**stock-data-service (systemd 后台服务)
### 2.3 部署路径
- 应用目录:`/opt/stock-app`
- Nginx 配置:`/etc/nginx/sites-available/stock.allbyai.cn`
- SSL 证书:`/etc/nginx/ssl/stock.allbyai.cn.crt` / `.key`
---
## 三、部署脚本清单
| 脚本 | 用途 | 执行位置 |
|------|------|----------|
| `deploy/deploy-to-new-server.sh` | 一键完整部署(同步+初始化+Nginx+重启) | 本地 |
| `deploy/sync-to-new-server.sh` | 快速同步代码并重启(日常更新) | 本地 |
| `deploy/setup-server.sh` | 服务器环境初始化(首次部署) | 服务器 |
| `deploy/setup-ssl.sh` | SSL 证书申请/安装(acme.sh | 服务器 |
| `setup_cron_scan.sh` | 配置全景扫描定时任务 | 本地→服务器 |
---
## 四、部署流程
### 4.1 首次部署新服务器
```bash
cd /Users/freedak/Documents/go-new/stock/stock-html
# 1. 执行一键部署(会同步代码、配置 Nginx、重启服务)
./deploy/deploy-to-new-server.sh
# 2. 首次部署需取消 deploy-to-new-server.sh 第43行注释,执行服务器初始化
# ssh ubuntu@152.136.182.184 "${APP_DIR}/deploy/setup-server.sh"
# 3. 若需 SSL,在服务器上执行
# ssh ubuntu@152.136.182.184
# 先配置 acme.sh + DNS TXT 记录,再运行:
# /opt/stock-app/deploy/setup-ssl.sh
# 4. 配置定时任务(全景扫描、K线采集、资金流向)
./setup_cron_scan.sh
# 或手动指定:STOCK_SERVER=ubuntu@152.136.182.184 STOCK_APP_DIR=/opt/stock-app ./setup_cron_scan.sh
```
### 4.2 日常代码更新
```bash
cd /Users/freedak/Documents/go-new/stock/stock-html
./deploy/sync-to-new-server.sh
```
---
## 五、服务管理命令
### 5.1 新服务器 (152.136.182.184)
```bash
# Web 应用
ssh ubuntu@152.136.182.184 "systemctl start stock-app"
ssh ubuntu@152.136.182.184 "systemctl stop stock-app"
ssh ubuntu@152.136.182.184 "systemctl restart stock-app"
ssh ubuntu@152.136.182.184 "systemctl status stock-app"
# 数据采集服务
ssh ubuntu@152.136.182.184 "systemctl start stock-data-service"
ssh ubuntu@152.136.182.184 "systemctl restart stock-data-service"
ssh ubuntu@152.136.182.184 "systemctl status stock-data-service"
# 查看日志
ssh ubuntu@152.136.182.184 "journalctl -u stock-app -f"
ssh ubuntu@152.136.182.184 "journalctl -u stock-data-service -f"
```
### 5.2 SSL 证书续期
- **自动**acme.sh 已配置 cron 自动续期
- **手动**`/home/ubuntu/.acme.sh/acme.sh --renew -d stock.allbyai.cn --ecc --force`
---
## 六、注意事项与待办
### 6.1 已知差异
- `sync-to-new-server.sh` 仅重启 `stock-app`,不重启 `stock-data-service`
- 完整部署时 `deploy-to-new-server.sh` 会重启两个服务
### 6.2 同步排除项
部署时排除:`.git``venv``__pycache__``stock_data_cache``*.pyc``.DS_Store``stock_names.json``alerts_cache.json``trades.json``watchlist.json``*.log``.playwright-mcp`、根目录 `/app.js``/index.html``/main.css``/css``/js``.windsurfrules`
### 6.3 定时任务(新服务器需单独配置)
- 11:50 午休扫描
- 16:30 收盘扫描
- 17:30 5分钟K线采集
- 18:00 资金流向采集
使用 `setup_cron_scan.sh` 或按 `run.md` 手动配置 crontab。
---
## 七、快速参考
| 操作 | 命令 |
|------|------|
| 同步并重启新服务器 | `./deploy/sync-to-new-server.sh` |
| 完整部署新服务器 | `./deploy/deploy-to-new-server.sh` |
| 查看服务状态 | `ssh ubuntu@152.136.182.184 "systemctl status stock-app stock-data-service"` |
| 访问地址 | https://stock.allbyai.cn |
-168
View File
@@ -1,168 +0,0 @@
#!/bin/bash
# 修复 stock.allbyai.cn 数据库连接问题
# 在服务器上执行: sudo bash /opt/stock-app/deploy/fix-db-connection.sh
DB_PASS="stock_password_2025"
APP_DIR="/opt/stock-app"
echo "=========================================="
echo "诊断并修复 PostgreSQL 数据库连接"
echo "=========================================="
# 0. 诊断:收集当前状态
echo ""
echo "[诊断] 检查 PostgreSQL 服务状态..."
systemctl status postgresql --no-pager 2>&1 | head -10
echo ""
echo "[诊断] 检查 PostgreSQL 版本和集群..."
pg_lsclusters 2>/dev/null || echo "pg_lsclusters 不可用"
echo ""
echo "[诊断] 检查 PostgreSQL 监听端口..."
ss -tlnp | grep 5432 || netstat -tlnp 2>/dev/null | grep 5432 || echo "未检测到5432端口监听"
echo ""
echo "[诊断] 检查 pg_hba.conf 配置..."
PG_HBA=$(find /etc/postgresql -name pg_hba.conf 2>/dev/null | head -1)
if [ -n "$PG_HBA" ]; then
echo "文件位置: $PG_HBA"
echo "--- 当前认证配置 ---"
grep -v '^#' "$PG_HBA" | grep -v '^$'
echo "---"
else
echo "未找到 pg_hba.conf"
fi
echo ""
echo "[诊断] 检查 stock-app 服务环境变量..."
systemctl show stock-app --property=Environment 2>/dev/null || echo "无法读取服务配置"
echo ""
echo "[诊断] 尝试 peer 认证连接..."
sudo -u postgres psql -c "SELECT 1 as peer_auth_ok;" 2>&1 || echo "peer 认证失败"
echo ""
echo "[诊断] 检查 stock_app 数据库是否存在..."
sudo -u postgres psql -c "SELECT datname FROM pg_database WHERE datname='stock_app';" 2>&1
echo ""
# 1. 确保 PostgreSQL 服务运行
echo "=========================================="
echo "[1/6] 确保 PostgreSQL 服务运行..."
systemctl start postgresql 2>/dev/null || true
systemctl enable postgresql 2>/dev/null || true
# 2. 重置 postgres 用户密码
echo "[2/6] 重置 postgres 用户密码..."
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '${DB_PASS}';" 2>/dev/null || {
echo "尝试使用 peer 认证重置密码..."
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '${DB_PASS}';" || {
echo "❌ 密码重置失败,尝试重启 PostgreSQL 后重试..."
systemctl restart postgresql
sleep 2
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '${DB_PASS}';"
}
}
echo "✅ 密码已重置"
# 3. 确保数据库存在
echo "[3/6] 确保 stock_app 数据库存在..."
sudo -u postgres createdb stock_app 2>/dev/null || echo "数据库已存在"
# 4. 修复 pg_hba.conf 认证配置
echo "[4/6] 检查并修复 pg_hba.conf..."
if [ -n "$PG_HBA" ]; then
if ! grep -q "host.*all.*all.*127.0.0.1/32.*md5\|host.*all.*all.*127.0.0.1/32.*scram-sha-256" "$PG_HBA"; then
echo "添加 localhost md5 认证规则..."
cp "$PG_HBA" "${PG_HBA}.bak.$(date +%Y%m%d%H%M%S)"
# 在文件末尾前插入规则(确保在其他 host 规则之前或文件末尾)
if ! grep -q "^host.*all.*all.*127.0.0.1/32" "$PG_HBA"; then
echo "host all all 127.0.0.1/32 md5" >> "$PG_HBA"
fi
if ! grep -q "^host.*all.*all.*::1/128" "$PG_HBA"; then
echo "host all all ::1/128 md5" >> "$PG_HBA"
fi
echo "✅ pg_hba.conf 已更新,重启 PostgreSQL..."
systemctl restart postgresql
sleep 2
else
echo "✅ pg_hba.conf 认证配置正常"
fi
else
echo "⚠️ 未找到 pg_hba.conf,跳过"
fi
# 5. 测试数据库连接
echo "[5/6] 测试数据库连接..."
PGPASSWORD="${DB_PASS}" psql -h localhost -U postgres -d stock_app -c "SELECT 1 as ok;" 2>&1
if [ $? -eq 0 ]; then
echo "✅ 数据库连接测试通过"
else
echo "❌ 连接测试失败!"
echo ""
echo "尝试替代修复方案..."
# 尝试将所有 host 认证改为 md5
if [ -n "$PG_HBA" ]; then
echo "将 scram-sha-256 改为 md5..."
sed -i 's/scram-sha-256/md5/g' "$PG_HBA"
systemctl restart postgresql
sleep 2
# 重新设置密码(用 md5 格式)
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '${DB_PASS}';"
PGPASSWORD="${DB_PASS}" psql -h localhost -U postgres -d stock_app -c "SELECT 1 as ok;" 2>&1
if [ $? -eq 0 ]; then
echo "✅ 替代方案成功"
else
echo "❌ 仍然失败,请手动检查 PostgreSQL 日志:"
echo " journalctl -u postgresql -n 50"
echo " cat /var/log/postgresql/*.log | tail -50"
exit 1
fi
fi
fi
# 6. 重启应用服务
echo "[6/6] 重启应用服务..."
systemctl restart stock-app
systemctl restart stock-data-service
sleep 3
# 验证应用是否正常
echo ""
echo "验证应用状态..."
systemctl status stock-app --no-pager | head -5
echo ""
# 用 Python 测试应用级 DB 连接
${APP_DIR}/venv/bin/python -c "
import sys
sys.path.insert(0, '${APP_DIR}')
import os
os.environ['DB_HOST'] = 'localhost'
os.environ['DB_PORT'] = '5432'
os.environ['DB_NAME'] = 'stock_app'
os.environ['DB_USER'] = 'postgres'
os.environ['DB_PASSWORD'] = '${DB_PASS}'
from db import get_db
conn = get_db()
if conn:
cur = conn.cursor()
cur.execute('SELECT COUNT(*) FROM users')
count = cur.fetchone()[0]
print(f'✅ Python 应用级 DB 连接成功!用户数: {count}')
conn.close()
else:
print('❌ Python 应用级 DB 连接失败')
sys.exit(1)
" 2>&1
echo ""
echo "=========================================="
echo "修复完成!请访问 https://stock.allbyai.cn 验证"
echo "=========================================="
-22
View File
@@ -1,22 +0,0 @@
#!/bin/bash
# 从本地执行:同步修复脚本到服务器并执行
# 用法: ./deploy/run-fix-db.sh
set -e
NEW_SERVER="ubuntu@152.136.182.184"
APP_DIR="/opt/stock-app"
LOCAL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
echo "=========================================="
echo "修复 stock.allbyai.cn 数据库连接"
echo "=========================================="
echo "[1/2] 同步修复脚本到服务器..."
rsync -avz "${LOCAL_DIR}/deploy/fix-db-connection.sh" ${NEW_SERVER}:${APP_DIR}/deploy/
echo "[2/2] 在服务器上执行修复..."
ssh ${NEW_SERVER} "sudo bash ${APP_DIR}/deploy/fix-db-connection.sh"
echo ""
echo "验证: curl -s https://stock.allbyai.cn/api/db/data_status"
-19
View File
@@ -1,19 +0,0 @@
[Unit]
Description=Stock Investment Analysis Web Application
After=network.target postgresql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/stock-app
Environment="DB_HOST=localhost"
Environment="DB_PORT=5432"
Environment="DB_NAME=stock_app"
Environment="DB_USER=postgres"
Environment="DB_PASSWORD=stock_password_2025"
ExecStart=/opt/stock-app/venv/bin/python app.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target