program/Ubuntu部署教程.md

9.5 KiB
Raw Blame History

智能矿山标签监测系统 - Ubuntu部署教程

目录

  1. 系统要求
  2. 环境准备
  3. 数据库配置
  4. 部署应用
  5. 配置系统服务
  6. 配置Nginx反向代理
  7. 配置SSL HTTPS
  8. 常见问题

系统要求

项目 要求
操作系统 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。