I have a spring boot application that I am running on Azure App Service (Linux). My application has a dependency on a binary and needs it to be present on the system. How do I install it on my App service?
I tried the following two options:
Did ssh via Kudu and installed the package ($ apk add package). But the changes are not persisted beyond /home. The dependencies were installed in other folders and when the app service was re-deployed all those dependencies were gone
Used the post deployment hook to run the command "$ apk add package" to install once the deployment finishes. This script is run as can be seen from the custom log statements but still i do not see the installed package. Even when is use apt-get it says "unable to lock administration directory"
Using a statically compiled binary is not an option for me since that has its own issues.
Thanks
For the Tomcat, Java SE and WildFly apps on App Service Linux, you can create a file at /home/startup.sh and use it to initialize the container in any way you want (Example: you can install the required packages using this script).
App Service Linux checks for the presence of /home/startup.sh at the time of startup. If it exists, it is executed. This provides web app developers with an extension point which can be used to perform necessary customization during startup, like installing necessary packages during container startup.
I think this is a common problem with Linux on Azure.
I recommend having a step back and consider one of the following options.
Run your application in a container that has all the dependencies
you are looking for.
Run your application on Linux VM IaaS instead
of Azure App Service (Linux),PaaS.
Run your application on Windows OS PaaS and add extension for your dependency.(Most likely you won't run into this problem when using Windows OS)
While I understand that none of them might be acceptable by you, but I have not found a solution for that problem in those specific circumstances.
Related
I have desktop application and i need install exe file in Azure Pipeline. How i can install exe file in my azure pipeline?
In general, you have a couple options: either install the software each time you run your pipeline (in a step), or build a custom agent with the software pre-installed. If your application is small and can be installed silently using the command line, installing it on the hosted agent each time is probably fine.
If your application is large, requires a GUI, or can't be silently installed, building a custom agent is likely the best option. See: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops
i am trying to install jdk on python webapp so that I can use Sparksession in my python code. But jdk gets installed in /usr/lib directory instead of /home directory and anything outside /home directory does not persist. That is why even if I use Java tool installer and try to install jdk through command line in azure pipeline, still i get JAVA_HOME not set error.
You can't modify any OS level as App Service exists in a sandbox; see https://learn.microsoft.com/en-us/azure/app-service/operating-system-functionality. Every app service comes preconfigured with various SDKs. If your app is hosted in a Windows app service, you can run echo %JAVA_HOME% from the CMD/Powershell to see what the version is.
If the available version is lower than what you need, I suggest switching to Web App for Containers where you can install the JDK you need on your image.
i am using Azure DevOps Build & Release to build my node.js react app that uses node-sass. So the Build is using the Node.js Tool Installer to specify the node.js version and then runs the npm install command. It all runs with a hosted agent that requires node.js and npm. The azure app service which runs the application is a default windows site.
After that i want to deploy it via Azure DevOps Release. I am using the Task "App Service Deploy" to deploy it. If i don't specify a deployment method it uses "Run from Package" and everything is fine. (Except that i cannot make changes in the root folder, but thats the concept of the run from package). If i change it to deploy via "Zip Deploy" i get the following error:
Error: Missing binding
D:\local\Temp\zipdeploy\extracted\node_modules\node-sass\vendor\win32-ia32-57\binding.node
Node Sass could not find a binding for your current environment:
Windows 32-bit with Node.js 8.x Found bindings for the following
environments: Windows 64-bit with Node.js 8.x
So i got this one already in my dev environment, but there i could get a simple workaround - install and use the 32bit version of node.js and then deploy it to azure (via VS Code extension). Now it is not possible to use 32bit nodejs in the Azure DevOps Build task as i saw as a limitation of the windows app services in azure.
How can i get Azure DevOps to use 32 bit when using npm install? Is the only possible way to switch to a linux app service (which runs 64bit) in azure?
Thanks!
I created an App Service on Linux in Azure portal, hoping to use if as a managed Node.js server. A simple test app works but when coming to install bip32, or other web3 related packages I get the following error:
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
The obvious next step is to install Python, but the machine doesn't have any of the usual tools used for installing. No apt-get. No yum.
Any other options I could use for installing packages?
For your issue, you could have something misunderstand. The Azure Web App Service just allow you to manage your application, do not allow you to change the running environment in the Service Plan. For example, like that, you want to install tools such as apt and npm in it.
Azure provides some built-in runtime to Web App. Just like Node.js x, Python x, etc. You can choose an appropriate one to use. Even if there is no one suitable for you, you can make your application into a Docker image and create the Web App from it. Of curse, you should make sure your application can work well in the image and you can install the tools which you need. For more details, see Use a custom Docker image for Web App for Containers. Hope this will be helpful to you.
The problem
While searching for ways to deploy shiny apps I stumbled across ShinyProxy. From what I understand it's an alternative for ShinyServer. However, I lack some (very basic) knowledge to follow the guide provided.
The questions
Can ShinyProxy be installed just on any bought/rented server? Do I need to preinstall some other software?
Where do I type in the commands provided in the ShinyProxy guide?
Does Docker need to be installed on the server or is it a tool to deploy to the server and is thus installed locally?
The ShinyProxy guide misses a point about installing ShinyProxy. Why? Is it not installed (or is installation so obvious)?
I couldn't actually find instructions on how to run a shiny app with ShinyProxy.
The authors of ShinyProxy can probably provide a much better answer, but here is my understanding:
Your server needs to support Java 8 and Docker (or you can install Java 8 and Docker on your server).
Assuming you logon to your server via SSH, the commands will be typed in the SSH terminal.
Yes Docker needs to be installed on the server
It appears that ShinyProxy does not need to be installed. You just need to download it (the shinyproxy-0.5.0.jar file) to a location on the server, and then run java -jar shinyproxy-0.5.0.jar (in your SSH terminal)
To run a Shiny app, you need to package it as an R package first, then build a Docker image for the R package. The app is then actually running inside a Docker container. You also need a configuration file to tell ShinyProxy where to look for your Docker image. Example is here https://github.com/openanalytics/shinyproxy-demo