记录第二个接单的三天:nbiot云端控制十字交通灯
一开始的:
- 复制微信消息
- 扔给 ai 总结需求
- 检查总结内容
- 制定初步方案
是合理的
但是这次犯了一个小错误,把 esp8266 买错成了 esp32,多花钱了,也多了硬件连接配置的询问时间,下次记得购买时先检查.
我总结好需求之后开始写,前端由截图直接生成,后端这次没有需求.这次任务的关键困难在于服务器.注意在一些轻量服务器上,vscode 远程开发可能会遇到内存不足的问题,不过还是优先尝试 vscode 远程开发,不行再考虑 ssh.
连接到远程服务器最好采用本地密钥生成加复制到服务器的方案,可靠稳固.进行文件转移时,像国内服务器无法直接访问 github,那么用 scp 传输文件夹之前最好是打包一下,还有node_modules
文件夹最好不要传输,会占用大量空间,而且可以通过npm install
重新安装,可以通过剪切暂时移出node_modules
文件夹,传输完毕后再粘贴回去.
注意在服务器上首先安装npm
和nginx
,如果没有安装.
新的 ubuntu 服务器上 nginx 可能会遇到权限问题:
问题脚本:
#!/bin/bash
# filepath: 002-400/traffic-light-web/deploy_nginx.sh
set -e
# 1. 构建前端
echo "正在构建前端..."
npm install
npm run build
# 2. 安装 Nginx(如果未安装)
if ! command -v nginx >/dev/null 2>&1; then
echo "正在安装 Nginx..."
sudo apt update
sudo apt install -y nginx
fi
# 3. 配置 Nginx
NGINX_CONF="/etc/nginx/sites-available/traffic-light-web"
DIST_PATH="/home/admin/002-400/traffic-light-web/dist"
sudo tee $NGINX_CONF > /dev/null <<EOF
server {
listen 80;
server_name 39.107.106.220;
root $DIST_PATH;
index index.html index.htm;
location / {
try_files \$uri \$uri/ /index.html;
}
}
EOF
# 更改 dist 目录所有权和权限
echo "正在更改 $DIST_PATH 的所有权和权限..."
sudo chown -R www-data:www-data $DIST_PATH
sudo find $DIST_PATH -type d -exec chmod 755 {} \; # 目录权限 rwxr-xr-x
sudo find $DIST_PATH -type f -exec chmod 644 {} \; # 文件权限 rw-r--r--
# 4. 启用站点配置
sudo ln -sf $NGINX_CONF /etc/nginx/sites-enabled/traffic-light-web
# 5. 移除默认站点(可选)
sudo rm -f /etc/nginx/sites-enabled/default
# 6. 检查并重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
# 7. 开放 80 端口(如使用 ufw 防火墙)
if command -v ufw >/dev/null 2>&1; then
sudo ufw allow 80/tcp
fi
echo "部署完成!现在可以通过 http://服务器IP 访问前端页面。"
解决办法是确保一路上的文件结构ls -ld
都是 755 权限,并且 nginx 配置文件的文件夹也是 755 权限.不过直接bash deploy_nginx.sh
之后因为一些权限问题,每次重部署需要sudo rm -rf dist
之后再运行.
一些运营商比如阿里云的 vps 默认不会打开全部端口,需要手动全部打开,一般在网页上的安全组设置或者防火墙设置里面,课设的话打开全部就好了.
mqtt 服务器部署问 ai 就好.在国内部署时这次用到的是 docker,注意 docker 软件源也要换成国内镜像.注意发送过去的 topic 需要订阅才能显示
某些元件的自带指令比如 AT 指令:可能分别在多个官方文档里,包括看代码,读文档永不过时
注意沿用父子模块化设计明确有多部分的代码结构,比如和多个外设组合成为一个系统,和前端多页面多组件的思路一致,如 003 中分析的那样.