我有一个自定义的Linux应用程序,我没有使用任何框架.这是一个简单的应用程序,有一些模块,做一些预定的工作.要在本地运行,我使用python main.py arg1 arg2
.就是这样,它将使用schedule
包和计划作业.我有requirements.txt
.
现在我想将其部署到Azure。服务我得到了Azure WebApp Linux。我知道这不是正确的服务,因为我没有通过http提供任何服务,我只是连接一些数据库,API等。
当我尝试使用github操作时,我遇到了虚拟环境等问题。
例如,如果我只是使用start up命令进行部署,就会出现错误
2023-11-11T15:19:27.054568534Z Launching oryx with: create-script -appPath /home/site/wwwroot -output /opt/startup/startup.sh -virtualEnvName antenv -defaultApp /opt/defaultsite -userStartupCommand 'python main.py dev s'
2023-11-11T15:19:27.193901315Z Found build manifest file at '/home/site/wwwroot/oryx-manifest.toml'. Deserializing it...
2023-11-11T15:19:27.214165170Z Build Operation ID: 7f870c51d6df2456
2023-11-11T15:19:27.231953721Z Oryx Version: 0.2.20230707.1, Commit: 0bd28e69919b5e8beba451e8677e3345f0be8361, ReleaseTagName: 20230707.1
2023-11-11T15:19:27.243554311Z Output is compressed. Extracting it...
2023-11-11T15:19:27.243579812Z Extracting '/home/site/wwwroot/output.tar.gz' to directory '/tmp/8dbe2c7322f355e'...
2023-11-11T15:19:30.560170296Z App path is set to '/tmp/8dbe2c7322f355e'
2023-11-11T15:19:36.581666909Z Writing output script to '/opt/startup/startup.sh'
2023-11-11T15:19:36.805404566Z Using packages from virtual environment antenv located at /tmp/8dbe2c7322f355e/antenv.
2023-11-11T15:19:36.805441267Z Updated PYTHONPATH to '/opt/startup/app_logs:/tmp/8dbe2c7322f355e/antenv/lib/python3.11/site-packages'
2023-11-11T15:19:39.130548772Z ERROR:root:Critical Error: [Errno 2] No such file or directory: '/tmp/8dbe2c7322f355e/config/config.json'
字符串
下面是我的github操作
- name: azure webapp deploy
uses: azure/webapps-deploy@v2
with:
app-name: ${{ vars.APP_NAME }}
package: ${{ vars.DEPLOY_PATH }}
startup-command: 'python main.py dev s'
型
1条答案
按热度按时间ni65a41a1#
如果您的Web应用程序代码未提供任何HTTP请求,则它将在Azure Web应用程序中失败。您可以做的是创建Azure计时器触发器函数,并根据CRON表达式将计划代码添加到计时器触发器中,以便计时器函数将在特定的计划CRON时间触发。您也可以,通过Github操作在Function应用程序中部署Timer Trigger,如下所示。
你可以使用基于Azure Function Consumption的基本应用程序,这不会花费你太多。
参照此MS Document1和MSDocument2创建定时器触发器
在您的**Timer Trigger*
init.py
中,通过将其定义为方法来添加您的日程安排,我下面的init.py代码在触发定时器触发器时打印一个句子。call_your_task_function()
**是我的任务,它打印一个语句,您可以在这里使用您的逻辑。字符串
型
我在My github repository中上传了这个函数,并将其部署到Azure Function应用程序中,如下所示:
你可以克隆我的仓库作为参考。
x1c 0d1x的数据
点击保存后,Github Action工作流将开始部署Function,如下所示:
Github Action工作流程:-
型
的
的
另一种方法,如果你想使用Azure Web应用程序,你可以使用streamlit包,并在你的main.py代码中添加streamlit通过提供streamlit页面来运行你的任务,一个示例Http页面将可用,你的任务将在后端运行.你也可以添加按钮来运行你的任务在main.py本身.参考下面:-
为了使streamlit应用程序正常工作,必须使用定价计划- B1和Python版本3.10部署您的Web应用程序:-
的
main.py:-
型
requirements.txt:-
型
部署后,在您的Web应用程序中添加以下启动命令:-
型
x1c4d 1x的
部署并添加启动命令后输出:-
型
我也同意Lex Li的观点,Azure Web应用程序将需要在HTTPS请求中提供一些服务,并需要启动命令来初始化应用程序。Streamlit使您更容易运行任务,并为您提供一个基本的网站,而无需任何HTML,CSS或路由。
作为替代方案**,您还可以使用Azure VM**(大小与B1一样小)来运行您的任务,该任务在Azure或Azure容器应用程序或**Azure Webjobs**中提供免费大小,以在现有Web应用程序的后台运行任务,或Azure batch service运行长时间运行的任务。