├── .env.example ├── .eslintrc.js ├── .github ├── ISSUE_TEMPLATE │ └── content-request.md └── workflows │ └── deploy-now.yaml ├── .gitignore ├── .graphqlconfig ├── .nvmrc ├── .vscode └── settings.json ├── LICENCE.md ├── README.md ├── cli ├── cli.js ├── index.js ├── lib.js ├── prompts.js └── templates │ ├── blog.md │ └── docs.md ├── content ├── blog │ ├── api-guide.md │ ├── best-react-ssg.md │ ├── darkmode.md │ ├── deploy-jekyll-via-github.md │ ├── deploy-laravel-via-github.md │ ├── deploy-now-and-github-actions.md │ ├── git-intro.md │ ├── github-actions-lighthouse.md │ ├── github-actions-version-update.md │ ├── github-actions.md │ ├── github-for-agencies.md │ ├── host-github-blog.md │ ├── jamstack-for-agencies-whitepaper_DE.md │ ├── jamstack-for-agencies-whitepaper_UK_US.md │ ├── laravel-vs-symfony.md │ ├── multi-deployments.md │ ├── php-release.md │ ├── podcast_DE.md │ ├── portfolio_sites_DE.md │ ├── product-hunt.md │ ├── pull-request-permissions.md │ ├── react-blog.md │ ├── reasons-for-staging.md │ ├── shop-experience-with-vue.md │ ├── staging-explained.md │ ├── webinar_DE.md │ └── workflow-dispatch.md ├── docs │ ├── apache-configuration-htaccess.md │ ├── configuration-overview.md │ ├── create-sample.md │ ├── cronjobs.md │ ├── database.md │ ├── deploy-php-apps.md │ ├── deploy-static-sites.md │ ├── deployment-configuration.md │ ├── deployment-viewer.md │ ├── domain-tls.md │ ├── faq.md │ ├── framework-samples.md │ ├── from-cmd-line.md │ ├── from-repo.md │ ├── git-integration.md │ ├── github-actions-customization.md │ ├── index.md │ ├── multi-deployments.md │ ├── php-alpha.md │ ├── runtime-configuration.md │ ├── staging-deployments.md │ ├── use-cases.md │ └── visitor-statistics.md └── team │ ├── alexander-gaengel.md │ ├── fatih-ok.md │ ├── josua-meier.md │ ├── marcel-solle.md │ ├── markus-hunsalz.md │ ├── robin-mueller.md │ └── roman-okon.md ├── gridsome.config.js ├── gridsome.server.js ├── package-lock.json ├── package.json ├── schema.graphql ├── src ├── assets │ ├── blog │ │ ├── DPNW_GH_coverimage@2x.png │ │ ├── DPNW_dev.to— Staging@2x.png │ │ ├── DPNW_dev.to—jekyll@2x.png │ │ ├── agency-cover.png │ │ ├── api-cover.png │ │ ├── deploy-now-darkmode.png │ │ ├── deploy-now-php-launch.png │ │ ├── dpnw-react-ssg.jpg │ │ ├── git-intro-cover.png │ │ ├── github-blog.png │ │ ├── githubactions-cover.png │ │ ├── githubactions-lighthouse.png │ │ ├── laravel-header2x.png │ │ ├── laravel-vs-symfony.png │ │ ├── multi-deployments-cover.png │ │ ├── screenshot-lighthouse-1.png │ │ └── screenshot-lighthouse-2.png │ └── styles │ │ └── app.scss ├── components │ ├── Banner.vue │ ├── BlogTeaser.vue │ ├── DeployNow.vue │ ├── Dots.vue │ ├── EditLink.vue │ ├── JobSearchLink.vue │ ├── LayoutFooter.vue │ ├── LayoutHeader.vue │ ├── NextPrevLinks.vue │ ├── OnThisPage.vue │ ├── Search.vue │ ├── Sidebar.vue │ ├── TeamMember.vue │ ├── ToggleDarkMode.vue │ ├── content │ │ ├── Blog.vue │ │ └── Documentation.vue │ └── home │ │ ├── Features.vue │ │ ├── Hero.vue │ │ ├── Samples.vue │ │ ├── Team.vue │ │ └── Workflow.vue ├── layouts │ └── Default.vue ├── libs │ ├── seo.js │ └── util.js ├── locales │ └── en.json ├── main.js ├── pages │ ├── 404.vue │ ├── AboutUs.vue │ ├── Blog.vue │ └── Index.vue ├── store.js ├── templates │ └── MarkdownPage.vue └── transformers │ └── table-transformer.js ├── static ├── 02_From_sample_build_flat.gif ├── 02_From_sample_detection_flat.gif ├── 03_From_existing_respository_flat.gif ├── 04_PHP_apps_via_GitHub.gif ├── 08_Deployment_viewer.gif ├── 09_View_files_and_logs_flat.gif ├── 10_Visitor_statistics_flat.gif ├── MultiDeployments.gif ├── add-prod-deployment.png ├── assets │ └── js │ │ └── service-worker.js ├── background-bright-mode.svg ├── chucknorris.png ├── confirm-configuration.jpg ├── console-1.png ├── console-2.png ├── deploy-now-php-launch.png ├── deploy-now-supported-frameworks.svg ├── domain-select.png ├── favicon.ico ├── favicon.png ├── fruchtec-architecture-lg.png ├── fruchtec-architecture-sm.png ├── git-workflow.jpeg ├── github-connected.png ├── github-workflow.png ├── githubactions-cover.png ├── how-apis-work.jpeg ├── how-http-works-browser.jpeg ├── http-request-api.jpeg ├── http-request.jpeg ├── jamstack-architecture.svg ├── jekyll-buildsteps.png ├── jokeresult.png ├── logo.svg ├── logos │ ├── angular.svg │ ├── hexo.svg │ ├── jekyll.svg │ ├── laravel.svg │ ├── next.svg │ ├── nuxt.svg │ ├── react.svg │ ├── symfony.svg │ └── vue.svg ├── nextjs-app-install.png ├── phpmenu3.gif ├── project-details.jpg ├── screenshot-lighthouse-1.png ├── screenshot-lighthouse-2.png ├── service-worker.js ├── source-selection.jpg ├── staging.jpg ├── static-site-generator.svg ├── team │ ├── alexander.svg │ ├── eric.svg │ ├── fatih.svg │ ├── josua.svg │ ├── marcel.svg │ ├── markus.svg │ ├── octocat.svg │ ├── robert.svg │ ├── robin.svg │ └── roman.svg ├── whitepaper.png ├── wizard-angular.png ├── wizard-astro.png ├── wizard-css-framework1.png ├── wizard-css-framework2.png ├── wizard-deploy-from-own-repo.png ├── wizard-docusaurus.png ├── wizard-ember.png ├── wizard-gatsby.png ├── wizard-gridsome.png ├── wizard-hexo.png ├── wizard-hugo.png ├── wizard-ionic-react.png ├── wizard-jekyll.png ├── wizard-jigsaw1.png ├── wizard-jigsaw2.png ├── wizard-nextjs.png ├── wizard-nuxtjs.png ├── wizard-php.png ├── wizard-plain-html.png ├── wizard-react.png ├── wizard-svelte.png └── wizard-vue.png └── windi.config.ts /.env.example: -------------------------------------------------------------------------------- 1 | GRIDSOME_BASE_PATH= 2 | SITE_URL= 3 | PATH_PREFIX= 4 | URL_WEB=https://ionos.space?utm_source=deploy-now-docs&utm_medium=navigation&utm_campaign=deploy-now-button 5 | URL_TWITTER= 6 | URL_GITHUB=https://github.com/ionos-deploy-now/documentation 7 | SHOW_BLOG=true 8 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es2021: true, 4 | node: true 5 | }, 6 | plugins: ['gridsome'], 7 | extends: [ 8 | 'eslint:recommended', 9 | 'plugin:vue/essential', 10 | 'plugin:gridsome/recommended', 11 | ], 12 | parserOptions: { 13 | ecmaVersion: 2021, 14 | sourceType: 'module', 15 | }, 16 | rules: { 17 | 'object-curly-spacing': ['error', 'always'], 18 | 'comma-dangle': ['error', 'always-multiline'], 19 | 'vue/multi-word-component-names': 'off', 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/content-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Content request 3 | about: What's missing? 4 | title: 'Describe how to ' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **A bullet list of topics of interest** 11 | - [] cover all about ... 12 | -------------------------------------------------------------------------------- /.github/workflows/deploy-now.yaml: -------------------------------------------------------------------------------- 1 | # To better understand this file read this: 2 | # https://docs.ionos.space/docs/github-actions-customization/ 3 | 4 | name: Deploy Now 5 | 6 | on: 7 | - push 8 | - workflow_dispatch 9 | 10 | jobs: 11 | deploy-now: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Fetch project data 15 | uses: ionos-deploy-now/retrieve-project-info-action@v1 16 | id: project 17 | with: 18 | api-key: ${{ secrets.IONOS_API_KEY }} 19 | project: ${{ secrets.IONOS_PROJECT_ID }} 20 | service-host: api-eu.ionos.space 21 | 22 | - name: checkout 23 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 24 | uses: actions/checkout@v4 25 | with: 26 | submodules: 'recursive' 27 | 28 | - name: Setup Node 29 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 30 | uses: actions/setup-node@v4 31 | with: 32 | node-version: v14.x 33 | 34 | - name: Build Node assets 35 | env: 36 | CI: true 37 | SHOW_BLOG: true 38 | SITE_URL: ${{ steps.project.outputs.site-url }} 39 | URL_GITHUB: https://github.com/ionos-deploy-now/documentation/ 40 | URL_WEB: https://ionos.space 41 | run: | 42 | npm ci 43 | npm run build 44 | - name: Deploy to IONOS 45 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 46 | uses: ionos-deploy-now/deploy-to-ionos-action@v1 47 | with: 48 | project: ${{ secrets.IONOS_PROJECT_ID }} 49 | branch-id: ${{ steps.project.outputs.branch-id }} 50 | service-host: api-eu.ionos.space 51 | api-key: ${{ secrets.IONOS_API_KEY }} 52 | dist-folder: dist 53 | runtime-placeholder-files: ${{ steps.template.outputs.runtime-placeholder-files }} 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .cache 3 | .DS_Store 4 | .env 5 | .env.* 6 | !.env.example 7 | .cli 8 | .idea 9 | dist 10 | node_modules 11 | src/.temp 12 | .htaccess -------------------------------------------------------------------------------- /.graphqlconfig: -------------------------------------------------------------------------------- 1 | { 2 | "name": "IONOS Deploy Now Documentation GraphQL Schema", 3 | "schemaPath": "schema.graphql", 4 | "extensions": { 5 | "endpoints": { 6 | "Default GraphQL Endpoint": { 7 | "url": "http://localhost:8080/___graphql", 8 | "headers": { 9 | "user-agent": "JS GraphQL" 10 | }, 11 | "introspect": true 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v12.22.1 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "spellright.language": [ 3 | "en" 4 | ], 5 | "spellright.documentTypes": [ 6 | "markdown", 7 | "latex", 8 | "plaintext" 9 | ] 10 | } -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Marco Reimann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deploy Now - Documentation 2 | 3 | This is the [official documentation](https://docs.ionos.space/) of IONOS Deploy Now, the hosting platform for instant deployments of static sites and PHP Apps via GitHub. The documentation uses [Gridsome](https://gridsome.org) with NodeJS v12.22 and is running on IONOS Deploy Now. 4 | 5 | ## Contribute 6 | 7 | Found a bug or typo or missing important content? Feel free to open a pull request. We will review it quickly. Are you missing something bigger? Feel free to open a [GitHub Issue](https://github.com/ionos-deploy-now/ionos-deploy-now/issues). 8 | 9 | ## Fork & deploy 10 | 11 | ### Setup 12 | 13 | Install dependencies and edit the new `.env` file. 14 | 15 | ```bash 16 | npm ci 17 | cp .env.example .env 18 | ``` 19 | 20 | ### Develop 21 | 22 | Run local server. 23 | 24 | ```bash 25 | npm run develop 26 | ``` 27 | 28 | ### Content 29 | 30 | All content resides in the `content` directory, where the next directory name decides the `contentType`. 31 | Pages can be created manually or generated with the cli. 32 | 33 | ```bash 34 | npm run cli 35 | ``` 36 | 37 | ### Build 38 | 39 | Create static build in `dist` folder. 40 | 41 | ```bash 42 | npm run build 43 | ``` 44 | -------------------------------------------------------------------------------- /cli/cli.js: -------------------------------------------------------------------------------- 1 | const slugify = require('slugify'); 2 | const { buildTemplate, contentSlugs } = require('./lib'); 3 | const { 4 | mainPrompt, 5 | titlePrompt, 6 | slugPrompt, 7 | descriptionPrompt, 8 | authorPrompt, 9 | tagsPrompt, 10 | editablePrompt, 11 | adjacentLinkPrompt, 12 | } = require('./prompts'); 13 | 14 | 15 | async function main() { 16 | const action = await mainPrompt(); 17 | switch (action) { 18 | case 'createBlog': 19 | return await createBlog(); 20 | case 'createDocumentation': 21 | return await createDocumentation(); 22 | default: 23 | console.log('Missing action', action); 24 | } 25 | } 26 | 27 | async function createBlog() { 28 | let slug; 29 | const slugs = contentSlugs('blog'); 30 | const title = await titlePrompt((title) => { 31 | slug = slugify(title, { lower: true }); 32 | return slugs.includes(slug) ? `File with slug "${slug}" already exists` : true; 33 | }); 34 | slug = await slugPrompt(slug); 35 | const description = await descriptionPrompt(); 36 | const author = await authorPrompt(); 37 | const tags = await tagsPrompt(); 38 | const tagList = tags.map((tag) => `\n - ${tag}`).join(''); 39 | buildTemplate('blog', { 40 | slug, 41 | title, 42 | description, 43 | author, 44 | tags: tagList, 45 | created: new Date().toISOString(), 46 | }); 47 | } 48 | 49 | async function createDocumentation() { 50 | let slug; 51 | const slugs = contentSlugs('docs'); 52 | const title = await titlePrompt((title) => { 53 | slug = slugify(title, { lower: true }); 54 | return slugs.includes(slug) ? `File with slug "${slug}" already exists` : true; 55 | }); 56 | slug = await slugPrompt(slug); 57 | const description = await descriptionPrompt(); 58 | const editable = await editablePrompt(); 59 | const prev = await adjacentLinkPrompt('Select previous link'); 60 | const next = await adjacentLinkPrompt('Select next link'); 61 | const context = { 62 | slug, 63 | title, 64 | description, 65 | editable, 66 | }; 67 | if (prev !== 'None') { 68 | context.prev = prev; 69 | } 70 | if (next !== 'None') { 71 | context.next = next; 72 | } 73 | buildTemplate('docs', context); 74 | } 75 | 76 | module.exports = { 77 | main, 78 | }; 79 | -------------------------------------------------------------------------------- /cli/index.js: -------------------------------------------------------------------------------- 1 | const { main } = require('./cli'); 2 | 3 | // Use env file for defaults? 4 | // Parse optional command line arguments? 5 | 6 | main().then(() => { 7 | console.log('Bye :)'); 8 | }).catch(() => { 9 | console.log('Bye...'); 10 | }); 11 | -------------------------------------------------------------------------------- /cli/lib.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | const contentTitleRegex = /^#\s?(.*)$/m; 5 | const envFilepath = path.join(__dirname, '..', '.cli'); 6 | 7 | function checkEnv() { 8 | if (!fs.existsSync(envFilepath)) { 9 | fs.writeFileSync(envFilepath, 'AUTHOR='); 10 | } 11 | } 12 | 13 | function writeEnv(key, value) { 14 | checkEnv(); 15 | const data = fs.readFileSync(envFilepath, { encoding: 'utf8' }); 16 | console.log(data); 17 | } 18 | 19 | function contentPath(type, slug) { 20 | if (slug) { 21 | return path.join(__dirname, '..', 'content', type, `${slug}.md`); 22 | } 23 | return path.join(__dirname, '..', 'content', type); 24 | } 25 | 26 | function contentSlugs(type) { 27 | return fs.readdirSync(contentPath(type)) 28 | .filter((file) => file.endsWith('.md')) 29 | .map((file) => file.slice(0, -3)); 30 | } 31 | 32 | function slugExists(type, slug) { 33 | return contentSlugs(type).some((s) => s === slug); 34 | } 35 | 36 | function actionsToChoices(actions) { 37 | return Object.keys(actions).map((key) => ({ 38 | name: key, 39 | message: actions[key], 40 | value: key, 41 | })); 42 | } 43 | 44 | function documentationLinkChoices() { 45 | return contentSlugs('docs').map((doc) => { 46 | const content = fs.readFileSync(contentPath('docs', doc), { encoding: 'utf8' }); 47 | const matches = content.match(contentTitleRegex); 48 | return { 49 | name: doc, 50 | message: `${doc} > ${matches[1]}`, 51 | value: doc, 52 | }; 53 | }); 54 | } 55 | 56 | function buildTemplate(type, context) { 57 | if (context.slug) { 58 | const filepath = contentPath(type, context.slug); 59 | fs.writeFileSync(filepath, renderTemplate(type, context)); 60 | console.log(`[${type}] Created ${filepath}`); 61 | } 62 | } 63 | 64 | function renderTemplate(type, context) { 65 | const filepath = path.join(__dirname, 'templates', `${type}.md`); 66 | if (!fs.existsSync(filepath)) { 67 | return JSON.stringify(context); 68 | } 69 | const file = fs.readFileSync(filepath, { encoding: 'utf8' }); 70 | return Object.entries(context) 71 | .reduce((parsed, [key, value]) => parsed.replace(`$${key}`, `${value}`), file); 72 | } 73 | 74 | module.exports = { 75 | contentPath, 76 | contentSlugs, 77 | slugExists, 78 | actionsToChoices, 79 | documentationLinkChoices, 80 | buildTemplate, 81 | }; 82 | -------------------------------------------------------------------------------- /cli/prompts.js: -------------------------------------------------------------------------------- 1 | const { Select, Input, List, Toggle } = require('enquirer'); 2 | const { actionsToChoices, contentSlugs, documentationLinkChoices } = require('./lib'); 3 | 4 | 5 | const mainActions = { 6 | createBlog: 'Create blog', 7 | createDocumentation: 'Create documentation', 8 | }; 9 | 10 | async function mainPrompt() { 11 | const prompt = new Select({ 12 | name: 'main', 13 | message: 'Choose action', 14 | choices: actionsToChoices(mainActions), 15 | }); 16 | return await prompt.run(); 17 | } 18 | 19 | async function titlePrompt(validate) { 20 | const prompt = new Input({ 21 | name: 'title', 22 | message: 'Enter title', 23 | validate, 24 | }); 25 | return await prompt.run(); 26 | } 27 | 28 | async function slugPrompt(slug) { 29 | const prompt = new Input({ 30 | name: 'slug', 31 | message: 'Enter slug', 32 | initial: slug, 33 | }); 34 | return await prompt.run(); 35 | } 36 | 37 | async function descriptionPrompt() { 38 | const prompt = new Input({ 39 | name: 'title', 40 | message: 'Enter description', 41 | }); 42 | return await prompt.run(); 43 | } 44 | 45 | async function tagsPrompt() { 46 | const prompt = new List({ 47 | name: 'tags', 48 | message: 'Enter comma-separated list of tags', 49 | }); 50 | return await prompt.run(); 51 | } 52 | 53 | async function authorPrompt() { 54 | const authors = contentSlugs('team'); 55 | const author = process.env.CLI_AUTHOR; 56 | const prompt = new Select({ 57 | name: 'author', 58 | message: 'Which author?', 59 | choices: authors, 60 | ...(author ? { initial: author } : []), 61 | }); 62 | return await prompt.run(); 63 | } 64 | 65 | async function editablePrompt() { 66 | const prompt = new Toggle({ 67 | message: 'Is this page editable on github?', 68 | enabled: 'Yes', 69 | disabled: 'No', 70 | initial: true, 71 | }); 72 | return await prompt.run(); 73 | } 74 | 75 | async function adjacentLinkPrompt(message = 'Choose link') { 76 | const prompt = new Select({ 77 | message, 78 | choices: [{ name: 'None' }, ...documentationLinkChoices()], 79 | }); 80 | return await prompt.run(); 81 | } 82 | 83 | module.exports = { 84 | mainPrompt, 85 | titlePrompt, 86 | slugPrompt, 87 | descriptionPrompt, 88 | authorPrompt, 89 | tagsPrompt, 90 | editablePrompt, 91 | adjacentLinkPrompt, 92 | }; 93 | -------------------------------------------------------------------------------- /cli/templates/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '$description' 3 | created: '$created' 4 | author: '$author' 5 | tags: $tags 6 | --- 7 | 8 | # $title 9 | -------------------------------------------------------------------------------- /cli/templates/docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '$description' 3 | sidebar: 'docs' 4 | prev: '$prev' 5 | next: '$next' 6 | editable: $editable 7 | --- 8 | 9 | # $title 10 | -------------------------------------------------------------------------------- /content/blog/darkmode.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: "We're excited to announce that Deploy Now now has a new dark mode feature! With dark mode, you can now switch the interface from light to dark mode, making it easier on your eyes and reducing eye strain when working in low-light conditions." 3 | created: '2023-02-28' 4 | author: 'robert' 5 | header: '@assets/blog/deploy-now-darkmode.png' 6 | teaser: '@assets/blog/deploy-now-darkmode.png' 7 | tags: 8 | - update 9 | - release 10 | - ux 11 | --- 12 | 13 | # Feature Release: Dark Mode 14 | 15 | We're excited to announce that Deploy Now now has a new dark mode feature! With dark mode, you can now switch the interface from light to dark mode, making it easier on your eyes and reducing eye strain when working in low-light conditions. 16 | 17 | To activate dark mode, simply click on the moon in the navigation bar. 18 | 19 | With this feature, you can now work comfortably and more efficiently, no matter the time of day or lighting conditions. We hope this new feature makes your Deploy Now experience even better! 20 | 21 | 22 | -------------------------------------------------------------------------------- /content/blog/deploy-jekyll-via-github.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Learn how to build and deploy static websites with Jekyll instantly via GitHub to highly available hosting. Jekyll transforms plain text into static websites and blogs. Written in Ruby, Jekyll is a pioneer among static site generators.' 3 | created: '2022-07-01' 4 | author: 'robert-schleinhege' 5 | header: '@assets/blog/DPNW_dev.to—jekyll@2x.png' 6 | teaser: '@assets/blog/DPNW_dev.to—jekyll@2x.png' 7 | tags: 8 | - tutorial 9 | - jekyll 10 | - github 11 | --- 12 | 13 | # Tutorial: Fastest ever Jekyll deployments via GitHub 14 | 15 | [Jekyll](https://jekyllrb.com/) transforms plain text into static websites and blogs. Written in Ruby, Jekyll is a pioneer among static site generators. And a terrific one, too. For starters, you get to focus on your content and your content alone. No need to bother with databases, comment moderation and updates. What you put in – whether it’s CSS, HTML or Markdown – comes out as a ready-to-deploy static site in no time. And being fully-blog aware, Jekyll is the perfect companion to quickly launch or import blogs without programming knowledge. 16 | 17 | What’s not so great about deploying your content is having to worry about hosting. Oh, and having to repeat the same mundane deployment steps over and over again with every merge and change. The good news is that Deploy Now does all that for you and more. Deploy Now is a build tool created by developers for developers, bringing together modern Git workflows and IONOS infrastructure. It’s simple enough for pure content writers but also suitable for professional web app development. 18 | 19 | Ready for your fastest Jekyll deployment ever? Let’s go. 20 | 21 | ## What you need to get started 22 | 23 | - A static Jekyll site in a GitHub repository. If you just want to see how everything works first, you can simply clone [our starter](https://github.com/ionos-deploy-now/hello-jekyll). 24 | - A [Deploy Now account](https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=blog&utm_campaign=jekyll#pricing) 25 | 26 | ## Deploy Now and GitHub Actions – a match made in heaven 27 | 28 | GitHub Actions automates, customises, and executes software development workflows right in the repository, making it the perfect link between the worlds of hosting and web development. 29 | 30 | GitHub Actions automatically perform tasks based on various triggers, like you making changes to the actual content in whatever form it’s in. These Actions exist as editable yaml files that can be customised to your heart's content with the help of thousands of Actions available on the GitHub Actions marketplace. 31 | 32 | Deploy Now can launch projects in seconds because the setup assistant automatically scans the selected repository and produces out-of-the box Actions for your project. 33 | 34 | To be specific, Deploy Now scans your repo and presents you with a prefilled workflow – a file placed directly in the repository. With a final push of a button, Deploy Now publishes your site on IONOS infrastructure. You’ill receive a preview URL which you can replace with a custom domain. 35 | 36 | ## The 4 steps to a next-level publishing experience 37 | 38 | 1. Sign up for Deploy Now and link it with your GitHub account. Deploy Now will need access to the GitHub repository that you want to deploy from. 39 | 40 | 2. Select the repository with that Jekyll site you want to publish. 41 | 42 | 3. Review the suggested build steps. For Jekyll, Deploy Now will preselect the Ruby programming language alongside build commands and a publishing directory. 43 | ![Jekyll build steps](/jekyll-buildsteps.png) 44 | :::tip 45 | Jekyll projects require a bundler build step. Bundler manages packages (gems) in Ruby – the programming language of Jekyll - and ensures they are available in the correct version for your project. 46 | These dependencies are defined in a gemfile containing all the gems required for a website or application. Bundler then takes this list, installs the respective packages, and makes them available to your project. 47 | ::: 48 | If Deploy Now has successfully detected Jekyll, it will add the two commands shown in the screenshot to your build workflow. `bundle install` installs the defined dependencies from the Gemfile whereas `bundle exec jekyll build` generates the HTML and CSS files of your website and copies the result to the *_site folder*. 49 | 50 | 4. Finally, check any settings you have made and click on **create project**. You’ll be redirected to the project detail page while your site is being built and deployed in the background. 51 | 52 | There you have it! Your site is now live on green, DDoS-protected web servers, located in IONOS data centres in Europe and North America. Enjoy adding your own [custom domain](https://docs.ionos.space/docs/domain-tls/), monitoring the [page traffic](https://docs.ionos.space/docs/visitor-statistics/) or creating additional [staging environments](https://docs.ionos.space/docs/staging-deployments/). 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /content/blog/deploy-now-and-github-actions.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now uses a combination of GitHub Actions and GitHub Apps to build, stage and deploy static sites, single-page applications and PHP apps.' 3 | created: '2022-07-26' 4 | author: 'robert-schleinhege' 5 | header: '@assets/blog/DPNW_GH_coverimage@2x.png' 6 | teaser: '@assets/blog/DPNW_GH_coverimage@2x.png' 7 | tags: 8 | - github 9 | - actions 10 | --- 11 | 12 | # How to make Git deployments with IONOS quick and easy 13 | 14 | *Deploy Now uses a combination of GitHub Actions and GitHub Apps to build, stage and deploy static sites, single-page applications and PHP apps.* 15 | 16 | Do you enjoy endlessly repeating mundane deployment tasks for software testing, only to repeat them some more for production? No? Then read on. 17 | 18 | Deploy Now is a build tool created by developers for developers, bringing together modern Git workflows and IONOS infrastructure. Combined with the power of [GitHub Actions](https://github.com/features/actions), you can now implement projects faster than ever — and save yourself the trouble of integrating and automating workflows yourself (or sifting through Stack Overflow tutorials). 19 | 20 | GitHub Actions automates, customises, and executes software build and deployment workflows right in the repository, making it the perfect link between the worlds of hosting and development. 21 | 22 | Deploy Now’s setup assistant makes it possible to launch new projects in seconds, literally. Upfront scans of GitHub repositories collect data to intelligently produce out-of-the box configurations with tons of pre-filled data. And with recently added support for full LAMP stacks, Deploy Now is the perfect companion for real full stack web development. 23 | 24 | ## How to get started 25 | 26 | First, sign up for Deploy Now and link it with your GitHub account. For things to work smoothly the tool needs access to the GitHub repositories that you want to deploy from. The [IONOS Deploy Now GitHub App](https://github.com/marketplace/ionos-deploy-now) will manage all interactions between your repository and IONOS. Now you’re ready to deploy your first project. 27 | 28 | Deploy Now automatically scans your chosen repository for existing frameworks and suggests a prefilled build pipeline within the user interface. Deploy Now supports static site generators (SSG), single-page applications (SPA) and PHP frameworks. 29 | 30 | The final confirmation will generate a GitHub Actions workflow that triggers your first automatic deployment to IONOS. If something is still missing you can easily make adjustments directly in GitHub. IONOS recommends you adjust your workflow directly in Git and make use of the rich ecosystem of the [GitHub marketplace](https://github.com/marketplace). You can for example run automated Lighthouse tests before each deployment or send a Slack notification to your team, everytime a new deployment goes live. 31 | 32 | All you need to do is push your changes, then it’s time to lean back while your assets are built and deployed to the IONOS platform. And that’s it. 33 | 34 | ![PHP Projects in Deploy Now](/04_PHP_apps_via_GitHub.gif) 35 | 36 | View a detailed description of how Deploy Now defines GitHub Actions workflows for your projects [here](https://docs.ionos.space/docs/github-actions-customization/). Deploy Now offers automatic workflow setups for many static frameworks as well as Laravel and Symfony. 37 | 38 | What about staging new features, you ask? By default, Deploy Now takes care of new branches and creates a new staging deployment for each branch. Every deployment gets a preview URL and uses TLS to encrypt the transfer of data. 39 | 40 | Got ideas for how to improve our GitHub integration? Feel free to drop them via our [GitHub issues](https://github.com/ionos-deploy-now/ionos-deploy-now/issues). 41 | 42 | 43 | -------------------------------------------------------------------------------- /content/blog/github-actions-version-update.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Some actions in your workflow files might be outdated. Follow this quick guide and update your workflow files to ensure better performance, security and compatibility with the latest GitHub features.' 3 | created: '2024-06-26' 4 | author: 'marcel-solle' 5 | tags: 6 | - update 7 | - github 8 | - action 9 | - workflow 10 | --- 11 | 12 | # Upgrade your GitHub actions 13 | 14 | Some actions in your workflow files might be outdated. 15 | This update involves upgrading the versions of two actions: `checkout` and `node-setup` to version 4 (`v4`). 16 | These enhancements ensure better performance, security and compatibility with the latest GitHub features. 17 | 18 | ## How to update your workflows 19 | 20 | To benefit from these updates, you’ll need to modify your workflow files. Here’s a quick guide: 21 | 22 | ### Step 1: Locate your workflow files 23 | 24 | Navigate to the `.github/workflows/` directory in your repository. 25 | 26 | ### Step 2: Update action versions 27 | 28 | Edit your workflow files to update the respective actions to `v4`: 29 | 30 | ```yaml 31 | - name: Checkout repository 32 | uses: actions/checkout@v4 33 | ``` 34 | 35 | ```yaml 36 | - name: Setup Node.js 37 | uses: actions/setup-node@v4 38 | ``` 39 | 40 | ### Step 3: Commit and Monitor 41 | 42 | After updating, commit the changes and monitor your workflows to ensure they run smoothly with the new action versions. 43 | 44 | 45 | -------------------------------------------------------------------------------- /content/blog/github-actions.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: "GitHub Actions allows you to create, manage, and run tasks directly on GitHub. This can be anything from compiling code to deploying a web application. In this article, we will give a quick introduction to GitHub Actions and show you how to get started!" 3 | created: '2022-12-01' 4 | author: 'katy-kozee' 5 | header: '@assets/blog/githubactions-cover.png' 6 | teaser: '@assets/blog/githubactions-cover.png' 7 | tags: 8 | - githubactions 9 | - introduction 10 | --- 11 | 12 | # GitHub Actions: An Introduction 13 | 14 | GitHub Actions allows you to create, manage, and run tasks directly on GitHub. This can be anything from compiling code to deploying a web application. In this article, we will give a quick introduction to GitHub Actions and show you how to get started! 15 | 16 | ## What are GitHub Actions? 17 | 18 | Introduced in 2018, GitHub Actions allow you to automate developer workflows. You can use GitHub Actions to create custom software development life cycle workflows directly in your GitHub Repository. 19 | 20 | These actions automatically execute when a specified event occurs, such as when a pull request is opened. You can use pre-made GitHub Actions or create your own actions. 21 | 22 | GitHub Actions can manage and operate workflows through Linux, Windows, and macOS operating systems. GitHub actions also support a variety of coding languages, such as C, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby, Scala, and TypeScript. 23 | 24 | ## Some of the Benefits of GitHub Actions 25 | 26 | - GitHub Actions provide several benefits for your software development life cycle: 27 | - Automate multi-step tasks that are tedious, complex, or prone to errors 28 | - Create custom workflows directly in your GitHub Repository 29 | - Fully integrated into GitHub 30 | - Discover, create and share actions to perform any job you like 31 | - Combine multiple actions into a customized workflow 32 | - Build, test, and publish across multiple operating systems, platforms, and languages within the same workflow 33 | 34 | ## How Can You Use GitHub Actions? 35 | 36 | GitHub actions can be used for any process that you want to automate. For example, you can use a GitHub action to: 37 | 38 | - Run an automated task when an issue is opened 39 | - Create automated review reminders when a pull request is opened 40 | - Send out a welcome message when a new contributor joins your project 41 | 42 | ## Using GitHub Actions as a Continuous Integration/Continuous Delivery (CI/CD) Platform 43 | 44 | One of the most common uses for GitHub Actions is defining a **Continuous Integration/Continuous Delivery (CI/CD)** platform where you can build and test pull requests from a GitHub repository and deploy merged pull requests to production. 45 | 46 | **Continuous Integration is the process of automating the build and testing of software.** This helps to ensure that code is always working and reduces the chances of introducing errors into the codebase. Continuous integration typically involves running automated tests on every change to the codebase and notifying developers if any of the tests fail. 47 | 48 | **Continuous Delivery keeps the code that has been verified by CI testing ready to be deployed.** New code is automatically and constantly integrated, delivered, and deployed throughout an app's development stages. 49 | 50 | Since the automated CI/CD approach is used from the initial app integration, through testing, and then through delivery and deployment, the process is commonly referred to as the CI/CD pipeline. 51 | 52 | ## How GitHub Actions Work 53 | ### Event Driven 54 | GitHub Actions are triggered by a specified event. An event is any action within your GitHub repository. Opening a pull request, creating a new branch, and commenting are all examples of an event. When a defined event is executed, it triggers the beginning of a workflow. 55 | 56 | ### Workflows 57 | A workflow is an automated process composed of a series of jobs. You define a workflow with a YAML file in your depository. Workflows run automatically when triggered by an event in your repository. You can also trigger a workflow manually or on a defined schedule. 58 | 59 | ### Jobs 60 | Jobs are a list of commands (or actions) triggered by a particular workflow. Each command triggered within a job is called an Action. A workflow can have multiple actions working at the same time. 61 | You can create your own actions or use pre-built actions from the GitHub marketplace. 62 | 63 | ## Getting Started with GitHub Actions 64 | You can access GitHub actions from your GitHub repository by clicking Actions in the toolbar. You can then create a new Workflow. GitHub offers preconfigured starter plans that you can customize or you can also create your own YAML file with GitHub Actions commands. 65 | 66 | You can view Workflow results by clicking on the Workflow name on the GitHub Actions Page. 67 | 68 | ## Using Deploy Now with GitHub Actions 69 | Ionos’ [Deploy Now](https://docs.ionos.space/) uses GitHub actions to automate the tasks associated with deploying your static site, single page app, or PHP project to the server each time you execute a Git Push. 70 | 71 | Deploy Now analyzes your project and automatically creates a YAML file containing the necessary actions to deploy your project to IONOS reliable shared hosting infrastructure in Europe and North America. This file can be used as is or you can easily modify this file to contain your own actions. 72 | 73 | Get started today by learning [more about Deploy Now](https://docs.ionos.space/docs/faq/) or [creating a sample project](https://docs.ionos.space/docs/framework-samples/). 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /content/blog/jamstack-for-agencies-whitepaper_DE.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Are you still using a monolithic web architecture for your client projects? Learn how moving to the Jamstack can save you time and trouble and increase your project success.' 3 | created: '2021-08-15' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - guide 7 | - jamstack 8 | hidden: true 9 | 10 | --- 11 | 12 | # Whitepaper: Erstellen Sie Kundenwebsites mit Jamstack 13 | 14 | Verwenden Sie immer noch eine monolithische Web-Architektur für Ihre Kundenprojekte? 15 | Erfahren Sie, wie Sie durch den Wechsel zu Jamstack Zeit und Ärger sparen und Ihren Projekterfolg steigern können. 16 | 17 | 18 | whitepaper cover 20 | 21 | ## Das finden Sie im Whitepaper 22 | 23 | ### Häufige Probleme bei der Arbeit mit konventionellen Web-Architekturen und CMS 24 | Die meisten herkömmlichen CMS-basierten Websites verwenden den LAMP-Stack, ein Akronym für Linux als Betriebssystem, Apache als Webserver-Technologie, MySQL für Datenbanken und PHP als Programmiersprache. 25 | Der zentrale Engpass dieser Architektur ist die Datenbank, in der Inhalte wie Bilder und Texte gespeichert werden. 26 | Jedes Mal, wenn eine Benutzeranfrage an den Webserver gesendet wird, werden viele Datenbankabfragen und Ergebnisse durch ein mehrschichtiges System geleitet - bevor der Benutzer eine erste Antwort erhält. 27 | Dies führt zu langen Ladezeiten, hohem Ressourcenverbrauch und begrenzter Skalierbarkeit. 28 | Während das Rennen um gute Rankings immer härter wird, können diese Nachteile Sie hinter die Konkurrenz zurückwerfen. 29 | Hinzu kommt, dass CMS und ihre Plugins regelmäßig aktualisiert werden müssen, um Sicherheitslücken zu vermeiden, was zu einer nicht endenden Wartung der Kundenprojekte führt. 30 | 31 | 32 | ### Eine bessere Architektur mit Pre-rendering und Decoupling 33 | Die beiden Schlüsselprinzipien von Jamstack sind Pre-rendering und Entkopplung. 34 | Pre-rendering bedeutet, dass die Verarbeitungszeit von der Anforderungszeit des Benutzers auf die Erstellungszeit des Editors verlagert wird. 35 | Jedes Mal, wenn sich Inhalt oder Code ändern, werden die statischen Website-Dateien neu gerendert. So steht immer eine aktuelle Version der Website zur Auslieferung bereit. 36 | Entkopplung bezieht sich auf den Ansatz der Integration dynamischer Funktionalitäten durch die Verbindung zu APIs von clientseitigem JavaScript. 37 | Dies ermöglicht die Auslagerung von Aufgaben an spezialisierte (Dritt-)Microservices. 38 | 39 | 40 | ### Die wichtigsten Vorteile von Jamstack für Agenturen 41 | Im Ergebnis können Jamstack-Websites bis zu 10 Mal schneller, sicherer und kostengünstiger skaliert werden. 42 | Sie können Ihrem Kunden einen bedeutenden Wettbewerbsvorteil verschaffen, indem Sie eine schlankere Web-Architektur wählen. 43 | Sie müssen sich nicht mehr um den steigenden Wartungsaufwand und die Skalierungskosten kümmern. 44 | Und als positiver Nebeneffekt arbeitet Jamstack mit den modernsten Web-Frameworks, was Ihre Agentur für junge Talente noch attraktiver macht. 45 | 46 | 47 | #### Richten Sie ein Jamstack-Kundenprojekt in wenigen einfachen Schritten ein 48 | 1. Wählen Sie das richtige Framework aus verschiedenen statischen Website-Generatoren 49 | 2. Falls noch nicht vorhanden, richten Sie ein Git-Tooling für Ihre Entwickler ein 50 | 3. Suchen Sie nach einem Beispiel-Repository eines Drittanbieters, um schneller zu starten 51 | 4. [Verbinden](/docs/) Sie Ihr Repository mit Deploy Now 52 | 5. Entwickeln Sie Ihre Website mit [Staging Deployments](/docs/staging-deployments/) weiter 53 | 6. Übertragen Sie Änderungen in Ihren production branch 54 | 7. [Verbinden Sie Ihre Domain](/docs/domain-tls) und gehen Sie live 55 | 56 | 57 | ## Kostenloser Download 58 | DE version: [Download](https://resources.ionos.com/hubfs/Jamstack/Kundenwebsites%20mit%20dem%20Jamstack%20erstellen.pdf) 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /content/blog/jamstack-for-agencies-whitepaper_UK_US.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Are you still using a monolithic web architecture for your client projects? Learn how moving to the Jamstack can save you time and trouble and increase your project success.' 3 | created: '2021-08-15' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - guide 7 | - jamstack 8 | 9 | --- 10 | 11 | # Whitepaper: Build client websites with Jamstack 12 | 13 | Are you still using a monolithic web architecture for your client projects? Learn how moving to the Jamstack can save you time and trouble and increase your project success. 14 | 15 | whitepaper cover 17 | 18 | ## Included in the whitepaper 19 | 20 | ### Common issues when working with conventional web architectures and CMS 21 | Most of the conventional CMS-based websites use the LAMP-Stack, and acronym for Linux as the operating system, Apache as the webserver technology, MySQL for databases and PHP as the programming language. The key bottleneck of this setup is the database, where content like images and text are stored. Everytime a user request is send to the webserver many database queries and results are passed trough a multi layered system - before the user receives a first response. This causes long load times, high resource consumption and limited scalability. While the race for good rankings is becoming tougher and tougher, these disadvantages can get you behind competition. In addition, CMS and their plugins need to be updated regularly to avoid security vulnarabilites resulting in never ending maintenance of client projects. 22 | 23 | ### To a better architecture with prerendering and decoupling 24 | The two key priciples of the Jamstack are prerendering and decoupling. Prerendering means that processing time is moved from the user's request times to the editor's build time. Every time content or code changes static website files are re-rendered. Thus, an up-to-date version of the website is allways ready for delivery. Decoupling refers to the approach of integrating dynamic functionalities by connecting to APIs from client side JavaScript. This enables to outsource tasks to specialized (third party) microservices. 25 | 26 | ### Key advantages of the Jamstack for agencies 27 | As a result, Jamstack websites can be up to 10 times faster, more secure and cheaper to scale. You can give your client a meaningful competitive advantage by choosing a leaner web architecture. You no longer need to worry about increasing maitenance overhead and scaling bills. And as a side effect, Jamstack works with the most modern web frameworks, which makes your agency more attractive to young talents. 28 | 29 | ### Setup a Jamstack client project in a few easy steps 30 | 1. Choose the right framework from various static site generators 31 | 2. If not allready available, set up a Git tooling for your developers 32 | 3. Look for a third party sample repository to start faster 33 | 4. [Connect your repository](/docs/) to Deploy Now 34 | 5. Develop your site further using [Staging Deployments](/docs/staging-deployments/) 35 | 6. Merge changes to your production branch 36 | 7. [Connect your domain](/docs/domain-tls/) and go live 37 | 38 | ## Free Download 39 | US version: [Download](https://resources.ionos.com/hubfs/Jamstack/Create%20client%20websites%20with%20the%20Jamstack.pdf) 40 | 41 | UK version: [Download]( https://resources.ionos.com/hubfs/Jamstack/UK/Create_client_websites_with_the_Jamstack.pdf) 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /content/blog/multi-deployments.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: "With our newest Multi Deployments feature, you can publish to multiple productive instances with a single Git Push. Read how we worked on this feature together with our customer Cobra CRM" 3 | created: '2023-02-23' 4 | author: 'simon-morgan' 5 | header: '@assets/blog/multi-deployments-cover.png' 6 | teaser: '@assets/blog/multi-deployments-cover.png' 7 | tags: 8 | - news 9 | - release 10 | - deployment 11 | --- 12 | # Effortless Deployments: Linking one Repo to Multiple Runtimes 13 | 14 | Do you build websites and applications for clients? Do you reuse much of your code but maintain nearly identical repositories for each production environment? If yes, then you're not alone. Many developers maintain reusable modules via separate repositories for each customer. 15 | 16 | But what if you want to make changes for all customers at once, like security fixes or new features? Updating all web spaces manually, via SSH and deploying updated files, is a huge pain. 17 | 18 | A manual approach isn't very scalable either, especially when you’re aiming to offer standardised solutions such as portals, e-commerce stores, plugins, and wikis. This is because the task of manually deploying to each production environment becomes too time-consuming as the number of deployment instances increases. 19 | 20 | The great news is, Deploy Now's new feature makes updating mass-customised modules even easier. With just one click, you can now push changes from a single code base to all production environments in a matter of seconds. 21 | 22 | Additionally, the feature provides an easy-to-use interface, giving you full visibility of the status of the deployment process and changes in the file system. 23 | 24 | ## Cobra CRM 25 | 26 | [Cobra CRM](https://www.cobra.de/) provides CRM solutions as a service, and has recently built an events module as an extension to their core offering. 27 | 28 | "Our clients kept asking for a smart solution to organise events, be it fundraising dinners, training workshops, or annual general meetings," says Philipp Kreis, CTO at cobra. "With the new online events portal, we wanted to make it as easy and effective as possible to create, publish, and manage attendance for any type of event." 29 | 30 | To facilitate this, they chose a managed LAMP stack hosting environment capable of connecting to their GitHub repositories, where they store and manage code. They then contacted the team behind Deploy Now, the only provider that offers automated deployments of PHP projects from GitHub to an automatically provisioned web space. 31 | 32 | Philipp collaborated with the Deploy Now engineering team. They co-created a multi-deployment feature to meet cobra's specific needs. The team created a UX and technical concept while keeping Philipp in the feedback loop. Afterward, cobra's team provided QA testing of the release candidate. 33 | 34 | With the help of Deploy Now, cobra successfully launched their events portal. 35 | 36 | > “Bringing in a new instance from our side is a matter of two clicks now, allowing our clients to be up and running in no time.” 37 | > -- Philipp Kreis, CTO at cobra 38 | 39 | ## Multi deployments in action 40 | 41 | Multi deployments with the latest release of Deploy Now are quick and simple. They are available for starter, static and php projects, provided that each production environment uses packages of the same type. 42 | 43 | Set up a Deploy Now project and add extra production deployments on the project page. 44 | 45 | **![Adding a production deployment](/add-prod-deployment.png)** 46 | 47 | Each production deployment receives its own filespace and database (php package), meaning their productive data can differ. Files that need to be kept persistent on the server can be defined in config.yaml under .deploy-now/[project-name]. The number of available staging environments will increase automatically based on the number of production deployments. 48 | 49 | To update the code in all production environments, just do one git push to the repository. The build will start and the results will be deployed to all web spaces at the same time. 50 | 51 | **![Animation content publishing](/MultiDeployments.gif)** 52 | 53 | Give it a try! 54 | -------------------------------------------------------------------------------- /content/blog/php-release.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now supports PHP app deployment including support for MariaDB and automated setups for Laravel and Symfony.' 3 | created: '2022-04-13' 4 | author: 'robert-schleinhege' 5 | header: '@assets/blog/deploy-now-php-launch.png' 6 | teaser: '@assets/blog/deploy-now-php-launch.png' 7 | tags: 8 | - php 9 | - laravel 10 | - symfony 11 | 12 | --- 13 | 14 | # Deploy Now feature realease: LAMP stack support for dynamic websites now available 15 | 16 | ## Introducing PHP Projects 17 | 18 | Just one year after our first release, and after lots of small improvements thanks to feedback from you, the first major feature release for Deploy Now went live. I'm happy to announce that Deploy Now also supports the most popular web stack — the LAMP stack. This update is in addition to any static site generators or single page application frameworks previously supported. That's not all! Deploy Now PHP Projects come with MariaDB support, plus automatic detection and set up for Laravel and Symfony. 19 | 20 | ![PHP now available](/phpmenu3.gif) 21 | 22 | ## How does PHP deployment work now? 23 | 24 | Our main goal was to make deploying dynamic pages as fast and delightful as static pages. Our wizard guides you through the workflow setup, starting with connecting your repo. Doing this gives us a snapshot of your code, which helps you set up your build pipeline. 25 | 26 | ### New with PHP Projects 27 | If you want to make files persistent or execute commands on your runtime environment, you can define these deployment settings in the wizard and change them in a file afterwards. We'll also help you create runtime environment variables — secret or not — and template a config file. You can now create a database and reference its key value pairs in your config file and set up a send mail account. 28 | 29 | Learn how to set up your workflow with this [step-by-step guide](/docs/from-repo/). 30 | 31 | ## Smart setup for 30+ frameworks 32 | 33 | ![Framework Detection](/02_From_sample_detection_flat.gif) 34 | 35 | We’ve fundamentally updated our detection algorithm to make setting up automated workflows in Deploy Now as seamless as possible. The algorithm scans your repository for the frameworks you're using and the build steps you need, then prefills the setup wizard. These inputs, and any changes you make, are used to set up a GitHub Actions workflow. You can modify your workflow at any point. 36 | 37 | ## Learn more in the video 38 | Get to know the vision behind Deploy Now, our develepment team and how to set up a Laravel App in a few clicks. 39 | 40 | 41 | 42 | 43 | ## Supported static site generators, SPA and PHP frameworks 44 | In additon to Laravel and Symfony, here's an updated list of all the frameworks we detect out of the box. If you don't find your favorite framework in the list, you can always set up your own custom build pipelines. 45 | 46 | | Static site generators | SPA frameworks | PHP frameworks | 47 | | :------------- |:-------------| :-----| 48 | | Hugo | Angular | Laravel | 49 | | Gatsby | React | Symfony | 50 | | Gridsome | Vue | 51 | | Docusaurus | Ionic | 52 | | Vuepress | Svelte | 53 | | Vitepress | Ember | 54 | | NuxtJS (static) | 55 | | NextJS (static) | 56 | | Hexo | 57 | | Metalsmith | 58 | | 11ty | 59 | | UmiJS | 60 | | Astro | 61 | | Scully | 62 | | ElderJS | 63 | | Middleman | 64 | | Jekyll | 65 | | Nanoc | 66 | | Pelican | 67 | | mkdocs | 68 | | Jigsaw | 69 | | Sculpin | 70 | 71 | Got feedback or need a feature? Reach out to us anytime on [GitHub Issues](https://github.com/ionos-deploy-now/ionos-deploy-now/issues). 72 | 73 | Enjoy the new features! 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /content/blog/podcast_DE.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'In der neuesten Folge unseres Inside IONOS Podcasts erzählt unser Tech Lead Markus die Geschichte hinter Deploy Now, wie das Produkt entstanden ist und wie wir unsere zukünftigen Features entwickeln.' 3 | created: '2021-08-06' 4 | author: 'markus-hunsalz' 5 | tags: 6 | - podcast 7 | hidden: true 8 | 9 | --- 10 | 11 | # Podcast: Die Geschichte hinter Deploy Now 12 | In der neuesten Folge unseres Inside IONOS Podcasts erzählt unser Tech Lead Markus die Geschichte hinter Deploy Now, wie das Produkt entstanden ist und wie wir unsere zukünftigen Features entwickeln. Enrico und Jonas von Fruchtec schließen sich der Diskussion an und erklären, was ihnen an Deploy Now gefällt und wie sie den Jamstack in Kundenprojekten einsetzen. Inside IONOS Episoden werden regelmäßig veröffentlicht und bieten einen Blick hinter die Kulissen des größten europäischen Cloud- und Hosting-Unternehmens. 13 | 14 | ## Spotify 15 | 16 | 17 | ## Apple Podcast 18 | 19 | 20 | ## YouTube 21 | 22 | 23 | -------------------------------------------------------------------------------- /content/blog/portfolio_sites_DE.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Unser Partner Kevin Chromik schaut sich Portfolio-Websites seiner Zuschauer an und gibt Tipps zu Best Practices und Layout.' 3 | created: '2022-07-18' 4 | author: 'chris-kaufmann' 5 | tags: 6 | - portfolio 7 | - portfolio-website 8 | - best practices 9 | hidden: true 10 | 11 | --- 12 | # Hosten Sie Ihre eigene Portfolio-Website mit Deploy Now 13 | Unser Partner Kevin Chromik, selbst Mobile Software Engineer und YouTuber, hat sich einige Portfolio-Websites seiner Zuschauer angeschaut. Im Video gibt er Tipps zu Best Practices und Layout für eine solche Website. 14 | Er zeigt auch, wie man Projekte ansprechend präsentieren kann. 15 | Und für die beste Außenwirksamkeit möchten wir Ihnen zusätzliche Tipps für Ihre Portfolio-Website an die Hand geben. 16 | 17 | 18 | 21 | 22 | 23 | ## Unsere Tipps für Ihre Portfolio-Website 24 | ### Zeigen Sie sich von Ihrer kreativsten und besten Seite 25 | Wer auch immer sich Ihr Portfolio anschaut, möchte auf keinen Fall genau dasselbe sehen, was sie auch schon auf anderen Portfolio-Seiten gesehen haben. Zeigen Sie also auf jeden Fall Ihre origenellsten, modernsten und einzigartigsten Projekte. 26 | 27 | ### Anzahl der Projekte: Qualität vor Quantität 28 | Natürlich muss man irgendwo anfangen. Wenn Sie noch nicht so viele eigene Projekte umgesetzt haben, versuchen Sie trotzdem nur die auszuwählen, auf die Sie besonders stolz sind. Das Gleiche gilt natürlich für den Fall, dass Sie schon sehr viele Projekte umgesetzt haben. Versuchen Sie hier Projekte anhand eines roten Fadens auszuwählen. Also wählen Sie z.B. Projekte gruppiert nach Kundenanforderungen oder verwendeten Technologien aus. 29 | 30 | ### Testimonials 31 | Sollten Sie bereits auf eine ganze Reihe zufriedener Kunden zurückblicken, dann lassen Sie sich von Ihnen empfehlen. Testimonials sind eine hervorragende Art zu zeigen, dass ehemalige Kunden von Ihrer Arbeit begeistert sind. Fragen Sie bei zufriedenen Kunden auf jeden Fall nach, ob sie dir nicht sogar einen kurzen Referenztext schreiben können, den Sie dann auf Ihrer Portfolio-Website präsentieren können. 32 | 33 | ### Aktuell bleiben und regelmäßig aktualisieren 34 | Beschränken Sie sich auf Arbeiten der letzten drei Jahre, denn Technik- und Designtrends kommen und gehen. Ihr Portfolio sollte zeigen, dass Sie am Puls der Zeit sind. Um sicherzustellen, immer aktuell zu bleiben, sollten Sie Ihre Portfolio-Website mindestens alle 6 Monate aktualisieren. Das Aktualisieren mag zwar offensichtlich sein, ist aber extrem wichtig. 35 | 36 | ### Holen Sie sich eine zweite Meinung ein 37 | Die Auswahl passender Projekte kann recht schwer sein. Holen Sie sich deswegen Feedback von einer erfahrenen Kollegin oder einem erfahrenen Kollegen. 38 | Dinge, die ein Test-Leser beachten sollte: 39 | Gibt es Typos oder andere Fehler? 40 | Findet man sich leicht zurecht und kann einfach durch das Portfolio klicken? 41 | Fehlt etwas Wichtiges? 42 | Basierend auf dem Feedback können Sie entsprechende Änderungen vornehmen. 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /content/blog/product-hunt.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now made it to #3 product of the day on Product Hunt. View our post and give us feedback.' 3 | created: '2021-06-12' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - update 7 | --- 8 | 9 | # Deploy Now on Product Hunt 10 | 11 | Deploy Now is finally online in all makets, including USA, UK, Germany, Italy, France, Spain, Mexico and Canada - and on Product Hunt as well! We are very happy about the first resonance and that we made it to #3 product of the day. Do you have feedback, want to support us or see what others think about Deploy Now? Then pay [our post](https://www.producthunt.com/posts/deploy-now) a visit! 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /content/blog/pull-request-permissions.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '' 3 | created: '2022-08-25' 4 | author: 'robin-müller' 5 | tags: 6 | - update 7 | --- 8 | 9 | # Update: Deploy Now GitHub App requires permissions to manage pull requests 10 | 11 | ## Why is this needed? 12 | 13 | Currently we are implementing new features that require a GitHub workflow that has a different structure. 14 | To ease up the migration of this workflow for you, we are building an automation process for this. 15 | As the workflow can be completly customized by you, we can't guarantee that the automation process won't break your existing workflow. 16 | Therefore we deciced to provide you the output of this process via a pull request and you can verify that the changes won't break the build of your project. 17 | Unfortunately our GitHub App currently hasn't got the permissions to manage pull requests, so you need to accept the permission change request, before we are able to start the workflow migration. 18 | -------------------------------------------------------------------------------- /content/blog/react-blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Learn how to deploy a blog build with React in this video tutorial created by Wayne from Devscover. ' 3 | created: '2021-08-26' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - guide 7 | - react 8 | --- 9 | 10 | # How to deploy a Blog with React and Deploy Now 11 | 12 | You do not necessarily need complex systems like Wix, Squarespace or WordPress to create a modern blog. Wayne from Devscover shows how you can easily create and host your own blog instantly from your GitHub repository. He migrated his [personal website](https://waynecovell.co.uk/) and his [blog](https://devscover.com/) to Deploy Now to make publishing fresh content more efficient. 13 | 14 | In his video, he shows how you can easily use his blog as a template to deploy your own one. His blog is a Single Page Application based on React. All you need to to is clone his [GitHub repository](https://github.com/wazcov/DeployNowBlog) and deploy it to [Deploy Now](https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=blog&utm_campaign=react-blog) - or simply click the button below. 15 | 16 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/wazcov/DeployNowBlog) 17 | 18 | 19 | -------------------------------------------------------------------------------- /content/blog/reasons-for-staging.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'In software development, staging is the process of testing your code in a live environment before pushing it to production. Learn how using staging workflows can improve your workflows and make your stakeholders happy.' 3 | created: '2022-06-29' 4 | author: 'robert-schleinhege' 5 | header: '@assets/blog/DPNW_dev.to— Staging@2x.png' 6 | teaser: '@assets/blog/DPNW_dev.to— Staging@2x.png' 7 | tags: 8 | - staging 9 | - development 10 | 11 | --- 12 | 13 | # 5 reasons to start staging your code right now 14 | 15 | In software development, staging is the process of testing your code in a live environment before pushing it to production. A staging environment is pretty much a replica of a production environment, so you can see exactly what users will experience once you release the code. Development teams often work with multiple instances within three types of environments: 16 | 17 | - **Local environment** – every developer has one. Here, code is committed to various branches of development streams and previewed locally. 18 | 19 | - **Staging environment** – runs code in a live environment for testing purposes. Developers might stage release candidates as they approach rollout, or much earlier in the development phase to verify git pushes. Stages can be connected directly to the main branch, or to feature branches which are not yet merged into master. 20 | 21 | - **Production environment** – runs the live version of a project. 22 | 23 | ## Why development teams often skip the stage 24 | 25 | As an exact replica of your production environment, a staging environment can easily require the same effort that goes into maintaining the production environment. And that additional effort can grow exponentially if multiple release candidates are all in staging at the same time. 26 | What’s more, staging adds yet another step to a developer’s daily. Which is something they’re not exactly keen on unless it’s absolutely necessary. Why stage if my project looks fine on localhost, right? 27 | 28 | But we shouldn’t be too hasty. Staging has a lot of benefits. And with the right tools at hand, staging requires no extra cost or effort at all. 29 | 30 | ## The benefits of staging 31 | 32 | ### Your designers are happier 33 | 34 | Working with a designer on a project with frontend? Give them a chance to check whether the look and feel of the latest release meets their expectations. Speaking from experience, unpleasant surprises can put a dampener on the team spirit. 35 | 36 | ### Clients know what’s coming 37 | 38 | Misunderstandings during concept creation are common. Even if a deployment goes exactly as planned, your client might have had something different in mind. Send them a preview link to align expectations before going live. 39 | 40 | ### No more awkward “it looked different on my machine” moments 41 | 42 | Who hasn’t been there? An issue flares up with a live project, but the person responsible claims they didn’t have this issue on their local machine. These scenarios are completely avoidable if you rigorously test for multiple scenarios during the staging phase. 43 | 44 | ### Responsibility is shared 45 | 46 | Sure, you can ask teammates to review your pull request. That way you weren't the only person who saw the code before release. But PRs don’t replace fully-fledged stages. With stages you can delegate essential quality checks to QA or test engineers. 47 | ### Everyone stays in the loop 48 | 49 | There's no crystal ball showing project managers how far you are with the code on your local machine. Using staging environments to let them see the progress from time to time will make them happy – and probably save you from replying to anxious emails. 50 | ## Changing the staging game 51 | 52 | Deploy Now is a build tool created by developers for developers for building and hosting static site generators, PHP apps and single page applications on custom engineered IONOS infrastructure. 53 | Create a feature branch locally, push it to staging, view your code live, merge to production and automatically shut down the staging environment. 54 | 55 | That's how easy staging with [Deploy Now](https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=blog&utm_campaign=staging-reasons) is. 56 | 57 | Every Deploy Now package offers staging branches as SSL-secured preview URLs. Share these URLs with clients and team members or use them to check your code on different devices and browsers. 58 | 59 | With no extra cost and effort required for managing additional infrastructure, should you still skip the stage? Absolutely not. 60 | 61 | If you work with multiple branches already, your daily workflow won't even change. Your code is built and deployed automatically, so it’s super quick and simple to run your code in a live environment early and often. 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /content/blog/staging-explained.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Learn how you can easily deploy multiple feature branches of your Gatsby site as staging environments in Deploy Now. ' 3 | created: '2022-01-17' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - guide 7 | - gatsby 8 | --- 9 | 10 | # Build and stage a Gatsby site with Deploy Now 11 | 12 | Developing frontends oftentimes involves a lot of back and forth, experiments and feedback loops. We've created [Staging Deployments](https://docs.ionos.space/docs/staging-deployments/) to make this process more convenient. 13 | Wayne from the YouTube Channel Devscover shows in his newest video how easy Staging Deployments can be created based on a Gatsby example. Simply create a new feature branch on GitHub and preview your changes in a Staging Deployment before merging them to production. 14 | Every Staging Deployment goes live under a preview URL that you can share with colleagues or customers to get feedback. 15 | 16 | Do you like the example website deployed in the video? [Sign up for Deploy Now](https://www.ionos.com/hosting/deploy-now?utm_source=deploy-now-docs&utm_medium=blog&utm_campaign=gatsby-staging) and hit this button to deploy your own version. 17 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/wazcov/Gatsby-IONOS-Deploy-Now) 18 | 19 | 20 | -------------------------------------------------------------------------------- /content/blog/webinar_DE.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Unser Product Owner Robert erklärt in einem kostenlosen Webinar die Vorteile von Jamstack-Websites entlang eines Projektlebenszyklus.' 3 | created: '2021-08-05' 4 | author: 'robert-schleinhege' 5 | tags: 6 | - webinar 7 | - jamstack 8 | hidden: true 9 | 10 | --- 11 | 12 | # Webinar: Das Comeback des statischen Webs 13 | 14 | ## Worum geht es? 15 | 16 | Unser Product Owner Robert hielt eine Keynote auf dem Digital Bash - Agency Special. Er erklärt, wie traditionelle CMS das Web seit den frühen 2000er Jahren erobert haben und welche Nachteile ihre Verwendung aus technischer und kommerzieller Sicht mit sich bringt. Erfahren Sie, warum statische Websites viele dieser Probleme lösen können und warum der Jamstack ein sinnvolles Update für die statische Welt ist. Der Umstieg auf den Jamstack bringt viele Vorteile mit sich, nicht nur während der Entwicklung, sondern über den gesamten Lebenszyklus eines Projektes. 17 | 18 | ## Kostenloses Webinar 19 | 20 | 21 | -------------------------------------------------------------------------------- /content/blog/workflow-dispatch.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '' 3 | created: '2021-10-19' 4 | author: 'robin-müller' 5 | tags: 6 | - update 7 | --- 8 | 9 | # Update: Deploy Now triggers new builds without empty commits 10 | 11 | ## What will change? 12 | 13 | We released a new feature that makes the empty commits for re-triggering a build obsolete. 14 | Re-triggering a build is necessary for connecting a custom domain or changing the production branch. 15 | Deploy Now will now use the `workflow_dispatch` event to re-trigger a build but therefore the Deploy Now Github App requires additional permissions. 16 | Github should have sent an email regarding this. 17 | 18 | ## What you need to do 19 | 20 | To get this working you have to upgrade your Github workflow by following these steps: 21 | 22 | 1. Check that the workflow configuration file has already the correct name `.github/workflows/deploy-now.yaml`. If your repository contains a file named `.github/workflows/ionos-space.yml` please rename it to `.github/workflows/deploy-now.yaml`. 23 | 2. Adapt the content of the workflow configuration to allow the triggering of builds by the `workflow_dispatch` event. If you haven't touched this file there should be a line that looks like this: 24 | ```yaml 25 | on: [push] 26 | ``` 27 | Just replace this as follows: 28 | ```yaml 29 | on: 30 | - push 31 | - workflow_dispatch 32 | ``` 33 | -------------------------------------------------------------------------------- /content/docs/configuration-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '' 3 | sidebar: 'docs' 4 | prev: '/docs/staging-deployments/' 5 | next: '/docs/deployment-configuration/' 6 | editable: true 7 | --- 8 | 9 | # Overview 10 | 11 | You can use different [YAML](https://yaml.org/spec/1.2/spec.html) files located in your repository to manage build and deployment settings. 12 | 13 | |PURPOSE|FILE|NECESSITY| 14 | |-|-|-| 15 | |[Deployment configuration](/docs/deployment-configuration/): Manage file persistency and remote commands on your runtime |`.deploy-now/config.yaml`|optional| 16 | |[GitHub Actions customization](/docs/github-actions-customization/): Manage the GitHub Actions workflow directly|`.github/workflows/deploy-now.yaml`|mandatory| 17 | |[Configure a sample](/docs/create-sample/): Skip the wizard by providing a file-based configuration|`.ionos.yaml`|optional| 18 | 19 | 20 | ## Deployment configuration 21 | 22 | As GitHub Actions configurations support only key-value-pairs, we've decided to manage the deployment settings in a separate 23 | `config.yaml` file using structured values. If your project requires a runtime, you can use this file to exclude files from being copied to the server and define commands that are executed remotely. This file is mandatory, as it is not required for static site usecases. 24 | 25 | [Learn more](/docs/deployment-configuration/) 26 | 27 | ## GitHub Actions customization 28 | 29 | Deploy Now connects GitHub repositories to IONOS infrastructure using [Github Actions](https://github.com/features/actions) for the workflow automation. During the project setup Deploy Now scans your repository for the technologies and frameworks you use and stores this information in an `deploy-now.yaml`. This file is located in `.github/workflows`. You can edit this file to customize your workflow. 30 | 31 | [Learn more](/docs/github-actions-customization/) 32 | 33 | ## Create a sample 34 | 35 | An `.ionos.yaml` can be stored in the repository root to make the framework configuration, like the dist folder or the build command, explicit. If a working `.ionos.yaml` is located in the root, the framework detection is automatically skipped. This is especially helpful if you want to create a sample and want to avoid accidental misconfigurations from users that deploy your repository. 36 | 37 | [Learn more](/docs/create-sample/) 38 | 39 | 63 | -------------------------------------------------------------------------------- /content/docs/create-sample.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '' 3 | sidebar: 'docs' 4 | prev: '/docs/domain-tls/' 5 | next: '/docs/faq/' 6 | editable: true 7 | --- 8 | 9 | # Create a sample 10 | 11 | ## Add a deploy button to your sample 12 | 13 | If you create a sample repository that might be interesting for other GitHub users, you can add a "Deploy to IONOS" button to your repository. This allows users to deploy their instance of your sample with a single click. All you need to to is inserting your repository URL into the snippet below and pasting the snippet in your repository readme. 14 | 15 | ``` 16 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/your-account/your-repo) 17 | ``` 18 | 19 | As a results, your deploy button should look like this: 20 | 21 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/ionos-deploy-now/hello-plain-html) 22 | 23 | 112 | 113 | -------------------------------------------------------------------------------- /content/docs/cronjobs.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Easily define and schedule cron jobs with IONOS Deploy Now directly from your GitHub repository.' 3 | sidebar: 'docs' 4 | prev: '/docs/visitor-statistics/' 5 | next: '/docs/faq/' 6 | editable: true 7 | --- 8 | 9 | # Cron jobs 10 | 11 | ## Creating a cron job 12 | Cron jobs can be defined directly in the `config.yaml` under `.deploy-now` in your repository. Simply add new cron jobs including a command and a schedule to the sheet. 13 | 14 | ``` 15 | runtime: 16 | cron-jobs: 17 | - command: my-cron-job-command # the deployment is located at $HOME/htdocs/ to execute a deployed script just prefix it accordingly 18 | schedule: 0 5 * * * # run every day at 5:00 19 | ``` 20 | 21 | A description of the crontab syntax that is required to define schedules can be found [here](https://www.adminschoice.com/crontab-quick-reference). 22 | 23 | # Example of a Cron Job for Running a PHP Script 24 | 25 | To run a PHP command using a specific version, you need to provide the absolute path to the desired PHP version. Below is a list of the available versions: 26 | 27 | - `/usr/bin/php8.0-cli` 28 | - `/usr/bin/php8.1-cli` 29 | - `/usr/bin/php8.2-cli` 30 | - `/usr/bin/php8.3-cli` 31 | - `/usr/bin/php8.4-cli` 32 | 33 | Below is an example configuration of a cron job that uses the `/usr/bin/php8.3-cli` version to execute a script: 34 | 35 | ```yaml 36 | runtime: 37 | cron-jobs: 38 | - command: /usr/bin/php8.3-cli $HOME/htdocs/"path/to/your/script" 39 | schedule: "* * * * *" # runs every minute 40 | ``` 41 | With this configuration, the cron job will run every minute using the specified PHP version to execute the script located at $HOME/htdocs/"path/to/your/script". 42 | -------------------------------------------------------------------------------- /content/docs/database.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now provides MariaDBs for PHP Projects. Each deployment receives its own database that can be managed via phpMyAdmin.' 3 | sidebar: 'docs' 4 | prev: '/docs/multi-deployments/' 5 | next: '/docs/domain-tls/' 6 | editable: true 7 | --- 8 | 9 | # Database 10 | 11 | PHP Projects in Deploy Now are equipped with databases. Each production and staging deployment receives one MariaDB. 12 | 13 | ## Properties 14 | - MariaDB version 10 15 | - 2 GB storage 16 | - Shared resources 17 | - Encryption of the connection to the database 18 | - SSL configured 19 | - No encryption@rest 20 | 21 | ## Connecting the database to the application 22 | 23 | You can maintain configuration files such as `.env` directly in your repository. For security reasons, database credentials are stores in the GitHub secrets. 24 | You can reference them via placeholders such as `DB_PASSWORD={{ .runtime.db.password }}` and we will automatically inject the correct values during the deployment. 25 | We support you with this during the project setup. A complete guide can be found under [runtime configuration](https://docs.ionos.space/docs/runtime-configuration/). 26 | 27 | ## Access 28 | 29 | You can access the databases via phpMyAdmin right from your Deploy Now dashboard. Databases are not publicly accessible. 30 | 31 | ## Backup 32 | 33 | Databases are backed up automatically once per day. Backups are stored for 7 days. If you wish to restore your databases, you can contact our customer support any time. 34 | 35 | ## Staging and Multi Deployments 36 | 37 | Each [Staging deployment](https://docs.ionos.space/docs/staging-deployments/), corresponding to branches other than main, receives its own database. 38 | The database get's deleted again once the branch is no longer existing. Currently, we do not copy productive data to a Staging deployment automatically. 39 | 40 | [Multi deployments](https://docs.ionos.space/docs/multi-deployments/) are equipped with one database per deployment as well. You can customize different productive deployments by uploading different content to the databases. 41 | -------------------------------------------------------------------------------- /content/docs/deploy-static-sites.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'A quick overview of how to deploy and manage a static site via GitHub when using Deploy Now. Deploy Now offers automated deployments, comprehensive framework support, a secure infrastructure and predictable pricing.' 3 | sidebar: 'docs' 4 | prev: '/docs/from-repo/' 5 | next: '/docs/deploy-php-apps/' 6 | editable: true 7 | --- 8 | 9 | # Deploy Static Sites via GitHub 10 | 11 | Deploy Now offers automated builds and deployments to a shared hosting infrastructure for any static sites, such as Static Site Generation projects, Single Page Applications or plain HTML/CSS websites. They can be set up as a `starter project` that comes with your Deploy Now plan or as an `static project` for more storage and staging environments. 12 | 13 | ## Supported frameworks 14 | Deploy Now supports all static sites that can be build with Node.js, Composer, Ruby or any other [language supported by GitHub Actions](https://docs.github.com/en/get-started/learning-about-github/github-language-support). The following frameworks can be detected automatically to prefill required build dependencies and commands. Please note that we do not provide Node.js runtime environments. 15 | 16 | ### Static Site Generators 17 | 18 | Hugo, Gatsby, Gridsome, Docusaurus, Vuepress, Vitepress, NuxtJS (static), NextJS (static), Hexo, Metalsmith, 11ty, UmiJS, Astro, Scully, ElderJS, Middleman, Jekyll, Nanoc, Pelican, mkdocs, Jigsaw and Sculpin 19 | 20 | ### Single Page Applications 21 | 22 | Angular, React, Vue, Ionic, Svelte and Ember 23 | 24 | ## Features 25 | - Automated builds and deployments 26 | - Connect your custom domain 27 | - SSL automatically connected and renewed 28 | - Deploy additional branches with [Staging Deployments](/docs/staging-deployments/) 29 | - Deploy one branch to multiple environments with [Multi Deployments](/docs/multi-deployments/) 30 | - Monitor traffic with [Visitor statistics](/docs/visitor-statistics/) 31 | - Fixed monthly pricing (see plans for [US](https://www.ionos.com/hosting/deploy-now), [UK](https://www.ionos.co.uk/hosting/deploy-now), [GER](https://www.ionos.de/hosting/deploy-now), [CA](https://www.ionos.ca/hosting/deploy-now), [ES](https://www.ionos.es/alojamiento/deploy-now), [FR](https://www.ionos.fr/hebergement/deploy-now), [MX](https://www.ionos.mx/alojamiento/deploy-now) and [IT](https://www.ionos.it/hosting/deploy-now)) 32 | 33 | ## Setup 34 | 35 | Simply connect your repository and follow a guided setup of build dependencies and steps. After the setup, your project gets deployed instantly and will build and deploy on every following `git push`. You might want to [create a new project on the command line](/docs/from-cmd-line/), [deploy an existing repository](/docs/from-repo/) or [deploy one of our samples](/docs/framework-samples) for a quickstart. 36 | 37 | ## Settings 38 | 39 | ### Build dependencies, commands and environment variables 40 | Build settings can be adapted directly in the configuration files of the GitHub Actions workflow under `.github/workflows`. Instructions can be found under [build configuration](/docs/github-actions-customization/). 41 | 42 | ### Domains & TLS 43 | You can connect any kind of custom domain in a few clicks. If you want to connect a domain that you have not purchased at IONOS, you need to switch to the IONOS nameservers first. Each domain is automatically SSL secured. 44 | 45 | ### Redirects, rewrites, HTACCESS 46 | Redirects and rewrites can be managed via `.htaccess` files. Visit [Apache configuration](/docs/apache-configuration-htaccess) for examples. 47 | -------------------------------------------------------------------------------- /content/docs/deployment-configuration.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'How to define file persistency and remote commands in Deploy Now.' 3 | sidebar: 'docs' 4 | prev: '/docs/github-actions-customization/' 5 | next: '/docs/runtime-configuration/' 6 | editable: true 7 | --- 8 | 9 | # Deployment configuration 10 | 11 | Workflows deploy to IONOS infrastructure after the [build](/docs/github-actions-customization/). Build results can be deployed to one instance or multiple instances with [Multi deployments](/docs/multi-deployments/). Additional feature branches can be deployed as [Staging deployments](/docs/staging-deployments/). More information about the Deploy Now workflows can be found under [GitHub integration](/docs/git-integration/). 12 | 13 | Deploy Now offers configurations for file persistency and automated runtime commands for `PHP projects`. Configurations can be made under `.deploy-now/config.yaml` for [workflow v1](/docs/git-integration/#workflow-versions) and `.deploy-now/[project-name]/config.yaml` for [workflow v2](/docs/git-integration/#workflow-versions). 14 | 15 | ## Configurations 16 | 17 | ### Excludes 18 | #### Description 19 | by default, all files in your publish directory get deployed. Directories that should not be deployed can be listed as excludes. Vice versa, files created by your application at runtime can also be listed as excluced, preventing them from being deleted. You can define different excludes for the first deployment (`bootstrap`) and any following deployment (`recurring`). The folders `logs`, `.deploy-now`, `.git` and `.github` are marked as excludes by default. 20 | #### How to edit 21 | Listing directories relative to the publish directory under `excludes:` in `config.yaml`. Changes become active with the next deployment. 22 | #### Example 23 | ``` yaml 24 | bootstrap: 25 | # directories that are not copied by the initial deployment 26 | excludes: 27 | - samplefolder 28 | - samplefile.txt 29 | - folder/withfile.txt 30 | ``` 31 | ``` yaml 32 | recurring: 33 | # directories that are not overwritten or removed by the next deployment 34 | excludes: 35 | - samplefolder 36 | - samplefile.txt 37 | - folder/withfile.txt 38 | - database.sqlite 39 | ``` 40 | 41 | ### Remote commands 42 | #### Description 43 | You can execute commands on your runtime during the deployment process. This could either be done before or after the deployment. You can define different commands for the initial deployment (`bootstrap`) and any other deployment (`recurring`). 44 | #### How to edit 45 | List runtime commands under `pre-deployment-remote-commands`or `post-deployment-remote-commands`. 46 | #### Example 47 | ``` yaml 48 | # commands that are executed on the runtime before new files are copied 49 | pre-deployment-remote-commands: 50 | - echo "starting maintenance mode" 51 | 52 | # commands that are executed on the runtime after new files are copied 53 | post-deployment-remote-commands: 54 | - echo "clearing caches" 55 | - php8.0-cli -r "echo 'do something with php again';" 56 | - echo "leaving maintenance mode" 57 | - echo "back again" 58 | ``` 59 | 60 | An examplary `config.yaml` for a Laravel project can be found [here](https://github.com/ionos-deploy-now/laravel-starter), a Symfony example can be found [here](https://github.com/ionos-deploy-now/symfony-starter). 61 | 62 | ## Need help? 63 | Feel free to reach out to us via deploynow-support@ionos.com. 64 | -------------------------------------------------------------------------------- /content/docs/deployment-viewer.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'The server files of each deployment including server logs can be accessed in the Deployment Viewer' 3 | sidebar: 'docs' 4 | prev: '/docs/domain-tls/' 5 | next: '/docs/visitor-statistics/' 6 | editable: true 7 | --- 8 | 9 | # View files and logs 10 | 11 | ![Log files](/09_View_files_and_logs_flat.gif) 12 | 13 | ## Deployment Viewer 14 | 15 | The Deployment Viewer can be found next to each deployment in the project detail page. The Deployment Viewer shows the files that are currently stored in the server. You can switch between branches and download files. The Deployment Viewer does not provide write access to files. 16 | 17 | ## Log files 18 | 19 | Log data can be found in the logs directory of your web space in the files access.log.CW.gz for the past weeks and access.log.CW.D.gz for the current week. 20 | 21 | - CW stands for calendar week 22 | 23 | - D stands for day (starting with 1 for Monday to 7 for Sunday) 24 | 25 | - .gz means that the file is compressed to save space 26 | 27 | The logs for the current day are updated almost in real time. Due to the large amount of data, log data is kept available for a maximum of 8 weeks. The space used by the access logs is ignored when determing your remaining storage space. There is no need to delete the "logs" folder in order to have more storage space. 28 | -------------------------------------------------------------------------------- /content/docs/domain-tls.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now allows you to replace preview URLs by any kind of custom domain. All domains are automatically SSL secured.' 3 | sidebar: 'docs' 4 | prev: '/docs/database/' 5 | next: '/docs/deployment-viewer/' 6 | editable: true 7 | --- 8 | 9 | # Domains and TLS 10 | 11 | Deploy Now provides a generic preview URL by default for all your deployments. All URLs are SSL protected and http requests are redirected to https by default. 12 | 13 | ## Custom domains 14 | 15 | For your production deployment you can choose any available domain of all your IONOS contracts. You can select the domains straight from project detail view. 16 | ![Domain select](/domain-select.png) 17 | 18 | Besides you can assign externally registered domains to Deploy Now. For now you need at least one existing domain contract at IONOS, so that you're able to control DNS entries by IONOS. You can find a step-by-step guide [here](https://www.ionos.com/help/domains/set-up-and-manage-an-external-domain-at-11-ionos/setting-up-an-external-domain-at-11-ionos/). SSL is included by default too. If you do not have a domain contract at IONOS, please contact us via [deploynow-support@ionos.com](mailto:deploynow-support@ionos.com). 19 | 20 | ## TLS/SSL 21 | 22 | Deploy Now offers free SSL certifications for both production and staging deployments, including automatic certificate creation and renewal. Http requests are directly redirected to https by default. As consequence http sites aren't supported in any way by Deploy Now. 23 | 24 | We uncompromisingly rely on TLS to keep the best content intergrity, security and privacy to all services and sites build with Deploy Now. SSL certificates are issued in collaboration with [DigiCert](https://www.digicert.com/). 25 | -------------------------------------------------------------------------------- /content/docs/from-repo.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Step by step guide about how to create a new project in Deploy Now when starting with an existing repository.' 3 | sidebar: 'docs' 4 | prev: '/docs/from-cmd-line/' 5 | next: '/docs/deploy-static-sites/' 6 | editable: true 7 | --- 8 | 9 | # From Repository 10 | 11 | Already have an existing project you wish to set up? Simply create a new deployment by following our wizard. 12 | 13 | ![From existing repository](/03_From_existing_repository_flat.gif) 14 | 15 | *Not what you are looking for? [Start from a sample](/docs/framework-samples/) or [start from the command line](/docs/from-cmd-line/).* 16 | 17 | 1. **Connect your GitHub account** 18 | 19 | After you have [signed up for Deploy Now](https://ionos.space/?utm_source=deploy-now-docs&utm_medium=doc-content&utm_campaign=setup-guides), we'll need your permission to install the [IONOS Deploy Now App](https://github.com/apps/ionos-deploy-now) to your repositories. You can either grant access to selected or all repositories in your account. You can edit or revoke these permissions any time. 20 | 21 | 2. **Select your deployment source** 22 | 23 | Select a public or private repository from your GitHub account or paste in a link to a third party repository. Third party repositories are copied to a new source repository in your GitHub account. You will be asked for a name for this new source repository. 24 | 25 | 3. **Confirm detected framework** 26 | 27 | Deploy Now scans your repository to detect the framework you are using to prefill all workflow settings. You will be asked to confirm the detected framework or to clarify which framework you are using if we cannot identify your framework. If you are deploying a static site generator, single page application or simply a plain HTML website, you can proceed with a Static Project in this step. If your project requires a PHP runtime or a database, please continue with a PHP project. 28 | 29 | 4. **Build settings** 30 | 31 | ![Configure your build steps](/02_From_sample_build_flat.gif) 32 | 33 | Your build steps will be prefilled based on the detected framework. You can add node, composer or bundler steps or execute any other script or command. Define versions for each build step, add build commands and set environment variables. You can change the order of your build steps via drag and drop. Each project can have exactly one publish directory. The files of this directory will be deployed to the infrastructure after the build step. 34 | 35 | [More about build settings](/docs/github-actions-customization) 36 | 37 | 5. **Runtime settings** 38 | 39 | In case you are creating a PHP project, you need to specify a PHP version for the runtime. This step does not exist for Static projects. Please note that your web project will run on a different machine than your build pipeline. Build environment variables are not available after the deployment. Instead, you can create runtime secrets via the UI and refer to their values in the configuration file form by adding a `$` in front of the key. These secrets will be stored in GitHub secrets. Deploy Now automatically creates a set of keys required for connecting to the database. Their values can be referenced by a `$` in front of the key as well and will be created dynamically during the deployment. 40 | 41 | [More about runtime settings](/docs/runtime-configuration) 42 | 43 | 6. **Deployment settings** 44 | 45 | After your web project builds, results will be automatically deployed to IONOS infrastructure. In case you are creating a PHP project, you might want to execute commands on your runtime or keep certain files persistent. In this step, you can specify both for the bootstrap deployment, i.e. the initial creation of your project, and any recurring deployment after that. Pre deployment remote commands are executed before new files are moved to the server. Post deployment remote commands are executed afterwards. Excluded paths are prevented from being overwritten by new deployments. 46 | 47 | [More about deployment settings](/docs/deployment-configuration) 48 | 49 | 7. **Review your settings** 50 | 51 | Take your time and review your settings before creating the project. You can still make changes to the configuration after the project creation, as described in the configuration section of the docs. 52 | 53 | 8. **Congrats! Your project gets built** 54 | 55 | After completing the setup, we automatically trigger the first build and deployment. We connect your project to a preview URL. 56 | 57 | 9. **Just git push and your updates go live** 58 | 59 | Deploy Now will now trigger deployments on every git commit to your repository. You can open [staging deployments](/docs/staging-deployments/) to deploy multiple branches and connect a [custom domain](/docs/domain-tls/) to your production deployment. 60 | -------------------------------------------------------------------------------- /content/docs/git-integration.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now allows you to deploy from public or private repositories owned by GitHub users or organizations. After every git commit, a GitHub Actions workflow automatically updates your web project on the infrastructure' 3 | sidebar: 'docs' 4 | prev: '/docs/runtime-configuration/' 5 | next: '/docs/staging-deployments/' 6 | editable: true 7 | --- 8 | 9 | # GitHub integration 10 | 11 | Deploy Now builds your project in a [GitHub Actions](https://github.com/features/actions) workflow and deploys results instantly to IONOS infrastructure. Repositories can be `public` or `private` and owned by `personal accounts` or `GitHub organizations`. 12 | 13 | ~~~mermaid 14 | sequenceDiagram 15 | autonumber 16 | User ->> User: edit and commit 17 | User ->> GitHub: push 18 | GitHub ->> GitHub Actions: on push 19 | GitHub Actions ->> GitHub Actions: build 20 | GitHub Actions ->> IONOS: deploy 21 | ~~~ 22 | 23 | Interactions between GitHub and Deploy Now are managed by the IONOS Deploy Now App, which requires read access to actions and metadata as well as write access to administration, secrets, code and workflows. The available GitHub Actions build time of private repositories depends on your personal GitHub plan. 24 | 25 | ## Workflow versions 26 | 27 | The workflow version used depends on your project creation date. 28 | 29 | ### v1 (projects created until 11/2022) 30 | 31 | A GitHub Actions workflow in `.github/workflows/deploy-now.yaml` runs the entire build and deployment. This workflow exists per branch to enable [Staging Deployments](/docs/staging-deployments). 32 | 33 | ~~~mermaid 34 | flowchart LR 35 | subgraph prepare 36 | a1(fetch project data)-->a2(checkout repository) 37 | end 38 | subgraph build 39 | b1(generate .env/.htaccess)-->b2(install dependencies)-->b3(run build) 40 | end 41 | subgraph deploy 42 | c1(deploy) 43 | end 44 | a2 --> b1 45 | b3 --> c1 46 | ~~~ 47 | 48 | `.env`/`.htaccess` files are generated from `.env.template`/`.htaccess.template` files in `.deploy-now`. Files can be excluded from deployments in `.deploy-now/config.yaml`. 49 | 50 | ### v2 (projects created from 11/2022) 51 | 52 | An orchestration workflow in `.github/workflows/[project-name]-orchestration.yaml` runs the build steps specified in `.github/workflows/[project-name]-build.yaml` and triggers `.github/workflows/deploy-to-ionos.yaml` for the deployment. This decoupled set up enables [Multi Deployments](/docs/multi-deployments) in addition to [Staging Deployments](/docs/staging-deployments). 53 | 54 | ~~~mermaid 55 | flowchart LR 56 | subgraph s1[project-name-orchestration.yaml] 57 | subgraph s2[project-name-build.yaml] 58 | b1(generate .env/.htaccess)-->b2(install dependencies)-->b3(run build) 59 | end 60 | a1(check readiness)-->a2(build)-->b1 61 | b3-->a3(trigger deployment) 62 | end 63 | subgraph s3[deploy-to-ionos.yaml] 64 | c1(deploy to deployment 1) 65 | c2(deploy to deployment 2) 66 | c3(deploy to deployment 3) 67 | end 68 | a3 --> c1 69 | a3 --> c2 70 | a3 --> c3 71 | ~~~ 72 | 73 | `.env`/`.htaccess` files are generated from `.env.template`/`.htaccess.template` files in `.deploy-now/[project-name]`. Files can be excluded from deployments in `.deploy-now/[project-name]/config.yaml`. 74 | 75 | -------------------------------------------------------------------------------- /content/docs/github-actions-customization.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'How to configure the build steps of your Deploy Now project. Deploy Now detects your framework from the repository and sets up a GitHub Actions workflow accordingly.' 3 | sidebar: 'docs' 4 | prev: '/docs/deploy-php-apps/' 5 | next: '/docs/deployment-configuration/' 6 | editable: true 7 | --- 8 | 9 | # Build configuration 10 | 11 | Build steps are automated in GitHub Action workflows. These workflows are set up during project creation. Deploy Now analyzes your repositories and suggest the required build steps accordingly. Build steps can make use of Node.js, Composer or Bundler. After the set up, build settings can be edited directly in the GitHub Action workflow files stored in the repository. 12 | 13 | Configurations can be made under `.github/workflows/deploy-now.yaml` for [workflow v1](/docs/git-integration/#workflow-versions) and `.github/workflows/[project-name]-build.yaml` for [workflow v2](/docs/git-integration/#workflow-versions). More information about the Deploy Now workflows can be found under [GitHub integration](/docs/git-integration/). 14 | 15 | :::tip 16 | New to GitHub Actions? Check their [documentation](https://docs.github.com/en/actions) for instructions and the [GitHub Actions](https://github.com/marketplace?type=actions) marketplace for powerful extensions. 17 | ::: 18 | 19 | ## Configurations 20 | 21 | ### Build commands 22 | #### Description 23 | Combining your source code and dependencies to build a runnable instance of your web project. 24 | #### How to edit 25 | Editing commands or adding new commands in building steps of the workflow file. 26 | #### Example 27 | `workflow v1`: 28 | ``` yaml 29 | - name: Build Node assets 30 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 31 | env: 32 | CI: true 33 | SITE_URL: ${{ steps.project.outputs.site-url }} 34 | run: | 35 | npm ci 36 | npm run build 37 | ``` 38 | 39 | `workflow v2`: 40 | ``` yaml 41 | - name: Build Node assets 42 | env: 43 | CI: true 44 | SITE_URL: ${{ steps.project.outputs.site-url }} 45 | run: | 46 | npm ci 47 | npm run build 48 | ``` 49 | 50 | ### Build dependencies 51 | #### Description 52 | Before running a build command, the software required for your build needs to be installed. 53 | #### How to edit 54 | Edit versions of the existing setup steps or adding additional steps to install dependencies, following the schema below. 55 | #### Example 56 | `workflow v1`: 57 | ``` yaml 58 | - name: Setup Node 59 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 60 | uses: actions/setup-node@v4 61 | with: 62 | node-version: v16.x 63 | ``` 64 | 65 | `workflow v2`: 66 | ``` yaml 67 | - name: Setup Node 68 | uses: actions/setup-node@v4 69 | with: 70 | node-version: v16.x 71 | ``` 72 | 73 | ### Build environment variables 74 | #### Description 75 | Key value pairs accessible during your build for behavior customization or connecting to APIs. They can be either stored as plain text or, if sensitive, stored as [GitHub secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets). 76 | #### How to edit 77 | Navigate to the setup of the dependency or the build execution steps and list key-value-pairs below `env:` according to the documentation of the corresponding action. 78 | #### Example 79 | `workflow v1`: 80 | ``` yaml 81 | - name: Build PHP assets 82 | if: ${{ steps.project.outputs.deployment-enabled == 'true' }} 83 | env: 84 | MY_ENV_VAR: value-for-my-env-var 85 | MY_SECRET_ENV_VAR: ${{ secrets.MY_SECRET }} 86 | run: php artisan key:generate --force -n 87 | ``` 88 | 89 | `workflow v2`: 90 | ``` yaml 91 | - name: Build PHP assets 92 | env: 93 | MY_ENV_VAR: value-for-my-env-var 94 | MY_SECRET_ENV_VAR: ${{ secrets.MY_SECRET }} 95 | run: php artisan key:generate --force -n 96 | ``` 97 | 98 | ### Publish directory 99 | #### Description 100 | The directory, relative to your repository root, that contains the results of the build process that are deployed to the server. 101 | #### How to edit 102 | If you are running under `workflow v1`, you can edit the publish directory under `dist-folder:` in the `Deploy to IONOS` step of `.github/workflows/deploy-now.yaml` . Under `workflow v2`, you find the same setting under `DEPLOYMENT_FOLDER: ./` in `.github/workflows/[project-name]-build.yaml`. 103 | #### Example 104 | `workflow v1`: 105 | ``` yaml 106 | dist-folder: out 107 | ``` 108 | 109 | `workflow v2`: 110 | ``` yaml 111 | env: 112 | DEPLOYMENT_FOLDER: ./ 113 | ``` 114 | 115 | ## Need help? 116 | Feel free to reach out to us via deploynow-support@ionos.com. 117 | -------------------------------------------------------------------------------- /content/docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now in a nutshell and how to get started' 3 | sidebar: 'docs' 4 | next: '/docs/framework-samples/' 5 | editable: true 6 | --- 7 | 8 | # Introduction 9 | 10 | Deploy Now is a hosting platform that allows you to deploy static sites and PHP apps directly via GitHub. As a tool built from developers for developers, Deploy Now automates build and deployment so you can focus entirely on your code. Your code is deployed to [IONOS](https://www.ionos.com/) reliable shared hosting infrastructure in Europe and North America. The workflow automation is based on [GitHub Actions](https://github.com/features/actions) and can be customized directly in your repository. 11 | 12 | [How to deploy a static site](/docs/deploy-static-sites) 13 | 14 | [How to deploy a PHP app](/docs/deploy-php-apps) 15 | 16 | ## How Deploy Now works 17 | 18 | Deploy Now abstracts from the complexity of infrastructure provisioning, CI/CD configuration and TLS/domain handling. Connect your repository to Deploy Now and set up a GitHub Actions [build and deploy workflow](/docs/git-integration/) in a step-by-step guide. The workflow, cronjobs, file persistency, automated runtime commands, `.env` and `.htaccess` can be managed directly and version-controlled in the repository files. Sensitive data such as database or email credentials can be stored in GitHub secrets and referenced in runtime configuration files. Deploy Now injects their values during the deployment process. Databases can be managed via phpMyAdmin. Use `Staging Deployments` to deploy feature branches and `Multi Deployments` to deploy from one repository to multiple runtimes. 19 | 20 | ## Deploy Now in a nutshell 21 | 22 | |FUNCTION SET|APPLICATION STACK|BY DEFAULT| 23 | |-|-|-| 24 | |Smart framework setups|HTTP/2|DDos Protection| 25 | |Automated deployments|Apache|Geo redundancy| 26 | |[Staging deployments](/docs/staging-deployments)|[SSL/TLS by default](/docs/domain-tls/#tlsssl)|[Climate-neutral hosting](https://www.ionos.com/environment)| 27 | |[Multi deployments](/docs/multi-deployments)|Wide variety of PHP versions|IPv6| 28 | |[Custom domains](/docs/domain-tls)|[Cron jobs](/docs/cron-jobs)|| 29 | |[Visitor statistics](/docs/visitor-statistics)|[MariaDB](/docs/database)|| 30 | 31 | ## Deploy Now project types 32 | 33 | | Feature | Starter Project | Static Project | PHP Project | 34 | |-|-|-|-| 35 | | **Project Type** | Starter Project | Static Project | PHP Project | 36 | | **Use Cases** | Static Site Generators & Single Page Applications | Static Site Generators & Single Page Applications | PHP Applications | 37 | | **Storage per Deployment** | 50 MB | 1 GB | 10 GB | 38 | | **Staging Deployments** | 1 | 5 | 5 | 39 | | **PHP runtime environment** | - | - | PHP 8.3 and older | 40 | | **Database** | - | - | 2 GB MariaDB with PHPMyAdmin Access | 41 | | **Included in** | Deploy Now Membership | additionally bookable | additionally bookable | 42 | | **Price** | 3 projects for 4€/$/£ per month | 2€/$/£ per month per project - monthly cancellable | 7€/$/£ per month per project - monthly cancellable | 43 | 44 | Each project type is deployed to IONOS infrastructure and comes with geo-redundancy, DDoS protection and visitor statistics. 45 | 46 | ## Getting started 47 | You can start either [from sample](/docs/framework-samples), [from command line](/docs/from-cmd-line) or [from an existing repository](/docs/from-repo). 48 | 49 | ## Need help? 50 | Feel free to reach out to us via deploynow-support@ionos.com. 51 | -------------------------------------------------------------------------------- /content/docs/multi-deployments.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now allows you to deploy from one repository to multiple web spaces. This eases central management of web services requiring multiple runtimes, which only differ in persistent files.' 3 | sidebar: 'docs' 4 | prev: '/docs/staging-deployments/' 5 | next: '/docs/database/' 6 | editable: true 7 | --- 8 | 9 | # Multi deployments 10 | 11 | **![Animation content publishing](/MultiDeployments.gif)** 12 | 13 | ## Concept 14 | 15 | Multi deployments allow you to deploy your productive branch to multiple production deployments after one, centralized build. This allows you to deploy many instances of a web service efficiently. The instances might differ in their persistent data in filespace or database. 16 | 17 | :::tip 18 | Multi Deployments are only available for projects running under the [v2 workflow](/docs/git-integration/#v2-projects-created-from-112022). Projects created under v1 need to be switched to v2 manually e.g. by re-creating them. We will also provide a way to open a pull request in your repository which tries to do the migration automatically. 19 | ::: 20 | 21 | ~~~mermaid 22 | graph TD 23 | A(local workspace):::active -->|push to main| B(GitHub repository):::active 24 | B -->|on push| C{Deploy Now}:::active 25 | C -->|deploy main| D([production deployment 1]):::active 26 | C -->|deploy main| E([production deployment 2]):::active 27 | C -->|deploy main| F([production deployment 3]):::active 28 | D --> D1([custom domain]):::active 29 | E --> E1([custom domain]):::active 30 | F --> F1([custom domain]):::active 31 | ~~~ 32 | 33 | ## Domains 34 | By default, each production deployment goes live under a preview URL. All preview URLs can be connected to custom domains and get automatically SSL-secured. 35 | 36 | ## Production data 37 | Each production deployment receives its own filespace and database, meaning their productive data can differ. Files that need to be kept persistent on the server can be defined in `config.yaml` under `.deploy-now/[project-name]`. 38 | 39 | ## Setup 40 | Simply set up a Deploy Now project as usual and add additional production deployments on the project detail page. Each production deployment requires one Deploy Now project package. Multi deployments can be created for `starter projects`, `static projects` and `php projects`, using only project packages of the same type. The number of the available staging deployments adds up based on the number of production deployments created. 41 | 42 | ## Example use case 43 | Read how Cobra CRM uses Multi Deployments at scale in our [blog post](https://docs.ionos.space/blog/multi-deployments/). 44 | 45 | -------------------------------------------------------------------------------- /content/docs/php-alpha.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: '' 3 | sidebar: 'docs' 4 | prev: '/about-us/' 5 | next: '' 6 | editable: true 7 | --- 8 | 9 | # PHP Alpha: Deploy Laravel or Symfony with Deploy Now 10 | 11 | ## Help us take the next big step 12 | Deploy Now started with static sites, but it's time to move on. We know that a lot of you create dynamic apps with PHP frameworks, and we would love to add this capability to Deploy Now. Our goal is to enable managing PHP runtimes including databases with the same convenient developer experience like we offer for static sites. We are excited to announce that we are in public Alpha and would love you to join. How? Just follow the steps below. 13 | 14 | ## 1. Give us a ping 15 | Drop us a short message under [info@DeployNow.dev](mailto:info@DeployNow.dev) and we will add you to the list of alpha participants. Ideally, you already have a Deploy Now account and tell us your GitHub name in your mail. We will activate the option to use the alpha in your profile accordingly. 16 | 17 | ## 2. Deploy a sample 18 | As our wizard is not able to detect and configure PHP projects yet, you need deploy one of our samples to create a Laravel or Symfony project. These two samples contain a [file-based configuration](/docs/create-sample/#skip-the-wizard-with-a-file-based-configuration) that skip the setup wizard and deploy your project instantly. 19 | 20 | :::note 21 | The samples below cannot be deployed with the free project packages that come with your Deploy Now membership, as their file size is too large. We will provide you with a sufficiently large project package on request. 22 | ::: 23 | 24 | ### Laravel sample 25 | [This repository](https://github.com/ionos-deploy-now/laravel-starter) contains a sample for the PHP framework [Laravel](https://laravel.com/). You can deploy it by clicking on the button below. It would be awesome if you keep your repository public, so we can check what you are building. 26 | 27 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/ionos-deploy-now/laravel-starter) 28 | 29 | ### Symfony sample 30 | [This repository](https://github.com/ionos-deploy-now/symfony-starter) contains a sample for the PHP framework [Symfony](https://symfony.com/). You can deploy it by clicking on the button below. 31 | 32 | [![Deploy to IONOS](https://images.ionos.space/deploy-now-icons/deploy-to-ionos-btn.svg)](https://ionos.space/setup?repo=https://github.com/ionos-deploy-now/symfony-starter) 33 | 34 | ## 3. Make it your project 35 | Starting with the sample, you can either further develop the project or merge in code from your existing Laravel or Symfony project. Both samples contain a `config.yaml` under `.deploy-now` for [configuring your deployment](/docs/deployment-configuration/). You can edit this file to define the directories you want to exclude from your deployments and the commands you want to execute on your runtime. 36 | 37 | While working on your project, you can view logs or any other file in your runtime using the Deployment Viewer in Deploy Now. You can find the Deployment Viewer in the three-dot menus next to your deployments. The locations of the log files are described in the [Laravel sample readme](https://github.com/ionos-deploy-now/laravel-starter) and [Symfony sample readme](https://github.com/ionos-deploy-now/symfony-starter). 38 | 39 | ## 4. Drop us your feedback 40 | After you've contacted us via mail, we will provide you with more information about how to drop us your feedback. Your feedback is crucial for us to tune our Alpha and make the right decisions for a profound PHP support. 41 | 42 | Thanks a lot from the entire Deploy Now team and happy deploying! :-) 43 | -------------------------------------------------------------------------------- /content/docs/staging-deployments.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now allows you to create multiple Staging Deployments from feature branches and provides preview URLs. This allows you to preview changes before merging them to production.' 3 | sidebar: 'docs' 4 | prev: '/docs/git-integration/' 5 | next: '/docs/multi-deployments/' 6 | editable: true 7 | --- 8 | 9 | # Staging deployments 10 | 11 | ## Concept 12 | 13 | Staging deployments give you the ability to build and deploy branches in addition to your main branch. This allows you to stage changes before merging them to production, giving colleagues or customers the option to test and provide feedback. 14 | 15 | ~~~mermaid 16 | graph TD 17 | A(local workspace):::active -->|push to branch A| B(GitHub repository):::active 18 | B -->|on push| C{Deploy Now}:::active 19 | C -->|deploy main| D([production]):::inactive 20 | C -->|deploy branch A| E([stage 1]):::active 21 | C -->|deploy branch N| F([stage x]):::inactive 22 | D --> D1([custom domain]) 23 | E --> E1([preview URL]):::active 24 | F --> F1([preview URL]) 25 | ~~~ 26 | 27 | ## Domains 28 | By default, new branches get deployed automatically and receive preview URLs. As Staging Deployments are not meant to be visible for website visitors, you cannot connect them with custom domains. If you are happy with your changes, simply roll them out by merging the branch to production. 29 | 30 | ## Production data 31 | Data from the producion deployment webspace and database is not copied to staging. You can copy productive data to a staging deployment using phpMyAdmin. 32 | -------------------------------------------------------------------------------- /content/docs/use-cases.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Which project type suites which use case' 3 | sidebar: 'docs' 4 | prev: '/docs/' 5 | next: '/docs/framework-samples/' 6 | editable: true 7 | --- 8 | 9 | # Project type use cases 10 | 11 | ## Starter project 12 | 13 | ## Static project 14 | 15 | ## PHP project 16 | -------------------------------------------------------------------------------- /content/docs/visitor-statistics.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Deploy Now offers a dashboard showing aggregated visitor statistics based on server logs.' 3 | sidebar: 'docs' 4 | prev: '/docs/deployment-viewer/' 5 | next: '/docs/cronjobs/' 6 | editable: true 7 | --- 8 | 9 | # Visitor statistics 10 | 11 | ![Visitor statistics](/10_Visitor_statistics_flat.gif) 12 | 13 | Deploy Now offers an easy to use dashboard that creates visitor statistics from your server logs. Visitor statistics do not create or read any cookies. The visitor's IP is transmitted when a page is requested, anonymized immediately after transmission and processed without personal reference. 14 | 15 | ## Available information 16 | 17 | - Referrer (previously visited website) 18 | - Requested website or file 19 | - Browser type and browser version 20 | - Operating system used 21 | - Device type used 22 | - Time of access 23 | - IP address in anonymized form (used only to determine the location of access) 24 | -------------------------------------------------------------------------------- /content/team/alexander-gaengel.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Alexander Gängel' 3 | image: 'alexander.svg' 4 | role: 'Fullstack Developer' 5 | github: 'https://github.com/agaengel' 6 | likes: 'Java, JavaScript, GoLang' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/fatih-ok.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Fatih Ok' 3 | image: 'fatih.svg' 4 | role: 'Infrastructure Engineer' 5 | github: 'https://github.com/fx35' 6 | likes: 'Infrastructure, Devops, Puppet, Docker, Coffee' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/josua-meier.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Josua Meier' 3 | image: 'josua.svg' 4 | role: 'Frontend Developer' 5 | github: 'https://github.com/JosuaMeier' 6 | likes: 'JavaScript, Vue, Material Design' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/marcel-solle.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Marcel Solle' 3 | image: 'marcel.svg' 4 | role: 'Frontend Developer' 5 | github: 'https://github.com/Ap3rtur3' 6 | likes: 'JavaScript, Vue, WebGL' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/markus-hunsalz.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Markus Hunsalz' 3 | image: 'markus.svg' 4 | role: 'Passionate Engineer' 5 | github: 'https://github.com/hunsalz' 6 | likes: 'ESP32, JavaScript, Vue, Gridsome' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/robin-mueller.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Robin Müller' 3 | image: 'robin.svg' 4 | role: 'Fullstack Developer' 5 | github: 'https://github.com/coder-hugo' 6 | likes: 'Java, Ruby, Puppet, Docker, Vue, Archlinux' 7 | --- 8 | -------------------------------------------------------------------------------- /content/team/roman-okon.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Roman Okon' 3 | image: 'roman.svg' 4 | role: 'Head of Product' 5 | github: 'https://github.com/ROKON1987' 6 | likes: 'Jira, Confluence, WooCommerce' 7 | --- 8 | -------------------------------------------------------------------------------- /gridsome.server.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const gridsomeConfig = require('./gridsome.config') 3 | 4 | function resolveAlias(filepath) { 5 | if (filepath.startsWith('@assets/')) { 6 | return filepath.replace('@assets', path.join(__dirname, 'src', 'assets')) 7 | } 8 | return filepath 9 | } 10 | 11 | module.exports = function (api) { 12 | api.loadSource(({ addCollection, addMetadata }) => { 13 | // Use the Data Store API here: https://gridsome.org/docs/data-store-api/ 14 | addMetadata('settings', gridsomeConfig.settings); 15 | }); 16 | 17 | api.createPages(({ createPage }) => { 18 | // Use the Pages API here: https://gridsome.org/docs/pages-api/ 19 | }); 20 | 21 | api.onCreateNode(options => { 22 | if (options.internal.typeName !== 'MarkdownPage') { 23 | return null; 24 | } 25 | // Set content type and timestamp for markdown pages 26 | options.contentType = options.fileInfo.directory.split('/')[0]; 27 | options.createdAt = options.created ? new Date(options.created).getTime() : false; 28 | // Set optional header/teaser images 29 | options.header = options.header ? resolveAlias(options.header) : null; 30 | options.teaser = options.teaser ? resolveAlias(options.teaser) : null; 31 | options.hidden = options.hidden ?? false; 32 | return options; 33 | }); 34 | }; 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deploy-now-documentation", 3 | "private": true, 4 | "description": "Documentation of Deploy Now", 5 | "keywords": [ 6 | "gridsome", 7 | "documentation", 8 | "cicd", 9 | "git-workflow", 10 | "deployment", 11 | "hosting", 12 | "Deploy Now", 13 | "IONOS" 14 | ], 15 | "license": "MIT", 16 | "scripts": { 17 | "build": "gridsome build", 18 | "develop": "gridsome develop", 19 | "explore": "gridsome explore", 20 | "lint": "eslint --ext .ts,.js,.vue src", 21 | "lint:fix": "eslint --ext .ts,.js,.vue src --fix", 22 | "cli": "DOTENV_CONFIG_PATH=.cli node -r dotenv/config ./cli/index.js" 23 | }, 24 | "dependencies": { 25 | "@fontsource/open-sans": "^4.5.11", 26 | "@fontsource/overpass": "^4.5.9", 27 | "@gridsome/plugin-sitemap": "^0.4.0", 28 | "gridsome": "^0.7.23", 29 | "gridsome-plugin-i18n": "^1.6.0", 30 | "gridsome-plugin-remark-container": "^0.1.3", 31 | "gridsome-plugin-remark-mermaid": "^1.0.1", 32 | "gridsome-plugin-robots-txt": "^1.0.2", 33 | "vue-material-design-icons": "^5.1.2", 34 | "vuex": "^3.6.2" 35 | }, 36 | "devDependencies": { 37 | "@gridsome/remark-prismjs": "^0.5.0", 38 | "@gridsome/source-filesystem": "^0.6.2", 39 | "@gridsome/transformer-remark": "^0.6.4", 40 | "@noxify/gridsome-remark-table-align": "^1.0.0", 41 | "dotenv": "^16.0.1", 42 | "enquirer": "^2.3.6", 43 | "eslint": "^7.32.0", 44 | "eslint-plugin-gridsome": "^1.6.2", 45 | "eslint-plugin-vue": "^9.1.1", 46 | "fuse.js": "^6.6.2", 47 | "gridsome-plugin-htaccess": "^0.2.1", 48 | "gridsome-plugin-service-worker": "^0.2.8", 49 | "gridsome-plugin-windicss": "^1.0.7", 50 | "node-sass": "^6.0.1", 51 | "prism-themes": "^1.9.0", 52 | "sass-loader": "^10.1.1", 53 | "slugify": "^1.6.5", 54 | "vue-eslint-parser": "^9.0.3" 55 | }, 56 | "engines": { 57 | "node": "^14" 58 | }, 59 | "repository": { 60 | "type": "git", 61 | "url": "https://github.com/ionos-deploy-now/documentation" 62 | }, 63 | "bugs": { 64 | "url": "https://github.com/ionos-deploy-now/documentation/issues" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/assets/blog/DPNW_GH_coverimage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/DPNW_GH_coverimage@2x.png -------------------------------------------------------------------------------- /src/assets/blog/DPNW_dev.to— Staging@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/DPNW_dev.to— Staging@2x.png -------------------------------------------------------------------------------- /src/assets/blog/DPNW_dev.to—jekyll@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/DPNW_dev.to—jekyll@2x.png -------------------------------------------------------------------------------- /src/assets/blog/agency-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/agency-cover.png -------------------------------------------------------------------------------- /src/assets/blog/api-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/api-cover.png -------------------------------------------------------------------------------- /src/assets/blog/deploy-now-darkmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/deploy-now-darkmode.png -------------------------------------------------------------------------------- /src/assets/blog/deploy-now-php-launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/deploy-now-php-launch.png -------------------------------------------------------------------------------- /src/assets/blog/dpnw-react-ssg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/dpnw-react-ssg.jpg -------------------------------------------------------------------------------- /src/assets/blog/git-intro-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/git-intro-cover.png -------------------------------------------------------------------------------- /src/assets/blog/github-blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/github-blog.png -------------------------------------------------------------------------------- /src/assets/blog/githubactions-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/githubactions-cover.png -------------------------------------------------------------------------------- /src/assets/blog/githubactions-lighthouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/githubactions-lighthouse.png -------------------------------------------------------------------------------- /src/assets/blog/laravel-header2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/laravel-header2x.png -------------------------------------------------------------------------------- /src/assets/blog/laravel-vs-symfony.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/laravel-vs-symfony.png -------------------------------------------------------------------------------- /src/assets/blog/multi-deployments-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/multi-deployments-cover.png -------------------------------------------------------------------------------- /src/assets/blog/screenshot-lighthouse-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/screenshot-lighthouse-1.png -------------------------------------------------------------------------------- /src/assets/blog/screenshot-lighthouse-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/src/assets/blog/screenshot-lighthouse-2.png -------------------------------------------------------------------------------- /src/components/Banner.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 54 | -------------------------------------------------------------------------------- /src/components/BlogTeaser.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /src/components/DeployNow.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/components/Dots.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 74 | -------------------------------------------------------------------------------- /src/components/EditLink.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | query { 19 | metadata { 20 | settings { 21 | github 22 | branch 23 | } 24 | } 25 | } 26 | 27 | 28 | 56 | -------------------------------------------------------------------------------- /src/components/JobSearchLink.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 28 | -------------------------------------------------------------------------------- /src/components/LayoutFooter.vue: -------------------------------------------------------------------------------- 1 | 78 | 79 | 88 | -------------------------------------------------------------------------------- /src/components/LayoutHeader.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 66 | query { 67 | metadata { 68 | siteName 69 | settings { 70 | web 71 | github 72 | branch 73 | twitter 74 | nav { 75 | links { 76 | path 77 | title 78 | } 79 | } 80 | } 81 | } 82 | } 83 | 84 | 85 | 129 | -------------------------------------------------------------------------------- /src/components/NextPrevLinks.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 58 | -------------------------------------------------------------------------------- /src/components/OnThisPage.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 129 | -------------------------------------------------------------------------------- /src/components/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 35 | query Sidebar { 36 | metadata { 37 | settings { 38 | nav { 39 | links { 40 | path 41 | title 42 | } 43 | } 44 | sidebar { 45 | name 46 | sections { 47 | title 48 | items 49 | external { 50 | title 51 | path 52 | } 53 | } 54 | } 55 | } 56 | } 57 | allMarkdownPage { 58 | edges { 59 | node { 60 | path 61 | title 62 | } 63 | } 64 | } 65 | } 66 | 67 | 68 | 100 | -------------------------------------------------------------------------------- /src/components/TeamMember.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 53 | 54 | 57 | -------------------------------------------------------------------------------- /src/components/ToggleDarkMode.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 67 | -------------------------------------------------------------------------------- /src/components/content/Blog.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 25 | -------------------------------------------------------------------------------- /src/components/content/Documentation.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 36 | -------------------------------------------------------------------------------- /src/components/home/Features.vue: -------------------------------------------------------------------------------- 1 | 32 | -------------------------------------------------------------------------------- /src/components/home/Hero.vue: -------------------------------------------------------------------------------- 1 | 42 | -------------------------------------------------------------------------------- /src/components/home/Samples.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 53 | 54 | 95 | -------------------------------------------------------------------------------- /src/components/home/Team.vue: -------------------------------------------------------------------------------- 1 | 28 | -------------------------------------------------------------------------------- /src/components/home/Workflow.vue: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /src/layouts/Default.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 37 | query { 38 | metadata { 39 | siteName 40 | } 41 | } 42 | 43 | 44 | 110 | -------------------------------------------------------------------------------- /src/libs/seo.js: -------------------------------------------------------------------------------- 1 | export function metaInfo({ title, description }) { 2 | return { 3 | title: title, 4 | meta: [ 5 | { 6 | name: 'description', 7 | content: description, 8 | }, 9 | { 10 | key: 'og:title', 11 | name: 'og:title', 12 | content: title, 13 | }, 14 | { 15 | key: 'og:description', 16 | name: 'og:description', 17 | content: description, 18 | }, 19 | { 20 | key: 'twitter:title', 21 | name: 'twitter:title', 22 | content: title, 23 | }, 24 | { 25 | key: 'twitter:description', 26 | name: 'twitter:description', 27 | content: description, 28 | }, 29 | ], 30 | script: [], 31 | }; 32 | } 33 | 34 | export class JsonLd { 35 | static wrapper(data) { 36 | return { 37 | type: 'application/ld+json', 38 | json: Object.assign(JsonLd.defaults(), data), 39 | } 40 | } 41 | 42 | static defaults() { 43 | return { 44 | '@context': 'https://schema.org', 45 | }; 46 | } 47 | 48 | static blogPost(data = {}) { 49 | return JsonLd.wrapper({ 50 | '@type': 'BlogPosting', 51 | headline: data.headline || data.title, 52 | mainEntityOfPage: { 53 | '@type': 'WebPage', 54 | '@id': data.url, 55 | }, 56 | datePublished: data.createdAt, 57 | publisher: { 58 | '@type': 'Organization', 59 | name: 'IONOS SE', 60 | }, 61 | articleBody: data.content, 62 | }); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/libs/util.js: -------------------------------------------------------------------------------- 1 | export function formatDate(timestamp, lang) { 2 | const date = new Date(timestamp); 3 | const year = date.getFullYear() 4 | const month = `${date.getMonth() + 1}`.padStart(2, '0') 5 | const day = `${date.getDate()}`.padStart(2, '0') 6 | if (lang === 'de') { 7 | return [day, month, year].join('.'); 8 | } 9 | return [month, day, year].join('/'); 10 | } 11 | 12 | export function capitalize(string) { 13 | const str = `${string}`; 14 | return str.charAt(0).toUpperCase() + str.slice(1); 15 | } 16 | 17 | export function stripProtocol(url) { 18 | return `${url}`.replace(/https?:\/\//, ''); 19 | } 20 | -------------------------------------------------------------------------------- /src/locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "header": { 3 | "login": "Login" 4 | }, 5 | "footer": { 6 | "imprint": "Legal information", 7 | "privacy-policy": "Privacy policy", 8 | "terms-and-conditions": "T&Cs", 9 | "company-name": "IONOS SE" 10 | }, 11 | "edit-link": { 12 | "text": "Suggest changes to this page" 13 | }, 14 | "home-features": { 15 | "overline": "Feature release presentation", 16 | "title": "Deploy your PHP App to powerful infrastucture in a few clicks", 17 | "text": "Learn how Deploy Now enables easy workflow configuration for PHP frameworks like Laravel and Symfony and get to know our team.", 18 | "button": "About PHP Projects" 19 | }, 20 | "home-hero": { 21 | "h1": "Hosting, made for developers", 22 | "h2": "Git push, build, deploy.", 23 | "deploy-now": "Deploy now.", 24 | "description": "Deploy Static Sites, Single Page Applications and PHP Apps directly via GitHub Actions to IONOS' global infrastructure.", 25 | "getting-started": { 26 | "title": "Getting started", 27 | "text": "Connect a repo and set up a deployment" 28 | }, 29 | "deploy-sample": { 30 | "title": "Deploy a sample", 31 | "text": "Sample repos for Laravel, Hugo & Co" 32 | }, 33 | "blog": { 34 | "title": "Blog", 35 | "text": "The latest news from our team" 36 | } 37 | }, 38 | "home-samples": { 39 | "overline": "One platform for all your projects", 40 | "title": "The home for your Static Site, Single Page Application or PHP App", 41 | "sample-button": "Deploy a sample", 42 | "sign-up-button": "Sign up" 43 | }, 44 | "home-team": { 45 | "overline": "We are the team - We are deploy now", 46 | "title": "Developed just for devs:
Meet the IONOS experts behind Deploy Now", 47 | "button": "Get in touch" 48 | }, 49 | "home-workflow": { 50 | "overline": "Continuous deployment & easy staging", 51 | "title": "The ideal workflow for you, your team and your clients", 52 | "text": "Want to preview changes before they go live? Simply set up multiple feature branches as staging deployments. View changes live via a preview link before merging them back.", 53 | "button": "More about staging" 54 | }, 55 | "on-this-page": { 56 | "title": "On this page" 57 | }, 58 | "search": { 59 | "title": "Search documentation", 60 | "placeholder": "Search documentation...", 61 | "no-results": "No results for {query}." 62 | }, 63 | "display-mode": { 64 | "toggle-dark-mode": "Toggle darkmode" 65 | }, 66 | "about-us": { 67 | "title": "Hi there!
We're the Deploy Now team.", 68 | "text": "Our company asked us to build a product that we’d use ourselves, so we did. Our mission is to connect the GitHub community to the powerful hosting platform that we engineered in-house.", 69 | "ionos-title": "Who is IONOS?", 70 | "ionos-text": "Headquartered in Germany, IONOS offers web hosting, domain and cloud products in Europe and North America. IONOS manages more than 8 million customer contracts and hosts over 12 million domains in its own regional data centers. Customers in all markets have access to personal 24/7 support in their own language.", 71 | "feedback-title": "Feedback appreciated", 72 | "feedback-text": "Got ideas, need help or missing a feature? We’re still working on Deploy Now and would love to hear what you think. Use the feedback button in the product or send an email to deploynow-support@ionos.com.", 73 | "team-title": "Meet the team" 74 | }, 75 | "blog": { 76 | "title": "Blog", 77 | "timeToRead": "{time} minute read | {time} minutes read", 78 | "back": "Back to overview" 79 | }, 80 | "404": { 81 | "title": "Oh no! There is nothing here.", 82 | "back": "Go back" 83 | }, 84 | "job-offer": { 85 | "team-title": "This could be you", 86 | "team-subtitle": "Want to be part of the team?", 87 | "banner-title": "We are hiring", 88 | "banner-subtitle": "Join our team and become part of Deploy Now", 89 | "banner-link": "Read more", 90 | "about-us-title": "We are hiring", 91 | "about-us-text": "We are looking for frontend, middleware and fullstack developers in our Karlsruhe office to drive Deploy Now further. Why are these jobs awesome? Everything is brand new and can be shaped from the beginning. All roadmap decisions are made toghether with the devs. Work with the latest tools and technologies and enjoy our beautiful new office building right new to Karlsruhe mainstation.", 92 | "frontend": "Frontend Developer", 93 | "full-stack": "Full Stack Developer", 94 | "middleware": "Middleware Developer" 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex'; 2 | import createStore from '~/store'; 3 | import DefaultLayout from '~/layouts/Default.vue'; 4 | import 'prism-themes/themes/prism-material-oceanic.css'; 5 | import 'prismjs/plugins/line-numbers/prism-line-numbers.css' 6 | import 'gridsome-plugin-remark-container/themes/classic.css'; 7 | import '@fontsource/open-sans/latin-400.css'; 8 | import '@fontsource/open-sans/latin-600.css'; 9 | import '@fontsource/open-sans/latin-800.css'; 10 | import '@fontsource/overpass/400.css'; 11 | import '@fontsource/overpass/600.css'; 12 | import '@fontsource/overpass/700.css'; 13 | import '~/assets/styles/app.scss'; 14 | 15 | export default function (Vue, { router, head, appOptions }) { 16 | Vue.use(Vuex); 17 | appOptions.store = createStore(); 18 | 19 | // Set default layout as a global component 20 | Vue.component('Layout', DefaultLayout); 21 | 22 | // Add meta data to global head 23 | //head.link.push({ 24 | // rel: 'preconnect', 25 | // href: 'https://fonts.gstatic.com', 26 | //}); 27 | head.meta.push({ 28 | name: 'google-site-verification', 29 | content: 'UtLaJ4v0UZBDPJVc8DqCyiUPSSz9TtMroKmflhpH2eo', 30 | }) 31 | 32 | // Add meta data to each page 33 | router.beforeEach((to, _from, next) => { 34 | head.meta.push({ 35 | key: 'og:url', 36 | name: 'og:url', 37 | content: process.env.GRIDSOME_BASE_PATH + to.path, 38 | }); 39 | next(); 40 | }); 41 | } 42 | -------------------------------------------------------------------------------- /src/pages/404.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | -------------------------------------------------------------------------------- /src/pages/AboutUs.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 51 | query { 52 | allMarkdownPage(filter: { contentType: { eq: "team" } }) { 53 | edges { 54 | node { 55 | name 56 | role 57 | image 58 | github 59 | likes 60 | } 61 | } 62 | } 63 | } 64 | 65 | 66 | 96 | -------------------------------------------------------------------------------- /src/pages/Blog.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | query { 22 | allMarkdownPage(filter: { contentType: { eq: "blog" } }) { 23 | edges { 24 | node { 25 | path 26 | title 27 | teaser 28 | excerpt 29 | description 30 | contentType 31 | timeToRead 32 | tags 33 | author 34 | createdAt 35 | hidden 36 | } 37 | } 38 | } 39 | } 40 | 41 | 42 | 72 | -------------------------------------------------------------------------------- /src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 34 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex'; 2 | 3 | export default function createStore() { 4 | return new Vuex.Store({ 5 | state: { 6 | headerHeight: 0, 7 | searchFocused: false, 8 | sidebarOpen: false, 9 | }, 10 | getters: { 11 | headerHeight: state => state.headerHeight, 12 | searchFocused: state => state.searchFocused, 13 | sidebarOpen: state => state.sidebarOpen, 14 | sidebarStyle: state => { 15 | return { 16 | top: `${state.headerHeight}px`, 17 | height: `calc(100vh - ${state.headerHeight}px)`, 18 | }; 19 | }, 20 | }, 21 | mutations: { 22 | setHeaderHeight(state, headerHeight) { 23 | state.headerHeight = headerHeight; 24 | }, 25 | setSearchFocused(state, isFocused) { 26 | state.searchFocused = isFocused; 27 | }, 28 | setSidebarOpen(state, isOpen) { 29 | state.sidebarOpen = isOpen; 30 | }, 31 | }, 32 | actions: { 33 | setHeaderHeight({ commit }, headerHeight) { 34 | commit('setHeaderHeight', headerHeight); 35 | }, 36 | setSearchFocused({ commit }, isFocused) { 37 | commit('setSearchFocused', isFocused); 38 | }, 39 | setSidebarOpen({ commit }, isOpen) { 40 | commit('setSidebarOpen', isOpen); 41 | }, 42 | }, 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /src/templates/MarkdownPage.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | query ($id: ID!) { 22 | markdownPage(id: $id) { 23 | id 24 | title 25 | description 26 | path 27 | fileInfo { 28 | path 29 | } 30 | editable 31 | timeToRead 32 | content 33 | contentType 34 | header 35 | sidebar 36 | next 37 | prev 38 | headings { 39 | depth 40 | value 41 | anchor 42 | } 43 | } 44 | allMarkdownPage { 45 | edges { 46 | node { 47 | path 48 | title 49 | } 50 | } 51 | } 52 | } 53 | 54 | 55 | 100 | -------------------------------------------------------------------------------- /src/transformers/table-transformer.js: -------------------------------------------------------------------------------- 1 | //const { selectAll } = require('unist-util-select'); 2 | const map = require('unist-util-map'); 3 | //const toHast = require('mdast-util-to-hast'); 4 | 5 | const addClasses = (node, classes) => { 6 | node.data = node.data || {}; 7 | node.data.hProperties = node.data.hProperties || {}; 8 | node.data.hProperties.className = node.data.hProperties.className || []; 9 | node.data.hProperties.className.push(classes); 10 | return node; 11 | }; 12 | 13 | function wrapNode(node) { 14 | const wrapper = Object.assign({}, node, { 15 | type: 'paragraph', 16 | children: [node], 17 | data: { 18 | //hName: 'div', 19 | }, 20 | }) 21 | delete node.position; 22 | return addClasses(wrapper,`${node.type}-wrapper`); 23 | } 24 | 25 | module.exports = function () { 26 | return async function transform(tree) { 27 | return map(tree, (node) => { 28 | if (node.type === 'table') console.log('----------\nNode: ', node); 29 | const newNode = node.type === 'table' ? wrapNode(node) : node; 30 | if (node.type === 'table') { 31 | console.log('new node:', newNode, newNode.children[0]); 32 | } 33 | return newNode 34 | }); 35 | }; 36 | }; 37 | -------------------------------------------------------------------------------- /static/02_From_sample_build_flat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/02_From_sample_build_flat.gif -------------------------------------------------------------------------------- /static/02_From_sample_detection_flat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/02_From_sample_detection_flat.gif -------------------------------------------------------------------------------- /static/03_From_existing_respository_flat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/03_From_existing_respository_flat.gif -------------------------------------------------------------------------------- /static/04_PHP_apps_via_GitHub.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/04_PHP_apps_via_GitHub.gif -------------------------------------------------------------------------------- /static/08_Deployment_viewer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/08_Deployment_viewer.gif -------------------------------------------------------------------------------- /static/09_View_files_and_logs_flat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/09_View_files_and_logs_flat.gif -------------------------------------------------------------------------------- /static/10_Visitor_statistics_flat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/10_Visitor_statistics_flat.gif -------------------------------------------------------------------------------- /static/MultiDeployments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/MultiDeployments.gif -------------------------------------------------------------------------------- /static/add-prod-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/add-prod-deployment.png -------------------------------------------------------------------------------- /static/chucknorris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/chucknorris.png -------------------------------------------------------------------------------- /static/confirm-configuration.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/confirm-configuration.jpg -------------------------------------------------------------------------------- /static/console-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/console-1.png -------------------------------------------------------------------------------- /static/console-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/console-2.png -------------------------------------------------------------------------------- /static/deploy-now-php-launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/deploy-now-php-launch.png -------------------------------------------------------------------------------- /static/domain-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/domain-select.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/favicon.ico -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/favicon.png -------------------------------------------------------------------------------- /static/fruchtec-architecture-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/fruchtec-architecture-lg.png -------------------------------------------------------------------------------- /static/fruchtec-architecture-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/fruchtec-architecture-sm.png -------------------------------------------------------------------------------- /static/git-workflow.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/git-workflow.jpeg -------------------------------------------------------------------------------- /static/github-connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/github-connected.png -------------------------------------------------------------------------------- /static/github-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/github-workflow.png -------------------------------------------------------------------------------- /static/githubactions-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/githubactions-cover.png -------------------------------------------------------------------------------- /static/how-apis-work.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/how-apis-work.jpeg -------------------------------------------------------------------------------- /static/how-http-works-browser.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/how-http-works-browser.jpeg -------------------------------------------------------------------------------- /static/http-request-api.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/http-request-api.jpeg -------------------------------------------------------------------------------- /static/http-request.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/http-request.jpeg -------------------------------------------------------------------------------- /static/jekyll-buildsteps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/jekyll-buildsteps.png -------------------------------------------------------------------------------- /static/jokeresult.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/jokeresult.png -------------------------------------------------------------------------------- /static/logos/angular.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/logos/hexo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/logos/jekyll.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 18 | 19 | 21 | 22 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /static/logos/laravel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/logos/nuxt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/logos/symfony.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/logos/vue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/nextjs-app-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/nextjs-app-install.png -------------------------------------------------------------------------------- /static/phpmenu3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/phpmenu3.gif -------------------------------------------------------------------------------- /static/project-details.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/project-details.jpg -------------------------------------------------------------------------------- /static/screenshot-lighthouse-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/screenshot-lighthouse-1.png -------------------------------------------------------------------------------- /static/screenshot-lighthouse-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/screenshot-lighthouse-2.png -------------------------------------------------------------------------------- /static/source-selection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/source-selection.jpg -------------------------------------------------------------------------------- /static/staging.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/staging.jpg -------------------------------------------------------------------------------- /static/team/octocat.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /static/whitepaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/whitepaper.png -------------------------------------------------------------------------------- /static/wizard-angular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-angular.png -------------------------------------------------------------------------------- /static/wizard-astro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-astro.png -------------------------------------------------------------------------------- /static/wizard-css-framework1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-css-framework1.png -------------------------------------------------------------------------------- /static/wizard-css-framework2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-css-framework2.png -------------------------------------------------------------------------------- /static/wizard-deploy-from-own-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-deploy-from-own-repo.png -------------------------------------------------------------------------------- /static/wizard-docusaurus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-docusaurus.png -------------------------------------------------------------------------------- /static/wizard-ember.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-ember.png -------------------------------------------------------------------------------- /static/wizard-gatsby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-gatsby.png -------------------------------------------------------------------------------- /static/wizard-gridsome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-gridsome.png -------------------------------------------------------------------------------- /static/wizard-hexo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-hexo.png -------------------------------------------------------------------------------- /static/wizard-hugo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-hugo.png -------------------------------------------------------------------------------- /static/wizard-ionic-react.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-ionic-react.png -------------------------------------------------------------------------------- /static/wizard-jekyll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-jekyll.png -------------------------------------------------------------------------------- /static/wizard-jigsaw1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-jigsaw1.png -------------------------------------------------------------------------------- /static/wizard-jigsaw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-jigsaw2.png -------------------------------------------------------------------------------- /static/wizard-nextjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-nextjs.png -------------------------------------------------------------------------------- /static/wizard-nuxtjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-nuxtjs.png -------------------------------------------------------------------------------- /static/wizard-php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-php.png -------------------------------------------------------------------------------- /static/wizard-plain-html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-plain-html.png -------------------------------------------------------------------------------- /static/wizard-react.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-react.png -------------------------------------------------------------------------------- /static/wizard-svelte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-svelte.png -------------------------------------------------------------------------------- /static/wizard-vue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ionos-deploy-now/documentation/27ffa7558276812e8133f6cd4eae8723683c9dde/static/wizard-vue.png -------------------------------------------------------------------------------- /windi.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | theme: { 3 | fontFamily: { 4 | sans: ["Open Sans", "ui-sans-serif", "system-ui", "sans-serif"], 5 | headline: ["Overpass", "Open Sans", "ui-sans-serif", "system-ui", "sans-serif"], 6 | mono: ["Overpass Mono", "monospace"], 7 | }, 8 | extend: { 9 | screens: { 10 | xxl: "1400px", 11 | }, 12 | colors: { 13 | primary: "var(--color-primary)", 14 | secondary: "var(--color-secondary)", 15 | 'ionos-blue': "var(--color-ionos-blue)", 16 | midnight: "var(--color-midnight)", 17 | 'dark-midnight': "var(--color-dark-midnight)", 18 | ui: { 19 | primary: "var(--color-primary)", 20 | secondary: "var(--color-secondary)", 21 | background: "var(--color-ui-background)", 22 | sidebar: "var(--color-ui-sidebar)", 23 | typo: "var(--color-ui-typo)", 24 | border: "var(--color-ui-border)", 25 | headline: "var(--color-ui-headline)", 26 | overline: "var(--color-ui-overline)", 27 | }, 28 | }, 29 | }, 30 | container: { 31 | center: true, 32 | padding: '1rem', 33 | }, 34 | }, 35 | scan: { 36 | dirs: ["./"], 37 | exclude: ["node_modules", ".git", "dist", ".cache", ".temp"], 38 | }, 39 | preflight: { 40 | alias: { 41 | // add gridsome aliases 42 | "g-link": "a", 43 | "g-image": "img", 44 | }, 45 | }, 46 | }; 47 | --------------------------------------------------------------------------------