danielflower / app-runner Goto Github PK
View Code? Open in Web Editor NEWSelf-hosted platform as a service for Java, Node, Clojure, Scala, DotNet, Python and golang apps. Push to a git repo to deploy apps.
License: MIT License
Self-hosted platform as a service for Java, Node, Clojure, Scala, DotNet, Python and golang apps. Push to a git repo to deploy apps.
License: MIT License
I've forked the repo with the intent of adding OCaml / opam support to AppRunner.
Looking at @mepants Rust changes as a prototype - is this reasonable?
One thought did strike me - in the same way restabuild simplifies everything down to executing build.sh, we could imagine an app-runner app with a generic build.sh & run.sh to avoid having to implement language support in the core. Anything that can be built with a script and run with a script would then be in scope, rather than individual languages. The environment conventions would remain ofc.
Hi Dan
May I know how to deploy a golang app into apprunner? I can't find the usage for golang deployment.
setting M2_HOME inside config.properties does not seem to work - it only works if M2_HOME is exported as an environment variable.
When using the API to create an app, if the GitHub repository is very new (eg. Created by the same process that calls the API) it seems there is a timing issue which causes the HEAD branch not to be found.
The creation fails with the API returning:
Response code 400
{
"message": "Could not clone git repository: Remote branch 'HEAD' not found in upstream origin",
"gitUrl": "(SSH URL of new repo)"
}
The failure would appear to occur in AppManager.java in the create(..) method at the point of the Git.cloneRepository()
It would be useful to have the option to wait/retry the clone.
Unfortunately it is unlikely a reliable test case could be created for recreation of the issue.
I am newbie on app-runner.
I have created some apps for test, and want to remove them, but can not find the delete button on the webpage. could you please advise?
Daniel, not sure Kubernetes is an option in your current $work, I am submitting this issue simply for ideas.
The current apprunner solves CICD problems to a virtual machine. However, most enterprises move their workload to Kubernetes to host their applications. it looks like a good idea to have a similar tool in k8s that solves the deployment and setup overhead so developers can deploy code as fast as possible to a live environment.
Most of the components should still work in the current apprunner architecture
For example, if I'm treating app-runner as prod and want my app to run in "prod" mode, can I set a ENV=prod env var?
API page displayed abnormally and said "Can't read from server. It may not have the appropriate access-control-origin settings."
URL: http://hk1.imlc.me/app-runner-home/docs/api.html#/Application
Seems it's a CORS problem? Where can I configure the domain name I used?
I only used the sample config file and export M2_HOME in my profile.
Hope for your advice
After downloading the source code and had tried to startup the app runner home, it hints the below error message. It seems that the Maven runner doesn't work.
Could you kindly us on how to configure the Maven and Java provider?
com.danielflower.apprunner.runners.UnsupportedProjectTypeException: No app runner found for app-runner-home
at com.danielflower.apprunner.runners.AppRunnerFactoryProvider.runnerFor(AppRunnerFactoryProvider.java:54)
at com.danielflower.apprunner.AppEstate.addApp(AppEstate.java:63)
at com.danielflower.apprunner.App.start(App.java:71)
at com.danielflower.apprunner.App.main(App.java:191)
at com.danielflower.apprunner.RunLocal.main(RunLocal.java:10)
For python web apps it is usually run behind a wsgi server like gunicorn which uses child processes to serve concurrent requests.
But the python sample app seems to suggest not to use child processes in app runner. Or is this just peculiar to Flask?
#Set debug=False and threaded=True to prevent Flask forking a child process that doesn't get shut down
Tried to start it in a centOS7 but got below error, any idea?
appRunner.txt
11:39:19.727 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - STARTED @134008ms org.eclipse.jetty.io.ManagedSelector@38353cb4 id=0 keys=0 selected=0
11:39:19.727 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - STARTED @134009ms org.eclipse.jetty.client.AbstractHttpClientTransport$ClientSelectorManager@272fd214
11:39:19.727 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - STARTED @134009ms org.eclipse.jetty.client.http.HttpClientTransportOverHTTP@57471333
11:39:19.727 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - STARTED @134009ms org.eclipse.jetty.client.HttpClient@524bd875
11:39:20.245 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.ContainerLifeCycle - org.eclipse.jetty.client.HttpClient@524bd875 added {HttpDestination[http://localhost:42557]@6606349c,queue=0,pool=null,MANAGED}
11:39:20.250 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - starting HttpDestination[http://localhost:42557]@6606349c,queue=0,pool=null
11:39:20.258 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.ContainerLifeCycle - HttpDestination[http://localhost:42557]@6606349c,queue=0,pool=DuplexConnectionPool@3531ffd3[c=0/64,a=0,i=0] added {DuplexConnectionPool@3531ffd3[c=0/64,a=0,i=0],POJO}
11:39:20.260 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle - STARTED @134541ms HttpDestination[http://localhost:42557]@6606349c,queue=0,pool=DuplexConnectionPool@3531ffd3[c=0/64,a=0,i=0]
11:39:20.267 [pool-4-thread-1] DEBUG org.eclipse.jetty.client.HttpClient - Created HttpDestination[http://localhost:42557]@6606349c,queue=0,pool=DuplexConnectionPool@3531ffd3[c=0/64,a=0,i=0]
11:39:20.282 [pool-4-thread-1] DEBUG org.eclipse.jetty.client.HttpDestination - Queued HttpRequest[GET /app-runner-home/ HTTP/1.1]@640ae19a for HttpDestination[http://localhost:42557]@6606349c,queue=1,pool=DuplexConnectionPool@3531ffd3[c=0/64,a=0,i=0]
11:39:20.285 [pool-4-thread-1] DEBUG org.eclipse.jetty.client.AbstractConnectionPool - Connection 1/64 creation
11:39:20.311 [pool-4-thread-1] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - queue org.eclipse.jetty.util.SocketAddressResolver$Async$$Lambda$48/1724759036@7d72bf0e
11:39:20.323 [HttpClient@1380702325-68] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - run org.eclipse.jetty.util.SocketAddressResolver$Async$$Lambda$48/1724759036@7d72bf0e
11:39:20.333 [HttpClient@1380702325-68] DEBUG org.eclipse.jetty.util.SocketAddressResolver - Resolved localhost in 0 ms
11:39:20.374 [HttpClient@1380702325-68] DEBUG org.eclipse.jetty.io.ManagedSelector - Queued change org.eclipse.jetty.io.ManagedSelector$Connect@39733ca5 on org.eclipse.jetty.io.ManagedSelector@38353cb4 id=0 keys=0 selected=0
11:39:20.378 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop woken up from select, 0/0 selected
11:39:20.378 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Running action org.eclipse.jetty.io.ManagedSelector$Connect@39733ca5
11:39:20.379 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop waiting on select
11:39:20.379 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop woken up from select, 1/1 selected
11:39:20.379 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - selected sun.nio.ch.SelectionKeyImpl@3b93f80f org.eclipse.jetty.io.ManagedSelector$Connect@39733ca5
11:39:20.381 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.client.HttpClientTransport - Could not connect to HttpDestination[http://localhost:42557]@6606349c,queue=1,pool=DuplexConnectionPool@3531ffd3[c=1/64,a=0,i=0]
11:39:20.381 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Queued change org.eclipse.jetty.io.ManagedSelector$Connect@4f2579e7 on org.eclipse.jetty.io.ManagedSelector@38353cb4 id=0 keys=1 selected=1
11:39:20.381 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Running action org.eclipse.jetty.io.ManagedSelector$Connect@4f2579e7
11:39:20.381 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop waiting on select
11:39:20.381 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop woken up from select, 1/1 selected
11:39:20.382 [HttpClient@1380702325-68] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - ran org.eclipse.jetty.util.SocketAddressResolver$Async$$Lambda$48/1724759036@7d72bf0e
11:39:20.382 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - selected sun.nio.ch.SelectionKeyImpl@6b52a38c org.eclipse.jetty.io.ManagedSelector$Connect@4f2579e7
11:39:20.384 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.client.HttpClientTransport - Could not connect to HttpDestination[http://localhost:42557]@6606349c,queue=1,pool=DuplexConnectionPool@3531ffd3[c=1/64,a=0,i=0]
11:39:20.396 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.client.AbstractConnectionPool - Connection 1/64 creation failed
java.net.ConnectException: 拒绝连接
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at org.eclipse.jetty.io.SelectorManager.doFinishConnect(SelectorManager.java:320)
at org.eclipse.jetty.io.ManagedSelector.processConnect(ManagedSelector.java:418)
at org.eclipse.jetty.io.ManagedSelector.access$1000(ManagedSelector.java:60)
at org.eclipse.jetty.io.ManagedSelector$SelectorProducer.processSelected(ManagedSelector.java:350)
at org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:244)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:147)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produce(ExecuteProduceConsume.java:97)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
at java.lang.Thread.run(Thread.java:748)
11:39:20.412 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.client.HttpExchange - Failed HttpExchange@52c407a2 req=COMPLETED/java.net.ConnectException: 拒绝连接@4e42d053 res=COMPLETED/java.net.ConnectException: 拒绝连接@4e42d053: req=true/rsp=true {}
11:39:20.419 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.client.HttpExchange - Aborting while queued HttpExchange@52c407a2 req=COMPLETED/java.net.ConnectException: 拒绝连接@4e42d053 res=COMPLETED/java.net.ConnectException: 拒绝连接@4e42d053: {}
11:39:20.430 [pool-4-thread-1] INFO com.danielflower.apprunner.runners.Waiter - Waiting for start up of app-runner-home
11:39:20.430 [HttpClient@1380702325-67] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector loop waiting on select
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.