CINXE.COM
Runtime configuration | Docs | IONOS Deploy Now
<!DOCTYPE html> <html data-html-server-rendered="true" lang="en" data-vue-tag="%7B%22lang%22:%7B%22ssr%22:%22en%22%7D%7D"> <head> <title>Runtime configuration | Docs | IONOS Deploy Now</title><meta name="gridsome:hash" content="6ad96c346b61bc3b7f03a8aab8ff2b0f6e92a6bd"><meta data-vue-tag="ssr" charset="utf-8"><meta data-vue-tag="ssr" name="generator" content="Gridsome v0.7.23"><meta data-vue-tag="ssr" data-key="viewport" name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"><meta data-vue-tag="ssr" data-key="format-detection" name="format-detection" content="telephone=no"><meta data-vue-tag="ssr" name="google-site-verification" content="UtLaJ4v0UZBDPJVc8DqCyiUPSSz9TtMroKmflhpH2eo"><meta data-vue-tag="ssr" data-key="og:url" name="og:url" content="undefined/team/robin-mueller/"><meta data-vue-tag="ssr" data-key="description" name="description" content="Deploy Now is a platform for building and hosting Static Site Generators and Single Page Applications on inhouse engineered IONOS infrastructure."><meta data-vue-tag="ssr" name="description" content="How to manage config files and runtime environment variables in Deploy Now."><meta data-vue-tag="ssr" data-key="og:title" name="og:title" content="Runtime configuration | Docs"><meta data-vue-tag="ssr" data-key="og:description" name="og:description" content="How to manage config files and runtime environment variables in Deploy Now."><meta data-vue-tag="ssr" data-key="twitter:title" name="twitter:title" content="Runtime configuration | Docs"><meta data-vue-tag="ssr" data-key="twitter:description" name="twitter:description" content="How to manage config files and runtime environment variables in Deploy Now."><meta data-vue-tag="ssr" data-key="og:type" name="og:type" content="website"><meta data-vue-tag="ssr" data-key="twitter:card" name="twitter:card" content="summary_large_image"><meta data-vue-tag="ssr" data-key="og:image" name="og:image" content="https://docs.ionos.space/favicon.png"><meta data-vue-tag="ssr" data-key="twitter:image" name="twitter:image" content="https://docs.ionos.space/favicon.png"><link data-vue-tag="ssr" rel="icon" href="data:,"><link data-vue-tag="ssr" rel="icon" type="image/png" sizes="16x16" href="/assets/static/favicon.ce0531f.7227131fb676627f66f79aa1b9b1b2b5.png"><link data-vue-tag="ssr" rel="icon" type="image/png" sizes="32x32" href="/assets/static/favicon.ac8d93a.7227131fb676627f66f79aa1b9b1b2b5.png"><link data-vue-tag="ssr" rel="icon" type="image/png" sizes="96x96" href="/assets/static/favicon.b9532cc.7227131fb676627f66f79aa1b9b1b2b5.png"><link data-vue-tag="ssr" rel="apple-touch-icon-precomposed" type="image/png" sizes="76x76" href="/assets/static/favicon.f22e9f3.7227131fb676627f66f79aa1b9b1b2b5.png"><link data-vue-tag="ssr" rel="apple-touch-icon-precomposed" type="image/png" sizes="120x120" href="/assets/static/favicon.1539b60.7227131fb676627f66f79aa1b9b1b2b5.png"><link rel="preload" href="/assets/css/0.styles.20d902e6.css" as="style"><link rel="preload" href="/assets/js/app.1420e6f5.js" as="script"><link rel="preload" href="/assets/js/page--src--templates--markdown-page-vue.f5d097cb.js" as="script"><link rel="prefetch" href="/assets/js/page--src--pages--404-vue.b12f5170.js"><link rel="prefetch" href="/assets/js/page--src--pages--about-us-vue.3adebecf.js"><link rel="prefetch" href="/assets/js/page--src--pages--blog-vue.751bc822.js"><link rel="prefetch" href="/assets/js/page--src--pages--index-vue.8e23d7d5.js"><link rel="prefetch" href="/assets/js/search.651a1d13.js"><link rel="prefetch" href="/assets/js/vendors~search.706d69fe.js"><link rel="stylesheet" href="/assets/css/0.styles.20d902e6.css"><script data-vue-tag="ssr" type="text/javascript" src="/assets/js/service-worker.js" async></script><script data-vue-tag="ssr" type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"Runtime configuration","mainEntityOfPage":{"@type":"WebPage","@id":"/docs/runtime-configuration/"},"publisher":{"@type":"Organization","name":"IONOS SE"},"articleBody":"<h1 id=\"runtime-configuration\"><a href=\"#runtime-configuration\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Runtime configuration</h1>\n<p>The runtime configuration is only relevant for projects using PHP as other runtimes are not supported at the moment.</p>\n<p><code>PHP projects</code> are equipped with a PHP runtime, cron jobs, a MariaDB and a send mail account. Deploy Now offers a convenient solution to generate application configuration files such as <code>.env</code>, allowing you to reference to sensitive data such as database credentials without storing them in plain text.</p>\n<p>Templates for <code>.env</code> and <code>.htaccess</code> can be stored under <code>.deploy-now</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v2</a>. More information about the Deploy Now workflows can be found under <a href=\"/docs/git-integration/\">GitHub integration</a>.</p>\n<h2 id=\"configurations\"><a href=\"#configurations\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Configurations</h2>\n<h3 id=\"php-version\"><a href=\"#php-version\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>PHP version</h3>\n<h4 id=\"description\"><a href=\"#description\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>Deploy Now offers a wide choice of PHP versions. Note that PHP versions for the runtime can be different from those for the build.</p>\n<h4 id=\"how-to-edit\"><a href=\"#how-to-edit\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>PHP versions of production and staging deployments can be adapted in the project dashboard. You can also define a default PHP version for new branches.</p>\n<h3 id=\"database\"><a href=\"#database\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Database</h3>\n<h4 id=\"description-1\"><a href=\"#description-1\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>Each <code>PHP project</code> is equipped with one 2GB MariaDB. </p>\n<h4 id=\"how-to-edit-1\"><a href=\"#how-to-edit-1\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>Databases can be managed via phpMyAdmin in the project dashboard. How to reference database credentials in <code>.env</code> is described under <a href=\"/docs/runtime-configuration/#application-configuration\">application configuration</a>.</p>\n<h3 id=\"cron-jobs\"><a href=\"#cron-jobs\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Cron jobs</h3>\n<h4 id=\"description-2\"><a href=\"#description-2\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>Cron jobs execute recurring tasks, like executing scripts, on your runtime at fixed points in time.</p>\n<h4 id=\"how-to-edit-2\"><a href=\"#how-to-edit-2\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>Cron jobs can be defined in the <code>config.yaml</code> under <code>.deploy-now</code> for <a href=\"/docs/git-integration/#v1-projects-created-until-112022\">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v2</a> in your repository. More information about cron job syntax can be found <a href=\"https://de.ryte.com/wiki/CronJob\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>.</p>\n<h4 id=\"example\"><a href=\"#example\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Example</h4>\n<pre class=\"language-text line-numbers\"><code class=\"language-text\">runtime:\n cron-jobs:\n - command: my-cron-job-command # the deployment is located at $HOME/htdocs/ to execute a deployed script just prefix it accordingly\n schedule: 0 5 * * * # run every day at 5:00<span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span></span></code></pre>\n<h3 id=\"send-mail-account\"><a href=\"#send-mail-account\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Send mail account</h3>\n<h4 id=\"description-3\"><a href=\"#description-3\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>Deploy Now provided a mail account you can use to send emails from scripts. The mail address is generated by Deploy Now and the mail account cannot receive replies.</p>\n<h4 id=\"how-to-edit-3\"><a href=\"#how-to-edit-3\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>Mail credentials are stored in the GitHub secrets of your repository. How to reference mail credentials in <code>.env</code> is described under <a href=\"/docs/runtime-configuration/#application-configuration\">application configuration</a>.</p>\n<h3 id=\"application-configuration\"><a href=\"#application-configuration\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Application configuration</h3>\n<h4 id=\"description-4\"><a href=\"#description-4\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>Most dynamic projects require an application configuration file such as <code>.env</code>. Such files are simple text files for controlling application environment constants. As these constants might not be stored as plain text in your repository, you can add placeholders in configuration files that get replaced by their actual values during deployment. Actual values are stored in GitHub secrets.</p>\n<h4 id=\"how-to-edit-4\"><a href=\"#how-to-edit-4\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>Configuration file templates are stored in <code>.deploy-now</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v2</a>. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed config file. They are suffixed with <code>.template</code>. The reference syntax can be found in the examples below. Database credentials are stored in GitHub secrets as well since <code>workflow v2</code>.</p>\n<h4 id=\"example-1\"><a href=\"#example-1\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Example</h4>\n<p>Under <code>workflow v1</code>:</p>\n<p>Database credential reference</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> DB_CONNECTION=mysql\n DB_HOST=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .runtime.db.host <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n DB_PORT=3306\n DB_DATABASE=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .runtime.db.name <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n DB_USERNAME=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .runtime.db.user <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n DB_PASSWORD=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .runtime.db.password <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Send mail credential reference</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> MAIL_MAILER=smtp\n MAIL_HOST=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.host <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_PORT=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.port <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_USERNAME=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.user <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_PASSWORD=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.password <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_ENCRYPTION=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.encryption <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_FROM_ADDRESS=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .secrets.mail.fromAddress <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n MAIL_FROM_NAME=\"$<span class=\"token punctuation\">{</span>APP_NAME<span class=\"token punctuation\">}</span>\"<span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Reference App URL</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> APP_URL=<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> .runtime.app_url <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span></span></code></pre>\n<p>Custom secret and non-secret credential reference</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> <span class=\"token comment\"># non-secret</span>\n <span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> value\n <span class=\"token comment\"># secret</span>\n <span class=\"token key atrule\">key</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> secrets.key <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n <span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Please note that when adding new secret custom variables, they need to be referenced under <code>.github/workflows/deploy-now.yaml</code> as shown below.</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Render templates\n <span class=\"token key atrule\">if</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> steps.project.outputs.deployment<span class=\"token punctuation\">-</span>enabled == 'true' <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> ionos<span class=\"token punctuation\">-</span>deploy<span class=\"token punctuation\">-</span>now/template<span class=\"token punctuation\">-</span>renderer<span class=\"token punctuation\">-</span>action@v1\n <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">secrets</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n # this is a secret custom variable\n key: ${{ secrets.key }}</span>\n <span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Under <code>workflow v2</code>:</p>\n<p>Database credential reference</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> DB_CONNECTION=mysql\n DB_HOST=$IONOS_DB_HOST\n DB_PORT=3306\n DB_DATABASE=$IONOS_DB_NAME\n DB_USERNAME=\"$IONOS_DB_USERNAME\"\n DB_PASSWORD=\"$IONOS_DB_PASSWORD\"<span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Send mail credential reference</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> MAIL_MAILER=smtp\n MAIL_HOST=$IONOS_MAIL_HOST\n MAIL_PORT=$IONOS_MAIL_PORT\n MAIL_USERNAME=$IONOS_MAIL_USERNAME\n MAIL_PASSWORD=IONOS_MAIL_PASSWORD\n MAIL_ENCRYPTION=IONOS_MAIL_ENCRYPTION\n MAIL_FROM_ADDRESS=IONOS_MAIL_FROM_ADDRESS\n MAIL_FROM_NAME=\"$<span class=\"token punctuation\">{</span>APP_NAME<span class=\"token punctuation\">}</span>\"<span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>\n<p>Reference App URL</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> APP_URL=$IONOS_APP_URL<span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span></span></code></pre>\n<p>Inserted values could also be url-encoded if this is required by you framework. Simply use the following syntax:</p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> URL_ENCODED_PASSWORD=$<span class=\"token punctuation\">{</span> IONOS_DB_PASSWORD.urlEncoded() <span class=\"token punctuation\">}</span>\n <span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span></span></code></pre>\n<p>All secrets and deployment specific variables are automatically passed to the template action, therefore you do not have to edit this section on you own. </p>\n<pre class=\"language-yaml line-numbers\"><code class=\"language-yaml\"> <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">data</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'[${{ toJson(secrets) }}, ${{ steps.deployment.outputs.template-variables }}]'</span><span class=\"line-numbers-rows\" aria-hidden=\"true\"><span></span><span></span></span></code></pre>\n<h3 id=\"htaccess\"><a href=\"#htaccess\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>.HTACCESS</h3>\n<h4 id=\"description-5\"><a href=\"#description-5\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Description</h4>\n<p>HTACCESS is a configuration file used by apache-based web servers. It can be used to define redirects and rewrites and includes security and performance relevant configurations. See <a href=\"/docs/apache-configuration-htaccess/\">Apache configuration</a> for an extensive overview of functionalities that are available in Deploy Now. </p>\n<h4 id=\"how-to-edit-5\"><a href=\"#how-to-edit-5\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>How to edit</h4>\n<p>HTACCESS files are stored in <code>.deploy-now</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href=\"/docs/git-integration/#workflow-versions\">workflow v2</a>. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed HTACCESS file. Files need to be named <code>.htaccess.template</code>.</p>\n<h4 id=\"example-2\"><a href=\"#example-2\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Example</h4>\n<p>Examples can be found under <a href=\"/docs/apache-configuration-htaccess/\">Apache configuration</a>.</p>\n<h2 id=\"need-help\"><a href=\"#need-help\" aria-hidden=\"true\"><span class=\"icon icon-link\"></span></a>Need help?</h2>\n<p>Feel free to reach out to us via <a href=\"mailto:deploynow-support@ionos.com\">deploynow-support@ionos.com</a>.</p>\n<div class=\"admonition admonition-tip\"><div class=\"admonition-heading\"><h5><div class=\"admonition-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"16\" viewBox=\"0 0 12 16\"><path fill-rule=\"evenodd\" d=\"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z\"></path></svg></div>Tip</h5></div><div class=\"admonition-content\"><p>Missing a feature? Feel free to drop your request via <a href=\"https://github.com/ionos-deploy-now/ionos-deploy-now/issues/new/choose\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issues</a></p></div></div>\n"}</script><noscript data-vue-tag="ssr"><style>.g-image--loading{display:none;}</style></noscript> </head> <body > <div data-server-rendered="true" id="app" class="font-sans antialiased text-ui-typo bg-ui-background"><div class="flex flex-col justify-start min-h-screen bg-ui-background"><header class="sticky top-0 z-10 w-full border-b border-ui-border"><div class="px-4 py-2 bg-ui-background min-h-[60px]"><div class="flex justify-between items-center"><div class="flex-center"><a href="/" title="Home" class="flex-center mr-2 sm:mr-12 active"><img src="/logo.svg" alt="Deploy Now logo" class="h-8 mr-2 deploy-now-logo"><div class="text-ui-headline font-headline font-semibold no-wrap hidden sm:block md:text-2xl"></div></a><div class="hidden xl:block"><a href="/docs/" class="p-2 mx-2 font-semibold font-headline text-ui-primary hover:text-ui-secondary dark:hover:text-white active"> Docs </a><a href="/docs/faq/" class="p-2 mx-2 font-semibold font-headline text-ui-primary hover:text-ui-secondary dark:hover:text-white"> FAQ </a><a href="/blog/" class="p-2 mx-2 font-semibold font-headline text-ui-primary hover:text-ui-secondary dark:hover:text-white"> Blog </a><a href="/about-us/" class="p-2 mx-2 font-semibold font-headline text-ui-primary hover:text-ui-secondary dark:hover:text-white"> About us </a><a href="https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=navigation&utm_campaign=sign-up#pricing" target="_blank" rel="noopener" class="p-2 mx-2 font-semibold font-headline text-ui-primary hover:text-ui-secondary dark:hover:text-white"> Pricing </a></div></div><div class="p-3 lg:p-0 max-w-screen-xs <lg:ml-auto"><!----></div><div class="flex-center lg:space-x-8"><a href="https://github.com/ionos-deploy-now/documentation//tree/main" target="_blank" rel="noopener noreferrer" title="Github" class="icon p-2"><span aria-hidden="true" role="img" class="material-design-icon github-icon icon icon-lg"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z"><!----></path></svg></span></a><button aria-label="Toggle darkmode" title="Toggle darkmode" class="icon icon icon-lg p-2"><span aria-hidden="true" role="img" class="material-design-icon theme-light-dark-icon icon-lg"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M7.5,2C5.71,3.15 4.5,5.18 4.5,7.5C4.5,9.82 5.71,11.85 7.53,13C4.46,13 2,10.54 2,7.5A5.5,5.5 0 0,1 7.5,2M19.07,3.5L20.5,4.93L4.93,20.5L3.5,19.07L19.07,3.5M12.89,5.93L11.41,5L9.97,6L10.39,4.3L9,3.24L10.75,3.12L11.33,1.47L12,3.1L13.73,3.13L12.38,4.26L12.89,5.93M9.59,9.54L8.43,8.81L7.31,9.59L7.65,8.27L6.56,7.44L7.92,7.35L8.37,6.06L8.88,7.33L10.24,7.36L9.19,8.23L9.59,9.54M19,13.5A5.5,5.5 0 0,1 13.5,19C12.28,19 11.15,18.6 10.24,17.93L17.93,10.24C18.6,11.15 19,12.28 19,13.5M14.6,20.08L17.37,18.93L17.13,22.28L14.6,20.08M18.93,17.38L20.08,14.61L22.28,17.15L18.93,17.38M20.08,12.42L18.94,9.64L22.28,9.88L20.08,12.42M9.63,18.93L12.4,20.08L9.87,22.27L9.63,18.93Z"><!----></path></svg></span></button><a href="https://ionos.space" target="_blank" rel="noopener noreferrer" title="Website" class="btn btn-primary ml-4 hide-mobile"><span aria-hidden="true" role="img" class="material-design-icon open-in-new-icon icon"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z"><!----></path></svg></span> Deploy Now </a><button class="icon p-2 text-ui-typo active:text-ui-typo lg:hidden"><span aria-hidden="true" role="img" class="material-design-icon menu-icon icon icon-lg"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z"><!----></path></svg></span></button></div></div></div></header><main class="relative justify-center bg-ui-background"><aside class="sidebar lg:hidden" style="top:0px;height:calc(100vh - 0px);"><div class="w-full pb-16 bg-ui-background"><div class="px-4 pt-8 lg:pt-12"><div class="pb-4 mb-4 border-ui-border border-b"><h3 class="pt-0 mt-0 mb-1 text-sm tracking-tight uppercase border-none"> Getting Started </h3><ul class="max-w-full pl-2 mb-0"><li id="/docs/"><a href="/docs/" class="flex items-center py-1 font-semibold active"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Introduction </a></li><li id="/docs/framework-samples/"><a href="/docs/framework-samples/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> From Sample </a></li><li id="/docs/from-cmd-line/"><a href="/docs/from-cmd-line/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> From Command Line </a></li><li id="/docs/from-repo/"><a href="/docs/from-repo/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> From Repository </a></li></ul></div><div class="pb-4 mb-4 border-ui-border border-b"><h3 class="pt-0 mt-0 mb-1 text-sm tracking-tight uppercase border-none"> Stacks </h3><ul class="max-w-full pl-2 mb-0"><li id="/docs/deploy-static-sites/"><a href="/docs/deploy-static-sites/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Deploy Static Sites via GitHub </a></li><li id="/docs/deploy-php-apps/"><a href="/docs/deploy-php-apps/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Deploy PHP Apps via GitHub </a></li></ul></div><div class="pb-4 mb-4 border-ui-border border-b"><h3 class="pt-0 mt-0 mb-1 text-sm tracking-tight uppercase border-none"> Configuration </h3><ul class="max-w-full pl-2 mb-0"><li id="/docs/github-actions-customization/"><a href="/docs/github-actions-customization/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Build configuration </a></li><li id="/docs/deployment-configuration/"><a href="/docs/deployment-configuration/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Deployment configuration </a></li><li id="/docs/runtime-configuration/" class="text-ui-primary"><a href="/docs/runtime-configuration/" aria-current="page" class="flex items-center py-1 font-semibold active--exact active"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center opacity-100 scale-100"></span> Runtime configuration </a></li><li id="/docs/apache-configuration-htaccess/"><a href="/docs/apache-configuration-htaccess/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Apache configuration: .htaccess </a></li></ul></div><div class="pb-4 mb-4 border-ui-border border-b"><h3 class="pt-0 mt-0 mb-1 text-sm tracking-tight uppercase border-none"> Features </h3><ul class="max-w-full pl-2 mb-0"><li id="/docs/git-integration/"><a href="/docs/git-integration/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> GitHub integration </a></li><li id="/docs/staging-deployments/"><a href="/docs/staging-deployments/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Staging deployments </a></li><li id="/docs/multi-deployments/"><a href="/docs/multi-deployments/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Multi deployments </a></li><li id="/docs/database/"><a href="/docs/database/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Database </a></li><li id="/docs/domain-tls/"><a href="/docs/domain-tls/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Domains and TLS </a></li><li id="/docs/deployment-viewer/"><a href="/docs/deployment-viewer/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> View files and logs </a></li><li id="/docs/visitor-statistics/"><a href="/docs/visitor-statistics/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Visitor statistics </a></li><li id="/docs/cronjobs/"><a href="/docs/cronjobs/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Cron jobs </a></li></ul></div><div class="pb-4 mb-4 border-ui-border"><h3 class="pt-0 mt-0 mb-1 text-sm tracking-tight uppercase border-none"> More </h3><ul class="max-w-full pl-2 mb-0"><li id="/docs/faq/"><a href="/docs/faq/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Frequently Asked Questions </a></li><li id="/blog/"><a href="/blog/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Blog </a></li><li id="/about-us/"><a href="/about-us/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> About us </a></li><li id="/docs/create-sample/"><a href="/docs/create-sample/" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Create a sample </a></li><li id="https://github.com/ionos-deploy-now/ionos-deploy-now/blob/main/CHANGELOG.md"><a href="https://github.com/ionos-deploy-now/ionos-deploy-now/blob/main/CHANGELOG.md" target="_blank" rel="noopener" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Changelog </a></li><li id="https://github.com/ionos-deploy-now/ionos-deploy-now/issues/new/choose"><a href="https://github.com/ionos-deploy-now/ionos-deploy-now/issues/new/choose" target="_blank" rel="noopener" class="flex items-center py-1 font-semibold"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Request a feature </a></li></ul></div></div></div></aside><div class="grid grid-cols-1"><div class="flex flex-wrap justify-start"><div class="<md:hidden lg:w-1/5 lg:order-2 overflow-y-auto sticky w-1/5 border-ui-border border-r lg:border-l lg:border-r-0" style="top:0px;height:calc(100vh - 0px);"><div class="mt-8 sm:px-4 sm:pb-16 md:mt-0 md:px-6 md:pt-12 lg:px-8 border-ui-border"><h3 class="pt-0 mt-0 text-sm tracking-wide uppercase border-none"> On this page </h3><div><ul><li class="font-semibold depth-2"><a href="/docs/runtime-configuration/#configurations" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Configurations </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#php-version" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> PHP version </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#database" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Database </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description-1" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit-1" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#cron-jobs" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Cron jobs </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description-2" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit-2" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#example" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Example </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#send-mail-account" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Send mail account </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description-3" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit-3" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#application-configuration" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Application configuration </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description-4" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit-4" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#example-1" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Example </a></li><li class="depth-3"><a href="/docs/runtime-configuration/#htaccess" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-2"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> .HTACCESS </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#description-5" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Description </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#how-to-edit-5" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> How to edit </a></li><li class="depth-4"><a href="/docs/runtime-configuration/#example-2" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1 pl-3"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Example </a></li><li class="border-t border-dashed border-ui-border pt-2 mt-2 font-semibold depth-2"><a href="/docs/runtime-configuration/#need-help" class="relative flex items-center py-1 text-sm transition transform hover:translate-x-1"><span class="absolute w-1 h-4 -ml-3 opacity-0 bg-ui-primary transition transform scale-0 origin-center"></span> Need help? </a></li></ul></div></div></div><div class="container pb-24 <md:max-w-[90vw] lg:w-3/5 lg:order-1 md:w-3/5"><div><div class="content"><h1 id="runtime-configuration"><a href="#runtime-configuration" aria-hidden="true"><span class="icon icon-link"></span></a>Runtime configuration</h1> <p>The runtime configuration is only relevant for projects using PHP as other runtimes are not supported at the moment.</p> <p><code>PHP projects</code> are equipped with a PHP runtime, cron jobs, a MariaDB and a send mail account. Deploy Now offers a convenient solution to generate application configuration files such as <code>.env</code>, allowing you to reference to sensitive data such as database credentials without storing them in plain text.</p> <p>Templates for <code>.env</code> and <code>.htaccess</code> can be stored under <code>.deploy-now</code> for <a href="/docs/git-integration/#workflow-versions">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href="/docs/git-integration/#workflow-versions">workflow v2</a>. More information about the Deploy Now workflows can be found under <a href="/docs/git-integration/">GitHub integration</a>.</p> <h2 id="configurations"><a href="#configurations" aria-hidden="true"><span class="icon icon-link"></span></a>Configurations</h2> <h3 id="php-version"><a href="#php-version" aria-hidden="true"><span class="icon icon-link"></span></a>PHP version</h3> <h4 id="description"><a href="#description" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>Deploy Now offers a wide choice of PHP versions. Note that PHP versions for the runtime can be different from those for the build.</p> <h4 id="how-to-edit"><a href="#how-to-edit" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>PHP versions of production and staging deployments can be adapted in the project dashboard. You can also define a default PHP version for new branches.</p> <h3 id="database"><a href="#database" aria-hidden="true"><span class="icon icon-link"></span></a>Database</h3> <h4 id="description-1"><a href="#description-1" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>Each <code>PHP project</code> is equipped with one 2GB MariaDB. </p> <h4 id="how-to-edit-1"><a href="#how-to-edit-1" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>Databases can be managed via phpMyAdmin in the project dashboard. How to reference database credentials in <code>.env</code> is described under <a href="/docs/runtime-configuration/#application-configuration">application configuration</a>.</p> <h3 id="cron-jobs"><a href="#cron-jobs" aria-hidden="true"><span class="icon icon-link"></span></a>Cron jobs</h3> <h4 id="description-2"><a href="#description-2" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>Cron jobs execute recurring tasks, like executing scripts, on your runtime at fixed points in time.</p> <h4 id="how-to-edit-2"><a href="#how-to-edit-2" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>Cron jobs can be defined in the <code>config.yaml</code> under <code>.deploy-now</code> for <a href="/docs/git-integration/#v1-projects-created-until-112022">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href="/docs/git-integration/#workflow-versions">workflow v2</a> in your repository. More information about cron job syntax can be found <a href="https://de.ryte.com/wiki/CronJob" target="_blank" rel="noopener noreferrer">here</a>.</p> <h4 id="example"><a href="#example" aria-hidden="true"><span class="icon icon-link"></span></a>Example</h4> <pre class="language-text line-numbers"><code class="language-text">runtime: cron-jobs: - command: my-cron-job-command # the deployment is located at $HOME/htdocs/ to execute a deployed script just prefix it accordingly schedule: 0 5 * * * # run every day at 5:00<span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span></span></code></pre> <h3 id="send-mail-account"><a href="#send-mail-account" aria-hidden="true"><span class="icon icon-link"></span></a>Send mail account</h3> <h4 id="description-3"><a href="#description-3" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>Deploy Now provided a mail account you can use to send emails from scripts. The mail address is generated by Deploy Now and the mail account cannot receive replies.</p> <h4 id="how-to-edit-3"><a href="#how-to-edit-3" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>Mail credentials are stored in the GitHub secrets of your repository. How to reference mail credentials in <code>.env</code> is described under <a href="/docs/runtime-configuration/#application-configuration">application configuration</a>.</p> <h3 id="application-configuration"><a href="#application-configuration" aria-hidden="true"><span class="icon icon-link"></span></a>Application configuration</h3> <h4 id="description-4"><a href="#description-4" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>Most dynamic projects require an application configuration file such as <code>.env</code>. Such files are simple text files for controlling application environment constants. As these constants might not be stored as plain text in your repository, you can add placeholders in configuration files that get replaced by their actual values during deployment. Actual values are stored in GitHub secrets.</p> <h4 id="how-to-edit-4"><a href="#how-to-edit-4" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>Configuration file templates are stored in <code>.deploy-now</code> for <a href="/docs/git-integration/#workflow-versions">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href="/docs/git-integration/#workflow-versions">workflow v2</a>. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed config file. They are suffixed with <code>.template</code>. The reference syntax can be found in the examples below. Database credentials are stored in GitHub secrets as well since <code>workflow v2</code>.</p> <h4 id="example-1"><a href="#example-1" aria-hidden="true"><span class="icon icon-link"></span></a>Example</h4> <p>Under <code>workflow v1</code>:</p> <p>Database credential reference</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> DB_CONNECTION=mysql DB_HOST=<span class="token punctuation">{</span><span class="token punctuation">{</span> .runtime.db.host <span class="token punctuation">}</span><span class="token punctuation">}</span> DB_PORT=3306 DB_DATABASE=<span class="token punctuation">{</span><span class="token punctuation">{</span> .runtime.db.name <span class="token punctuation">}</span><span class="token punctuation">}</span> DB_USERNAME=<span class="token punctuation">{</span><span class="token punctuation">{</span> .runtime.db.user <span class="token punctuation">}</span><span class="token punctuation">}</span> DB_PASSWORD=<span class="token punctuation">{</span><span class="token punctuation">{</span> .runtime.db.password <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Send mail credential reference</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> MAIL_MAILER=smtp MAIL_HOST=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.host <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_PORT=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.port <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_USERNAME=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.user <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_PASSWORD=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.password <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_ENCRYPTION=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.encryption <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_FROM_ADDRESS=<span class="token punctuation">{</span><span class="token punctuation">{</span> .secrets.mail.fromAddress <span class="token punctuation">}</span><span class="token punctuation">}</span> MAIL_FROM_NAME="$<span class="token punctuation">{</span>APP_NAME<span class="token punctuation">}</span>"<span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Reference App URL</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> APP_URL=<span class="token punctuation">{</span><span class="token punctuation">{</span> .runtime.app_url <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="line-numbers-rows" aria-hidden="true"><span></span></span></code></pre> <p>Custom secret and non-secret credential reference</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> <span class="token comment"># non-secret</span> <span class="token key atrule">key</span><span class="token punctuation">:</span> value <span class="token comment"># secret</span> <span class="token key atrule">key</span><span class="token punctuation">:</span> $<span class="token punctuation">{</span><span class="token punctuation">{</span> secrets.key <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Please note that when adding new secret custom variables, they need to be referenced under <code>.github/workflows/deploy-now.yaml</code> as shown below.</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> Render templates <span class="token key atrule">if</span><span class="token punctuation">:</span> $<span class="token punctuation">{</span><span class="token punctuation">{</span> steps.project.outputs.deployment<span class="token punctuation">-</span>enabled == 'true' <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token key atrule">uses</span><span class="token punctuation">:</span> ionos<span class="token punctuation">-</span>deploy<span class="token punctuation">-</span>now/template<span class="token punctuation">-</span>renderer<span class="token punctuation">-</span>action@v1 <span class="token key atrule">with</span><span class="token punctuation">:</span> <span class="token key atrule">secrets</span><span class="token punctuation">:</span> <span class="token punctuation">|</span><span class="token scalar string"> # this is a secret custom variable key: ${{ secrets.key }}</span> <span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Under <code>workflow v2</code>:</p> <p>Database credential reference</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> DB_CONNECTION=mysql DB_HOST=$IONOS_DB_HOST DB_PORT=3306 DB_DATABASE=$IONOS_DB_NAME DB_USERNAME="$IONOS_DB_USERNAME" DB_PASSWORD="$IONOS_DB_PASSWORD"<span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Send mail credential reference</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> MAIL_MAILER=smtp MAIL_HOST=$IONOS_MAIL_HOST MAIL_PORT=$IONOS_MAIL_PORT MAIL_USERNAME=$IONOS_MAIL_USERNAME MAIL_PASSWORD=IONOS_MAIL_PASSWORD MAIL_ENCRYPTION=IONOS_MAIL_ENCRYPTION MAIL_FROM_ADDRESS=IONOS_MAIL_FROM_ADDRESS MAIL_FROM_NAME="$<span class="token punctuation">{</span>APP_NAME<span class="token punctuation">}</span>"<span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <p>Reference App URL</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> APP_URL=$IONOS_APP_URL<span class="line-numbers-rows" aria-hidden="true"><span></span></span></code></pre> <p>Inserted values could also be url-encoded if this is required by you framework. Simply use the following syntax:</p> <pre class="language-yaml line-numbers"><code class="language-yaml"> URL_ENCODED_PASSWORD=$<span class="token punctuation">{</span> IONOS_DB_PASSWORD.urlEncoded() <span class="token punctuation">}</span> <span class="line-numbers-rows" aria-hidden="true"><span></span><span></span></span></code></pre> <p>All secrets and deployment specific variables are automatically passed to the template action, therefore you do not have to edit this section on you own. </p> <pre class="language-yaml line-numbers"><code class="language-yaml"> <span class="token key atrule">with</span><span class="token punctuation">:</span> <span class="token key atrule">data</span><span class="token punctuation">:</span> <span class="token string">'[${{ toJson(secrets) }}, ${{ steps.deployment.outputs.template-variables }}]'</span><span class="line-numbers-rows" aria-hidden="true"><span></span><span></span></span></code></pre> <h3 id="htaccess"><a href="#htaccess" aria-hidden="true"><span class="icon icon-link"></span></a>.HTACCESS</h3> <h4 id="description-5"><a href="#description-5" aria-hidden="true"><span class="icon icon-link"></span></a>Description</h4> <p>HTACCESS is a configuration file used by apache-based web servers. It can be used to define redirects and rewrites and includes security and performance relevant configurations. See <a href="/docs/apache-configuration-htaccess/">Apache configuration</a> for an extensive overview of functionalities that are available in Deploy Now. </p> <h4 id="how-to-edit-5"><a href="#how-to-edit-5" aria-hidden="true"><span class="icon icon-link"></span></a>How to edit</h4> <p>HTACCESS files are stored in <code>.deploy-now</code> for <a href="/docs/git-integration/#workflow-versions">workflow v1</a> and <code>.deploy-now/[project-name]</code> for <a href="/docs/git-integration/#workflow-versions">workflow v2</a>. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed HTACCESS file. Files need to be named <code>.htaccess.template</code>.</p> <h4 id="example-2"><a href="#example-2" aria-hidden="true"><span class="icon icon-link"></span></a>Example</h4> <p>Examples can be found under <a href="/docs/apache-configuration-htaccess/">Apache configuration</a>.</p> <h2 id="need-help"><a href="#need-help" aria-hidden="true"><span class="icon icon-link"></span></a>Need help?</h2> <p>Feel free to reach out to us via <a href="mailto:deploynow-support@ionos.com">deploynow-support@ionos.com</a>.</p> <div class="admonition admonition-tip"><div class="admonition-heading"><h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></div>Tip</h5></div><div class="admonition-content"><p>Missing a feature? Feel free to drop your request via <a href="https://github.com/ionos-deploy-now/ionos-deploy-now/issues/new/choose" target="_blank" rel="noopener noreferrer">GitHub Issues</a></p></div></div> </div><div class="mt-10"><a href="https://github.com/ionos-deploy-now/documentation//edit/main/content/docs/runtime-configuration.md" target="_blank" rel="noopener noreferrer" class="flex items-center opacity-50 hover:opacity-100 hover:no-underline"><span aria-hidden="true" role="img" decorative="" class="material-design-icon pencil-outline-icon"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z"><!----></path></svg></span><span class="ml-1"> Suggest changes to this page </span></a></div><div class="mt-8 pt-8 lg:mt-12 lg:pt-12 border-t border-ui-border"><div class="flex justify-between items-stretch space-x-2"><a href="/docs/deployment-configuration/" class="btn btn-hover"><span aria-hidden="true" role="img" decorative="" class="material-design-icon arrow-left-icon mr-2"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"><!----></path></svg></span> Deployment configuration </a><a href="/docs/apache-configuration-htaccess/" class="btn btn-hover"> Apache configuration: .htaccess <span aria-hidden="true" role="img" decorative="" class="material-design-icon arrow-right-icon ml-2"><svg fill="currentColor" width="24" height="24" viewBox="0 0 24 24" class="material-design-icon__svg"><path d="M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"><!----></path></svg></span></a></div></div></div></div></div></div></main></div><div class="footer md:grid md:grid-cols-5"><div class="col-start-2 col-span-3 grid grid-cols-1 gap-4 <md:gap-8 md:grid-cols-4 md:gap-16"><div class="space-y-4"><div class="font-bold">Docs</div><a href="/docs/" class="active">Introduction</a><a href="/docs/deploy-static-sites/">Deploy a Static Site</a><a href="/docs/deploy-php-apps/">Deploy a PHP App</a><a href="/docs/github-actions-customization/">Build configuration</a><a href="/docs/deployment-configuration/">Deployment configuration</a><a href="/docs/runtime-configuration/" aria-current="page" class="active--exact active">Runtime configuration</a><a href="/docs/git-integration/">Github Integration</a><a href="/docs/staging-deployments/">Staging Deployments</a><a href="/docs/domain-tls/">Domains & TLS/SSL</a><a href="/docs/framework-samples/">Framework samples</a></div><div class="space-y-4"><div class="font-bold">Customer Shops</div><a href="https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">United States</a><a href="https://www.ionos.co.uk/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">United Kingdom</a><a href="https://www.ionos.de/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">Germany</a><a href="https://www.ionos.ca/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">Canada</a><a href="https://www.ionos.es/alojamiento/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">Spain</a><a href="https://www.ionos.fr/hebergement/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">France</a><a href="https://www.ionos.it/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">Italy</a><a href="https://www.ionos.mx/alojamiento/deploy-now?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank">Mexico</a></div><div class="space-y-4"><div class="font-bold">Company</div><a href="https://www.ionos.com/about?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank"> About IONOS </a><a href="https://www.ionos.com/agency-partner?utm_source=deploy-now-docs&utm_medium=footer&utm_campaign=shop-links" rel="noreferrer" target="_blank"> IONOS Agency Partner Programm </a><a href="https://www.ionos.com/terms-gtc/general-terms-and-conditions/" rel="”noreferrer”" target="_blank"> Terms and Conditions </a><a href="https://www.ionos.de/terms-gtc/terms-privacy" rel="”noreferrer”" target="_blank"> Privacy Policy </a><a href="https://www.ionos.de/impressum" rel="”noreferrer”" target="_blank"> Legal Information </a><div class="font-bold">Assets</div><a href="https://www.ionos.com/hosting/jamstack" rel="noreferrer" target="_blank">What is the Jamstack?</a><a href="/about-us/" target="_blank">About Deploy Now</a><a href="/blog/" target="_blank">Blog</a><a href="/docs/faq/" target="_blank">Frequently Asked Questions</a></div><div class="space-y-4"><a href="https://www.ionos.com/" rel="noreferrer" target="_blank"><img alt="ionos logo" src="https://ce1.uicdn.net/2dd/1690fa2f62f6ed55e11b6c594145c/webapp/vi-logo.svg" width="150"></a><div>© 2024 <span>IONOS SE</span></div><a href="https://www.ionos.com/environment" rel="noreferrer" target="_blank" class="flex items-center space-x-2"><img alt="green energy logo" src="https://ce1.uicdn.net/347/e8f7028afa25836bf517e5414ba5f/frontend-applications-common/vi-green-energy.svg" width="50" class="inline"><span>Environment</span></a></div></div></div></div> <script>window.__INITIAL_STATE__={"data":{"markdownPage":{"id":"c86c28299326d64e0518e3ade2890689","title":"Runtime configuration","description":"How to manage config files and runtime environment variables in Deploy Now.","path":"\u002Fdocs\u002Fruntime-configuration\u002F","fileInfo":{"path":"docs\u002Fruntime-configuration.md"},"editable":true,"timeToRead":4,"content":"\u003Ch1 id=\"runtime-configuration\"\u003E\u003Ca href=\"#runtime-configuration\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003ERuntime configuration\u003C\u002Fh1\u003E\n\u003Cp\u003EThe runtime configuration is only relevant for projects using PHP as other runtimes are not supported at the moment.\u003C\u002Fp\u003E\n\u003Cp\u003E\u003Ccode\u003EPHP projects\u003C\u002Fcode\u003E are equipped with a PHP runtime, cron jobs, a MariaDB and a send mail account. Deploy Now offers a convenient solution to generate application configuration files such as \u003Ccode\u003E.env\u003C\u002Fcode\u003E, allowing you to reference to sensitive data such as database credentials without storing them in plain text.\u003C\u002Fp\u003E\n\u003Cp\u003ETemplates for \u003Ccode\u003E.env\u003C\u002Fcode\u003E and \u003Ccode\u003E.htaccess\u003C\u002Fcode\u003E can be stored under \u003Ccode\u003E.deploy-now\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v1\u003C\u002Fa\u003E and \u003Ccode\u003E.deploy-now\u002F[project-name]\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v2\u003C\u002Fa\u003E. More information about the Deploy Now workflows can be found under \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F\"\u003EGitHub integration\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Ch2 id=\"configurations\"\u003E\u003Ca href=\"#configurations\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EConfigurations\u003C\u002Fh2\u003E\n\u003Ch3 id=\"php-version\"\u003E\u003Ca href=\"#php-version\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EPHP version\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description\"\u003E\u003Ca href=\"#description\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003EDeploy Now offers a wide choice of PHP versions. Note that PHP versions for the runtime can be different from those for the build.\u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit\"\u003E\u003Ca href=\"#how-to-edit\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003EPHP versions of production and staging deployments can be adapted in the project dashboard. You can also define a default PHP version for new branches.\u003C\u002Fp\u003E\n\u003Ch3 id=\"database\"\u003E\u003Ca href=\"#database\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDatabase\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description-1\"\u003E\u003Ca href=\"#description-1\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003EEach \u003Ccode\u003EPHP project\u003C\u002Fcode\u003E is equipped with one 2GB MariaDB. \u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit-1\"\u003E\u003Ca href=\"#how-to-edit-1\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003EDatabases can be managed via phpMyAdmin in the project dashboard. How to reference database credentials in \u003Ccode\u003E.env\u003C\u002Fcode\u003E is described under \u003Ca href=\"\u002Fdocs\u002Fruntime-configuration\u002F#application-configuration\"\u003Eapplication configuration\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Ch3 id=\"cron-jobs\"\u003E\u003Ca href=\"#cron-jobs\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003ECron jobs\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description-2\"\u003E\u003Ca href=\"#description-2\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003ECron jobs execute recurring tasks, like executing scripts, on your runtime at fixed points in time.\u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit-2\"\u003E\u003Ca href=\"#how-to-edit-2\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003ECron jobs can be defined in the \u003Ccode\u003Econfig.yaml\u003C\u002Fcode\u003E under \u003Ccode\u003E.deploy-now\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#v1-projects-created-until-112022\"\u003Eworkflow v1\u003C\u002Fa\u003E and \u003Ccode\u003E.deploy-now\u002F[project-name]\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v2\u003C\u002Fa\u003E in your repository. More information about cron job syntax can be found \u003Ca href=\"https:\u002F\u002Fde.ryte.com\u002Fwiki\u002FCronJob\" target=\"_blank\" rel=\"noopener noreferrer\"\u003Ehere\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Ch4 id=\"example\"\u003E\u003Ca href=\"#example\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EExample\u003C\u002Fh4\u003E\n\u003Cpre class=\"language-text line-numbers\"\u003E\u003Ccode class=\"language-text\"\u003Eruntime:\n cron-jobs:\n - command: my-cron-job-command # the deployment is located at $HOME\u002Fhtdocs\u002F to execute a deployed script just prefix it accordingly\n schedule: 0 5 * * * # run every day at 5:00\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Ch3 id=\"send-mail-account\"\u003E\u003Ca href=\"#send-mail-account\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003ESend mail account\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description-3\"\u003E\u003Ca href=\"#description-3\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003EDeploy Now provided a mail account you can use to send emails from scripts. The mail address is generated by Deploy Now and the mail account cannot receive replies.\u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit-3\"\u003E\u003Ca href=\"#how-to-edit-3\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003EMail credentials are stored in the GitHub secrets of your repository. How to reference mail credentials in \u003Ccode\u003E.env\u003C\u002Fcode\u003E is described under \u003Ca href=\"\u002Fdocs\u002Fruntime-configuration\u002F#application-configuration\"\u003Eapplication configuration\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Ch3 id=\"application-configuration\"\u003E\u003Ca href=\"#application-configuration\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EApplication configuration\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description-4\"\u003E\u003Ca href=\"#description-4\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003EMost dynamic projects require an application configuration file such as \u003Ccode\u003E.env\u003C\u002Fcode\u003E. Such files are simple text files for controlling application environment constants. As these constants might not be stored as plain text in your repository, you can add placeholders in configuration files that get replaced by their actual values during deployment. Actual values are stored in GitHub secrets.\u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit-4\"\u003E\u003Ca href=\"#how-to-edit-4\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003EConfiguration file templates are stored in \u003Ccode\u003E.deploy-now\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v1\u003C\u002Fa\u003E and \u003Ccode\u003E.deploy-now\u002F[project-name]\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v2\u003C\u002Fa\u003E. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed config file. They are suffixed with \u003Ccode\u003E.template\u003C\u002Fcode\u003E. The reference syntax can be found in the examples below. Database credentials are stored in GitHub secrets as well since \u003Ccode\u003Eworkflow v2\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003Ch4 id=\"example-1\"\u003E\u003Ca href=\"#example-1\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EExample\u003C\u002Fh4\u003E\n\u003Cp\u003EUnder \u003Ccode\u003Eworkflow v1\u003C\u002Fcode\u003E:\u003C\u002Fp\u003E\n\u003Cp\u003EDatabase credential reference\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E DB_CONNECTION=mysql\n DB_HOST=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .runtime.db.host \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n DB_PORT=3306\n DB_DATABASE=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .runtime.db.name \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n DB_USERNAME=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .runtime.db.user \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n DB_PASSWORD=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .runtime.db.password \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESend mail credential reference\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E MAIL_MAILER=smtp\n MAIL_HOST=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.host \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_PORT=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.port \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_USERNAME=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.user \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_PASSWORD=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.password \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_ENCRYPTION=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.encryption \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_FROM_ADDRESS=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .secrets.mail.fromAddress \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n MAIL_FROM_NAME=\"$\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003EAPP_NAME\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\"\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EReference App URL\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E APP_URL=\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E .runtime.app_url \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ECustom secret and non-secret credential reference\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E \u003Cspan class=\"token comment\"\u003E# non-secret\u003C\u002Fspan\u003E\n \u003Cspan class=\"token key atrule\"\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E value\n \u003Cspan class=\"token comment\"\u003E# secret\u003C\u002Fspan\u003E\n \u003Cspan class=\"token key atrule\"\u003Ekey\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E $\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E secrets.key \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n \u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EPlease note that when adding new secret custom variables, they need to be referenced under \u003Ccode\u003E.github\u002Fworkflows\u002Fdeploy-now.yaml\u003C\u002Fcode\u003E as shown below.\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E \u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003E \u003Cspan class=\"token key atrule\"\u003Ename\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E Render templates\n \u003Cspan class=\"token key atrule\"\u003Eif\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E $\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E steps.project.outputs.deployment\u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003Eenabled == 'true' \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n \u003Cspan class=\"token key atrule\"\u003Euses\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E ionos\u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003Edeploy\u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003Enow\u002Ftemplate\u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003Erenderer\u003Cspan class=\"token punctuation\"\u003E-\u003C\u002Fspan\u003Eaction@v1\n \u003Cspan class=\"token key atrule\"\u003Ewith\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E\n \u003Cspan class=\"token key atrule\"\u003Esecrets\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E \u003Cspan class=\"token punctuation\"\u003E|\u003C\u002Fspan\u003E\u003Cspan class=\"token scalar string\"\u003E\n # this is a secret custom variable\n key: ${{ secrets.key }}\u003C\u002Fspan\u003E\n \u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EUnder \u003Ccode\u003Eworkflow v2\u003C\u002Fcode\u003E:\u003C\u002Fp\u003E\n\u003Cp\u003EDatabase credential reference\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E DB_CONNECTION=mysql\n DB_HOST=$IONOS_DB_HOST\n DB_PORT=3306\n DB_DATABASE=$IONOS_DB_NAME\n DB_USERNAME=\"$IONOS_DB_USERNAME\"\n DB_PASSWORD=\"$IONOS_DB_PASSWORD\"\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003ESend mail credential reference\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E MAIL_MAILER=smtp\n MAIL_HOST=$IONOS_MAIL_HOST\n MAIL_PORT=$IONOS_MAIL_PORT\n MAIL_USERNAME=$IONOS_MAIL_USERNAME\n MAIL_PASSWORD=IONOS_MAIL_PASSWORD\n MAIL_ENCRYPTION=IONOS_MAIL_ENCRYPTION\n MAIL_FROM_ADDRESS=IONOS_MAIL_FROM_ADDRESS\n MAIL_FROM_NAME=\"$\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003EAPP_NAME\u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\"\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EReference App URL\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E APP_URL=$IONOS_APP_URL\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EInserted values could also be url-encoded if this is required by you framework. Simply use the following syntax:\u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E URL_ENCODED_PASSWORD=$\u003Cspan class=\"token punctuation\"\u003E{\u003C\u002Fspan\u003E IONOS_DB_PASSWORD.urlEncoded() \u003Cspan class=\"token punctuation\"\u003E}\u003C\u002Fspan\u003E\n \u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Cp\u003EAll secrets and deployment specific variables are automatically passed to the template action, therefore you do not have to edit this section on you own. \u003C\u002Fp\u003E\n\u003Cpre class=\"language-yaml line-numbers\"\u003E\u003Ccode class=\"language-yaml\"\u003E \u003Cspan class=\"token key atrule\"\u003Ewith\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E\n \u003Cspan class=\"token key atrule\"\u003Edata\u003C\u002Fspan\u003E\u003Cspan class=\"token punctuation\"\u003E:\u003C\u002Fspan\u003E \u003Cspan class=\"token string\"\u003E'[${{ toJson(secrets) }}, ${{ steps.deployment.outputs.template-variables }}]'\u003C\u002Fspan\u003E\u003Cspan class=\"line-numbers-rows\" aria-hidden=\"true\"\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\n\u003Ch3 id=\"htaccess\"\u003E\u003Ca href=\"#htaccess\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E.HTACCESS\u003C\u002Fh3\u003E\n\u003Ch4 id=\"description-5\"\u003E\u003Ca href=\"#description-5\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EDescription\u003C\u002Fh4\u003E\n\u003Cp\u003EHTACCESS is a configuration file used by apache-based web servers. It can be used to define redirects and rewrites and includes security and performance relevant configurations. See \u003Ca href=\"\u002Fdocs\u002Fapache-configuration-htaccess\u002F\"\u003EApache configuration\u003C\u002Fa\u003E for an extensive overview of functionalities that are available in Deploy Now. \u003C\u002Fp\u003E\n\u003Ch4 id=\"how-to-edit-5\"\u003E\u003Ca href=\"#how-to-edit-5\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EHow to edit\u003C\u002Fh4\u003E\n\u003Cp\u003EHTACCESS files are stored in \u003Ccode\u003E.deploy-now\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v1\u003C\u002Fa\u003E and \u003Ccode\u003E.deploy-now\u002F[project-name]\u003C\u002Fcode\u003E for \u003Ca href=\"\u002Fdocs\u002Fgit-integration\u002F#workflow-versions\"\u003Eworkflow v2\u003C\u002Fa\u003E. The relative path of this file within this folder (you may add additional sub-folders) will be used as the target path for the deployed HTACCESS file. Files need to be named \u003Ccode\u003E.htaccess.template\u003C\u002Fcode\u003E.\u003C\u002Fp\u003E\n\u003Ch4 id=\"example-2\"\u003E\u003Ca href=\"#example-2\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003EExample\u003C\u002Fh4\u003E\n\u003Cp\u003EExamples can be found under \u003Ca href=\"\u002Fdocs\u002Fapache-configuration-htaccess\u002F\"\u003EApache configuration\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Ch2 id=\"need-help\"\u003E\u003Ca href=\"#need-help\" aria-hidden=\"true\"\u003E\u003Cspan class=\"icon icon-link\"\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003ENeed help?\u003C\u002Fh2\u003E\n\u003Cp\u003EFeel free to reach out to us via \u003Ca href=\"mailto:deploynow-support@ionos.com\"\u003Edeploynow-support@ionos.com\u003C\u002Fa\u003E.\u003C\u002Fp\u003E\n\u003Cdiv class=\"admonition admonition-tip\"\u003E\u003Cdiv class=\"admonition-heading\"\u003E\u003Ch5\u003E\u003Cdiv class=\"admonition-icon\"\u003E\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"12\" height=\"16\" viewBox=\"0 0 12 16\"\u003E\u003Cpath fill-rule=\"evenodd\" d=\"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z\"\u003E\u003C\u002Fpath\u003E\u003C\u002Fsvg\u003E\u003C\u002Fdiv\u003ETip\u003C\u002Fh5\u003E\u003C\u002Fdiv\u003E\u003Cdiv class=\"admonition-content\"\u003E\u003Cp\u003EMissing a feature? Feel free to drop your request via \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fionos-deploy-now\u002Fionos-deploy-now\u002Fissues\u002Fnew\u002Fchoose\" target=\"_blank\" rel=\"noopener noreferrer\"\u003EGitHub Issues\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003C\u002Fdiv\u003E\n","contentType":"docs","header":null,"sidebar":"docs","next":"\u002Fdocs\u002Fapache-configuration-htaccess\u002F","prev":"\u002Fdocs\u002Fdeployment-configuration\u002F","headings":[{"depth":1,"value":"Runtime configuration","anchor":"#runtime-configuration"},{"depth":2,"value":"Configurations","anchor":"#configurations"},{"depth":3,"value":"PHP version","anchor":"#php-version"},{"depth":4,"value":"Description","anchor":"#description"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit"},{"depth":3,"value":"Database","anchor":"#database"},{"depth":4,"value":"Description","anchor":"#description-1"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit-1"},{"depth":3,"value":"Cron jobs","anchor":"#cron-jobs"},{"depth":4,"value":"Description","anchor":"#description-2"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit-2"},{"depth":4,"value":"Example","anchor":"#example"},{"depth":3,"value":"Send mail account","anchor":"#send-mail-account"},{"depth":4,"value":"Description","anchor":"#description-3"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit-3"},{"depth":3,"value":"Application configuration","anchor":"#application-configuration"},{"depth":4,"value":"Description","anchor":"#description-4"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit-4"},{"depth":4,"value":"Example","anchor":"#example-1"},{"depth":3,"value":".HTACCESS","anchor":"#htaccess"},{"depth":4,"value":"Description","anchor":"#description-5"},{"depth":4,"value":"How to edit","anchor":"#how-to-edit-5"},{"depth":4,"value":"Example","anchor":"#example-2"},{"depth":2,"value":"Need help?","anchor":"#need-help"}]},"allMarkdownPage":{"edges":[{"node":{"path":"\u002Fblog\u002Fdeploy-laravel-via-github\u002F","title":"Fastest ever Laravel deployments via GitHub? You decide."}},{"node":{"path":"\u002Fteam\u002Froman-okon\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Frobin-mueller\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Fmarkus-hunsalz\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Fmarcel-solle\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Falexander-gaengel\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Ffatih-ok\u002F","title":""}},{"node":{"path":"\u002Fteam\u002Fjosua-meier\u002F","title":""}},{"node":{"path":"\u002Fdocs\u002Fvisitor-statistics\u002F","title":"Visitor statistics"}},{"node":{"path":"\u002Fdocs\u002Fuse-cases\u002F","title":"Project type use cases"}},{"node":{"path":"\u002Fdocs\u002Fruntime-configuration\u002F","title":"Runtime configuration"}},{"node":{"path":"\u002Fdocs\u002Fstaging-deployments\u002F","title":"Staging deployments"}},{"node":{"path":"\u002Fdocs\u002Fphp-alpha\u002F","title":"PHP Alpha: Deploy Laravel or Symfony with Deploy Now"}},{"node":{"path":"\u002Fdocs\u002F","title":"Introduction"}},{"node":{"path":"\u002Fdocs\u002Ffrom-cmd-line\u002F","title":"From Command Line"}},{"node":{"path":"\u002Fdocs\u002Fgithub-actions-customization\u002F","title":"Build configuration"}},{"node":{"path":"\u002Fdocs\u002Fmulti-deployments\u002F","title":"Multi deployments"}},{"node":{"path":"\u002Fdocs\u002Ffrom-repo\u002F","title":"From Repository"}},{"node":{"path":"\u002Fdocs\u002Fgit-integration\u002F","title":"GitHub integration"}},{"node":{"path":"\u002Fdocs\u002Ffaq\u002F","title":"Frequently Asked Questions"}},{"node":{"path":"\u002Fdocs\u002Fframework-samples\u002F","title":"From Sample"}},{"node":{"path":"\u002Fdocs\u002Fdomain-tls\u002F","title":"Domains and TLS"}},{"node":{"path":"\u002Fdocs\u002Fdeployment-viewer\u002F","title":"View files and logs"}},{"node":{"path":"\u002Fdocs\u002Fdeployment-configuration\u002F","title":"Deployment configuration"}},{"node":{"path":"\u002Fdocs\u002Fdeploy-static-sites\u002F","title":"Deploy Static Sites via GitHub"}},{"node":{"path":"\u002Fdocs\u002Fdeploy-php-apps\u002F","title":"Deploy PHP Apps via GitHub"}},{"node":{"path":"\u002Fdocs\u002Fdatabase\u002F","title":"Database"}},{"node":{"path":"\u002Fdocs\u002Fcronjobs\u002F","title":"Cron jobs"}},{"node":{"path":"\u002Fdocs\u002Fcreate-sample\u002F","title":"Create a sample"}},{"node":{"path":"\u002Fdocs\u002Fconfiguration-overview\u002F","title":"Overview"}},{"node":{"path":"\u002Fdocs\u002Fapache-configuration-htaccess\u002F","title":"Apache configuration: .htaccess"}},{"node":{"path":"\u002Fblog\u002Fwebinar-de\u002F","title":"Webinar: Das Comeback des statischen Webs"}},{"node":{"path":"\u002Fblog\u002Fworkflow-dispatch\u002F","title":"Update: Deploy Now triggers new builds without empty commits"}},{"node":{"path":"\u002Fblog\u002Fshop-experience-with-vue\u002F","title":"Building API-first eCommerce dashboards with Vue.js and Deploy Now"}},{"node":{"path":"\u002Fblog\u002Fstaging-explained\u002F","title":"Build and stage a Gatsby site with Deploy Now"}},{"node":{"path":"\u002Fblog\u002Freasons-for-staging\u002F","title":"5 reasons to start staging your code right now "}},{"node":{"path":"\u002Fblog\u002Freact-blog\u002F","title":"How to deploy a Blog with React and Deploy Now"}},{"node":{"path":"\u002Fblog\u002Fpull-request-permissions\u002F","title":"Update: Deploy Now GitHub App requires permissions to manage pull requests"}},{"node":{"path":"\u002Fblog\u002Fportfolio-sites-de\u002F","title":"Hosten Sie Ihre eigene Portfolio-Website mit Deploy Now"}},{"node":{"path":"\u002Fblog\u002Fproduct-hunt\u002F","title":"Deploy Now on Product Hunt"}},{"node":{"path":"\u002Fblog\u002Fpodcast-de\u002F","title":"Podcast: Die Geschichte hinter Deploy Now"}},{"node":{"path":"\u002Fblog\u002Fphp-release\u002F","title":"Deploy Now feature realease: LAMP stack support for dynamic websites now available "}},{"node":{"path":"\u002Fblog\u002Fmulti-deployments\u002F","title":"Effortless Deployments: Linking one Repo to Multiple Runtimes"}},{"node":{"path":"\u002Fblog\u002Flaravel-vs-symfony\u002F","title":"Laravel vs. Symfony: Which Framework is right for your project?"}},{"node":{"path":"\u002Fblog\u002Fjamstack-for-agencies-whitepaper-uk-us\u002F","title":"Whitepaper: Build client websites with Jamstack"}},{"node":{"path":"\u002Fblog\u002Fjamstack-for-agencies-whitepaper-de\u002F","title":"Whitepaper: Erstellen Sie Kundenwebsites mit Jamstack"}},{"node":{"path":"\u002Fblog\u002Fgithub-for-agencies\u002F","title":"How to Incorporate GitHub and CI\u002FCD Deployments into Your Web Agency's Workflow "}},{"node":{"path":"\u002Fblog\u002Fhost-github-blog\u002F","title":"How to Choose the Best Host for Your GitHub Blog"}},{"node":{"path":"\u002Fblog\u002Fgithub-actions-lighthouse\u002F","title":"Tutorial: Automated Lighthouse tests with GitHub Actions"}},{"node":{"path":"\u002Fblog\u002Fgit-intro\u002F","title":"An Introduction to Git: The Basics Every Beginning Developer Should Know"}},{"node":{"path":"\u002Fblog\u002Fgithub-actions\u002F","title":"GitHub Actions: An Introduction"}},{"node":{"path":"\u002Fblog\u002Fgithub-actions-version-update\u002F","title":"Upgrade your GitHub actions"}},{"node":{"path":"\u002Fblog\u002Fdarkmode\u002F","title":"Feature Release: Dark Mode"}},{"node":{"path":"\u002Fblog\u002Fdeploy-now-and-github-actions\u002F","title":"How to make Git deployments with IONOS quick and easy"}},{"node":{"path":"\u002Fblog\u002Fdeploy-jekyll-via-github\u002F","title":"Tutorial: Fastest ever Jekyll deployments via GitHub"}},{"node":{"path":"\u002Fblog\u002Fbest-react-ssg\u002F","title":"Gatsby vs. React Static vs. Next.js: What's the best React-based static site generator?"}},{"node":{"path":"\u002Fblog\u002Fapi-guide\u002F","title":"A Beginner Developer's Guide to APIs (with Example Project)"}}]}},"context":{"locale":"en"}};(function(){var s;(s=document.currentScript||document.scripts[document.scripts.length-1]).parentNode.removeChild(s);}());</script><script src="/assets/js/app.1420e6f5.js" defer></script><script src="/assets/js/page--src--templates--markdown-page-vue.f5d097cb.js" defer></script> </body> </html>