{# Deploy an application. The panel exists to deploy web applications and, until this screen, could not deploy one: POST /api/apps had no caller anywhere in the interface. An operator could look at everything and create nothing. The form is boosted: htmx sends the submission, which is what puts the CSRF header on it - a plain form cannot set one, so the browser's own submit came back 403 every time, exactly like the sign-out button once did. A deployment is still worth a whole screen and a full navigation: submitting lands on the activity screen with the log drawer attached, and a refusal brings this form back with the reason and everything still typed in. Each field that can be checked cheaply is checked as it is left, by posting the form to /apps/new/validate/{field} and swapping the verdict in under the field. The check is a courtesy; the guard stays at the chokepoint the JSON API uses. Only what a deployment cannot proceed without is asked up front. Everything else lives under Advanced, collapsed, and the type-specific questions only appear for the type that will read them: the fragment under the type select swaps when the selection changes. #} {% extends "base.html" %} {% import "_macros.html" as m %} {% block title %}Deploy{% endblock %} {% block content %} {{ m.page_head("Deploy an application", "From a Git repository, an archive or a directory on this machine") }} {% if problem %} {{ m.problem(problem.fix, problem.output) }} {% endif %}
The web server answers for this name, and the certificate is issued for it. It has to resolve to this machine already.
A Git URL, or a path on this machine.
Auto-detect reads the repository and picks one.
Leave empty for the repository's default.
Leave empty to be assigned a free one.
certbot answers a challenge on this machine, so the domain must resolve here first.
{# Open when a refusal brought back values typed inside it, so a mistake in an advanced field is not hidden behind the fold it was made under. #}
Advanced
One KEY=VALUE per line, written to the application's .env file at deploy time. Blank lines and lines starting with # are skipped.
{% include "fragments/deploy_form_options.html" %}
Cancel

The same deployment from a terminal: wasm create -d example.com -s https://github.com/you/app

{% endblock %}