Appearance
系统部署
材料准备
使用公司资质申请苹果开发者账号
https://support.tuya.com/zh/help/_detail/Kam3pskapsytn
注意事项:
- 填写公司官网的时候 公司官网必须可以访问 且官网包含公司的 地址 联系方式 等信息 否则会被决拒绝
- 申请苹果开发者的appleid 最好使用已经注册并使用一段时间的appleid 否则会风控,申请苹果开发者的手机和网络一定不要是已经申请过开发者的,否则也会风控
使用公司资质申请苹果商务管理,苹果商务管理申请需要一个企业邮箱
https://support.apple.com/zh-cn/guide/apple-business-manager/axm402206497/web
系统架构
后端: spring boot + redis + mysql + nginx + centos7
前端: vue + element ui + axios
小程序: uniapp
环境准备
域名一个并解析到服务器
国内备案服务器一个 配置最低要求2h4g
域名ssl证书 推荐申请个有效期一年的 ssl证书到期不更换会导致无法控制设备
mysql5.7数据库 并创建数据库 mdmadmin 导入sql文件夹下最新版本mdmadmin.sql
redis3.2.12
服务器要求centos7需要安装Python2 和 openssl 以及openjdk java1.8 mysql和redis可以部署不同服务器
nginx反向代理到34567端口 nginx配置参考 nginx文件
进入root添加mdm用户
useradd mdm
修改/etc/sudoers文件 追加用户权限
mdm ALL=(ALL) ALL
设置mdm用户密码
passwd mdm
修改sshd文件 修改默认端口(自定义)
vim /etc/ssh/sshd_config
重启ssh
systemctl restart sshd
使用新端口和mdm用户登录服务器 后面的操作全部使用mdm用户操作
安装字体
sudo yum install epel-release -y sudo yum install fontconfig -y sudo fc-cache --force
安装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
安装mysql
查询是否有mysql冲突依赖
rpm -qa|grep mariadb
sudo rpm -e --nodeps 列出的包名
上传部署包内的mysql文件夹和sql文件夹到/home/mdm 目录
安装环境并启动与设置自启动
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
进入mysql 输入密码
sudo mysql -u root -p
修改mysql密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你得mysql密码';
更新权限并退出重启
use mysql; update user set host="%" where user="root"; quit; sudo systemctl restart mysqld
配置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)
/etc/nginx创建cert文件夹 将申请好的ssl证书改名传入 和上面创建的nginx配置文件ssl证书位置需要对应 (需要使用root)
重启nginx
sudo systemctl restart nginx
配置redis redis配置文件在 /etc/redis.conf
找到requirepass foobared 解除注释 修改为你得redis密码
重启redis
systemctl restart redis
修改application-dev.yml 文件 主要修改里面的mysql 和redis信息 其他酌情修改
配置签名证书
使用刚才的ssl证书,把私钥文件改名为 cert.key 证书文件改为 cert.pem 传入 部署包下面的 data/cert下
需要注意的是 pem文件里面 需要包含 ca证书 中级证书 和最终的颁发的证书 组成一个证书链 否则无法成功签名
ca证书 中级证书 和最终的颁发的证书有先后顺序分别是 最上层 最终的颁发的证书 中层 中级证书 最低层 ca证书
修改openssl.cnf文件
openssl.cnf位置在部署包 下的 data/static 下 具体信息可根据自己的公司信息修改 最终会体现在 用户安装的描述文件中 不修改也可以使用
上传https.pac文件 到oss上
https.pac文件在部署包的 data/static 下 上传后拿到下载链接保留待会使用
上传截图文件到 服务器/home/mdm目录
给予 xjar文件 执行权限
chmod -R 700 /home/mdm/xjar
创建数据库并导入最新版本sql文件 这里也可以通过工具导入
创建systemctl服务器文件/usr/lib/systemd/system/mdm.service
文件写入此内容
[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
启动mdm服务
sudo systemctl start mdm
查看mdm状态 绿色表示启动成功
sudo systemctl status mdm
启动成功后需要等待启动完毕可以查看启动日志
sudo journalctl -u mdm -f
找到当前版本 表示部署成功 部署完毕后 进入域名
默认
账号:super
密码:123456
设置mdm自启动 设置自启动后如果服务器意外宕机也会自动恢复服务
sudo systemctl enable mdm
维护与更新
启动命令
sudo systemctl start mdm
查看是否启动成功
sudo systemctl status mdm
启动成功后需要等待启动完毕可以查看启动日志 一定要查看日志才能确定是否启动成功
sudo journalctl -u mdm -f
关闭服务命令
sudo systemctl stop mdm
更新
建议在服务器上创建一个版本 记录当前版本
每次给的更新部署包都会有一个版本更新文件比如我当前是1.0.1 版本需要更新到 1.0.3版本 就需要先执行1.0.2的更新 再去进行1.0.3的更新
更新步骤
关闭服务 建议等待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
第一次部署配置
修改系统设置
使用默认管理员账号登录后台进入 管理设置->系统设置 以下是功能列表说明
api注册接口秘钥
用于自动化注册接口 必须修改
设备访问限制修改后自动关闭时间/ 秒 为0则不使用
特定场景:假设某个客户需要临时开启某个手机权限,但是时间一久可能忘了关闭会导致设备有解绑的风险,如果设置不为0,则到时间以后会自动关闭权限
设备状态检测时间 /秒
为了感知用户设备是否在线,服务器每隔段时间都会下发命令到手机测试手机是否会在线,此功能是下发时间,建议默认
异步任务超过这个时间没有报到 则重试推送 /秒
下发命令如果没有设备没有按指定时间内执行 则重新下发 建议默认
非等待命令过期时间 /秒
默认即可
设备等待超时时间/秒
非异步命令可以感知命令是否执行成功,如果等待时间内设备没有执行命令则取消这个命令 建议默认
禁止退出远程管理 1是 0否
开启后设备无法通过 设置->通用->VPN与设备管理->移动设备管理->退出远程管理 来抹掉设备 建议默认
开启此功能可能会导致用户设备无法使用银行APP,如果判断是正常用户可以给予开启
域名
必须修改为你当前域名
httpsPac代理文件url
这里需要修改为之前上传oss的https.pac文件链接 请务必保证pac文件可以访问 否则用户设备可能会出现无法上网
2024-12-25更新 https.pac文件允许为空 且为空可以使用 关闭设备网络功能 前提是退出远程管理权限需要勾选
登录验证码 1开启 0关闭
登录验证码 根据自己需求开启
注册邮箱配置
如果不配置 则注册无法使用 邮箱申请专用密码可参考
mailConnectionTimeout
默认即可
mailFrom
发邮件的邮箱
mailHost
邮件服务器列如 qq邮箱为 smtp.qq.com
mailPass
专用密码
mailPort
邮箱服务器端口
mailSocketFactoryClass
默认
mailSocketFactoryFallback
默认
mailSocketFactoryPort
邮箱服务器端口
mailSslEnable
默认
mailStarttlsEnable
默认
mailTimeout
默认
mailUser
发邮件的邮箱
任务失败重试时间 /秒
设备命令并不是一定会被手机执行成功的,列如手机正在更新,此参数在命令执行失败后会重新尝试下发命令
修改后需要进行保存才能生效 一定需要检查输入前后有没有空格
服务器维护
- 服务器防火墙或者安全组只保留80 443端口 ssh端口设置ip白名单
- ssl证书到期需要提前更新 否则会无法控制设备
- 如果服务器厂商支持 建议服务器每天打个快照保留其他 保证数据安全 因为数据库不是用的云数据库打快照很有必要
接口文档
采用的是swgger
接口文档账号密码在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 箭头执行即可
执行完毕后 在dist文件夹下生成编译后的文件 传入 /home/mdm/data/web/ 覆盖即可
服务器架构
后端采用 spring boot + mybatis + mysql + redis
前端 vue + element ui
高德地图申请
由于设备定位需要用到地图功能 需要申请高德地图
进入高德地图官网 https://lbs.amap.com/ 注册一个账户并登录
进入后台 创建应用
https://console.amap.com/dev/key/app
创建应用完毕后添加key
添加key选择web端
添加完毕以后会拿到key和安全秘钥
安全秘钥需要传入nginx
key需要修改前端 编译后更新服务器即可
安全组
安全组只保留80与443端口 ssh端口需要设置ip白名单 切勿对外开放ssh端口
无安全组
没有安全组的云服务器需要采用内置防火墙
检测是否安装防火墙
sudo systemctl status firewalld
如果没有安装则进行安装 启动 设置 自启动
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天