485 lines
9.5 KiB
Markdown
485 lines
9.5 KiB
Markdown
# 智能矿山标签监测系统 - Ubuntu部署教程
|
||
|
||
## 目录
|
||
1. [系统要求](#系统要求)
|
||
2. [环境准备](#环境准备)
|
||
3. [数据库配置](#数据库配置)
|
||
4. [部署应用](#部署应用)
|
||
5. [配置系统服务](#配置系统服务)
|
||
6. [配置Nginx反向代理](#配置nginx反向代理)
|
||
7. [配置SSL HTTPS](#配置ssl-https)
|
||
8. [常见问题](#常见问题)
|
||
|
||
---
|
||
|
||
## 系统要求
|
||
|
||
| 项目 | 要求 |
|
||
|------|------|
|
||
| 操作系统 | Ubuntu 20.04 LTS / 22.04 LTS |
|
||
| Python | 3.8 - 3.11 |
|
||
| 数据库 | 神通数据库(兼容MySQL协议) |
|
||
| 内存 | 最低 2GB,推荐 4GB+ |
|
||
| 磁盘 | 最低 10GB可用空间 |
|
||
| 网络 | 需要访问神通数据库服务器 |
|
||
|
||
---
|
||
|
||
## 环境准备
|
||
|
||
### 1. 更新系统
|
||
```bash
|
||
sudo apt-get update && sudo apt-get upgrade -y
|
||
```
|
||
|
||
### 2. 安装Python 3.10
|
||
```bash
|
||
# Ubuntu 20.04 需要添加PPA
|
||
sudo apt-get install -y software-properties-common
|
||
sudo add-apt-repository ppa:deadsnakes/ppa
|
||
sudo apt-get update
|
||
|
||
# 安装Python
|
||
sudo apt-get install -y python3.10 python3.10-venv python3.10-dev
|
||
```
|
||
|
||
### 3. 安装pip
|
||
```bash
|
||
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.10
|
||
```
|
||
|
||
### 4. 安装其他工具
|
||
```bash
|
||
sudo apt-get install -y git curl wget build-essential
|
||
```
|
||
|
||
---
|
||
|
||
## 数据库配置
|
||
|
||
### 神通数据库连接说明
|
||
|
||
本系统使用 `pymysql` 连接神通数据库(通过MySQL兼容协议)。
|
||
|
||
#### 1. 确认数据库连接信息
|
||
```
|
||
数据库IP: 10.x.x.x
|
||
数据库端口: 2003 (神通默认端口)
|
||
数据库名: xxx
|
||
用户名: xxx
|
||
密码: xxx
|
||
```
|
||
|
||
#### 2. 测试数据库连接
|
||
```bash
|
||
# 安装MySQL客户端测试连接
|
||
sudo apt-get install -y default-mysql-client
|
||
|
||
# 测试连接
|
||
mysql -h 10.x.x.x -P 2003 -u username -p
|
||
```
|
||
|
||
#### 3. 修改配置文件
|
||
编辑 `config.py`:
|
||
```python
|
||
# 数据库配置
|
||
DB_HOST = '10.x.x.x' # 修改为实际IP
|
||
DB_PORT = 2003 # 修改为实际端口
|
||
DB_USER = 'your_username' # 修改为实际用户名
|
||
DB_PASSWORD = 'your_password' # 修改为实际密码
|
||
DB_NAME = 'your_database' # 修改为实际数据库名
|
||
```
|
||
|
||
---
|
||
|
||
## 部署应用
|
||
|
||
### 方式一:一键安装脚本(推荐)
|
||
|
||
```bash
|
||
# 1. 上传项目到服务器
|
||
# 使用scp或sftp上传整个 websitedata 目录
|
||
|
||
# 2. 进入项目目录
|
||
cd /path/to/websitedata/mining-system
|
||
|
||
# 3. 执行安装脚本
|
||
sudo bash install.sh
|
||
```
|
||
|
||
安装脚本会自动:
|
||
- 检查并安装系统依赖
|
||
- 创建Python虚拟环境
|
||
- 安装Python包依赖
|
||
- 创建必要的目录
|
||
- 可选配置systemd服务
|
||
|
||
### 方式二:手动安装
|
||
|
||
```bash
|
||
# 1. 进入项目目录
|
||
cd /path/to/websitedata/mining-system
|
||
|
||
# 2. 创建虚拟环境
|
||
python3.10 -m venv venv
|
||
|
||
# 3. 激活虚拟环境
|
||
source venv/bin/activate
|
||
|
||
# 4. 升级pip
|
||
pip install --upgrade pip
|
||
|
||
# 5. 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 6. 创建标签名称目录
|
||
mkdir -p ../name
|
||
|
||
# 7. 放置标签CSV文件
|
||
# 将神浍数据库导出的标签名称CSV文件放入 ../name/ 目录
|
||
```
|
||
|
||
### 配置标签中文名称
|
||
|
||
标签的中文名称映射从CSV文件加载,文件位于 `../name/` 目录。
|
||
|
||
```
|
||
websitedata/
|
||
├── mining-system/ # 本应用
|
||
│ ├── app.py
|
||
│ ├── config.py
|
||
│ └── ...
|
||
└── name/ # 标签名称CSV文件目录
|
||
├── 52300工作面采煤机.csv
|
||
├── 52300工作面泵站主站.csv
|
||
└── ...
|
||
```
|
||
|
||
CSV文件格式要求:
|
||
- 包含 `TagName` 列(标签英文名)
|
||
- 包含 `Description` 列(中文描述/名称)
|
||
|
||
---
|
||
|
||
## 配置系统服务
|
||
|
||
### 使用systemd管理应用
|
||
|
||
#### 1. 创建服务文件
|
||
```bash
|
||
sudo nano /etc/systemd/system/mining-system.service
|
||
```
|
||
|
||
#### 2. 写入以下内容
|
||
```ini
|
||
[Unit]
|
||
Description=智能矿山标签监测系统
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=www-data
|
||
Group=www-data
|
||
WorkingDirectory=/path/to/websitedata/mining-system
|
||
Environment="PATH=/path/to/websitedata/mining-system/venv/bin"
|
||
ExecStart=/path/to/websitedata/mining-system/venv/bin/python3 app.py
|
||
Restart=always
|
||
RestartSec=10
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
|
||
# 环境变量(可选)
|
||
# Environment="FLASK_ENV=production"
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
**注意**: 将 `/path/to/` 替换为实际路径,将 `www-data` 替换为实际运行用户。
|
||
|
||
#### 3. 启用并启动服务
|
||
```bash
|
||
# 重载systemd配置
|
||
sudo systemctl daemon-reload
|
||
|
||
# 启用开机自启
|
||
sudo systemctl enable mining-system
|
||
|
||
# 启动服务
|
||
sudo systemctl start mining-system
|
||
|
||
# 查看状态
|
||
sudo systemctl status mining-system
|
||
|
||
# 查看日志
|
||
sudo journalctl -u mining-system -f
|
||
```
|
||
|
||
#### 4. 常用管理命令
|
||
```bash
|
||
sudo systemctl stop mining-system # 停止
|
||
sudo systemctl restart mining-system # 重启
|
||
sudo systemctl status mining-system # 状态
|
||
sudo journalctl -u mining-system -f # 日志
|
||
```
|
||
|
||
---
|
||
|
||
## 配置Nginx反向代理
|
||
|
||
### 1. 安装Nginx
|
||
```bash
|
||
sudo apt-get install -y nginx
|
||
```
|
||
|
||
### 2. 创建配置文件
|
||
```bash
|
||
sudo nano /etc/nginx/sites-available/mining-system
|
||
```
|
||
|
||
### 3. 写入配置(使用项目中的nginx.conf内容)
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name your-server-ip; # 修改为服务器IP或域名
|
||
|
||
access_log /var/log/nginx/mining-access.log;
|
||
error_log /var/log/nginx/mining-error.log;
|
||
|
||
client_max_body_size 50M;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:5000;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection 'upgrade';
|
||
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_cache_bypass $http_upgrade;
|
||
|
||
proxy_connect_timeout 300;
|
||
proxy_send_timeout 300;
|
||
proxy_read_timeout 300;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. 启用配置
|
||
```bash
|
||
# 创建软链接
|
||
sudo ln -s /etc/nginx/sites-available/mining-system /etc/nginx/sites-enabled/
|
||
|
||
# 移除默认配置(可选)
|
||
sudo rm /etc/nginx/sites-enabled/default
|
||
|
||
# 测试配置
|
||
sudo nginx -t
|
||
|
||
# 重载Nginx
|
||
sudo systemctl reload nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 配置SSL HTTPS
|
||
|
||
### 使用Let's Encrypt免费证书
|
||
|
||
```bash
|
||
# 1. 安装certbot
|
||
sudo apt-get install -y certbot python3-certbot-nginx
|
||
|
||
# 2. 获取证书
|
||
sudo certbot --nginx -d your-domain.com
|
||
|
||
# 3. 自动续期(certbot会自动配置)
|
||
sudo certbot renew --dry-run
|
||
```
|
||
|
||
---
|
||
|
||
## 防火墙配置
|
||
|
||
### 使用ufw
|
||
```bash
|
||
# 安装ufw
|
||
sudo apt-get install -y ufw
|
||
|
||
# 允许SSH(重要!)
|
||
sudo ufw allow OpenSSH
|
||
|
||
# 允许HTTP/HTTPS
|
||
sudo ufw allow 'Nginx Full'
|
||
|
||
# 启用防火墙
|
||
sudo ufw enable
|
||
|
||
# 查看状态
|
||
sudo ufw status
|
||
```
|
||
|
||
### 使用iptables
|
||
```bash
|
||
# 允许SSH
|
||
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
|
||
|
||
# 允许HTTP
|
||
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
||
|
||
# 允许HTTPS
|
||
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
|
||
|
||
# 保存规则
|
||
sudo apt-get install -y iptables-persistent
|
||
sudo netfilter-persistent save
|
||
```
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### 1. pymysql连接超时
|
||
```
|
||
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server")
|
||
```
|
||
**解决方案**:
|
||
- 检查数据库服务器是否可访问: `ping 10.x.x.x`
|
||
- 检查端口是否开放: `telnet 10.x.x.x 2003`
|
||
- 检查防火墙规则
|
||
- 确认神通数据库的MySQL兼容模式已启用
|
||
|
||
### 2. 标签中文名称不显示
|
||
**解决方案**:
|
||
- 检查 `../name/` 目录是否存在
|
||
- 确认CSV文件格式正确(包含TagName和Description列)
|
||
- 重启应用重新加载映射
|
||
|
||
### 3. 虚拟环境激活失败
|
||
```bash
|
||
# 确认python路径
|
||
which python3.10
|
||
# 重新创建虚拟环境
|
||
rm -rf venv
|
||
python3.10 -m venv venv
|
||
source venv/bin/activate
|
||
```
|
||
|
||
### 4. 权限问题
|
||
```bash
|
||
# 设置正确的文件所有者
|
||
sudo chown -R www-data:www-data /path/to/websitedata
|
||
|
||
# 或设置为你自己的用户
|
||
sudo chown -R $USER:$USER /path/to/websitedata
|
||
```
|
||
|
||
### 5. 端口被占用
|
||
```bash
|
||
# 检查5000端口占用
|
||
sudo lsof -i :5000
|
||
|
||
# 杀死占用进程
|
||
sudo kill -9 PID
|
||
```
|
||
|
||
### 6. 内存不足
|
||
如果服务器内存较小,可以增加swap:
|
||
```bash
|
||
sudo fallocate -l 2G /swapfile
|
||
sudo chmod 600 /swapfile
|
||
sudo mkswap /swapfile
|
||
sudo swapon /swapfile
|
||
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
||
```
|
||
|
||
---
|
||
|
||
## 日志查看
|
||
|
||
### 应用日志
|
||
```bash
|
||
# systemd服务日志
|
||
sudo journalctl -u mining-system -f
|
||
|
||
# 或直接查看应用输出
|
||
tail -f /path/to/logs/*.log
|
||
```
|
||
|
||
### Nginx日志
|
||
```bash
|
||
sudo tail -f /var/log/nginx/mining-access.log
|
||
sudo tail -f /var/log/nginx/mining-error.log
|
||
```
|
||
|
||
---
|
||
|
||
## 性能优化
|
||
|
||
### 1. 使用Gunicorn替代Flask开发服务器
|
||
|
||
```bash
|
||
# 安装gunicorn
|
||
pip install gunicorn
|
||
|
||
# 启动
|
||
gunicorn -w 4 -b 127.0.0.1:5000 app:app
|
||
```
|
||
|
||
修改systemd服务文件中的ExecStart:
|
||
```ini
|
||
ExecStart=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
|
||
```
|
||
|
||
### 2. 启用数据库连接池
|
||
已在 `database.py` 中配置PooledDB连接池。
|
||
|
||
### 3. 静态文件由Nginx直接服务
|
||
在nginx.conf中启用静态文件缓存配置。
|
||
|
||
---
|
||
|
||
## 备份与恢复
|
||
|
||
### 备份配置
|
||
```bash
|
||
tar -czf mining-backup-$(date +%Y%m%d).tar.gz \
|
||
/path/to/websitedata \
|
||
/etc/systemd/system/mining-system.service \
|
||
/etc/nginx/sites-available/mining-system
|
||
```
|
||
|
||
### 恢复
|
||
```bash
|
||
sudo tar -xzf mining-backup-20260530.tar.gz
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart mining-system
|
||
sudo systemctl reload nginx
|
||
```
|
||
|
||
---
|
||
|
||
## 更新部署
|
||
|
||
```bash
|
||
cd /path/to/websitedata/mining-system
|
||
|
||
# 拉取最新代码(如果使用git)
|
||
git pull
|
||
|
||
# 激活虚拟环境
|
||
source venv/bin/activate
|
||
|
||
# 更新依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 重启服务
|
||
sudo systemctl restart mining-system
|
||
```
|
||
|
||
---
|
||
|
||
## 技术支持
|
||
|
||
如有问题,请联系开发团队或查看项目README。 |