如何解决有python edge软件更新工具吗?
因此,我有一个用python编写的简单应用程序,可在10台RaspBerry Pi上运行。
- 这是一个带有可运行脚本的文件夹。
- 我想在具有公共IP的外部服务器上使用某种类似CI / CD的服务,该服务会将更新部署到所有边缘节点并在它们上重新启动我的应用。
- 边缘设备上很少有Internet,因此我想在按下服务器上的某些按钮时推送更新
打算在边缘设备上运行的python程序有这种东西吗?
解决方法
据我了解,主要问题是在多个Raspberry Pi板上更新并运行一些脚本,对吗?
有很多现成的解决方案,例如dokku或piku。两者都允许您将git push部署(手动)部署到自己的服务器上。
或者,您可以使用GitHub webhooks或一些HTML表单(用于手动推送)和Flask网络服务器来开发自己的解决方案,它们将在内部执行CI / CD步骤。
您需要在每个节点/板上运行上述脚本。并使用类似于http://your-domain-or-IP.com:8000/deploy-webhook
的URL配置Webhook,但每个节点具有不同的端口。
或者您可以从浏览器手动打开该页面。或创建单独的页面,使您可以异步执行此操作。如您所愿。
from flask import Flask
import subprocess
app = Flask(__name__)
script_proc = None
src_path = '~/project/src/'
def bash(cmd):
subprocess.Popen(cmd)
def pull_code(path):
bash('git -C {path} reset --hard'.format(path=path))
bash('git -C {path} clean -df'.format(path=path))
bash('git -C {path} pull -f'.format(path=path))
# or
# If need just to copy files to remote machine:
# (example of remote path "pi@192.168.1.1:~/project/src/")
bash('scp -r {src_path} {dst_path}'.format(src_path=src_path,dst_path=path))
def installation(python_path):
bash('{python_path} -m pip install -r requirements.txt'.format(python_path=python_path))
def stop_script():
global script_proc
if script_proc:
script_proc.terminate()
def start_script(python_path,script_path,args=None):
global script_proc
script_proc = subprocess.Popen(
'{} {} {}'.format(str(python_path),' '.join(args) or '')
)
@app.route('/deploy-webhook')
def deploy_webhook():
project_path = '~/project/some_project_path'
script_path = 'script1.py'
python_path = 'venv/bin/python'
pull_code(project_path)
installation(python_path)
stop_script()
start_script(python_path,script_path)
return 'Deployed'
,
如果您不需要用户界面并使用linux,我建议您使用bash脚本。 我写了一个简单的bash脚本“推送更新并重新启动” 按照树莓派的设置。请先配置ssh with key-less login。
#!/bin/bash
listOfIps=(
192.168.1.100
192.168.1.101
192.168.1.102
192.168.1.103
)
username="pi"
destDir="work/"
pythonScriptName="fooScript.py"
for i in "${listOfIps[@]}"
do
echo "will copy folder \"$1\" with content to ip: ${i} and perform"
echo "scp -r $1 ${username}@${i}:${destDir}"
scp -r $1 ${username}@${i}:${destDir}
echo "will kill all python scripts unfriendly"
ssh ${username}@${i} "pkill python"
echo "will restart my python scripts ${pythonScriptName} in dir ${destDir} "
ssh ${username}@${i} "python3 ${destDir}/${pythonScriptName} &"
done
exit 0
将代码保存在文件copyToAll.sh中,编辑用户名destDir和您的脚本名称并使其可执行:
chmod 755 copyToAll.sh
致电
copyToAll.sh myFileToSend
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。