program/Ubuntu部署教程.md

485 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 智能矿山标签监测系统 - 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。