What it means
The build worked. Antideploy then started your app and waited for it to answer on its port, and it never did. The message tells you the port, the command it ran, and, when it can, what the app printed before it stopped. This is the most common failure on Antideploy.
The three usual causes
-
The app listens on a fixed port, or on
127.0.0.1. The platform tells your app the port in thePORTenvironment variable, and the app must listen on0.0.0.0. -
The start command needs a package that is not in your dependencies. Development dependencies are removed from the image after the build.
-
The app crashed on boot. A missing config file, a missing environment variable, or a database query before the tables exist.
How to fix it
-
Read what the app printed
The message includes the last lines the app printed before it exited. They usually name the cause. Your agent can also read the app's logs.
-
Read the port and listen on all addresses
Use the
PORTvariable, and bind to0.0.0.0.const port = process.env.PORT || 3000; app.listen(port, "0.0.0.0"); # Python (Flask) import os app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000))) # Python (Gradio) demo.launch(server_name="0.0.0.0", server_port=int(os.environ.get("PORT", 7860))) -
Check the start command
The message shows the command that was run. If your project has no
startscript, add one, or add aProcfilewith aweb:line. A start command that needs a package must find it independencies. -
Deploy again
Redeploying the same code unchanged fails the same way, so change something first. A failed deploy never counts against your plan.
Frameworks that are started for you
When Antideploy chooses the start command, FastAPI, Flask, Django and Streamlit already get the port and the address. If you wrote your own start command or a Procfile, yours is used instead. Gradio is started with plain python, so your code must pass them. A Go or Java app must listen on the port in PORT, which is 8080 for these languages.