Skip to content

系统部署

材料准备

  1. 使用公司资质申请苹果开发者账号

    https://support.tuya.com/zh/help/_detail/Kam3pskapsytn

    注意事项:

    1. 填写公司官网的时候 公司官网必须可以访问 且官网包含公司的 地址 联系方式 等信息 否则会被决拒绝

    image-20240823122910636

    1. 申请苹果开发者的appleid 最好使用已经注册并使用一段时间的appleid 否则会风控,申请苹果开发者的手机和网络一定不要是已经申请过开发者的,否则也会风控
  2. 使用公司资质申请苹果商务管理,苹果商务管理申请需要一个企业邮箱

    https://support.apple.com/zh-cn/guide/apple-business-manager/axm402206497/web

系统架构

后端: spring boot + redis + mysql + nginx + centos7

前端: vue + element ui + axios

小程序: uniapp

环境准备

  1. 域名一个并解析到服务器

  2. 国内备案服务器一个 配置最低要求2h4g

  3. 域名ssl证书 推荐申请个有效期一年的 ssl证书到期不更换会导致无法控制设备

  4. mysql5.7数据库 并创建数据库 mdmadmin 导入sql文件夹下最新版本mdmadmin.sql

  5. redis3.2.12

  6. 服务器要求centos7需要安装Python2 和 openssl 以及openjdk java1.8 mysql和redis可以部署不同服务器

  7. nginx反向代理到34567端口 nginx配置参考 nginx文件

  8. 进入root添加mdm用户

    useradd mdm

    修改/etc/sudoers文件 追加用户权限

    mdm ALL=(ALL) ALL

    image-20240901182717375

    设置mdm用户密码

    passwd mdm

    修改sshd文件 修改默认端口(自定义)

    vim /etc/ssh/sshd_config

    image-20240901183007184

    重启ssh

    systemctl restart sshd

    使用新端口和mdm用户登录服务器 后面的操作全部使用mdm用户操作

  9. 安装字体

    sudo yum install epel-release -y 
    sudo yum install fontconfig -y 
    sudo fc-cache --force
  10. 安装nginx redis java1.8

     sudo yum install -y nginx redis java-1.8.0-openjdk-src.x86_64
     sudo systemctl start redis
     sudo systemctl enable redis
     sudo systemctl start nginx 
     sudo systemctl enable nginx
  11. 安装mysql

    查询是否有mysql冲突依赖

    rpm -qa|grep mariadb
    sudo rpm -e  --nodeps 列出的包名

    image-20240823134736923

    上传部署包内的mysql文件夹和sql文件夹到/home/mdm 目录

    image-20240901184121425

    安装环境并启动与设置自启动

    cd /home/mdm/mysql
    sudo yum -y install net-tools perl libaio numactl
    sudo rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm 
    sudo rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm
    sudo systemctl start mysqld
    sudo systemctl enable mysqld.service
    cd /home/mdm

    查看临时密码

    sudo grep 'temporary password' /var/log/mysqld.log

    image-20240901183719540

    进入mysql 输入密码

    sudo mysql -u root -p

    image-20240823141333981

    修改mysql密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY '你得mysql密码';

    更新权限并退出重启

    use mysql;
    update user set host="%" where user="root";
    quit;
    sudo systemctl restart mysqld
  12. 配置nginx

    sudo mkdir /etc/nginx/cert

    创建一个你的域名.conf文件 内容参考如下 域名改为你自己的域名 ssl证书位置也要对应修改

    server {
        listen         80;
        server_name    mdm.ppgjx.com; # 域名
        client_max_body_size 1024M;
        add_header Strict-Transport-Security max-age=15768000;
        return 301 https://$server_name$request_uri;
    }
    server {
        listen 443 ssl; # 老版本是ssl on;较新的为listen 443 ssl;
        server_name mdm.ppgjx.com; # 域名
        keepalive_timeout 10m;
        client_max_body_size 1024M;
        ssl_certificate      /etc/nginx/cert/mdm.ppgjx.com.pem; # 申请的证书,把证书和秘钥上传到nginx.conf的同级目录cert的目录下
        ssl_certificate_key  /etc/nginx/cert/mdm.ppgjx.com.key; # 秘钥
        ssl_session_timeout 24h;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location /_AMapService/ {
                set $args "$args&jscode=db3c4ab14c402d6c9ce1e7d66d3c09f6"; #高德地图的jscode
                proxy_pass https://restapi.amap.com/;
        }
        location /mdm/pac/ {
                proxy_pass http://127.0.0.1:34567; # 将请求转发到目标服务器
                proxy_redirect off;
                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_set_header X-Forwarded-Port $server_port;
        }
        location / {
                proxy_pass http://127.0.0.1:34567; 
                proxy_redirect off;
                root /home/mdm/data/web; # 替换为你实际的web根目录路径
                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_set_header X-Forwarded-Port $server_port;
                add_header Content-Security-Policy upgrade-insecure-requests;
          }
    }

    配置文件传入/etc/nginx/conf.d下(需要使用root)

    image-20240823145227396

    /etc/nginx创建cert文件夹 将申请好的ssl证书改名传入 和上面创建的nginx配置文件ssl证书位置需要对应 (需要使用root)

    image-20240823144933954

    重启nginx

    sudo systemctl restart nginx
  13. 配置redis redis配置文件在 /etc/redis.conf

    找到requirepass foobared 解除注释 修改为你得redis密码

    image-20240823151553387

    重启redis

    systemctl restart redis
  14. 修改application-dev.yml 文件 主要修改里面的mysql 和redis信息 其他酌情修改

    image-20240823151850569

  15. 配置签名证书

    使用刚才的ssl证书,把私钥文件改名为 cert.key 证书文件改为 cert.pem 传入 部署包下面的 data/cert下

    image-20240823152445220

    需要注意的是 pem文件里面 需要包含 ca证书 中级证书 和最终的颁发的证书 组成一个证书链 否则无法成功签名

    ca证书 中级证书 和最终的颁发的证书有先后顺序分别是 最上层 最终的颁发的证书 中层 中级证书 最低层 ca证书

    image-20240823152640839

  16. 修改openssl.cnf文件

    openssl.cnf位置在部署包 下的 data/static 下 具体信息可根据自己的公司信息修改 最终会体现在 用户安装的描述文件中 不修改也可以使用

  17. 上传https.pac文件 到oss上

    https.pac文件在部署包的 data/static 下 上传后拿到下载链接保留待会使用

  18. 上传截图文件到 服务器/home/mdm目录

    image-20240823153929789

  19. 给予 xjar文件 执行权限

    chmod -R 700 /home/mdm/xjar
  20. 创建数据库并导入最新版本sql文件 这里也可以通过工具导入

    image-20240823154919835

  21. 创建systemctl服务器文件/usr/lib/systemd/system/mdm.service

    image-20240823185555223

    文件写入此内容

    [Unit]
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    
    [Service]
    WorkingDirectory=/home/mdm
    User=mdm
    Group=mdm
    Type=simple
    ExecStart=/home/mdm/xjar /usr/bin/java -jar /home/mdm/mdmadmin-0.0.1-SNAPSHOT.xjar --spring.config.location=/home/mdm/application-dev.yml
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target

    刷新服务器

    sudo systemctl daemon-reload

    image-20240823185738711

    启动mdm服务

    sudo systemctl start mdm

    查看mdm状态 绿色表示启动成功

    sudo systemctl status mdm

    image-20240823185946434

    启动成功后需要等待启动完毕可以查看启动日志

    sudo journalctl -u mdm -f

    image-20240823190101174

    找到当前版本 表示部署成功 部署完毕后 进入域名

    默认

    账号:super

    密码:123456

    设置mdm自启动 设置自启动后如果服务器意外宕机也会自动恢复服务

    sudo systemctl enable mdm

维护与更新

  1. 启动命令

    sudo systemctl start mdm

    查看是否启动成功

    sudo systemctl status mdm

    image-20240823185946434

    启动成功后需要等待启动完毕可以查看启动日志 一定要查看日志才能确定是否启动成功

    sudo journalctl -u mdm -f

    image-20240823190101174

  2. 关闭服务命令

    sudo systemctl stop mdm
  3. 更新

    建议在服务器上创建一个版本 记录当前版本

    image-20240823164327808

    每次给的更新部署包都会有一个版本更新文件比如我当前是1.0.1 版本需要更新到 1.0.3版本 就需要先执行1.0.2的更新 再去进行1.0.3的更新

    image-20240823164442650

    更新步骤

    关闭服务 建议等待10秒

    sudo systemctl stop mdm

    查看更新日志 修改数据库等需要更改的东西 然后将 xjar文件和mdmadmin-0.0.1-SNAPSHOT.xjar备份 将新版本的xjar和mdmadmin-0.0.1-SNAPSHOT.xjar传入服务器执行启动命令

    sudo systemctl start mdm

    查看是否启动成功

    sudo systemctl status mdm
    sudo journalctl -u mdm -f

第一次部署配置

  1. 修改系统设置

    使用默认管理员账号登录后台进入 管理设置->系统设置 以下是功能列表说明

    • api注册接口秘钥

      用于自动化注册接口 必须修改

    • 设备访问限制修改后自动关闭时间/ 秒 为0则不使用

      特定场景:假设某个客户需要临时开启某个手机权限,但是时间一久可能忘了关闭会导致设备有解绑的风险,如果设置不为0,则到时间以后会自动关闭权限

      image-20240823170240575

    • 设备状态检测时间 /秒

      为了感知用户设备是否在线,服务器每隔段时间都会下发命令到手机测试手机是否会在线,此功能是下发时间,建议默认

      image-20240823170227406

    • 异步任务超过这个时间没有报到 则重试推送 /秒

      下发命令如果没有设备没有按指定时间内执行 则重新下发 建议默认

    • 非等待命令过期时间 /秒

      默认即可

    • 设备等待超时时间/秒

      非异步命令可以感知命令是否执行成功,如果等待时间内设备没有执行命令则取消这个命令 建议默认

    • 禁止退出远程管理 1是 0否

      开启后设备无法通过 设置->通用->VPN与设备管理->移动设备管理->退出远程管理 来抹掉设备 建议默认

      开启此功能可能会导致用户设备无法使用银行APP,如果判断是正常用户可以给予开启

    • 域名

      必须修改为你当前域名

    • httpsPac代理文件url

      这里需要修改为之前上传oss的https.pac文件链接 请务必保证pac文件可以访问 否则用户设备可能会出现无法上网

      2024-12-25更新 https.pac文件允许为空 且为空可以使用 关闭设备网络功能 前提是退出远程管理权限需要勾选

    • 登录验证码 1开启 0关闭

      登录验证码 根据自己需求开启

      注册邮箱配置

      如果不配置 则注册无法使用 邮箱申请专用密码可参考

      https://www.ujcms.com/documentation/351.html

    • mailConnectionTimeout

      默认即可

    • mailFrom

      发邮件的邮箱

    • mailHost

      邮件服务器列如 qq邮箱为 smtp.qq.com

    • mailPass

      专用密码

    • mailPort

      邮箱服务器端口

    • mailSocketFactoryClass

      默认

    • mailSocketFactoryFallback

      默认

    • mailSocketFactoryPort

      邮箱服务器端口

    • mailSslEnable

      默认

    • mailStarttlsEnable

      默认

    • mailTimeout

      默认

    • mailUser

      发邮件的邮箱

    • 任务失败重试时间 /秒

      设备命令并不是一定会被手机执行成功的,列如手机正在更新,此参数在命令执行失败后会重新尝试下发命令

    修改后需要进行保存才能生效 一定需要检查输入前后有没有空格

服务器维护

  • 服务器防火墙或者安全组只保留80 443端口 ssh端口设置ip白名单
  • ssl证书到期需要提前更新 否则会无法控制设备
  • 如果服务器厂商支持 建议服务器每天打个快照保留其他 保证数据安全 因为数据库不是用的云数据库打快照很有必要

接口文档

采用的是swgger

https://你的域名/doc.html

接口文档账号密码在application-dev.yml文件里 建议修改

前端编译

前端采用的是vue-element

源代码再部署包里的mdm_vue.zip

node版本v16.20.2 需要安装vuecli

npm install -g yarn
yarn add @vue/cli-service --dev

使用idea 找到package.json 箭头执行即可

image-20240823174935193

执行完毕后 在dist文件夹下生成编译后的文件 传入 /home/mdm/data/web/ 覆盖即可

image-20240823175027639

服务器架构

后端采用 spring boot + mybatis + mysql + redis

前端 vue + element ui

高德地图申请

由于设备定位需要用到地图功能 需要申请高德地图

  1. 进入高德地图官网 https://lbs.amap.com/ 注册一个账户并登录

  2. 进入后台 创建应用

    https://console.amap.com/dev/key/app

    image-20240823175446320

    1. 创建应用完毕后添加key

      image-20240823175423322

    2. 添加key选择web端

    添加完毕以后会拿到key和安全秘钥

    1. 安全秘钥需要传入nginx

      搜狗截图20240826105515

    2. key需要修改前端 编译后更新服务器即可

      image-20240823175931344

安全组

安全组只保留80与443端口 ssh端口需要设置ip白名单 切勿对外开放ssh端口

无安全组

没有安全组的云服务器需要采用内置防火墙

检测是否安装防火墙

sudo systemctl status  firewalld

image-20240904105922016

如果没有安装则进行安装 启动 设置 自启动

sudo yum install -y firewalld epel-release 
sudo systemctl start firewalld
sudo systemctl enable firewalld

添加80和443端口 移除22端口

sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --remove-port=22/tcp --permanent
sudo firewall-cmd --reload

添加你的ip到防火墙 (里面ip需要修改 22端口也要修改成你得ssh端口)

sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="114.98.70.62" port port="22" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

数据安全

可以每天打一个服务器快照保留7天