Cloudilio inspects code repositories during build phases. The analyzer identifies entry points and automatically prepares the runtime server. Developers can override default commands in the application settings panel.
Cloudilio runs Flask applications using Gunicorn with two worker processes. The platform injects the assigned host port via the PORT environment variable.
gunicorn --bind 0.0.0.0:$PORT --workers 2 app:app
app.py, application.py, or wsgi.py.app or application instance.create_app().
When Cloudilio finds manage.py, the build agent runs database migrations automatically before serving web traffic.
python manage.py migrate --noinput && gunicorn <project>.wsgi:application --bind 0.0.0.0:$PORT
Configure your DATABASES setting in settings.py to point to /app/data/db.sqlite3. Files in /app/data persist across restarts and code updates.
FastAPI powers asynchronous APIs and WebSockets. Cloudilio executes FastAPI applications using Uvicorn.
uvicorn main:app --host 0.0.0.0 --port $PORT
Cloudilio runs general Python programs including job queues, Discord bots, scheduled scrapers, and custom HTTP servers.
python main.py # Or python app.py / worker.py
Cloudilio monitors the process lifecycle. If the script crashes or encounters an unhandled exception, the supervisor logs the traceback and triggers an immediate alert.
Cloudilio supports data visualization and machine learning dashboards built with Streamlit.
streamlit run app.py --server.port $PORT --server.address 0.0.0.0 --server.headless true
Apps can run on Python 3.14, 3.13, 3.12, 3.11, 3.10. New apps start on 3.14, the newest. An app keeps its version until you change it, so a new release of Python never changes an app that already works.
3.12 in a file called .python-version, or python-3.12 in a file called runtime.txt. Cloudilio reads it when you create the app.
Some Python packages need programs that pip can't install. Examples are ffmpeg for video, Tesseract for reading text in images and Chromium for browser automation. List them in a file called packages.txt next to your requirements.txt, one per line. Cloudilio installs them when it builds your app.
# Video and audio ffmpeg # Reading text in images, for pytesseract tesseract-ocr # Browser automation, for Selenium chromium chromium-driver
The system packages guide explains how to find package names, check the publish log and fix common errors.
When you publish, Cloudilio starts the new version next to the live one and waits for it to answer. Only then does it switch visitors over. By default, it waits up to one minute. If the new version isn't ready in time, publishing stops, and the version that's live now stays live.
Apps that load a machine learning model, a large data file or a big cache when they start can need longer. Open your app's page, go to Advanced settings and change Time allowed to start to 2 or 5 minutes. If your app crashes while it starts, Cloudilio stops waiting at once and shows the app's last output in the publish log.