9.5 KiB
9.5 KiB
智能矿山标签监测系统 - Ubuntu部署教程
目录
系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Ubuntu 20.04 LTS / 22.04 LTS |
| Python | 3.8 - 3.11 |
| 数据库 | 神通数据库(兼容MySQL协议) |
| 内存 | 最低 2GB,推荐 4GB+ |
| 磁盘 | 最低 10GB可用空间 |
| 网络 | 需要访问神通数据库服务器 |
环境准备
1. 更新系统
sudo apt-get update && sudo apt-get upgrade -y
2. 安装Python 3.10
# 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
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.10
4. 安装其他工具
sudo apt-get install -y git curl wget build-essential
数据库配置
神通数据库连接说明
本系统使用 pymysql 连接神通数据库(通过MySQL兼容协议)。
1. 确认数据库连接信息
数据库IP: 10.x.x.x
数据库端口: 2003 (神通默认端口)
数据库名: xxx
用户名: xxx
密码: xxx
2. 测试数据库连接
# 安装MySQL客户端测试连接
sudo apt-get install -y default-mysql-client
# 测试连接
mysql -h 10.x.x.x -P 2003 -u username -p
3. 修改配置文件
编辑 config.py:
# 数据库配置
DB_HOST = '10.x.x.x' # 修改为实际IP
DB_PORT = 2003 # 修改为实际端口
DB_USER = 'your_username' # 修改为实际用户名
DB_PASSWORD = 'your_password' # 修改为实际密码
DB_NAME = 'your_database' # 修改为实际数据库名
部署应用
方式一:一键安装脚本(推荐)
# 1. 上传项目到服务器
# 使用scp或sftp上传整个 websitedata 目录
# 2. 进入项目目录
cd /path/to/websitedata/mining-system
# 3. 执行安装脚本
sudo bash install.sh
安装脚本会自动:
- 检查并安装系统依赖
- 创建Python虚拟环境
- 安装Python包依赖
- 创建必要的目录
- 可选配置systemd服务
方式二:手动安装
# 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. 创建服务文件
sudo nano /etc/systemd/system/mining-system.service
2. 写入以下内容
[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. 启用并启动服务
# 重载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. 常用管理命令
sudo systemctl stop mining-system # 停止
sudo systemctl restart mining-system # 重启
sudo systemctl status mining-system # 状态
sudo journalctl -u mining-system -f # 日志
配置Nginx反向代理
1. 安装Nginx
sudo apt-get install -y nginx
2. 创建配置文件
sudo nano /etc/nginx/sites-available/mining-system
3. 写入配置(使用项目中的nginx.conf内容)
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. 启用配置
# 创建软链接
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免费证书
# 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
# 安装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
# 允许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. 虚拟环境激活失败
# 确认python路径
which python3.10
# 重新创建虚拟环境
rm -rf venv
python3.10 -m venv venv
source venv/bin/activate
4. 权限问题
# 设置正确的文件所有者
sudo chown -R www-data:www-data /path/to/websitedata
# 或设置为你自己的用户
sudo chown -R $USER:$USER /path/to/websitedata
5. 端口被占用
# 检查5000端口占用
sudo lsof -i :5000
# 杀死占用进程
sudo kill -9 PID
6. 内存不足
如果服务器内存较小,可以增加swap:
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
日志查看
应用日志
# systemd服务日志
sudo journalctl -u mining-system -f
# 或直接查看应用输出
tail -f /path/to/logs/*.log
Nginx日志
sudo tail -f /var/log/nginx/mining-access.log
sudo tail -f /var/log/nginx/mining-error.log
性能优化
1. 使用Gunicorn替代Flask开发服务器
# 安装gunicorn
pip install gunicorn
# 启动
gunicorn -w 4 -b 127.0.0.1:5000 app:app
修改systemd服务文件中的ExecStart:
ExecStart=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
2. 启用数据库连接池
已在 database.py 中配置PooledDB连接池。
3. 静态文件由Nginx直接服务
在nginx.conf中启用静态文件缓存配置。
备份与恢复
备份配置
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
恢复
sudo tar -xzf mining-backup-20260530.tar.gz
sudo systemctl daemon-reload
sudo systemctl restart mining-system
sudo systemctl reload nginx
更新部署
cd /path/to/websitedata/mining-system
# 拉取最新代码(如果使用git)
git pull
# 激活虚拟环境
source venv/bin/activate
# 更新依赖
pip install -r requirements.txt
# 重启服务
sudo systemctl restart mining-system
技术支持
如有问题,请联系开发团队或查看项目README。