diff --git a/404.html b/404.html index 0e6166b3a1..73a82e0eae 100644 --- a/404.html +++ b/404.html @@ -26,22 +26,22 @@ - + - +
-

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + - + diff --git a/community/index.html b/community/index.html index 066408d54c..ed3561ef77 100644 --- a/community/index.html +++ b/community/index.html @@ -26,9 +26,9 @@ - + - + @@ -42,14 +42,14 @@
-

Qovery Community

+

Qovery Community

- + - + diff --git a/components/index.html b/components/index.html index 0bc201646f..8f2508dd92 100644 --- a/components/index.html +++ b/components/index.html @@ -26,9 +26,9 @@ - + - + @@ -42,14 +42,14 @@
-

Qovery Components

Components allow you to collect, transform, and route data with ease. Learn more.
The Qovery Logo
no components found
+

Qovery Components

Components allow you to collect, transform, and route data with ease. Learn more.
The Qovery Logo
no components found
- + - + diff --git a/contact/index.html b/contact/index.html index 7d64eaf654..087a14e3f5 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,9 +26,9 @@ - + - + @@ -42,14 +42,14 @@
-

Contact

Qovery is a Timber.io open-source product. You can contact the Qovery & Timber team using any of the options below.
+

Contact

Qovery is a Timber.io open-source product. You can contact the Qovery & Timber team using any of the options below.
- + - + diff --git a/d9a4c8ef.017392de.js b/d9a4c8ef.017392de.js new file mode 100644 index 0000000000..e6e3d0a9ac --- /dev/null +++ b/d9a4c8ef.017392de.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[242],{394:function(e,n,a){"use strict";a.r(n),a.d(n,"frontMatter",(function(){return s})),a.d(n,"metadata",(function(){return b})),a.d(n,"rightToc",(function(){return p})),a.d(n,"default",(function(){return u}));var t=a(1),o=a(9),r=(a(0),a(440)),l=a(452),c=a(458),i=a(439),s={last_modified_on:"2024-01-02",title:"CLI",description:"How to use the Qovery CLI (Command Line Interface)"},b={id:"using-qovery/interface/cli",title:"CLI",description:"How to use the Qovery CLI (Command Line Interface)",source:"@site/docs/using-qovery/interface/cli.md",permalink:"/docs/using-qovery/interface/cli",sidebar:"docs",previous:{title:"Web interface",permalink:"/docs/using-qovery/interface/web-interface"},next:{title:"REST API",permalink:"/docs/using-qovery/interface/rest-api"}},p=[{value:"First usage",id:"first-usage",children:[{value:"Install",id:"install",children:[]},{value:"Sign up",id:"sign-up",children:[]},{value:"Help",id:"help",children:[]}]},{value:"Context",id:"context",children:[{value:"Set New Context",id:"set-new-context",children:[]},{value:"Print Current Context",id:"print-current-context",children:[]}]},{value:"Log",id:"log",children:[{value:"Follow Logs",id:"follow-logs",children:[]}]},{value:"Status",id:"status",children:[]},{value:"Console",id:"console",children:[]},{value:"Shell",id:"shell",children:[{value:"Pass a command",id:"pass-a-command",children:[]},{value:"Shell in a dedicated pod",id:"shell-in-a-dedicated-pod",children:[]},{value:"Shell in a dedicated container",id:"shell-in-a-dedicated-container",children:[]}]},{value:"Port-forward",id:"port-forward",children:[{value:"Port-forward a dedicated pod",id:"port-forward-a-dedicated-pod",children:[]}]},{value:"Generate API token",id:"generate-api-token",children:[]},{value:"Managing services and environments",id:"managing-services-and-environments",children:[{value:"Environment",id:"environment",children:[]}]},{value:"Managing the Deployment Pipeline",id:"managing-the-deployment-pipeline",children:[{value:"List stages",id:"list-stages",children:[]},{value:"Add a stage",id:"add-a-stage",children:[]},{value:"Modify a stage",id:"modify-a-stage",children:[]},{value:"Delete a stage",id:"delete-a-stage",children:[]},{value:"Change stage for a service",id:"change-stage-for-a-service",children:[]}]},{value:"Support",id:"support",children:[]}],d={rightToc:p};function u(e){var n=e.components,a=Object(o.a)(e,["components"]);return Object(r.b)("wrapper",Object(t.a)({},d,a,{components:n,mdxType:"MDXLayout"}),Object(r.b)(i.a,{type:"success",mdxType:"Alert"},Object(r.b)("p",null,"Use Infrastructure as Code (IaC) with ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"/docs/using-qovery/integration/terraform/"}),"Terraform")," and our ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"/docs/using-qovery/interface/rest-api/"}),"REST API")," to manage Qovery and deploy your apps.")),Object(r.b)("p",null,"Qovery provides a very easy to use CLI (Command Line Interface) designed to fit the developer workflow perfectly."),Object(r.b)("hr",null),Object(r.b)("p",null,"The purpose of the CLI is to integrate seamlessly with your development workflow:"),Object(r.b)("ol",null,Object(r.b)("li",{parentName:"ol"},"Write code"),Object(r.b)("li",{parentName:"ol"},"Commit"),Object(r.b)("li",{parentName:"ol"},Object(r.b)("strong",{parentName:"li"},"Qovery")," - deploy a new version of your application"),Object(r.b)("li",{parentName:"ol"},Object(r.b)("strong",{parentName:"li"},"Qovery CLI")," - check the status of your application"),Object(r.b)("li",{parentName:"ol"},Object(r.b)("strong",{parentName:"li"},"Qovery CLI")," - debug your application"),Object(r.b)("li",{parentName:"ol"},"Repeat")),Object(r.b)("h2",{id:"first-usage"},"First usage"),Object(r.b)("h3",{id:"install"},"Install"),Object(r.b)(l.a,{centered:!0,className:"rounded",defaultValue:"linux",placeholder:"Select your OS",select:!1,size:null,values:[{group:"Platforms",label:"Linux",value:"linux"},{group:"Platforms",label:"MacOS",value:"macos"},{group:"Platforms",label:"Windows",value:"windows"},{group:"Platforms",label:"Docker",value:"docker"}],mdxType:"Tabs"},Object(r.b)(c.a,{value:"linux",mdxType:"TabItem"},Object(r.b)(l.a,{centered:!0,className:"rounded",defaultValue:"universal",values:[{label:"*nix",value:"universal"},{label:"Arch Linux",value:"arch"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(r.b)(c.a,{value:"universal",mdxType:"TabItem"},Object(r.b)("p",null,"To download and install Qovery CLI on any Linux distribution:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ curl -s https://get.qovery.com | bash\n"))),Object(r.b)(c.a,{value:"arch",mdxType:"TabItem"},Object(r.b)("p",null,"Qovery is part of ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://aur.archlinux.org/packages"}),"AUR")," packages, so you can install it with ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Jguer/yay"}),"yay"),":"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ yay qovery-cli\n"))),Object(r.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(r.b)("p",null,"Install the Qovery CLI on Linux manually by downloading the ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to a folder into your shell ",Object(r.b)("inlineCode",{parentName:"p"},"PATH"),".")))),Object(r.b)(c.a,{value:"macos",mdxType:"TabItem"},Object(r.b)(l.a,{centered:!0,className:"rounded",defaultValue:"homebrew",values:[{label:"Homebrew",value:"homebrew"},{label:"Script",value:"script"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(r.b)(c.a,{value:"homebrew",mdxType:"TabItem"},Object(r.b)("p",null,"The common solution to install a command line binary on the MacOS is to use ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://brew.sh/"}),"Homebrew"),"."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"# Add Qovery brew repository\n$ brew tap Qovery/qovery-cli\n\n# Install the CLI\n$ brew install qovery-cli\n"))),Object(r.b)(c.a,{value:"script",mdxType:"TabItem"},Object(r.b)("p",null,"To download and install Qovery CLI from the command line:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ curl -s https://get.qovery.com | bash\n"))),Object(r.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(r.b)("p",null,"Install the Qovery CLI on Mac OS manually by downloading the ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to a folder into your shell ",Object(r.b)("inlineCode",{parentName:"p"},"PATH"),".")))),Object(r.b)(c.a,{value:"windows",mdxType:"TabItem"},Object(r.b)(l.a,{centered:!0,className:"rounded",defaultValue:"scoop",values:[{label:"Scoop",value:"scoop"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(r.b)(c.a,{value:"scoop",mdxType:"TabItem"},Object(r.b)("p",null,"The classic way to install binaries on Windows is to use ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://scoop.sh/"}),"Scoop"),"."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"# Add Qovery bucket\n$ scoop bucket add qovery https://github.com/Qovery/scoop-qovery-cli\n\n# Install the CLI\n$ scoop install qovery-cli\n"))),Object(r.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(r.b)("p",null,"Install the Qovery CLI on Windows manually by downloading the ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to\n",Object(r.b)("inlineCode",{parentName:"p"},"C:\\Windows"),".")))),Object(r.b)(c.a,{value:"docker",mdxType:"TabItem"},Object(r.b)("p",null,"Install Docker on your local machine and run the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"# Pull and Run the latest Qovery CLI\n$ docker run ghcr.io/qovery/qovery-cli:latest help\n")),Object(r.b)("p",null,"Change ",Object(r.b)("inlineCode",{parentName:"p"},"latest")," by the version you want to use. For example, to use the version 0.58.4, run:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ docker run ghcr.io/qovery/qovery-cli:0.58.4 help\n")),Object(r.b)("p",null,"Note: ",Object(r.b)("inlineCode",{parentName:"p"},"ghcr.io")," is the ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/pkgs/container/qovery-cli"}),"GitHub Container Registry"),"."))),Object(r.b)("h3",{id:"sign-up"},"Sign up"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"# Sign up and sign in command\n$ qovery auth\n")),Object(r.b)(i.a,{type:"info",mdxType:"Alert"},Object(r.b)("p",null,"If you are using an environment without access to GUI or a browser, you can use headless authentication instead:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"# Sign up and sign in command\n$ qovery auth --headless\n"))),Object(r.b)("p",null,"Your browser window with sign-in options will open."),Object(r.b)("p",{align:"center"},Object(r.b)("img",{src:"/img/qovery_signup.svg",alt:"Qovery Sign-up page"})),Object(r.b)("p",null,Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/apps/qovery/installations/new"}),"Click here")," to authorize Qovery to clone and build your applications."),Object(r.b)("p",{align:"center"},Object(r.b)("img",{src:"/img/github_signup.svg",alt:"Connect Github"})),Object(r.b)("p",null,"Congratulations, you are logged-in."),Object(r.b)("h3",{id:"help"},"Help"),Object(r.b)("p",null,"You can see all the commands available by executing:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery help\n")),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash",metastring:'title="Help output"',title:'"Help','output"':!0}),'$ qovery help\nA Command-line Interface of the Qovery platform\n\nUsage:\n qovery [command]\n\nAvailable Commands:\n application Manage applications\n auth Log in to Qovery\n completion Generate the autocompletion script for the specified shell\n console Opens the application in Qovery Console in your browser\n container Manage containers\n context Manage CLI context\n cronjob Manage cronjobs\n database Manage databases\n env Manage Environment Variables and Secrets\n environment Manage environments\n help Help about any command\n lifecycle Manage lifecycle jobs\n log Print your application logs\n service Manage services\n shell Connect to an application container\n status Print the status of your application\n token Generate an API token\n upgrade Upgrade Qovery CLI to latest version\n version Print installed version of the Qovery CLI\n\nFlags:\n -h, --help help for qovery\n\nUse "qovery [command] --help" for more information about a command.\n')),Object(r.b)("h2",{id:"context"},"Context"),Object(r.b)("p",null,"Context command lets you configure the CLI to work with your chosen application. Before executing other commands, you need first to set up the context.\nThe context is then remembered and used by the CLI. You can configure a new context anytime by running the ",Object(r.b)("inlineCode",{parentName:"p"},"qovery context set")," command."),Object(r.b)("p",null,"Most of the commands support an inline context set allowing you to directly pass the URL of the application you wants to interact with."),Object(r.b)("p",null,"Example:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell https://console.qovery.com/organization/51927012-8377-4e0f-84cf-7f5f38a0154b/project/a6545d50-69a3-4966-89cc-4c0bfb6d3448/environment/c9ac549b-a855-4d3b-b652-d68d5f1fea11/application/820ca0a3-08bf-42c1-8ad2-540714ad657f/general\n# this is the url of my back-end application\n\nOrganization | My orga\nProject | R&D / Backend\nEnvironment | prod\nServiceLevel | back-end\nServiceType | application\n\n$ ls\n...\n")),Object(r.b)("h3",{id:"set-new-context"},"Set New Context"),Object(r.b)("p",null,"To set a new context, type ",Object(r.b)("inlineCode",{parentName:"p"},"qovery context set"),":"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery context set\nQovery: Current context:\nOrganization | Qovery\nProject | test\nEnvironment | development\nApplication | website\n\nQovery: Select new context\nOrganization:\n\u2714 Qovery\nProject:\n\u2714 admin\nEnvironment:\n\u2714 main\nApplication:\n\u2714 app\n\nQovery: New context:\nOrganization | Qovery\nProject | admin\nEnvironment | main\nApplication | app\n")),Object(r.b)("h3",{id:"print-current-context"},"Print Current Context"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery context\nQovery: Current context:\nOrganization | Qovery\nProject | admin\nEnvironment | main\nApplication | app\n\nQovery: You can set a new context using 'qovery context set'.\n")),Object(r.b)("h2",{id:"log"},"Log"),Object(r.b)("p",null,"Log command allows you to display the application logs."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery log\n TIME MESSAGE\n Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16\n Jul 15 08:46:13.019721 at Array.forEach ()\n Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)\n Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)\n # ... the rest of logs\n")),Object(r.b)("p",null,"By default, the last 1000 logs is displayed."),Object(r.b)("h3",{id:"follow-logs"},"Follow Logs"),Object(r.b)("p",null,"To make the CLI follow your logs, use ",Object(r.b)("inlineCode",{parentName:"p"},"-f")," flag:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery log -f\n TIME MESSAGE\n Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16\n Jul 15 08:46:13.019721 at Array.forEach ()\n Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)\n Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)\n # ... the rest of logs\n")),Object(r.b)("p",null,"This will make the CLI follow your application logs and append any new logs till you use ",Object(r.b)("inlineCode",{parentName:"p"},"CTRL+C"),"."),Object(r.b)("h2",{id:"status"},"Status"),Object(r.b)("p",null,"Status command lets you print the basic status of your application."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery status\n15 Jul 21 10:55 CEST\nApplication | Backend\nStatus | RUNNING\n")),Object(r.b)("h2",{id:"console"},"Console"),Object(r.b)("p",null,"Console command quickly opens the Qovery Console in your browser to let you display more information about your application."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery console\nQovery: Opening https://console.qovery.com/platform/organization/your-org/projects/your-proj/environments/your-env/applications/your-app/summary\n")),Object(r.b)("h2",{id:"shell"},"Shell"),Object(r.b)("p",null,"Shell command allows you to open a connection and execute commands directly on the container running application."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell\n/ # ls\nbin media srv\ndev mnt sys\ndocker-entrypoint.d opt tmp\ndocker-entrypoint.sh proc usr\netc root var\nhome run www\nlib sbin\n")),Object(r.b)(i.a,{type:"info",mdxType:"Alert"},"Keep in mind these limitations when using this feature:",Object(r.b)("ul",null,Object(r.b)("li",null,"Install a process reaper as pid one in your container (i.e: dumb-init), as you may leave zoombie process in your container if your shell terminate unproperly (i.e: ctrl+c, cnx restart). This is a known issue with kubernetes exec to leave process alive after attach is closed;"),Object(r.b)("li",null,"shell is force closed after [1 hour, 1GB transmitted];"),Object(r.b)("li",null,"we use SH by default. To have auto-completion, start bash."))),Object(r.b)(i.a,{type:"info",mdxType:"Alert"},"The width of the terminal is limited to 80 characters. But you can resize it once you are inside the application with one of these commands:",Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"COLUMNS=200 tput init\nstty cols 200\n"))),Object(r.b)("h3",{id:"pass-a-command"},"Pass a command"),Object(r.b)("p",null,"To pass a command, you can use the ",Object(r.b)("inlineCode",{parentName:"p"},"--command")," or ",Object(r.b)("inlineCode",{parentName:"p"},"-c")," argument followed by your command."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --command ls\nbin media srv\ndev mnt sys\ndocker-entrypoint.d opt tmp\ndocker-entrypoint.sh proc usr\netc root var\nhome run www\nlib sbin\n")),Object(r.b)("p",null,"To pass several arguments, you can separate them with a comma or send different ",Object(r.b)("inlineCode",{parentName:"p"},"--command"),"."),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"qovery shell --command ls --command -l"),"\n",Object(r.b)("inlineCode",{parentName:"p"},"qovery shell --command ls,-l"),"\n",Object(r.b)("inlineCode",{parentName:"p"},"qovery shell -c ls,-l")),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --command ls --command -l\ndrwxr-xr-x 2 root root 4096 Nov 30 09:32 bin\ndrwxr-xr-x 5 root root 360 Dec 21 09:46 dev\ndrwxr-xr-x 1 root root 41 Dec 20 20:13 docker-entrypoint.d\n-rwxr-xr-x 1 root root 1620 Dec 20 20:13 docker-entrypoint.sh\ndrwxr-xr-x 1 root root 25 Dec 21 09:46 etc\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 home\ndrwxr-xr-x 1 root root 61 Dec 20 22:11 lib\ndrwxr-xr-x 5 root root 44 Nov 30 09:32 media\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 mnt\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 opt\ndr-xr-xr-x 209 root root 0 Dec 21 09:46 proc\ndrwx------ 1 root root 26 Dec 21 10:38 root\ndrwxr-xr-x 1 root root 23 Dec 21 09:46 run\ndrwxr-xr-x 2 root root 4096 Nov 30 09:32 sbin\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 srv\ndr-xr-xr-x 13 root root 0 Dec 21 09:46 sys\ndrwxrwxrwt 2 root root 6 Nov 30 09:32 tmp\ndrwxr-xr-x 1 root root 66 Nov 30 09:32 usr\ndrwxr-xr-x 1 root root 19 Nov 30 09:32 var\ndrwxr-xr-x 2 root root 59 Dec 21 09:45 www\n")),Object(r.b)("h3",{id:"shell-in-a-dedicated-pod"},"Shell in a dedicated pod"),Object(r.b)("p",null,"If your application is running on several pods, you can shell directly in a dedicated one by using the ",Object(r.b)("inlineCode",{parentName:"p"},"--pod")," or ",Object(r.b)("inlineCode",{parentName:"p"},"-p")," argument followed by your pod name."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11\n")),Object(r.b)("p",null,"NOTE: you can get the list of pods by running the ",Object(r.b)("inlineCode",{parentName:"p"},"qovery list-pods")," command."),Object(r.b)("h3",{id:"shell-in-a-dedicated-container"},"Shell in a dedicated container"),Object(r.b)("p",null,"If you have several containers in your pod, you can shell directly in a dedicated one by using the ",Object(r.b)("inlineCode",{parentName:"p"},"--container")," argument followed by your container name."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --container app-5f65fb5c4-frontend\n")),Object(r.b)("h2",{id:"port-forward"},"Port-forward"),Object(r.b)("p",null,"Port-forward command allows you to port-forward all the traffic on your local machine to a remote resource available on a Qovery environment. This mechanism allows developers to create a secure, encrypted tunnel from their local machine to the application or databases hosted in the cloud. "),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),'$ qovery port-forward -p 8000:80 #your_local_port:your_remote_port\nInfo: Current context:\nOrganization | Qovery Prod\nProject | R&D / Frontend\nEnvironment | prod\nService | console\nType | application\n\nInfo: Continue with port-forward command using this context ?\nPlease type "yes" to validate context: yes\n\nListening on 127.0.0.1:8000 => 80\n')),Object(r.b)("p",null,"The port-forward feature works with any ",Object(r.b)("inlineCode",{parentName:"p"},"application"),", ",Object(r.b)("inlineCode",{parentName:"p"},"Cronjob"),", ",Object(r.b)("inlineCode",{parentName:"p"},"Lifecycle job")," or ",Object(r.b)("inlineCode",{parentName:"p"},"database")," (Container or Managed) deployed with Qovery. For ",Object(r.b)("inlineCode",{parentName:"p"},"Managed database")," instances on AWS, once the port-forwarded is activated, you must specify ~ ",Object(r.b)("inlineCode",{parentName:"p"},"--tls")," and ",Object(r.b)("inlineCode",{parentName:"p"},"--tls-insecure")," in your database connection command since localhost is not the valid hostname."),Object(r.b)("h3",{id:"port-forward-a-dedicated-pod"},"Port-forward a dedicated pod"),Object(r.b)("p",null,"If your application is running on several pods, you can port-forward to a dedicated one by using the ",Object(r.b)("inlineCode",{parentName:"p"},"--pod")," argument followed by your pod name."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery port-forward -p 8000:80 -pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11\n")),Object(r.b)("p",null,"NOTE: you can get the list of pods by running the ",Object(r.b)("inlineCode",{parentName:"p"},"qovery list-pods")," command."),Object(r.b)("h2",{id:"generate-api-token"},"Generate API token"),Object(r.b)("p",null,"To use the Qovery API you will need to generate an authentication token. To generate an API token you can install the CLI and type"),Object(r.b)(i.a,{type:"warning",mdxType:"Alert"},Object(r.b)("p",null,"Never share your API token with anyone.")),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery token\n\nQovery: Select organization\nOrganization:\n\u2714 My Organization\nChoose a token name\nToken name: Romaric\nChoose a token description\nToken description: used for Github Actions\nQovery: ---- Never share this authentication token and keep it secure ----\nQovery: qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691\nQovery: ---- Never share this authentication token and keep it secure ----\n")),Object(r.b)("p",null,"To use your token and list your organizations."),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-shell"}),"curl -X GET -H 'Authorization: Token qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691' https://api.qovery.com/organization\n")),Object(r.b)(i.a,{type:"info",mdxType:"Alert"},Object(r.b)("p",null,"The token can be used to interact programmatically with our API (directly, via our Terraform Provider etc..).\nIf you get a 424 error while trying to create new applications from one of your git repository, please make sure that the Organization Owner has access to the repository you are configuring for your app.")),Object(r.b)("p",null,"Check out our ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://api-doc.qovery.com"}),"API documentation")),Object(r.b)("h2",{id:"managing-services-and-environments"},"Managing services and environments"),Object(r.b)("p",null,"The CLI allows you to manage and deploy the environment and services within your organization"),Object(r.b)("p",null,"###\xa0application, container, lifecycle, cronjob\nThese commands allow you to manage all these services via the CLI. You can run the following actions on these services:"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"cancel: Cancel the service deployment"),Object(r.b)("li",{parentName:"ul"},"delete: Delete a service"),Object(r.b)("li",{parentName:"ul"},"deploy: Deploy a service"),Object(r.b)("li",{parentName:"ul"},"list: List the service of the specified type"),Object(r.b)("li",{parentName:"ul"},"redeploy: Redeploy a service (already deployed before)"),Object(r.b)("li",{parentName:"ul"},"stop: Stop a service")),Object(r.b)("p",null,"Each action allows you to specify additional parameters to define the service you want to modify (you can find them via the --help command) "),Object(r.b)("p",null,"Example: Listing applications and triggering a deployment"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),'$ qovery application list\nName | Type | Status | Last Update \nbackend | Application | STOPPED | 2023-02-02 14:48:05.339652 +0000 UTC\nfront-end | Application | STOPPED | 2023-02-09 14:04:38.079792 +0000 UTC\n\n$ qovery application deploy -n "backend"\nDeploying application backend in progress..\n\n$ qovery application list\nName | Type | Status | Last Update \nbackend | Application | RUNNING | 2023-02-13 12:59:23.228231 +0000 UTC\nfront-end | Application | STOPPED | 2023-02-09 14:04:38.079792 +0000 UTC\n')),Object(r.b)("h3",{id:"environment"},"Environment"),Object(r.b)("p",null,"The command ",Object(r.b)("inlineCode",{parentName:"p"},"environment")," allow you to manage a specific environment via the CLI. You can run the following actions on environments:"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"cancel: Cancel an environment deployment"),Object(r.b)("li",{parentName:"ul"},"clone: Clone an environment"),Object(r.b)("li",{parentName:"ul"},"delete: Delete an environment"),Object(r.b)("li",{parentName:"ul"},"deploy: Deploy an environment"),Object(r.b)("li",{parentName:"ul"},"list: List environments"),Object(r.b)("li",{parentName:"ul"},"redeploy: Redeploy an environment"),Object(r.b)("li",{parentName:"ul"},"stage: Manage deployment stages"),Object(r.b)("li",{parentName:"ul"},"stop: Stop an environment")),Object(r.b)("p",null,"Each action allows you to specify additional parameters to define the service you want to modify (you can find them via the --help command)"),Object(r.b)("p",null,"Example: Manage deployment stages and triggering deployment"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),'~ $ qovery environment stage list\n\n# deployment stage 1: "DATABASE DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nDATABASE | Redis\nDATABASE | DB\n\n\n# deployment stage 2: "JOB DEFAULT"\nRename me to avoid default/legacy ordering\n\n\n\n\n# deployment stage 3: "CONTAINER DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nCONTAINER | Rabbitmq\n\n\n# deployment stage 4: "APPLICATION DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nAPPLICATION | Backend\nAPPLICATION | Frontend\nAPPLICATION | Pablo Backend App\nAPPLICATION | API gateway\n\n~ $ qovery environment deploy\nEnvironment is deploying!\n')),Object(r.b)("h2",{id:"managing-the-deployment-pipeline"},"Managing the Deployment Pipeline"),Object(r.b)("p",null,"In the following sections we will describe how to modify the Deployment Pipeline. "),Object(r.b)("h3",{id:"list-stages"},"List stages"),Object(r.b)("p",null,"You can list all the stages of your environment by using the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage list\n")),Object(r.b)("h3",{id:"add-a-stage"},"Add a stage"),Object(r.b)("p",null,"You can add a new stage by using the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage create -n -d \n")),Object(r.b)("p",null,"Note that the stage will be added at the end of the pipeline (the highest number)"),Object(r.b)("h3",{id:"modify-a-stage"},"Modify a stage"),Object(r.b)("p",null,"You can modify a stage by using the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage edit -n --new-name --new-description \n")),Object(r.b)("h3",{id:"delete-a-stage"},"Delete a stage"),Object(r.b)("p",null,"You can modify a stage by using the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage delete -n \n")),Object(r.b)("h3",{id:"change-stage-for-a-service"},"Change stage for a service"),Object(r.b)("p",null,"You can modify the stage associated to a service by using the following command:"),Object(r.b)("pre",null,Object(r.b)("code",Object(t.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage move -n --stage \n")),Object(r.b)("h2",{id:"support"},"Support"),Object(r.b)("p",null,"Do you have any issues with Qovery CLI? ",Object(r.b)("a",Object(t.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/issues"}),"Open an issue"),"."))}u.isMDXComponent=!0},439:function(e,n,a){"use strict";a(441);var t=a(0),o=a.n(t),r=a(438),l=a.n(r);a(132);n.a=function(e){var n=e.children,a=e.classNames,t=e.fill,r=e.icon,c=e.type,i=null;switch(c){case"danger":i="alert-triangle";break;case"success":i="check-circle";break;case"warning":i="alert-triangle";break;default:i="info"}return o.a.createElement("div",{className:l()(a,"alert","alert--"+c,{"alert--fill":t,"alert--icon":!1!==r}),role:"alert"},!1!==r&&o.a.createElement("i",{className:l()("feather","icon-"+(r||i))}),n)}},452:function(e,n,a){"use strict";var t=a(1),o=(a(457),a(454),a(52),a(29),a(22),a(21),a(0)),r=a.n(o),l=a(462),c=a(438),i=a.n(c),s=a(446),b=a.n(s),p=a(461),d=37,u=39;function m(e){var n=e.block,a=e.centered,t=e.changeSelectedValue,o=e.className,l=e.handleKeydown,c=e.style,s=e.values,b=e.selectedValue,p=e.tabRefs;return r.a.createElement("div",{className:a?"tabs--centered":null},r.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:i()("tabs",o,{"tabs--block":n}),style:c},s.map((function(e){var n=e.value,a=e.label;return r.a.createElement("li",{role:"tab",tabIndex:"0","aria-selected":b===n,className:i()("tab-item",{"tab-item--active":b===n}),key:n,ref:function(e){return p.push(e)},onKeyDown:function(e){return l(p,e.target,e)},onFocus:function(){return t(n)},onClick:function(){return t(n)}},a)}))))}function h(e){var n=e.placeholder,a=e.selectedValue,t=e.changeSelectedValue,o=e.size,c=e.values,i=c;if(i[0].group){var s=_.groupBy(i,"group");i=Object.keys(s).map((function(e){return{label:e,options:s[e]}}))}return r.a.createElement(l.a,{className:"react-select-container react-select--"+o,classNamePrefix:"react-select",options:i,isClearable:a,placeholder:n,value:c.find((function(e){return e.value==a})),onChange:function(e){return t(e?e.value:null)}})}n.a=function(e){e.block,e.centered;var n=e.children,a=e.defaultValue,l=e.groupId,c=e.label,i=e.placeholder,s=e.select,y=e.size,g=(e.style,e.values),v=e.urlKey,O=Object(p.a)(),j=O.tabGroupChoices,f=O.setTabGroupChoices,w=Object(o.useState)(a),N=w[0],x=w[1];if(null!=l){var C=j[l];null!=C&&C!==N&&x(C)}var T=function(e){x(e),null!=l&&f(l,e)},I=[],k=function(e,n,a){switch(a.keyCode){case u:!function(e,n){var a=e.indexOf(n)+1;e[a]?e[a].focus():e[0].focus()}(e,n);break;case d:!function(e,n){var a=e.indexOf(n)-1;e[a]?e[a].focus():e[e.length-1].focus()}(e,n)}};return Object(o.useEffect)((function(){if("undefined"!=typeof window&&window.location&&v){var e=b.a.parse(window.location.search);e[v]&&x(e[v])}}),[]),r.a.createElement(r.a.Fragment,null,r.a.createElement("div",{className:"margin-bottom--"+(y||"md")},c&&r.a.createElement("div",{className:"margin-vert--sm"},c),g.length>1&&(s?r.a.createElement(h,Object(t.a)({changeSelectedValue:T,handleKeydown:k,placeholder:i,selectedValue:N,size:y,tabRefs:I},e)):r.a.createElement(m,Object(t.a)({changeSelectedValue:T,handleKeydown:k,selectedValue:N,tabRefs:I},e)))),o.Children.toArray(n).filter((function(e){return e.props.value===N}))[0])}},458:function(e,n,a){"use strict";var t=a(0),o=a.n(t);n.a=function(e){return o.a.createElement(o.a.Fragment,null,e.children)}}}]); \ No newline at end of file diff --git a/d9a4c8ef.e664c402.js b/d9a4c8ef.e664c402.js deleted file mode 100644 index 05d1530c51..0000000000 --- a/d9a4c8ef.e664c402.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[242],{394:function(e,n,t){"use strict";t.r(n),t.d(n,"frontMatter",(function(){return s})),t.d(n,"metadata",(function(){return b})),t.d(n,"rightToc",(function(){return p})),t.d(n,"default",(function(){return d}));var a=t(1),o=t(9),l=(t(0),t(440)),r=t(452),c=t(458),i=t(439),s={last_modified_on:"2023-12-21",title:"CLI",description:"How to use the Qovery CLI (Command Line Interface)"},b={id:"using-qovery/interface/cli",title:"CLI",description:"How to use the Qovery CLI (Command Line Interface)",source:"@site/docs/using-qovery/interface/cli.md",permalink:"/docs/using-qovery/interface/cli",sidebar:"docs",previous:{title:"Web interface",permalink:"/docs/using-qovery/interface/web-interface"},next:{title:"REST API",permalink:"/docs/using-qovery/interface/rest-api"}},p=[{value:"First usage",id:"first-usage",children:[{value:"Install",id:"install",children:[]},{value:"Sign up",id:"sign-up",children:[]},{value:"Help",id:"help",children:[]}]},{value:"Context",id:"context",children:[{value:"Set New Context",id:"set-new-context",children:[]},{value:"Print Current Context",id:"print-current-context",children:[]}]},{value:"Log",id:"log",children:[{value:"Follow Logs",id:"follow-logs",children:[]}]},{value:"Status",id:"status",children:[]},{value:"Console",id:"console",children:[]},{value:"Shell",id:"shell",children:[{value:"Pass a command",id:"pass-a-command",children:[]},{value:"Shell in a dedicated pod",id:"shell-in-a-dedicated-pod",children:[]},{value:"Shell in a dedicated container",id:"shell-in-a-dedicated-container",children:[]}]},{value:"Generate API token",id:"generate-api-token",children:[]},{value:"Managing services and environments",id:"managing-services-and-environments",children:[{value:"Environment",id:"environment",children:[]}]},{value:"Managing the Deployment Pipeline",id:"managing-the-deployment-pipeline",children:[{value:"List stages",id:"list-stages",children:[]},{value:"Add a stage",id:"add-a-stage",children:[]},{value:"Modify a stage",id:"modify-a-stage",children:[]},{value:"Delete a stage",id:"delete-a-stage",children:[]},{value:"Change stage for a service",id:"change-stage-for-a-service",children:[]}]},{value:"Support",id:"support",children:[]}],u={rightToc:p};function d(e){var n=e.components,t=Object(o.a)(e,["components"]);return Object(l.b)("wrapper",Object(a.a)({},u,t,{components:n,mdxType:"MDXLayout"}),Object(l.b)(i.a,{type:"success",mdxType:"Alert"},Object(l.b)("p",null,"Use Infrastructure as Code (IaC) with ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/integration/terraform/"}),"Terraform")," and our ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/interface/rest-api/"}),"REST API")," to manage Qovery and deploy your apps.")),Object(l.b)("p",null,"Qovery provides a very easy to use CLI (Command Line Interface) designed to fit the developer workflow perfectly."),Object(l.b)("hr",null),Object(l.b)("p",null,"The purpose of the CLI is to integrate seamlessly with your development workflow:"),Object(l.b)("ol",null,Object(l.b)("li",{parentName:"ol"},"Write code"),Object(l.b)("li",{parentName:"ol"},"Commit"),Object(l.b)("li",{parentName:"ol"},Object(l.b)("strong",{parentName:"li"},"Qovery")," - deploy a new version of your application"),Object(l.b)("li",{parentName:"ol"},Object(l.b)("strong",{parentName:"li"},"Qovery CLI")," - check the status of your application"),Object(l.b)("li",{parentName:"ol"},Object(l.b)("strong",{parentName:"li"},"Qovery CLI")," - debug your application"),Object(l.b)("li",{parentName:"ol"},"Repeat")),Object(l.b)("h2",{id:"first-usage"},"First usage"),Object(l.b)("h3",{id:"install"},"Install"),Object(l.b)(r.a,{centered:!0,className:"rounded",defaultValue:"linux",placeholder:"Select your OS",select:!1,size:null,values:[{group:"Platforms",label:"Linux",value:"linux"},{group:"Platforms",label:"MacOS",value:"macos"},{group:"Platforms",label:"Windows",value:"windows"},{group:"Platforms",label:"Docker",value:"docker"}],mdxType:"Tabs"},Object(l.b)(c.a,{value:"linux",mdxType:"TabItem"},Object(l.b)(r.a,{centered:!0,className:"rounded",defaultValue:"universal",values:[{label:"*nix",value:"universal"},{label:"Arch Linux",value:"arch"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(l.b)(c.a,{value:"universal",mdxType:"TabItem"},Object(l.b)("p",null,"To download and install Qovery CLI on any Linux distribution:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ curl -s https://get.qovery.com | bash\n"))),Object(l.b)(c.a,{value:"arch",mdxType:"TabItem"},Object(l.b)("p",null,"Qovery is part of ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://aur.archlinux.org/packages"}),"AUR")," packages, so you can install it with ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Jguer/yay"}),"yay"),":"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ yay qovery-cli\n"))),Object(l.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(l.b)("p",null,"Install the Qovery CLI on Linux manually by downloading the ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to a folder into your shell ",Object(l.b)("inlineCode",{parentName:"p"},"PATH"),".")))),Object(l.b)(c.a,{value:"macos",mdxType:"TabItem"},Object(l.b)(r.a,{centered:!0,className:"rounded",defaultValue:"homebrew",values:[{label:"Homebrew",value:"homebrew"},{label:"Script",value:"script"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(l.b)(c.a,{value:"homebrew",mdxType:"TabItem"},Object(l.b)("p",null,"The common solution to install a command line binary on the MacOS is to use ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://brew.sh/"}),"Homebrew"),"."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"# Add Qovery brew repository\n$ brew tap Qovery/qovery-cli\n\n# Install the CLI\n$ brew install qovery-cli\n"))),Object(l.b)(c.a,{value:"script",mdxType:"TabItem"},Object(l.b)("p",null,"To download and install Qovery CLI from the command line:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ curl -s https://get.qovery.com | bash\n"))),Object(l.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(l.b)("p",null,"Install the Qovery CLI on Mac OS manually by downloading the ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to a folder into your shell ",Object(l.b)("inlineCode",{parentName:"p"},"PATH"),".")))),Object(l.b)(c.a,{value:"windows",mdxType:"TabItem"},Object(l.b)(r.a,{centered:!0,className:"rounded",defaultValue:"scoop",values:[{label:"Scoop",value:"scoop"},{label:"Manual",value:"manual"}],mdxType:"Tabs"},Object(l.b)(c.a,{value:"scoop",mdxType:"TabItem"},Object(l.b)("p",null,"The classic way to install binaries on Windows is to use ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://scoop.sh/"}),"Scoop"),"."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"# Add Qovery bucket\n$ scoop bucket add qovery https://github.com/Qovery/scoop-qovery-cli\n\n# Install the CLI\n$ scoop install qovery-cli\n"))),Object(l.b)(c.a,{value:"manual",mdxType:"TabItem"},Object(l.b)("p",null,"Install the Qovery CLI on Windows manually by downloading the ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/releases"}),"latest release"),", and uncompress its content to\n",Object(l.b)("inlineCode",{parentName:"p"},"C:\\Windows"),".")))),Object(l.b)(c.a,{value:"docker",mdxType:"TabItem"},Object(l.b)("p",null,"Install Docker on your local machine and run the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"# Pull and Run the latest Qovery CLI\n$ docker run ghcr.io/qovery/qovery-cli:latest help\n")),Object(l.b)("p",null,"Change ",Object(l.b)("inlineCode",{parentName:"p"},"latest")," by the version you want to use. For example, to use the version 0.58.4, run:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ docker run ghcr.io/qovery/qovery-cli:0.58.4 help\n")),Object(l.b)("p",null,"Note: ",Object(l.b)("inlineCode",{parentName:"p"},"ghcr.io")," is the ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/pkgs/container/qovery-cli"}),"GitHub Container Registry"),"."))),Object(l.b)("h3",{id:"sign-up"},"Sign up"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"# Sign up and sign in command\n$ qovery auth\n")),Object(l.b)(i.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"If you are using an environment without access to GUI or a browser, you can use headless authentication instead:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"# Sign up and sign in command\n$ qovery auth --headless\n"))),Object(l.b)("p",null,"Your browser window with sign-in options will open."),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/qovery_signup.svg",alt:"Qovery Sign-up page"})),Object(l.b)("p",null,Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/apps/qovery/installations/new"}),"Click here")," to authorize Qovery to clone and build your applications."),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/github_signup.svg",alt:"Connect Github"})),Object(l.b)("p",null,"Congratulations, you are logged-in."),Object(l.b)("h3",{id:"help"},"Help"),Object(l.b)("p",null,"You can see all the commands available by executing:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery help\n")),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash",metastring:'title="Help output"',title:'"Help','output"':!0}),'$ qovery help\nA Command-line Interface of the Qovery platform\n\nUsage:\n qovery [command]\n\nAvailable Commands:\n application Manage applications\n auth Log in to Qovery\n completion Generate the autocompletion script for the specified shell\n console Opens the application in Qovery Console in your browser\n container Manage containers\n context Manage CLI context\n cronjob Manage cronjobs\n database Manage databases\n env Manage Environment Variables and Secrets\n environment Manage environments\n help Help about any command\n lifecycle Manage lifecycle jobs\n log Print your application logs\n service Manage services\n shell Connect to an application container\n status Print the status of your application\n token Generate an API token\n upgrade Upgrade Qovery CLI to latest version\n version Print installed version of the Qovery CLI\n\nFlags:\n -h, --help help for qovery\n\nUse "qovery [command] --help" for more information about a command.\n')),Object(l.b)("h2",{id:"context"},"Context"),Object(l.b)("p",null,"Context command lets you configure the CLI to work with your chosen application. Before executing other commands, you need first to set up the context.\nThe context is then remembered and used by the CLI. You can configure a new context anytime by running the ",Object(l.b)("inlineCode",{parentName:"p"},"qovery context set")," command."),Object(l.b)("h3",{id:"set-new-context"},"Set New Context"),Object(l.b)("p",null,"To set a new context, type ",Object(l.b)("inlineCode",{parentName:"p"},"qovery context set"),":"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery context set\nQovery: Current context:\nOrganization | Qovery\nProject | test\nEnvironment | development\nApplication | website\n\nQovery: Select new context\nOrganization:\n\u2714 Qovery\nProject:\n\u2714 admin\nEnvironment:\n\u2714 main\nApplication:\n\u2714 app\n\nQovery: New context:\nOrganization | Qovery\nProject | admin\nEnvironment | main\nApplication | app\n")),Object(l.b)("h3",{id:"print-current-context"},"Print Current Context"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery context\nQovery: Current context:\nOrganization | Qovery\nProject | admin\nEnvironment | main\nApplication | app\n\nQovery: You can set a new context using 'qovery context set'.\n")),Object(l.b)("h2",{id:"log"},"Log"),Object(l.b)("p",null,"Log command allows you to display the application logs."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery log\n TIME MESSAGE\n Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16\n Jul 15 08:46:13.019721 at Array.forEach ()\n Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)\n Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)\n # ... the rest of logs\n")),Object(l.b)("p",null,"By default, the last 1000 logs is displayed."),Object(l.b)("h3",{id:"follow-logs"},"Follow Logs"),Object(l.b)("p",null,"To make the CLI follow your logs, use ",Object(l.b)("inlineCode",{parentName:"p"},"-f")," flag:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery log -f\n TIME MESSAGE\n Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16\n Jul 15 08:46:13.019721 at Array.forEach ()\n Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)\n Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)\n # ... the rest of logs\n")),Object(l.b)("p",null,"This will make the CLI follow your application logs and append any new logs till you use ",Object(l.b)("inlineCode",{parentName:"p"},"CTRL+C"),"."),Object(l.b)("h2",{id:"status"},"Status"),Object(l.b)("p",null,"Status command lets you print the basic status of your application."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery status\n15 Jul 21 10:55 CEST\nApplication | Backend\nStatus | RUNNING\n")),Object(l.b)("h2",{id:"console"},"Console"),Object(l.b)("p",null,"Console command quickly opens the Qovery Console in your browser to let you display more information about your application."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery console\nQovery: Opening https://console.qovery.com/platform/organization/your-org/projects/your-proj/environments/your-env/applications/your-app/summary\n")),Object(l.b)("h2",{id:"shell"},"Shell"),Object(l.b)("p",null,"Shell command allows you to open a connection and execute commands directly on the container running application."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell\n/ # ls\nbin media srv\ndev mnt sys\ndocker-entrypoint.d opt tmp\ndocker-entrypoint.sh proc usr\netc root var\nhome run www\nlib sbin\n")),Object(l.b)(i.a,{type:"info",mdxType:"Alert"},"Keep in mind these limitations when using this feature:",Object(l.b)("ul",null,Object(l.b)("li",null,"Install a process reaper as pid one in your container (i.e: dumb-init), as you may leave zoombie process in your container if your shell terminate unproperly (i.e: ctrl+c, cnx restart). This is a known issue with kubernetes exec to leave process alive after attach is closed;"),Object(l.b)("li",null,"shell is force closed after [1 hour, 1GB transmitted];"),Object(l.b)("li",null,"we use SH by default. To have auto-completion, start bash."))),Object(l.b)(i.a,{type:"info",mdxType:"Alert"},"The width of the terminal is limited to 80 characters. But you can resize it once you are inside the application with one of these commands:",Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"COLUMNS=200 tput init\nstty cols 200\n"))),Object(l.b)("h3",{id:"pass-a-command"},"Pass a command"),Object(l.b)("p",null,"To pass a command, you can use the ",Object(l.b)("inlineCode",{parentName:"p"},"--command")," or ",Object(l.b)("inlineCode",{parentName:"p"},"-c")," argument followed by your command."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --command ls\nbin media srv\ndev mnt sys\ndocker-entrypoint.d opt tmp\ndocker-entrypoint.sh proc usr\netc root var\nhome run www\nlib sbin\n")),Object(l.b)("p",null,"To pass several arguments, you can separate them with a comma or send different ",Object(l.b)("inlineCode",{parentName:"p"},"--command"),"."),Object(l.b)("p",null,Object(l.b)("inlineCode",{parentName:"p"},"qovery shell --command ls --command -l"),"\n",Object(l.b)("inlineCode",{parentName:"p"},"qovery shell --command ls,-l"),"\n",Object(l.b)("inlineCode",{parentName:"p"},"qovery shell -c ls,-l")),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --command ls --command -l\ndrwxr-xr-x 2 root root 4096 Nov 30 09:32 bin\ndrwxr-xr-x 5 root root 360 Dec 21 09:46 dev\ndrwxr-xr-x 1 root root 41 Dec 20 20:13 docker-entrypoint.d\n-rwxr-xr-x 1 root root 1620 Dec 20 20:13 docker-entrypoint.sh\ndrwxr-xr-x 1 root root 25 Dec 21 09:46 etc\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 home\ndrwxr-xr-x 1 root root 61 Dec 20 22:11 lib\ndrwxr-xr-x 5 root root 44 Nov 30 09:32 media\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 mnt\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 opt\ndr-xr-xr-x 209 root root 0 Dec 21 09:46 proc\ndrwx------ 1 root root 26 Dec 21 10:38 root\ndrwxr-xr-x 1 root root 23 Dec 21 09:46 run\ndrwxr-xr-x 2 root root 4096 Nov 30 09:32 sbin\ndrwxr-xr-x 2 root root 6 Nov 30 09:32 srv\ndr-xr-xr-x 13 root root 0 Dec 21 09:46 sys\ndrwxrwxrwt 2 root root 6 Nov 30 09:32 tmp\ndrwxr-xr-x 1 root root 66 Nov 30 09:32 usr\ndrwxr-xr-x 1 root root 19 Nov 30 09:32 var\ndrwxr-xr-x 2 root root 59 Dec 21 09:45 www\n")),Object(l.b)("h3",{id:"shell-in-a-dedicated-pod"},"Shell in a dedicated pod"),Object(l.b)("p",null,"If your application is running on several pods, you can shell directly in a dedicated one by using the ",Object(l.b)("inlineCode",{parentName:"p"},"--pod")," or ",Object(l.b)("inlineCode",{parentName:"p"},"-p")," argument followed by your pod name."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11\n")),Object(l.b)("h3",{id:"shell-in-a-dedicated-container"},"Shell in a dedicated container"),Object(l.b)("p",null,"If you have several containers in your pod, you can shell directly in a dedicated one by using the ",Object(l.b)("inlineCode",{parentName:"p"},"--container")," argument followed by your container name."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery shell --container app-5f65fb5c4-frontend\n")),Object(l.b)("h2",{id:"generate-api-token"},"Generate API token"),Object(l.b)("p",null,"To use the Qovery API you will need to generate an authentication token. To generate an API token you can install the CLI and type"),Object(l.b)(i.a,{type:"warning",mdxType:"Alert"},Object(l.b)("p",null,"Never share your API token with anyone.")),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"$ qovery token\n\nQovery: Select organization\nOrganization:\n\u2714 My Organization\nChoose a token name\nToken name: Romaric\nChoose a token description\nToken description: used for Github Actions\nQovery: ---- Never share this authentication token and keep it secure ----\nQovery: qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691\nQovery: ---- Never share this authentication token and keep it secure ----\n")),Object(l.b)("p",null,"To use your token and list your organizations."),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-shell"}),"curl -X GET -H 'Authorization: Token qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691' https://api.qovery.com/organization\n")),Object(l.b)(i.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"The token can be used to interact programmatically with our API (directly, via our Terraform Provider etc..).\nIf you get a 424 error while trying to create new applications from one of your git repository, please make sure that the Organization Owner has access to the repository you are configuring for your app.")),Object(l.b)("p",null,"Check out our ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://api-doc.qovery.com"}),"API documentation")),Object(l.b)("h2",{id:"managing-services-and-environments"},"Managing services and environments"),Object(l.b)("p",null,"The CLI allows you to manage and deploy the environment and services within your organization"),Object(l.b)("p",null,"###\xa0application, container, lifecycle, cronjob\nThese commands allow you to manage all these services via the CLI. You can run the following actions on these services:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"cancel: Cancel the service deployment"),Object(l.b)("li",{parentName:"ul"},"delete: Delete a service"),Object(l.b)("li",{parentName:"ul"},"deploy: Deploy a service"),Object(l.b)("li",{parentName:"ul"},"list: List the service of the specified type"),Object(l.b)("li",{parentName:"ul"},"redeploy: Redeploy a service (already deployed before)"),Object(l.b)("li",{parentName:"ul"},"stop: Stop a service")),Object(l.b)("p",null,"Each action allows you to specify additional parameters to define the service you want to modify (you can find them via the --help command) "),Object(l.b)("p",null,"Example: Listing applications and triggering a deployment"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),'$ qovery application list\nName | Type | Status | Last Update \nbackend | Application | STOPPED | 2023-02-02 14:48:05.339652 +0000 UTC\nfront-end | Application | STOPPED | 2023-02-09 14:04:38.079792 +0000 UTC\n\n$ qovery application deploy -n "backend"\nDeploying application backend in progress..\n\n$ qovery application list\nName | Type | Status | Last Update \nbackend | Application | RUNNING | 2023-02-13 12:59:23.228231 +0000 UTC\nfront-end | Application | STOPPED | 2023-02-09 14:04:38.079792 +0000 UTC\n')),Object(l.b)("h3",{id:"environment"},"Environment"),Object(l.b)("p",null,"The command ",Object(l.b)("inlineCode",{parentName:"p"},"environment")," allow you to manage a specific environment via the CLI. You can run the following actions on environments:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"cancel: Cancel an environment deployment"),Object(l.b)("li",{parentName:"ul"},"clone: Clone an environment"),Object(l.b)("li",{parentName:"ul"},"delete: Delete an environment"),Object(l.b)("li",{parentName:"ul"},"deploy: Deploy an environment"),Object(l.b)("li",{parentName:"ul"},"list: List environments"),Object(l.b)("li",{parentName:"ul"},"redeploy: Redeploy an environment"),Object(l.b)("li",{parentName:"ul"},"stage: Manage deployment stages"),Object(l.b)("li",{parentName:"ul"},"stop: Stop an environment")),Object(l.b)("p",null,"Each action allows you to specify additional parameters to define the service you want to modify (you can find them via the --help command)"),Object(l.b)("p",null,"Example: Manage deployment stages and triggering deployment"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),'~ $ qovery environment stage list\n\n# deployment stage 1: "DATABASE DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nDATABASE | Redis\nDATABASE | DB\n\n\n# deployment stage 2: "JOB DEFAULT"\nRename me to avoid default/legacy ordering\n\n\n\n\n# deployment stage 3: "CONTAINER DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nCONTAINER | Rabbitmq\n\n\n# deployment stage 4: "APPLICATION DEFAULT"\nRename me to avoid default/legacy ordering\n\nType | Name\nAPPLICATION | Backend\nAPPLICATION | Frontend\nAPPLICATION | Pablo Backend App\nAPPLICATION | API gateway\n\n~ $ qovery environment deploy\nEnvironment is deploying!\n')),Object(l.b)("h2",{id:"managing-the-deployment-pipeline"},"Managing the Deployment Pipeline"),Object(l.b)("p",null,"In the following sections we will describe how to modify the Deployment Pipeline. "),Object(l.b)("h3",{id:"list-stages"},"List stages"),Object(l.b)("p",null,"You can list all the stages of your environment by using the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage list\n")),Object(l.b)("h3",{id:"add-a-stage"},"Add a stage"),Object(l.b)("p",null,"You can add a new stage by using the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage create -n -d \n")),Object(l.b)("p",null,"Note that the stage will be added at the end of the pipeline (the highest number)"),Object(l.b)("h3",{id:"modify-a-stage"},"Modify a stage"),Object(l.b)("p",null,"You can modify a stage by using the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage edit -n --new-name --new-description \n")),Object(l.b)("h3",{id:"delete-a-stage"},"Delete a stage"),Object(l.b)("p",null,"You can modify a stage by using the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage delete -n \n")),Object(l.b)("h3",{id:"change-stage-for-a-service"},"Change stage for a service"),Object(l.b)("p",null,"You can modify the stage associated to a service by using the following command:"),Object(l.b)("pre",null,Object(l.b)("code",Object(a.a)({parentName:"pre"},{className:"language-bash"}),"qovery environment stage move -n --stage \n")),Object(l.b)("h2",{id:"support"},"Support"),Object(l.b)("p",null,"Do you have any issues with Qovery CLI? ",Object(l.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Qovery/qovery-cli/issues"}),"Open an issue"),"."))}d.isMDXComponent=!0},439:function(e,n,t){"use strict";t(441);var a=t(0),o=t.n(a),l=t(438),r=t.n(l);t(132);n.a=function(e){var n=e.children,t=e.classNames,a=e.fill,l=e.icon,c=e.type,i=null;switch(c){case"danger":i="alert-triangle";break;case"success":i="check-circle";break;case"warning":i="alert-triangle";break;default:i="info"}return o.a.createElement("div",{className:r()(t,"alert","alert--"+c,{"alert--fill":a,"alert--icon":!1!==l}),role:"alert"},!1!==l&&o.a.createElement("i",{className:r()("feather","icon-"+(l||i))}),n)}},452:function(e,n,t){"use strict";var a=t(1),o=(t(457),t(454),t(52),t(29),t(22),t(21),t(0)),l=t.n(o),r=t(462),c=t(438),i=t.n(c),s=t(446),b=t.n(s),p=t(461),u=37,d=39;function m(e){var n=e.block,t=e.centered,a=e.changeSelectedValue,o=e.className,r=e.handleKeydown,c=e.style,s=e.values,b=e.selectedValue,p=e.tabRefs;return l.a.createElement("div",{className:t?"tabs--centered":null},l.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:i()("tabs",o,{"tabs--block":n}),style:c},s.map((function(e){var n=e.value,t=e.label;return l.a.createElement("li",{role:"tab",tabIndex:"0","aria-selected":b===n,className:i()("tab-item",{"tab-item--active":b===n}),key:n,ref:function(e){return p.push(e)},onKeyDown:function(e){return r(p,e.target,e)},onFocus:function(){return a(n)},onClick:function(){return a(n)}},t)}))))}function h(e){var n=e.placeholder,t=e.selectedValue,a=e.changeSelectedValue,o=e.size,c=e.values,i=c;if(i[0].group){var s=_.groupBy(i,"group");i=Object.keys(s).map((function(e){return{label:e,options:s[e]}}))}return l.a.createElement(r.a,{className:"react-select-container react-select--"+o,classNamePrefix:"react-select",options:i,isClearable:t,placeholder:n,value:c.find((function(e){return e.value==t})),onChange:function(e){return a(e?e.value:null)}})}n.a=function(e){e.block,e.centered;var n=e.children,t=e.defaultValue,r=e.groupId,c=e.label,i=e.placeholder,s=e.select,y=e.size,g=(e.style,e.values),v=e.urlKey,O=Object(p.a)(),j=O.tabGroupChoices,f=O.setTabGroupChoices,N=Object(o.useState)(t),w=N[0],x=N[1];if(null!=r){var C=j[r];null!=C&&C!==w&&x(C)}var T=function(e){x(e),null!=r&&f(r,e)},I=[],k=function(e,n,t){switch(t.keyCode){case d:!function(e,n){var t=e.indexOf(n)+1;e[t]?e[t].focus():e[0].focus()}(e,n);break;case u:!function(e,n){var t=e.indexOf(n)-1;e[t]?e[t].focus():e[e.length-1].focus()}(e,n)}};return Object(o.useEffect)((function(){if("undefined"!=typeof window&&window.location&&v){var e=b.a.parse(window.location.search);e[v]&&x(e[v])}}),[]),l.a.createElement(l.a.Fragment,null,l.a.createElement("div",{className:"margin-bottom--"+(y||"md")},c&&l.a.createElement("div",{className:"margin-vert--sm"},c),g.length>1&&(s?l.a.createElement(h,Object(a.a)({changeSelectedValue:T,handleKeydown:k,placeholder:i,selectedValue:w,size:y,tabRefs:I},e)):l.a.createElement(m,Object(a.a)({changeSelectedValue:T,handleKeydown:k,selectedValue:w,tabRefs:I},e)))),o.Children.toArray(n).filter((function(e){return e.props.value===w}))[0])}},458:function(e,n,t){"use strict";var a=t(0),o=t.n(a);n.a=function(e){return o.a.createElement(o.a.Fragment,null,e.children)}}}]); \ No newline at end of file diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index feac8a1a33..9fb56f389c 100644 --- a/docs/getting-started/basic-concepts/index.html +++ b/docs/getting-started/basic-concepts/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
-

Basic Concepts

Organization

An Organization is the workspace where devops and developers can collaborate across many projects at once and it usually corresponds to your company. A user can have access to one or more organizations and have different roles & permissions assigned within it thanks to our RBAC system.

More information about Organization here.

Cluster

At Qovery, when we refer to Cluster, we mean Kubernetes cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

More information about Cluster here.

Managed Cluster

A Managed Cluster is a Kubernetes cluster managed by Qovery. It means that Qovery will create the cluster for you and will take care of the cluster lifecycle (creation, upgrade, deletion etc..). Zero maintenance for you.

Self-Managed Cluster

A Self-Managed Cluster is a Kubernetes cluster managed by you. It means that you have to create the cluster yourself and you have to take care of the cluster lifecycle (creation, upgrade, deletion etc..). You can install Qovery on your cluster to let Qovery manage the deployment of your applications on your cluster.

Project

A Project allows you to group together a set of services interacting between each other to serve a common purpose. For example, you can have one project to run your main application (composed by a front-end, back-end and a db) and another project to manage your internal tools.

Services can be then organized into environments so that you can have different versions of the same service running within your project (production, staging, fix for issue X etc..)

One organization can have more than one project and you can customize the access to your project thanks to our RBAC system.

More information about Project here.

Environment

An Environment allows you to group together a set of services having a specific version, usually based on a branch of your repository. For example, you can have one Production environment (all the services pointing to the main branch), one Staging environment (all services pointing to the staging branch) etc..

Your production environment runs 24/7 while your other environments may not need to run all day long. By setting a Deployment Rule on your environment you can automatically start/stop your non-production environments and thus reduce your cloud provider bill.

Environments let's you chose on which cluster your services should be deployed.

More information about Environment here.

Preview Environment (or Ephemeral Environment)

A Preview Environment is an ephemeral environment allowing you to get early feedback on your application changes before the changes are merged into production. A dedicated preview environment can be automatically created at each new PR on your repository to validate the change. The environment is automatically deleted once the PR is merged or closed.

More information about Preview Environment here.

Service

A Service is the basic unit that you can add to an environment. Each service has an associated git repository (or registry) and a commit (or image_name:tag) that will be used to deploy the service on the cluster.

Five types of services exists:

  • Application: it allows you to run your long-running workloads. We usually call them "Containers" when the source code is stored on an image registry. More information about Applications here
  • Database: it allows you to deploy a database. Qovery allows you to deploy a container and a cloud provider managed version. More information about Databases here
  • CronJob: it allows you to deploy a cronjob on your cluster and execute it based on the selected schedule. More information about Cronjob here
  • Lifecycle: it allows you to execute your code based on the events happening on your environment (Start, Stop, Delete etc..). With the right code, it can be used to seed your database when the environment is created or manage the lifecycle of any external resource (via a terraform file, pulumi code etc..). More information about Lifecycle here
  • Helm: it allows you to deploy a helm chart on your cluster. More information about Helm here

Deployment

A Deployment is the operation allowing you to gather your code and make it runs on your cluster. Qovery can pull your repository, generate a docker image and spawn the necessary resources on your clusters to make your application run. You can find more information within this section.

You can monitor the execution of the deployment via the Deployment Logs while you can monitor the execution of your application thanks to the streamed Live Logs directly from the Qovery interface.

High Level Schema

Basic Structure

+

Basic Concepts

Organization

An Organization is the workspace where devops and developers can collaborate across many projects at once and it usually corresponds to your company. A user can have access to one or more organizations and have different roles & permissions assigned within it thanks to our RBAC system.

More information about Organization here.

Cluster

At Qovery, when we refer to Cluster, we mean Kubernetes cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

More information about Cluster here.

Managed Cluster

A Managed Cluster is a Kubernetes cluster managed by Qovery. It means that Qovery will create the cluster for you and will take care of the cluster lifecycle (creation, upgrade, deletion etc..). Zero maintenance for you.

Self-Managed Cluster

A Self-Managed Cluster is a Kubernetes cluster managed by you. It means that you have to create the cluster yourself and you have to take care of the cluster lifecycle (creation, upgrade, deletion etc..). You can install Qovery on your cluster to let Qovery manage the deployment of your applications on your cluster.

Project

A Project allows you to group together a set of services interacting between each other to serve a common purpose. For example, you can have one project to run your main application (composed by a front-end, back-end and a db) and another project to manage your internal tools.

Services can be then organized into environments so that you can have different versions of the same service running within your project (production, staging, fix for issue X etc..)

One organization can have more than one project and you can customize the access to your project thanks to our RBAC system.

More information about Project here.

Environment

An Environment allows you to group together a set of services having a specific version, usually based on a branch of your repository. For example, you can have one Production environment (all the services pointing to the main branch), one Staging environment (all services pointing to the staging branch) etc..

Your production environment runs 24/7 while your other environments may not need to run all day long. By setting a Deployment Rule on your environment you can automatically start/stop your non-production environments and thus reduce your cloud provider bill.

Environments let's you chose on which cluster your services should be deployed.

More information about Environment here.

Preview Environment (or Ephemeral Environment)

A Preview Environment is an ephemeral environment allowing you to get early feedback on your application changes before the changes are merged into production. A dedicated preview environment can be automatically created at each new PR on your repository to validate the change. The environment is automatically deleted once the PR is merged or closed.

More information about Preview Environment here.

Service

A Service is the basic unit that you can add to an environment. Each service has an associated git repository (or registry) and a commit (or image_name:tag) that will be used to deploy the service on the cluster.

Five types of services exists:

  • Application: it allows you to run your long-running workloads. We usually call them "Containers" when the source code is stored on an image registry. More information about Applications here
  • Database: it allows you to deploy a database. Qovery allows you to deploy a container and a cloud provider managed version. More information about Databases here
  • CronJob: it allows you to deploy a cronjob on your cluster and execute it based on the selected schedule. More information about Cronjob here
  • Lifecycle: it allows you to execute your code based on the events happening on your environment (Start, Stop, Delete etc..). With the right code, it can be used to seed your database when the environment is created or manage the lifecycle of any external resource (via a terraform file, pulumi code etc..). More information about Lifecycle here
  • Helm: it allows you to deploy a helm chart on your cluster. More information about Helm here

Deployment

A Deployment is the operation allowing you to gather your code and make it runs on your cluster. Qovery can pull your repository, generate a docker image and spawn the necessary resources on your clusters to make your application run. You can find more information within this section.

You can monitor the execution of the deployment via the Deployment Logs while you can monitor the execution of your application thanks to the streamed Live Logs directly from the Qovery interface.

High Level Schema

Basic Structure

- + - + diff --git a/docs/getting-started/deploy-my-app/index.html b/docs/getting-started/deploy-my-app/index.html index 8ddf5f7cbc..3e0f573462 100644 --- a/docs/getting-started/deploy-my-app/index.html +++ b/docs/getting-started/deploy-my-app/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
-

Deploy my application

Check our video tutorial to learn how to quickly deploy your application with Qovery!

Deploy your application

Advanced

Once you know how to deploy a simple application, take a look at how to go beyond with Qovery.

Advanced
Contents
Resources
    +

    Deploy my application

    Check our video tutorial to learn how to quickly deploy your application with Qovery!

    Deploy your application

    Advanced

    Once you know how to deploy a simple application, take a look at how to go beyond with Qovery.

    Advanced
    Contents
    Resources
      - + - + diff --git a/docs/getting-started/how-qovery-works/index.html b/docs/getting-started/how-qovery-works/index.html index 9cec00b670..c1a8c47c3f 100644 --- a/docs/getting-started/how-qovery-works/index.html +++ b/docs/getting-started/how-qovery-works/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
      -

      How Qovery Works

      Qovery is a service that runs on top of your Kubernetes cluster. It is composed of two main components:

      Control Plane

      The control plane is the brain of Qovery. It is responsible for:

      • Orchestrating the lifecycle of your applications
      • Managing the access and permissions of your team members
      • Providing the API to interact with Qovery

      Remote Agents

      The remote agents are the workers of Qovery. They are responsible for:

      • Deploying your applications
      • Managing the lifecycle of your applications
      • Gathering metrics and logs from your applications

      Curious to know more how Qovery works in detail? Refer to this article

      +

      How Qovery Works

      Qovery is a service that runs on top of your Kubernetes cluster. It is composed of two main components:

      Control Plane

      The control plane is the brain of Qovery. It is responsible for:

      • Orchestrating the lifecycle of your applications
      • Managing the access and permissions of your team members
      • Providing the API to interact with Qovery

      Remote Agents

      The remote agents are the workers of Qovery. They are responsible for:

      • Deploying your applications
      • Managing the lifecycle of your applications
      • Gathering metrics and logs from your applications

      Curious to know more how Qovery works in detail? Refer to this article

      - + - + diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html index 64fe8e68e2..2b0754aa4e 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
      -
      Resources
        +
        Resources
          - + - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html index 712dcddfda..2a97cea67a 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

          Create Credentials

          This guide will help you to create your Amazon Web Services (AWS) credentials for Qovery. Those credentials will be used to create a Kubernetes cluster, a dedicated VPC and a few services on your AWS account. Refer to our Infrastructure page to learn more about the infrastructure created by Qovery.

          Generate AWS credentials

          1. Connect to your AWS console

          2. Go to IAM

          3. Create Admins group without any permissions

          4. Create one IAM user called qovery.

          5. Setup IAM permissions to the qovery user.

            Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:

          6. To create an access key id and secret access key, go to the Security Credentials tab of the Qovery user and press Create access key

            You can now save the access key id and secret access key

          Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.

          Install a new cluster on Qovery

          You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. -Follow this documentation to create a new cluster on your organization.

          Next steps

          Now you can use your AWS account to deploy your applications on Qovery. You can also link other Cloud providers to your organization.

          +Follow this documentation to create a new cluster on your organization.

          Next steps

          Now you can use your AWS account to deploy your applications on Qovery. You can also link other Cloud providers to your organization.

          - + - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html index 64d41f4101..f24eb4059d 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

          FAQ

          How Qovery works on AWS

          Qovery is an abstraction layer on top of AWS and Kubernetes. Qovery manages the configuration of AWS account, and helps you to deploy production ready apps in seconds. -To make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...).

          Read more on how Qovery works behind the scene.

          Kubernetes

          The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

          Managed services

          AWS provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

          Security and compliance

          Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

          • Your configuration are stored on your AWS account.
          • Your configuration is encrypted on your AWS account.
          • Qovery can't access to your data.
          • Suppose Qovery stops to run, your applications are not impacted.

          FAQ

          How to choose a region?

          Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

          I don't find a region that is provided by AWS

          We are probably testing the support of this region, please contact us to know what's the status

          Migrate between Cloud providers and regions

          Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

          +To make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...).

          Read more on how Qovery works behind the scene.

          Kubernetes

          The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

          Managed services

          AWS provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

          Security and compliance

          Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

          • Your configuration are stored on your AWS account.
          • Your configuration is encrypted on your AWS account.
          • Qovery can't access to your data.
          • Suppose Qovery stops to run, your applications are not impacted.

          FAQ

          How to choose a region?

          Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

          I don't find a region that is provided by AWS

          We are probably testing the support of this region, please contact us to know what's the status

          Migrate between Cloud providers and regions

          Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

          - + - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html index c1cdca061a..f4fd1fba88 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
          -
          Resources
            +
            Resources
              - + - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html index 84696e10c1..bded6febd8 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@ by yourself by following the guide "I don't have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?" in this section.

              IAM permissions

              Qovery required IAM permissions to create, update and managed the infrastructure.

              • IAM is used to create IAM roles
              • S3 is used to store our generated configuration files
              • Cloudwatch, for creating a group stream for each Kubernetes clusters
              • Autoscaling for RDS and autoscaling rules for the Kubernetes cluster
              • Elastic load-balancing for ELB / ALB / NLB.
              • DynamoDB to have a distributed lock on infrastructure deployment.
              • ECR for managing the container registry, create/update/delete repository.
              • KMS to load and store keys (RDS, SSH, …)
              • EKS to create and update the Kubernetes cluster.
              Minimum IAM permission set
              Last update: 2023-06-08

              Below you can find the minimum permission set required by Qovery to run and deploy your applications.

              Policies lengths are limited regarding which object they’re attached to but the one Qovery needs represent more than the maximum (~6000 -characters).

              In order to setup it up, you need to create two IAM groups, each one with one of the following policies.

              Then we must create a user added to each of the previously created groups.

              Once it’s done, the user’s access key and secret key can be used in Qovery.

              {
              "Version": "2012-10-17",
              "Statement": [
              {
              "Effect": "Allow",
              "Action": [
              "autoscaling:SuspendProcesses",
              "ec2:AllocateAddress",
              "ec2:AssociateAddress",
              "ec2:AssociateRouteTable",
              "ec2:AttachVolume",
              "ec2:AttachInternetGateway",
              "ec2:AuthorizeSecurityGroupEgress",
              "ec2:AuthorizeSecurityGroupIngress",
              "ec2:CreateInternetGateway",
              "ec2:CreateKeyPair",
              "ec2:CreateLaunchTemplate",
              "ec2:CreateLaunchTemplateVersion",
              "ec2:CreateNatGateway",
              "ec2:CreateRoute",
              "ec2:CreateRouteTable",
              "ec2:CreateSecurityGroup",
              "ec2:CreateSubnet",
              "ec2:CreateTags",
              "ec2:CreateVolume",
              "ec2:CreateVpc",
              "ec2:DeleteInternetGateway",
              "ec2:DeleteKeyPair",
              "ec2:DeleteLaunchTemplate",
              "ec2:DeleteNatGateway",
              "ec2:DeleteRouteTable",
              "ec2:DeleteSecurityGroup",
              "ec2:DeleteSubnet",
              "ec2:DeleteVolume",
              "ec2:DeleteVpc",
              "ec2:DescribeAddresses",
              "ec2:DescribeAvailabilityZones",
              "ec2:DescribeImages",
              "ec2:DescribeInstanceAttribute",
              "ec2:DescribeInstanceCreditSpecifications",
              "ec2:DescribeInstances",
              "ec2:DescribeInstanceTypes",
              "ec2:DescribeInternetGateways",
              "ec2:DescribeKeyPairs",
              "ec2:DescribeLaunchTemplateVersions",
              "ec2:DescribeLaunchTemplates",
              "ec2:DescribeNatGateways",
              "ec2:DescribeNetworkAcls",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DescribeRouteTables",
              "ec2:DescribeSecurityGroupRules",
              "ec2:DescribeSecurityGroups",
              "ec2:DescribeSubnets",
              "ec2:DescribeTags",
              "ec2:DescribeVolumes",
              "ec2:DescribeVpcAttribute",
              "ec2:DescribeVpcClassicLink",
              "ec2:DescribeVpcClassicLinkDnsSupport",
              "ec2:DescribeVpcs",
              "ec2:DetachInternetGateway",
              "ec2:DetachVolume",
              "ec2:DisassociateAddress",
              "ec2:DisassociateRouteTable",
              "ec2:ImportKeyPair",
              "ec2:ModifySubnetAttribute",
              "ec2:ModifyVpcAttribute",
              "ec2:ReleaseAddress",
              "ec2:RevokeSecurityGroupEgress",
              "ec2:RevokeSecurityGroupIngress",
              "ec2:RunInstances",
              "ec2:StopInstances",
              "ec2:TerminateInstances",
              "ecr:BatchCheckLayerAvailability",
              "ecr:BatchGetImage",
              "ecr:CompleteLayerUpload",
              "ecr:CreateRepository",
              "ecr:DeleteRepository",
              "ecr:DescribeImages",
              "ecr:DescribeRepositories",
              "ecr:GetAuthorizationToken",
              "ecr:GetDownloadUrlForLayer",
              "ecr:InitiateLayerUpload",
              "ecr:PutImage",
              "ecr:PutLifecyclePolicy",
              "ecr:TagResource",
              "ecr:UploadLayerPart",
              "eks:CreateAddon",
              "eks:CreateCluster",
              "eks:CreateNodegroup",
              "eks:DeleteAddon",
              "eks:DeleteCluster",
              "eks:DeleteNodegroup",
              "eks:DescribeAddon",
              "eks:DescribeCluster",
              "eks:DescribeNodegroup",
              "eks:DescribeUpdate",
              "eks:ListClusters",
              "eks:ListNodegroups",
              "eks:TagResource",
              "eks:UpdateAddon",
              "eks:UpdateClusterConfig",
              "eks:UpdateClusterVersion",
              "eks:UpdateNodegroupConfig",
              "eks:UpdateNodegroupVersion",
              "elasticache:AddTagsToResource",
              "elasticache:CreateCacheSubnetGroup",
              "elasticache:CreateReplicationGroup",
              "elasticache:DeleteCacheSubnetGroup",
              "elasticache:DeleteReplicationGroup",
              "elasticache:DescribeCacheClusters",
              "elasticache:DescribeCacheSubnetGroups",
              "elasticache:DescribeReplicationGroups",
              "elasticache:ListTagsForResource",
              "elasticloadbalancing:DescribeLoadBalancers",
              "elasticloadbalancing:DescribeTags"
              ],
              "Resource": "*"
              }
              ]
              }
              {
              "Version": "2012-10-17",
              "Statement": [
              {
              "Effect": "Allow",
              "Action": [
              "iam:AddRoleToInstanceProfile",
              "iam:AttachRolePolicy",
              "iam:AttachUserPolicy",
              "iam:CreateAccessKey",
              "iam:CreateInstanceProfile",
              "iam:CreateOpenIDConnectProvider",
              "iam:CreatePolicy",
              "iam:CreateRole",
              "iam:CreateServiceLinkedRole",
              "iam:CreateUser",
              "iam:DeleteAccessKey",
              "iam:DeleteInstanceProfile",
              "iam:DeleteOpenIDConnectProvider",
              "iam:DeletePolicy",
              "iam:DeleteRole",
              "iam:DeleteRolePolicy",
              "iam:DeleteUser",
              "iam:DeleteUserPolicy",
              "iam:DetachRolePolicy",
              "iam:DetachUserPolicy",
              "iam:GetInstanceProfile",
              "iam:GetOpenIDConnectProvider",
              "iam:GetPolicy",
              "iam:GetPolicyVersion",
              "iam:GetRole",
              "iam:GetRolePolicy",
              "iam:GetUser",
              "iam:GetUserPolicy",
              "iam:ListAccessKeys",
              "iam:ListAttachedRolePolicies",
              "iam:ListAttachedUserPolicies",
              "iam:ListGroupsForUser",
              "iam:ListInstanceProfilesForRole",
              "iam:ListPolicyVersions",
              "iam:ListRolePolicies",
              "iam:PassRole",
              "iam:PutRolePolicy",
              "iam:PutUserPolicy",
              "iam:RemoveRoleFromInstanceProfile",
              "iam:TagInstanceProfile",
              "iam:TagOpenIDConnectProvider",
              "iam:TagRole",
              "iam:TagUser",
              "kms:CreateGrant",
              "kms:CreateKey",
              "kms:Decrypt",
              "kms:DescribeKey",
              "kms:GenerateDataKey",
              "kms:GetKeyPolicy",
              "kms:GetKeyRotationStatus",
              "kms:ListResourceTags",
              "kms:PutKeyPolicy",
              "kms:ScheduleKeyDeletion",
              "kms:TagResource",
              "logs:CreateLogGroup",
              "logs:DeleteLogGroup",
              "logs:DescribeLogGroups",
              "logs:ListTagsLogGroup",
              "logs:PutRetentionPolicy",
              "logs:TagLogGroup",
              "rds:AddTagsToResource",
              "rds:CreateDBCluster",
              "rds:CreateDBInstance",
              "rds:CreateDBParameterGroup",
              "rds:CreateDBSubnetGroup",
              "rds:DeleteDBCluster",
              "rds:DeleteDBInstance",
              "rds:DeleteDBParameterGroup",
              "rds:DeleteDBSubnetGroup",
              "rds:DescribeDBClusters",
              "rds:DescribeDBInstances",
              "rds:DescribeDBParameterGroups",
              "rds:DescribeDBParameters",
              "rds:DescribeDBSubnetGroups",
              "rds:DescribeGlobalClusters",
              "rds:ListTagsForResource",
              "rds:ModifyDBInstance",
              "rds:ModifyDBParameterGroup",
              "rds:StartDBCluster",
              "rds:StartDBInstance",
              "rds:StopDBCluster",
              "rds:StopDBInstance",
              "s3:CreateBucket",
              "s3:DeleteBucket",
              "s3:DeleteObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteBucketPolicy",
              "s3:GetAccelerateConfiguration",
              "s3:GetBucketAcl",
              "s3:GetBucketCORS",
              "s3:GetBucketLogging",
              "s3:GetBucketObjectLockConfiguration",
              "s3:GetBucketOwnershipControls",
              "s3:GetBucketPolicy",
              "s3:GetBucketPublicAccessBlock",
              "s3:GetBucketRequestPayment",
              "s3:GetBucketTagging",
              "s3:GetBucketVersioning",
              "s3:GetBucketWebsite",
              "s3:GetEncryptionConfiguration",
              "s3:GetLifecycleConfiguration",
              "s3:GetObject",
              "s3:GetReplicationConfiguration",
              "s3:ListAccessPoints",
              "s3:ListAllMyBuckets",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:ListBucketVersions",
              "s3:ListMultiRegionAccessPoints",
              "s3:ListMultipartUploadParts",
              "s3:ListStorageLensConfigurations",
              "s3:PutBucketAcl",
              "s3:PutBucketOwnershipControls",
              "s3:PutBucketPolicy",
              "s3:PutBucketPublicAccessBlock",
              "s3:PutBucketTagging",
              "s3:PutBucketVersioning",
              "s3:PutEncryptionConfiguration",
              "s3:PutLifecycleConfiguration",
              "s3:PutObject",
              "s3:PutObjectRetention",
              "secretsmanager:CreateSecret",
              "secretsmanager:TagResource",
              "sts:GetCallerIdentity"
              ],
              "Resource": "*"
              }
              ]
              }
              +characters).

              In order to setup it up, you need to create two IAM groups, each one with one of the following policies.

              Then we must create a user added to each of the previously created groups.

              Once it’s done, the user’s access key and secret key can be used in Qovery.

              {
              "Version": "2012-10-17",
              "Statement": [
              {
              "Effect": "Allow",
              "Action": [
              "autoscaling:SuspendProcesses",
              "ec2:AllocateAddress",
              "ec2:AssociateAddress",
              "ec2:AssociateRouteTable",
              "ec2:AttachVolume",
              "ec2:AttachInternetGateway",
              "ec2:AuthorizeSecurityGroupEgress",
              "ec2:AuthorizeSecurityGroupIngress",
              "ec2:CreateInternetGateway",
              "ec2:CreateKeyPair",
              "ec2:CreateLaunchTemplate",
              "ec2:CreateLaunchTemplateVersion",
              "ec2:CreateNatGateway",
              "ec2:CreateRoute",
              "ec2:CreateRouteTable",
              "ec2:CreateSecurityGroup",
              "ec2:CreateSubnet",
              "ec2:CreateTags",
              "ec2:CreateVolume",
              "ec2:CreateVpc",
              "ec2:DeleteInternetGateway",
              "ec2:DeleteKeyPair",
              "ec2:DeleteLaunchTemplate",
              "ec2:DeleteNatGateway",
              "ec2:DeleteRouteTable",
              "ec2:DeleteSecurityGroup",
              "ec2:DeleteSubnet",
              "ec2:DeleteVolume",
              "ec2:DeleteVpc",
              "ec2:DescribeAddresses",
              "ec2:DescribeAvailabilityZones",
              "ec2:DescribeImages",
              "ec2:DescribeInstanceAttribute",
              "ec2:DescribeInstanceCreditSpecifications",
              "ec2:DescribeInstances",
              "ec2:DescribeInstanceTypes",
              "ec2:DescribeInternetGateways",
              "ec2:DescribeKeyPairs",
              "ec2:DescribeLaunchTemplateVersions",
              "ec2:DescribeLaunchTemplates",
              "ec2:DescribeNatGateways",
              "ec2:DescribeNetworkAcls",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DescribeRouteTables",
              "ec2:DescribeSecurityGroupRules",
              "ec2:DescribeSecurityGroups",
              "ec2:DescribeSubnets",
              "ec2:DescribeTags",
              "ec2:DescribeVolumes",
              "ec2:DescribeVpcAttribute",
              "ec2:DescribeVpcClassicLink",
              "ec2:DescribeVpcClassicLinkDnsSupport",
              "ec2:DescribeVpcs",
              "ec2:DetachInternetGateway",
              "ec2:DetachVolume",
              "ec2:DisassociateAddress",
              "ec2:DisassociateRouteTable",
              "ec2:ImportKeyPair",
              "ec2:ModifySubnetAttribute",
              "ec2:ModifyVpcAttribute",
              "ec2:ReleaseAddress",
              "ec2:RevokeSecurityGroupEgress",
              "ec2:RevokeSecurityGroupIngress",
              "ec2:RunInstances",
              "ec2:StopInstances",
              "ec2:TerminateInstances",
              "ecr:BatchCheckLayerAvailability",
              "ecr:BatchGetImage",
              "ecr:CompleteLayerUpload",
              "ecr:CreateRepository",
              "ecr:DeleteRepository",
              "ecr:DescribeImages",
              "ecr:DescribeRepositories",
              "ecr:GetAuthorizationToken",
              "ecr:GetDownloadUrlForLayer",
              "ecr:InitiateLayerUpload",
              "ecr:PutImage",
              "ecr:PutLifecyclePolicy",
              "ecr:TagResource",
              "ecr:UploadLayerPart",
              "eks:CreateAddon",
              "eks:CreateCluster",
              "eks:CreateNodegroup",
              "eks:DeleteAddon",
              "eks:DeleteCluster",
              "eks:DeleteNodegroup",
              "eks:DescribeAddon",
              "eks:DescribeCluster",
              "eks:DescribeNodegroup",
              "eks:DescribeUpdate",
              "eks:ListClusters",
              "eks:ListNodegroups",
              "eks:TagResource",
              "eks:UpdateAddon",
              "eks:UpdateClusterConfig",
              "eks:UpdateClusterVersion",
              "eks:UpdateNodegroupConfig",
              "eks:UpdateNodegroupVersion",
              "elasticache:AddTagsToResource",
              "elasticache:CreateCacheSubnetGroup",
              "elasticache:CreateReplicationGroup",
              "elasticache:DeleteCacheSubnetGroup",
              "elasticache:DeleteReplicationGroup",
              "elasticache:DescribeCacheClusters",
              "elasticache:DescribeCacheSubnetGroups",
              "elasticache:DescribeReplicationGroups",
              "elasticache:ListTagsForResource",
              "elasticloadbalancing:DescribeLoadBalancers",
              "elasticloadbalancing:DescribeTags"
              ],
              "Resource": "*"
              }
              ]
              }
              {
              "Version": "2012-10-17",
              "Statement": [
              {
              "Effect": "Allow",
              "Action": [
              "iam:AddRoleToInstanceProfile",
              "iam:AttachRolePolicy",
              "iam:AttachUserPolicy",
              "iam:CreateAccessKey",
              "iam:CreateInstanceProfile",
              "iam:CreateOpenIDConnectProvider",
              "iam:CreatePolicy",
              "iam:CreateRole",
              "iam:CreateServiceLinkedRole",
              "iam:CreateUser",
              "iam:DeleteAccessKey",
              "iam:DeleteInstanceProfile",
              "iam:DeleteOpenIDConnectProvider",
              "iam:DeletePolicy",
              "iam:DeleteRole",
              "iam:DeleteRolePolicy",
              "iam:DeleteUser",
              "iam:DeleteUserPolicy",
              "iam:DetachRolePolicy",
              "iam:DetachUserPolicy",
              "iam:GetInstanceProfile",
              "iam:GetOpenIDConnectProvider",
              "iam:GetPolicy",
              "iam:GetPolicyVersion",
              "iam:GetRole",
              "iam:GetRolePolicy",
              "iam:GetUser",
              "iam:GetUserPolicy",
              "iam:ListAccessKeys",
              "iam:ListAttachedRolePolicies",
              "iam:ListAttachedUserPolicies",
              "iam:ListGroupsForUser",
              "iam:ListInstanceProfilesForRole",
              "iam:ListPolicyVersions",
              "iam:ListRolePolicies",
              "iam:PassRole",
              "iam:PutRolePolicy",
              "iam:PutUserPolicy",
              "iam:RemoveRoleFromInstanceProfile",
              "iam:TagInstanceProfile",
              "iam:TagOpenIDConnectProvider",
              "iam:TagRole",
              "iam:TagUser",
              "kms:CreateGrant",
              "kms:CreateKey",
              "kms:Decrypt",
              "kms:DescribeKey",
              "kms:GenerateDataKey",
              "kms:GetKeyPolicy",
              "kms:GetKeyRotationStatus",
              "kms:ListResourceTags",
              "kms:PutKeyPolicy",
              "kms:ScheduleKeyDeletion",
              "kms:TagResource",
              "logs:CreateLogGroup",
              "logs:DeleteLogGroup",
              "logs:DescribeLogGroups",
              "logs:ListTagsLogGroup",
              "logs:PutRetentionPolicy",
              "logs:TagLogGroup",
              "rds:AddTagsToResource",
              "rds:CreateDBCluster",
              "rds:CreateDBInstance",
              "rds:CreateDBParameterGroup",
              "rds:CreateDBSubnetGroup",
              "rds:DeleteDBCluster",
              "rds:DeleteDBInstance",
              "rds:DeleteDBParameterGroup",
              "rds:DeleteDBSubnetGroup",
              "rds:DescribeDBClusters",
              "rds:DescribeDBInstances",
              "rds:DescribeDBParameterGroups",
              "rds:DescribeDBParameters",
              "rds:DescribeDBSubnetGroups",
              "rds:DescribeGlobalClusters",
              "rds:ListTagsForResource",
              "rds:ModifyDBInstance",
              "rds:ModifyDBParameterGroup",
              "rds:StartDBCluster",
              "rds:StartDBInstance",
              "rds:StopDBCluster",
              "rds:StopDBInstance",
              "s3:CreateBucket",
              "s3:DeleteBucket",
              "s3:DeleteObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteBucketPolicy",
              "s3:GetAccelerateConfiguration",
              "s3:GetBucketAcl",
              "s3:GetBucketCORS",
              "s3:GetBucketLogging",
              "s3:GetBucketObjectLockConfiguration",
              "s3:GetBucketOwnershipControls",
              "s3:GetBucketPolicy",
              "s3:GetBucketPublicAccessBlock",
              "s3:GetBucketRequestPayment",
              "s3:GetBucketTagging",
              "s3:GetBucketVersioning",
              "s3:GetBucketWebsite",
              "s3:GetEncryptionConfiguration",
              "s3:GetLifecycleConfiguration",
              "s3:GetObject",
              "s3:GetReplicationConfiguration",
              "s3:ListAccessPoints",
              "s3:ListAllMyBuckets",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:ListBucketVersions",
              "s3:ListMultiRegionAccessPoints",
              "s3:ListMultipartUploadParts",
              "s3:ListStorageLensConfigurations",
              "s3:PutBucketAcl",
              "s3:PutBucketOwnershipControls",
              "s3:PutBucketPolicy",
              "s3:PutBucketPublicAccessBlock",
              "s3:PutBucketTagging",
              "s3:PutBucketVersioning",
              "s3:PutEncryptionConfiguration",
              "s3:PutLifecycleConfiguration",
              "s3:PutObject",
              "s3:PutObjectRetention",
              "secretsmanager:CreateSecret",
              "secretsmanager:TagResource",
              "sts:GetCallerIdentity"
              ],
              "Resource": "*"
              }
              ]
              }
              - + - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html index 4eace7e179..89298d243f 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
              -

              Quickstart

              Install Qovery on your AWS account in less than 30 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

              1. Create a Kubernetes cluster

                Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                Add Cluster

                Note that you can create multiple clusters on the same AWS account with different VPCs. You can also create multiple clusters on different AWS accounts. Qovery will manage them for you.

              2. Attach AWS credentials

                Follow this guide to create your AWS credentials.

                Create Credentials

                Then attach your credentials to your cluster and click on Create. Then, click on Continue.

              3. Select your options

                Qovery propose multiple options that you can select to customize your installation. You can also change some of them later.

              4. Install Qovery

                Click on Create and Deploy to create the cluster and install Qovery on it.

                It will take up to 30 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                You should see your new cluster in the list of clusters.

                Show clusters

              +

              Quickstart

              Install Qovery on your AWS account in less than 30 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

              1. Create a Kubernetes cluster

                Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                Add Cluster

                Note that you can create multiple clusters on the same AWS account with different VPCs. You can also create multiple clusters on different AWS accounts. Qovery will manage them for you.

              2. Attach AWS credentials

                Follow this guide to create your AWS credentials.

                Create Credentials

                Then attach your credentials to your cluster and click on Create. Then, click on Continue.

              3. Select your options

                Qovery propose multiple options that you can select to customize your installation. You can also change some of them later.

              4. Install Qovery

                Click on Create and Deploy to create the cluster and install Qovery on it.

                It will take up to 30 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                You should see your new cluster in the list of clusters.

                Show clusters

              - + - + diff --git a/docs/getting-started/install-qovery/aws/index.html b/docs/getting-started/install-qovery/aws/index.html index 626c4cd6e4..44d2c7dc19 100644 --- a/docs/getting-started/install-qovery/aws/index.html +++ b/docs/getting-started/install-qovery/aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
              -
              +
              - + - + diff --git a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html index 69b0a7797e..1a7001efc7 100644 --- a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
              -

              Self-Managed Cluster

              To install Qovery on your existing Kubernetes cluster on your AWS account. Please refer to the installation documentation for Kubernetes.

              Resources
                +

                Self-Managed Cluster

                To install Qovery on your existing Kubernetes cluster on your AWS account. Please refer to the installation documentation for Kubernetes.

                Resources
                  - + - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html index 5f56d2ba34..40c35f21a2 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                  -

                  Managed By Qovery

                  Don't be shy, pick the first page you want to read and start your journey with Qovery.

                  Quickstart
                  Resources
                    +

                    Managed By Qovery

                    Don't be shy, pick the first page you want to read and start your journey with Qovery.

                    Quickstart
                    Resources
                      - + - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html index 71caae823b..64ca8e3784 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                      -
                      Resources
                        +
                        Resources
                          - + - + diff --git a/docs/getting-started/install-qovery/azure/index.html b/docs/getting-started/install-qovery/azure/index.html index 2ec8860dce..6183df1172 100644 --- a/docs/getting-started/install-qovery/azure/index.html +++ b/docs/getting-started/install-qovery/azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                          -
                          +
                          - + - + diff --git a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html index ecc62909aa..00e48bc56a 100644 --- a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                          -

                          Self-Managed Cluster

                          To install Qovery on your existing Kubernetes cluster on your Azure account. Please refer to the installation documentation for Kubernetes.

                          Resources
                            +

                            Self-Managed Cluster

                            To install Qovery on your existing Kubernetes cluster on your Azure account. Please refer to the installation documentation for Kubernetes.

                            Resources
                              - + - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html index 7d02b63cd5..5779d0ce57 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                              Create Credentials

                              This guide will help you to generate your GCP credentials to connect your GCP account to Qovery.

                              Generate your GCP credentials

                              1. Connect to your GCP console

                              2. Create a new Project or open an exiting one

                              3. Open the embedded Google shell

                              4. Run the following command in the Google Shell to create the service account and generate the json key:

                                wget https://hub.qovery.com/files/create_credentials_gcp.sh && \
                                chmod +x create_credentials_gcp.sh && \
                                ./create_credentials_gcp.sh $GOOGLE_CLOUD_PROJECT qovery-service-account
                              5. Once the script is finished, you will see the following message:

                                created key [xxxx] of type [json] as [key.json] for [qovery-service-account@<your-project>.iam.gserviceaccount.com]
                                Operations completed. You can now download your json key to upload in Qovery

                                So you can download it by clicking on the Download button.

                                And specify the name of the file /your/home/key.json and click on Download.

                                That's it!

                              Well done!! You now have your GCP JSON credentials key; It is time to connect Qovery to your GCP account.

                              Install a new cluster on Qovery

                              You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. -Follow this documentation to create a new cluster on your organization.

                              +Follow this documentation to create a new cluster on your organization.

                              - + - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html index c3c52ace21..8d48bcf3d9 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                              -
                              Resources
                                +
                                Resources
                                  - + - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html index 8faa78a2b2..45baa15f2a 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                  -

                                  Quickstart

                                  Install Qovery on your GCP account in less than 20 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

                                  1. Create a Kubernetes cluster

                                    Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                                    Add Cluster

                                    Note that you can create multiple clusters on the same GCP account with different VPCs. You can also create multiple clusters on different GCP accounts. Qovery will manage them for you.

                                  2. Attach GCP credentials

                                    Follow this guide to create your GCP credentials.

                                    Create Credentials

                                    Then attach your credentials to your cluster and click on Create. Then, click on Continue.

                                  3. Install Qovery

                                    Click on Create and Deploy to create the cluster and install Qovery on it.

                                    It will take up to 20 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                                    You should see your new cluster in the list of clusters.

                                    Show clusters

                                  +

                                  Quickstart

                                  Install Qovery on your GCP account in less than 20 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

                                  1. Create a Kubernetes cluster

                                    Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                                    Add Cluster

                                    Note that you can create multiple clusters on the same GCP account with different VPCs. You can also create multiple clusters on different GCP accounts. Qovery will manage them for you.

                                  2. Attach GCP credentials

                                    Follow this guide to create your GCP credentials.

                                    Create Credentials

                                    Then attach your credentials to your cluster and click on Create. Then, click on Continue.

                                  3. Install Qovery

                                    Click on Create and Deploy to create the cluster and install Qovery on it.

                                    It will take up to 20 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                                    You should see your new cluster in the list of clusters.

                                    Show clusters

                                  - + - + diff --git a/docs/getting-started/install-qovery/gcp/index.html b/docs/getting-started/install-qovery/gcp/index.html index 16caa2b232..700e28656d 100644 --- a/docs/getting-started/install-qovery/gcp/index.html +++ b/docs/getting-started/install-qovery/gcp/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                  -
                                  +
                                  - + - + diff --git a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html index ea9d19db5d..2eeb3319f3 100644 --- a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                  -

                                  Self-Managed Cluster

                                  To install Qovery on your existing Kubernetes cluster on your GCP account. Please refer to the installation documentation for Kubernetes.

                                  Resources
                                    +

                                    Self-Managed Cluster

                                    To install Qovery on your existing Kubernetes cluster on your GCP account. Please refer to the installation documentation for Kubernetes.

                                    Resources
                                      - + - + diff --git a/docs/getting-started/install-qovery/index.html b/docs/getting-started/install-qovery/index.html index 82cccf95bb..05edfa8536 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                      Install Qovery

                                      Amazon Web Services (AWS)
                                      Google Cloud Platform (GCP)
                                      Scaleway (SCW)
                                      Microsoft Azure
                                      Kubernetes
                                      Others

                                      Managed Cluster by Qovery vs. Self-Managed - What to choose?

                                      Qovery offers two distinct approaches to cluster management: Cluster Managed by Qovery and Self-managed Cluster. -Choose Cluster Managed by Qovery if you are not familiar with Kubernetes or you don't want to bother with it and delegate infrastructure management to Qovery. Choose Self-Managed otherwise.

                                      Here is a table to help you to choose between both:

                                      Feature/AspectCluster Managed by Qovery (recommended)Self-Managed Cluster (advanced)
                                      ManagementFully managed by QoverySelf-managed by the organization
                                      ControlLimited control over Kubernetes infrastructureFull control over Kubernetes setup
                                      Supported Cloud Service ProvidersAWS, GCP, ScalewayAll
                                      CustomizationStandard Qovery configurationHigh customization and configuration freedom
                                      Expertise RequiredNoneRequires Kubernetes expertise
                                      ResponsibilityQovery is responsible for maintenanceOrganization is responsible for maintenance
                                      Developer ExperienceStreamlined and simplifiedStreamlined and simplified (no difference)
                                      Setup ComplexityJust a AWS, GCP or Scaleway accountRequires infrastructure and Kubernetes knowledge
                                      Flexibility in UsageStandardized to Qovery's environmentFlexible to meet specific organizational needs
                                      Ideal Use CaseOrganizations preferring a hands-off approachOrganizations with specific Kubernetes needs
                                      Managed ServicesCf. list belowN/A
                                      Managed Services

                                      Here is the list of managed services provided by Qovery with the Kubernetes Managed by Qovery approach:

                                      • Vertical Pod Autoscaler
                                      • Cluster Autoscaler
                                      • CoreDNS
                                      • Cert-manager
                                      • Cert-manager Qovery Webhook
                                      • Nginx Ingress
                                      • Metrics Server
                                      • External DNS
                                      • Promtail
                                      • Loki
                                      • AWS
                                        • AWS EBS Driver
                                        • AWS Kubeproxy
                                        • AWS CNI
                                        • IAM EKS User Mapper
                                        • Karpenter
                                        • AWS Node Term Handler

                                      A more detailed comparison is available on our blog

                                      +Choose Cluster Managed by Qovery if you are not familiar with Kubernetes or you don't want to bother with it and delegate infrastructure management to Qovery. Choose Self-Managed otherwise.

                                      Here is a table to help you to choose between both:

                                      Feature/AspectCluster Managed by Qovery (recommended)Self-Managed Cluster (advanced)
                                      ManagementFully managed by QoverySelf-managed by the organization
                                      ControlLimited control over Kubernetes infrastructureFull control over Kubernetes setup
                                      Supported Cloud Service ProvidersAWS, GCP, ScalewayAll
                                      CustomizationStandard Qovery configurationHigh customization and configuration freedom
                                      Expertise RequiredNoneRequires Kubernetes expertise
                                      ResponsibilityQovery is responsible for maintenanceOrganization is responsible for maintenance
                                      Developer ExperienceStreamlined and simplifiedStreamlined and simplified (no difference)
                                      Setup ComplexityJust a AWS, GCP or Scaleway accountRequires infrastructure and Kubernetes knowledge
                                      Flexibility in UsageStandardized to Qovery's environmentFlexible to meet specific organizational needs
                                      Ideal Use CaseOrganizations preferring a hands-off approachOrganizations with specific Kubernetes needs
                                      Managed ServicesCf. list belowN/A
                                      Managed Services

                                      Here is the list of managed services provided by Qovery with the Kubernetes Managed by Qovery approach:

                                      • Vertical Pod Autoscaler
                                      • Cluster Autoscaler
                                      • CoreDNS
                                      • Cert-manager
                                      • Cert-manager Qovery Webhook
                                      • Nginx Ingress
                                      • Metrics Server
                                      • External DNS
                                      • Promtail
                                      • Loki
                                      • AWS
                                        • AWS EBS Driver
                                        • AWS Kubeproxy
                                        • AWS CNI
                                        • IAM EKS User Mapper
                                        • Karpenter
                                        • AWS Node Term Handler

                                      A more detailed comparison is available on our blog

                                      - + - + diff --git a/docs/getting-started/install-qovery/kubernetes/index.html b/docs/getting-started/install-qovery/kubernetes/index.html index 301721012d..002e2e4a17 100644 --- a/docs/getting-started/install-qovery/kubernetes/index.html +++ b/docs/getting-started/install-qovery/kubernetes/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                      -

                                      Kubernetes

                                      Don't be shy, pick the first page you want to read and start your journey with Qovery.

                                      Quickstart
                                      Resources
                                        +

                                        Kubernetes

                                        Don't be shy, pick the first page you want to read and start your journey with Qovery.

                                        Quickstart
                                        Resources
                                          - + - + diff --git a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html index 5e04232d19..7fc2b10031 100644 --- a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html +++ b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html @@ -26,9 +26,9 @@ - + - + @@ -58,14 +58,14 @@
                                          ## Qovery Common config
                                          # Past information from Qovery cluster console creation
                                          qovery:
                                          clusterId: &clusterId "set-by-customer"
                                          clusterShortId: &shortClusterId "set-by-customer"
                                          organizationId: &organizationId "set-by-customer"
                                          jwtToken: &jwtToken "set-by-customer"
                                          domain: &domain "set-by-customer"
                                          grpcServer: &grpcServer "set-by-customer"
                                          engineGrpcServer: &engineGrpcServer "set-by-customer"
                                          qoveryDnsUrl: &qoveryDnsUrl "set-by-customer"
                                          lokiUrl: &lokiUrl "set-by-customer"
                                          promtailLokiUrl: &promtailLokiUrl "set-by-customer"
                                          acmeEmailAddr: &acmeEmailAddr "set-by-customer"
                                          externalDnsPrefix: &externalDnsPrefix "set-by-customer"
                                          architectures: &architectures "set-by-customer"
                                          ## Chart overrides
                                          ...
                                        • Install Qovery on your Kubernetes cluster.

                                          helm upgrade --install -n qovery -f values-demo.yaml qovery
                                          • -n qovery: the namespace where Qovery and its dependencies will be installed
                                          • -f values-demo.yaml: specify the values overrides file you want to use
                                          • qovery: name of the chart to deploy
                                        • Configuration

                                          Qovery

                                          This is the configuration of Qovery itself. It is used by all Qovery components.

                                          KeyRequiredDescriptionDefault
                                          qovery.clusterIdYesThe cluster ID. It is used to identify your cluster.set-by-customer
                                          qovery.shortClusterIdYesThe short cluster ID. It is used to identify your cluster.set-by-customer
                                          qovery.organizationIdYesThe organization ID. It is used to identify your organization.set-by-customer
                                          qovery.jwtTokenYesThe JWT token. It is used to authenticate your cluster.set-by-customer
                                          qovery.domainYesThe domain name used by Qovery.set-by-customer
                                          qovery.qoveryDnsUrlYesQovery DNS url in case you want to use Qovery provided DNSset-by-customer
                                          qovery.lokiUrlNoLocal Loki URL (required if Loki is set)set-by-customer
                                          qovery.promtailLokiUrlNoPromtail Loki URL (required if Promtail and Loki are set)set-by-customer
                                          qovery.acmeEmailAddrNoEmail address used for Let's Encrypt TLS requestsset-by-customer
                                          qovery.externalDnsPrefixNoExernalDNS TXT record prefix (required if ExternalDNS is set)set-by-customer
                                          qovery.architecturesNoSet cluster architectures (comma separated)AMD64

                                          Qovery Cluster Agent

                                          RequiredYes
                                          If deployedThe cluster agent is responsible for securely forwarding logs and metrics from your Kubernetes cluster to Qovery control plane
                                          If missingThe cluster will not report to Qovery control plane Kubernetes information, so the Qovery console will report unknown satus values
                                          qovery-cluster-agent:
                                          fullnameOverride: qovery-cluster-agent

                                          Qovery Shell Agent

                                          RequiredYes
                                          If deployedUsed to give a remote shell access to you Kubernetes pods (if user is allowed from Qovery RBAC) with the Qovery CLI
                                          If missingNo remote connection will be possible, and Qovery support will not be able to help you to diagnose issues
                                          qovery-shell-agent:
                                          fullnameOverride: qovery-shell-agent

                                          Ingress

                                          RequiredNo (but strongly recommended)
                                          If deployedWeb services can be privately or publicly exposed
                                          If missingNo web services will be exposed

                                          Qovery us will be exposed NGINX Ingress Controller by default to route traffic to your applications.

                                          Nginx Ingress Controller

                                          Here is the minimum override configuration to be used:

                                          ingress-nginx:
                                          fullnameOverride: ingress-nginx
                                          controller:
                                          useComponentLabel: true
                                          admissionWebhooks:
                                          enabled: false
                                          # Ingress class used when an application/container with public access is set
                                          ingressClass: nginx-qovery
                                          extraArgs:
                                          # Default TLS certificate name and path
                                          default-ssl-certificate: "qovery/letsencrypt-acme-qovery-cert"
                                          # Allows customization of the source of the IP address or FQDN to report in the ingress status field
                                          publishService:
                                          enabled: true

                                          Other Ingress Controllers

                                          Qovery supports other Ingress Controllers. Please contact us if you want to use another one. We will be happy to help you.

                                          DNS

                                          RequiredNo (but strongly recommended)
                                          If deployedUsed to easily reach your applications with DNS records, even on private network
                                          If missingYou will have easy access with dns names to your services, you'll have to use IPs

                                          Qovery uses External DNS to automatically configure DNS records for your applications.

                                          If you don't want or can't add your own DNS provider, Qovery proposes it's own managed sub-domain DNS provider for free. -You'll then be able to later add your custom DNS record (no matter the provider) to point to your Qovery DNS sub-domain.

                                          External DNS

                                          Here is one example with Qovery DNS provider:

                                          external-dns:
                                          fullnameOverride: external-dns
                                          # set pdns for Qovery DNS managed (or you can use any supported provider by external-dns)
                                          provider: pdns
                                          # will use the domain name given by Qovery during the cluster setup phease
                                          domainFilters: [*domain]
                                          # an owner ID is set to avoid conflicts in case of multiple Qovery clusters
                                          txtOwnerId: *shortClusterId
                                          # a prefix to help Qovery to debug in case of issues
                                          txtPrefix: *externalDnsPrefix
                                          # set the Qovery DNS provider configuration
                                          pdns:
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken
                                          apiPort: 443

                                          Logging

                                          RequiredNo (but strongly recommended)
                                          If deployedRetrieve and store application's log history
                                          If missingYou'll have live logs, but you will miss log history for debugging purpose

                                          Qovery uses Loki to store your logs in a S3 compatible bucket and Promtail to collect your logs.

                                          Loki

                                          Here is a configuration in Memory (no persistence) for Loki:

                                          loki:
                                          fullnameOverride: loki
                                          loki:
                                          # no auth is set for internal cluster usage
                                          auth_enabled: false
                                          ingester:
                                          lifecycler:
                                          ring:
                                          kvstore:
                                          # we store it in memory for the demo, you'll lose history once Loki restarts
                                          store: inmemory
                                          replication_factor: 1
                                          schema_config:
                                          configs:
                                          - from: 2020-05-15
                                          store: boltdb-shipper
                                          object_store: filesystem
                                          schema: v11
                                          index:
                                          prefix: index_
                                          period: 24h
                                          monitoring:
                                          # all the monitoring part is disabled to reduce resource footprint for the demo usage
                                          dashboards:
                                          enabled: false
                                          rules:
                                          enabled: false
                                          serviceMonitor:
                                          enabled: false
                                          metricsInstance:
                                          enabled: false
                                          selfMonitoring:
                                          enabled: false
                                          grafanaAgent:
                                          installOperator: false
                                          grafanaAgent:
                                          enabled: false
                                          lokiCanary:
                                          enabled: false
                                          test:
                                          enabled: false
                                          gateway:
                                          enabled: false
                                          # we use a single binary to reduce resource footprint for the demo usage
                                          singleBinary:
                                          replicas: 1
                                          persistence:
                                          enabled: false
                                          extraVolumes:
                                          - name: data
                                          emptyDir: {}
                                          - name: storage
                                          emptyDir: {}
                                          extraVolumeMounts:
                                          - name: data
                                          mountPath: /data
                                          - name: storage
                                          mountPath: /var/loki

                                          Promtail

                                          A configuration example compatible with all providers:

                                          promtail:
                                          fullnameOverride: promtail
                                          # promtail requires to be spawned in kube-system namespace
                                          namespace: kube-system
                                          priorityClassName: system-node-critical
                                          config:
                                          clients:
                                          # forward logs to Loki
                                          - url: *promtailLokiUrl
                                          snippets:
                                          extraRelabelConfigs:
                                          - action: labelmap
                                          # required to be able to watch logs from Qovery console interface
                                          regex: __meta_kubernetes_pod_label_(qovery_com_service_id|qovery_com_service_type|qovery_com_environment_id)

                                          Certificates

                                          RequiredNo (but strongly recommended)
                                          If deployedCert-manager helps you to get TLS certificates through Let's Encrypt
                                          If missingWithout it, you will not be able to automatically get TLS certificates

                                          Qovery uses Cert Manager to automatically get TLS certificates for your applications.

                                          Cert Manager

                                          Here is the minimal setup for all cloud providers:

                                          cert-manager:
                                          fullnameOverride: cert-manager
                                          # CRD are required
                                          installCRDs: true
                                          replicaCount: 1
                                          startupapicheck:
                                          jobAnnotations:
                                          helm.sh/hook: post-install,post-upgrade
                                          rbac:
                                          annotations:
                                          helm.sh/hook: post-install,post-upgrade
                                          serviceAccount:
                                          annotations:
                                          helm.sh/hook: post-install,post-upgrade

                                          Qovery Cert Manager Webhook

                                          RequiredNo (but if you're using Qovery DNS Provider)
                                          If deployedRequired to get Let's Encrypt TLS if Qovery DNS Provider is used
                                          If missingWithout it, you will not be able to automatically get TLS certificates with Qovery DNS Provider

                                          A configuration example compatible with all providers:

                                          qovery-cert-manager-webhook:
                                          fullnameOverride: qovery-cert-manager-webhook
                                          certManager:
                                          # set the same namespace than cert-manager
                                          namespace: qovery
                                          serviceAccountName: cert-manager
                                          secret:
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken

                                          Cert Manager Configs

                                          RequiredNo
                                          If deployedThis is an helper to deploy cert-manager config. But you can manually set it
                                          If missingInstalling Cert-manager is not enough, you have to configure it to get TLS working

                                          This is the configuration of Cert Manager itself. It is used by all Cert Manager components.

                                          cert-manager-configs:
                                          fullnameOverride: cert-manager-configs
                                          # set pdns to use Qovery DNS provider
                                          externalDnsProvider: pdns
                                          managedDns: [*domain]
                                          acme:
                                          letsEncrypt:
                                          emailReport: *acmeEmailAddr
                                          # As it's a demo cluster, we use the staging environment to avoid rate limit issues
                                          acmeUrl: https://acme-staging-v02.api.letsencrypt.org/directory
                                          provider:
                                          # set the provider of your choice or use the Qovery DNS provider
                                          pdns:
                                          apiPort: 443
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken

                                          Qovery uses Metrics Server to collect metrics from your Kubernetes cluster and scale your applications automatically based on custom metrics.

                                          Observability

                                          Metrics Server

                                          RequiredNo (but strongly recommended)
                                          If deployedMandatory if you want to retrive pod metrics for the Qovery agent and if you want to be able to use the horizontal pod scaling
                                          If missingNo HPA and no application metrics in the QOveyr console
                                          metrics-server:
                                          fullnameOverride: metrics-server
                                          defaultArgs:
                                          - --cert-dir=/tmp
                                          - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
                                          - --kubelet-use-node-status-port
                                          - --metric-resolution=15s
                                          - --kubelet-insecure-tls
                                          apiService:
                                          create: false

                                          FAQ

                                          I have a non-covered use case. What should I do?

                                          Please contact us. We will be happy to help you.

                                          Can I host the Qovery control plane on my own?

                                          At the momement, you can't. But please contact us to discuss about it. We will be happy to help you.

                                          +You'll then be able to later add your custom DNS record (no matter the provider) to point to your Qovery DNS sub-domain.

                                          External DNS

                                          Here is one example with Qovery DNS provider:

                                          external-dns:
                                          fullnameOverride: external-dns
                                          # set pdns for Qovery DNS managed (or you can use any supported provider by external-dns)
                                          provider: pdns
                                          # will use the domain name given by Qovery during the cluster setup phease
                                          domainFilters: [*domain]
                                          # an owner ID is set to avoid conflicts in case of multiple Qovery clusters
                                          txtOwnerId: *shortClusterId
                                          # a prefix to help Qovery to debug in case of issues
                                          txtPrefix: *externalDnsPrefix
                                          # set the Qovery DNS provider configuration
                                          pdns:
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken
                                          apiPort: 443

                                          Logging

                                          RequiredNo (but strongly recommended)
                                          If deployedRetrieve and store application's log history
                                          If missingYou'll have live logs, but you will miss log history for debugging purpose

                                          Qovery uses Loki to store your logs in a S3 compatible bucket and Promtail to collect your logs.

                                          Loki

                                          Here is a configuration in Memory (no persistence) for Loki:

                                          loki:
                                          fullnameOverride: loki
                                          loki:
                                          # no auth is set for internal cluster usage
                                          auth_enabled: false
                                          ingester:
                                          lifecycler:
                                          ring:
                                          kvstore:
                                          # we store it in memory for the demo, you'll lose history once Loki restarts
                                          store: inmemory
                                          replication_factor: 1
                                          schema_config:
                                          configs:
                                          - from: 2020-05-15
                                          store: boltdb-shipper
                                          object_store: filesystem
                                          schema: v11
                                          index:
                                          prefix: index_
                                          period: 24h
                                          monitoring:
                                          # all the monitoring part is disabled to reduce resource footprint for the demo usage
                                          dashboards:
                                          enabled: false
                                          rules:
                                          enabled: false
                                          serviceMonitor:
                                          enabled: false
                                          metricsInstance:
                                          enabled: false
                                          selfMonitoring:
                                          enabled: false
                                          grafanaAgent:
                                          installOperator: false
                                          grafanaAgent:
                                          enabled: false
                                          lokiCanary:
                                          enabled: false
                                          test:
                                          enabled: false
                                          gateway:
                                          enabled: false
                                          # we use a single binary to reduce resource footprint for the demo usage
                                          singleBinary:
                                          replicas: 1
                                          persistence:
                                          enabled: false
                                          extraVolumes:
                                          - name: data
                                          emptyDir: {}
                                          - name: storage
                                          emptyDir: {}
                                          extraVolumeMounts:
                                          - name: data
                                          mountPath: /data
                                          - name: storage
                                          mountPath: /var/loki

                                          Promtail

                                          A configuration example compatible with all providers:

                                          promtail:
                                          fullnameOverride: promtail
                                          # promtail requires to be spawned in kube-system namespace
                                          namespace: kube-system
                                          priorityClassName: system-node-critical
                                          config:
                                          clients:
                                          # forward logs to Loki
                                          - url: *promtailLokiUrl
                                          snippets:
                                          extraRelabelConfigs:
                                          - action: labelmap
                                          # required to be able to watch logs from Qovery console interface
                                          regex: __meta_kubernetes_pod_label_(qovery_com_service_id|qovery_com_service_type|qovery_com_environment_id)

                                          Certificates

                                          RequiredNo (but strongly recommended)
                                          If deployedCert-manager helps you to get TLS certificates through Let's Encrypt
                                          If missingWithout it, you will not be able to automatically get TLS certificates

                                          Qovery uses Cert Manager to automatically get TLS certificates for your applications.

                                          Cert Manager

                                          Here is the minimal setup for all cloud providers:

                                          cert-manager:
                                          fullnameOverride: cert-manager
                                          # CRD are required
                                          installCRDs: true
                                          replicaCount: 1
                                          startupapicheck:
                                          jobAnnotations:
                                          helm.sh/hook: post-install,post-upgrade
                                          rbac:
                                          annotations:
                                          helm.sh/hook: post-install,post-upgrade
                                          serviceAccount:
                                          annotations:
                                          helm.sh/hook: post-install,post-upgrade

                                          Qovery Cert Manager Webhook

                                          RequiredNo (but if you're using Qovery DNS Provider)
                                          If deployedRequired to get Let's Encrypt TLS if Qovery DNS Provider is used
                                          If missingWithout it, you will not be able to automatically get TLS certificates with Qovery DNS Provider

                                          A configuration example compatible with all providers:

                                          qovery-cert-manager-webhook:
                                          fullnameOverride: qovery-cert-manager-webhook
                                          certManager:
                                          # set the same namespace than cert-manager
                                          namespace: qovery
                                          serviceAccountName: cert-manager
                                          secret:
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken

                                          Cert Manager Configs

                                          RequiredNo
                                          If deployedThis is an helper to deploy cert-manager config. But you can manually set it
                                          If missingInstalling Cert-manager is not enough, you have to configure it to get TLS working

                                          This is the configuration of Cert Manager itself. It is used by all Cert Manager components.

                                          cert-manager-configs:
                                          fullnameOverride: cert-manager-configs
                                          # set pdns to use Qovery DNS provider
                                          externalDnsProvider: pdns
                                          managedDns: [*domain]
                                          acme:
                                          letsEncrypt:
                                          emailReport: *acmeEmailAddr
                                          # As it's a demo cluster, we use the staging environment to avoid rate limit issues
                                          acmeUrl: https://acme-staging-v02.api.letsencrypt.org/directory
                                          provider:
                                          # set the provider of your choice or use the Qovery DNS provider
                                          pdns:
                                          apiPort: 443
                                          apiUrl: *qoveryDnsUrl
                                          apiKey: *jwtToken

                                          Qovery uses Metrics Server to collect metrics from your Kubernetes cluster and scale your applications automatically based on custom metrics.

                                          Observability

                                          Metrics Server

                                          RequiredNo (but strongly recommended)
                                          If deployedMandatory if you want to retrive pod metrics for the Qovery agent and if you want to be able to use the horizontal pod scaling
                                          If missingNo HPA and no application metrics in the QOveyr console
                                          metrics-server:
                                          fullnameOverride: metrics-server
                                          defaultArgs:
                                          - --cert-dir=/tmp
                                          - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
                                          - --kubelet-use-node-status-port
                                          - --metric-resolution=15s
                                          - --kubelet-insecure-tls
                                          apiService:
                                          create: false

                                          FAQ

                                          I have a non-covered use case. What should I do?

                                          Please contact us. We will be happy to help you.

                                          Can I host the Qovery control plane on my own?

                                          At the momement, you can't. But please contact us to discuss about it. We will be happy to help you.

                                          - + - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html index 3bd2bbc970..89d72ed164 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                          -

                                          Create Credentials

                                          Generate your Scaleway credentials

                                          1. Connect to your Scaleway console

                                          2. Go to IAM

                                          3. Go to Applications

                                          4. Create a new application for your project

                                          5. Generate your new API key from your application view

                                            Set up the the preferred `Project` for `Object Storage` with your Scaleway Project
                                          6. Save the generated access key id and secret access key.

                                          7. Go to Policies

                                          8. Create a new policy with Principal linked to the application you just created.

                                          9. Set the scope of the policy to your project

                                          10. Select the following rules for your policy

                                            • Containers permissions
                                            • Network Service permissions
                                            • Compute permissions
                                            • Storage permissions
                                            • VPC permissions
                                          11. Create your policy

                                          12. Get your organization id in your organization settings

                                          13. Get your project id on your project dashboard

                                          Well done!! You now have your Scaleway access key id, secret access key, organization_id and project id; It is time to connect Qovery to your Scaleway account.

                                          +

                                          Create Credentials

                                          Generate your Scaleway credentials

                                          1. Connect to your Scaleway console

                                          2. Go to IAM

                                          3. Go to Applications

                                          4. Create a new application for your project

                                          5. Generate your new API key from your application view

                                            Set up the the preferred `Project` for `Object Storage` with your Scaleway Project
                                          6. Save the generated access key id and secret access key.

                                          7. Go to Policies

                                          8. Create a new policy with Principal linked to the application you just created.

                                          9. Set the scope of the policy to your project

                                          10. Select the following rules for your policy

                                            • Containers permissions
                                            • Network Service permissions
                                            • Compute permissions
                                            • Storage permissions
                                            • VPC permissions
                                          11. Create your policy

                                          12. Get your organization id in your organization settings

                                          13. Get your project id on your project dashboard

                                          Well done!! You now have your Scaleway access key id, secret access key, organization_id and project id; It is time to connect Qovery to your Scaleway account.

                                          - + - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html index 063d141757..f6fdcb4675 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                          FAQ

                                          How Qovery works on Scaleway

                                          Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds. -To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).

                                          Read more on how Qovery works behind the scene.

                                          Kubernetes

                                          The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                                          Managed services

                                          Scaleway provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                                          Security and compliance

                                          Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                                          • Your configuration are stored on your Scaleway account.
                                          • Your configuration is encrypted on your Scaleway account.
                                          • Qovery can't access to your data.
                                          • Suppose Qovery stops to run, your applications are not impacted.

                                          FAQ

                                          How to choose a region?

                                          Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                                          I don't find a region that is provided by Scaleway

                                          We are probably testing the support of this region, please contact us to know what's the status

                                          Migrate between Cloud providers and regions

                                          Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                                          +To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).

                                          Read more on how Qovery works behind the scene.

                                          Kubernetes

                                          The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                                          Managed services

                                          Scaleway provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                                          Security and compliance

                                          Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                                          • Your configuration are stored on your Scaleway account.
                                          • Your configuration is encrypted on your Scaleway account.
                                          • Qovery can't access to your data.
                                          • Suppose Qovery stops to run, your applications are not impacted.

                                          FAQ

                                          How to choose a region?

                                          Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                                          I don't find a region that is provided by Scaleway

                                          We are probably testing the support of this region, please contact us to know what's the status

                                          Migrate between Cloud providers and regions

                                          Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                                          - + - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html index d9b876a6a8..3682ff3a98 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                          -
                                          Resources
                                            +
                                            Resources
                                              - + - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html index aeb35d7ad2..9412786ee0 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                              -

                                              Quickstart

                                              Install Qovery on your Scaleway account in less than 20 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

                                              1. Create a Kubernetes cluster

                                                Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                                                Add Cluster

                                                Note that you can create multiple clusters on the same Scaleway account with different VPCs. You can also create multiple clusters on different Scaleway accounts. Qovery will manage them for you.

                                              2. Attach Scaleway credentials

                                                Follow this guide to create your Scaleway credentials.

                                                Create Credentials

                                                Then attach your credentials to your cluster and click on Create. Then, click on Continue.

                                              3. Install Qovery

                                                Click on Create and Deploy to create the cluster and install Qovery on it.

                                                It will take up to 20 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                                                You should see your new cluster in the list of clusters.

                                                Show clusters

                                              +

                                              Quickstart

                                              Install Qovery on your Scaleway account in less than 20 minutes. Qovery will create a Kubernetes cluster for you and manage it for you. To install Qovery on an existing Kubernetes cluster, please refer to the dedicated documentation.

                                              1. Create a Kubernetes cluster

                                                Now you can create your Kubernetes cluster. Follow this guide to create your Kubernetes cluster.

                                                Add Cluster

                                                Note that you can create multiple clusters on the same Scaleway account with different VPCs. You can also create multiple clusters on different Scaleway accounts. Qovery will manage them for you.

                                              2. Attach Scaleway credentials

                                                Follow this guide to create your Scaleway credentials.

                                                Create Credentials

                                                Then attach your credentials to your cluster and click on Create. Then, click on Continue.

                                              3. Install Qovery

                                                Click on Create and Deploy to create the cluster and install Qovery on it.

                                                It will take up to 20 minutes to create the cluster, VPC and install Qovery on it. But you can already configure your first application.

                                                You should see your new cluster in the list of clusters.

                                                Show clusters

                                              - + - + diff --git a/docs/getting-started/install-qovery/scaleway/index.html b/docs/getting-started/install-qovery/scaleway/index.html index b240fd66b8..34443a74a9 100644 --- a/docs/getting-started/install-qovery/scaleway/index.html +++ b/docs/getting-started/install-qovery/scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                              -
                                              +
                                              - + - + diff --git a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html index ed454aff77..85e4e0bfba 100644 --- a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                              -

                                              Self-Managed Cluster

                                              To install Qovery on your existing Kubernetes cluster on your Scaleway account. Please refer to the installation documentation for Kubernetes.

                                              Resources
                                                +

                                                Self-Managed Cluster

                                                To install Qovery on your existing Kubernetes cluster on your Scaleway account. Please refer to the installation documentation for Kubernetes.

                                                Resources
                                                  - + - + diff --git a/docs/getting-started/what-is-qovery/index.html b/docs/getting-started/what-is-qovery/index.html index 0af36abb79..a9aa81401a 100644 --- a/docs/getting-started/what-is-qovery/index.html +++ b/docs/getting-started/what-is-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                  -

                                                  What is Qovery?

                                                  Qovery is the Internal Developer Platform (IDP) that cuts noise for developers with paved paths to production. Testing, ephemeral environments, and drive action to improve software.

                                                  Developers and a Platform Engineer using Qovery as an IDP

                                                  Qovery For Platform Engineers

                                                  By using Qovery, Platform Engineering teams can provide an outstanding platform to their developers in less than a hour. Then Platform Engineering teams can tailor the experience of Qovery and even build on top of it to fit their own golden path. They keep the control and can audit what developers do.

                                                  How Qovery Works

                                                  Qovery runs on top of Kubernetes and provide a convenient layer with a set of features to build a platform that your developers love.

                                                  Qovery - How it Works

                                                  Notable features for Platform Engineers

                                                  Qovery For Developers / Engineering Teams

                                                  By using Qovery, developers are autonomous in deploying their applications, debugging, and scaling. They don't need any infrastructure knowledge. They can connect their git repository, pushing and deploying their apps.

                                                  Qovery focus on providing an outstanding Developer Experience and never assume that developers know how underlying infrastructure work.

                                                  Notable features for Developers

                                                  • Self-Service Platform
                                                  • Git Push And Deploy
                                                  • Live Application Logs
                                                  • Easy Variables Management
                                                  • Easy Domain Management
                                                  • No Infra Knowledge Needed
                                                  • Ephemeral Environments

                                                  Integrates Qovery in your technical stack

                                                  1. Qovery is battery included! Get a State-of-the-Art Internal Developer Platform in 30 minutes.
                                                  2. Qovery integrates perfectly well into an existing ecosystem.

                                                  Qovery - Internal Developer Platform landscape

                                                  +

                                                  What is Qovery?

                                                  Qovery is the Internal Developer Platform (IDP) that cuts noise for developers with paved paths to production. Testing, ephemeral environments, and drive action to improve software.

                                                  Developers and a Platform Engineer using Qovery as an IDP

                                                  Qovery For Platform Engineers

                                                  By using Qovery, Platform Engineering teams can provide an outstanding platform to their developers in less than a hour. Then Platform Engineering teams can tailor the experience of Qovery and even build on top of it to fit their own golden path. They keep the control and can audit what developers do.

                                                  How Qovery Works

                                                  Qovery runs on top of Kubernetes and provide a convenient layer with a set of features to build a platform that your developers love.

                                                  Qovery - How it Works

                                                  Notable features for Platform Engineers

                                                  Qovery For Developers / Engineering Teams

                                                  By using Qovery, developers are autonomous in deploying their applications, debugging, and scaling. They don't need any infrastructure knowledge. They can connect their git repository, pushing and deploying their apps.

                                                  Qovery focus on providing an outstanding Developer Experience and never assume that developers know how underlying infrastructure work.

                                                  Notable features for Developers

                                                  • Self-Service Platform
                                                  • Git Push And Deploy
                                                  • Live Application Logs
                                                  • Easy Variables Management
                                                  • Easy Domain Management
                                                  • No Infra Knowledge Needed
                                                  • Ephemeral Environments

                                                  Integrates Qovery in your technical stack

                                                  1. Qovery is battery included! Get a State-of-the-Art Internal Developer Platform in 30 minutes.
                                                  2. Qovery integrates perfectly well into an existing ecosystem.

                                                  Qovery - Internal Developer Platform landscape

                                                  - + - + diff --git a/docs/getting-started/whats-next/index.html b/docs/getting-started/whats-next/index.html index 837f8c4f6c..97a5b5cc08 100644 --- a/docs/getting-started/whats-next/index.html +++ b/docs/getting-started/whats-next/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                  What's next?

                                                  Before you go any further, make sure you have followed and finished the basic Getting Started Guide:

                                                  Getting Started Guide

                                                  After you have hands-on experience with Qovery, you can learn more about all the concepts and features in Using Qovery -subsections:

                                                  Using Qovery
                                                  Resources
                                                    +subsections:

                                                    Using Qovery
                                                    Resources
                                                      - + - + diff --git a/docs/index.html b/docs/index.html index 9924636062..87fa1564be 100644 --- a/docs/index.html +++ b/docs/index.html @@ -22,9 +22,9 @@ - + - + @@ -37,9 +37,9 @@ - + - + diff --git a/docs/security-and-compliance/backup-and-restore/index.html b/docs/security-and-compliance/backup-and-restore/index.html index 608221474b..f8a1cdd325 100644 --- a/docs/security-and-compliance/backup-and-restore/index.html +++ b/docs/security-and-compliance/backup-and-restore/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                      -

                                                      Backup and Restore

                                                      Backups and restore are frequently a nightmare to setup. Especially for databases. Qovery helps you to get this part always automatically managed by the Cloud provider.

                                                      Backups

                                                      Applications

                                                      When containers' applications are successfully built, all containers are kept for possible future rollback.

                                                      Services

                                                      Take a look at the desired service to know how they are backed up.

                                                      Restore

                                                      Applications

                                                      As the Qovery configuration file is in your git repository and versioned, you can rollback any version when you want.

                                                      Services

                                                      Take a look at the desired service to know how you can restore it.

                                                      +

                                                      Backup and Restore

                                                      Backups and restore are frequently a nightmare to setup. Especially for databases. Qovery helps you to get this part always automatically managed by the Cloud provider.

                                                      Backups

                                                      Applications

                                                      When containers' applications are successfully built, all containers are kept for possible future rollback.

                                                      Services

                                                      Take a look at the desired service to know how they are backed up.

                                                      Restore

                                                      Applications

                                                      As the Qovery configuration file is in your git repository and versioned, you can rollback any version when you want.

                                                      Services

                                                      Take a look at the desired service to know how you can restore it.

                                                      - + - + diff --git a/docs/security-and-compliance/encryption/index.html b/docs/security-and-compliance/encryption/index.html index 139bea3294..76461d35fd 100644 --- a/docs/security-and-compliance/encryption/index.html +++ b/docs/security-and-compliance/encryption/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                      -

                                                      Encryption

                                                      Data in transit

                                                      Data in transit between the World and Qovery is always encrypted, as all of the services which Qovery supports. Services include the Qovery CLI, management console, Documentation, Landing Page, and Back Office.

                                                      Data in transit between the World and customer applications is encrypted. By default, HTTPS connections use an automatically generated Let's Encrypt certificate, or users may provide their own TLS certificate (Enterprise only).

                                                      Data in transit on Qovery controlled networks (e.g., between the application and a database) use end-to-end encryption and private networking rules.

                                                      Data storage

                                                      All application data is encrypted by using encrypted storage (typically using an AES-256 block cipher). If you have specific audit requirements surrounding data at rest encryption, please contact us.

                                                      Secrets

                                                      All secrets data is encrypted by using salted AES-256.

                                                      +

                                                      Encryption

                                                      Data in transit

                                                      Data in transit between the World and Qovery is always encrypted, as all of the services which Qovery supports. Services include the Qovery CLI, management console, Documentation, Landing Page, and Back Office.

                                                      Data in transit between the World and customer applications is encrypted. By default, HTTPS connections use an automatically generated Let's Encrypt certificate, or users may provide their own TLS certificate (Enterprise only).

                                                      Data in transit on Qovery controlled networks (e.g., between the application and a database) use end-to-end encryption and private networking rules.

                                                      Data storage

                                                      All application data is encrypted by using encrypted storage (typically using an AES-256 block cipher). If you have specific audit requirements surrounding data at rest encryption, please contact us.

                                                      Secrets

                                                      All secrets data is encrypted by using salted AES-256.

                                                      - + - + diff --git a/docs/security-and-compliance/gdpr/index.html b/docs/security-and-compliance/gdpr/index.html index 38ccb9b751..ed7dc2cb2a 100644 --- a/docs/security-and-compliance/gdpr/index.html +++ b/docs/security-and-compliance/gdpr/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                      -

                                                      GDPR

                                                      Qovery has taken numerous steps to ensure GDPR compliance. As part of our measures, we have implemented the following:

                                                      Data Protection by Design

                                                      We've implemented policies in the company to ensure all of our employees follow the necessary training and protocols around security. Besides, privacy protection is part of every project during instantiation.

                                                      Data Protection Officer

                                                      Appointment of a Security Officer, who also holds the Data Protection Officer (DPO) role. If you have any concern, contact us.

                                                      Consent

                                                      We've confirmed that all of our customer communication, both business-related and marketing-related, is opt-in, and no information is shared with us without a customer's consent.

                                                      Enhanced Rights

                                                      The GDPR provides rights to individuals, such as the right to portability, right of rectification, and the right to be forgotten. We've made sure we comply with these rights. Nearly all information can be edited through a user's account, and we can delete accounts upon request.

                                                      Data Collection

                                                      We've documented information about what data we collect.

                                                      Data Retention

                                                      We documented information about our data retention.

                                                      +

                                                      GDPR

                                                      Qovery has taken numerous steps to ensure GDPR compliance. As part of our measures, we have implemented the following:

                                                      Data Protection by Design

                                                      We've implemented policies in the company to ensure all of our employees follow the necessary training and protocols around security. Besides, privacy protection is part of every project during instantiation.

                                                      Data Protection Officer

                                                      Appointment of a Security Officer, who also holds the Data Protection Officer (DPO) role. If you have any concern, contact us.

                                                      Consent

                                                      We've confirmed that all of our customer communication, both business-related and marketing-related, is opt-in, and no information is shared with us without a customer's consent.

                                                      Enhanced Rights

                                                      The GDPR provides rights to individuals, such as the right to portability, right of rectification, and the right to be forgotten. We've made sure we comply with these rights. Nearly all information can be edited through a user's account, and we can delete accounts upon request.

                                                      Data Collection

                                                      We've documented information about what data we collect.

                                                      Data Retention

                                                      We documented information about our data retention.

                                                      - + - + diff --git a/docs/security-and-compliance/index.html b/docs/security-and-compliance/index.html index 47b9c32866..b3322bbe6b 100644 --- a/docs/security-and-compliance/index.html +++ b/docs/security-and-compliance/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                      -
                                                      Resources
                                                        +
                                                        Resources
                                                          - + - + diff --git a/docs/security-and-compliance/soc2/index.html b/docs/security-and-compliance/soc2/index.html index 93da240cab..aefe07a3e4 100644 --- a/docs/security-and-compliance/soc2/index.html +++ b/docs/security-and-compliance/soc2/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                          SOC2

                                                          Qovery infrastructure and process comply with SOC2 (Systems and Organizations Controls 2) best practices. Qovery also brings by default many security features to your applications, clusters, and databases to comply with the most stringent security standards of SOC2. -You can find additional information on the Qovery trust page.

                                                          All customers using Qovery, requiring to be SOC2 compliant, save a lot of time as the deployed infrastructure is SOC2 ready!

                                                          In this documentation, you will find settings to update to comply with SOC2 and even more.

                                                          Cluster advanced settings

                                                          In the cluster advanced settings, you will find several options to update based on your wishes and to comply with SOC2. Here are the most important ones:

                                                          Log retention days

                                                          • AWS Cloudwatch retention days (aws.cloudwatch.eks_logs_retention_days): 365 days is what SOC2 requests at least
                                                          • Enable VPC flow logs (aws.vpc.enable_s3_flow_logs and aws.vpc.flow_logs_retention_days): Enable it and set the retention days to 365 days
                                                          • Allowed databases CIDR: you have to disable or restrict public access, but not let them open to the world
                                                          +You can find additional information on the Qovery trust page.

                                                          All customers using Qovery, requiring to be SOC2 compliant, save a lot of time as the deployed infrastructure is SOC2 ready!

                                                          In this documentation, you will find settings to update to comply with SOC2 and even more.

                                                          Cluster advanced settings

                                                          In the cluster advanced settings, you will find several options to update based on your wishes and to comply with SOC2. Here are the most important ones:

                                                          Log retention days

                                                          • AWS Cloudwatch retention days (aws.cloudwatch.eks_logs_retention_days): 365 days is what SOC2 requests at least
                                                          • Enable VPC flow logs (aws.vpc.enable_s3_flow_logs and aws.vpc.flow_logs_retention_days): Enable it and set the retention days to 365 days
                                                          • Allowed databases CIDR: you have to disable or restrict public access, but not let them open to the world
                                                          - + - + diff --git a/docs/useful-resources/faq/index.html b/docs/useful-resources/faq/index.html index 56b94bb497..9a85e9a3d3 100644 --- a/docs/useful-resources/faq/index.html +++ b/docs/useful-resources/faq/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@

                                                          FAQ

                                                          What is the difference between a Project, an Application, and an Environment?

                                                          A project is the site that you're working on. Each project can contain multiple applications and be deployed in multiple environments. An environment is a standalone copy of your site, including apps, databases, storage, data, and all other services. By default, main branch is the production environment, while all other branches can be set up as identical copies of the prod environment for testing purposes.

                                                          How does Qovery manage databases?

                                                          Qovery provides managed and container modes for your databases. Basically, managed mode relies on the managed database provided by the cloud provider. E.g. if you choose Postgres with the managed mode while your environment is running on AWS, then Qovery provides an AWS RDS instance. Please check out our database section for further details.

                                                          Does Qovery replace Kubernetes?

                                                          Behind the scene, Qovery uses Kubernetes. Qovery extends Kubernetes to make it accessible to any developer teams. Important: Qovery does not modify Kubernetes. It only deploys his services in a qovery Kubernetes namespace.

                                                          Does Qovery support mono repository?

                                                          Yes, absolutely! Check out our monorepo guide.

                                                          Does Qovery support microservices?

                                                          Yes, absolutely! Check out our microservices guide.

                                                          What Git providers do you support?

                                                          GitHub, GitLab, BitBucket.

                                                          Do you support GitHub Enterprise or Gitlab Self-hosted?

                                                          Not at the moment, but you can upvote for this feature in our roadmap.

                                                          Does Qovery support private Git repository?

                                                          Yes, absolutely!

                                                          Which IP address does my cluster use to communicate externally over the Internet?

                                                          There isn't just one public cluster IP adress dedicated to external communication. However, worker nodes inside your cluster each have a public IP automatically attached to them. You can view those default public IPs in the details of your worker nodes (EC2 instances for AWS users) which belong to the node group in your cluster.

                                                          For improved security and control, the Static IP feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses. For more information on the Static IP feature and how to enable it at cluster creation, see Static IP.

                                                          If I have N custom domains under the same root domain, do I need to create N CNAME records, or just creating one for the root domain is enough ?

                                                          You have to create N CNAME, one per custom domain

                                                          How do you support new Kubernetes version?

                                                          The Qovery team manages your Kubernetes cluster's upgrade, and you don't have to think about it. Upgrades from one minor Kubernetes version to another require a good amount of tests to make sure everything goes smoothly with zero interruptions for your app. This is why Qovery always provides 1 or 2 minor versions below the last one offered by the cloud provider. Our goal is to guarantee you the maximum uptime.

                                                          More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                                                          Can I upgrade my cluster myself

                                                          NO and you SHOULDN'T ! -More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                                                          Can I have access to my Kubernetes cluster?

                                                          Absolutely, you can follow this guide.

                                                          Can I have access to my application with a shell?

                                                          Absolutely, check out our CLI and the qovery shell command.

                                                          How application auto-scaling works?

                                                          Take a look at our application documentation.

                                                          Why you should use Qovery?

                                                          The power of Kubernetes

                                                          Under the hood, Qovery uses containers and Kubernetes to run applications. With us, your applications scale accordingly to your traffic and needs. We rely on major cloud providers to provide reliable infrastructure to make your applications highly available.

                                                          Reliable infrastructure

                                                          What's more, we took on our shoulders the complexity of providing and managing other infrastructure requirements you need (like databases or message brokers), so you can focus merely on developing business features.

                                                          Simple and Powerful

                                                          With Qovery, the cloud is simple again. Get all the benefits of using cloud and Kubernetes without dealing with its complexity. You don't need to hire infrastructure experts - configuring continuous integration, deployment, databases, message brokers, storage, DNS, SSL/TLS, VPCs, and many others - we do it all for you. On Qovery, you can spin up a set of microservices, databases, and other cloud services in minutes with a single Git push!

                                                          Built for all developers

                                                          Qovery is designed by developers for developers. Our goal is to make your life easier and allow you to move faster. Developer experience is at our heart. Building cloud-native applications was never that fast and simple!

                                                          Fully customizable for advanced business use cases

                                                          Create teams, split responsibilities, manage privileges, enforce company-wide rules, deploy to multiple clouds, plug in your own CI solutions. Qovery Business allows you to bring your organization to the next level with ease.

                                                          How Qovery works under the hood?

                                                          Here is a detailed explanation on how Qovery works under the hood.

                                                          What is an Active User?

                                                          An Active User is someone who made a code change on git or deployed an application in the last 30 days. We do not count contributions to public (open-source) repositories.

                                                          How can I contact you?

                                                          Feel free to join our Discord server or contact us by email at hello (at) qovery.com.

                                                          +More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                                                          Can I have access to my Kubernetes cluster?

                                                          Absolutely, you can follow this guide.

                                                          Can I have access to my application with a shell?

                                                          Absolutely, check out our CLI and the qovery shell command.

                                                          How application auto-scaling works?

                                                          Take a look at our application documentation.

                                                          Why you should use Qovery?

                                                          The power of Kubernetes

                                                          Under the hood, Qovery uses containers and Kubernetes to run applications. With us, your applications scale accordingly to your traffic and needs. We rely on major cloud providers to provide reliable infrastructure to make your applications highly available.

                                                          Reliable infrastructure

                                                          What's more, we took on our shoulders the complexity of providing and managing other infrastructure requirements you need (like databases or message brokers), so you can focus merely on developing business features.

                                                          Simple and Powerful

                                                          With Qovery, the cloud is simple again. Get all the benefits of using cloud and Kubernetes without dealing with its complexity. You don't need to hire infrastructure experts - configuring continuous integration, deployment, databases, message brokers, storage, DNS, SSL/TLS, VPCs, and many others - we do it all for you. On Qovery, you can spin up a set of microservices, databases, and other cloud services in minutes with a single Git push!

                                                          Built for all developers

                                                          Qovery is designed by developers for developers. Our goal is to make your life easier and allow you to move faster. Developer experience is at our heart. Building cloud-native applications was never that fast and simple!

                                                          Fully customizable for advanced business use cases

                                                          Create teams, split responsibilities, manage privileges, enforce company-wide rules, deploy to multiple clouds, plug in your own CI solutions. Qovery Business allows you to bring your organization to the next level with ease.

                                                          How Qovery works under the hood?

                                                          Here is a detailed explanation on how Qovery works under the hood.

                                                          What is an Active User?

                                                          An Active User is someone who made a code change on git or deployed an application in the last 30 days. We do not count contributions to public (open-source) repositories.

                                                          How can I contact you?

                                                          Feel free to join our Discord server or contact us by email at hello (at) qovery.com.

                                                          - + - + diff --git a/docs/useful-resources/help-and-support/index.html b/docs/useful-resources/help-and-support/index.html index a6e8c7e28f..290956a5ca 100644 --- a/docs/useful-resources/help-and-support/index.html +++ b/docs/useful-resources/help-and-support/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Help and Support

                                                          Qovery support

                                                          If you need any help, you can:

                                                          1. Most common issues and solutions are listed in the troubleshooting section.
                                                          2. Qovery Community Forum is the first place to tool at. You will find a lot of qualitative questions and answers.
                                                          3. Finally, if you did not receive answers on the forum or if you have a big outage, you can contact us from the product on Intercom.

                                                          There, you can discuss directly with our fantastic team as well as our wonderful community!

                                                          Cloud provider support

                                                          Qovery is responsible for deployed elements on your cloud provider made and maintained by Qovery. We are not responsible for the cloud provider itself.

                                                          +

                                                          Help and Support

                                                          Qovery support

                                                          If you need any help, you can:

                                                          1. Most common issues and solutions are listed in the troubleshooting section.
                                                          2. Qovery Community Forum is the first place to tool at. You will find a lot of qualitative questions and answers.
                                                          3. Finally, if you did not receive answers on the forum or if you have a big outage, you can contact us from the product on Intercom.

                                                          There, you can discuss directly with our fantastic team as well as our wonderful community!

                                                          Cloud provider support

                                                          Qovery is responsible for deployed elements on your cloud provider made and maintained by Qovery. We are not responsible for the cloud provider itself.

                                                          - + - + diff --git a/docs/using-qovery/audit-logs/index.html b/docs/using-qovery/audit-logs/index.html index aad770fad1..9a31474a18 100644 --- a/docs/using-qovery/audit-logs/index.html +++ b/docs/using-qovery/audit-logs/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Audit Logs

                                                          Qovery allows you to monitor any action happened within your organization thanks to the audit logs section. This section provides you with a complete view on any change happened within your organization configuration, providing you the answer to "who did what, where, and when?".

                                                          This is extremely useful when debugging complex issues and trying to understand what happened in a specific timeframe or monitor the actions done by your users within your organization.

                                                          You can access this section by opening the Audit logs section from the nav bar on the left

                                                          Audit Logs Access

                                                          Once entered this section, you will find here the list of events happened within your organization over the past 30 days (this is the maximum retention time).

                                                          Event information

                                                          Each event in the list is composed by the following information:

                                                          • Timestamp: it tells you when the event happened
                                                          • Event Type: it describe the type of event (Create, Update, Delete, Trigger Deployment etc..)
                                                          • Target Type: it defines the type of object that has been modified (Environment, Cluster, Role, Image registry etc..)
                                                          • Target: it defines the object that has been modified. You can get additional information on the target by hovering on it.
                                                          • Change: it describes what has been modified (high level information: its config, a deployment rule etc..)
                                                          • User: it describes who modified the object. If the change has been done via API, you will find the API token name that has changed it.
                                                          • Tool: it describes how the object has been changed (via the console, the qovery terraform provider, via a git push etc..)

                                                          Since the audit logs are based on the calls done on our API, Qovery provides you with the JSON sent in the API response for each API call (and thus, for each event). This JSON represents the status of the target object after the event has happened. You can access the JSON by clicking on the event and might be useful to get a more granular information of what has changed between two events of the same type by comparing their JSON.

                                                          Example: if an update happened on the configuration of an application , the stored UPDATE event will provide you access to the JSON returned by the API when the /application endpoint was called. This JSON will thus contain the configuration of the application after the update.

                                                          Filters

                                                          To simplify the research within the audit logs, you can filter the events by:

                                                          • Time range
                                                          • Target: you will have to specify a target type (cluster, environment, service etc..) and then specify the name of the target. For example, if you want to look for the changes happened on the cluster Production, you will have to select Cluster as Target type and then you will have to select Production from within the cluster list.

                                                          Quick Filters

                                                          While navigating within the console, a few quick filters allow you to jump on the audit logs and get the events happened on that specific object. For example, you can quickly get the events happened on a specific environment, by clicking on the See Events button available within the 3 dots sub-menu

                                                          See Events Quick Filter

                                                          Export

                                                          Not yet available, feature coming soon!

                                                          +

                                                          Audit Logs

                                                          Qovery allows you to monitor any action happened within your organization thanks to the audit logs section. This section provides you with a complete view on any change happened within your organization configuration, providing you the answer to "who did what, where, and when?".

                                                          This is extremely useful when debugging complex issues and trying to understand what happened in a specific timeframe or monitor the actions done by your users within your organization.

                                                          You can access this section by opening the Audit logs section from the nav bar on the left

                                                          Audit Logs Access

                                                          Once entered this section, you will find here the list of events happened within your organization over the past 30 days (this is the maximum retention time).

                                                          Event information

                                                          Each event in the list is composed by the following information:

                                                          • Timestamp: it tells you when the event happened
                                                          • Event Type: it describe the type of event (Create, Update, Delete, Trigger Deployment etc..)
                                                          • Target Type: it defines the type of object that has been modified (Environment, Cluster, Role, Image registry etc..)
                                                          • Target: it defines the object that has been modified. You can get additional information on the target by hovering on it.
                                                          • Change: it describes what has been modified (high level information: its config, a deployment rule etc..)
                                                          • User: it describes who modified the object. If the change has been done via API, you will find the API token name that has changed it.
                                                          • Tool: it describes how the object has been changed (via the console, the qovery terraform provider, via a git push etc..)

                                                          Since the audit logs are based on the calls done on our API, Qovery provides you with the JSON sent in the API response for each API call (and thus, for each event). This JSON represents the status of the target object after the event has happened. You can access the JSON by clicking on the event and might be useful to get a more granular information of what has changed between two events of the same type by comparing their JSON.

                                                          Example: if an update happened on the configuration of an application , the stored UPDATE event will provide you access to the JSON returned by the API when the /application endpoint was called. This JSON will thus contain the configuration of the application after the update.

                                                          Filters

                                                          To simplify the research within the audit logs, you can filter the events by:

                                                          • Time range
                                                          • Target: you will have to specify a target type (cluster, environment, service etc..) and then specify the name of the target. For example, if you want to look for the changes happened on the cluster Production, you will have to select Cluster as Target type and then you will have to select Production from within the cluster list.

                                                          Quick Filters

                                                          While navigating within the console, a few quick filters allow you to jump on the audit logs and get the events happened on that specific object. For example, you can quickly get the events happened on a specific environment, by clicking on the See Events button available within the 3 dots sub-menu

                                                          See Events Quick Filter

                                                          Export

                                                          Not yet available, feature coming soon!

                                                          - + - + diff --git a/docs/using-qovery/configuration/advanced-settings/index.html b/docs/using-qovery/configuration/advanced-settings/index.html index 4cca81b717..42d61243a6 100644 --- a/docs/using-qovery/configuration/advanced-settings/index.html +++ b/docs/using-qovery/configuration/advanced-settings/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Service Advanced Settings

                                                          To further fine-tune your Qovery infrastructure, you can set advanced settings through the Advanced Settings section of your service.

                                                          To access the Advanced Settings section:

                                                          1. Select the service where you want to modify the advanced settings

                                                            Settings

                                                          2. Open the advanced settings section from the left menu

                                                            Advanced Settings

                                                          The screen shows you the list of available advanced settings and for each of them:

                                                          • The default value
                                                          • The value configured right now

                                                          You can show only the modified values by activating the "Show only overridden settings" feature toggle.

                                                          All services have access to advanced settings, you can find where they are available in the documentation below with those badges:

                                                          Application Deployment

                                                          build.timeout_max_sec

                                                          TypeDescriptionDefault Value
                                                          integerAllows you to specify an interval, in seconds, after which the application build times out.1800

                                                          build.cpu_max_in_milli

                                                          TypeDescriptionDefault Value
                                                          integerCPU allocated to your build process4000

                                                          build.ram_max_in_gib

                                                          TypeDescriptionDefault Value
                                                          integerGB RAM allocated to your build process8

                                                          deployment.custom_domain_check_enabled

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanQovery allows you to set custom domains for your applications through the addition of a CNAME record to your domain's DNS settings. By default, when an application is deployed, Qovery checks that the CNAME record is set up correctly. This advanced setting allows you to disable this check.If you are using a Content Delivery Network (CDN), checking the CNAME setup for any custom domains you may have set up is likely to stall the deployment of your application.

                                                          Therefore, if you are using a CDN behind your application, we recommend disabling this feature to save time during your application deployments.
                                                          true

                                                          deployment.termination_grace_period_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDecide how many times in seconds the application is supposed to stop at maximum. After this time, the application will be forced to stop (killed)An application requiring several tasks to be stopped properly should have a higher grace period. If the application finishes early, then it will not wait until the end of the grace period60

                                                          deployment.affinity.node.required

                                                          TypeDescriptionUse CaseDefault Value
                                                          Map<String, String>Set pod placement on specific Kubernetes nodes labels.Can be useful to send pods on GPU nodes or any other specific workload based on node lablels (Eg. {"eks.amazonaws.com/nodegroup": "gpu"})``

                                                          deployment.antiaffinity.pod

                                                          TypeDescriptionDefault Value
                                                          stringDefine how you want pods affinity to behave.
                                                          Preferred: allows, but does not require, pods of a given service are not co-located (or co-hosted) on a single node
                                                          Required: ensures that the pods of a given service are not co-located (or co-hosted) on a single node (safer in term of availability but can be expensive depending on the number of replicas)
                                                          Preferred

                                                          Deployment strategy

                                                          deployment.update_strategy.type

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringSet deployment strategy type (RollingUpdate or Recreate)Rolling update strategy will gracefully rollout new versions, while Recreate will stop all current versions and create new ones once all old ones have been shutdown (more info)RollingUpdate

                                                          deployment.update_strategy.rolling_update.max_unavailable_percent

                                                          TypeDescriptionDefault Value
                                                          integerDefine the percentage of a maximum number of pods that can be unavailable during the update process (more info).25

                                                          deployment.update_strategy.rolling_update.max_surge_percent

                                                          TypeDescriptionDefault Value
                                                          integerDefine the percentage of the maximum number of pods that can be created over the desired number of pods (more info)25

                                                          Network Settings

                                                          network.ingress.cors_allow_headers

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which set of headers can be present in the client request.For security purposes, you can indicate which HTTP headers can be used during a CORS preflight request which includes the Access-Control-Request-Headers request header. For more information, see CORS HTTP Response Headers."DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization"

                                                          network.ingress.cors_allow_methods

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which set of methods can be used for the client request.For security purposes, you can indicate which HTTP methods are permitted while accessing a resource in response to cross-origin requests. For more information, see CORS HTTP Response Headers."GET, PUT, POST, DELETE, PATCH, OPTIONS"

                                                          network.ingress.cors_allow_origin

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which origin(s) (domain, scheme, port) can access a resource.For security purposes, you can allow only one or a short list of origins to access your resources. For more information, see CORS HTTP Response Headers."*"

                                                          network.ingress.enable_cors

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanAllows you to enable Cross-Origin Resource Sharing (CORS).The CORS mechanism supports secure cross-origin requests and data transfers between browsers and servers. For more information on CORS and when to enable it, see Cross-Origin Resources Sharing.false

                                                          network.ingress.enable_sticky_session

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanAllows you to enable Sticky session.Enable the load balancer to bind a user's session to a specific target. This ensures that all requests from the user during the session are sent to the same targetfalse

                                                          network.ingress.keepalive_time_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerLimits the maximum time (in seconds) during which requests can be processed through one keepalive connection. After this time is reached, the connection is closed following the subsequent request processing.Useful to tune your gRPC application3600

                                                          network.ingress.keepalive_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) during which an idle keepalive connection to an upstream server will stay open.Useful to tune your gRPC application60

                                                          network.ingress.proxy_body_size_mb

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerAllows you to set, in megabytes, a maximum size for resources that can be downloaded from your server.By default, users can download resources (files, images, videos...) of up to 100 MB. You can use this advanced setting to lower or increase this limitation.100

                                                          network.ingress.proxy_buffer_size_kb

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerAllows you to set, in kilobytes, a header buffer size used while reading the response header from upstream.E.g. You are using Auth0 with NextJS, you will need to set a bigger header size4

                                                          network.ingress.proxy_connect_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDefines a timeout (in seconds) for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.E.g. You can use it to define the maximum time to wait for your application to establish the connexion.60

                                                          network.ingress.proxy_read_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDefines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                                                          network.ingress.proxy_send_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                                                          network.ingress.proxy_buffering

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to enable or disable nginx proxy-buffering. Valid values are on or offon

                                                          network.ingress.proxy_request_buffering

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to enable or disable nginx proxy-request_buffering. Valid values are on or offon

                                                          network.ingress.send_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.Useful to define the maximum timeout to wait for client connection.60

                                                          network.ingress.whitelist_source_range

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringAllows you to specify which IP ranges are allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1By default, any IP can access your application if it's exposed publicly and the users know the URL. You can limit its access by specifying the IPs you want to reach the app (e.g. the IP of your office)0.0.0.0/0 (any IP)

                                                          network.ingress.denylist_source_range

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify which IP ranges are not allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1``

                                                          network.ingress.basic_auth_env_var

                                                          TypeDescriptionDefault Value
                                                          stringSet the name of an environment variable to use as a basic authentication (login:crypted_password) from htpasswd command.``

                                                          Here is an example where you can create a secret environment variable on Qovery and set a name like BASIC_AUTH_CREDENTIALS. The content should be the result of the htpasswd command:

                                                          $ htpasswd -n <username>
                                                          New password:
                                                          Re-type new password:
                                                          username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20

                                                          The content of the BASIC_AUTH_CREDENTIALS environment variable should be: username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. To finish, set the network.ingress.basic_auth_env_var advanced settings to BASIC_AUTH_CREDENTIALS.

                                                          You can pass set credentials by separating them with a comma. For example: username1:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20,username2:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. However, the total length of the environment variable should not exceed 1MB.

                                                          network.ingress.extra_headers

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify response headers with values separated by comma (e.g. {"X-Frame-Options":"DENY","X-Content-Type-Options":"nosniff"}{}

                                                          Auto-scaling

                                                          hpa.cpu.average_utilization_percent

                                                          TypeDescriptionDefault Value
                                                          integerAuto-scaling is triggered when a specific CPU utilization metric is reached (for instance, 40%). This advanced setting allows you to set this metric.60

                                                          Job Settings

                                                          job.delete_ttl_seconds_after_finished

                                                          TypeDescriptionDefault Value
                                                          integerBy default terminated jobs in a completed or failure state are not deleted. if this parameter is set, Kubernetes will automatically cleanup completed jobs after the ttlnull

                                                          cronjob.concurrency_policy

                                                          TypeDescriptionDefault Value
                                                          stringIt defines if it is allowed to start another instance of the same job if the previous execution didn't finish yet: Allow/Forbid/Replace)Forbidden

                                                          cronjob.failed_job_history_limit

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to define the maximum number of failed job executions that should be returned in the job execution history1

                                                          cronjob.success_job_history_limit

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to define the maximum number of succeeded job executions that should be returned in the job execution history1

                                                          Security

                                                          security.service_account_name

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringAllows you to set an existing Kubernetes service account nameE.g. On AWS, you can assume a role on an application to give it specific AWS permissions without having to specify AWS credentials``
                                                          +

                                                          Service Advanced Settings

                                                          To further fine-tune your Qovery infrastructure, you can set advanced settings through the Advanced Settings section of your service.

                                                          To access the Advanced Settings section:

                                                          1. Select the service where you want to modify the advanced settings

                                                            Settings

                                                          2. Open the advanced settings section from the left menu

                                                            Advanced Settings

                                                          The screen shows you the list of available advanced settings and for each of them:

                                                          • The default value
                                                          • The value configured right now

                                                          You can show only the modified values by activating the "Show only overridden settings" feature toggle.

                                                          All services have access to advanced settings, you can find where they are available in the documentation below with those badges:

                                                          Application Deployment

                                                          build.timeout_max_sec

                                                          TypeDescriptionDefault Value
                                                          integerAllows you to specify an interval, in seconds, after which the application build times out.1800

                                                          build.cpu_max_in_milli

                                                          TypeDescriptionDefault Value
                                                          integerCPU allocated to your build process4000

                                                          build.ram_max_in_gib

                                                          TypeDescriptionDefault Value
                                                          integerGB RAM allocated to your build process8

                                                          deployment.custom_domain_check_enabled

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanQovery allows you to set custom domains for your applications through the addition of a CNAME record to your domain's DNS settings. By default, when an application is deployed, Qovery checks that the CNAME record is set up correctly. This advanced setting allows you to disable this check.If you are using a Content Delivery Network (CDN), checking the CNAME setup for any custom domains you may have set up is likely to stall the deployment of your application.

                                                          Therefore, if you are using a CDN behind your application, we recommend disabling this feature to save time during your application deployments.
                                                          true

                                                          deployment.termination_grace_period_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDecide how many times in seconds the application is supposed to stop at maximum. After this time, the application will be forced to stop (killed)An application requiring several tasks to be stopped properly should have a higher grace period. If the application finishes early, then it will not wait until the end of the grace period60

                                                          deployment.affinity.node.required

                                                          TypeDescriptionUse CaseDefault Value
                                                          Map<String, String>Set pod placement on specific Kubernetes nodes labels.Can be useful to send pods on GPU nodes or any other specific workload based on node lablels (Eg. {"eks.amazonaws.com/nodegroup": "gpu"})``

                                                          deployment.antiaffinity.pod

                                                          TypeDescriptionDefault Value
                                                          stringDefine how you want pods affinity to behave.
                                                          Preferred: allows, but does not require, pods of a given service are not co-located (or co-hosted) on a single node
                                                          Required: ensures that the pods of a given service are not co-located (or co-hosted) on a single node (safer in term of availability but can be expensive depending on the number of replicas)
                                                          Preferred

                                                          Deployment strategy

                                                          deployment.update_strategy.type

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringSet deployment strategy type (RollingUpdate or Recreate)Rolling update strategy will gracefully rollout new versions, while Recreate will stop all current versions and create new ones once all old ones have been shutdown (more info)RollingUpdate

                                                          deployment.update_strategy.rolling_update.max_unavailable_percent

                                                          TypeDescriptionDefault Value
                                                          integerDefine the percentage of a maximum number of pods that can be unavailable during the update process (more info).25

                                                          deployment.update_strategy.rolling_update.max_surge_percent

                                                          TypeDescriptionDefault Value
                                                          integerDefine the percentage of the maximum number of pods that can be created over the desired number of pods (more info)25

                                                          Network Settings

                                                          network.ingress.cors_allow_headers

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which set of headers can be present in the client request.For security purposes, you can indicate which HTTP headers can be used during a CORS preflight request which includes the Access-Control-Request-Headers request header. For more information, see CORS HTTP Response Headers."DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization"

                                                          network.ingress.cors_allow_methods

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which set of methods can be used for the client request.For security purposes, you can indicate which HTTP methods are permitted while accessing a resource in response to cross-origin requests. For more information, see CORS HTTP Response Headers."GET, PUT, POST, DELETE, PATCH, OPTIONS"

                                                          network.ingress.cors_allow_origin

                                                          TypeDescriptionUse CaseDefault Value
                                                          string(For CORS users) Allows you to specify which origin(s) (domain, scheme, port) can access a resource.For security purposes, you can allow only one or a short list of origins to access your resources. For more information, see CORS HTTP Response Headers."*"

                                                          network.ingress.enable_cors

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanAllows you to enable Cross-Origin Resource Sharing (CORS).The CORS mechanism supports secure cross-origin requests and data transfers between browsers and servers. For more information on CORS and when to enable it, see Cross-Origin Resources Sharing.false

                                                          network.ingress.enable_sticky_session

                                                          TypeDescriptionUse CaseDefault Value
                                                          booleanAllows you to enable Sticky session.Enable the load balancer to bind a user's session to a specific target. This ensures that all requests from the user during the session are sent to the same targetfalse

                                                          network.ingress.keepalive_time_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerLimits the maximum time (in seconds) during which requests can be processed through one keepalive connection. After this time is reached, the connection is closed following the subsequent request processing.Useful to tune your gRPC application3600

                                                          network.ingress.keepalive_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) during which an idle keepalive connection to an upstream server will stay open.Useful to tune your gRPC application60

                                                          network.ingress.proxy_body_size_mb

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerAllows you to set, in megabytes, a maximum size for resources that can be downloaded from your server.By default, users can download resources (files, images, videos...) of up to 100 MB. You can use this advanced setting to lower or increase this limitation.100

                                                          network.ingress.proxy_buffer_size_kb

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerAllows you to set, in kilobytes, a header buffer size used while reading the response header from upstream.E.g. You are using Auth0 with NextJS, you will need to set a bigger header size4

                                                          network.ingress.proxy_connect_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDefines a timeout (in seconds) for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.E.g. You can use it to define the maximum time to wait for your application to establish the connexion.60

                                                          network.ingress.proxy_read_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerDefines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                                                          network.ingress.proxy_send_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                                                          network.ingress.proxy_buffering

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to enable or disable nginx proxy-buffering. Valid values are on or offon

                                                          network.ingress.proxy_request_buffering

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to enable or disable nginx proxy-request_buffering. Valid values are on or offon

                                                          network.ingress.send_timeout_seconds

                                                          TypeDescriptionUse CaseDefault Value
                                                          integerSets a timeout (in seconds) for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.Useful to define the maximum timeout to wait for client connection.60

                                                          network.ingress.whitelist_source_range

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringAllows you to specify which IP ranges are allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1By default, any IP can access your application if it's exposed publicly and the users know the URL. You can limit its access by specifying the IPs you want to reach the app (e.g. the IP of your office)0.0.0.0/0 (any IP)

                                                          network.ingress.denylist_source_range

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify which IP ranges are not allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1``

                                                          network.ingress.basic_auth_env_var

                                                          TypeDescriptionDefault Value
                                                          stringSet the name of an environment variable to use as a basic authentication (login:crypted_password) from htpasswd command.``

                                                          Here is an example where you can create a secret environment variable on Qovery and set a name like BASIC_AUTH_CREDENTIALS. The content should be the result of the htpasswd command:

                                                          $ htpasswd -n <username>
                                                          New password:
                                                          Re-type new password:
                                                          username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20

                                                          The content of the BASIC_AUTH_CREDENTIALS environment variable should be: username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. To finish, set the network.ingress.basic_auth_env_var advanced settings to BASIC_AUTH_CREDENTIALS.

                                                          You can pass set credentials by separating them with a comma. For example: username1:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20,username2:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. However, the total length of the environment variable should not exceed 1MB.

                                                          network.ingress.extra_headers

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify response headers with values separated by comma (e.g. {"X-Frame-Options":"DENY","X-Content-Type-Options":"nosniff"}{}

                                                          Auto-scaling

                                                          hpa.cpu.average_utilization_percent

                                                          TypeDescriptionDefault Value
                                                          integerAuto-scaling is triggered when a specific CPU utilization metric is reached (for instance, 40%). This advanced setting allows you to set this metric.60

                                                          Job Settings

                                                          job.delete_ttl_seconds_after_finished

                                                          TypeDescriptionDefault Value
                                                          integerBy default terminated jobs in a completed or failure state are not deleted. if this parameter is set, Kubernetes will automatically cleanup completed jobs after the ttlnull

                                                          cronjob.concurrency_policy

                                                          TypeDescriptionDefault Value
                                                          stringIt defines if it is allowed to start another instance of the same job if the previous execution didn't finish yet: Allow/Forbid/Replace)Forbidden

                                                          cronjob.failed_job_history_limit

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to define the maximum number of failed job executions that should be returned in the job execution history1

                                                          cronjob.success_job_history_limit

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to define the maximum number of succeeded job executions that should be returned in the job execution history1

                                                          Security

                                                          security.service_account_name

                                                          TypeDescriptionUse CaseDefault Value
                                                          stringAllows you to set an existing Kubernetes service account nameE.g. On AWS, you can assume a role on an application to give it specific AWS permissions without having to specify AWS credentials``
                                                          - + - + diff --git a/docs/using-qovery/configuration/application-health-checks/index.html b/docs/using-qovery/configuration/application-health-checks/index.html index 6e3a5efb0c..1d3f33684b 100644 --- a/docs/using-qovery/configuration/application-health-checks/index.html +++ b/docs/using-qovery/configuration/application-health-checks/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@ You have a liveness probe configured on port 80 of your application. If during the deployment of your application the probes can't connect to port 80 and we reach a timeout, the deployment fails.

                                                          Qovery allows you to manage these probes directly from within the Qovery console during the setup of your application, letting you decide their activation, configuration and check frequency.

                                                          Probes can be configured for:

                                                          • Applications
                                                          • Cronjobs
                                                          • Lifecycle Jobs

                                                          Probes Configuration

                                                          The following configuration parameters are valid for both the Liveness and the Readiness probes.

                                                          Type

                                                          Allows you to specify the type of probe you want to run against your application:

                                                          • NONE if NONE is selected, the probe is disabled and thus Kubernetes won't be able to verify the state of your application and take the right corrective actions.
                                                          • HTTP probes are the most common probe type. You can use them if your application is a HTTP server, or if you create a lightweight HTTP server inside your application specifically to respond to such probes. When using a HTTP probe, you need to configure:

                                                            • a port
                                                            • a path Once configured, Kubernetes pings a path (for example: /healthz ) at a given port. If it gets a response in the 200 or 300 range, the check is passed. Otherwise, it is considered as failed and Kubernetes takes the necessary corrective actions.
                                                          • TCP probes are most often used when HTTP or command probes aren't an option. When using a TCP Liveness probe, Kubernetes tries to establish a connection on the specified port. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                                                          • gRPC probes When using a gRCP Liveness probe, Kubernetes tries to establish a connection on the specified port and service. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                                                          • EXEC probes -Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                                                          Initial Delay (in seconds)

                                                          Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                                                          Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                                                          Period (in seconds)

                                                          Allows you to specify an interval, in seconds, between each probe.

                                                          Timeout (in seconds)

                                                          Allows you to specify the interval, in seconds, after which the probe times out.

                                                          Success Threshold

                                                          Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                                                          Failure Threshold

                                                          Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                                                          Configuiration for Long-starting application

                                                          If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                                                          If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                                                          +Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                                                          Initial Delay (in seconds)

                                                          Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                                                          Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                                                          Period (in seconds)

                                                          Allows you to specify an interval, in seconds, between each probe.

                                                          Timeout (in seconds)

                                                          Allows you to specify the interval, in seconds, after which the probe times out.

                                                          Success Threshold

                                                          Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                                                          Failure Threshold

                                                          Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                                                          Configuiration for Long-starting application

                                                          If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                                                          If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                                                          - + - + diff --git a/docs/using-qovery/configuration/application/index.html b/docs/using-qovery/configuration/application/index.html index 8c55568e18..bb48b2ecd8 100644 --- a/docs/using-qovery/configuration/application/index.html +++ b/docs/using-qovery/configuration/application/index.html @@ -26,9 +26,9 @@ - + - + @@ -57,14 +57,14 @@ You can adjust the minimum and maximum of instances you need in your application settings. Qovery runs your application on Kubernetes and relies on metrics-server service to auto-scale your app.

                                                          Storage

                                                          Block Storage

                                                          The default filesystem for applications running on Qovery is ephemeral. Application data isn’t persisted across deploys and restarts, which works just fine for most apps because they use managed databases to persist data.

                                                          However, many applications need persistent disk storage that isn’t ephemeral. These include:

                                                          • Blogging platforms and CMSs like WordPress, Ghost, and Strapi.
                                                          • Collaboration apps like Mattermost, GitLab, and Discourse.

                                                          This is where Qovery block Storage comes in. Qovery applications can use storage to store data that persists across deploys and restarts, making it easy to deploy stateful applications.

                                                          Use cases
                                                          ✅ Good use cases
                                                          • For I/O intensive applications (E.g. database)
                                                          • To store temporary files
                                                          ❌ Bad use cases
                                                          • To store file > 1 TB
                                                          • To expose files from an application (E.g. images)
                                                          Types of Block Storage

                                                          Qovery Storage supports:

                                                          TypeMax IOPSMax ThroughputMin SizeMax SizeUse cases
                                                          fast_ssd640001GB/s5GB10GB Community / 1TB paid plansCritical business applications that require sustained IOPS like databases
                                                          Configuration

                                                          You can set up your Block Storage in Storage section of your application configuration.

                                                          Application Storage

                                                          Ports

                                                          Within this section you can define the port exposed by your application to the other services or even over the internet. You can edit the existing ports or declare new ones by specifying:

                                                          • Application port: this is the port exposed internally by your application for the other services.
                                                          • Protocol: you can select the protocol used by your application : HTTP (for both standard HTTP or websocket communications), gRPC, TCP, UDP.
                                                          • Publicly exposed: it allows you to expose over the public network your service. A public domain will be assigned to your application during the deployment (see Connectin from the internet section)
                                                          • If Publicly Exposed is selected:
                                                            • External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443.
                                                            • Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is p<portNumber> (see Qovery Provided Domain section for more information)

                                                          Application Ports

                                                          Important Informations

                                                          • Most of the Kubernetes Health Checks]docs.using-qovery.configuration.service-health-checks are based on the port declared in this section. Make sure you declare the right port and that you configure the health checks properly.
                                                          • Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the advanced settings section
                                                          • Exposing publicly TCP/UDP ports requires to create a dedicated load balancer and it takes a few minutes before having it ready (~15 minutes). Note also that this has a direct impact on your cloud provider bill.
                                                          • You can configure your application to use the PORT environment variable by adding the PORT on your application env variables page.
                                                          • A Note on Listening IPs: It's best for your application to listen on 0.0.0.0:$PORT. While most things work with 127.0.0.1 and localhost, some do not (NodeJS for example)

                                                          Health Checks

                                                          To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                                                          Deployment Restrictions

                                                          This section allows to specify which changes on your repository should trigger an auto-deploy (if enabled). To know more about how to configure your Deployment Restrictions, have a look at the deployment restrictions section.

                                                          Domains

                                                          Within this section you can customize the domain used to reach your application.

                                                          You can customize the domain of your application in different ways, depending on what you want to achieve:

                                                          • You want to use your own domain for your application
                                                          • You want to modify the subdomain assigned to your application by Qovery (i.e. change p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh into my-app-domain.za8ad0657.bool.sh).

                                                          In both cases, you can assign the new custom domain to your application press the Add Domain button.

                                                          Application Domains

                                                          Configuring your own domain

                                                          Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two CNAME records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud).

                                                          Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If wildcard is not supported by your DNS provider, you will have to configure each subdomain manually.

                                                          If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the “Port Name” value within the port settings.

                                                          From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain.

                                                          Custom Domain

                                                          Special case - CDN in proxy mode

                                                          If your service is behind a CDN using a proxy mode (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won't be able to do that for you and it will raise warnings on your application status.

                                                          CDN Proxy

                                                          Change the auto assigned sub-domain

                                                          You can specify a different sub-domain for your application as long as it belongs to the assigned cluster domain (see Qovery provided domains). Example:

                                                          • your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is za8ad0659.bool.sh)
                                                          • you can enter a new custom domain myfrontend.za8ad0659.bool.sh (since it is a subdomain of the cluster domain)

                                                          The application will now be accessible from both the default and the new custom domain.

                                                          Connecting from the internet

                                                          Your application can be reached from the internet by publicly exposing at least one of its ports (See the Ports section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the Domain section.

                                                          Qovery provided domains

                                                          For each port publicly exposed, a domain is automatically assigned by Qovery to your application. Qovery will manage for you the networking and the TLS configuration for these domains.

                                                          Example: p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh or <service_name>-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh for helm services.

                                                          Note:

                                                          • each service deployed on the same cluster will have the same root domain assigned (example: za8ad0657.bool.sh)
                                                          • the first characters of the domain (before the -) is based on the portName given to the port associated with this domain (See the port section)
                                                          • a default domain (without the portName) is assigned to the default port(See the port section). Example zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh

                                                          Special Case - Preview Environment -For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                                                          • portName: is the port name, as explained above
                                                          • prID: is the id of the PR that has generated the preview environment
                                                          • srvName: is the name of the service
                                                          • envSourceName: is the name of the blueprint environment that has created the current preview environment

                                                          domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                                                          Custom domains

                                                          If you prefer to assign your own domain to the application, have a look at the Domain section to know more.

                                                          Connecting to a database

                                                          To know how to access your database from your application, have a look at the database section.

                                                          Connecting to another application

                                                          To know how to access your database from your application, have a look at the database section.

                                                          Environment Variable

                                                          To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                                                          Secrets

                                                          To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                                                          Logs

                                                          To learn how to display your application logs, navigate to logs section

                                                          SSH

                                                          To connect to your application via SSH, please use the via the Qovery SSH command available on our CLI.

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete an Application

                                                          1. Choose your application

                                                          2. In the application overview, click on the 3 dots button and remove the application.

                                                            Application

                                                          +For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                                                          • portName: is the port name, as explained above
                                                          • prID: is the id of the PR that has generated the preview environment
                                                          • srvName: is the name of the service
                                                          • envSourceName: is the name of the blueprint environment that has created the current preview environment

                                                          domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                                                          Custom domains

                                                          If you prefer to assign your own domain to the application, have a look at the Domain section to know more.

                                                          Connecting to a database

                                                          To know how to access your database from your application, have a look at the database section.

                                                          Connecting to another application

                                                          To know how to access your database from your application, have a look at the database section.

                                                          Environment Variable

                                                          To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                                                          Secrets

                                                          To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                                                          Logs

                                                          To learn how to display your application logs, navigate to logs section

                                                          SSH

                                                          To connect to your application via SSH, please use the via the Qovery SSH command available on our CLI.

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete an Application

                                                          1. Choose your application

                                                          2. In the application overview, click on the 3 dots button and remove the application.

                                                            Application

                                                          - + - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index 028c1882df..a9306299d8 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Cloud Service Provider

                                                          FAQ

                                                          I don't find my Cloud provider, what should I do?

                                                          Your Cloud provider is probably going to be supported in the near future. Contact us to see how we can help you.

                                                          +

                                                          Cloud Service Provider

                                                          FAQ

                                                          I don't find my Cloud provider, what should I do?

                                                          Your Cloud provider is probably going to be supported in the near future. Contact us to see how we can help you.

                                                          - + - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index 358f21b33b..2a1662e0b7 100644 --- a/docs/using-qovery/configuration/cluster-advanced-settings/index.html +++ b/docs/using-qovery/configuration/cluster-advanced-settings/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Cluster Advanced Settings

                                                          To further fine-tune your Qovery infrastructure, you can set advanced settings through the Qovery API endpoint.

                                                          All clusters have access to advanced settings, you can find where they are available in the documentation below with those badges mentioning for which Cloud provider they are available:

                                                          You will also find badges mentioning for which components it will be applied:

                                                          Below is the list of advanced settings currently available for clusters.

                                                          Logs

                                                          aws.cloudwatch.eks_logs_retention_days

                                                          TypeDescriptionDefault Value
                                                          integerMaximum retention days in Cloudwatch for EKS logs.
                                                          (possible values: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 2192, 2557, 2922, 3288, 3653)
                                                          90

                                                          aws.vpc.enable_s3_flow_logs

                                                          TypeDescriptionDefault Value
                                                          booleanEnable flow logs on the cluster VPC and store them in an s3 bucket.false

                                                          aws.vpc.flow_logs_retention_days

                                                          TypeDescriptionDefault Value
                                                          integerSet the number of retention days for flow logs. Unlimited retention with value 0365

                                                          loki.log_retention_in_week

                                                          TypeDescriptionDefault Value
                                                          integerMaximum Kubernetes pods (containers/application/jobs/cronjob) retention logs in weeks.12 (84 days)

                                                          Image registry

                                                          registry.image_retention_time

                                                          TypeDescriptionDefault Value
                                                          integerAllows you to specify an amount in seconds after which images in the default registry are deleted.31536000 (1 year)

                                                          registry.mirroring_mode

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the image mirroring mode to be used for each image deployed on this cluster. (possible values: Service or Cluster)Service

                                                          cloud_provider.container_registry.tags

                                                          TypeDescriptionDefault Value
                                                          Map<String, String>Add additional tags on the cluster dedicated registry

                                                          Network

                                                          Load balancer

                                                          load_balancer.size

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the load balancer size in front of your cluster. Possible values are:
                                                          - lb-s: 200 Mbps
                                                          - lb-gp-m: 500 Mbps
                                                          - lb-gp-l: 1 Gbps
                                                          - lb-gp-xl: 4 Gbps
                                                          lb-s

                                                          Nginx

                                                          nginx.vcpu.request_in_milli_cpu

                                                          TypeDescriptionDefault Value
                                                          integerVcpu request value in millicores assigned to Nginx pods200

                                                          nginx.vcpu.limit_in_milli_cpu

                                                          TypeDescriptionDefault Value
                                                          integerVcpu limit value in millicores assigned to Nginx pods700

                                                          nginx.memory.request_in_mib

                                                          TypeDescriptionDefault Value
                                                          integerMemory limit value in MiB assigned to Nginx pods768

                                                          nginx.memory.limit_in_mib

                                                          TypeDescriptionDefault Value
                                                          integerMemory limit value in MiB assigned to Nginx pods768

                                                          nginx.hpa.cpu_utilization_percentage_threshold

                                                          TypeDescriptionDefault Value
                                                          integerHpa (horizontal pod autoscaler) cpu threshold in percentage assigned to Nginx deployment50

                                                          nginx.hpa.min_number_instances

                                                          TypeDescriptionDefault Value
                                                          integerMinimum number of Nginx instances running2

                                                          nginx.hpa.max_number_instances

                                                          TypeDescriptionDefault Value
                                                          integerMaximum number of Nginx instances running25

                                                          Database access

                                                          database.postgresql.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all PostgreSQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.postgresql.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.postgresql.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.mysql.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all MySQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.mysql.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.mysql.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.mongodb.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all MongoDB databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.mongodb.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.mongodb.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.redis.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all Redis databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "anyone").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.redis.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.redis.deny_public_access is set to true["0.0.0.0/0"]

                                                          IAM

                                                          aws.iam.enable_admin_group_sync

                                                          TypeDescriptionDefault Value
                                                          booleanEnable IAM admin group sync IAM permissions setup.
                                                          ⚠️ aws.iam.admin_group should be set.
                                                          true

                                                          aws.iam.admin_group

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the IAM group name associated with the Qovery user in the AWS console during the IAM permissions setup to be able to connect to the Kubernetes clusterAdmins

                                                          aws.iam.enable_sso

                                                          TypeDescriptionDefault Value
                                                          booleanEnable SSO sync allowing IAM users to connect to cluster using SSO. Setup SSO support for your cluster.
                                                          ⚠️ aws.iam.sso_role_arn should be set.
                                                          false

                                                          aws.iam.sso_role_arn

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the SSO role ARN to be used to connect to your cluster. Setup SSO support for your cluster""

                                                          Miscellaneous

                                                          aws.eks.ec2.metadata_imds

                                                          TypeDescriptionDefault Value
                                                          stringSpecify the IMDS version you want to use. Possible values are required (IMDS v2 only) and optional (IMDS v1 and V2)optional
                                                          +

                                                          Cluster Advanced Settings

                                                          To further fine-tune your Qovery infrastructure, you can set advanced settings through the Qovery API endpoint.

                                                          All clusters have access to advanced settings, you can find where they are available in the documentation below with those badges mentioning for which Cloud provider they are available:

                                                          You will also find badges mentioning for which components it will be applied:

                                                          Below is the list of advanced settings currently available for clusters.

                                                          Logs

                                                          aws.cloudwatch.eks_logs_retention_days

                                                          TypeDescriptionDefault Value
                                                          integerMaximum retention days in Cloudwatch for EKS logs.
                                                          (possible values: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 2192, 2557, 2922, 3288, 3653)
                                                          90

                                                          aws.vpc.enable_s3_flow_logs

                                                          TypeDescriptionDefault Value
                                                          booleanEnable flow logs on the cluster VPC and store them in an s3 bucket.false

                                                          aws.vpc.flow_logs_retention_days

                                                          TypeDescriptionDefault Value
                                                          integerSet the number of retention days for flow logs. Unlimited retention with value 0365

                                                          loki.log_retention_in_week

                                                          TypeDescriptionDefault Value
                                                          integerMaximum Kubernetes pods (containers/application/jobs/cronjob) retention logs in weeks.12 (84 days)

                                                          Image registry

                                                          registry.image_retention_time

                                                          TypeDescriptionDefault Value
                                                          integerAllows you to specify an amount in seconds after which images in the default registry are deleted.31536000 (1 year)

                                                          registry.mirroring_mode

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the image mirroring mode to be used for each image deployed on this cluster. (possible values: Service or Cluster)Service

                                                          cloud_provider.container_registry.tags

                                                          TypeDescriptionDefault Value
                                                          Map<String, String>Add additional tags on the cluster dedicated registry

                                                          Network

                                                          Load balancer

                                                          load_balancer.size

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the load balancer size in front of your cluster. Possible values are:
                                                          - lb-s: 200 Mbps
                                                          - lb-gp-m: 500 Mbps
                                                          - lb-gp-l: 1 Gbps
                                                          - lb-gp-xl: 4 Gbps
                                                          lb-s

                                                          Nginx

                                                          nginx.vcpu.request_in_milli_cpu

                                                          TypeDescriptionDefault Value
                                                          integerVcpu request value in millicores assigned to Nginx pods200

                                                          nginx.vcpu.limit_in_milli_cpu

                                                          TypeDescriptionDefault Value
                                                          integerVcpu limit value in millicores assigned to Nginx pods700

                                                          nginx.memory.request_in_mib

                                                          TypeDescriptionDefault Value
                                                          integerMemory limit value in MiB assigned to Nginx pods768

                                                          nginx.memory.limit_in_mib

                                                          TypeDescriptionDefault Value
                                                          integerMemory limit value in MiB assigned to Nginx pods768

                                                          nginx.hpa.cpu_utilization_percentage_threshold

                                                          TypeDescriptionDefault Value
                                                          integerHpa (horizontal pod autoscaler) cpu threshold in percentage assigned to Nginx deployment50

                                                          nginx.hpa.min_number_instances

                                                          TypeDescriptionDefault Value
                                                          integerMinimum number of Nginx instances running2

                                                          nginx.hpa.max_number_instances

                                                          TypeDescriptionDefault Value
                                                          integerMaximum number of Nginx instances running25

                                                          Database access

                                                          database.postgresql.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all PostgreSQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.postgresql.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.postgresql.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.mysql.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all MySQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.mysql.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.mysql.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.mongodb.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all MongoDB databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.mongodb.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.mongodb.deny_public_access is set to true["0.0.0.0/0"]

                                                          database.redis.deny_public_access

                                                          TypeDescriptionDefault Value
                                                          booleanDeny public access to all Redis databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "anyone").
                                                          ⚠️ Public access to managed databases will instantly be removed
                                                          ⚠️ Public access to container databases will be removed only after a database redeployment
                                                          false

                                                          database.redis.allowed_cidrs

                                                          TypeDescriptionDefault Value
                                                          booleanList of allowed CIDRS. Valid only when database.redis.deny_public_access is set to true["0.0.0.0/0"]

                                                          IAM

                                                          aws.iam.enable_admin_group_sync

                                                          TypeDescriptionDefault Value
                                                          booleanEnable IAM admin group sync IAM permissions setup.
                                                          ⚠️ aws.iam.admin_group should be set.
                                                          true

                                                          aws.iam.admin_group

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the IAM group name associated with the Qovery user in the AWS console during the IAM permissions setup to be able to connect to the Kubernetes clusterAdmins

                                                          aws.iam.enable_sso

                                                          TypeDescriptionDefault Value
                                                          booleanEnable SSO sync allowing IAM users to connect to cluster using SSO. Setup SSO support for your cluster.
                                                          ⚠️ aws.iam.sso_role_arn should be set.
                                                          false

                                                          aws.iam.sso_role_arn

                                                          TypeDescriptionDefault Value
                                                          stringAllows you to specify the SSO role ARN to be used to connect to your cluster. Setup SSO support for your cluster""

                                                          Miscellaneous

                                                          aws.eks.ec2.metadata_imds

                                                          TypeDescriptionDefault Value
                                                          stringSpecify the IMDS version you want to use. Possible values are required (IMDS v2 only) and optional (IMDS v1 and V2)optional
                                                          - + - + diff --git a/docs/using-qovery/configuration/clusters/index.html b/docs/using-qovery/configuration/clusters/index.html index 3d726fdba3..7b95edc703 100644 --- a/docs/using-qovery/configuration/clusters/index.html +++ b/docs/using-qovery/configuration/clusters/index.html @@ -26,9 +26,9 @@ - + - + @@ -56,14 +56,14 @@ For more information, please contact your cloud provider. To permanently delete a cluster and all its associated costs, see Deleting a Cluster.

                                                          To temporarily stop a cluster, select the Stop action from the drop-down menu. A confirmation pop-up window opens before triggering the action.

                                                          Once confirmed, the status of your cluster turns to Pausing... (orange status).

                                                          Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to Paused (gray status).

                                                          Restarting a Cluster

                                                          You can restart a cluster after it has been temporarily stopped.

                                                          To restart your cluster, select the action Resume from the drop-down menu.

                                                          A confirmation pop-up window opens before triggering the action.

                                                          Once confirmed, the status of your cluster turns to Updating... (orange status).

                                                          Once your cluster has restarted, the status dot next to your cluster turns to green.

                                                          Deleting a Cluster

                                                          To delete a cluster, open the ... section and press Delete Cluster.

                                                          3 options can be chosen to delete a cluster:

                                                          1) Default -This is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account.

                                                          This operation will delete:

                                                          • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          2) Delete Cluster on cloud provider and Qovery configuration

                                                          This option shall be chosen when the cluster delete operation with the Default option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account.

                                                          This operation will delete:

                                                          • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          3) Delete Qovery config only

                                                          This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console.

                                                          This operation will delete:

                                                          • Cloud provider: nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          Once confirmed, the cluster status turns to Deleting... (red status) and once the deletion is complete, the cluster is removed from your organization settings.

                                                          Audit logs

                                                          To get the cluster filtered audit logs, open the ... section and press See audit logs.

                                                          You will be redirected to the audit logs section. A filter on the dedicated cluster will be applied. You only see the audit logs regarding cluster operations.

                                                          Get your cluster id

                                                          To get your Qovery cluster id, open the ... section and press Copy identifier.

                                                          The cluster id in Qovery will be in your clipboard.

                                                          Get your cluster kubeconfig file

                                                          If you need to get your kubeconfig file, open the ... section and press Get Kubeconfig.

                                                          Then the kubeconfig yaml file will be automatically downloaded.

                                                          Logs

                                                          Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it.

                                                          To access the logs you need to open the cluster, click the log button

                                                          Cluster Logs

                                                          A new window is opened, displaying the logs of the cluster.

                                                          Cluster Logs

                                                          The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error.

                                                          Cluster Logs

                                                          Generating an SSH Key for Your Cluster

                                                          To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:

                                                          1. On your computer, open a terminal.

                                                          2. Run ssh-keygen -t, followed by the key type and an optional comment.

                                                            For example, you can enter ssh-keygen -t rsa -b 2048 -C "<comment>".

                                                          3. Press Enter.

                                                            You should get an output similar to:

                                                            {
                                                            Generating public/private ed25519 key pair.
                                                            Enter file in which to save the key (/home/user/.ssh/id_ed25519):
                                                            }
                                                          4. Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.

                                                          5. Enter a passphrase:

                                                            {
                                                            Enter passphrase (empty for no passphrase):
                                                            Enter same passphrase again:
                                                            }

                                                            A confirmation is displayed, including information about where your files are stored.

                                                          6. Access the public key and copy its value
                                                            {
                                                            cat /home/user/.ssh/id_ed25519.pub | pbcopy
                                                            }

                                                            Note: Replace the .pub key path with the one where is located the key you have previously generated

                                                          You can add the generated public SSH key at cluster creation (see Creating a Cluster), or later from your cluster settings.

                                                          To do so:

                                                          Use custom domain and wildcard TLS for the whole cluster (beta)

                                                          By default, Qovery provides a domain (ex bool.sh) on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster.

                                                          You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit Let's Encrypt quotas.

                                                          To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate.

                                                          At the moment, Qovery only supports wildcard TLS certificates with Cloudflare. To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare.

                                                          Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then My Profile. In the API Tokens section, click on Create Token. In the Create Custom Token section, select the following permissions:

                                                          • API token a descriptive name: Qovery domain your domain name
                                                          • Permissions:
                                                            • Zone - DNS - Edit
                                                            • Zone - Zone - Read
                                                          • Zone Resources:
                                                            • Include - Specific zone - your domain name

                                                          To finish, click on Continue to Summary and Create Token. Save the token somewhere safe, you will need it later.

                                                          Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain.

                                                          Cleaning up a Cluster from your AWS Account

                                                          To clean up a Qovery cluster from your cloud provider account, go to AWS Console>Services>Management & Governance>Resource Groups & Tag Editor> Create Resource Group:

                                                          AWS Console Cluster Cleanup

                                                          StepDescription
                                                          1In the Group type area, select Tag based.
                                                          2In the Tags field of the Grouping criteria area, enter ClusterId.
                                                          3Click Add.
                                                          4Click Preview Resources.
                                                          All your Qovery clusters are now displayed in the Group resources table, and you can delete them by hand.
                                                          +This is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account.

                                                          This operation will delete:

                                                          • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          2) Delete Cluster on cloud provider and Qovery configuration

                                                          This option shall be chosen when the cluster delete operation with the Default option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account.

                                                          This operation will delete:

                                                          • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          3) Delete Qovery config only

                                                          This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console.

                                                          This operation will delete:

                                                          • Cloud provider: nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console.
                                                          • Qovery organization: the configuration of this cluster and any linked environment.

                                                          Once confirmed, the cluster status turns to Deleting... (red status) and once the deletion is complete, the cluster is removed from your organization settings.

                                                          Audit logs

                                                          To get the cluster filtered audit logs, open the ... section and press See audit logs.

                                                          You will be redirected to the audit logs section. A filter on the dedicated cluster will be applied. You only see the audit logs regarding cluster operations.

                                                          Get your cluster id

                                                          To get your Qovery cluster id, open the ... section and press Copy identifier.

                                                          The cluster id in Qovery will be in your clipboard.

                                                          Get your cluster kubeconfig file

                                                          If you need to get your kubeconfig file, open the ... section and press Get Kubeconfig.

                                                          Then the kubeconfig yaml file will be automatically downloaded.

                                                          Logs

                                                          Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it.

                                                          To access the logs you need to open the cluster, click the log button

                                                          Cluster Logs

                                                          A new window is opened, displaying the logs of the cluster.

                                                          Cluster Logs

                                                          The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error.

                                                          Cluster Logs

                                                          Generating an SSH Key for Your Cluster

                                                          To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:

                                                          1. On your computer, open a terminal.

                                                          2. Run ssh-keygen -t, followed by the key type and an optional comment.

                                                            For example, you can enter ssh-keygen -t rsa -b 2048 -C "<comment>".

                                                          3. Press Enter.

                                                            You should get an output similar to:

                                                            {
                                                            Generating public/private ed25519 key pair.
                                                            Enter file in which to save the key (/home/user/.ssh/id_ed25519):
                                                            }
                                                          4. Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.

                                                          5. Enter a passphrase:

                                                            {
                                                            Enter passphrase (empty for no passphrase):
                                                            Enter same passphrase again:
                                                            }

                                                            A confirmation is displayed, including information about where your files are stored.

                                                          6. Access the public key and copy its value
                                                            {
                                                            cat /home/user/.ssh/id_ed25519.pub | pbcopy
                                                            }

                                                            Note: Replace the .pub key path with the one where is located the key you have previously generated

                                                          You can add the generated public SSH key at cluster creation (see Creating a Cluster), or later from your cluster settings.

                                                          To do so:

                                                          Use custom domain and wildcard TLS for the whole cluster (beta)

                                                          By default, Qovery provides a domain (ex bool.sh) on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster.

                                                          You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit Let's Encrypt quotas.

                                                          To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate.

                                                          At the moment, Qovery only supports wildcard TLS certificates with Cloudflare. To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare.

                                                          Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then My Profile. In the API Tokens section, click on Create Token. In the Create Custom Token section, select the following permissions:

                                                          • API token a descriptive name: Qovery domain your domain name
                                                          • Permissions:
                                                            • Zone - DNS - Edit
                                                            • Zone - Zone - Read
                                                          • Zone Resources:
                                                            • Include - Specific zone - your domain name

                                                          To finish, click on Continue to Summary and Create Token. Save the token somewhere safe, you will need it later.

                                                          Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain.

                                                          Cleaning up a Cluster from your AWS Account

                                                          To clean up a Qovery cluster from your cloud provider account, go to AWS Console>Services>Management & Governance>Resource Groups & Tag Editor> Create Resource Group:

                                                          AWS Console Cluster Cleanup

                                                          StepDescription
                                                          1In the Group type area, select Tag based.
                                                          2In the Tags field of the Grouping criteria area, enter ClusterId.
                                                          3Click Add.
                                                          4Click Preview Resources.
                                                          All your Qovery clusters are now displayed in the Group resources table, and you can delete them by hand.
                                                          - + - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index 92d918b59f..40b92af471 100644 --- a/docs/using-qovery/configuration/cronjob/index.html +++ b/docs/using-qovery/configuration/cronjob/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@ Any additional environment variable can be added later from the environment variable section

                                                          Input Variables

                                                        • You will find a recap of your job setup and you can now decide to: 1. Go back to one of the previous steps and change your settings 2. Create your job without deploying it -3. Create and deploy your job

                                                          Recap

                                                        • Deployment Management

                                                          Have a look at the Deployment Management section for more information.

                                                          Force Run

                                                          You can force the execution of a job independently its deployment status by:

                                                          1. Select the job that you want to force

                                                          2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                                                          3. Once you click, the job will be deployed and executed once. You will be able to follow its execution within the application logs

                                                          Configuration

                                                          Once created, you can access the configuration at any time via the Settings tab available on the service section

                                                          Settings

                                                          You can find below the description of each of the tabs available in this section

                                                          General

                                                          General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                                                          Git Repository

                                                          If your job is built and deployed from a git repository, within this section you can:

                                                          • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                                                          • Modify the branch that Qovery should use for deploying your code
                                                          • Modify Root Application Path - base folder in which the application resides in your repository

                                                          Container Registry

                                                          If your application is deployed from an image registry, within this section you can modify:

                                                          • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                                                          • Image name: the name of the image to be deployed with this application (example: postgres)
                                                          • Image tag: the tag of the image to be deployed with this application (example: 12)

                                                          Build Mode

                                                          This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                                                          Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                                                          Valid NodeJS Dockerfile
                                                          FROM node:13-alpine
                                                          RUN mkdir -p /usr/src/app
                                                          WORKDIR /usr/src/app
                                                          COPY . .
                                                          RUN npm install
                                                          EXPOSE 3000
                                                          CMD node ./bin/www

                                                          After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                                                          Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                                                          Auto Deploy

                                                          See the Deploying with auto-deploy feature section.

                                                          JOB Configuration

                                                          You can modify here the configuration of your job:

                                                          • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                                                          • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                                                          • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                                                          • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                                                          • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                                                          • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                                                          Resources

                                                          CPU

                                                          To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                                                          RAM

                                                          To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                                                          Health Checks

                                                          To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                                                          Deployment Restrictions

                                                          This section allows to specify which changes on your repository should trigger an auto-deploy (if enabled). To know more about how to configure your Deployment Restrictions, have a look at the deployment restrictions section.

                                                          Environment Variable

                                                          To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                                                          Secrets

                                                          To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                                                          Logs

                                                          To learn how to display your application logs, navigate to logs section

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a job

                                                          1. Select the job you want to delete

                                                          2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                                                            Application

                                                          +3. Create and deploy your job

                                                          Recap

                                                          Deployment Management

                                                          Have a look at the Deployment Management section for more information.

                                                          Force Run

                                                          You can force the execution of a job independently its deployment status by:

                                                          1. Select the job that you want to force

                                                          2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                                                          3. Once you click, the job will be deployed and executed once. You will be able to follow its execution within the application logs

                                                          Configuration

                                                          Once created, you can access the configuration at any time via the Settings tab available on the service section

                                                          Settings

                                                          You can find below the description of each of the tabs available in this section

                                                          General

                                                          General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                                                          Git Repository

                                                          If your job is built and deployed from a git repository, within this section you can:

                                                          • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                                                          • Modify the branch that Qovery should use for deploying your code
                                                          • Modify Root Application Path - base folder in which the application resides in your repository

                                                          Container Registry

                                                          If your application is deployed from an image registry, within this section you can modify:

                                                          • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                                                          • Image name: the name of the image to be deployed with this application (example: postgres)
                                                          • Image tag: the tag of the image to be deployed with this application (example: 12)

                                                          Build Mode

                                                          This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                                                          Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                                                          Valid NodeJS Dockerfile
                                                          FROM node:13-alpine
                                                          RUN mkdir -p /usr/src/app
                                                          WORKDIR /usr/src/app
                                                          COPY . .
                                                          RUN npm install
                                                          EXPOSE 3000
                                                          CMD node ./bin/www

                                                          After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                                                          Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                                                          Auto Deploy

                                                          See the Deploying with auto-deploy feature section.

                                                          JOB Configuration

                                                          You can modify here the configuration of your job:

                                                          • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                                                          • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                                                          • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                                                          • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                                                          • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                                                          • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                                                          Resources

                                                          CPU

                                                          To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                                                          RAM

                                                          To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                                                          Health Checks

                                                          To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                                                          Deployment Restrictions

                                                          This section allows to specify which changes on your repository should trigger an auto-deploy (if enabled). To know more about how to configure your Deployment Restrictions, have a look at the deployment restrictions section.

                                                          Environment Variable

                                                          To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                                                          Secrets

                                                          To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                                                          Logs

                                                          To learn how to display your application logs, navigate to logs section

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a job

                                                          1. Select the job you want to delete

                                                          2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                                                            Application

                                                          - + - + diff --git a/docs/using-qovery/configuration/database/index.html b/docs/using-qovery/configuration/database/index.html index 8404c5411b..eb8427452f 100644 --- a/docs/using-qovery/configuration/database/index.html +++ b/docs/using-qovery/configuration/database/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                          Databases

                                                          Qovery natively lets you deploy and access the most popular SQL and NoSQL databases available on the major cloud providers. Reliability and resiliency are at the heart of their services, so you don't have to worry about your data on Qovery.

                                                          Qovery natively supports the following databases:

                                                          • PostgreSQL
                                                          • MySQL
                                                          • MongoDB
                                                          • Redis

                                                          Qovery can natively operate a database in two different ways (called "Mode"):

                                                          • Container mode: preferred for testing and development
                                                          • Managed mode: preferred for production, limited configuration parameters (see the Configuration section).

                                                          If the natively supported databases or operation modes are not enough for you, depending on your use case you have the following alternative solutions:

                                                          • Use an existing DB on a dedicated VPC: your applications can access this database via VPC peering. Have a look at this guide for more information.
                                                          • Create your custom database via Qovery: You will be able to deploy any kind of database through Qovery by using a lifecycle jobs. For example, you can use a terraform script to deploy your custom RDS instance on AWS via Terraform (have a look at this example).

                                                          The following sections will show you how you can create and manage the databases natively supported by Qovery. For any other use case, please refer to the guides provided above.

                                                          Container mode

                                                          The database is created as a container with attached persistent storage directly on your Kubernetes cluster (1 instance). They are perfect for development and testing, as they are significantly cheaper than services provided by cloud providers.

                                                          Managed mode

                                                          Qovery creates and manages the lifecycle of a cloud provider managed database instance (for example an RDS instance on AWS). These are perfect for production since they guarantee the right level of resilience, performance and data security best practices.

                                                          Applying changes to a managed database

                                                          Once you request to change the version, instance type or disk size of your Managed database, the cloud provider applies the update based on its own internal rules and might cause downtime of your database.

                                                          For example, by default AWS doesn't apply major updates immediately on the database and instead, it waits for a maintenance window. This means that your change will not be applied immediately but you can always force the change directly from your AWS console AFTER having applied the change on Qovery (to avoid configuration drifts).

                                                          Have a look at your cloud provider documentation to know more about how version upgrades are managed:

                                                          Create a database

                                                          1. Navigate to Console

                                                          2. Select your project and environment

                                                          3. Click Add Database button

                                                            Database

                                                          4. Select database type, name, description (optional), version, mode and accessibility

                                                            General Information

                                                          5. Within the "Resources" step you will find different configurations based on the selected mode:

                                                            • If you are using the database in Container mode, you can set the CPU, RAM and storage that will be assigned to the instance running the docker image of the database.
                                                            • If you are using the database in Managed mode, you can select the instance type and the storage that will be assigned to the instance running the database. Note, the instance selected instance type has a direct impact on your cloud provider cost.

                                                            Resources

                                                          6. At the end a recap will allow you to just create the database or create and deploy it

                                                            Recap

                                                          Configuration

                                                          Once created, you can access the configuration of a database at any time via the Settings tab available on the database page

                                                          Database Settings

                                                          You can find below the description of each of the tabs available in this section

                                                          General

                                                          Modes

                                                          As described at the beginning of this document, databases can operate in two modes:

                                                          • Managed
                                                          • Container

                                                          Managed databases are perfect for production - they are provided and managed by major cloud providers like AWS to make sure your production data is well managed.

                                                          Container databases are managed by Qovery as Docker containers with attached persistent storage directly on your Kubernetes cluster (1 instance). They are perfect for development and testing, as they are significantly cheaper than services provided by cloud providers.

                                                          Please refer to the dedicated database sub-pages to get more information on the supported mode for each cloud provider.

                                                          Versions

                                                          We regularly update the version available for each database. Please refer to the dedicated database sub-pages to get more information on the supported version for each database types and cloud provider.

                                                          You can upgrade the version of your database directly from the Qovery interface.

                                                          Accessibility

                                                          This parameter lets you decide whether to expose publicly or not your database.

                                                          • Public access will make your database accessible via the public network
                                                          • Private access will make your database accessible only by applications in your environment

                                                          Resources

                                                          CPU / Memory

                                                          This configuration is available only for databases in Container mode

                                                          You can select the CPU assigned to the Kuerbetes pod running the database instance

                                                          Instance Type

                                                          This configuration is available only for databases in Managed mode

                                                          You can modify the CPU assigned to the instance running your database (And thus, its resources).

                                                          Storage

                                                          You can select the size of the persistent storage attached to the container database.

                                                          Credentials and connectivity

                                                          When a database is created in your environment, Qovery will automatically create and inject a set of BUILT_IN environment variables containing all the parameters necessary to your application to connect to the database.

                                                          This is the list of environment variables and secrets that will be automatically created:

                                                          NameDescriptionExample
                                                          QOVERY<DATABASE_TYPE><DBID>_DEFAULT_DATABASE_NAMEEnv Var containing the default database namepostgres
                                                          QOVERY<DATABASE_TYPE><DBID>_HOSTEnv Var containing the external hostname of the database (if you need access from the outside and the DB is configured with visibility "PUBLIC")zf5206c84-postgresql.oom.sh
                                                          QOVERY<DATABASE_TYPE><DBID>_HOST_INTERNALEnv Var containing the internal hostname of the database (if you need access it from within the cluster network)zf5206c84-postgresql
                                                          QOVERY<DATABASE_TYPE><DBID>_LOGINEnv Var containing the username of the DBsuperuser
                                                          QOVERY<DATABASE_TYPE><DBID>_PORTEnv Var containing the port to be used for connecting to the DB5432
                                                          QOVERY<DATABASE_TYPE><DBID>_HOSTSecret containing the external URI to be used for connecting to the DB (if you need access from the outside and the DB is configured with visibility "PUBLIC")sql://root:xxxx@z4a58c1e2-postgresql.oom.sh:27017/admin
                                                          QOVERY<DATABASE_TYPE><DBID>_HOST_INTERNALSecret containing the internal URI to be used for connecting to the DB (if you need access it from within the cluster network)sql://root:xxxx@z4a58c1e2-postgresql:27017/admin
                                                          QOVERY<DATABASE_TYPE><DBID>_PASSWORDSecret containing the password of the DBdbsecret

                                                          Please note that the built-in variables follow the naming pattern: QOVERY_DATABASETYPE + <your_db_name> + <type_of_variable> where:

                                                          • <your_db_name> is the name of your database
                                                          • <type_of_variable> is the type of variable we inject, e.g. PASSWORD, VERSION, CONNECTION_URI and so on.

                                                          To know how to access your database from your application, have a look at the database section.

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete your database instance

                                                          1. Navigate to Console

                                                          2. Select your environment and database

                                                          3. In database overview, click on Action remove button

                                                            Database Remove

                                                          Available Databases

                                                          Mongodb
                                                          Mysql
                                                          Postgresql
                                                          Redis
                                                          +It is up to the user or Cloud provider Administrator to delete it manually.

                                                          1. Navigate to Console

                                                          2. Select your environment and database

                                                          3. In database overview, click on Action remove button

                                                            Database Remove

                                                          Available Databases

                                                          Mongodb
                                                          Mysql
                                                          Postgresql
                                                          Redis
                                                          - + - + diff --git a/docs/using-qovery/configuration/database/mongodb/index.html b/docs/using-qovery/configuration/database/mongodb/index.html index 4836667bcd..52c22483de 100644 --- a/docs/using-qovery/configuration/database/mongodb/index.html +++ b/docs/using-qovery/configuration/database/mongodb/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          MongoDB

                                                          MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL, MongoDB uses JSON-like documents with schema.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes
                                                          ScalewayYesNo

                                                          Credentials

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          +

                                                          MongoDB

                                                          MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL, MongoDB uses JSON-like documents with schema.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes
                                                          ScalewayYesNo

                                                          Credentials

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          - + - + diff --git a/docs/using-qovery/configuration/database/mysql/index.html b/docs/using-qovery/configuration/database/mysql/index.html index 23783ce440..d062caad40 100644 --- a/docs/using-qovery/configuration/database/mysql/index.html +++ b/docs/using-qovery/configuration/database/mysql/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          MySQL

                                                          MySQL is the world's most popular open source database. Whether you are a fast growing web property, technology ISV or large enterprise, MySQL can cost-effectively help you deliver high performance, scalable database applications.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes (RDS)
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          +

                                                          MySQL

                                                          MySQL is the world's most popular open source database. Whether you are a fast growing web property, technology ISV or large enterprise, MySQL can cost-effectively help you deliver high performance, scalable database applications.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes (RDS)
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          - + - + diff --git a/docs/using-qovery/configuration/database/postgresql/index.html b/docs/using-qovery/configuration/database/postgresql/index.html index 951ec0ea40..5be11c6b4e 100644 --- a/docs/using-qovery/configuration/database/postgresql/index.html +++ b/docs/using-qovery/configuration/database/postgresql/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          PostgreSQL

                                                          PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes (RDS)
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          +

                                                          PostgreSQL

                                                          PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes (RDS)
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          - + - + diff --git a/docs/using-qovery/configuration/database/redis/index.html b/docs/using-qovery/configuration/database/redis/index.html index cfcb2d3f27..f913c5d265 100644 --- a/docs/using-qovery/configuration/database/redis/index.html +++ b/docs/using-qovery/configuration/database/redis/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Redis

                                                          Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          +

                                                          Redis

                                                          Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.

                                                          Supported Versions and Cloud Providers

                                                          You can find the supported versions directly within the Qovery Console.

                                                          Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                                                          Cloud providerContainer supportedManaged supported
                                                          AWSYesYes
                                                          ScalewayYesNo

                                                          Have a look at the Database page to know more about the database creation and setup.

                                                          - + - + diff --git a/docs/using-qovery/configuration/deployment-rule/index.html b/docs/using-qovery/configuration/deployment-rule/index.html index ec5bcda9cb..279da46d7a 100644 --- a/docs/using-qovery/configuration/deployment-rule/index.html +++ b/docs/using-qovery/configuration/deployment-rule/index.html @@ -26,9 +26,9 @@ - + - + @@ -58,14 +58,14 @@ your development environments to a cheaper cloud account while still keeping your production using the most reliable services provided by the more expensive cloud provider.

                                                          Rule Levels

                                                          You can set up your Rules at Project and Environment levels. Rules set up at the Project level will be automatically applied to newly created Environments you target in the rule. If, however, the default settings applied by the Project level rule does not meet your needs, you are allowed to override the settings at the Environment level later on.

                                                          Project Deployment Rules

                                                          Declaring deployment rules at the project level allows you to apply reasonable defaults to all newly created environments. After a new environment within a project is created, rules from the Project are applied to the Environment. However, to keep things flexible, Qovery allows you to override the rules after environment creation at the Environment level, in Environment settings.

                                                          Project Rules Configuration

                                                          1. Navigate to Console

                                                          2. Select your project

                                                          3. In the environment list, select the tab Deployment Rule and click Add Rule button:

                                                            Deployment Rules Project

                                                          4. Matching rule definition

                                                            You will have to provide a rule name, description and a matching condition.

                                                            Matching Condition - Environment Name

                                                            This field allows you to specify which environments should be affected by the given deployment rule, based on their name.

                                                            You can either enter the full environment name or use Wildcards.

                                                            Wildcards

                                                            Wildcards allows you to build regular expression to match the name of the environments you want your deployment rule to target.

                                                            You can use the following characters to specify your rule.

                                                            wildcardbehaviorwill match
                                                            ?Any one character"A", "B", "c", "z", etc.
                                                            ??Any two characters"AA", "AZ", "zz", etc.
                                                            ???Any three characters"Jet", "AAA", "ccc", etc.
                                                            *Any characters"apple", "APPLE", "A100", etc.
                                                            *thEnds in "th""bath", "fourth", etc.
                                                            c*Starts with "c""Cat", "CAB", "cindy", "candy", etc.
                                                            ?*At least one character"a", "b", "ab", "ABCD", etc.
                                                            ???-??5 characters with hypen"ABC-99","100-ZT", etc.
                                                            xyzContains "xyz""code is XYZ", "100-XYZ", "XyZ90", etc.

                                                            For example, the rule Prod_Env_* will target the environment named:

                                                            • Prod_Env_1
                                                            • Prod_Env_feature

                                                            But will not target the environment named: Staging_Env_1

                                                            Setup to apply - General

                                                            Mode (Deprecated)

                                                            You can automatically assign a type of environments based on his name.

                                                            Cluster

                                                            Selecting the cluster allows you to control to which cluster your environments in the project will be deployed to.

                                                            Example use cases

                                                            • deploy your development environments on a more cost effective cluster
                                                            • deploy your environments in multiple regions

                                                            Setup to apply - Start & stop

                                                            Start & Stop

                                                            The start and stop section allow you to precisely set up when the environments inside the project should be deployed and cleaned up.

                                                            Use cases examples

                                                            • shut down your development environments during the weekend
                                                            • deploy additional environments during peak hours

                                                          Rules priority

                                                          Since you can define several rules, it is possible that an environment is targeted by more than one of them. In order to define which rule applies first to your new environments, you can reorder the list of rules in the deployment setting window. -Starting from the top, the rules are ranked from highest to lowest priority.

                                                          Reorder priority rules

                                                          Environment Deployment Rules

                                                          Setting up Deployment Rules at the Enviornment level allows you to make all necessary adjustments applied by your default rules from the Project level.

                                                          Have a look at [this section][docs.using-qovery.configuration.environment#deployment-rule]] to know more.

                                                          +Starting from the top, the rules are ranked from highest to lowest priority.

                                                          Reorder priority rules

                                                          Environment Deployment Rules

                                                          Setting up Deployment Rules at the Enviornment level allows you to make all necessary adjustments applied by your default rules from the Project level.

                                                          Have a look at [this section][docs.using-qovery.configuration.environment#deployment-rule]] to know more.

                                                          - + - + diff --git a/docs/using-qovery/configuration/environment-variable/index.html b/docs/using-qovery/configuration/environment-variable/index.html index c863daf051..b8558451bf 100644 --- a/docs/using-qovery/configuration/environment-variable/index.html +++ b/docs/using-qovery/configuration/environment-variable/index.html @@ -26,9 +26,9 @@ - + - + @@ -62,14 +62,14 @@ To understand how we handle conflicts, please take a look to the Importation conflicts section.

                                                          Configure variables import

                                                          On this modal, you can define for each variable the following parameters:

                                                          • name: upate variable name
                                                          • Value: update variable value
                                                          • Scope: Specify the scope in which you want to import the variable
                                                          • Secret: Specify if this value is considered as a secret or not

                                                          Preset variables

                                                          To help you import a large number of variables quickly, you can predefine scope and secret settings. This will change the scope and secret value of all listed variables. If the secret and scope of one or more specific variables are subsequently updated, this will not change the predefined setting.

                                                        • When you have finished the configuration, click on the Import button.

                                                        • A pop-up message is displayed to inform you that your environment variables have been imported.

                                                        • Importation conflicts

                                                          To avoid conflicts between already existing and imported environment variables, some of them will not be imported, even if the overwrite option is activated. -The different cases are described below.

                                                          Imported variable has same name as BUILT_IN variable

                                                          TypeNameValueScope
                                                          Existing variables
                                                          VALUEMY_VAR42Built_in
                                                          Variables to import
                                                          VALUEMY_VAR10Application

                                                          Built_in environment variables are generated and managed by Qovery and will not be overwritten, even if the overwriting option is activated.

                                                          Imported variable has same name as an existing ALIAS

                                                          TypeNameValueScope
                                                          Existing variables
                                                          VALUEMY_VAR42Environment
                                                          ALIASMY_VAR_ALIASMY_VARApplication
                                                          Variables to import
                                                          VALUEMY_VAR_ALIAS10Application

                                                          The value cannot be rewritten because the link between the original variable and the alias would be lost.

                                                          Imported variable has same name as an existing secret (or vice versa)

                                                          TypeNameValueScopeSecret
                                                          Existing variables
                                                          VALUEMY_VAR1ApplicationYe
                                                          Variables to import
                                                          VALUEMY_VAR2ApplicationNo

                                                          The value cannot be imported because this will overwrite the existing secret.

                                                          Overwriting and limitations

                                                          Some overwriting cases are not supported for now. They are summarized in the following table.

                                                          Existing variable scopeImported variable scopeSupported
                                                          PROJECTPROJECT / ENVIRONMENT / APPLICATIONYES
                                                          ENVIRONMENTPROJECTNO
                                                          ENVIRONMENTENVIRONMENT / APPLICATIONYES
                                                          APPLICATIONPROJECT / ENVIRONMENTNO
                                                          APPLICATIONAPPLICATIONYES

                                                          Service interconnection

                                                          Connecting to a database

                                                          To access a database managed by Qovery from your application, you can use the BUILT_IN environment variables and secrets that have been automatically created by Qovery during the database creation process. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application (see the credentials and connectivity section for the full list).

                                                          In order to match the naming convention of the database connection variables used within your code, you can create an alias for each variable in the Qovery console so that you don't need to change your code.

                                                          Once you have defined an alias for each variable, you can redeploy the application and check that it has finally access to the database.

                                                          Example

                                                          You have created a postgres database on the Qovery console. Within the code of your application you need some environment variables containing the connection parameters of the database: DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD, DATABASE_PORT, DATABASE_NAME

                                                          example.py
                                                          DB_NAME = os.getenv("DATABASE_NAME", "nemo")
                                                          DB_USER = os.getenv("DATABASE_USER", "nemo")
                                                          DB_PASSWORD = os.getenv("DATABASE_PASSWORD", "password")
                                                          DB_HOST = os.getenv("DATABASE_HOST", "localhost")
                                                          DB_PORT = os.getenv("DATABASE_PORT", "5432")

                                                          To match your internal naming convention, you can create aliases for each of the corresponding variables in this way:

                                                          Env Var Aliases

                                                          Connecting to another application

                                                          To access another application managed by Qovery, you can use the BUILT_IN environment variables that have been automatically created by Qovery during the creation of that particular application. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application.

                                                          Please note that two BUILT_IN might exist:

                                                          • QOVERY_APPLICATION_<APPID>_HOST_INTERNAL : it contains the INTERNAL host of the application that can be used inside your Kubernetes cluster (and thus by any application running on it)
                                                          • QOVERY_APPLICATION_<APPID>_HOST_EXTERNAL : it contains the EXTERNAL host of the application that can be used to reach your application from outside your Kubernetes cluster (if the application is publicly exposing one of its ports)

                                                          In order to match the naming convention of the connection variables used within your code, you can create an alias for the HOST_INTERNAL variable so that you don't need to change your code.

                                                          Once you have defined an alias for each variable, you can redeploy the application and check that it can reach the other application.

                                                          Example

                                                          You have created a backend application on the Qovery console and a BUILD_IN variable has been created containing the application HOST called QOVERY_APPLICATION_Z9D8DAA08_HOST_INTERNAL. Within the code of your front-end application you need some environment variables containing the host of the backend application (BACKEND_HOST)

                                                          To match your internal naming convention, you can create alias for the corresponding variable in this way:

                                                          Env Var Aliases

                                                          +The different cases are described below.

                                                          Imported variable has same name as BUILT_IN variable

                                                          TypeNameValueScope
                                                          Existing variables
                                                          VALUEMY_VAR42Built_in
                                                          Variables to import
                                                          VALUEMY_VAR10Application

                                                          Built_in environment variables are generated and managed by Qovery and will not be overwritten, even if the overwriting option is activated.

                                                          Imported variable has same name as an existing ALIAS

                                                          TypeNameValueScope
                                                          Existing variables
                                                          VALUEMY_VAR42Environment
                                                          ALIASMY_VAR_ALIASMY_VARApplication
                                                          Variables to import
                                                          VALUEMY_VAR_ALIAS10Application

                                                          The value cannot be rewritten because the link between the original variable and the alias would be lost.

                                                          Imported variable has same name as an existing secret (or vice versa)

                                                          TypeNameValueScopeSecret
                                                          Existing variables
                                                          VALUEMY_VAR1ApplicationYe
                                                          Variables to import
                                                          VALUEMY_VAR2ApplicationNo

                                                          The value cannot be imported because this will overwrite the existing secret.

                                                          Overwriting and limitations

                                                          Some overwriting cases are not supported for now. They are summarized in the following table.

                                                          Existing variable scopeImported variable scopeSupported
                                                          PROJECTPROJECT / ENVIRONMENT / APPLICATIONYES
                                                          ENVIRONMENTPROJECTNO
                                                          ENVIRONMENTENVIRONMENT / APPLICATIONYES
                                                          APPLICATIONPROJECT / ENVIRONMENTNO
                                                          APPLICATIONAPPLICATIONYES

                                                          Service interconnection

                                                          Connecting to a database

                                                          To access a database managed by Qovery from your application, you can use the BUILT_IN environment variables and secrets that have been automatically created by Qovery during the database creation process. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application (see the credentials and connectivity section for the full list).

                                                          In order to match the naming convention of the database connection variables used within your code, you can create an alias for each variable in the Qovery console so that you don't need to change your code.

                                                          Once you have defined an alias for each variable, you can redeploy the application and check that it has finally access to the database.

                                                          Example

                                                          You have created a postgres database on the Qovery console. Within the code of your application you need some environment variables containing the connection parameters of the database: DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD, DATABASE_PORT, DATABASE_NAME

                                                          example.py
                                                          DB_NAME = os.getenv("DATABASE_NAME", "nemo")
                                                          DB_USER = os.getenv("DATABASE_USER", "nemo")
                                                          DB_PASSWORD = os.getenv("DATABASE_PASSWORD", "password")
                                                          DB_HOST = os.getenv("DATABASE_HOST", "localhost")
                                                          DB_PORT = os.getenv("DATABASE_PORT", "5432")

                                                          To match your internal naming convention, you can create aliases for each of the corresponding variables in this way:

                                                          Env Var Aliases

                                                          Connecting to another application

                                                          To access another application managed by Qovery, you can use the BUILT_IN environment variables that have been automatically created by Qovery during the creation of that particular application. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application.

                                                          Please note that two BUILT_IN might exist:

                                                          • QOVERY_APPLICATION_<APPID>_HOST_INTERNAL : it contains the INTERNAL host of the application that can be used inside your Kubernetes cluster (and thus by any application running on it)
                                                          • QOVERY_APPLICATION_<APPID>_HOST_EXTERNAL : it contains the EXTERNAL host of the application that can be used to reach your application from outside your Kubernetes cluster (if the application is publicly exposing one of its ports)

                                                          In order to match the naming convention of the connection variables used within your code, you can create an alias for the HOST_INTERNAL variable so that you don't need to change your code.

                                                          Once you have defined an alias for each variable, you can redeploy the application and check that it can reach the other application.

                                                          Example

                                                          You have created a backend application on the Qovery console and a BUILD_IN variable has been created containing the application HOST called QOVERY_APPLICATION_Z9D8DAA08_HOST_INTERNAL. Within the code of your front-end application you need some environment variables containing the host of the backend application (BACKEND_HOST)

                                                          To match your internal naming convention, you can create alias for the corresponding variable in this way:

                                                          Env Var Aliases

                                                          - + - + diff --git a/docs/using-qovery/configuration/environment/index.html b/docs/using-qovery/configuration/environment/index.html index 1e518e487c..a034bb8e76 100644 --- a/docs/using-qovery/configuration/environment/index.html +++ b/docs/using-qovery/configuration/environment/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@

                                                          Environment

                                                          An Environment is a group of applications and databases running within the same namespace. A Project can have multiple Environments.

                                                          Types of environment

                                                          There are different types of environments that can be defined within Qovery. Types of environment are also called mode, to label it and share with others in the organization how to use it. Here is the mode you should set depending of the use of your Environment.

                                                          environment moderecommended modewhy
                                                          ProductionProduction environment should not be stopped or deleted by anyone.
                                                          StagingStaging environment reflects how things work and is sometimes as critical as production for companies.
                                                          DevelopmentDevelopment environment is a working environment that could be used to develop and test new features and fixes.

                                                          A special mode Preview exists and it is automatically set when a Preview Environment is created on a new pull request. Have a look at this section to know more about preview environments.

                                                          Create an environment

                                                          You can create a new environment by clicking on the Create environment button of the Environment list page.

                                                          Create an environment

                                                          A modal will appear that will allow you to specify following parameters

                                                          • name: Give a name to your environment that is easily recognizable by anyone from your team. It is good practice to name your environment production, main or master, staging, dev, fix/xxx, feat/xxx, depending on the purpose of your environment.
                                                          • mode: Specify environment mode. See Types of environment section.
                                                          • cluster : Specify the organization cluster on which this new environment will be deployed.

                                                          Create an environment - Modal

                                                          Once created you can start adding your services within it depending on your need:

                                                          Create Service

                                                          Editing the environment settings

                                                          You can access the environment settings by opening the SETTINGS tab.

                                                          Environment settings tab

                                                          General settings

                                                          On the General tab, you will be able to update your environment name. It will also display the environment mode and the cluster assigned to your environment.

                                                          Deployment Rule

                                                          Using Deployment Rules is a good practice to drastically reduce your cost. To know more of the benefit of using them, have a look at the Deployment Rules section.

                                                          A default deployment configuration is applied to your environment when it's created but you can modify this default behaviour by creating a dedicated rule at project level that will affect any new environment created and matching the condition.

                                                          Once created, you can edit the deployment rule of the environment from the deployment rules settings.

                                                          Below you can find the description of the deployment rule settings that can be modified for a specific environment

                                                          Start & Stop

                                                          The start and stop section allow you to override the default settings applied by the project rule to precisely set up when the environment should be deployed and cleaned up.

                                                          Deployment Pipeline

                                                          This section allows you to configure the deployment pipeline to be executed when a deployment on the environment is triggered. More in particular, you can define the deployment order of each service within your environment.

                                                          Deployment Pipeline

                                                          You can get more information about the Qovery deployment pipeline and how it works within this section.

                                                          Editing deployment order

                                                          You can edit the order simply by drag and drop the service from one stage to another.

                                                          You can also modify the order of an entire stage by opening the 3 dots menu of the stage and clicking on Edit order

                                                          Adding a new stage

                                                          You can add a new stage by pressing the Add stage button. A name and a description are required to create the new stage.

                                                          Editing deployment stage

                                                          You can modify the name and the description of a stage by opening the 3 dots menu of the stage and clicking on Edit order

                                                          Preview environment

                                                          Use Preview Environment to get early feedback on your application changes by creating a dedicated environment for each of your pull requests. Your production environment runs 24/7, where your other environments may not need to run all day long. E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                                                          Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                                                          The preview environment section allows you to manage the complete setup of your preview environment feature

                                                          Preview Environment Settings

                                                          Turn on Preview Environments

                                                          it allows you to enable the preview environment feature for the current environment. Any PR opened on a service belonging to this environment will trigger the preview environment flow.

                                                          Create on demand

                                                          You can define the behaviour to follow for the creation of the preview environments:

                                                          • On Demand (Flag enabled)
                                                          • On every PR (Flag disabled)

                                                          On Demand Flow

                                                          1. A message is dropped on the PR asking you if you want to create a preview environment or not. You will get the list of environments where the preview env feature is activated (in case you have multiple environments) and the command to add as a comment of your PR to trigger the preview.
                                                          2. you will decide weather to create a preview environment or not by typing the right command as a comment within the PR
                                                          3. once the command is added in the comments, the preview creation is triggered and your preview environment is created and its deployment starts
                                                          4. once the deployment is completed, an additional comment will be posted in the PR, providing you with URLs to access your services.

                                                          Preview Environment Settings

                                                          On every PR Flow -Same as above but the preview environment creation flow is triggered automatically without any user intervention (only step 3 and 4)

                                                          Preview Environment Github Bot Message

                                                          Auto-delete

                                                          Auto-delete feature allows you to control if your applications should be, by default, automatically deleted after branch merging or deletion.

                                                          Service List

                                                          By default the preview environment feature is activated on any services of the environment connected to a git repository. In this sectoin you can decide to activate/desactivate the feature for a specific service.

                                                          Clone environment

                                                          Cloning an existing environnment is convenient for those use cases:

                                                          • Make a demo without impacting the original environment.
                                                          • Validate a feature on a dedicated environment.

                                                          Cloning an environment is possible directly from the 3 dots menu of your environment.

                                                          Environment Clone

                                                          When cloning an environment, every configuration of the original environment will be copied except for:

                                                          Terraform exporter

                                                          You can export the configuration of your environment as a Terraform manifest via the Export as Terraform option. This is helpful when you want to manage your configuration via Terraform: instead of creating the terraform manifest by hand, you can build the setup via the Qovery interface and export is as a Terraform file

                                                          The export will contain the Terraform definition of the environment, the services within it but as well all the other resources linked to the environment (organization, cluster, project).

                                                          You can decide wether or not the export should contain or not the secrets defined within the Qovery console.

                                                          Here's a video explaining how it works:

                                                          Deploy an environment

                                                          Have a look at the Deployment Management section for more information on how to deploy your environment.

                                                          Delete an environment

                                                          To delete your environment, you must go in the settings > Danger zone and delete your Environment.

                                                          +Same as above but the preview environment creation flow is triggered automatically without any user intervention (only step 3 and 4)

                                                          Preview Environment Github Bot Message

                                                          Auto-delete

                                                          Auto-delete feature allows you to control if your applications should be, by default, automatically deleted after branch merging or deletion.

                                                          Service List

                                                          By default the preview environment feature is activated on any services of the environment connected to a git repository. In this sectoin you can decide to activate/desactivate the feature for a specific service.

                                                          Clone environment

                                                          Cloning an existing environnment is convenient for those use cases:

                                                          • Make a demo without impacting the original environment.
                                                          • Validate a feature on a dedicated environment.

                                                          Cloning an environment is possible directly from the 3 dots menu of your environment.

                                                          Environment Clone

                                                          When cloning an environment, every configuration of the original environment will be copied except for:

                                                          Terraform exporter

                                                          You can export the configuration of your environment as a Terraform manifest via the Export as Terraform option. This is helpful when you want to manage your configuration via Terraform: instead of creating the terraform manifest by hand, you can build the setup via the Qovery interface and export is as a Terraform file

                                                          The export will contain the Terraform definition of the environment, the services within it but as well all the other resources linked to the environment (organization, cluster, project).

                                                          You can decide wether or not the export should contain or not the secrets defined within the Qovery console.

                                                          Here's a video explaining how it works:

                                                          Deploy an environment

                                                          Have a look at the Deployment Management section for more information on how to deploy your environment.

                                                          Delete an environment

                                                          To delete your environment, you must go in the settings > Danger zone and delete your Environment.

                                                          - + - + diff --git a/docs/using-qovery/configuration/helm/index.html b/docs/using-qovery/configuration/helm/index.html index 73806f3d84..2fb3072135 100644 --- a/docs/using-qovery/configuration/helm/index.html +++ b/docs/using-qovery/configuration/helm/index.html @@ -26,9 +26,9 @@ - + - + @@ -56,14 +56,14 @@ Select the following field:

                                                          • File source: Chose between Git Repository or Raw YAML, depending on the source location of your values file

                                                          If you want to override it from another already existing values file from a Git Repository you will have to select:

                                                          • Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).
                                                          • Branch: Select branch that Qovery should use to deploy your helm
                                                          • Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.

                                                          If you want to override it with a raw yaml you will have to click on Create override. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.

                                                          Ports

                                                          Within this section you can define the port exposed publicly. You can edit the existing ports or declare new ones by specifying:

                                                          • Service name: this is the kubernetes service name in your helm chart
                                                          • Namespace (only if Allow cluster-wide resources was enabled): this is the kubernetes namespace used by your helm chart to deploy the pods behind the chosen service
                                                          • Service port: this is the port exposed internally by your service for the other services
                                                          • Protocol: you can select the protocol used by your service. Today Qovery supports the following protocols:
                                                            • HTTPS (Select this protocol if you need to run Websockets)
                                                            • gRPC
                                                          • External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443.
                                                          • Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is p<portNumber> (see Qovery Provided Domain section for more information)

                                                          Important Informations

                                                          • Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the advanced settings section

                                                          Domains

                                                          Within this section you can customize the domain used to reach your helm services.

                                                          You can customize the domain of your helm services in different ways, depending on what you want to achieve:

                                                          • You want to use your own domain for your helm services
                                                          • You want to modify the subdomain assigned to your helm services by Qovery (i.e. change p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh into my-app-domain.za8ad0657.bool.sh).

                                                          In both cases, you can assign the new custom domain to your helm services press the Add Domain button.

                                                          Application Domains

                                                          Configuring your own domain

                                                          Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two CNAME records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud).

                                                          Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If wildcard is not supported by your DNS provider, you will have to configure each subdomain manually.

                                                          If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the “Port Name” value within the port settings.

                                                          From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain.

                                                          Custom Domain

                                                          Special case - CDN in proxy mode

                                                          If your service is behind a CDN using a proxy mode (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won't be able to do that for you and it will raise warnings on your application status.

                                                          CDN Proxy

                                                          Change the auto assigned sub-domain

                                                          You can specify a different sub-domain for your helm services as long as it belongs to the assigned cluster domain (see Qovery provided domains). Example:

                                                          • your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is za8ad0659.bool.sh)
                                                          • you can enter a new custom domain myfrontend.za8ad0659.bool.sh (since it is a subdomain of the cluster domain)

                                                          The helm services will now be accessible from both the default and the new custom domain.

                                                          Connecting from the internet

                                                          Your helm services can be reached from the internet by publicly exposing at least one of its ports (See the Ports section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the Domain section.

                                                          Qovery provided domains

                                                          For each port publicly exposed, a domain is automatically assigned by Qovery to your helm services. Qovery will manage for you the networking and the TLS configuration for these domains.

                                                          Example: p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh or <service_name>-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh for helm services.

                                                          Note:

                                                          • each service deployed on the same cluster will have the same root domain assigned (example: za8ad0657.bool.sh)
                                                          • the first characters of the domain (before the -) is based on the portName given to the port associated with this domain (See the port section)
                                                          • a default domain (without the portName) is assigned to the default port(See the port section). Example zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh

                                                          Special Case - Preview Environment -For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                                                          • portName: is the port name, as explained above
                                                          • prID: is the id of the PR that has generated the preview environment
                                                          • srvName: is the name of the service
                                                          • envSourceName: is the name of the blueprint environment that has created the current preview environment

                                                          domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                                                          Custom domains

                                                          If you prefer to assign your own domain to the helm services, have a look at the Domain section to know more.

                                                          Logs

                                                          To learn how to display your helm logs, navigate to logs section

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a Helm

                                                          1. Choose your helm

                                                          2. In the helm overview, click on the 3 dots button and remove the helm.

                                                          +For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                                                          • portName: is the port name, as explained above
                                                          • prID: is the id of the PR that has generated the preview environment
                                                          • srvName: is the name of the service
                                                          • envSourceName: is the name of the blueprint environment that has created the current preview environment

                                                          domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                                                          Custom domains

                                                          If you prefer to assign your own domain to the helm services, have a look at the Domain section to know more.

                                                          Logs

                                                          To learn how to display your helm logs, navigate to logs section

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a Helm

                                                          1. Choose your helm

                                                          2. In the helm overview, click on the 3 dots button and remove the helm.

                                                          - + - + diff --git a/docs/using-qovery/configuration/index.html b/docs/using-qovery/configuration/index.html index 769e883028..7fdd6a0fa1 100644 --- a/docs/using-qovery/configuration/index.html +++ b/docs/using-qovery/configuration/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -
                                                          +
                                                          - + - + diff --git a/docs/using-qovery/configuration/lifecycle-job/index.html b/docs/using-qovery/configuration/lifecycle-job/index.html index 219d2bec1e..7d05c6f574 100644 --- a/docs/using-qovery/configuration/lifecycle-job/index.html +++ b/docs/using-qovery/configuration/lifecycle-job/index.html @@ -26,9 +26,9 @@ - + - + @@ -56,14 +56,14 @@ 2. Create your job without deploying it 3. Create and deploy your job

                                                          Recap

                                                          Deployment Management

                                                          Have a look at the Deployment Management section for more information.

                                                          Force Run

                                                          You can force the execution of a job independently its deployment status by:

                                                          1. Select the job that you want to force

                                                          2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                                                          3. Select the environment event you want to force.

                                                          4. Once you click, the job will be deployed and executed with the entrypoint and arguments associated to the selected event. You will be able to follow its execution within the application logs

                                                          Configuration

                                                          Once created, you can access the configuration at any time via the Settings tab available on the service section

                                                          Settings

                                                          You can find below the description of each of the tabs available in this section

                                                          General

                                                          General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                                                          Git Repository

                                                          If your job is built and deployed from a git repository, within this section you can:

                                                          • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                                                          • Modify the branch that Qovery should use for deploying your code
                                                          • Modify Root Application Path - base folder in which the application resides in your repository

                                                          Container Registry

                                                          If your application is deployed from an image registry, within this section you can modify:

                                                          • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                                                          • Image name: the name of the image to be deployed with this application (example: postgres)
                                                          • Image tag: the tag of the image to be deployed with this application (example: 12)

                                                          Build Mode

                                                          This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                                                          Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                                                          Valid NodeJS Dockerfile
                                                          FROM node:13-alpine
                                                          RUN mkdir -p /usr/src/app
                                                          WORKDIR /usr/src/app
                                                          COPY . .
                                                          RUN npm install
                                                          EXPOSE 3000
                                                          CMD node ./bin/www

                                                          After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                                                          Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                                                          Auto Deploy

                                                          See the Deploying with auto-deploy feature section.

                                                          JOB Configuration

                                                          You can modify here the configuration of your job:

                                                          • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                                                          • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                                                          • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                                                          • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                                                          • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                                                          • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                                                          Resources

                                                          CPU

                                                          To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                                                          RAM

                                                          To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                                                          Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                                                          Health Checks

                                                          To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                                                          Deployment Restrictions

                                                          This section allows to specify which changes on your repository should trigger an auto-deploy (if enabled). To know more about how to configure your Deployment Restrictions, have a look at the deployment restrictions section.

                                                          Environment Variable

                                                          To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                                                          Secrets

                                                          To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                                                          Logs

                                                          To learn how to display your application logs, navigate to logs section

                                                          Job output

                                                          Qovery expects the output file to be written in the following path /qovery-output/qovery-output.json (the output folder is automatically mounted by Qovery). The file should follow this format:

                                                          {
                                                          "varname1": {
                                                          "sensitive": true,
                                                          "value": "myvalue"
                                                          },
                                                          "varname2": {
                                                          "sensitive": false,
                                                          "value": "myvalue"
                                                          }
                                                          }
                                                          ...

                                                          At the end of the job execution, this file will be processed by Qovery and a set of environment variables will be created, one for each element in the json. The information in the json file will be mapped to an environment variables in this way:

                                                          • Variable Name: QOVERY_OUTPUT_JOB_<JOBID>_<VARNAME> , where <JOBID> is the id of the Job on Qovery side and <VARNAME> is the name of the element in the output file.
                                                          • Variable Value: field "value"
                                                          • Secret: field "sensitive"

                                                          An alias <VARNAME> will be automatically created to simplify your setup.

                                                          Example -Let's say that the code of our job creates a PostgreSQL RDS on AWS. At the end of its execution, the job should know the connection Once created, the job should know the connection string of the PostgreSQL. The job can now create a file /qovery-output/qovery-output.json with the following structure:

                                                          {
                                                          "POSTGRES_DB_HOST": {
                                                          "sensitive": False,
                                                          "value": "zf138d9c8-postgresql"
                                                          },
                                                          "POSTGRES_DB_USER": {
                                                          "sensitive": False,
                                                          "value": "root"
                                                          },
                                                          "POSTGRES_DB_PASS": {
                                                          "sensitive": True,
                                                          "value": "mypassword"
                                                          },
                                                          "POSTGRES_DB_TABLE": {
                                                          "sensitive": False,
                                                          "value": "MYDB"
                                                          },
                                                          "POSTGRES_DB_PORT": {
                                                          "sensitive": False,
                                                          "value": "3600"
                                                          }
                                                          }

                                                          This file will be processed by Qovery and the following environment variables will be created:

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_HOST

                                                          • Value: "zf138d9c8-postgresql"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_HOST

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_USER

                                                          • Value: "root"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_USER

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_PASS

                                                          • Value: "mypassword"
                                                          • Secret: true
                                                          • Alias: POSTGRES_DB_PASS

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_TABLE

                                                          • Value: "MYDB"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_TABLE

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_DB_PORT

                                                          • Value: "3600"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_PORT

                                                          Once the execution of the job is terminated and the environment variables are created, any application within the same environment will be able to access those environment variables and thus connect to the postgres instance.

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a job

                                                          1. Select the job you want to delete

                                                          2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                                                            Application

                                                          +Let's say that the code of our job creates a PostgreSQL RDS on AWS. At the end of its execution, the job should know the connection Once created, the job should know the connection string of the PostgreSQL. The job can now create a file /qovery-output/qovery-output.json with the following structure:

                                                          {
                                                          "POSTGRES_DB_HOST": {
                                                          "sensitive": False,
                                                          "value": "zf138d9c8-postgresql"
                                                          },
                                                          "POSTGRES_DB_USER": {
                                                          "sensitive": False,
                                                          "value": "root"
                                                          },
                                                          "POSTGRES_DB_PASS": {
                                                          "sensitive": True,
                                                          "value": "mypassword"
                                                          },
                                                          "POSTGRES_DB_TABLE": {
                                                          "sensitive": False,
                                                          "value": "MYDB"
                                                          },
                                                          "POSTGRES_DB_PORT": {
                                                          "sensitive": False,
                                                          "value": "3600"
                                                          }
                                                          }

                                                          This file will be processed by Qovery and the following environment variables will be created:

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_HOST

                                                          • Value: "zf138d9c8-postgresql"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_HOST

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_USER

                                                          • Value: "root"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_USER

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_PASS

                                                          • Value: "mypassword"
                                                          • Secret: true
                                                          • Alias: POSTGRES_DB_PASS

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_TABLE

                                                          • Value: "MYDB"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_TABLE

                                                          Var QOVERY_OUTPUT_JOB_<JOBID>_DB_PORT

                                                          • Value: "3600"
                                                          • Secret: false
                                                          • Alias: POSTGRES_DB_PORT

                                                          Once the execution of the job is terminated and the environment variables are created, any application within the same environment will be able to access those environment variables and thus connect to the postgres instance.

                                                          Clone

                                                          You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                                                          Clone Service

                                                          The target environment can be the same as the current environment or even another one in a completely different project.

                                                          Important information

                                                          Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                                                          • same environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                          • another environment:
                                                            • custom domain: this setup is not copied into the new service (to avoid collision)
                                                            • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                                                            • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                                                            • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                                                          Please check the configuration of the new service before deploying it.

                                                          Delete a job

                                                          1. Select the job you want to delete

                                                          2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                                                            Application

                                                          - + - + diff --git a/docs/using-qovery/configuration/object-storage/index.html b/docs/using-qovery/configuration/object-storage/index.html index 27a4a4d986..7405e174e0 100644 --- a/docs/using-qovery/configuration/object-storage/index.html +++ b/docs/using-qovery/configuration/object-storage/index.html @@ -26,9 +26,9 @@ - + - + @@ -61,14 +61,14 @@
                                                          // Change bucket property to your Space name
                                                          const upload = multer({
                                                          storage: multerS3({
                                                          s3: s3,
                                                          bucket: 'your-space-here',
                                                          acl: 'public-read',
                                                          key: function (request, file, cb) {
                                                          console.log(file);
                                                          cb(null, file.originalname);
                                                          }
                                                          })
                                                          }).array('upload', 1);

                                                          If your bucket is private, all you need to do is to set up those environment variables for your application:

                                                          • AWS_ACCESS_KEY_ID
                                                          • AWS_SECRET_ACCESS_KEY

                                                          You can find your secrets in your Space configuration. You can set up secrets in your application by following our guide.

                                                          Scaleway

                                                          1. Navigate to Scaleway Console

                                                          2. Click Create, and Spaces button

                                                            Storage

                                                          3. Set up your bucket settings, like name, permissions, cloud region

                                                          4. Connect your application to your bucket (Scaleway Buckets are partly AWS S3 compatible, this is why we use S3 client in the example):

                                                            // Load dependencies
                                                            const aws = require('aws-sdk');
                                                            const express = require('express');
                                                            const multer = require('multer');
                                                            const multerS3 = require('multer-s3');
                                                            const app = express();
                                                            // Set S3 endpoint to Scaleway Bucket in correct region
                                                            const endpoint = new aws.Endpoint('https://s3.fr-par.scw.cloud.');
                                                            const s3 = new aws.S3({
                                                            endpoint: endpoint
                                                            });
                                                            -
                                                            // Change bucket property to your Bucket name
                                                            const upload = multer({
                                                            storage: multerS3({
                                                            s3: s3,
                                                            bucket: 'your-bucket-here',
                                                            acl: 'public-read',
                                                            key: function (request, file, cb) {
                                                            console.log(file);
                                                            cb(null, file.originalname);
                                                            }
                                                            })
                                                            }).array('upload', 1);

                                                            If your bucket is private, all you need to do is to set up those environment variables for your application:

                                                            • AWS_ACCESS_KEY_ID
                                                            • AWS_SECRET_ACCESS_KEY

                                                            Follow Scaleway guide to get your credentials. You can set up secrets in your application by following our guide.

                                                          +
                                                          // Change bucket property to your Bucket name
                                                          const upload = multer({
                                                          storage: multerS3({
                                                          s3: s3,
                                                          bucket: 'your-bucket-here',
                                                          acl: 'public-read',
                                                          key: function (request, file, cb) {
                                                          console.log(file);
                                                          cb(null, file.originalname);
                                                          }
                                                          })
                                                          }).array('upload', 1);

                                                          If your bucket is private, all you need to do is to set up those environment variables for your application:

                                                          • AWS_ACCESS_KEY_ID
                                                          • AWS_SECRET_ACCESS_KEY

                                                          Follow Scaleway guide to get your credentials. You can set up secrets in your application by following our guide.

                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/api-token/index.html b/docs/using-qovery/configuration/organization/api-token/index.html index 11eb49452b..5e9eb172ae 100644 --- a/docs/using-qovery/configuration/organization/api-token/index.html +++ b/docs/using-qovery/configuration/organization/api-token/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          API Token

                                                          API token allows third-party applications or script to access your organization via the Qovery API (CI/CD, Terraform script, Pulumi etc..).

                                                          You can manage the API tokens attached to your organization directly from the Qovery console.

                                                          You can access the token API configuration by opening the Token API section within the organization settings.

                                                          How to access your organization settings

                                                          How to access your Token API section

                                                          Create a new token

                                                          You can create a new token API by pressing the Add button. You need to provide:

                                                          • A name
                                                          • A description
                                                          • A role: this allows to manage the permission assigned to the new API Token. The permission is managed via the Qovery RBAC system

                                                          Once validated the token value will be displayed on the interface.

                                                          Delete a token

                                                          You can create a new token API by pressing the Bin button next to the Token you want to delete.

                                                          Edit a token

                                                          This functionality is not yet available

                                                          +

                                                          API Token

                                                          API token allows third-party applications or script to access your organization via the Qovery API (CI/CD, Terraform script, Pulumi etc..).

                                                          You can manage the API tokens attached to your organization directly from the Qovery console.

                                                          You can access the token API configuration by opening the Token API section within the organization settings.

                                                          How to access your organization settings

                                                          How to access your Token API section

                                                          Create a new token

                                                          You can create a new token API by pressing the Add button. You need to provide:

                                                          • A name
                                                          • A description
                                                          • A role: this allows to manage the permission assigned to the new API Token. The permission is managed via the Qovery RBAC system

                                                          Once validated the token value will be displayed on the interface.

                                                          Delete a token

                                                          You can create a new token API by pressing the Bin button next to the Token you want to delete.

                                                          Edit a token

                                                          This functionality is not yet available

                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/container-registry/index.html b/docs/using-qovery/configuration/organization/container-registry/index.html index 07f0195602..d99d287983 100644 --- a/docs/using-qovery/configuration/organization/container-registry/index.html +++ b/docs/using-qovery/configuration/organization/container-registry/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                          Container Registry

                                                          This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.

                                                          You can access this section by opening the Organization Settings -> Container Registries

                                                          How to access your organization settings

                                                          Application

                                                          Create a Container Registry

                                                          Application

                                                          By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:

                                                          • Registry Name
                                                          • Description
                                                          • Registry Url: the base url of the registry (example: https://docker.io, https://public.ecr.aws etc..)
                                                          • Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.
                                                          • Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part.

                                                          Important information:

                                                          • If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. See here for more details
                                                          • If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.

                                                          Now that you have created the registry, you can start using it in order to create and deploy a service using the images stored within it.

                                                          Modify or Delete an existing registry

                                                          You can modify an existing container registry by clicking on the "Wheel" button next to it -You can delete an existing container registry by clicking on the "Trash" button next to it

                                                          Application

                                                          +You can delete an existing container registry by clicking on the "Trash" button next to it

                                                          Application

                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/git-repository-access/index.html b/docs/using-qovery/configuration/organization/git-repository-access/index.html index 265085acd8..0a13ae9e86 100644 --- a/docs/using-qovery/configuration/organization/git-repository-access/index.html +++ b/docs/using-qovery/configuration/organization/git-repository-access/index.html @@ -26,9 +26,9 @@ - + - + @@ -55,14 +55,14 @@ 2. Modify the existing token on the Qovery console by updating its value with the token created in step 1.

                                                          Managing the tokens on Qovery

                                                          Tokens are centrally managed within your organization settings under the Git repository access section:

                                                          1. Open your Qovery Console and access your organization settings:

                                                          How to access your organization settings

                                                          1. In the Organization settings menu, click Git Repositories Access:

                                                          Git Repositories Access

                                                          Create the token

                                                          1. Press the Add new Token button
                                                          2. Fill the form with:
                                                          • your git provider
                                                          • Token name: this is the display name used in every Qovery interface.
                                                          • Description (optional)
                                                          • Token Value: the token value as returned by your git provider.
                                                          • Workspace: Only for bitbucket, provide the workspace where the token has been created.
                                                          1. Press the Create button.

                                                          Using the token

                                                          Once the token is created, you can configure your Qovery services.

                                                          In the creation flow of your service, you will be able to either select your own git account or one of the git tokens configured within your organization.

                                                          Git Source Selection

                                                          If a git token is selected, Qovery will use that token to access the git repository as long as the token does not expire (see the Token expiration section)

                                                          Update the token

                                                          1. Press the wheel button on the token you want to modify.
                                                          2. Modify the token.
                                                          3. Press the Save button.

                                                          Note: If you want to modify the git token configured in Qovery, you can directly edit the token value. It will prevent you from manually updating every application using the old token.

                                                          Delete the token

                                                          1. Press the bin button next to the token you want to delete
                                                          2. Confirm the operation by writing delete

                                                          Deprecated - Qovery Github App

                                                          For better control, as a GitHub user, you can install the Qovery Github App, and define which Github repositories Qovery can access.

                                                          Installing the Qovery Github App

                                                          To install the Qovery Github App:

                                                          1. Open your Qovery Console and access your organization settings:

                                                            How to access your organization settings

                                                          2. In the Organization settings menu, click Git Repository Access:

                                                            Git Repository Access

                                                          3. To start the installation process click Install:

                                                            A new window opens in your browser so you can install the Qovery Github App on your Github account.

                                                          4. Click the Github account on which you want to install the Qovery Github App:

                                                            Application

                                                          5. Click Only select repositories and, in the dropdown menu, define which Github repositories you want to give Qovery access to:

                                                            Application

                                                          6. To confirm, click Install & Authorize:

                                                            Application

                                                            You are redirected to your Qovery Console, where the list of authorized Github repositories is updated.

                                                          Managing the Github permissions

                                                          To add or remove access to one of your repositories:

                                                          1. Open your Qovery Console and access your organization settings:

                                                            Qovery - delete organization

                                                          2. In the Organization settings menu, click Git Permission:

                                                            Application

                                                          3. Next to your Git provider account, click Manage permission:

                                                            Application

                                                          4. Click the Github account on which you want to manage the Qovery Github App access:

                                                            Application

                                                          5. Add or remove the repositories you want to give Qovery access to:

                                                            Application

                                                          Uninstalling the Qovery Github App

                                                          To uninstall the Qovery Github App:

                                                          1. Open your Qovery Console and access your organization settings:

                                                            Qovery - delete organization

                                                          2. In the Organization settings menu, click Git Permission:

                                                            Application

                                                          3. Next to your Git provider account, click Disconnect:

                                                            Application

                                                            The list of authorized Github repositories is updated, meaning Qovery now has access to all of your Github repositories again.

                                                          4. From your browser, access your Github account and open your Settings:

                                                            Application

                                                          5. In the navigation menu, click Applications:

                                                            Application

                                                          6. At the bottom of the page, click Uninstall:

                                                            Application

                                                            A confirmation pop-up window opens.

                                                          7. Click OK:

                                                            The Qovery Github App is uninstalled.

                                                          +Please note that the repositories must belong to the same Github organization, we do not support yet a multi-github organization setup

                                                          Managing the Github permissions

                                                          To add or remove access to one of your repositories:

                                                          1. Open your Qovery Console and access your organization settings:

                                                            Qovery - delete organization

                                                          2. In the Organization settings menu, click Git Permission:

                                                            Application

                                                          3. Next to your Git provider account, click Manage permission:

                                                            Application

                                                          4. Click the Github account on which you want to manage the Qovery Github App access:

                                                            Application

                                                          5. Add or remove the repositories you want to give Qovery access to:

                                                            Application

                                                          Uninstalling the Qovery Github App

                                                          To uninstall the Qovery Github App:

                                                          1. Open your Qovery Console and access your organization settings:

                                                            Qovery - delete organization

                                                          2. In the Organization settings menu, click Git Permission:

                                                            Application

                                                          3. Next to your Git provider account, click Disconnect:

                                                            Application

                                                            The list of authorized Github repositories is updated, meaning Qovery now has access to all of your Github repositories again.

                                                          4. From your browser, access your Github account and open your Settings:

                                                            Application

                                                          5. In the navigation menu, click Applications:

                                                            Application

                                                          6. At the bottom of the page, click Uninstall:

                                                            Application

                                                            A confirmation pop-up window opens.

                                                          7. Click OK:

                                                            The Qovery Github App is uninstalled.

                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/helm-repository/index.html b/docs/using-qovery/configuration/organization/helm-repository/index.html index a54e4a6429..da2557cf38 100644 --- a/docs/using-qovery/configuration/organization/helm-repository/index.html +++ b/docs/using-qovery/configuration/organization/helm-repository/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                          Helm Repository

                                                          This section allows you to define the list of helm repositories that can be used within your organization. Only helm charts stored on those helm repositories are allowed to be deployed on your cluster.

                                                          You can access this section by opening the Organization Settings -> Helm Repositories

                                                          How to access your organization settings

                                                          Helm

                                                          Create a Helm Repository

                                                          Helm

                                                          By clicking on "Add Repository" you will be able to create a new Helm Repository by filling these information:

                                                          • Repository Name
                                                          • Description
                                                          • Kind:
                                                            • HTTP: for standard helm repository
                                                            • OCI_ECR: for AWS private OCI-based registries
                                                            • OCI_SCALEWAY: for Scaleway OCI-based registries
                                                            • OCI_DOCKER_HUB: for Docker Hub OCI-based registries
                                                            • OCI_PUBLIC_ECR: for AWS public OCI-based registries
                                                            • OCI_GENERIC_CR: for Generic OCI-based registries
                                                            • OCI_GITHUB_CR: for Github OCI-based registries
                                                            • OCI_GITLAB_CR: for Gitlab OCI-based registries
                                                          • Repository Url: the url of the repository (example: oci://registry-1.docker.io/repository, https://helm.datadoghq.com etc..)
                                                          • Credentials: these depend on the chosen repository type. If a helm repository is public, you don't need to fill this part.
                                                          • Skip TLS verification: to activate the helm argument --insecure-skip-tls-verify

                                                          Now that you have created the repository, you can start using it in order to create and deploy a helm chart using the images stored within it.

                                                          Modify or Delete an existing repository

                                                          You can modify an existing helm repository by clicking on the "Wheel" button next to it -You can delete an existing helm repository by clicking on the "Trash" button next to it

                                                          Helm

                                                          +You can delete an existing helm repository by clicking on the "Trash" button next to it

                                                          Helm

                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/index.html b/docs/using-qovery/configuration/organization/index.html index 430d4a1f0c..0e177107b7 100644 --- a/docs/using-qovery/configuration/organization/index.html +++ b/docs/using-qovery/configuration/organization/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@

                                                          Organization

                                                          An organization is a shared account where developers can collaborate across many projects at once. Owners and organization administrators can manage every aspect of the organization, from the clusters up to the member access.

                                                          Creating an Organization

                                                          When Signing Up

                                                          When signing up for Qovery, you need to sign in through your Git provider (GitHub, GitLab or Bitbucket).

                                                          Once this is done, you can create your first organization and the first project within it. Before completing the creation process, you need to choose one of our 3 plans:

                                                          • Free
                                                          • Team
                                                          • Enterprise

                                                          For more information, see our pricing page.

                                                          After Signing Up

                                                          Qovery lets you create as many as you want organizations. Each organization is independent of the others. -To create a new organization:

                                                          1. Click on your profile icon button on the left navbar.
                                                          2. Click on the + button in the top right corner of the dropdown.

                                                          Qovery - create organization after signing up

                                                          Change an Organization

                                                          As a user, you can have access to one or many organizations. Use the dropdown on the bottom left of the navbar to change your organization.

                                                          Qovery - change organization

                                                          Delete an Organization

                                                          To delete your organization, you need to go into the Danger Zone within your organization settings.

                                                          Billing

                                                          This section allows you to retrieve your invoices and as well manage the credit card used for the payments.

                                                          Organization admin settings

                                                          You can access the organization settings using the Wheel button on the left nav bar

                                                          How to access your organization settings

                                                          General Information

                                                          In the General Information tab:

                                                          • Company name: enter the name of your company.
                                                          • Description: enter a description of your organization.
                                                          • Website: enter the website of your company.
                                                          • Admin contact emails: enter one or several email addresses (separated by commas) on which you want to receive important communications from Qovery.

                                                          Don't forget to click Update to save your organization information!

                                                          Other Settings

                                                          You can find below a dedicated page for each of the admin settings that can be managed within this section.

                                                          Api token
                                                          Container registry
                                                          Git repository access
                                                          Helm repository
                                                          Members rbac
                                                          +To create a new organization:

                                                          1. Click on your profile icon button on the left navbar.
                                                          2. Click on the + button in the top right corner of the dropdown.

                                                          Qovery - create organization after signing up

                                                          Change an Organization

                                                          As a user, you can have access to one or many organizations. Use the dropdown on the bottom left of the navbar to change your organization.

                                                          Qovery - change organization

                                                          Delete an Organization

                                                          To delete your organization, you need to go into the Danger Zone within your organization settings.

                                                          Billing

                                                          This section allows you to retrieve your invoices and as well manage the credit card used for the payments.

                                                          Organization admin settings

                                                          You can access the organization settings using the Wheel button on the left nav bar

                                                          How to access your organization settings

                                                          General Information

                                                          In the General Information tab:

                                                          • Company name: enter the name of your company.
                                                          • Description: enter a description of your organization.
                                                          • Website: enter the website of your company.
                                                          • Admin contact emails: enter one or several email addresses (separated by commas) on which you want to receive important communications from Qovery.

                                                          Don't forget to click Update to save your organization information!

                                                          Other Settings

                                                          You can find below a dedicated page for each of the admin settings that can be managed within this section.

                                                          Api token
                                                          Container registry
                                                          Git repository access
                                                          Helm repository
                                                          Members rbac
                                                          - + - + diff --git a/docs/using-qovery/configuration/organization/members-rbac/index.html b/docs/using-qovery/configuration/organization/members-rbac/index.html index 3b6294d12f..7a23147d9e 100644 --- a/docs/using-qovery/configuration/organization/members-rbac/index.html +++ b/docs/using-qovery/configuration/organization/members-rbac/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                          Members and RBAC

                                                          You can manage from the organization settings the members capable to access your organization and as well their permission via an RBAC system.

                                                          You can access the organization settings using the Wheel button on the left nav bar

                                                          How to access your organization settings

                                                          Organization members

                                                          This section allows you to manage the members of your organization (add / remove) and as well assign a role to each of them.

                                                          You can invite someone to join your organization by email. Then he will get access to your projects and will be able to contribute.

                                                          Qovery - List all members within an organization

                                                          Roles-Based access control (RBAC)

                                                          Qovery allows you to control the access to your cluster and environment resources by defining and assigning roles to your users.

                                                          By default, five roles are created within your organization (Basic Roles):

                                                          • Owner: the user has full access on the organization
                                                          • Admin: same as the owner, the has full access to the organization but he cannot delete it
                                                          • DevOps: the user can manage the organization infrastructure (clusters/registry/webhook setup) and manage the deployments of any environment within the organization.
                                                          • Billing Manager: the user can only manage the billing of the organization
                                                          • Viewer: the user has read-only access to any section of the organization

                                                          More in detail, you can find the associated permissions below:

                                                          ActionOwnerAdminDevOpsBilling ManagerViewer
                                                          Read organizationyesyesyesyesyes
                                                          Edit organizationyesyesnonono
                                                          Delete organizationyesnononono
                                                          Manage billingyesyesnoyesno
                                                          Manage members & rolesyesyesnonono
                                                          Manage cluster & container registryyesyesyesnono
                                                          Manage organization setup (webhooks, Git and API tokens etc..)yesyesyesnono
                                                          Read ANY projectyesyesyesnoyes
                                                          Edit/Delete ANY projectyesyesnonono
                                                          Create projectyesyesnonono
                                                          Read ANY environmentyesyesyesnoyes
                                                          Edit/Delete ANY environment or serviceyesyesnonono
                                                          Create environment or serviceyesyesnonono
                                                          Add/Edit/Delete environment variables and secretsyesyesyesnono
                                                          Deploy/Stop ANY environment or serviceyesyesyesnono
                                                          Connect via shell to ANY applicationyesyesyesnono

                                                          Custom roles

                                                          If the basic roles are not enough given your internal organization, Qovery allows you to customize the accesses to your clusters, projets and environments by defining Custom Roles.

                                                          A Custom role allows you to customize:

                                                          • Cluster Level Permissions: you can specify the access to the existing computing resources (manage cluster X, create environments on cluster Y, read-only access on cluster K)
                                                          • Project Level Permissions: you can specify the access to the projects and their environments by environment type (deploy type X, create type K etc..)

                                                          To create a custom role, go in the Roles & Permissions section press "Add new Role"

                                                          For the new role, you will be able to specify:

                                                          • The name of the role
                                                          • A description
                                                          • Cluster Level permissions
                                                          • Project Level Permissions

                                                          Cluster Level Permissions

                                                          This section allows you to fine tune the access to the computing resources. For each cluster of your organization, you will be able to specify an access permission (ordered by permission level):

                                                          NamePermission Type
                                                          Read-OnlyThe user can access the cluster information (name, region etc..). Minimum permission level.
                                                          Create EnvironmentThe user can create environments on this cluster. Only users with this role could allocate resources for their environments on this cluster. Further environment level permissions (like deployment rights) are managed via the "Project Permissions", see below
                                                          Full AccessThe user can create create environments on this cluster and as well manage the cluster's settings (start/stop, change number and type of nodes etc..). This permission allows a group of users to manage by themselves a specific cluster
                                                          • Project Level Permissions This section allows you to fine tune the access to the projects and their environments. The environment access is managed by "Environment Type" to simplify the configuration (Production, Staging, Development, Preview). For each project of your organization and by environment type, you will be able to specify an access permission (ordered by permission level):
                                                          NamePermission Type
                                                          No AccessThe user has no access to this environment type. If the user has "No Access" on all the environment types, he will not have access to the project
                                                          Read-OnlyAccess in read-only to this environment type. Useful to restrict access on sensitive environments
                                                          DeployManage the deployments of this environment type, access the logs, connect via SSH to the application and manage its environment variables
                                                          ManageManage the deployments and the settings of this environment type (including adding or removing services)
                                                          Full AccessThe user is admin of the project and can do everything he wants on it (no matter the environment type)

                                                          Qovery - custom role

                                                          Once the role is created, you can assign it to a member of your organization within the "Members" section. You can also update the permissions by editing the role from the Roles&Permissions screen

                                                          Examples

                                                          Within this section, we will try to provide you some example of roles & permission setup

                                                          Example 1, simple setup

                                                          An organization has 3 clusters ("prod cluster", “staging cluster”, “dev cluster”) and 1 project P1. The organization has a CTO, a devops and some developers. The roles & permissions could be configured in this way:

                                                          • CTO = Owner
                                                          • Devops = Devops or Admin
                                                          • Developers: we want these users capable of accessing the project, having read access to the prod clusters/env, managing deployments on the staging cluster (but not creating new environments on it) and doing whatever they want for the development environments on the dev cluster. So the configuration will look like:
                                                            • Create a new Role “developer” with the following permissions:
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Read-Only
                                                                • Dev cluster → Create Environment (they can create environments on this cluster)
                                                              • Project Level Permissions for the project "P1":
                                                                • Environment access (by env type)
                                                                  • prod = Read-Only
                                                                  • staging = deploye (i.e. they can deploy env of type “staging”)
                                                                  • development = Full Access (i.e. they can manage and create env of type “dev”)

                                                          Example 2, advanced setup

                                                          An organization with 4 dev clusters (“prod cluster”, “staging clyster”, 2 Dev clusters called “dev cluster team 1” and "dev cluster team 2”) and 2 projects P1 and P2. The organization has a CTO, a devops, 2 dev teams with an “acting dev-ops” in it who manages the dev cluster on behalf of the devops. -The roles & permissions could be configured in this way:

                                                          • CTO = Owner
                                                          • Devops = Devops or Admin
                                                          • Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:
                                                            • Create a new Role “Dev Team 1”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Read-Only
                                                                • Dev cluster team 1 → Create Environment (they can create envs only on their dev cluster)
                                                                • Dev cluster team 2 → Read-Only
                                                              • Project Level Permissions:
                                                                • Config on the project “P1”
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = deploy
                                                                    • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                                                                • Config on the project “P2” (i.e. they can't access P2)
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = no-access
                                                                    • dev = no-access
                                                          • Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:
                                                            • Create a new Role “Dev Team 2”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Read-Only
                                                                • Dev cluster team 1 → Read-Only
                                                                • Dev cluster team 2 → Create Environment (they can create envs only on their dev cluster)
                                                              • Project Level Permissions:
                                                                • Config on the project “P1” (i.e. they can't access P1)
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = no-access
                                                                    • dev = no-access
                                                                • Config on the project “P2”
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = deploy
                                                                    • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                                                          • Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:
                                                            • Create a new Group “Acting DevOps”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Create Environment
                                                                • Dev1 cluster → Full Access
                                                                • Dev2 cluster → Full Access
                                                              • Project permissions settings
                                                                • Config on the project “P1”
                                                                  • Admin (i.e.: full access to the project)
                                                                • Config on the project “P2”
                                                                  • Admin (i.e.: full access to the project)
                                                          +The roles & permissions could be configured in this way:

                                                          • CTO = Owner
                                                          • Devops = Devops or Admin
                                                          • Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:
                                                            • Create a new Role “Dev Team 1”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Read-Only
                                                                • Dev cluster team 1 → Create Environment (they can create envs only on their dev cluster)
                                                                • Dev cluster team 2 → Read-Only
                                                              • Project Level Permissions:
                                                                • Config on the project “P1”
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = deploy
                                                                    • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                                                                • Config on the project “P2” (i.e. they can't access P2)
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = no-access
                                                                    • dev = no-access
                                                          • Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:
                                                            • Create a new Role “Dev Team 2”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Read-Only
                                                                • Dev cluster team 1 → Read-Only
                                                                • Dev cluster team 2 → Create Environment (they can create envs only on their dev cluster)
                                                              • Project Level Permissions:
                                                                • Config on the project “P1” (i.e. they can't access P1)
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = no-access
                                                                    • dev = no-access
                                                                • Config on the project “P2”
                                                                  • Environment access (by env type)
                                                                    • prod = no-access
                                                                    • staging = deploy
                                                                    • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                                                          • Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:
                                                            • Create a new Group “Acting DevOps”
                                                              • Cluster Level Permissions:
                                                                • Prod cluster → Read-Only
                                                                • Staging cluster → Create Environment
                                                                • Dev1 cluster → Full Access
                                                                • Dev2 cluster → Full Access
                                                              • Project permissions settings
                                                                • Config on the project “P1”
                                                                  • Admin (i.e.: full access to the project)
                                                                • Config on the project “P2”
                                                                  • Admin (i.e.: full access to the project)
                                                          - + - + diff --git a/docs/using-qovery/configuration/project/index.html b/docs/using-qovery/configuration/project/index.html index 4568ad319a..1e7eb55887 100644 --- a/docs/using-qovery/configuration/project/index.html +++ b/docs/using-qovery/configuration/project/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Project

                                                          A project allows you to group together a set of environments with the objective to run the same application (see the Environment page for more information).

                                                          When creating a new organization, a project is created by default. You can customize the access to your project thanks to our RBAC system.

                                                          Create a new project

                                                          If you need to create an additional project, go into the organization settings and press on the NEW button.

                                                          Project Creation

                                                          The modal will ask you to provide a name and a description.

                                                          Edit project general information

                                                          General information of a project can be updated by:

                                                          • opening the settings page
                                                          • selecting the project
                                                          • opening the GENERAL section.

                                                          Project Update

                                                          Delete a project

                                                          You can delete a project by:

                                                          • opening the settings page
                                                          • selecting the project
                                                          • opening the DANGER section and pressing the Delete Project button.

                                                          Project Delete

                                                          +

                                                          Project

                                                          A project allows you to group together a set of environments with the objective to run the same application (see the Environment page for more information).

                                                          When creating a new organization, a project is created by default. You can customize the access to your project thanks to our RBAC system.

                                                          Create a new project

                                                          If you need to create an additional project, go into the organization settings and press on the NEW button.

                                                          Project Creation

                                                          The modal will ask you to provide a name and a description.

                                                          Edit project general information

                                                          General information of a project can be updated by:

                                                          • opening the settings page
                                                          • selecting the project
                                                          • opening the GENERAL section.

                                                          Project Update

                                                          Delete a project

                                                          You can delete a project by:

                                                          • opening the settings page
                                                          • selecting the project
                                                          • opening the DANGER section and pressing the Delete Project button.

                                                          Project Delete

                                                          - + - + diff --git a/docs/using-qovery/configuration/provider/index.html b/docs/using-qovery/configuration/provider/index.html index 6cf551d37a..ca27e716cd 100644 --- a/docs/using-qovery/configuration/provider/index.html +++ b/docs/using-qovery/configuration/provider/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                          -

                                                          Provider

                                                          Resources
                                                            +

                                                            Provider

                                                            Resources
                                                              - + - + diff --git a/docs/using-qovery/configuration/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 13f8d30db9..e68b020762 100644 --- a/docs/using-qovery/configuration/service-health-checks/index.html +++ b/docs/using-qovery/configuration/service-health-checks/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@ You have a liveness probe configured on port 80 of your application. If during the deployment of your application the probes can't connect to port 80 and we reach a timeout, the deployment fails.

                                                              Qovery allows you to manage these probes directly from within the Qovery console during the setup of your application, letting you decide their activation, configuration and check frequency.

                                                              Probes can be configured for:

                                                              • Applications
                                                              • Cronjobs
                                                              • Lifecycle Jobs

                                                              Probes Configuration

                                                              The following configuration parameters are valid for both the Liveness and the Readiness probes.

                                                              Type

                                                              Allows you to specify the type of probe you want to run against your application:

                                                              • NONE if NONE is selected, the probe is disabled and thus Kubernetes won't be able to verify the state of your application and take the right corrective actions.
                                                              • HTTP probes are the most common probe type. You can use them if your application is a HTTP server, or if you create a lightweight HTTP server inside your application specifically to respond to such probes. When using a HTTP probe, you need to configure:

                                                                • a port
                                                                • a path Once configured, Kubernetes pings a path (for example: /healthz ) at a given port. If it gets a response in the 200 or 300 range, the check is passed. Otherwise, it is considered as failed and Kubernetes takes the necessary corrective actions.
                                                              • TCP probes are most often used when HTTP or command probes aren't an option. When using a TCP Liveness probe, Kubernetes tries to establish a connection on the specified port. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                                                              • gRPC probes When using a gRCP Liveness probe, Kubernetes tries to establish a connection on the specified port and service. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                                                              • EXEC probes -Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                                                              Initial Delay (in seconds)

                                                              Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                                                              Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                                                              Period (in seconds)

                                                              Allows you to specify an interval, in seconds, between each probe.

                                                              Timeout (in seconds)

                                                              Allows you to specify the interval, in seconds, after which the probe times out.

                                                              Success Threshold

                                                              Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                                                              Failure Threshold

                                                              Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                                                              Configuiration for Long-starting application

                                                              If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                                                              If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                                                              +Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                                                              Initial Delay (in seconds)

                                                              Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                                                              Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                                                              Period (in seconds)

                                                              Allows you to specify an interval, in seconds, between each probe.

                                                              Timeout (in seconds)

                                                              Allows you to specify the interval, in seconds, after which the probe times out.

                                                              Success Threshold

                                                              Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                                                              Failure Threshold

                                                              Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                                                              Configuiration for Long-starting application

                                                              If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                                                              If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                                                              - + - + diff --git a/docs/using-qovery/configuration/user-account/index.html b/docs/using-qovery/configuration/user-account/index.html index fde74126ef..9dcf133a1b 100644 --- a/docs/using-qovery/configuration/user-account/index.html +++ b/docs/using-qovery/configuration/user-account/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@

                                                              User Account

                                                              You can manage a few settings linked to your account from the User Account section.

                                                              To access this section, you have to: 1. click on the user icon on the bottom left side -2. click on your user

                                                              Access user account

                                                              General account settings

                                                              This section shows you some basic information about your account like:

                                                              • First name: retrieved from your git account, it can't be changed.
                                                              • Last name: retrieved from your git account, it can't be changed.
                                                              • Account email: retrieved from your git account, it can't be changed.
                                                              • Communication email: this email will be used by Qovery to communicate you any update or issue ongoing on the product. Make sure to set the communication email with a valid email adress
                                                              Resources
                                                                +2. click on your user

                                                                Access user account

                                                                General account settings

                                                                This section shows you some basic information about your account like:

                                                                • First name: retrieved from your git account, it can't be changed.
                                                                • Last name: retrieved from your git account, it can't be changed.
                                                                • Account email: retrieved from your git account, it can't be changed.
                                                                • Communication email: this email will be used by Qovery to communicate you any update or issue ongoing on the product. Make sure to set the communication email with a valid email adress
                                                                Resources
                                                                  - + - + diff --git a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html index d5e039eb0e..31d523cda6 100644 --- a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html +++ b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                  -

                                                                  Deploying with the auto-deploy feature

                                                                  Once you have configured your services and deployed them for the first time, you can decide to automatically update the applications to the latest version of your git branch thanks to the auto-deploy feauture.

                                                                  Each time a commit is pushed on your git repository, Qovery receives a webhook call containing the commit information (who did it, what changed, which branch etc..). Thanks to this information, Qovery is able to determine which application should be automatically re-deployed with the new version.

                                                                  How to activate it

                                                                  The auto-deploy feature can be activated from the application settings, by switching on the auto-deploy flag.

                                                                  Auto-deploy settings

                                                                  It can also be activated on the first step of the service creation flow

                                                                  Auto-deploy creation flow

                                                                  Once this flag is activated, every new commit pushed on the branch of the application will trigger an automatic deployment of the new version.

                                                                  Filtering commits triggering the auto-deploy

                                                                  By default every new commit pushed on the branch will trigger a deployment of the application. You can use the Deployment restrictions feature to include or exclude certain files or folders from the feature and avoid un-necessary deployments (like a change on the README file).

                                                                  To add a new restriction, go into the Deployment restrictions section of your application settings.

                                                                  Deployment restrictions

                                                                  When adding a new restriction, two modes can be selected:

                                                                  • EXCLUDE: commits on the file or folder defined in the "Value" field will be ignored
                                                                  • MATCH: only commits on the file or folder defined in the "Value" field will trigger a deployment

                                                                  Note:

                                                                  • "Value" should contain the full file path and can't start with /
                                                                  • Wildcards are not supported in the "Value" field (you can specify "my-prefix*" to exclude commits on files starting with "my-prefix")

                                                                  Auto-deploy and container images

                                                                  The auto-deploy feature can be activated as well if you directly deploy your container images but it requires some additional integration via your CI/CD. Your CI/CD has to inform Qovery that a new version of the image (a new tag) is available for a specific container image. Thanks to this information, Qovery can find any application that uses this container image and automatically trigger a deployment of the new image tag.

                                                                  To inform Qovery of the new version, your CI/CD needs to call the following endpoints, depending on the service type:

                                                                  +

                                                                  Deploying with the auto-deploy feature

                                                                  Once you have configured your services and deployed them for the first time, you can decide to automatically update the applications to the latest version of your git branch thanks to the auto-deploy feauture.

                                                                  Each time a commit is pushed on your git repository, Qovery receives a webhook call containing the commit information (who did it, what changed, which branch etc..). Thanks to this information, Qovery is able to determine which application should be automatically re-deployed with the new version.

                                                                  How to activate it

                                                                  The auto-deploy feature can be activated from the application settings, by switching on the auto-deploy flag.

                                                                  Auto-deploy settings

                                                                  It can also be activated on the first step of the service creation flow

                                                                  Auto-deploy creation flow

                                                                  Once this flag is activated, every new commit pushed on the branch of the application will trigger an automatic deployment of the new version.

                                                                  Filtering commits triggering the auto-deploy

                                                                  By default every new commit pushed on the branch will trigger a deployment of the application. You can use the Deployment restrictions feature to include or exclude certain files or folders from the feature and avoid un-necessary deployments (like a change on the README file).

                                                                  To add a new restriction, go into the Deployment restrictions section of your application settings.

                                                                  Deployment restrictions

                                                                  When adding a new restriction, two modes can be selected:

                                                                  • EXCLUDE: commits on the file or folder defined in the "Value" field will be ignored
                                                                  • MATCH: only commits on the file or folder defined in the "Value" field will trigger a deployment

                                                                  Note:

                                                                  • "Value" should contain the full file path and can't start with /
                                                                  • Wildcards are not supported in the "Value" field (you can specify "my-prefix*" to exclude commits on files starting with "my-prefix")

                                                                  Auto-deploy and container images

                                                                  The auto-deploy feature can be activated as well if you directly deploy your container images but it requires some additional integration via your CI/CD. Your CI/CD has to inform Qovery that a new version of the image (a new tag) is available for a specific container image. Thanks to this information, Qovery can find any application that uses this container image and automatically trigger a deployment of the new image tag.

                                                                  To inform Qovery of the new version, your CI/CD needs to call the following endpoints, depending on the service type:

                                                                  - + - + diff --git a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html index 62cbf4571a..d17223d0ba 100644 --- a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html +++ b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                  -

                                                                  Deploying with your CI/CD

                                                                  Once you have configured your environments and services, you can decide to manage the deployments via the UI or directly from your CI/CD.

                                                                  You can find more information on how to integrate your CI/CD within this section.

                                                                  Resources
                                                                    +

                                                                    Deploying with your CI/CD

                                                                    Once you have configured your environments and services, you can decide to manage the deployments via the UI or directly from your CI/CD.

                                                                    You can find more information on how to integrate your CI/CD within this section.

                                                                    Resources
                                                                      - + - + diff --git a/docs/using-qovery/deployment/deployment-actions/index.html b/docs/using-qovery/deployment/deployment-actions/index.html index cb7de078d2..0b60e887a1 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                                      Deployment Actions

                                                                      Qovery allows you to manage the deployment lifecycle of your services and environments via a set of Deployment actions (example: deploy, redeploy, restart, stop etc..). These actions can be triggered via the Qovery web console, via the Qovery API, via the Qovery CLI or from your CI/CD depending on your integration type.

                                                                      You can imagine the deployment lifecycle of a service or environment like a state machine:

                                                                      • each state is identified by a Deployment Status
                                                                      • the execution of a deployment action will modify the state of the service/environment until it reaches a final status (ok or error)
                                                                      • the list of allowed Deployment action depends on the current Deployment Status. Example: if the deployment status is Deployment Ok, you can trigger only the action Stop. This will stop the execution of the service (deployment status Stopped).

                                                                      Example: When a new application is created within Qovery, the application will have the deployment status Ready. Once the action Deploy is executed on the service, the service will go through the statuses Queued, Building, Deploying and then finally on the status Deployed (meaning that the application is correctly deployed).

                                                                      You can find the deployment status directly in the Qovery console in the service or environment list:

                                                                      Deployment Statuses

                                                                      Note that the deployment status of the environment is built based on the deployment statuses of each service within it.

                                                                      You can decide to execute a deployment action on:

                                                                      • an environment: the action will be executed on each service within the environment. To know more about the deployment order of your services, have a look at the Deployment Pipeline
                                                                      • a single service: the action will be executed only on the selected service.

                                                                      The deployment actions are accessible through the Play button available at service or environment level.

                                                                      Deployment Actions

                                                                      You can trigger the deployment actions via the UI but also via any interface described within this section.

                                                                      Deployment Actions

                                                                      You can find below a description of each deployment action, including its purpose and the deployment status your environment and/or service will go through.

                                                                      Deploy

                                                                      The Deploy action allows you to create the resource necessary to run your code on your Kubernetes cluster. This action is available only if the service or environment have never been deployed.

                                                                      Based on the configuration of your services within, a certain number of Pods will be created in a dedicated Namespace of the target Kubernetes cluster.

                                                                      Once triggered, the deployment of a service goes through the following deployment statuses:

                                                                      • QUEUED : the deployment has been queued and it is waiting for the necessary resources to be allocated to manage your request
                                                                      • BUILDING : the Qovery engine is downloading the git repository and building your code. At the end of this step an image is built and pushed to a registry available on your cloud account. The status will become BUILD ERROR in case of issues on building your code
                                                                      • DEPLOYING : the pods are being created on your cluster based on the image built on the previous step. The status will become DEPLOYMENT ERROR in case of issues on deploying your service. A service is considered un-healthy if the Kubernetes readiness probe check is never OK (more info on readiness probe).
                                                                      • DEPLOYMENT OK : all the requested pods have been created and the service is correctly running (liveness and readiness probes are ok).

                                                                      If the deployment was triggered on the entire environment, the environment will go through the following deployment statuses:

                                                                      • QUEUED : at least one service is in status QUEUED
                                                                      • BUILDING : at least one service is in status BUILDING
                                                                      • DEPLOYING : at least one service is in status DEPLOYING
                                                                      • DEPLOYMENT OK : at least one service is in status DEPLOYMENT OK but none of them is in error (BUILD ERROR or DEPLOYMENT ERROR)
                                                                      • DEPLOYMENT ERROR : at least one service is in status DEPLOYMENT ERROR

                                                                      Redeploy

                                                                      The Redeploy action allows you to update the remote configuration of your services based on their configuration on Qovery side. If any difference exists (vCPU, number of instances, code version etc..), a new set of pod will be created with the new configuration and replace the existing ones. If there are no configuration differences, nothing will happen on the pods running on your cluster (not even a restart, please use the Restart Service feature). -This action is available only if the Deploy action has been triggered at least once on the service or environment.

                                                                      When replacing the pods of your application, Qovery uses the rolling-restart deployment logic:

                                                                      1) Deploy new version of instance #1.

                                                                      2) New version of instance #1 is running => kill previous version of instance #1.

                                                                      3) Deploy new version of instance #2.

                                                                      4) New version of instance #2 is running => kill previous version of instance #2.

                                                                      And so on...

                                                                      You can trigger the re-deployment of a service or of the entire environment. The service or environment goes through the same deployment statuses described in the deployment section.

                                                                      Stop

                                                                      The Stop action allows you to stop the execution on the cluster of the selected service or environment (deployment status = Stopped). This action is available only if the current deployment status is Deployment OK or Deployment Error.

                                                                      The effect on your cluster of the stop operation is different depending on the type of service:

                                                                      • Application, Container, Container DB : Pods of those services are stopped. Any attached storage is preserved
                                                                      • Cloud provider Managed DB: the database is paused (only for AWS, not working on Redis)

                                                                      Restart Service

                                                                      The Restart Service action allows you to restart the pods of your service without applying any configuration change. This action is available only if the current deployment status is Deployment OK and only for a single service.

                                                                      Once triggered, the deployment status service goes through the following statuses:

                                                                      • RESTARTING : the request to restart has been received
                                                                      • RESTARTED : all the pods of the service have been restarted
                                                                      • RESTART ERROR : Qovery couldn't process the restart request

                                                                      Cancel Deployment

                                                                      The Cancel Deployment action allows you to abort any Deploy or Redeploy action. This action is available only if the current deployment status is Queued or Building or Deploying.

                                                                      Deploy other version

                                                                      The Deploy other version action allows you to deploy a different version for your service. This action is available no matter the deployment status of the service.

                                                                      Once you click on the action, this panel will appear, and you will be able to choose the version you wish to update/rollback (either git commit or image Tag).

                                                                      Deploy Other Version

                                                                      By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                                                                      Deploy latest version

                                                                      The Deploy latest version action allows you to deploy the latest version for any of your services within the environment. This action is available no matter the deployment status of the service and only at environment level

                                                                      Once you click on the action, this panel will appear, and you will be able to choose the services you wish to update to the latest version (only for services with source = git repository).

                                                                      Deploy Latest Version

                                                                      By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                                                                      +This action is available only if the Deploy action has been triggered at least once on the service or environment.

                                                                      When replacing the pods of your application, Qovery uses the rolling-restart deployment logic:

                                                                      1) Deploy new version of instance #1.

                                                                      2) New version of instance #1 is running => kill previous version of instance #1.

                                                                      3) Deploy new version of instance #2.

                                                                      4) New version of instance #2 is running => kill previous version of instance #2.

                                                                      And so on...

                                                                      You can trigger the re-deployment of a service or of the entire environment. The service or environment goes through the same deployment statuses described in the deployment section.

                                                                      Stop

                                                                      The Stop action allows you to stop the execution on the cluster of the selected service or environment (deployment status = Stopped). This action is available only if the current deployment status is Deployment OK or Deployment Error.

                                                                      The effect on your cluster of the stop operation is different depending on the type of service:

                                                                      • Application, Container, Container DB : Pods of those services are stopped. Any attached storage is preserved
                                                                      • Cloud provider Managed DB: the database is paused (only for AWS, not working on Redis)

                                                                      Restart Service

                                                                      The Restart Service action allows you to restart the pods of your service without applying any configuration change. This action is available only if the current deployment status is Deployment OK and only for a single service.

                                                                      Once triggered, the deployment status service goes through the following statuses:

                                                                      • RESTARTING : the request to restart has been received
                                                                      • RESTARTED : all the pods of the service have been restarted
                                                                      • RESTART ERROR : Qovery couldn't process the restart request

                                                                      Cancel Deployment

                                                                      The Cancel Deployment action allows you to abort any Deploy or Redeploy action. This action is available only if the current deployment status is Queued or Building or Deploying.

                                                                      Deploy other version

                                                                      The Deploy other version action allows you to deploy a different version for your service. This action is available no matter the deployment status of the service.

                                                                      Once you click on the action, this panel will appear, and you will be able to choose the version you wish to update/rollback (either git commit or image Tag).

                                                                      Deploy Other Version

                                                                      By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                                                                      Deploy latest version

                                                                      The Deploy latest version action allows you to deploy the latest version for any of your services within the environment. This action is available no matter the deployment status of the service and only at environment level

                                                                      Once you click on the action, this panel will appear, and you will be able to choose the services you wish to update to the latest version (only for services with source = git repository).

                                                                      Deploy Latest Version

                                                                      By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                                                                      - + - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index 94caa9a0ab..55f199616e 100644 --- a/docs/using-qovery/deployment/deployment-history/index.html +++ b/docs/using-qovery/deployment/deployment-history/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                      -

                                                                      Deployment History

                                                                      You can access the deployments history of your environment or service by opening the Deployments tab on either the environment or service page.

                                                                      Deployment history access

                                                                      For each deployment triggered in the past, you will find

                                                                      • The execution id: an internal id assigned to each deployment. You can share this id with the Qovery team in case of errors in one of your deployments
                                                                      • Each service that has been deployed during this deployment together with their deployment status and the version that has been deployed
                                                                      Resources
                                                                        +

                                                                        Deployment History

                                                                        You can access the deployments history of your environment or service by opening the Deployments tab on either the environment or service page.

                                                                        Deployment history access

                                                                        For each deployment triggered in the past, you will find

                                                                        • The execution id: an internal id assigned to each deployment. You can share this id with the Qovery team in case of errors in one of your deployments
                                                                        • Each service that has been deployed during this deployment together with their deployment status and the version that has been deployed
                                                                        Resources
                                                                          - + - + diff --git a/docs/using-qovery/deployment/deployment-pipeline/index.html b/docs/using-qovery/deployment/deployment-pipeline/index.html index 21028bd652..50cf78a4e5 100644 --- a/docs/using-qovery/deployment/deployment-pipeline/index.html +++ b/docs/using-qovery/deployment/deployment-pipeline/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                                          Deployment Pipeline

                                                                          When the deployment of an environment is triggered, Qovery executes what we call Deployment Pipeline. It basically defines the operations shall be performed to properly deploy every service defined within your environment (build the code of service X, push the image on a registry, deploy service X on the Kubernetes cluster etc..)

                                                                          A pipeline is composed of an ordered list of Deployment Stages. Each Stage has an execution order assigned within the pipeline: If a stage A has an execution order lower than stage B then B can be executed only if the execution of stage A is completed.

                                                                          Each service of your environment belongs to one (and only one) Deployment Stage. This allows you to define at which moment of the deployment pipeline a service should be deployed and thus respect any service inter-dependency (e.g. your front-end needs to be started after the back-end, your db needs to be started before your back-end etc..).

                                                                          Below you can find a visual example of how the pipeline looks like:

                                                                          Deployment Pipeline

                                                                          Deployment of a stage

                                                                          When the deployment pipeline execute the deployment of a stage, the services within it will go through the Build and Deployment phases.

                                                                          The Building process is managed by the Qovery CI which downloads your repository and generates the final image that will be run on your Kubernetes cluster.

                                                                          The build and deploy operation of each service within a deployment stage are executed in parallel with a parallism of 4.

                                                                          Example -If you have 6 applications to be deployed within a stage, Qovery will:

                                                                          • build 4 applications in parallel. Once the build of one application is terminated, Qovery will start immediately another one until all the applications are built.
                                                                          • deploy 4 applications in parallel on your Kubernetes cluster. Once the deployment of one application is terminated, Qovery will start immediately another one until all the applications are deployed.

                                                                          Default Pipeline Setup

                                                                          By default, the deployment pipeline is constituted of 4 deployment stages with a default service assignment rule:

                                                                          • "0.DEFAULT DATABASE": any new service of type DATABASE will be added to this stage.
                                                                          • "1.DEFAULT JOB": any new service of type JOB will be added to this stage.
                                                                          • "2.DEFAULT CONTAINER": any new service of type CONTAINER will be added to this stage (application deployed from a container image).
                                                                          • "3.DEFAULT APPLICATION": any new service of type APPLICATION will be added to this stage (application deployed from a git repository).

                                                                          Default Deployment Pipeline

                                                                          Once the service is created, the assigned stage can be modified afterwards. See this section for more information.

                                                                          Visualizing and Modifying the Pipeline

                                                                          You can access and modify the pipeline configuration from the environment settings. Have a look at this section to know more.

                                                                          +If you have 6 applications to be deployed within a stage, Qovery will:

                                                                          • build 4 applications in parallel. Once the build of one application is terminated, Qovery will start immediately another one until all the applications are built.
                                                                          • deploy 4 applications in parallel on your Kubernetes cluster. Once the deployment of one application is terminated, Qovery will start immediately another one until all the applications are deployed.

                                                                          Default Pipeline Setup

                                                                          By default, the deployment pipeline is constituted of 4 deployment stages with a default service assignment rule:

                                                                          • "0.DEFAULT DATABASE": any new service of type DATABASE will be added to this stage.
                                                                          • "1.DEFAULT JOB": any new service of type JOB will be added to this stage.
                                                                          • "2.DEFAULT CONTAINER": any new service of type CONTAINER will be added to this stage (application deployed from a container image).
                                                                          • "3.DEFAULT APPLICATION": any new service of type APPLICATION will be added to this stage (application deployed from a git repository).

                                                                          Default Deployment Pipeline

                                                                          Once the service is created, the assigned stage can be modified afterwards. See this section for more information.

                                                                          Visualizing and Modifying the Pipeline

                                                                          You can access and modify the pipeline configuration from the environment settings. Have a look at this section to know more.

                                                                          - + - + diff --git a/docs/using-qovery/deployment/deployment-strategies/index.html b/docs/using-qovery/deployment/deployment-strategies/index.html index 9006333074..e02fdd6704 100644 --- a/docs/using-qovery/deployment/deployment-strategies/index.html +++ b/docs/using-qovery/deployment/deployment-strategies/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          Deployment Strategies

                                                                          Qovery supports 2 ways of application deployment:

                                                                          • RollingUpdate (default): Qovery will gracefully rollout new versions. It will automatically rollback if the new version fails to start | Useful to avoid downtime and load spikes during update
                                                                          • Recreate: Qovery will stop all current versions and create new ones once all old ones have been shutdown.

                                                                          To make it more clear, here is a representation of the 2 strategies. First and default one, the RollingUpdate strategy:

                                                                          Rolling update strategy

                                                                          And Recreate deployment strategy:

                                                                          Recreate strategy

                                                                          Resources
                                                                            +

                                                                            Deployment Strategies

                                                                            Qovery supports 2 ways of application deployment:

                                                                            • RollingUpdate (default): Qovery will gracefully rollout new versions. It will automatically rollback if the new version fails to start | Useful to avoid downtime and load spikes during update
                                                                            • Recreate: Qovery will stop all current versions and create new ones once all old ones have been shutdown.

                                                                            To make it more clear, here is a representation of the 2 strategies. First and default one, the RollingUpdate strategy:

                                                                            Rolling update strategy

                                                                            And Recreate deployment strategy:

                                                                            Recreate strategy

                                                                            Resources
                                                                              - + - + diff --git a/docs/using-qovery/deployment/image-mirroring/index.html b/docs/using-qovery/deployment/image-mirroring/index.html index 69484c6738..3b6afde43f 100644 --- a/docs/using-qovery/deployment/image-mirroring/index.html +++ b/docs/using-qovery/deployment/image-mirroring/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                              -

                                                                              Image Mirroring

                                                                              When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system.

                                                                              This mirroring registry is also available within the Qovery interface

                                                                              Mirroring Registry

                                                                              How does it work

                                                                              Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

                                                                              Application built via the Qovery pipeline

                                                                              Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

                                                                              Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

                                                                              If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                                                              Mirroring built image

                                                                              Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

                                                                              Application deployed from a container registry

                                                                              The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

                                                                              Two mirroring modes are available when deploying a service from a container registry:

                                                                              Service (Default)

                                                                              Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

                                                                              At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

                                                                              If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                                                              Mirroring image from registry - Service case

                                                                              Pro:

                                                                              • Images are automatically deleted when not needede anymore

                                                                              Cons:

                                                                              • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

                                                                              Cluster

                                                                              Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

                                                                              At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

                                                                              If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

                                                                              Mirroring image from registry - Cluster case

                                                                              Pro:

                                                                              • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

                                                                              Cons:

                                                                              • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

                                                                              Why image mirroring is necessary

                                                                              Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

                                                                              Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

                                                                              Why unique image tags are necessary

                                                                              When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

                                                                              • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
                                                                              • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

                                                                              In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

                                                                              +

                                                                              Image Mirroring

                                                                              When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system.

                                                                              This mirroring registry is also available within the Qovery interface

                                                                              Mirroring Registry

                                                                              How does it work

                                                                              Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

                                                                              Application built via the Qovery pipeline

                                                                              Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

                                                                              Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

                                                                              If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                                                              Mirroring built image

                                                                              Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

                                                                              Application deployed from a container registry

                                                                              The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

                                                                              Two mirroring modes are available when deploying a service from a container registry:

                                                                              Service (Default)

                                                                              Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

                                                                              At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

                                                                              If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                                                              Mirroring image from registry - Service case

                                                                              Pro:

                                                                              • Images are automatically deleted when not needede anymore

                                                                              Cons:

                                                                              • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

                                                                              Cluster

                                                                              Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

                                                                              At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

                                                                              If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                                                              Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

                                                                              Mirroring image from registry - Cluster case

                                                                              Pro:

                                                                              • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

                                                                              Cons:

                                                                              • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

                                                                              Why image mirroring is necessary

                                                                              Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

                                                                              Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

                                                                              Why unique image tags are necessary

                                                                              When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

                                                                              • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
                                                                              • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

                                                                              In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

                                                                              - + - + diff --git a/docs/using-qovery/deployment/index.html b/docs/using-qovery/deployment/index.html index 128aaac458..0f6621b18b 100644 --- a/docs/using-qovery/deployment/index.html +++ b/docs/using-qovery/deployment/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                                              Deployment

                                                                              In the following subsections, you'll find all the information about the deployment management with Qovery.

                                                                              The deployment has the end goal to create the resources necessary to run your applications on your cloud account, based on the configuration you have done on the Qovery console.

                                                                              In the image below you can find the complete flow that your application will go through, from your Git repository up to your Kuernetes cluster.

                                                                              Deployment history access

                                                                              1. The developer pushes the code within the git repository
                                                                              2. The deployment trigger can come from different sources depending on your integration type: 2.a The auto-deploy feature is activated on Qovery. When the new commit is pushed, a webhook call is received by Qovery and can proceed with the application deployment. See this section for more information. 2.b The auto-deploy feature is not activated on Qovery and the deployment is managed via the CI/CD. -2.c The auto-deploy feature is not activated on Qovery and the user decides to trigger the deployment directly from within the Qovery console.
                                                                              3. The Qovery engine starts processing based on the configured Deployment Pipeline. The pipeline defines the steps that need to be followed in order to deploy your applications. See this section for more information.
                                                                              4. The Qovery engine pulls the code from your repository.
                                                                              5. The Qovery engine builds the code and pushes the generated images on a registry present within your cloud account (See the Image Mirroring page for more information).
                                                                              6. The Qovery engine creates the load balancers and configure the network.
                                                                              7. The Qovery engine creates a namespace within the Kubernetes cluster and deploys the application.
                                                                              8. The Qovery engine takes care of creating a custom domain for your application and as well configure the TLS so that you can access the application from the internet.

                                                                              The developer can monitor at each time the status of the deployment or of the running applications by:

                                                                              • checking the Deployment Status and Running Status. See this section for more information.
                                                                              • access the Logs interface to retrieve the deployment logs and as well the application logs in real-time. See this section for more information.
                                                                              • access the Deployment History section to get all the information about the past deployments. See this section for more information.

                                                                              Note:

                                                                              • Qovery also support deployments from container registry but actions 2a is not supported plus 4 and 5 are not done.
                                                                              • In the example above we have shown how the deployment of an application is done but Qovery provides you with a complete set of Deployment Actions allowing you to manage the deployment lifecycle of your applications and environments (Stop, restart etc..). See this section for more information.
                                                                              Resources
                                                                                +2.c The auto-deploy feature is not activated on Qovery and the user decides to trigger the deployment directly from within the Qovery console.
                                                                              • The Qovery engine starts processing based on the configured Deployment Pipeline. The pipeline defines the steps that need to be followed in order to deploy your applications. See this section for more information.
                                                                              • The Qovery engine pulls the code from your repository.
                                                                              • The Qovery engine builds the code and pushes the generated images on a registry present within your cloud account (See the Image Mirroring page for more information).
                                                                              • The Qovery engine creates the load balancers and configure the network.
                                                                              • The Qovery engine creates a namespace within the Kubernetes cluster and deploys the application.
                                                                              • The Qovery engine takes care of creating a custom domain for your application and as well configure the TLS so that you can access the application from the internet.
                                                                              • The developer can monitor at each time the status of the deployment or of the running applications by:

                                                                                • checking the Deployment Status and Running Status. See this section for more information.
                                                                                • access the Logs interface to retrieve the deployment logs and as well the application logs in real-time. See this section for more information.
                                                                                • access the Deployment History section to get all the information about the past deployments. See this section for more information.

                                                                                Note:

                                                                                • Qovery also support deployments from container registry but actions 2a is not supported plus 4 and 5 are not done.
                                                                                • In the example above we have shown how the deployment of an application is done but Qovery provides you with a complete set of Deployment Actions allowing you to manage the deployment lifecycle of your applications and environments (Stop, restart etc..). See this section for more information.
                                                                                Resources
                                                                                  - + - + diff --git a/docs/using-qovery/deployment/logs/index.html b/docs/using-qovery/deployment/logs/index.html index 1c938a1e93..564e82621b 100644 --- a/docs/using-qovery/deployment/logs/index.html +++ b/docs/using-qovery/deployment/logs/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                  -

                                                                                  Logs

                                                                                  The Logs interface allows you to access:

                                                                                  • The deployment logs: every time a deployment is triggered, Qovery provides you with the log of its execution and as well with any error that might occur.
                                                                                  • The live logs of your applications: Qovery allows you to retrieve the logs of your application in real-time, streamed directly from your remote application (no data is stored on Qovery side). The logs are accessible as long as the application is running and writing the logs in the stdout.

                                                                                  How to access the logs

                                                                                  The Logs interface can be accessed from the console by clicking on the parchment icon available in the header or within the table

                                                                                  Log access

                                                                                  The interface is composed of two sections:

                                                                                  • A navigation panel (on the left)
                                                                                  • A log section allowing you to switch between the deployment logs and the live logs of a service.

                                                                                  Log View

                                                                                  Navigation Panel

                                                                                  This section provides you with some information on the last Deployment that happened on the environment and a navigation system to access the logs of each service of your environment.

                                                                                  More in detail you will find here:

                                                                                  • Deployment information (top section): this section shows you the status of the deployment execution and when it happened. If a deployment is ongoing, its status will be updated accordingly in this section.
                                                                                  • Pipeline view: this section provides an overall view of the current configuration of the Deployment Pipeline and each service present within the environment. By default, only the services that have been deployed within the last deployment execution are displayed but you can still display all of them by un-ticking the option Last deployed only.

                                                                                  Log section

                                                                                  This section allows you to access the Deployment Logs and the Live logs of each service.

                                                                                  Deployment Logs

                                                                                  This tab shows you the deployment logs for each service of the environment. By default, you get access to the logs of the last deployment execution but you can switch to the previous execution (See Accessing old deployment logs).

                                                                                  If the service is built via the Qovery CI pipeline, you will get access to the build logs.

                                                                                  Build Logs

                                                                                  When the deployment on Kubernetes is executed, the system will provide you with the deployment status updates. In case of deployment issues, these updates will provide you with some information on the root cause.

                                                                                  Deployment Status Update

                                                                                  At the end of the deployment, a final message is emitted confirming if the deployment was successful or not and, in case of an issue, it provides you with some information on how to solve the issue.

                                                                                  Log content

                                                                                  You can use the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                                                                  Accessing old deployment logs

                                                                                  You can access the logs of a past deployment execution in two ways:

                                                                                  • using the Deployment log switch on the logs view

                                                                                  Deployment Log Switch

                                                                                  • from the Deployment tab from the service or environment page and clicking on the parchment icon of a previous deployment

                                                                                  Deployment Tab Switch

                                                                                  Live Logs

                                                                                  The live logs tab gives you a real-time view on the log generated by your application while running remotely on your cloud provider infrastructure.

                                                                                  Within this section you will find:

                                                                                  • Timestamp: the timestamp of the message
                                                                                  • Pod Name: the name of the kubernetes pod where your application is running (to distinguish the instance in case of the multi-instance app). If you want to follow a specific pod, you can filter the logs by clicking on the pod name
                                                                                  • Version: the commit id or the image tag of the application running on this POD
                                                                                  • Message: the log message

                                                                                  Past application logs are also preserved on your cluster via Loki and can be accessed from the same log view within the qovery console. Please keep in mind that:

                                                                                  • Loki is configured to preserve only the latest 1000 lines of log for each application and retain them for 12 weeks (configurable via the cluster advanced settings)
                                                                                  • This feature is not available on EC2 Clusters since we don't install Loki.

                                                                                  If you need to troubleshoot issues on the requests managed by your application, you can also access the Nginx logs in the same view (logs format is available in the helper). Note that this option is available only if the application is exposed publicly (See the Port Section)

                                                                                  Log content

                                                                                  +

                                                                                  Logs

                                                                                  The Logs interface allows you to access:

                                                                                  • The deployment logs: every time a deployment is triggered, Qovery provides you with the log of its execution and as well with any error that might occur.
                                                                                  • The live logs of your applications: Qovery allows you to retrieve the logs of your application in real-time, streamed directly from your remote application (no data is stored on Qovery side). The logs are accessible as long as the application is running and writing the logs in the stdout.

                                                                                  How to access the logs

                                                                                  The Logs interface can be accessed from the console by clicking on the parchment icon available in the header or within the table

                                                                                  Log access

                                                                                  The interface is composed of two sections:

                                                                                  • A navigation panel (on the left)
                                                                                  • A log section allowing you to switch between the deployment logs and the live logs of a service.

                                                                                  Log View

                                                                                  Navigation Panel

                                                                                  This section provides you with some information on the last Deployment that happened on the environment and a navigation system to access the logs of each service of your environment.

                                                                                  More in detail you will find here:

                                                                                  • Deployment information (top section): this section shows you the status of the deployment execution and when it happened. If a deployment is ongoing, its status will be updated accordingly in this section.
                                                                                  • Pipeline view: this section provides an overall view of the current configuration of the Deployment Pipeline and each service present within the environment. By default, only the services that have been deployed within the last deployment execution are displayed but you can still display all of them by un-ticking the option Last deployed only.

                                                                                  Log section

                                                                                  This section allows you to access the Deployment Logs and the Live logs of each service.

                                                                                  Deployment Logs

                                                                                  This tab shows you the deployment logs for each service of the environment. By default, you get access to the logs of the last deployment execution but you can switch to the previous execution (See Accessing old deployment logs).

                                                                                  If the service is built via the Qovery CI pipeline, you will get access to the build logs.

                                                                                  Build Logs

                                                                                  When the deployment on Kubernetes is executed, the system will provide you with the deployment status updates. In case of deployment issues, these updates will provide you with some information on the root cause.

                                                                                  Deployment Status Update

                                                                                  At the end of the deployment, a final message is emitted confirming if the deployment was successful or not and, in case of an issue, it provides you with some information on how to solve the issue.

                                                                                  Log content

                                                                                  You can use the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                                                                  Accessing old deployment logs

                                                                                  You can access the logs of a past deployment execution in two ways:

                                                                                  • using the Deployment log switch on the logs view

                                                                                  Deployment Log Switch

                                                                                  • from the Deployment tab from the service or environment page and clicking on the parchment icon of a previous deployment

                                                                                  Deployment Tab Switch

                                                                                  Live Logs

                                                                                  The live logs tab gives you a real-time view on the log generated by your application while running remotely on your cloud provider infrastructure.

                                                                                  Within this section you will find:

                                                                                  • Timestamp: the timestamp of the message
                                                                                  • Pod Name: the name of the kubernetes pod where your application is running (to distinguish the instance in case of the multi-instance app). If you want to follow a specific pod, you can filter the logs by clicking on the pod name
                                                                                  • Version: the commit id or the image tag of the application running on this POD
                                                                                  • Message: the log message

                                                                                  Past application logs are also preserved on your cluster via Loki and can be accessed from the same log view within the qovery console. Please keep in mind that:

                                                                                  • Loki is configured to preserve only the latest 1000 lines of log for each application and retain them for 12 weeks (configurable via the cluster advanced settings)
                                                                                  • This feature is not available on EC2 Clusters since we don't install Loki.

                                                                                  If you need to troubleshoot issues on the requests managed by your application, you can also access the Nginx logs in the same view (logs format is available in the helper). Note that this option is available only if the application is exposed publicly (See the Port Section)

                                                                                  Log content

                                                                                  - + - + diff --git a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html index b773ad1a7a..353255bd3d 100644 --- a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html +++ b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                  -

                                                                                  Running and Deployment Statuses

                                                                                  From any environment window on your Qovery Console, you can monitor the running and deployment status of your environments and services.

                                                                                  Statuses

                                                                                  ItemDescription
                                                                                  1The dot in the service tab shows the environment running status.
                                                                                  For more information, see the Environment Statuses section below.
                                                                                  2The dot in the deployment tab shows the environment deployment status.
                                                                                  For more information, see the Deployment Statuses section below.
                                                                                  3The label in the column "Service status" represents the running status of the service.
                                                                                  For more information, see Service Statuses section below.
                                                                                  4The label in the column "Last deployment" represents the status of the latest deployment of the service.
                                                                                  For more information, see Deployment Statuses section below.

                                                                                  Running Statuses

                                                                                  Thanks to Running statuses, you can find out which services are currently running on your platform, and which are interrupted. There are two types of run services available currently: environment statuses and service statuses.

                                                                                  Environment Statuses

                                                                                  When you access an environment on your Qovery Console, you can check its status in real-time.

                                                                                  The environment status is computed based on the statuses of all the services in that specific environment. Here are all the possible environment statuses:

                                                                                  StatusDescription
                                                                                  STOPPED (Gray dot)All the services are stopped.
                                                                                  STARTING (Loading Icon)At least 1 service is starting.
                                                                                  STOPPING (Loading Icon)At least 1 service is stopping.
                                                                                  RUNNING (Green dot)All services are running correctly.
                                                                                  ERROR (Red dot)All services are in error status.
                                                                                  WARNING (Orange dot)At least 1 service is in error status (but not all of them).
                                                                                  COMPLETED (Green dot)The job execution has completed (only for cronjob and lifecycle jobs).

                                                                                  Service Statuses

                                                                                  When you access an environment on your Qovery Console, you can check the status of each service in that environment in real-time within the column "Service status".

                                                                                  Here are all the possible service statuses:

                                                                                  StatusDescription
                                                                                  STOPPED (Gray dot)All the application instances are stopped.
                                                                                  STARTING (Loading Icon)At least 1 application instance is starting.
                                                                                  STOPPING (Loading Icon)At least 1 application instance is stopping.
                                                                                  RUNNING (Green dot)All application instances are running correctly.
                                                                                  ERROR (Red dot)All application instances are in error status.
                                                                                  WARNING (Orange dot)(Valid for multi-instance applications only) At least 1 application instance is in error status (but not all of them).
                                                                                  Completed (Green dot)(Valid for Lifecycle and Cronjob only) The job was correctly executed.

                                                                                  The service status is computed based on the status of each Kubernetes pod deployed for this application.

                                                                                  Pod status (Application instances)

                                                                                  You can check on the Service overview page the status of each pod running your application in Kubernetes. This page is accessible by clicking on one of the services of your environment.

                                                                                  Within this page you will have a view of:

                                                                                  • the number of running instances of your application
                                                                                  • the status of each instance
                                                                                  • in case of an error, you will get the reason behind the issue by clicking on the Pod in error.

                                                                                  Deployment Statuses

                                                                                  When you access an environment on your Qovery Console, you can check:

                                                                                  • the overall status of your deployments in that specific environment, thanks to the dot present within the "Deployment" tab. This corresponds to the overall deployment status of your environment.

                                                                                  • the deployment status of each service in that specific environment, thanks to the label displayed in the Service status column. This corresponds to the status of the last deployment performed on the service.

                                                                                    Here are all the possible deployment statuses for both environments and services:

                                                                                  • QUEUED (temporary state).

                                                                                  • BUILDING (temporary state).

                                                                                  • BUILDING ERROR (final state).

                                                                                  • DEPLOYING (temporary state).

                                                                                  • DEPLOYMENT ERROR (final state).

                                                                                  • CANCELLING BUILDING (temporary state).

                                                                                  • CANCELLED (temporary state).

                                                                                  • DEPLOYMENT OK (final state).

                                                                                  +

                                                                                  Running and Deployment Statuses

                                                                                  From any environment window on your Qovery Console, you can monitor the running and deployment status of your environments and services.

                                                                                  Statuses

                                                                                  ItemDescription
                                                                                  1The dot in the service tab shows the environment running status.
                                                                                  For more information, see the Environment Statuses section below.
                                                                                  2The dot in the deployment tab shows the environment deployment status.
                                                                                  For more information, see the Deployment Statuses section below.
                                                                                  3The label in the column "Service status" represents the running status of the service.
                                                                                  For more information, see Service Statuses section below.
                                                                                  4The label in the column "Last deployment" represents the status of the latest deployment of the service.
                                                                                  For more information, see Deployment Statuses section below.

                                                                                  Running Statuses

                                                                                  Thanks to Running statuses, you can find out which services are currently running on your platform, and which are interrupted. There are two types of run services available currently: environment statuses and service statuses.

                                                                                  Environment Statuses

                                                                                  When you access an environment on your Qovery Console, you can check its status in real-time.

                                                                                  The environment status is computed based on the statuses of all the services in that specific environment. Here are all the possible environment statuses:

                                                                                  StatusDescription
                                                                                  STOPPED (Gray dot)All the services are stopped.
                                                                                  STARTING (Loading Icon)At least 1 service is starting.
                                                                                  STOPPING (Loading Icon)At least 1 service is stopping.
                                                                                  RUNNING (Green dot)All services are running correctly.
                                                                                  ERROR (Red dot)All services are in error status.
                                                                                  WARNING (Orange dot)At least 1 service is in error status (but not all of them).
                                                                                  COMPLETED (Green dot)The job execution has completed (only for cronjob and lifecycle jobs).

                                                                                  Service Statuses

                                                                                  When you access an environment on your Qovery Console, you can check the status of each service in that environment in real-time within the column "Service status".

                                                                                  Here are all the possible service statuses:

                                                                                  StatusDescription
                                                                                  STOPPED (Gray dot)All the application instances are stopped.
                                                                                  STARTING (Loading Icon)At least 1 application instance is starting.
                                                                                  STOPPING (Loading Icon)At least 1 application instance is stopping.
                                                                                  RUNNING (Green dot)All application instances are running correctly.
                                                                                  ERROR (Red dot)All application instances are in error status.
                                                                                  WARNING (Orange dot)(Valid for multi-instance applications only) At least 1 application instance is in error status (but not all of them).
                                                                                  Completed (Green dot)(Valid for Lifecycle and Cronjob only) The job was correctly executed.

                                                                                  The service status is computed based on the status of each Kubernetes pod deployed for this application.

                                                                                  Pod status (Application instances)

                                                                                  You can check on the Service overview page the status of each pod running your application in Kubernetes. This page is accessible by clicking on one of the services of your environment.

                                                                                  Within this page you will have a view of:

                                                                                  • the number of running instances of your application
                                                                                  • the status of each instance
                                                                                  • in case of an error, you will get the reason behind the issue by clicking on the Pod in error.

                                                                                  Deployment Statuses

                                                                                  When you access an environment on your Qovery Console, you can check:

                                                                                  • the overall status of your deployments in that specific environment, thanks to the dot present within the "Deployment" tab. This corresponds to the overall deployment status of your environment.

                                                                                  • the deployment status of each service in that specific environment, thanks to the label displayed in the Service status column. This corresponds to the status of the last deployment performed on the service.

                                                                                    Here are all the possible deployment statuses for both environments and services:

                                                                                  • QUEUED (temporary state).

                                                                                  • BUILDING (temporary state).

                                                                                  • BUILDING ERROR (final state).

                                                                                  • DEPLOYING (temporary state).

                                                                                  • DEPLOYMENT ERROR (final state).

                                                                                  • CANCELLING BUILDING (temporary state).

                                                                                  • CANCELLED (temporary state).

                                                                                  • DEPLOYMENT OK (final state).

                                                                                  - + - + diff --git a/docs/using-qovery/index.html b/docs/using-qovery/index.html index 300643fe95..81c3b4a23d 100644 --- a/docs/using-qovery/index.html +++ b/docs/using-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                  -
                                                                                  Resources
                                                                                    +
                                                                                    Resources
                                                                                      - + - + diff --git a/docs/using-qovery/integration/api-integration/index.html b/docs/using-qovery/integration/api-integration/index.html index 3a01820657..7d1ca45087 100644 --- a/docs/using-qovery/integration/api-integration/index.html +++ b/docs/using-qovery/integration/api-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                      -
                                                                                      +
                                                                                      - + - + diff --git a/docs/using-qovery/integration/container-registry/index.html b/docs/using-qovery/integration/container-registry/index.html index ced76a7e62..f1ed97ca5d 100644 --- a/docs/using-qovery/integration/container-registry/index.html +++ b/docs/using-qovery/integration/container-registry/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                      -

                                                                                      Container Registry

                                                                                      Qovery allows you to integrate with major container registries, enabling you to deploy your own container images or those available on public registries.

                                                                                      You can control the container registry used by your teams directly within the Qovery Console.

                                                                                      To know more about how to configure your container registry connection and the supported container registries, have a look at this section

                                                                                      Resources
                                                                                        +

                                                                                        Container Registry

                                                                                        Qovery allows you to integrate with major container registries, enabling you to deploy your own container images or those available on public registries.

                                                                                        You can control the container registry used by your teams directly within the Qovery Console.

                                                                                        To know more about how to configure your container registry connection and the supported container registries, have a look at this section

                                                                                        Resources
                                                                                          - + - + diff --git a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html index 972079626b..435a3064df 100644 --- a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                                                          Circle CI

                                                                                          Using Circle CI with Qovery is super powerful and gives you the ability to manage the way that you want to deploy your applications. As the possibility are endless, I will share with you a couple of examples that you can use. Feel free to adapt them to your need.

                                                                                          Prerequisites

                                                                                          Before using the examples below, you need to:

                                                                                          1. Install the Qovery CLI.
                                                                                          2. Generate an API token via the CLI or the Console .
                                                                                          3. Set the environment variable Q_CLI_ACCESS_TOKEN or QOVERY_CLI_ACCESS_TOKEN (both are valid) with your API token. E.g. export QOVERY_CLI_ACCESS_TOKEN=your-api-token
                                                                                          4. You have turned off the Qovery Auto Deployment for every service that you want to deploy manually.

                                                                                          Jenkins Examples

                                                                                          Since Circle CI also provides a .yaml file to configure your pipeline. Refers to GitLab CI and GitHub Actions examples to learn how to configure your pipeline with Qovery.

                                                                                          Qovery CLI command examples

                                                                                          Deploy your application with a specific commit ID

                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          Deploy your multiple applications with a different commit ID

                                                                                          # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_1_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch
                                                                                          # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_2_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Deploy your multiple applications with a specific commit ID (monorepo)

                                                                                          # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Create a Preview Environment for your Pull-Request

                                                                                          Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                                                          # Clone your base environment
                                                                                          qovery environment clone \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --new-environment-name <your_new_environment_name>
                                                                                          # Change your application branch to the Pull-Request branch
                                                                                          qovery application update \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --branch <your_pull_request_branch_name>
                                                                                          -
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          +
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          - + - + diff --git a/docs/using-qovery/integration/continuous-integration/github-actions/index.html b/docs/using-qovery/integration/continuous-integration/github-actions/index.html index 2f28bf8a03..6c68bdd562 100644 --- a/docs/using-qovery/integration/continuous-integration/github-actions/index.html +++ b/docs/using-qovery/integration/continuous-integration/github-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -61,14 +61,14 @@
                                                                                          qovery container deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --container <your_qovery_container_name> \
                                                                                          --tag ${{ github.sha }} \
                                                                                          --watch

                                                                                          Qovery CLI command examples

                                                                                          Deploy your application with a specific commit ID

                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          Deploy your multiple applications with a different commit ID

                                                                                          # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_1_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch
                                                                                          # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_2_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Deploy your multiple applications with a specific commit ID (monorepo)

                                                                                          # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Create a Preview Environment for your Pull-Request

                                                                                          Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                                                          # Clone your base environment
                                                                                          qovery environment clone \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --new-environment-name <your_new_environment_name>
                                                                                          # Change your application branch to the Pull-Request branch
                                                                                          qovery application update \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --branch <your_pull_request_branch_name>
                                                                                          -
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          +
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          - + - + diff --git a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html index 84400cb91f..57dfa03bda 100644 --- a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html @@ -26,9 +26,9 @@ - + - + @@ -56,14 +56,14 @@
                                                                                          deploy-image-with-qovery:
                                                                                          stage: deploy
                                                                                          script:
                                                                                          - curl -s https://get.qovery.com | bash # Download and install Qovery CLI
                                                                                          - |
                                                                                          qovery container deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --container <your_qovery_container_name> \
                                                                                          --tag $CI_COMMIT_SHORT_SHA \
                                                                                          --watch

                                                                                          Qovery CLI command examples

                                                                                          Deploy your application with a specific commit ID

                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          Deploy your multiple applications with a different commit ID

                                                                                          # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_1_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch
                                                                                          # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_2_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Deploy your multiple applications with a specific commit ID (monorepo)

                                                                                          # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Create a Preview Environment for your Pull-Request

                                                                                          Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                                                          # Clone your base environment
                                                                                          qovery environment clone \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --new-environment-name <your_new_environment_name>
                                                                                          # Change your application branch to the Pull-Request branch
                                                                                          qovery application update \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --branch <your_pull_request_branch_name>
                                                                                          -
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          +
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          - + - + diff --git a/docs/using-qovery/integration/continuous-integration/index.html b/docs/using-qovery/integration/continuous-integration/index.html index 2ef7776354..62a8334d2e 100644 --- a/docs/using-qovery/integration/continuous-integration/index.html +++ b/docs/using-qovery/integration/continuous-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                          -

                                                                                          Continuous Integration

                                                                                          Select the CI/CD system that you use today:

                                                                                          Gitlab CI
                                                                                          Circle CI
                                                                                          Github Actions
                                                                                          Jenkins

                                                                                          FAQ

                                                                                          I don't find my Continuous Integration platform, what should I do?

                                                                                          Your CI platform is probably going to be officially supported in the near future. In the meantime, you can use our Qovery CLI and make the integration yourself (it is super easy).

                                                                                          Do you need help?

                                                                                          Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                          +

                                                                                          Continuous Integration

                                                                                          Select the CI/CD system that you use today:

                                                                                          Gitlab CI
                                                                                          Circle CI
                                                                                          Github Actions
                                                                                          Jenkins

                                                                                          FAQ

                                                                                          I don't find my Continuous Integration platform, what should I do?

                                                                                          Your CI platform is probably going to be officially supported in the near future. In the meantime, you can use our Qovery CLI and make the integration yourself (it is super easy).

                                                                                          Do you need help?

                                                                                          Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                          - + - + diff --git a/docs/using-qovery/integration/continuous-integration/jenkins/index.html b/docs/using-qovery/integration/continuous-integration/jenkins/index.html index f360c22c1a..2fb105efa2 100644 --- a/docs/using-qovery/integration/continuous-integration/jenkins/index.html +++ b/docs/using-qovery/integration/continuous-integration/jenkins/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                                                          Jenkins

                                                                                          Using Jenkins with Qovery is super powerful and gives you the ability to manage the way that you want to deploy your applications. As the possibility are endless, I will share with you a couple of examples that you can use. Feel free to adapt them to your need.

                                                                                          Prerequisites

                                                                                          Before using the examples below, you need to:

                                                                                          1. Install the Qovery CLI.
                                                                                          2. Generate an API token via the CLI or the Console .
                                                                                          3. Set the environment variable Q_CLI_ACCESS_TOKEN or QOVERY_CLI_ACCESS_TOKEN (both are valid) with your API token. E.g. export QOVERY_CLI_ACCESS_TOKEN=your-api-token
                                                                                          4. You have turned off the Qovery Auto Deployment for every service that you want to deploy manually.

                                                                                          Jenkins Examples

                                                                                          Since Jenkins also provides a .yaml file to configure your pipeline. Refers to GitLab CI and GitHub Actions examples to learn how to configure your pipeline with Qovery.

                                                                                          Qovery CLI command examples

                                                                                          Deploy your application with a specific commit ID

                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          Deploy your multiple applications with a different commit ID

                                                                                          # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_1_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch
                                                                                          # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --application <your_app_2_name> \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Deploy your multiple applications with a specific commit ID (monorepo)

                                                                                          # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                                                          qovery application deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                                                          --commit-id <your_commit_id> \
                                                                                          --watch

                                                                                          This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                                                          Create a Preview Environment for your Pull-Request

                                                                                          Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                                                          # Clone your base environment
                                                                                          qovery environment clone \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_environment_name> \
                                                                                          --new-environment-name <your_new_environment_name>
                                                                                          # Change your application branch to the Pull-Request branch
                                                                                          qovery application update \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --application <your_app_name> \
                                                                                          --branch <your_pull_request_branch_name>
                                                                                          -
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          +
                                                                                          # Deploy your new environment
                                                                                          qovery environment deploy \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_new_environment_name> \
                                                                                          --watch

                                                                                          Delete a Preview Environment

                                                                                          qovery environment delete \
                                                                                          --organization <your_org_name> \
                                                                                          --project <your_project_name> \
                                                                                          --environment <your_preview_environment_name> \
                                                                                          --watch

                                                                                          Terraform

                                                                                          Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                                                          Any other examples?

                                                                                          Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                                                          - + - + diff --git a/docs/using-qovery/integration/git-repository/index.html b/docs/using-qovery/integration/git-repository/index.html index fea13fd369..fda3b40f11 100644 --- a/docs/using-qovery/integration/git-repository/index.html +++ b/docs/using-qovery/integration/git-repository/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                          -

                                                                                          Git Repository

                                                                                          Qovery allows you to integrate with the major git based software version control systems in order to build and deploy the applications available on your own repositories.

                                                                                          Today Qovery supports the following software version control systems:

                                                                                          • GitHub and GitHub Enterprise
                                                                                          • GitLab
                                                                                          • Bitbucket

                                                                                          Once connected to the Qovery Console via one of these three systems, Qovery will be able to access all the repositories connected to your account.

                                                                                          If you have special access needs, you can use the git provider tokens instead of your own git provider account. Have a look at the Managing git permission section to know more.

                                                                                          Resources
                                                                                            +

                                                                                            Git Repository

                                                                                            Qovery allows you to integrate with the major git based software version control systems in order to build and deploy the applications available on your own repositories.

                                                                                            Today Qovery supports the following software version control systems:

                                                                                            • GitHub and GitHub Enterprise
                                                                                            • GitLab
                                                                                            • Bitbucket

                                                                                            Once connected to the Qovery Console via one of these three systems, Qovery will be able to access all the repositories connected to your account.

                                                                                            If you have special access needs, you can use the git provider tokens instead of your own git provider account. Have a look at the Managing git permission section to know more.

                                                                                            Resources
                                                                                              - + - + diff --git a/docs/using-qovery/integration/helm-repository/index.html b/docs/using-qovery/integration/helm-repository/index.html index af89e8c258..03e8e80609 100644 --- a/docs/using-qovery/integration/helm-repository/index.html +++ b/docs/using-qovery/integration/helm-repository/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                              -

                                                                                              Helm Repository

                                                                                              Qovery allows you to integrate with major helm registries, enabling you to deploy your own helm charts or those available on public registries.

                                                                                              You can control the helm registry used by your teams directly within the Qovery Console.

                                                                                              To know more about how to configure your helm registry connection and the supported container registries, have a look at this section

                                                                                              Resources
                                                                                                +

                                                                                                Helm Repository

                                                                                                Qovery allows you to integrate with major helm registries, enabling you to deploy your own helm charts or those available on public registries.

                                                                                                You can control the helm registry used by your teams directly within the Qovery Console.

                                                                                                To know more about how to configure your helm registry connection and the supported container registries, have a look at this section

                                                                                                Resources
                                                                                                  - + - + diff --git a/docs/using-qovery/integration/index.html b/docs/using-qovery/integration/index.html index b6fc41ee27..55e7413d7f 100644 --- a/docs/using-qovery/integration/index.html +++ b/docs/using-qovery/integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                  -
                                                                                                  Resources
                                                                                                    +
                                                                                                    Resources
                                                                                                      - + - + diff --git a/docs/using-qovery/integration/monitoring/datadog/index.html b/docs/using-qovery/integration/monitoring/datadog/index.html index 593369d98d..7157127fd3 100644 --- a/docs/using-qovery/integration/monitoring/datadog/index.html +++ b/docs/using-qovery/integration/monitoring/datadog/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                                                                      Datadog

                                                                                                      Datadog is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using Datadog (or another monitoring/observability platform). -Check out our tutorial to know how to integrate Datadog with Qovery.

                                                                                                      Resources
                                                                                                        +Check out our tutorial to know how to integrate Datadog with Qovery.

                                                                                                        Resources
                                                                                                          - + - + diff --git a/docs/using-qovery/integration/monitoring/index.html b/docs/using-qovery/integration/monitoring/index.html index bc24a2e7d1..1e9588c66f 100644 --- a/docs/using-qovery/integration/monitoring/index.html +++ b/docs/using-qovery/integration/monitoring/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                          -

                                                                                                          Monitoring

                                                                                                          Datadog
                                                                                                          New Relic

                                                                                                          FAQ

                                                                                                          I don't find my Monitoring provider, what should I do?

                                                                                                          Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your monitoring solution if their maintainers provide a Helm Chart.

                                                                                                          If your monitoring platform provides a Helm Chart, then you can install it:

                                                                                                          By using the Qovery Lifecycle Jobs

                                                                                                          1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                          By using kubectl

                                                                                                          1. Connect to your Qovery Kubernetes cluster.
                                                                                                          2. Install the helm chart.

                                                                                                          Do you need help?

                                                                                                          Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                          +

                                                                                                          Monitoring

                                                                                                          Datadog
                                                                                                          New Relic

                                                                                                          FAQ

                                                                                                          I don't find my Monitoring provider, what should I do?

                                                                                                          Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your monitoring solution if their maintainers provide a Helm Chart.

                                                                                                          If your monitoring platform provides a Helm Chart, then you can install it:

                                                                                                          By using the Qovery Lifecycle Jobs

                                                                                                          1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                          By using kubectl

                                                                                                          1. Connect to your Qovery Kubernetes cluster.
                                                                                                          2. Install the helm chart.

                                                                                                          Do you need help?

                                                                                                          Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                          - + - + diff --git a/docs/using-qovery/integration/monitoring/new-relic/index.html b/docs/using-qovery/integration/monitoring/new-relic/index.html index 2490adb804..f20cc76f32 100644 --- a/docs/using-qovery/integration/monitoring/new-relic/index.html +++ b/docs/using-qovery/integration/monitoring/new-relic/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                          -

                                                                                                          New Relic

                                                                                                          NewRelic is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using NewRelic (or another monitoring/observability platform).

                                                                                                          Install NewRelic

                                                                                                          To install NewRelic on Qovery, you have 2 choices:

                                                                                                          By using the Qovery Lifecycle Jobs

                                                                                                          1. Follow this guide to deploy your NewRelic Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                          By using kubectl

                                                                                                          1. Connect to your Qovery Kubernetes cluster.
                                                                                                          2. Use helm to install NewRelic.
                                                                                                          +

                                                                                                          New Relic

                                                                                                          NewRelic is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using NewRelic (or another monitoring/observability platform).

                                                                                                          Install NewRelic

                                                                                                          To install NewRelic on Qovery, you have 2 choices:

                                                                                                          By using the Qovery Lifecycle Jobs

                                                                                                          1. Follow this guide to deploy your NewRelic Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                          By using kubectl

                                                                                                          1. Connect to your Qovery Kubernetes cluster.
                                                                                                          2. Use helm to install NewRelic.
                                                                                                          - + - + diff --git a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html index a45ce2bc92..36a0eede94 100644 --- a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                          -

                                                                                                          AWS Secrets Manager

                                                                                                          AWS Secrets Manager is a service that helps you protect secrets needed to access your applications, services, and IT resources. The service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle.

                                                                                                          Setup

                                                                                                          API Keys

                                                                                                          If your applications need to use AWS Secrets Manager with API Keys, you need to add your API Key in Qovery Secrets Manager.

                                                                                                          Then you can use it in your application as a regular environment variable.

                                                                                                          Assume Roles

                                                                                                          Follow this guide to get assume roles on your Kubernetes cluster. Once it is set up, your application will be able to connect to AWS Secrets Manager using the AWS SDK.

                                                                                                          Resources
                                                                                                            +

                                                                                                            AWS Secrets Manager

                                                                                                            AWS Secrets Manager is a service that helps you protect secrets needed to access your applications, services, and IT resources. The service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle.

                                                                                                            Setup

                                                                                                            API Keys

                                                                                                            If your applications need to use AWS Secrets Manager with API Keys, you need to add your API Key in Qovery Secrets Manager.

                                                                                                            Then you can use it in your application as a regular environment variable.

                                                                                                            Assume Roles

                                                                                                            Follow this guide to get assume roles on your Kubernetes cluster. Once it is set up, your application will be able to connect to AWS Secrets Manager using the AWS SDK.

                                                                                                            Resources
                                                                                                              - + - + diff --git a/docs/using-qovery/integration/secret-manager/doppler/index.html b/docs/using-qovery/integration/secret-manager/doppler/index.html index 32aeacf284..45292bc22d 100644 --- a/docs/using-qovery/integration/secret-manager/doppler/index.html +++ b/docs/using-qovery/integration/secret-manager/doppler/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                              -

                                                                                                              Doppler

                                                                                                              Doppler is a universal secrets manager that integrates with Qovery. Doppler allows you to store and manage your application secrets in a single place and access them from anywhere.

                                                                                                              Check out this Doppler documentation to integrate Qovery with your Doppler account.

                                                                                                              Resources
                                                                                                                +

                                                                                                                Doppler

                                                                                                                Doppler is a universal secrets manager that integrates with Qovery. Doppler allows you to store and manage your application secrets in a single place and access them from anywhere.

                                                                                                                Check out this Doppler documentation to integrate Qovery with your Doppler account.

                                                                                                                Resources
                                                                                                                  - + - + diff --git a/docs/using-qovery/integration/secret-manager/index.html b/docs/using-qovery/integration/secret-manager/index.html index abb895b11f..a847d740eb 100644 --- a/docs/using-qovery/integration/secret-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                  -

                                                                                                                  Secret Manager

                                                                                                                  Doppler
                                                                                                                  AWS Secrets Manager

                                                                                                                  FAQ

                                                                                                                  I don't find my Secret Manager provider, what should I do?

                                                                                                                  Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your secret manager if their maintainers provide a Helm Chart.

                                                                                                                  If your secret manager provides a Helm Chart, then you can install it:

                                                                                                                  By using the Qovery Lifecycle Jobs

                                                                                                                  1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                                  By using kubectl

                                                                                                                  1. Connect to your Qovery Kubernetes cluster.
                                                                                                                  2. Install the helm chart.

                                                                                                                  Do you need help?

                                                                                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                                  +

                                                                                                                  Secret Manager

                                                                                                                  Doppler
                                                                                                                  AWS Secrets Manager

                                                                                                                  FAQ

                                                                                                                  I don't find my Secret Manager provider, what should I do?

                                                                                                                  Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your secret manager if their maintainers provide a Helm Chart.

                                                                                                                  If your secret manager provides a Helm Chart, then you can install it:

                                                                                                                  By using the Qovery Lifecycle Jobs

                                                                                                                  1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                                                                  By using kubectl

                                                                                                                  1. Connect to your Qovery Kubernetes cluster.
                                                                                                                  2. Install the helm chart.

                                                                                                                  Do you need help?

                                                                                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                                  - + - + diff --git a/docs/using-qovery/integration/slack/index.html b/docs/using-qovery/integration/slack/index.html index dcd8d5aa4d..cf931cc117 100644 --- a/docs/using-qovery/integration/slack/index.html +++ b/docs/using-qovery/integration/slack/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                  -

                                                                                                                  Slack

                                                                                                                  If you'd like to automatically notify your team on a Slack workspace whenever a change has occurred on your apps, this integration will help you out. You can choose which actions should trigger messages on your Slack workspace.

                                                                                                                  Here are the steps that we are going through:

                                                                                                                  1. Create a Slack App
                                                                                                                  2. Create a Webhook
                                                                                                                  3. Setup a Webhook in Qovery
                                                                                                                  4. Try it!

                                                                                                                  1. Create a Slack App

                                                                                                                  1. Go to the Slack page to create apps and create a new app:

                                                                                                                    Create a slack app - step 1

                                                                                                                  2. Create a Slack app from scratch:

                                                                                                                    Create a slack app - step 2

                                                                                                                  3. Call it Qovery and connect it to the workspace of your choice:

                                                                                                                    Create a slack app - step 3

                                                                                                                  4. Feel free to use an image from here as the app's logo:

                                                                                                                    Create a slack app - step 4

                                                                                                                  2. Create a Webhook

                                                                                                                  1. Go to the Incoming Webhooks page for your newly-created app and toggle Activate Incoming Webhooks to turn it on:

                                                                                                                    Create a webhook integration on Slack - step 1

                                                                                                                  2. Click on Add New Webhook to Workspace:

                                                                                                                    Create a webhook integration on Slack - step 2

                                                                                                                  3. Select the channel that the notifications will be posted to:

                                                                                                                    Create a webhook integration on Slack - step 3

                                                                                                                  4. Copy the webhook URL:

                                                                                                                    Create a webhook integration on Slack - step 4

                                                                                                                  3. Create a Webhook in Qovery

                                                                                                                  To create a webhook in Qovery, have a look at this section. For the URL, use the Slack Webhook URL that you got from the previous step.

                                                                                                                  Considerations

                                                                                                                  • You can have multiple webhooks targeting different Slack channels.
                                                                                                                  • You can specify the events that you want to receive. E.g. if you just want to be notified when a deployment failed, then use "events": ["DEPLOYMENT_FAILURE"]. All the events and the description are available on our Webhook section.
                                                                                                                  • You can turn off or delete your webhooks at any time from the webhook section.

                                                                                                                  Check out this page for further details on how to use and configure the WebHook.

                                                                                                                  4. Try it!

                                                                                                                  Launch a deployment with Qovery, and you will see a message like the one below appearing in your Slack channel 🎉

                                                                                                                  Open a thread on our forum if you have any questions.

                                                                                                                  +

                                                                                                                  Slack

                                                                                                                  If you'd like to automatically notify your team on a Slack workspace whenever a change has occurred on your apps, this integration will help you out. You can choose which actions should trigger messages on your Slack workspace.

                                                                                                                  Here are the steps that we are going through:

                                                                                                                  1. Create a Slack App
                                                                                                                  2. Create a Webhook
                                                                                                                  3. Setup a Webhook in Qovery
                                                                                                                  4. Try it!

                                                                                                                  1. Create a Slack App

                                                                                                                  1. Go to the Slack page to create apps and create a new app:

                                                                                                                    Create a slack app - step 1

                                                                                                                  2. Create a Slack app from scratch:

                                                                                                                    Create a slack app - step 2

                                                                                                                  3. Call it Qovery and connect it to the workspace of your choice:

                                                                                                                    Create a slack app - step 3

                                                                                                                  4. Feel free to use an image from here as the app's logo:

                                                                                                                    Create a slack app - step 4

                                                                                                                  2. Create a Webhook

                                                                                                                  1. Go to the Incoming Webhooks page for your newly-created app and toggle Activate Incoming Webhooks to turn it on:

                                                                                                                    Create a webhook integration on Slack - step 1

                                                                                                                  2. Click on Add New Webhook to Workspace:

                                                                                                                    Create a webhook integration on Slack - step 2

                                                                                                                  3. Select the channel that the notifications will be posted to:

                                                                                                                    Create a webhook integration on Slack - step 3

                                                                                                                  4. Copy the webhook URL:

                                                                                                                    Create a webhook integration on Slack - step 4

                                                                                                                  3. Create a Webhook in Qovery

                                                                                                                  To create a webhook in Qovery, have a look at this section. For the URL, use the Slack Webhook URL that you got from the previous step.

                                                                                                                  Considerations

                                                                                                                  • You can have multiple webhooks targeting different Slack channels.
                                                                                                                  • You can specify the events that you want to receive. E.g. if you just want to be notified when a deployment failed, then use "events": ["DEPLOYMENT_FAILURE"]. All the events and the description are available on our Webhook section.
                                                                                                                  • You can turn off or delete your webhooks at any time from the webhook section.

                                                                                                                  Check out this page for further details on how to use and configure the WebHook.

                                                                                                                  4. Try it!

                                                                                                                  Launch a deployment with Qovery, and you will see a message like the one below appearing in your Slack channel 🎉

                                                                                                                  Open a thread on our forum if you have any questions.

                                                                                                                  - + - + diff --git a/docs/using-qovery/integration/terraform/index.html b/docs/using-qovery/integration/terraform/index.html index 1b4cff5e3a..5b8db6de87 100644 --- a/docs/using-qovery/integration/terraform/index.html +++ b/docs/using-qovery/integration/terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                                                                                  Terraform

                                                                                                                  Terraform is an open-source infrastructure as code software (IaC) tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files.

                                                                                                                  Terraform can be used in 2 context:

                                                                                                                  1. Qovery can be controlled via Terraform. This allows you to automate the creation of your organization, project, clusters, applications and environments (and more).
                                                                                                                  2. Qovery can be used to deploy your Terraform code. This allows you to automate the deployment of your infrastructure.

                                                                                                                  Deploy Qovery with Terraform

                                                                                                                  Qovery integrates with Terraform to create a complete workflow with a strong developer and operations experience for the different teams from development to critical production applications. By integrating Terraform with Qovery, your team can quickly implement governance at scale while drastically improving the developer experience when deploying and managing applications.

                                                                                                                  Examples

                                                                                                                  Check out our Terraform examples here.

                                                                                                                  Terraform Exporter

                                                                                                                  Qovery allows you to export your environment as a Terraform Manifest. Check the Terraform Exporter documentation to know more.

                                                                                                                  Resources

                                                                                                                  Deploy your Terraform code with Qovery

                                                                                                                  Qovery can deploy your Terraform code. It's very useful when you want to deploy your own cloud resources. For example, you can deploy your own databases, lambdas, brokers etc... -To do so, you need to use the Lifecycle Jobs feature.

                                                                                                                  Examples

                                                                                                                  Check out our Terraform examples here.

                                                                                                                  Resources

                                                                                                                  Do you need help?

                                                                                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                                  +To do so, you need to use the Lifecycle Jobs feature.

                                                                                                                  Examples

                                                                                                                  Check out our Terraform examples here.

                                                                                                                  Resources

                                                                                                                  Do you need help?

                                                                                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                                                                  - + - + diff --git a/docs/using-qovery/integration/webhook/index.html b/docs/using-qovery/integration/webhook/index.html index 50527d43c7..f5f08c8b51 100644 --- a/docs/using-qovery/integration/webhook/index.html +++ b/docs/using-qovery/integration/webhook/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                  -

                                                                                                                  Webhooks

                                                                                                                  Qovery allows you to create webhooks at organization-level so that, when an event happens on an environment within your organization, you can get notified on external applications.

                                                                                                                  This is useful for the following use cases:

                                                                                                                  • integrate Qovery with an exeternal tool that needs to be informed when the deployment status changes.
                                                                                                                  • share within a slack channel any deployment status change for your environments.

                                                                                                                  You can trigger webhooks when:

                                                                                                                  • A deployment has started in the environment.
                                                                                                                  • A deployment has been successful in the environment.
                                                                                                                  • A deployment has been cancelled in the environment.
                                                                                                                  • A deployment has failed in the environment.

                                                                                                                  Two types of webhooks can be created within Qovery:

                                                                                                                  • Standard: this type of webhook will send a payload to the defined url with a Qovery proprietary format (check out our Webhook payload documentation for more information on the payload format)
                                                                                                                  • Slack: this type of webhook will send pre-formatted messages using the Slack messaging syntax. Have a look at our Slack integration for more information on the integration.

                                                                                                                  Creating a Webhook

                                                                                                                  To create a webhook via the Qovery Console:

                                                                                                                  1. Open the Organization settings and the Webhook section

                                                                                                                    Access webhook section

                                                                                                                  2. Press the Add New button.

                                                                                                                  3. Enter the following parameters:

                                                                                                                    ParameterUsage
                                                                                                                    URLThe webhook URL provided by the external application you want to receive notifications on.
                                                                                                                    "kind"Specify which kind of webhook you want to create. At the moment, you can specify : "kind": "STANDARD" to create a generic webhook, or "kind": "SLACK" to create a Slack webhook.
                                                                                                                    "description"(Optional) Enter a self-explanatory description of what your webhook does. In the example, "description": "slack notifications" clearly states that the webhook triggers notifications on Slack.
                                                                                                                    "secret"(Optional) Specify the secret to be used when calling the specified webhook URL
                                                                                                                    "events"List all the events you want to be notified about.
                                                                                                                    "environment_types_filter"(Optional) If you only want to get notified about events happening on one or several specific type(s) or environment(s), you can provide a list using the following possible values: "PRODUCTION", "DEVELOPMENT", "STAGING" and "PREVIEW".

                                                                                                                    Please note that "environment_types_filter" can be used together with "project_names_filter".
                                                                                                                    "project_names_filter"(Optional) If you only want to get notified about events happening in one or several specific projects, you can provide a list of project names that will act as a filter. Notifications will then only be triggered for projects whose names match or, if you're using a wildcard, start with one of the values from your list.

                                                                                                                    Please note that "project_names_filter" is not case-sensitive, accepts wildcards, and can be used together with "environment_types_filter".

                                                                                                                    And press the Create button.

                                                                                                                  Editing a Webhook

                                                                                                                  From the webhook page, press the Wheel button to edit the webhook.

                                                                                                                  If you want to temporally disable the webhook, you can disable it by clicking on the Enable switch.

                                                                                                                  Delete a Webhook

                                                                                                                  From the webhook page, press the Bin button to delete the webhook. A confirmation modal will ask you to confirm the operation.

                                                                                                                  Webhook payload

                                                                                                                  Here is an example of a Qovery Webhook standard payload. The payload is sent as a POST request to the specified URL.

                                                                                                                  Deployment payload

                                                                                                                  This payload is sent when a deployment starts, is cancelled, is successful or fails.

                                                                                                                  {
                                                                                                                  "created_at": "2020-10-04T14:00:00.000Z",
                                                                                                                  "event_type": "DEPLOYMENT_STARTED|DEPLOYMENT_CANCELLED|DEPLOYMENT_SUCCESSFUL|DEPLOYMENT_FAILURE",
                                                                                                                  "payload_type": "DEPLOYMENT", // no other option at the moment
                                                                                                                  "payload_id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                                                                  "payload": {
                                                                                                                  "id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "organization": {...}, // doc: https://api-doc.qovery.com/#tag/Organization-Main-Calls/operation/getOrganization
                                                                                                                  "project": {...}, // doc: https://api-doc.qovery.com/#tag/Project-Main-Calls/operation/getProject
                                                                                                                  "environment": {...}, // doc: https://api-doc.qovery.com/#tag/Environment-Main-Calls/operation/getEnvironment
                                                                                                                  "applications": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "application": {...} // doc: https://api-doc.qovery.com/#tag/Application-Main-Calls/operation/getApplication
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "databases": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "database": {...} // doc: https://api-doc.qovery.com/#tag/Database-Main-Calls/operation/getDatabase
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "containers": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "container": {...} // doc: https://api-doc.qovery.com/#tag/Container-Main-Calls/operation/getContainer
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "jobs": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "job": {...} // doc: https://api-doc.qovery.com/#tag/Job-Main-Calls/operation/getJob
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "logs": [...] // doc: https://api-doc.qovery.com/#tag/Environment-Logs/operation/listEnvironmentLog
                                                                                                                  }
                                                                                                                  }
                                                                                                                  +

                                                                                                                  Webhooks

                                                                                                                  Qovery allows you to create webhooks at organization-level so that, when an event happens on an environment within your organization, you can get notified on external applications.

                                                                                                                  This is useful for the following use cases:

                                                                                                                  • integrate Qovery with an exeternal tool that needs to be informed when the deployment status changes.
                                                                                                                  • share within a slack channel any deployment status change for your environments.

                                                                                                                  You can trigger webhooks when:

                                                                                                                  • A deployment has started in the environment.
                                                                                                                  • A deployment has been successful in the environment.
                                                                                                                  • A deployment has been cancelled in the environment.
                                                                                                                  • A deployment has failed in the environment.

                                                                                                                  Two types of webhooks can be created within Qovery:

                                                                                                                  • Standard: this type of webhook will send a payload to the defined url with a Qovery proprietary format (check out our Webhook payload documentation for more information on the payload format)
                                                                                                                  • Slack: this type of webhook will send pre-formatted messages using the Slack messaging syntax. Have a look at our Slack integration for more information on the integration.

                                                                                                                  Creating a Webhook

                                                                                                                  To create a webhook via the Qovery Console:

                                                                                                                  1. Open the Organization settings and the Webhook section

                                                                                                                    Access webhook section

                                                                                                                  2. Press the Add New button.

                                                                                                                  3. Enter the following parameters:

                                                                                                                    ParameterUsage
                                                                                                                    URLThe webhook URL provided by the external application you want to receive notifications on.
                                                                                                                    "kind"Specify which kind of webhook you want to create. At the moment, you can specify : "kind": "STANDARD" to create a generic webhook, or "kind": "SLACK" to create a Slack webhook.
                                                                                                                    "description"(Optional) Enter a self-explanatory description of what your webhook does. In the example, "description": "slack notifications" clearly states that the webhook triggers notifications on Slack.
                                                                                                                    "secret"(Optional) Specify the secret to be used when calling the specified webhook URL
                                                                                                                    "events"List all the events you want to be notified about.
                                                                                                                    "environment_types_filter"(Optional) If you only want to get notified about events happening on one or several specific type(s) or environment(s), you can provide a list using the following possible values: "PRODUCTION", "DEVELOPMENT", "STAGING" and "PREVIEW".

                                                                                                                    Please note that "environment_types_filter" can be used together with "project_names_filter".
                                                                                                                    "project_names_filter"(Optional) If you only want to get notified about events happening in one or several specific projects, you can provide a list of project names that will act as a filter. Notifications will then only be triggered for projects whose names match or, if you're using a wildcard, start with one of the values from your list.

                                                                                                                    Please note that "project_names_filter" is not case-sensitive, accepts wildcards, and can be used together with "environment_types_filter".

                                                                                                                    And press the Create button.

                                                                                                                  Editing a Webhook

                                                                                                                  From the webhook page, press the Wheel button to edit the webhook.

                                                                                                                  If you want to temporally disable the webhook, you can disable it by clicking on the Enable switch.

                                                                                                                  Delete a Webhook

                                                                                                                  From the webhook page, press the Bin button to delete the webhook. A confirmation modal will ask you to confirm the operation.

                                                                                                                  Webhook payload

                                                                                                                  Here is an example of a Qovery Webhook standard payload. The payload is sent as a POST request to the specified URL.

                                                                                                                  Deployment payload

                                                                                                                  This payload is sent when a deployment starts, is cancelled, is successful or fails.

                                                                                                                  {
                                                                                                                  "created_at": "2020-10-04T14:00:00.000Z",
                                                                                                                  "event_type": "DEPLOYMENT_STARTED|DEPLOYMENT_CANCELLED|DEPLOYMENT_SUCCESSFUL|DEPLOYMENT_FAILURE",
                                                                                                                  "payload_type": "DEPLOYMENT", // no other option at the moment
                                                                                                                  "payload_id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                                                                  "payload": {
                                                                                                                  "id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "organization": {...}, // doc: https://api-doc.qovery.com/#tag/Organization-Main-Calls/operation/getOrganization
                                                                                                                  "project": {...}, // doc: https://api-doc.qovery.com/#tag/Project-Main-Calls/operation/getProject
                                                                                                                  "environment": {...}, // doc: https://api-doc.qovery.com/#tag/Environment-Main-Calls/operation/getEnvironment
                                                                                                                  "applications": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "application": {...} // doc: https://api-doc.qovery.com/#tag/Application-Main-Calls/operation/getApplication
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "databases": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "database": {...} // doc: https://api-doc.qovery.com/#tag/Database-Main-Calls/operation/getDatabase
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "containers": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "container": {...} // doc: https://api-doc.qovery.com/#tag/Container-Main-Calls/operation/getContainer
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "jobs": [
                                                                                                                  {
                                                                                                                  "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                                                                  "job": {...} // doc: https://api-doc.qovery.com/#tag/Job-Main-Calls/operation/getJob
                                                                                                                  }
                                                                                                                  ],
                                                                                                                  "logs": [...] // doc: https://api-doc.qovery.com/#tag/Environment-Logs/operation/listEnvironmentLog
                                                                                                                  }
                                                                                                                  }
                                                                                                                  - + - + diff --git a/docs/using-qovery/interface/cli/index.html b/docs/using-qovery/interface/cli/index.html index d833800b2d..35b6aaf630 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,7 +46,7 @@ - + @@ -57,12 +57,16 @@
                                                                                                                  Available Commands:
                                                                                                                  application Manage applications
                                                                                                                  auth Log in to Qovery
                                                                                                                  completion Generate the autocompletion script for the specified shell
                                                                                                                  console Opens the application in Qovery Console in your browser
                                                                                                                  container Manage containers
                                                                                                                  context Manage CLI context
                                                                                                                  cronjob Manage cronjobs
                                                                                                                  database Manage databases
                                                                                                                  env Manage Environment Variables and Secrets
                                                                                                                  environment Manage environments
                                                                                                                  help Help about any command
                                                                                                                  lifecycle Manage lifecycle jobs
                                                                                                                  log Print your application logs
                                                                                                                  service Manage services
                                                                                                                  shell Connect to an application container
                                                                                                                  status Print the status of your application
                                                                                                                  token Generate an API token
                                                                                                                  upgrade Upgrade Qovery CLI to latest version
                                                                                                                  version Print installed version of the Qovery CLI
                                                                                                                  Flags:
                                                                                                                  -h, --help help for qovery
                                                                                                                  Use "qovery [command] --help" for more information about a command.

                                                                                                                  Context

                                                                                                                  Context command lets you configure the CLI to work with your chosen application. Before executing other commands, you need first to set up the context. -The context is then remembered and used by the CLI. You can configure a new context anytime by running the qovery context set command.

                                                                                                                  Set New Context

                                                                                                                  To set a new context, type qovery context set:

                                                                                                                  $ qovery context set
                                                                                                                  Qovery: Current context:
                                                                                                                  Organization | Qovery
                                                                                                                  Project | test
                                                                                                                  Environment | development
                                                                                                                  Application | website
                                                                                                                  +The context is then remembered and used by the CLI. You can configure a new context anytime by running the qovery context set command.

                                                                                                                  Most of the commands support an inline context set allowing you to directly pass the URL of the application you wants to interact with.

                                                                                                                  Example:

                                                                                                                  $ qovery shell https://console.qovery.com/organization/51927012-8377-4e0f-84cf-7f5f38a0154b/project/a6545d50-69a3-4966-89cc-4c0bfb6d3448/environment/c9ac549b-a855-4d3b-b652-d68d5f1fea11/application/820ca0a3-08bf-42c1-8ad2-540714ad657f/general
                                                                                                                  # this is the url of my back-end application
                                                                                                                  +
                                                                                                                  Organization | My orga
                                                                                                                  Project | R&D / Backend
                                                                                                                  Environment | prod
                                                                                                                  ServiceLevel | back-end
                                                                                                                  ServiceType | application
                                                                                                                  +
                                                                                                                  $ ls
                                                                                                                  ...

                                                                                                                  Set New Context

                                                                                                                  To set a new context, type qovery context set:

                                                                                                                  $ qovery context set
                                                                                                                  Qovery: Current context:
                                                                                                                  Organization | Qovery
                                                                                                                  Project | test
                                                                                                                  Environment | development
                                                                                                                  Application | website
                                                                                                                  Qovery: Select new context
                                                                                                                  Organization:
                                                                                                                  ✔ Qovery
                                                                                                                  Project:
                                                                                                                  ✔ admin
                                                                                                                  Environment:
                                                                                                                  ✔ main
                                                                                                                  Application:
                                                                                                                  ✔ app
                                                                                                                  Qovery: New context:
                                                                                                                  Organization | Qovery
                                                                                                                  Project | admin
                                                                                                                  Environment | main
                                                                                                                  Application | app

                                                                                                                  Print Current Context

                                                                                                                  $ qovery context
                                                                                                                  Qovery: Current context:
                                                                                                                  Organization | Qovery
                                                                                                                  Project | admin
                                                                                                                  Environment | main
                                                                                                                  Application | app
                                                                                                                  Qovery: You can set a new context using 'qovery context set'.

                                                                                                                  Log

                                                                                                                  Log command allows you to display the application logs.

                                                                                                                  $ qovery log
                                                                                                                  TIME MESSAGE
                                                                                                                  Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16
                                                                                                                  Jul 15 08:46:13.019721 at Array.forEach (<anonymous>)
                                                                                                                  Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)
                                                                                                                  Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)
                                                                                                                  # ... the rest of logs

                                                                                                                  By default, the last 1000 logs is displayed.

                                                                                                                  Follow Logs

                                                                                                                  To make the CLI follow your logs, use -f flag:

                                                                                                                  $ qovery log -f
                                                                                                                  TIME MESSAGE
                                                                                                                  Jul 15 08:46:13.019717 at /usr/src/app/autoFunctions/levels.js:17:16
                                                                                                                  Jul 15 08:46:13.019721 at Array.forEach (<anonymous>)
                                                                                                                  Jul 15 08:46:13.019724 at Timeout._onTimeout (/usr/src/app/autoFunctions/levels.js:15:14)
                                                                                                                  Jul 15 08:46:13.019728 at listOnTimeout (internal/timers.js:557:17)
                                                                                                                  # ... the rest of logs

                                                                                                                  This will make the CLI follow your application logs and append any new logs till you use CTRL+C.

                                                                                                                  Status

                                                                                                                  Status command lets you print the basic status of your application.

                                                                                                                  $ qovery status
                                                                                                                  15 Jul 21 10:55 CEST
                                                                                                                  Application | Backend
                                                                                                                  Status | RUNNING

                                                                                                                  Console

                                                                                                                  Console command quickly opens the Qovery Console in your browser to let you display more information about your application.

                                                                                                                  $ qovery console
                                                                                                                  Qovery: Opening https://console.qovery.com/platform/organization/your-org/projects/your-proj/environments/your-env/applications/your-app/summary

                                                                                                                  Shell

                                                                                                                  Shell command allows you to open a connection and execute commands directly on the container running application.

                                                                                                                  $ qovery shell
                                                                                                                  / # ls
                                                                                                                  bin media srv
                                                                                                                  dev mnt sys
                                                                                                                  docker-entrypoint.d opt tmp
                                                                                                                  docker-entrypoint.sh proc usr
                                                                                                                  etc root var
                                                                                                                  home run www
                                                                                                                  lib sbin

                                                                                                                  Pass a command

                                                                                                                  To pass a command, you can use the --command or -c argument followed by your command.

                                                                                                                  $ qovery shell --command ls
                                                                                                                  bin media srv
                                                                                                                  dev mnt sys
                                                                                                                  docker-entrypoint.d opt tmp
                                                                                                                  docker-entrypoint.sh proc usr
                                                                                                                  etc root var
                                                                                                                  home run www
                                                                                                                  lib sbin

                                                                                                                  To pass several arguments, you can separate them with a comma or send different --command.

                                                                                                                  qovery shell --command ls --command -l qovery shell --command ls,-l -qovery shell -c ls,-l

                                                                                                                  $ qovery shell --command ls --command -l
                                                                                                                  drwxr-xr-x 2 root root 4096 Nov 30 09:32 bin
                                                                                                                  drwxr-xr-x 5 root root 360 Dec 21 09:46 dev
                                                                                                                  drwxr-xr-x 1 root root 41 Dec 20 20:13 docker-entrypoint.d
                                                                                                                  -rwxr-xr-x 1 root root 1620 Dec 20 20:13 docker-entrypoint.sh
                                                                                                                  drwxr-xr-x 1 root root 25 Dec 21 09:46 etc
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 home
                                                                                                                  drwxr-xr-x 1 root root 61 Dec 20 22:11 lib
                                                                                                                  drwxr-xr-x 5 root root 44 Nov 30 09:32 media
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 mnt
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 opt
                                                                                                                  dr-xr-xr-x 209 root root 0 Dec 21 09:46 proc
                                                                                                                  drwx------ 1 root root 26 Dec 21 10:38 root
                                                                                                                  drwxr-xr-x 1 root root 23 Dec 21 09:46 run
                                                                                                                  drwxr-xr-x 2 root root 4096 Nov 30 09:32 sbin
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 srv
                                                                                                                  dr-xr-xr-x 13 root root 0 Dec 21 09:46 sys
                                                                                                                  drwxrwxrwt 2 root root 6 Nov 30 09:32 tmp
                                                                                                                  drwxr-xr-x 1 root root 66 Nov 30 09:32 usr
                                                                                                                  drwxr-xr-x 1 root root 19 Nov 30 09:32 var
                                                                                                                  drwxr-xr-x 2 root root 59 Dec 21 09:45 www

                                                                                                                  Shell in a dedicated pod

                                                                                                                  If your application is running on several pods, you can shell directly in a dedicated one by using the --pod or -p argument followed by your pod name.

                                                                                                                  $ qovery shell --pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11

                                                                                                                  Shell in a dedicated container

                                                                                                                  If you have several containers in your pod, you can shell directly in a dedicated one by using the --container argument followed by your container name.

                                                                                                                  $ qovery shell --container app-5f65fb5c4-frontend

                                                                                                                  Generate API token

                                                                                                                  To use the Qovery API you will need to generate an authentication token. To generate an API token you can install the CLI and type

                                                                                                                  $ qovery token
                                                                                                                  +qovery shell -c ls,-l

                                                                                                                  $ qovery shell --command ls --command -l
                                                                                                                  drwxr-xr-x 2 root root 4096 Nov 30 09:32 bin
                                                                                                                  drwxr-xr-x 5 root root 360 Dec 21 09:46 dev
                                                                                                                  drwxr-xr-x 1 root root 41 Dec 20 20:13 docker-entrypoint.d
                                                                                                                  -rwxr-xr-x 1 root root 1620 Dec 20 20:13 docker-entrypoint.sh
                                                                                                                  drwxr-xr-x 1 root root 25 Dec 21 09:46 etc
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 home
                                                                                                                  drwxr-xr-x 1 root root 61 Dec 20 22:11 lib
                                                                                                                  drwxr-xr-x 5 root root 44 Nov 30 09:32 media
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 mnt
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 opt
                                                                                                                  dr-xr-xr-x 209 root root 0 Dec 21 09:46 proc
                                                                                                                  drwx------ 1 root root 26 Dec 21 10:38 root
                                                                                                                  drwxr-xr-x 1 root root 23 Dec 21 09:46 run
                                                                                                                  drwxr-xr-x 2 root root 4096 Nov 30 09:32 sbin
                                                                                                                  drwxr-xr-x 2 root root 6 Nov 30 09:32 srv
                                                                                                                  dr-xr-xr-x 13 root root 0 Dec 21 09:46 sys
                                                                                                                  drwxrwxrwt 2 root root 6 Nov 30 09:32 tmp
                                                                                                                  drwxr-xr-x 1 root root 66 Nov 30 09:32 usr
                                                                                                                  drwxr-xr-x 1 root root 19 Nov 30 09:32 var
                                                                                                                  drwxr-xr-x 2 root root 59 Dec 21 09:45 www

                                                                                                                  Shell in a dedicated pod

                                                                                                                  If your application is running on several pods, you can shell directly in a dedicated one by using the --pod or -p argument followed by your pod name.

                                                                                                                  $ qovery shell --pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11

                                                                                                                  NOTE: you can get the list of pods by running the qovery list-pods command.

                                                                                                                  Shell in a dedicated container

                                                                                                                  If you have several containers in your pod, you can shell directly in a dedicated one by using the --container argument followed by your container name.

                                                                                                                  $ qovery shell --container app-5f65fb5c4-frontend

                                                                                                                  Port-forward

                                                                                                                  Port-forward command allows you to port-forward all the traffic on your local machine to a remote resource available on a Qovery environment. This mechanism allows developers to create a secure, encrypted tunnel from their local machine to the application or databases hosted in the cloud.

                                                                                                                  $ qovery port-forward -p 8000:80 #your_local_port:your_remote_port
                                                                                                                  Info: Current context:
                                                                                                                  Organization | Qovery Prod
                                                                                                                  Project | R&D / Frontend
                                                                                                                  Environment | prod
                                                                                                                  Service | console
                                                                                                                  Type | application
                                                                                                                  +
                                                                                                                  Info: Continue with port-forward command using this context ?
                                                                                                                  Please type "yes" to validate context: yes
                                                                                                                  +
                                                                                                                  Listening on 127.0.0.1:8000 => 80

                                                                                                                  The port-forward feature works with any application, Cronjob, Lifecycle job or database (Container or Managed) deployed with Qovery. For Managed database instances on AWS, once the port-forwarded is activated, you must specify ~ --tls and --tls-insecure in your database connection command since localhost is not the valid hostname.

                                                                                                                  Port-forward a dedicated pod

                                                                                                                  If your application is running on several pods, you can port-forward to a dedicated one by using the --pod argument followed by your pod name.

                                                                                                                  $ qovery port-forward -p 8000:80 -pod app-5f65fb5c4-frontend-5f65db5c4b-q4w11

                                                                                                                  NOTE: you can get the list of pods by running the qovery list-pods command.

                                                                                                                  Generate API token

                                                                                                                  To use the Qovery API you will need to generate an authentication token. To generate an API token you can install the CLI and type

                                                                                                                  $ qovery token
                                                                                                                  Qovery: Select organization
                                                                                                                  Organization:
                                                                                                                  ✔ My Organization
                                                                                                                  Choose a token name
                                                                                                                  Token name: Romaric
                                                                                                                  Choose a token description
                                                                                                                  Token description: used for Github Actions
                                                                                                                  Qovery: ---- Never share this authentication token and keep it secure ----
                                                                                                                  Qovery: qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691
                                                                                                                  Qovery: ---- Never share this authentication token and keep it secure ----

                                                                                                                  To use your token and list your organizations.

                                                                                                                  curl -X GET -H 'Authorization: Token qov_4LnEg2wFxxxxxHObGSQ22rjBZZyyyySgyR6Y_2500882691' https://api.qovery.com/organization

                                                                                                                  Check out our API documentation

                                                                                                                  Managing services and environments

                                                                                                                  The CLI allows you to manage and deploy the environment and services within your organization

                                                                                                                  ### application, container, lifecycle, cronjob These commands allow you to manage all these services via the CLI. You can run the following actions on these services:

                                                                                                                  • cancel: Cancel the service deployment
                                                                                                                  • delete: Delete a service
                                                                                                                  • deploy: Deploy a service
                                                                                                                  • list: List the service of the specified type
                                                                                                                  • redeploy: Redeploy a service (already deployed before)
                                                                                                                  • stop: Stop a service

                                                                                                                  Each action allows you to specify additional parameters to define the service you want to modify (you can find them via the --help command)

                                                                                                                  Example: Listing applications and triggering a deployment

                                                                                                                  $ qovery application list
                                                                                                                  Name | Type | Status | Last Update
                                                                                                                  backend | Application | STOPPED | 2023-02-02 14:48:05.339652 +0000 UTC
                                                                                                                  front-end | Application | STOPPED | 2023-02-09 14:04:38.079792 +0000 UTC
                                                                                                                  @@ -79,14 +83,14 @@
                                                                                                                  # deployment stage 4: "APPLICATION DEFAULT"
                                                                                                                  Rename me to avoid default/legacy ordering
                                                                                                                  Type | Name
                                                                                                                  APPLICATION | Backend
                                                                                                                  APPLICATION | Frontend
                                                                                                                  APPLICATION | Pablo Backend App
                                                                                                                  APPLICATION | API gateway
                                                                                                                  -
                                                                                                                  ~ $ qovery environment deploy
                                                                                                                  Environment is deploying!

                                                                                                                  Managing the Deployment Pipeline

                                                                                                                  In the following sections we will describe how to modify the Deployment Pipeline.

                                                                                                                  List stages

                                                                                                                  You can list all the stages of your environment by using the following command:

                                                                                                                  qovery environment stage list

                                                                                                                  Add a stage

                                                                                                                  You can add a new stage by using the following command:

                                                                                                                  qovery environment stage create -n <name> -d <description>

                                                                                                                  Note that the stage will be added at the end of the pipeline (the highest number)

                                                                                                                  Modify a stage

                                                                                                                  You can modify a stage by using the following command:

                                                                                                                  qovery environment stage edit -n <original name> --new-name <new name> --new-description <new description>

                                                                                                                  Delete a stage

                                                                                                                  You can modify a stage by using the following command:

                                                                                                                  qovery environment stage delete -n <name>

                                                                                                                  Change stage for a service

                                                                                                                  You can modify the stage associated to a service by using the following command:

                                                                                                                  qovery environment stage move -n <service name> --stage <stage name>

                                                                                                                  Support

                                                                                                                  Do you have any issues with Qovery CLI? Open an issue.

                                                                                                                  +
                                                                                                                  ~ $ qovery environment deploy
                                                                                                                  Environment is deploying!

                                                                                                                  Managing the Deployment Pipeline

                                                                                                                  In the following sections we will describe how to modify the Deployment Pipeline.

                                                                                                                  List stages

                                                                                                                  You can list all the stages of your environment by using the following command:

                                                                                                                  qovery environment stage list

                                                                                                                  Add a stage

                                                                                                                  You can add a new stage by using the following command:

                                                                                                                  qovery environment stage create -n <name> -d <description>

                                                                                                                  Note that the stage will be added at the end of the pipeline (the highest number)

                                                                                                                  Modify a stage

                                                                                                                  You can modify a stage by using the following command:

                                                                                                                  qovery environment stage edit -n <original name> --new-name <new name> --new-description <new description>

                                                                                                                  Delete a stage

                                                                                                                  You can modify a stage by using the following command:

                                                                                                                  qovery environment stage delete -n <name>

                                                                                                                  Change stage for a service

                                                                                                                  You can modify the stage associated to a service by using the following command:

                                                                                                                  qovery environment stage move -n <service name> --stage <stage name>

                                                                                                                  Support

                                                                                                                  Do you have any issues with Qovery CLI? Open an issue.

                                                                                                                  - + - + @@ -104,7 +108,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index 98986edc6f..a9c4f41073 100644 --- a/docs/using-qovery/interface/index.html +++ b/docs/using-qovery/interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                  -

                                                                                                                  Interface

                                                                                                                  In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.

                                                                                                                  Cli
                                                                                                                  Rest api
                                                                                                                  Terraform interface
                                                                                                                  Web interface
                                                                                                                  Resources
                                                                                                                    +

                                                                                                                    Interface

                                                                                                                    In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.

                                                                                                                    Cli
                                                                                                                    Rest api
                                                                                                                    Terraform interface
                                                                                                                    Web interface
                                                                                                                    Resources
                                                                                                                      - + - + diff --git a/docs/using-qovery/interface/rest-api/index.html b/docs/using-qovery/interface/rest-api/index.html index dabbff8870..2fd5c7d26b 100644 --- a/docs/using-qovery/interface/rest-api/index.html +++ b/docs/using-qovery/interface/rest-api/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                      -

                                                                                                                      REST API

                                                                                                                      Use the Qovery REST API to programmatically create infrastructure and deploy your applications. The only limit is your imagination. Find the Qovery API documentation and the OpenAPI spec to generate your own Qovery client with your favorite programming language.

                                                                                                                      API clients

                                                                                                                      Here is the list of clients available to use the Qovery Web API.

                                                                                                                      LanguageLink
                                                                                                                      Golangsource
                                                                                                                      Pythonsource
                                                                                                                      Typescriptsource
                                                                                                                      Javascriptsource

                                                                                                                      Generate an API token

                                                                                                                      You can generate an API token from the Qovery CLI or via the Qovery Web Console.

                                                                                                                      API Documentation

                                                                                                                      The API documentation is available here

                                                                                                                      +

                                                                                                                      REST API

                                                                                                                      Use the Qovery REST API to programmatically create infrastructure and deploy your applications. The only limit is your imagination. Find the Qovery API documentation and the OpenAPI spec to generate your own Qovery client with your favorite programming language.

                                                                                                                      API clients

                                                                                                                      Here is the list of clients available to use the Qovery Web API.

                                                                                                                      LanguageLink
                                                                                                                      Golangsource
                                                                                                                      Pythonsource
                                                                                                                      Typescriptsource
                                                                                                                      Javascriptsource

                                                                                                                      Generate an API token

                                                                                                                      You can generate an API token from the Qovery CLI or via the Qovery Web Console.

                                                                                                                      API Documentation

                                                                                                                      The API documentation is available here

                                                                                                                      - + - + diff --git a/docs/using-qovery/interface/terraform-interface/index.html b/docs/using-qovery/interface/terraform-interface/index.html index 2b771722a0..915cbf65c6 100644 --- a/docs/using-qovery/interface/terraform-interface/index.html +++ b/docs/using-qovery/interface/terraform-interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                      -
                                                                                                                      +
                                                                                                                      - + - + diff --git a/docs/using-qovery/interface/web-interface/index.html b/docs/using-qovery/interface/web-interface/index.html index 14baa7dc8f..048f302167 100644 --- a/docs/using-qovery/interface/web-interface/index.html +++ b/docs/using-qovery/interface/web-interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                      -

                                                                                                                      Web interface

                                                                                                                      Qovery provides a management console which allows you to interact with your projects and manage your environments.

                                                                                                                      First sign-up

                                                                                                                      Sign in to the Qovery web interface.

                                                                                                                      Qovery Sign-up page

                                                                                                                      Deploy your first application

                                                                                                                      Now that you have signed up on the web interface, check out how to deploy your first application

                                                                                                                      +

                                                                                                                      Web interface

                                                                                                                      Qovery provides a management console which allows you to interact with your projects and manage your environments.

                                                                                                                      First sign-up

                                                                                                                      Sign in to the Qovery web interface.

                                                                                                                      Qovery Sign-up page

                                                                                                                      Deploy your first application

                                                                                                                      Now that you have signed up on the web interface, check out how to deploy your first application

                                                                                                                      - + - + diff --git a/docs/using-qovery/maintenance/index.html b/docs/using-qovery/maintenance/index.html index abab58e720..2b272c10ee 100644 --- a/docs/using-qovery/maintenance/index.html +++ b/docs/using-qovery/maintenance/index.html @@ -26,9 +26,9 @@ - + - + @@ -66,14 +66,14 @@
                                                                                                                      echo "[+] Wait for the cluster deployment to be done"
                                                                                                                      sleep 15
                                                                                                                      while [ "$cluster_status" != "RUNNING" ]; do
                                                                                                                      sleep 60
                                                                                                                      cluster_status=$(curl -s -X GET -H "Content-type: application/json" -H "Authorization: Token $qovery_token" "https://api.qovery.com/organization/$organization_id/cluster/$cluster_id/status" | jq -r '.status')
                                                                                                                      echo " -> $(date "+%H:%M") Waiting for the cluster deployment to be done. Current status: $cluster_status..."
                                                                                                                      # Ensure the cluster is in a valid state
                                                                                                                      if [ "$cluster_status" != "DEPLOYMENT_QUEUED" ] && [ "$cluster_status" != "DEPLOYING" ] && [ "$cluster_status" != "DEPLOYED" ] && [ "$cluster_status" != "RUNNING" ]; then
                                                                                                                      echo "ERROR: the cluster does not have a correct status, please check cluster logs and fix the issue. Then delete the key $old_aws_access_key and retry"
                                                                                                                      exit 1
                                                                                                                      fi
                                                                                                                      if [ $(date +"%s") -gt $max_time ]; then
                                                                                                                      echo "ERROR: timeout reached, the cluster is not deployed yet, please check cluster logs and fix the cluster issue. Then delete the key $new_aws_access_key and retry"
                                                                                                                      exit 1
                                                                                                                      fi
                                                                                                                      done
                                                                                                                      echo "[+] Waiting up to 2h to ensure all ongoing deployments are done ($(date -d @$max_time))"
                                                                                                                      while [ $(date +"%s") -lt $max_time ]; do
                                                                                                                      sleep 10
                                                                                                                      done
                                                                                                                      echo "[+] Delete the old Access Key"
                                                                                                                      aws iam delete-access-key --access-key-id $old_aws_access_key --user-name $aws_iam_username
                                                                                                                      -
                                                                                                                      echo "[+] Done"

                                                                                                                      You will see the following output:

                                                                                                                      [+] Ensure there is only one Access Key
                                                                                                                      -> Current (future old) key detected: xxx
                                                                                                                      [+] Create a new Access Key
                                                                                                                      -> Successfully created a new access key: yyy
                                                                                                                      [+] Update Qovery credentials
                                                                                                                      [+] Deploy the cluster with the new credentials
                                                                                                                      [+] Wait for the cluster deployment to be done
                                                                                                                      -> 15:04 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:05 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:06 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:07 Waiting for the cluster deployment to be done. Current status: RUNNING...
                                                                                                                      [+] Waiting up to 2h to ensure all ongoing deployments are done (Fri Nov 11 03:22:57 PM CET 2022)
                                                                                                                      [+] Delete the old Access Key
                                                                                                                      [+] Done
                                                                                                                      +
                                                                                                                      echo "[+] Done"

                                                                                                                      You will see the following output:

                                                                                                                      [+] Ensure there is only one Access Key
                                                                                                                      -> Current (future old) key detected: xxx
                                                                                                                      [+] Create a new Access Key
                                                                                                                      -> Successfully created a new access key: yyy
                                                                                                                      [+] Update Qovery credentials
                                                                                                                      [+] Deploy the cluster with the new credentials
                                                                                                                      [+] Wait for the cluster deployment to be done
                                                                                                                      -> 15:04 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:05 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:06 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                                                                      -> 15:07 Waiting for the cluster deployment to be done. Current status: RUNNING...
                                                                                                                      [+] Waiting up to 2h to ensure all ongoing deployments are done (Fri Nov 11 03:22:57 PM CET 2022)
                                                                                                                      [+] Delete the old Access Key
                                                                                                                      [+] Done
                                                                                                                      - + - + diff --git a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html index c930733917..1278a231a2 100644 --- a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                      -

                                                                                                                      Cluster Troubleshoot

                                                                                                                      Within this section you will find the common errors you might encounter when deploying or running your clusters with Qovery

                                                                                                                      I don't have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?

                                                                                                                      Unfortunately, there is no automatic way to do it with Qovery once we don't have access. However, AWS provides an easy way to retrieve those resources, so you can manually perform the delete. To do so, go on the AWS web console, and search for "Resource Groups & Tag Editor" service, then:

                                                                                                                      Resource groups search by tag

                                                                                                                      1. Click on "Create Resource Group".
                                                                                                                      2. In Tags, enter: "ClusterLongId".
                                                                                                                      3. In the "Optional Tag value", enter the Qovery cluster ID. If you don't have it, let AWS suggest it for you. If you have Qovery deployed elements remainings, it will propose the Cluster long ID automatically.
                                                                                                                      4. Click on "Add".
                                                                                                                      5. You should see the filter with the information you just entered.
                                                                                                                      6. Click on "Preview groups resources".
                                                                                                                      7. You'll have all elements deployed by Qovery and you can delete what you want.

                                                                                                                      My cloud account has been blocked, what should I do?

                                                                                                                      If you encounter this kind of error during an infrastructure deployment (including managed DBs):

                                                                                                                      This account is currently blocked by your cloud provider, please contact them directly.

                                                                                                                      Or

                                                                                                                      This AWS account is currently blocked and not recognized as a valid account.
                                                                                                                      Please contact aws-verification@amazon.com directly to get more details.
                                                                                                                      Maybe you are not allowed to use your free tier in this region?
                                                                                                                      Maybe you need to provide billing info?

                                                                                                                      This error is likely due to a billing issue or blocked free-tier usage in the given region.

                                                                                                                      Unfortunately, there is nothing Qovery can do. You need to reach out directly to your cloud provider to get more details and get your account unblocked.

                                                                                                                      More

                                                                                                                      You are looking to troubleshoot your application with Qovery? Read this very short guide

                                                                                                                      +

                                                                                                                      Cluster Troubleshoot

                                                                                                                      Within this section you will find the common errors you might encounter when deploying or running your clusters with Qovery

                                                                                                                      I don't have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?

                                                                                                                      Unfortunately, there is no automatic way to do it with Qovery once we don't have access. However, AWS provides an easy way to retrieve those resources, so you can manually perform the delete. To do so, go on the AWS web console, and search for "Resource Groups & Tag Editor" service, then:

                                                                                                                      Resource groups search by tag

                                                                                                                      1. Click on "Create Resource Group".
                                                                                                                      2. In Tags, enter: "ClusterLongId".
                                                                                                                      3. In the "Optional Tag value", enter the Qovery cluster ID. If you don't have it, let AWS suggest it for you. If you have Qovery deployed elements remainings, it will propose the Cluster long ID automatically.
                                                                                                                      4. Click on "Add".
                                                                                                                      5. You should see the filter with the information you just entered.
                                                                                                                      6. Click on "Preview groups resources".
                                                                                                                      7. You'll have all elements deployed by Qovery and you can delete what you want.

                                                                                                                      My cloud account has been blocked, what should I do?

                                                                                                                      If you encounter this kind of error during an infrastructure deployment (including managed DBs):

                                                                                                                      This account is currently blocked by your cloud provider, please contact them directly.

                                                                                                                      Or

                                                                                                                      This AWS account is currently blocked and not recognized as a valid account.
                                                                                                                      Please contact aws-verification@amazon.com directly to get more details.
                                                                                                                      Maybe you are not allowed to use your free tier in this region?
                                                                                                                      Maybe you need to provide billing info?

                                                                                                                      This error is likely due to a billing issue or blocked free-tier usage in the given region.

                                                                                                                      Unfortunately, there is nothing Qovery can do. You need to reach out directly to your cloud provider to get more details and get your account unblocked.

                                                                                                                      More

                                                                                                                      You are looking to troubleshoot your application with Qovery? Read this very short guide

                                                                                                                      - + - + diff --git a/docs/using-qovery/troubleshoot/index.html b/docs/using-qovery/troubleshoot/index.html index bd5bceeed4..a015d6a02a 100644 --- a/docs/using-qovery/troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                      -

                                                                                                                      Troubleshoot

                                                                                                                      This guide is divided into three sections that will guide you through your troubleshooting depending on your issue:

                                                                                                                      • Service Deployment troubleshoot: you will find here the most common deployment errors and their solutions.
                                                                                                                      • Service Run troubleshoot: you will find here the most common run errors and their solutions.
                                                                                                                      • Cluster troubleshoot: you will find here the error you might find while deploying or updating a cluster.
                                                                                                                      Cluster troubleshoot
                                                                                                                      Service deployment troubleshoot
                                                                                                                      Service run troubleshoot
                                                                                                                      Resources
                                                                                                                        +

                                                                                                                        Troubleshoot

                                                                                                                        This guide is divided into three sections that will guide you through your troubleshooting depending on your issue:

                                                                                                                        • Service Deployment troubleshoot: you will find here the most common deployment errors and their solutions.
                                                                                                                        • Service Run troubleshoot: you will find here the most common run errors and their solutions.
                                                                                                                        • Cluster troubleshoot: you will find here the error you might find while deploying or updating a cluster.
                                                                                                                        Cluster troubleshoot
                                                                                                                        Service deployment troubleshoot
                                                                                                                        Service run troubleshoot
                                                                                                                        Resources
                                                                                                                          - + - + diff --git a/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html b/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html index 9a5bcc8cdd..b4956ab5bc 100644 --- a/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@

                                                                                                                          Service Deployment Troubleshoot

                                                                                                                          Within this section you will find the common errors you might encounter when deploying your services with Qovery

                                                                                                                          Generic

                                                                                                                          Liveness/Readiness failed, connect: connection refused

                                                                                                                          If you encounter this kind of error on the Liveness and/or Readiness probe during an application deployment phase:

                                                                                                                          Readiness probe failed: dial tcp 100.64.2.230:80: connect: connection refused
                                                                                                                          Liveness probe failed: dial tcp 100.64.2.230:80: connect: connection refused

                                                                                                                          That means your application may not able to start, or has started but takes too many time to start.

                                                                                                                          Here are the possible reasons for starting issues you should check:

                                                                                                                          1. The declared port on Qovery (here 80), does not match your application's opening port. Check your application port, and set the correct port to your application configuration.

                                                                                                                          2. Ensure your application is not listening onto localhost (127.0.0.1) or a specific IP. But set it to all interfaces (0.0.0.0).

                                                                                                                          3. Your application takes too long to start and the liveness probe is flagging your application as unhealthy. Try to increase the Liveness Initial Delay parameter, to inform Kubernetes to delay the time before checking your application availability. Set it for example to 120.

                                                                                                                          0/x nodes are available: x insufficient cpu/ram

                                                                                                                          If you encounter this kind of error during an application deployment phase:

                                                                                                                          0/1 nodes are available: 1 Insufficient cpu (or ram).

                                                                                                                          That means that we cannot reserve the necessary resources to deploy your application or database on your cluster due to an insufficient amount of CPU or RAM. Moreover, the cluster auto-scaler cannot be triggered since it has already reached the maximum number of instances for your cluster (valid only for Managed Kubernetes clusters).

                                                                                                                          Here are the possible solutions you can apply:

                                                                                                                          • Reduce the resources (CPU/RAM) allocated to your existing/new service. Have a review of the deployed services and see if you can save up some resources by reducing their CPU/RAM setting. If you are using a K3S (EC2) cluster, stop your service before changing the settings. Remember to re-deploy the applications when you edit the resource. Have a look at the resource section for more information.

                                                                                                                          • Select a bigger instance type for your cluster (in terms of CPU/RAM). By increasing it, it will unlock the deployment of your application (since new resources have been added). Check your cluster settings, and change the instance type of your cluster.

                                                                                                                          • (only for Managed kubernets clusters) Increase the maximum number of nodes of your cluster. By increasing it, it will allow the cluster autoscaler to add a new node and allow the deployment of your application (since new resources have been added). Check your cluster settings, and increase the maximum number of nodes of your cluster.

                                                                                                                          Please note that application resource consumption and application resource allocation are not the same. Have a look at the resource section for more information

                                                                                                                          My app is crashing during deployment, how do I connect to investigate?

                                                                                                                          Goal: You want to connect to your container's application to debug your application

                                                                                                                          First, try to use qovery shell command from the Qovery CLI. It's a safe method to connect to your container and debug your application.

                                                                                                                          If your app is crashing in the first seconds, you'll lose the connection to your container, making the debug almost impossible, then continue reading.

                                                                                                                          Your app is crashing very quickly, here is how to keep the full control of your container:

                                                                                                                          1. Temporary delete the application port from your application configuration. This to avoid Kubernetes to restart the container when the port is not open.

                                                                                                                          2. Into your Dockerfile, comment your EXEC or ENTRYPOINT and add a way to make your container sleep. For example:

                                                                                                                            #CMD ["npm", "run", "start"]
                                                                                                                            CMD ["tail", "-f", "/dev/null"]

                                                                                                                            Commit and push your changes to trigger a new deployment (trigger it manually from the Qovery console if it's not the case).

                                                                                                                          3. Once the deployment done, you can use qovery shell command to connect to your container and debug.

                                                                                                                          Can't get my SSL / TLS Certificate

                                                                                                                          When a custom domain is added to an application, it must be configured on your side according to the instructions displayed:

                                                                                                                          Custom Domain Configuration

                                                                                                                          You can check that your custom domain is well configured using the following command: dig CNAME ${YOUR_CUSTOM_DOMAIN} +short. On the domain above, we can check the configuration is correct on Google DNS servers:

                                                                                                                          $ dig CNAME new.console.qovery.com +short @8.8.8.8
                                                                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.

                                                                                                                          It should return the same value as the one configured on Qovery. Otherwise, be patient (some minutes depending on DNS registrars) and ensure the DNS modification has been applied. Finally, you can check the content of the CNAME with:

                                                                                                                          $ dig A new.console.qovery.com +short @8.8.8.8
                                                                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.
                                                                                                                          ac8ad80d15e534c549ee10c87aaf82b4-bba68d8f58c6755d.elb.us-east-2.amazonaws.com.
                                                                                                                          3.19.99.1
                                                                                                                          18.188.137.104

                                                                                                                          We can see the destination contains other elements, indicating that the CNAME is pointing to an endpoint and correctly configured.

                                                                                                                          The SSL / TLS Certificate is generated for the whole group of custom domains you define:

                                                                                                                          • if one custom domain is misconfigured: the certificate can't be generated
                                                                                                                          • if the certificate has been generated once, but later one custom domain configuration is changed and misconfigured: the certificate can't be generated again

                                                                                                                          If you experience some invalid certificate, here is how you can fix the issue:

                                                                                                                          1. Identify the misconfigured custom domain(s) in your application settings.

                                                                                                                          2. Fix or delete them.

                                                                                                                          3. Redeploy your impacted application(s).

                                                                                                                          Git Submodules - Error while checkout submodules

                                                                                                                          Error Message:

                                                                                                                          Error message: Error while checkout submodules from repository https://github.com/user/repo.git.
                                                                                                                          Error: Error { code: -1, klass: 23, message: "authentication required but no callback set" }

                                                                                                                          There are limitations with the support for Git Submodules. Only public Submodules over HTTPS or private with embedded basic authentication are supported.

                                                                                                                          Solution: Follow our Git Submodules guide to make your application working with Git Submodules on Qovery.

                                                                                                                          Container image xxxxxx.xxx.xx failed to build: Cannot build Application "zXXXXXXXXX" due to an error with docker: Timeout

                                                                                                                          This error shows up in your deployment logs when the application takes more time to build than the maximum build allowed time (today 1800 seconds).

                                                                                                                          If your application needs more time to build, increase parameter build.timeout_max_sec within your application advanced settings and trigger again the deployment.

                                                                                                                          Lifecycle Jobs / Cronjobs

                                                                                                                          Joib failed: either it couldn't be executed correctly after X retries or its execution didn't finish after Y minutes

                                                                                                                          This errors occurs in the following two cases:

                                                                                                                          Job code execution failures The pod running your lifecycle job is crashing due to an exception in your code or OOM issue. Have a look at the Live Logs of your Lifecycle job to understand from where the issue is coming from your code.

                                                                                                                          Job execution timeout -The code run in your job is taking more time than expected and thus it's execution is stopped. If your code needs more time to be excecuted, increase the Max Duration value within the Lifecycle Job configuration page

                                                                                                                          Database

                                                                                                                          SnapshotQuotaExceeded - while deleting a managed DB

                                                                                                                          This errors occurs because Qovery creates a snapshot before the delete of the database. This to avoid a user mistake who delete a database accidentally.

                                                                                                                          To fix this issue, you have 2 solutions:

                                                                                                                          1. You certainly have useless snapshots, from old databases or old ones you don't want to keep anymore. Delete them directly from your Cloud Provider web interface. Here is an example on AWS:

                                                                                                                            • Search for the database service (here RDS)
                                                                                                                            • Select the Snapshots menu
                                                                                                                            • Select the snapshots to delete

                                                                                                                            Database snapshots

                                                                                                                          2. Open a ticket to the Cloud Provider support, and as to raise this limit.

                                                                                                                          +The code run in your job is taking more time than expected and thus it's execution is stopped. If your code needs more time to be excecuted, increase the Max Duration value within the Lifecycle Job configuration page

                                                                                                                          Database

                                                                                                                          SnapshotQuotaExceeded - while deleting a managed DB

                                                                                                                          This errors occurs because Qovery creates a snapshot before the delete of the database. This to avoid a user mistake who delete a database accidentally.

                                                                                                                          To fix this issue, you have 2 solutions:

                                                                                                                          1. You certainly have useless snapshots, from old databases or old ones you don't want to keep anymore. Delete them directly from your Cloud Provider web interface. Here is an example on AWS:

                                                                                                                            • Search for the database service (here RDS)
                                                                                                                            • Select the Snapshots menu
                                                                                                                            • Select the snapshots to delete

                                                                                                                            Database snapshots

                                                                                                                          2. Open a ticket to the Cloud Provider support, and as to raise this limit.

                                                                                                                          - + - + diff --git a/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html b/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html index cb0bd08404..089384db7e 100644 --- a/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@

                                                                                                                          Service Run Troubleshoot

                                                                                                                          Within this section you will find the common errors you might encounter when running your services with Qovery

                                                                                                                          My app is crashing, how do I connect to investigate?

                                                                                                                          Goal: You want to connect to your container's application to debug your application

                                                                                                                          First, try to use qovery shell command from the Qovery CLI. It's a safe method to connect to your container and debug your application.

                                                                                                                          If your app is crashing in the first seconds, you'll lose the connection to your container, making the debug almost impossible, then continue reading.

                                                                                                                          Your app is crashing very quickly, here is how to keep the full control of your container:

                                                                                                                          1. Temporary delete the application port from your application configuration. This to avoid Kubernetes to restart the container when the port is not open.

                                                                                                                          2. Into your Dockerfile, comment your EXEC or ENTRYPOINT and add a way to make your container sleep. For example:

                                                                                                                            #CMD ["npm", "run", "start"]
                                                                                                                            CMD ["tail", "-f", "/dev/null"]

                                                                                                                            Commit and push your changes to trigger a new deployment (trigger it manually from the Qovery console if it's not the case).

                                                                                                                          3. Once the deployment done, you can use qovery shell command to connect to your container and debug.

                                                                                                                          I can't access my application logs

                                                                                                                          If you are deploying a helm service, to get all the Qovery features (access your container logs, apply the stop/restart actions, display the pod status in the overview page), make sure to create an override and assign the macros qovery.labels.service and qovery.annotations.service to the labels and annotations of any deployed Pods/Deployments/Services/Jobs.

                                                                                                                          Override example:

                                                                                                                          commonLabels:
                                                                                                                          mylabel: "test"
                                                                                                                          qovery.labels.service
                                                                                                                          annotations:
                                                                                                                          qovery.annotations.service

                                                                                                                          These macros will be automatically replaced by Qovery during the deployment phase.

                                                                                                                          +If you don't make a copy, doing this procedure directly on the PRODUCTION application will lead to a downtime in your service. Be sure of what you're doing before going ahead!

                                                                                                                          Your app is crashing very quickly, here is how to keep the full control of your container:

                                                                                                                          1. Temporary delete the application port from your application configuration. This to avoid Kubernetes to restart the container when the port is not open.

                                                                                                                          2. Into your Dockerfile, comment your EXEC or ENTRYPOINT and add a way to make your container sleep. For example:

                                                                                                                            #CMD ["npm", "run", "start"]
                                                                                                                            CMD ["tail", "-f", "/dev/null"]

                                                                                                                            Commit and push your changes to trigger a new deployment (trigger it manually from the Qovery console if it's not the case).

                                                                                                                          3. Once the deployment done, you can use qovery shell command to connect to your container and debug.

                                                                                                                          I can't access my application logs

                                                                                                                          If you are deploying a helm service, to get all the Qovery features (access your container logs, apply the stop/restart actions, display the pod status in the overview page), make sure to create an override and assign the macros qovery.labels.service and qovery.annotations.service to the labels and annotations of any deployed Pods/Deployments/Services/Jobs.

                                                                                                                          Override example:

                                                                                                                          commonLabels:
                                                                                                                          mylabel: "test"
                                                                                                                          qovery.labels.service
                                                                                                                          annotations:
                                                                                                                          qovery.annotations.service

                                                                                                                          These macros will be automatically replaced by Qovery during the deployment phase.

                                                                                                                          - + - + diff --git a/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index 857546d8fb..ac90636f6e 100644 --- a/guides/advanced/continuous-integration/index.html +++ b/guides/advanced/continuous-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Continuous Integration

                                                                                                                          Learn how to integrate your Continuous Integration (CI) platform with Qovery

                                                                                                                          Qovery integrates with all existing Continuous Integration platforms. We have a guide for the most popular CI platforms. However, even if you don't find your CI platform, you can see here that integrating Qovery into a CI is just a matter of:

                                                                                                                          1. Adding a new step into your CI pipeline
                                                                                                                          2. Installing the Qovery CLI
                                                                                                                          3. Running the qovery <application|container|lifecycle|cronjob> deploy ... commands

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to integrate Qovery into your CI platform:

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Step-by-step guide to integrate GitHub ActionsStep-by-step guide to learn how to integrate GitHub Actions with QoveryQovery
                                                                                                                          Integrate GitHub ActionsLearn how to integrate GitHub Actions with QoveryQovery
                                                                                                                          Integrate GitLab CILearn how to integrate GitLab CI with QoveryQovery
                                                                                                                          Integrate Circle CILearn how to integrate Circle CI with QoveryQovery
                                                                                                                          Integrate JenkinsLearn how to integrate Jenkins with QoveryQovery
                                                                                                                          Forum "GitHub Actions"List "GitHub Actions" threads from Qovery community forumCommunity
                                                                                                                          Forum "GitLab CI"List "GitLab CI" threads from Qovery community forumCommunity
                                                                                                                          Forum "Circle CI"List "Circle CI" threads from Qovery community forumCommunity
                                                                                                                          Forum "Jenkins"List "Jenkins" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          2 min read
                                                                                                                          Updated

                                                                                                                          Qovery integrates with all existing Continuous Integration platforms. We have a guide for the most popular CI platforms. However, even if you don't find your CI platform, you can see here that integrating Qovery into a CI is just a matter of:

                                                                                                                          1. Adding a new step into your CI pipeline
                                                                                                                          2. Installing the Qovery CLI
                                                                                                                          3. Running the qovery <application|container|lifecycle|cronjob> deploy ... commands

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to integrate Qovery into your CI platform:

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Step-by-step guide to integrate GitHub ActionsStep-by-step guide to learn how to integrate GitHub Actions with QoveryQovery
                                                                                                                          Integrate GitHub ActionsLearn how to integrate GitHub Actions with QoveryQovery
                                                                                                                          Integrate GitLab CILearn how to integrate GitLab CI with QoveryQovery
                                                                                                                          Integrate Circle CILearn how to integrate Circle CI with QoveryQovery
                                                                                                                          Integrate JenkinsLearn how to integrate Jenkins with QoveryQovery
                                                                                                                          Forum "GitHub Actions"List "GitHub Actions" threads from Qovery community forumCommunity
                                                                                                                          Forum "GitLab CI"List "GitLab CI" threads from Qovery community forumCommunity
                                                                                                                          Forum "Circle CI"List "Circle CI" threads from Qovery community forumCommunity
                                                                                                                          Forum "Jenkins"List "Jenkins" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/costs-control/index.html b/guides/advanced/costs-control/index.html index f5894c3a1e..87c8a5b334 100644 --- a/guides/advanced/costs-control/index.html +++ b/guides/advanced/costs-control/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Costs Control

                                                                                                                          Learn how to keep control of your costs with Qovery

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          Contents

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/deploy-api-gateway/index.html b/guides/advanced/deploy-api-gateway/index.html index 086deaf783..8bfb613c5b 100644 --- a/guides/advanced/deploy-api-gateway/index.html +++ b/guides/advanced/deploy-api-gateway/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Deploy API Gateway

                                                                                                                          Learn how to deploy an API Gateway with Qovery

                                                                                                                          An API Gateway is a web service that acts as an interface between consumers and your services. It acts as a single point of entry into a system and is responsible for request routing, composition, and protocol translation. It's essentially a middleman that processes requests from clients to services.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to deploy your API Gateway with Qovery

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          NGINX API GatewayDeploy a NGINX API Gateway with QoveryQovery
                                                                                                                          Forum "API Gateway"List "API Gateway" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated

                                                                                                                          An API Gateway is a web service that acts as an interface between consumers and your services. It acts as a single point of entry into a system and is responsible for request routing, composition, and protocol translation. It's essentially a middleman that processes requests from clients to services.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to deploy your API Gateway with Qovery

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          NGINX API GatewayDeploy a NGINX API Gateway with QoveryQovery
                                                                                                                          Forum "API Gateway"List "API Gateway" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/deploy-aws-services/index.html b/guides/advanced/deploy-aws-services/index.html index b5d4c69774..62ae57ee24 100644 --- a/guides/advanced/deploy-aws-services/index.html +++ b/guides/advanced/deploy-aws-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Deploy AWS Services

                                                                                                                          Learn how to deploy any AWS services with Qovery
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          2 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/advanced/deploy-external-services/index.html b/guides/advanced/deploy-external-services/index.html index 7162ef9048..15097d880c 100644 --- a/guides/advanced/deploy-external-services/index.html +++ b/guides/advanced/deploy-external-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Deploy External Services

                                                                                                                          Learn how to deploy any external services with Qovery

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          Contents

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/deploy-frontend/index.html b/guides/advanced/deploy-frontend/index.html index 8a982d2052..23a841630a 100644 --- a/guides/advanced/deploy-frontend/index.html +++ b/guides/advanced/deploy-frontend/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          Stats
                                                                                                                          2 min read
                                                                                                                          Updated

                                                                                                                          Qovery is versatile and has the ability to cater to a wide range of frontend applications. Whether you're working with a Single-Page Application (SPA), a Server-Side Rendered (SSR) applications, or a general web app, Qovery has you covered.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to deploy your different type of Frontend apps with Qovery.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Deploy SPA containerDeploy your frontend SPA (React) app inside a container with a NGINX web serverQovery
                                                                                                                          Deploy SPA container with CloudfrontDeploy your frontend SPA (React) app inside a container with a NGINX web server and expose it via Cloudfront CDNQovery
                                                                                                                          Use Cloudflare as a CDNUse Cloudflare as a CDN for your frontend SPA (React) appQovery
                                                                                                                          Deploy SSR containerDeploy your frontend SSR (NextJS) app inside a container with a NGINX web serverQovery
                                                                                                                          Deploy SSR on CloudfrontDeploy your frontend SSR (NextJS) app on AWS CloudfrontQovery
                                                                                                                          "React" forum threadsList "React" threads from Qovery community forumCommunity
                                                                                                                          "NextJS" forum threadsList "NextJS" threads from Qovery community forumCommunity
                                                                                                                          "Angular" forum threadsList "Angular" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +You can change them in your app advanced settings.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Deploy SPA containerDeploy your frontend SPA (React) app inside a container with a NGINX web serverQovery
                                                                                                                          Deploy SPA container with CloudfrontDeploy your frontend SPA (React) app inside a container with a NGINX web server and expose it via Cloudfront CDNQovery
                                                                                                                          Use Cloudflare as a CDNUse Cloudflare as a CDN for your frontend SPA (React) appQovery
                                                                                                                          Deploy SSR containerDeploy your frontend SSR (NextJS) app inside a container with a NGINX web serverQovery
                                                                                                                          Deploy SSR on CloudfrontDeploy your frontend SSR (NextJS) app on AWS CloudfrontQovery
                                                                                                                          "React" forum threadsList "React" threads from Qovery community forumCommunity
                                                                                                                          "NextJS" forum threadsList "NextJS" threads from Qovery community forumCommunity
                                                                                                                          "Angular" forum threadsList "Angular" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/helm-chart/index.html b/guides/advanced/helm-chart/index.html index 2d03413661..51aba654cf 100644 --- a/guides/advanced/helm-chart/index.html +++ b/guides/advanced/helm-chart/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Helm Charts

                                                                                                                          Learn how to deploy Helm charts with Qovery

                                                                                                                          Qovery runs on top of Kubernetes and allows you to deploy any Helm chart on your cluster. To learn more about Helm, please visit the official website.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to deploy your Helm Charts with Qovery.

                                                                                                                          TitleDescriptionOfficial
                                                                                                                          Deploy your Helm ChartsHow to deploy your Helm Charts (example with Kubecost)Yes
                                                                                                                          ForumList "Helm Charts" threads from Qovery community forumno

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated

                                                                                                                          Qovery runs on top of Kubernetes and allows you to deploy any Helm chart on your cluster. To learn more about Helm, please visit the official website.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to deploy your Helm Charts with Qovery.

                                                                                                                          TitleDescriptionOfficial
                                                                                                                          Deploy your Helm ChartsHow to deploy your Helm Charts (example with Kubecost)Yes
                                                                                                                          ForumList "Helm Charts" threads from Qovery community forumno

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/index.html b/guides/advanced/index.html index 03dea5c41c..ff7c5f6155 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,9 +26,9 @@ - + - + @@ -74,14 +74,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index 526770ed1d..ddb68bb44b 100644 --- a/guides/advanced/microservices/index.html +++ b/guides/advanced/microservices/index.html @@ -26,9 +26,9 @@ - + - + @@ -53,14 +53,14 @@
                                                                                                                          client.connect(err => {
                                                                                                                          if (err) {
                                                                                                                          console.error('connection error', err.stack)
                                                                                                                          } else {
                                                                                                                          console.log('connected')
                                                                                                                          }
                                                                                                                          })

                                                                                                                          This is it! After deploying the database, application and executing the code snippet, you should see the message connected.

                                                                                                                          We made use of BUILT_IN variables injected by Qovery to make it easy to consume all the services within the environment.

                                                                                                                        • Consume internal APIs

                                                                                                                          In this step, we'll use the private API of our APP_B in our APP_A over a private network. We have already configured everything to make it work. The only missing step is the configuration in APP_A - it needs to know how to access our APP_B.

                                                                                                                          In the example below, we'll use Node.js and axios to create an HTTP client able to consume the API of APP_B:

                                                                                                                          Now, you can configure your HTTP client in the frontend application to target your backend API:

                                                                                                                          const axios = require('axios');
                                                                                                                          const appBAddress = "http://" + process.env.QOVERY_APPLICATION_APP_B_HOST + ":" + process.env.QOVERY_APPLICATION_APP_B_PORT
                                                                                                                          axios.get(appBAddress + '/api/users')
                                                                                                                          .then(response => {
                                                                                                                          console.log(response.data);
                                                                                                                          })
                                                                                                                          .catch(error => {
                                                                                                                          console.log(error);
                                                                                                                          });

                                                                                                                          This is it! Every request using the API client we have just configured will consume the API of APP_B over the secure, internal network.

                                                                                                                          Once again, we used the BUILT_IN secrets. Read more about them here

                                                                                                                        • Consume the public API in the frontend application

                                                                                                                          In this step, we'll deploy a frontend application and consume our public API exposed by APP_A.

                                                                                                                          In the first step, create your frontend application.

                                                                                                                          After the application is created, we can easily configure it to consume our public API. All we need to do is to make use of the BUILT_IN secrets. See how to achieve it in a Nuxt.js example below:

                                                                                                                          export default {
                                                                                                                          env: {
                                                                                                                          apiUrl: process.env.QOVERY_APPLICATION_APP_A_URL
                                                                                                                          }
                                                                                                                          }
                                                                                                                          import axios from 'axios'
                                                                                                                          -
                                                                                                                          export default axios.create({
                                                                                                                          baseURL: process.env.apiUrl
                                                                                                                          })

                                                                                                                          After providing the configuration from above, deploy your frontend application.

                                                                                                                          Now our frontend application will be able to consume the API exposed by the publicly exposed APP_A.

                                                                                                                        • Summary

                                                                                                                          In this guide, we deployed two microservices that communicate over the internal network. We also deployed a frontend application that makes use of a public API exposed by one of our applications. At the same time, we deployed a database and connected it to the second of our backend microservices.

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          export default axios.create({
                                                                                                                          baseURL: process.env.apiUrl
                                                                                                                          })

                                                                                                                          After providing the configuration from above, deploy your frontend application.

                                                                                                                          Now our frontend application will be able to consume the API exposed by the publicly exposed APP_A.

                                                                                                                          Summary

                                                                                                                          In this guide, we deployed two microservices that communicate over the internal network. We also deployed a frontend application that makes use of a public API exposed by one of our applications. At the same time, we deployed a database and connected it to the second of our backend microservices.

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/migration/index.html b/guides/advanced/migration/index.html index 5ae4b5e907..68756f4d56 100644 --- a/guides/advanced/migration/index.html +++ b/guides/advanced/migration/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Migration

                                                                                                                          Learn how to migrate your applications with Qovery

                                                                                                                          You plan to migrate to AWS (Amazon Web Services), GCP (Google Cloud Platform) or Microsoft Azure with Qovery? This guide is for you.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to migrate your applications to your favorite cloud provider with Qovery.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Migrate from Heroku to AWSComplete guide to migrate from Heroku to AWS with QoveryQovery
                                                                                                                          Migration checklistComprehensive migration checklist to read before migrating your applications with Qovery (coming soon)Qovery
                                                                                                                          ForumList "Migration" threads from Qovery community forumCommunity

                                                                                                                          Migration assistance

                                                                                                                          Qovery provides a migration assistance to help you migrate your applications with Qovery. Contact us via the Qovery Console and ask for migration assistance via the chat.

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          2 min read
                                                                                                                          Updated

                                                                                                                          You plan to migrate to AWS (Amazon Web Services), GCP (Google Cloud Platform) or Microsoft Azure with Qovery? This guide is for you.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to migrate your applications to your favorite cloud provider with Qovery.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Migrate from Heroku to AWSComplete guide to migrate from Heroku to AWS with QoveryQovery
                                                                                                                          Migration checklistComprehensive migration checklist to read before migrating your applications with Qovery (coming soon)Qovery
                                                                                                                          ForumList "Migration" threads from Qovery community forumCommunity

                                                                                                                          Migration assistance

                                                                                                                          Qovery provides a migration assistance to help you migrate your applications with Qovery. Contact us via the Qovery Console and ask for migration assistance via the chat.

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/monitoring/index.html b/guides/advanced/monitoring/index.html index 04047b4bc6..780ca4ca19 100644 --- a/guides/advanced/monitoring/index.html +++ b/guides/advanced/monitoring/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Monitoring

                                                                                                                          Learn how to monitor your infrastructure and your apps with Qovery
                                                                                                                          • Prometheus & Grafana
                                                                                                                          • Datadog

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          Contents
                                                                                                                          • Prometheus & Grafana
                                                                                                                          • Datadog

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/monorepository/index.html b/guides/advanced/monorepository/index.html index 5e74c428c4..e945ed8bc9 100644 --- a/guides/advanced/monorepository/index.html +++ b/guides/advanced/monorepository/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          Mono repository

                                                                                                                          How to deploy applications using Monorepository with Qovery

                                                                                                                          Qovery provides a very simple way of working with monorepositories. You can deploy multiple applications using the same git repository or deploy the same application in many different modes/configurations.

                                                                                                                          Deploying multiple applications using one repository

                                                                                                                          1. Navigate to Console

                                                                                                                          2. Create new applications or navigate to existing ones

                                                                                                                          3. Navigate to application settings

                                                                                                                            Monorepository

                                                                                                                          4. To deploy multiple apps using one repository, set up the app to target your monorepo. Additionally, you need to set up the folder in which your application resides.

                                                                                                                            First application

                                                                                                                            Monorepository

                                                                                                                            Second application

                                                                                                                            Monorepository

                                                                                                                            As you see in the examples above, we used one repository (poc-factory/tweetifier) in two applications:

                                                                                                                            • timescale
                                                                                                                            • core

                                                                                                                            All we need to do to deploy multiple applications using one repository is:

                                                                                                                            • Select the application name
                                                                                                                            • Select our repository
                                                                                                                            • Select the application root folder

                                                                                                                            That's it. Using monorepositories with Qovery is that simple.

                                                                                                                            Those applications may be a part of the same project or different projects; it's all up to you and your configuration.

                                                                                                                          Deploying application with multiple configurations using one repository

                                                                                                                          A special case of monorepository is a situation when one repository is used to deploy multiple applications with the same source code but different configurations or modes. Application behaviour depends on provided config, like environment variables and secrets.

                                                                                                                          Qovery supports this case well. The steps do not differ much from the steps from the previous example:

                                                                                                                          1. Navigate to Console

                                                                                                                          2. Create new applications or navigate to existing ones

                                                                                                                          3. Navigate to application settings

                                                                                                                            Monorepository

                                                                                                                          4. Configure application repositories:

                                                                                                                            First application

                                                                                                                            Monorepository

                                                                                                                            Second application

                                                                                                                            Monorepository

                                                                                                                          5. As you see in the examples above, we used one repository (poc-factory/tweetifier) in two applications:

                                                                                                                            • app-1
                                                                                                                            • app-2

                                                                                                                            Those applications use the same application root path - /, so they can be build using the same source code. To adjust the behavior of applications to meet your needs, use environment variables or secrets. -It allows you to run multiple applications using the same source code in different modes.

                                                                                                                            You can set up secret or env variables in your application Environment Variables section:

                                                                                                                            Monorepository

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +It allows you to run multiple applications using the same source code in different modes.

                                                                                                                          You can set up secret or env variables in your application Environment Variables section:

                                                                                                                          Monorepository

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/production/index.html b/guides/advanced/production/index.html index fbd80d9721..bc611f26e4 100644 --- a/guides/advanced/production/index.html +++ b/guides/advanced/production/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Production

                                                                                                                          Learn how to run your Production with Qovery

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          Contents

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/seed-database/index.html b/guides/advanced/seed-database/index.html index 38df0045ac..f591231542 100644 --- a/guides/advanced/seed-database/index.html +++ b/guides/advanced/seed-database/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          Seed Database

                                                                                                                          Learn how to seed your database with Qovery

                                                                                                                          Seeding a database is a common task when developing an application. It allows you to populate your database with some data to test your application. -Qovery provides multiple ways to seed your database.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to seed your database with Qovery.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Seed your database with a SQL script (simple)Seed your database with a SQL script and a Docker ENTRYPOINT instructionQovery
                                                                                                                          Seed your database with a SQL script (advanced)Seed your database with a SQL script and a Lifecycle JobQovery
                                                                                                                          Seed your database with Replibyte (advanced)Seed your database with Replibyte and a Lifecycle JobQovery
                                                                                                                          Migrate your database schemaMigrate your database schema with a Docker ENTRYPOINT instructionQovery
                                                                                                                          ForumList "Seed Database" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +Qovery provides multiple ways to seed your database.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to seed your database with Qovery.

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Seed your database with a SQL script (simple)Seed your database with a SQL script and a Docker ENTRYPOINT instructionQovery
                                                                                                                          Seed your database with a SQL script (advanced)Seed your database with a SQL script and a Lifecycle JobQovery
                                                                                                                          Seed your database with Replibyte (advanced)Seed your database with Replibyte and a Lifecycle JobQovery
                                                                                                                          Migrate your database schemaMigrate your database schema with a Docker ENTRYPOINT instructionQovery
                                                                                                                          ForumList "Seed Database" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/advanced/terraform/index.html b/guides/advanced/terraform/index.html index 24d6f5456e..ed450e01ad 100644 --- a/guides/advanced/terraform/index.html +++ b/guides/advanced/terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Terraform

                                                                                                                          Learn how to use Terraform with Qovery
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/advanced/use-preview-environments/index.html b/guides/advanced/use-preview-environments/index.html index bb1a0c0f3a..0894502c7f 100644 --- a/guides/advanced/use-preview-environments/index.html +++ b/guides/advanced/use-preview-environments/index.html @@ -26,9 +26,9 @@ - + - + @@ -47,14 +47,14 @@

                                                                                                                          Preview Environments

                                                                                                                          Learn how to use and leverage Preview Environments with Qovery

                                                                                                                          Use Preview Environment to get early feedback on your application changes by creating a dedicated environment for each of your pull requests. Your production environment runs 24/7, where your other environments may not need to run all day long. -E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                                                                                                                          Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                                                                                                                          Recommendations

                                                                                                                          If you are using Qovery to run your Production, we recommend using Preview Environments on a separate cluster. This will ensure that your Production is not impacted by the Preview Environments and vice versa.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to use and take advantage of Qovery Preview Environments:

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Getting Started with Preview EnvironmentLearn how to get started with Qovery Preview EnvironmentsQovery
                                                                                                                          Customize preview URLLearn how to customize your Preview URL with the Qovery CLIQovery
                                                                                                                          Automatically stop unused Preview EnvironmentsLearn how to automatically teardown your Preview Environments on a specific scheduleQovery
                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and QoveryStep-by-step guide to build e2e testing ephemeral environments with GitHub Actions and QoveryQovery
                                                                                                                          Forum "Preview Environment"List "Preview Environments" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          +E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                                                                                                                          Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                                                                                                                          Recommendations

                                                                                                                          If you are using Qovery to run your Production, we recommend using Preview Environments on a separate cluster. This will ensure that your Production is not impacted by the Preview Environments and vice versa.

                                                                                                                          Resources

                                                                                                                          Here are some resources you can use to use and take advantage of Qovery Preview Environments:

                                                                                                                          TitleDescriptionAuthor
                                                                                                                          Getting Started with Preview EnvironmentLearn how to get started with Qovery Preview EnvironmentsQovery
                                                                                                                          Customize preview URLLearn how to customize your Preview URL with the Qovery CLIQovery
                                                                                                                          Automatically stop unused Preview EnvironmentsLearn how to automatically teardown your Preview Environments on a specific scheduleQovery
                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and QoveryStep-by-step guide to build e2e testing ephemeral environments with GitHub Actions and QoveryQovery
                                                                                                                          Forum "Preview Environment"List "Preview Environments" threads from Qovery community forumCommunity

                                                                                                                          Q&A

                                                                                                                          Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                                                                          - + - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index 52133291c5..acacab86b9 100644 --- a/guides/getting-started/create-a-database/index.html +++ b/guides/getting-started/create-a-database/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@ PostgreSQL database and connect it to our NodeJS app.

                                                                                                                          1. Create a PostgreSQL database

                                                                                                                          2. Connect your application

                                                                                                                            Now, we need to connect our application to our database. The credentials (URI, Username, Password ...) are available through environment variables. They are injected by Qovery when your application runs.

                                                                                                                            To connect our NodeJS application to our PostgreSQL database, we only have to:

                                                                                                                            • Use the NodeJS PostgreSQL client (pg)
                                                                                                                            • Use QOVERY_DATABASE_MY_DB_CONNECTION_URI into our code

                                                                                                                            Add the pg dependency into package.json

                                                                                                                            {
                                                                                                                            /* ... */
                                                                                                                            "dependencies": {
                                                                                                                            /* ... */
                                                                                                                            "pg": "^7.17.0"
                                                                                                                            }
                                                                                                                            }

                                                                                                                            Connect our application to PostgreSQL (see documentation)

                                                                                                                            const { Pool } = require('pg')
                                                                                                                            const pool = new Pool({
                                                                                                                            connectionString: process.env.QOVERY_DATABASE_MY_DB_CONNECTION_URI,
                                                                                                                            })
                                                                                                                            -
                                                                                                                            // your can use your connection pool now ...

                                                                                                                            Nothing more, well done! You can now be able to use your database.

                                                                                                                          Next Steps

                                                                                                                          Congratulations, your application has access to your PostgreSQL database. Now we will see how to add your custom domain to your service.

                                                                                                                          +
                                                                                                                          // your can use your connection pool now ...

                                                                                                                          Nothing more, well done! You can now be able to use your database.

                                                                                                                          Next Steps

                                                                                                                          Congratulations, your application has access to your PostgreSQL database. Now we will see how to add your custom domain to your service.

                                                                                                                          - + - + diff --git a/guides/getting-started/debugging/index.html b/guides/getting-started/debugging/index.html index 593c52f539..77701a7c16 100644 --- a/guides/getting-started/debugging/index.html +++ b/guides/getting-started/debugging/index.html @@ -26,9 +26,9 @@ - + - + @@ -47,14 +47,14 @@

                                                                                                                          Debugging

                                                                                                                          How to debug your application

                                                                                                                          Your application is running, but something goes wrong? In this guide, you'll learn how to debug your application and solve your problem to make it running smoothly.

                                                                                                                          Your application is running, but for some reason, it is not working as expected. Here are a few tips to find out what's going on.

                                                                                                                          Check the status of your app

                                                                                                                          Qovery expose in the interface the running status of your application which provides you some highlevel information of its healthiness. You can look in this section to know more about the Running Status

                                                                                                                          If the service crashes, its Running Status will be displayed as a red dot. If that's the case, you can have a look at the logs to investigate the reason behind.

                                                                                                                          Live Logs

                                                                                                                          If you need to see the log output of your application while it's running, qovery expose them to you in real-time thanks to the Logs interface. You can have a look at this section to know more.

                                                                                                                          You can use this information to find out what causes your application to behave incorrectly.

                                                                                                                          Deployment Logs

                                                                                                                          If your application fails to start, you can check what's the cause in its deployment logs. You can have a look at this section to have more information on the deployment logs and how to access them.

                                                                                                                          This view provides insight into the build and deployment process. If anything goes wrong, you can see all the required information to fix the problem here.

                                                                                                                          You can check the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                                                                                                          Monitoring

                                                                                                                          If you need more information about the resources consumed by your application, Qovery provides basic metrics about your CPU, memory and storage usage.

                                                                                                                          1. Navigate to Console

                                                                                                                          2. Choose your project, environment, and application.

                                                                                                                          3. In the main application view, you can see a table with the current application resource consumption.

                                                                                                                            Metrics

                                                                                                                          Alerting

                                                                                                                          We highly recommend using tools like Datadog, Sentry or NewRelic to manage your alerting. -Qovery will provide easy integrations in the coming release. Check out our roadmap

                                                                                                                          Do you need any help? Reach us on Discord

                                                                                                                          +Qovery will provide easy integrations in the coming release. Check out our roadmap

                                                                                                                          Do you need any help? Reach us on Discord

                                                                                                                          - + - + diff --git a/guides/getting-started/deploy-your-first-application/index.html b/guides/getting-started/deploy-your-first-application/index.html index bcc0f1cb1e..151391e028 100644 --- a/guides/getting-started/deploy-your-first-application/index.html +++ b/guides/getting-started/deploy-your-first-application/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Hello World. Deploy your first application.

                                                                                                                          How to deploy your first application with Qovery

                                                                                                                          Qovery is an easy way to deploy a full-stack application. Meaning, you can deploy a backend, frontend and a database seamlessly. In this guide, I'll show you how to deploy a template app.

                                                                                                                          Step-by-step tutorial

                                                                                                                          1. Sign up

                                                                                                                            Sign in to the Qovery web interface.

                                                                                                                            Qovery Sign-up page

                                                                                                                          2. Install Qovery

                                                                                                                            If you did not install Qovery yet, follow this documentation.

                                                                                                                          3. Deploy your first application

                                                                                                                            Here is a short video showing how to deploy your app with the Qovery Web interface.

                                                                                                                          Next Steps

                                                                                                                          To deploy your application, it's as simple as that. In the following article, we will see how to add a database. Let's get started!

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          2 min read
                                                                                                                          Updated

                                                                                                                          Qovery is an easy way to deploy a full-stack application. Meaning, you can deploy a backend, frontend and a database seamlessly. In this guide, I'll show you how to deploy a template app.

                                                                                                                          Step-by-step tutorial

                                                                                                                          1. Sign up

                                                                                                                            Sign in to the Qovery web interface.

                                                                                                                            Qovery Sign-up page

                                                                                                                          2. Install Qovery

                                                                                                                            If you did not install Qovery yet, follow this documentation.

                                                                                                                          3. Deploy your first application

                                                                                                                            Here is a short video showing how to deploy your app with the Qovery Web interface.

                                                                                                                          Next Steps

                                                                                                                          To deploy your application, it's as simple as that. In the following article, we will see how to add a database. Let's get started!

                                                                                                                          - + - + diff --git a/guides/getting-started/index.html b/guides/getting-started/index.html index e6e7cd2eaa..59218818f3 100644 --- a/guides/getting-started/index.html +++ b/guides/getting-started/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/getting-started/managing-environment-variables/index.html b/guides/getting-started/managing-environment-variables/index.html index 13242c6e8c..5437f2d1c9 100644 --- a/guides/getting-started/managing-environment-variables/index.html +++ b/guides/getting-started/managing-environment-variables/index.html @@ -26,9 +26,9 @@ - + - + @@ -55,14 +55,14 @@
                                                                                                                          server.listen(port, hostname, () => {
                                                                                                                          console.log(`Server running at http://${hostname}:${port}/`);
                                                                                                                          });

                                                                                                                          As you can see, to get access to your environment variable you just need to use process.env.ENABLE_DEBUG. Environment variables are injected at the build and run time.

                                                                                                                          This guide was an introduction on how to use the Environment Variables. To know more about Environment Variables and Secrets, -go to our detailed documentation.

                                                                                                                          +go to our detailed documentation.

                                                                                                                          - + - + diff --git a/guides/getting-started/setting-custom-domain/index.html b/guides/getting-started/setting-custom-domain/index.html index ab03a4ae82..30757ad81f 100644 --- a/guides/getting-started/setting-custom-domain/index.html +++ b/guides/getting-started/setting-custom-domain/index.html @@ -26,9 +26,9 @@ - + - + @@ -47,14 +47,14 @@

                                                                                                                          Custom domain

                                                                                                                          How to set and use your own domain

                                                                                                                          On Qovery, every application exposed publicly automatically gets a temporary qovery.io domain. You can also bring your domains to Qovery quickly. We handle TLS/SSL certificate creation and renewal, as well as automatic HTTP to HTTPS redirects for all your custom domains. Let’s -learn how to set up your domains on Qovery!

                                                                                                                          Tutorial

                                                                                                                          1. Add the domain to your app

                                                                                                                          2. Configure your DNS

                                                                                                                            Configure your DNS by adding a CNAME record pointing to the domain provided by Qovery in the previous step

                                                                                                                            If you have multiple public ports (or you want to have them in the future), make sure you add a CNAME for both yourdomain.com and *.yourdomain.com.

                                                                                                                            In this way:

                                                                                                                            • your application default port will be accessible via the domain yourdomain.com or by a subdomain equal to the port name (portNameA.yourdomain.com).
                                                                                                                            • the other application public port will be accessible via a subdomain equal to the portName (portNameB.yourdomain.com).

                                                                                                                            See the port setup of your application for more information on the port name setup.

                                                                                                                          3. Your domain is ready

                                                                                                                            You need to restart your app to use your custom domain on your application.

                                                                                                                          If you run into any trouble, find us on Discord. Our team and the community will be glad to help out.

                                                                                                                          +learn how to set up your domains on Qovery!

                                                                                                                          Tutorial

                                                                                                                          1. Add the domain to your app

                                                                                                                          2. Configure your DNS

                                                                                                                            Configure your DNS by adding a CNAME record pointing to the domain provided by Qovery in the previous step

                                                                                                                            If you have multiple public ports (or you want to have them in the future), make sure you add a CNAME for both yourdomain.com and *.yourdomain.com.

                                                                                                                            In this way:

                                                                                                                            • your application default port will be accessible via the domain yourdomain.com or by a subdomain equal to the port name (portNameA.yourdomain.com).
                                                                                                                            • the other application public port will be accessible via a subdomain equal to the portName (portNameB.yourdomain.com).

                                                                                                                            See the port setup of your application for more information on the port name setup.

                                                                                                                          3. Your domain is ready

                                                                                                                            You need to restart your app to use your custom domain on your application.

                                                                                                                          If you run into any trouble, find us on Discord. Our team and the community will be glad to help out.

                                                                                                                          - + - + diff --git a/guides/index.html b/guides/index.html index c49822e59b..32fbc96988 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,9 +26,9 @@ - + - + @@ -176,14 +176,14 @@
                                                                                                                          -

                                                                                                                          Qovery Guides

                                                                                                                          Thoughtful guides to help you get the most out of Qovery. Created and curated by the Qovery team.

                                                                                                                          Installation Guide

                                                                                                                          Advanced

                                                                                                                          Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.

                                                                                                                          Tutorial

                                                                                                                          Additional step-by-step resources to leverage even more Qovery
                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          +

                                                                                                                          Qovery Guides

                                                                                                                          Thoughtful guides to help you get the most out of Qovery. Created and curated by the Qovery team.

                                                                                                                          Installation Guide

                                                                                                                          Advanced

                                                                                                                          Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.

                                                                                                                          Tutorial

                                                                                                                          Additional step-by-step resources to leverage even more Qovery
                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          - + - + diff --git a/guides/installation-guide/guide-amazon-web-services/index.html b/guides/installation-guide/guide-amazon-web-services/index.html index 54af801f57..ef74359d37 100644 --- a/guides/installation-guide/guide-amazon-web-services/index.html +++ b/guides/installation-guide/guide-amazon-web-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Install Qovery on your Amazon Web Services account

                                                                                                                          Learn how to install Qovery on your Amazon Web Services (AWS) account
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/installation-guide/guide-google-cloud-platform/index.html b/guides/installation-guide/guide-google-cloud-platform/index.html index adcad3562a..2799f188c8 100644 --- a/guides/installation-guide/guide-google-cloud-platform/index.html +++ b/guides/installation-guide/guide-google-cloud-platform/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Install Qovery your Google Cloud Platform account

                                                                                                                          Learn how to install Qovery on your Google Cloud Platform (GCP) account
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/installation-guide/guide-kubernetes/index.html b/guides/installation-guide/guide-kubernetes/index.html index 1f75b24c9b..a7af513ae7 100644 --- a/guides/installation-guide/guide-kubernetes/index.html +++ b/guides/installation-guide/guide-kubernetes/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Install Qovery on your Kubernetes cluster

                                                                                                                          Learn how to install Qovery on your own Kubernetes cluster (BYOK)
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/installation-guide/guide-microsoft-azure/index.html b/guides/installation-guide/guide-microsoft-azure/index.html index 2aa9647f33..6217d0219c 100644 --- a/guides/installation-guide/guide-microsoft-azure/index.html +++ b/guides/installation-guide/guide-microsoft-azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Install Qovery on your Microsoft Azure account

                                                                                                                          Learn how to install Qovery on your Microsoft Azure account
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/installation-guide/guide-scaleway/index.html b/guides/installation-guide/guide-scaleway/index.html index b09b6072b6..3d363e783d 100644 --- a/guides/installation-guide/guide-scaleway/index.html +++ b/guides/installation-guide/guide-scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Install Qovery on your Scaleway account

                                                                                                                          Learn how to install Qovery on your Scaleway account
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/installation-guide/index.html b/guides/installation-guide/index.html index bd3feb07fd..06bfdf6faa 100644 --- a/guides/installation-guide/index.html +++ b/guides/installation-guide/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index 8621744e4e..8328fc420a 100644 --- a/guides/tags/database-postgresql/index.html +++ b/guides/tags/database-postgresql/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/framework-rails/index.html b/guides/tags/framework-rails/index.html index 13735626fe..8b1c50b4d5 100644 --- a/guides/tags/framework-rails/index.html +++ b/guides/tags/framework-rails/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/index.html b/guides/tags/index.html index 7ea51098a5..e56a9fcb2b 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,9 +26,9 @@ - + - + @@ -44,14 +44,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/installation-guide-aws/index.html b/guides/tags/installation-guide-aws/index.html index 74e986cf8e..ce0b94a55c 100644 --- a/guides/tags/installation-guide-aws/index.html +++ b/guides/tags/installation-guide-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -70,14 +70,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/installation-guide-azure/index.html b/guides/tags/installation-guide-azure/index.html index 494e2ad967..45526a28c0 100644 --- a/guides/tags/installation-guide-azure/index.html +++ b/guides/tags/installation-guide-azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/installation-guide-gcp/index.html b/guides/tags/installation-guide-gcp/index.html index 0ae1464bc9..ddf74de58b 100644 --- a/guides/tags/installation-guide-gcp/index.html +++ b/guides/tags/installation-guide-gcp/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/installation-guide-kubernetes/index.html b/guides/tags/installation-guide-kubernetes/index.html index 93ccb65df8..89a667bb79 100644 --- a/guides/tags/installation-guide-kubernetes/index.html +++ b/guides/tags/installation-guide-kubernetes/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/installation-guide-scaleway/index.html b/guides/tags/installation-guide-scaleway/index.html index d0bc7c25dc..1a517087c9 100644 --- a/guides/tags/installation-guide-scaleway/index.html +++ b/guides/tags/installation-guide-scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index 1e31bc4173..547b274c61 100644 --- a/guides/tags/language-javascript/index.html +++ b/guides/tags/language-javascript/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/language-kotlin/index.html b/guides/tags/language-kotlin/index.html index 7701d9cd87..61e61c07cc 100644 --- a/guides/tags/language-kotlin/index.html +++ b/guides/tags/language-kotlin/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/language-ruby/index.html b/guides/tags/language-ruby/index.html index 77a0cce106..3d5fb0211b 100644 --- a/guides/tags/language-ruby/index.html +++ b/guides/tags/language-ruby/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/language-rust/index.html b/guides/tags/language-rust/index.html index fe0d599f20..83c3767a77 100644 --- a/guides/tags/language-rust/index.html +++ b/guides/tags/language-rust/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/technology-docker/index.html b/guides/tags/technology-docker/index.html index 3b0bb7a360..d30b7ea241 100644 --- a/guides/tags/technology-docker/index.html +++ b/guides/tags/technology-docker/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          -

                                                                                                                          1 guide tagged with "technology: docker"

                                                                                                                          +

                                                                                                                          1 guide tagged with "technology: docker"

                                                                                                                          - + - + diff --git a/guides/tags/technology-github/index.html b/guides/tags/technology-github/index.html index 6973d75928..88ef903029 100644 --- a/guides/tags/technology-github/index.html +++ b/guides/tags/technology-github/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/technology-helm/index.html b/guides/tags/technology-helm/index.html index 4967d4bf93..ebf66dfa2a 100644 --- a/guides/tags/technology-helm/index.html +++ b/guides/tags/technology-helm/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          -

                                                                                                                          1 guide tagged with "technology: helm"

                                                                                                                          +

                                                                                                                          1 guide tagged with "technology: helm"

                                                                                                                          - + - + diff --git a/guides/tags/technology-qovery/index.html b/guides/tags/technology-qovery/index.html index be7150a7c8..ee27e721fd 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -124,14 +124,14 @@
                                                                                                                          -

                                                                                                                          39 guides tagged with "technology: qovery"

                                                                                                                          getting-started

                                                                                                                          1. Hello World. Deploy your first application.

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          2. Create a database

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          3. Custom domain

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          4. Environment variables

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          5. Debugging

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Continuous Integration

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Costs Control

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Deploy API Gateway

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Deploy External Services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Microservices

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Migration

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Monitoring

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Mono repository

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Preview Environments

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Production

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Seed Database

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          +

                                                                                                                          39 guides tagged with "technology: qovery"

                                                                                                                          getting-started

                                                                                                                          1. Hello World. Deploy your first application.

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          2. Create a database

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          3. Custom domain

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          4. Environment variables

                                                                                                                          read now
                                                                                                                          getting-started

                                                                                                                          5. Debugging

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Continuous Integration

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Costs Control

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Deploy API Gateway

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Deploy External Services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Microservices

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Migration

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Monitoring

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Mono repository

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Preview Environments

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Production

                                                                                                                          read now
                                                                                                                          advanced

                                                                                                                          Seed Database

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          - + - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 845c299f5b..b1290ea5e0 100644 --- a/guides/tags/technology-terraform/index.html +++ b/guides/tags/technology-terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@
                                                                                                                          -

                                                                                                                          1 guide tagged with "technology: terraform"

                                                                                                                          +

                                                                                                                          1 guide tagged with "technology: terraform"

                                                                                                                          - + - + diff --git a/guides/tags/type-guide/index.html b/guides/tags/type-guide/index.html index 146d33d6e8..042a6a8ae4 100644 --- a/guides/tags/type-guide/index.html +++ b/guides/tags/type-guide/index.html @@ -26,9 +26,9 @@ - + - + @@ -94,14 +94,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/guides/tags/type-tutorial/index.html b/guides/tags/type-tutorial/index.html index 2a05b5c63c..95cd03f6d6 100644 --- a/guides/tags/type-tutorial/index.html +++ b/guides/tags/type-tutorial/index.html @@ -26,9 +26,9 @@ - + - + @@ -126,14 +126,14 @@
                                                                                                                          -

                                                                                                                          40 guides tagged with "type: tutorial"

                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          +

                                                                                                                          40 guides tagged with "type: tutorial"

                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          - + - + diff --git a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html index 3d9baf8a7a..1bb4e3dfe1 100644 --- a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html +++ b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          How to integrate Amazon SQS and Lambda on Qovery

                                                                                                                          Message queuing service enables you to decouple and scale microservices, distributed systems, and serverless applications. In this guide, we'll show you how to leverage a queue system (Amazon SQS) to build a highly scalable backend.

                                                                                                                          Using Amazon SQS eliminates the complexity and overhead associated with managing and operating message-oriented middleware and empowers developers to focus on differentiating work. With SQS, you can send, store, and receive messages between software components at any volume without losing messages or requiring other services to be available.

                                                                                                                          Goal

                                                                                                                          In this guide, we'll create a backend microservice that sends messages on an event queue. Additionally, we'll go through two ways of consuming and processing those messages:

                                                                                                                          • We will use AWS Lambda to process events from the queue in a serverless way
                                                                                                                          • We will use Qovery-managed backend application workers to process events from the queue

                                                                                                                          AWS SQS Lambda

                                                                                                                          As for now, Qovery does not natively integrate with AWS Lambda and SQS, but the integration part is quite easy, and we will go through it in the following steps.

                                                                                                                          The backend application and workers servers that consume messages from the queue will be fully managed and deployed by Qovery.

                                                                                                                          Let's get started.

                                                                                                                          Configure SQS

                                                                                                                          Open Amazon SQS service in AWS Console and click on Create Queue

                                                                                                                          AWS SQS Lambda

                                                                                                                          We will use the Standard queue and leave all the settings in defaults for now. Type in the name of the queue and click Create.

                                                                                                                          AWS SQS Lambda

                                                                                                                          Create Message Producer

                                                                                                                          In this step, we will deploy an app that pushes messages to the SQS queue. The source code of the app is available here.

                                                                                                                          The source code of the app is simple - it's a web server that sends messages to the SQS queue each time someone hits its API endpoint:

                                                                                                                          const command = new SendMessageCommand({});
                                                                                                                          -
                                                                                                                          client.send(command).then(
                                                                                                                          (data) => {
                                                                                                                          console.log(data);
                                                                                                                          res.end('Success');
                                                                                                                          // process data.
                                                                                                                          },
                                                                                                                          (error) => {
                                                                                                                          console.error(error);
                                                                                                                          res.end('Error');
                                                                                                                          // error handling.
                                                                                                                          }
                                                                                                                          );

                                                                                                                          To deploy the app on Qovery, all you need to do is to fork the repository from above and create a new app adding port 3000:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Afterwards, we need to add two environment variables:

                                                                                                                          • accessKeyId - your AWS access key ID
                                                                                                                          • secretAccessKey - your AWS secret access key

                                                                                                                          You can add them in Environment Variebles Secret section in your application settings:

                                                                                                                          AWS SQS Lambda

                                                                                                                          AWS SQS Lambda

                                                                                                                          After all the setup is all done, click the Deploy button - the application will be shortly deployed.

                                                                                                                          Create Lambda Consumers

                                                                                                                          In AWS Console, open AWS Lambda panel.

                                                                                                                          AWS SQS Lambda

                                                                                                                          For the sake of the guide, we will use a simple hello-world lambda from AWS serverless app repository.

                                                                                                                          Browse the app repository and pick the hello-world function as shown in the screenshot above, and deploy the function

                                                                                                                          AWS SQS Lambda

                                                                                                                          Create Lambda Trigger

                                                                                                                          To make our Lambdas consume messages from SQS, we will need to add a Lambda Trigger in the SQS configuration.

                                                                                                                          AWS SQS Lambda

                                                                                                                          Click on Configure Lambda Function Trigger as shown in the screenshot above and select your lambda function from the dropdown, then save the changes:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Configure Permissions

                                                                                                                          Let's now grant our Lambda functions access to the SQS queue we created before.

                                                                                                                          In our lambda view, click on Configure:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Then, click on a role in Execution role to get redirected to a view where we can alter our Lambda permissions.

                                                                                                                          In the role summary screen, click on Edit policy next to helloWorldrolePolicy

                                                                                                                          AWS SQS Lambda

                                                                                                                          In the SQS section, grant permissions to all Read/Write options in the Actions Access level and accept the changes:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Test Lambda as an SQS Consumer Flow

                                                                                                                          To push messages to our SQS queue from the backend app deployed on Qovery, click on the Open button in the application we deployed in the previous step. It will redirect you to the API endpoint exposed by the backend app - the logic inside the application is made so that it sends messages to the SQS queue.

                                                                                                                          AWS SQS Lambda

                                                                                                                          Now, in the Monitoring section of SQS in AWS Console, we will see messages received on metrics charts:

                                                                                                                          AWS SQS Lambda

                                                                                                                          To validate that our consumer Lambdas processed the messages, navigate to your lambda Monitor panel:

                                                                                                                          AWS SQS Lambda

                                                                                                                          In the Invocations chart, you'll notice that our Lambda was triggered several times by the messages sent over the SQS.

                                                                                                                          Conclusions

                                                                                                                          In this part of the tutorial, we learned how to send messages over from an application deployed on Qovery to SQS and consume them from serverless Lambda functions. In the next part, we will create a scalable group of worker applications deployed by Qovery that consume messages from the same Queue.

                                                                                                                          +
                                                                                                                          client.send(command).then(
                                                                                                                          (data) => {
                                                                                                                          console.log(data);
                                                                                                                          res.end('Success');
                                                                                                                          // process data.
                                                                                                                          },
                                                                                                                          (error) => {
                                                                                                                          console.error(error);
                                                                                                                          res.end('Error');
                                                                                                                          // error handling.
                                                                                                                          }
                                                                                                                          );

                                                                                                                          To deploy the app on Qovery, all you need to do is to fork the repository from above and create a new app adding port 3000:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Afterwards, we need to add two environment variables:

                                                                                                                          • accessKeyId - your AWS access key ID
                                                                                                                          • secretAccessKey - your AWS secret access key

                                                                                                                          You can add them in Environment Variebles Secret section in your application settings:

                                                                                                                          AWS SQS Lambda

                                                                                                                          AWS SQS Lambda

                                                                                                                          After all the setup is all done, click the Deploy button - the application will be shortly deployed.

                                                                                                                          Create Lambda Consumers

                                                                                                                          In AWS Console, open AWS Lambda panel.

                                                                                                                          AWS SQS Lambda

                                                                                                                          For the sake of the guide, we will use a simple hello-world lambda from AWS serverless app repository.

                                                                                                                          Browse the app repository and pick the hello-world function as shown in the screenshot above, and deploy the function

                                                                                                                          AWS SQS Lambda

                                                                                                                          Create Lambda Trigger

                                                                                                                          To make our Lambdas consume messages from SQS, we will need to add a Lambda Trigger in the SQS configuration.

                                                                                                                          AWS SQS Lambda

                                                                                                                          Click on Configure Lambda Function Trigger as shown in the screenshot above and select your lambda function from the dropdown, then save the changes:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Configure Permissions

                                                                                                                          Let's now grant our Lambda functions access to the SQS queue we created before.

                                                                                                                          In our lambda view, click on Configure:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Then, click on a role in Execution role to get redirected to a view where we can alter our Lambda permissions.

                                                                                                                          In the role summary screen, click on Edit policy next to helloWorldrolePolicy

                                                                                                                          AWS SQS Lambda

                                                                                                                          In the SQS section, grant permissions to all Read/Write options in the Actions Access level and accept the changes:

                                                                                                                          AWS SQS Lambda

                                                                                                                          Test Lambda as an SQS Consumer Flow

                                                                                                                          To push messages to our SQS queue from the backend app deployed on Qovery, click on the Open button in the application we deployed in the previous step. It will redirect you to the API endpoint exposed by the backend app - the logic inside the application is made so that it sends messages to the SQS queue.

                                                                                                                          AWS SQS Lambda

                                                                                                                          Now, in the Monitoring section of SQS in AWS Console, we will see messages received on metrics charts:

                                                                                                                          AWS SQS Lambda

                                                                                                                          To validate that our consumer Lambdas processed the messages, navigate to your lambda Monitor panel:

                                                                                                                          AWS SQS Lambda

                                                                                                                          In the Invocations chart, you'll notice that our Lambda was triggered several times by the messages sent over the SQS.

                                                                                                                          Conclusions

                                                                                                                          In this part of the tutorial, we learned how to send messages over from an application deployed on Qovery to SQS and consume them from serverless Lambda functions. In the next part, we will create a scalable group of worker applications deployed by Qovery that consume messages from the same Queue.

                                                                                                                          - + - + diff --git a/guides/tutorial/aws-vpc-peering-with-qovery/index.html b/guides/tutorial/aws-vpc-peering-with-qovery/index.html index b2e6043d00..283975874c 100644 --- a/guides/tutorial/aws-vpc-peering-with-qovery/index.html +++ b/guides/tutorial/aws-vpc-peering-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@ On the peering connection view, click on Actions then Accept request

                                                                                                                          AWS accept VPC peering request

                                                                                                                          You should see your peering connection marked as Active

                                                                                                                          AWS VPC peering active

                                                                                                                        • Update existing VPC route table

                                                                                                                          In the AWS console of your non Qovery VPC, go to VPC > Route Tables. You can filter the list using the IDs you noted at step 1 to find the routing table for your existing VPC.

                                                                                                                          Thanks Kevin M. for your contribution here 😊

                                                                                                                          For your existing VPC edit the route table:

                                                                                                                          AWS VPC Qovery Route Table

                                                                                                                          Click on the Edit routes button then Add route.

                                                                                                                          AWS VPC Qovery Route Table add route

                                                                                                                          • As a destination, enter the CIDR of your Qovery VPC
                                                                                                                          • As a target, select the Peering connection you created earlier

                                                                                                                          Click Save changes.

                                                                                                                        • Update Qovery VPC route table

                                                                                                                          This part needs to be done through the Qovery console.

                                                                                                                          In the cluster settings, under the Network tab, click ADD ROUTE

                                                                                                                          AWS VPC Qovery Route Table add route

                                                                                                                          • As a destination, enter the CIDR of your existing VPC
                                                                                                                          • As a target, enter the ID of the peering connection you created earlier
                                                                                                                          • You can put anything you want as a description.

                                                                                                                          AWS VPC Qovery Route Table add route

                                                                                                                        • Update the security groups

                                                                                                                          Our two VPCs are now connected, but we still need to update the security groups to allow communication between the Qovery applications and your existing resources.

                                                                                                                          What rules to put on your security groups depends on what you are trying to achieve. In our case, we would like to access an RDS instance from our Qovery applications.

                                                                                                                          We will edit the RDS security group in our existing VPC to add an inbound rule allowing PostgreSQL traffic from our Qovery instances:

                                                                                                                          AWS Security Group inbound rules

                                                                                                                        • Deploy an application

                                                                                                                          You should now be able to deploy an application using the RDS PostgreSQL database on your Qovery cluster. -Refer to this guide if you need help deploying an application on Qovery.

                                                                                                                        • You can learn more about VPC peering on AWS here: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html

                                                                                                                          +Refer to this guide if you need help deploying an application on Qovery.

                                                                                                                          You can learn more about VPC peering on AWS here: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html

                                                                                                                          - + - + diff --git a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html index df2b9a0d11..a2dbac6a11 100644 --- a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html +++ b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@
                                                                                                                          const imageSchema = new mongoose.Schema({
                                                                                                                          title: String,
                                                                                                                          size: String,
                                                                                                                          source: String
                                                                                                                          });
                                                                                                                          mongoose.connect(databaseUrl);
                                                                                                                          router.get('/', (req, res) => {
                                                                                                                          imageSchema.find().then((data) => {
                                                                                                                          res.json(
                                                                                                                          data
                                                                                                                          )
                                                                                                                          });
                                                                                                                          });

                                                                                                                          Let's now create a new branch in our repository and create a pull request to our production (master branch) environment. Preview Environments feature will spin up a new environment for us so that we can safely test changes we just introduced!

                                                                                                                          AWS Preview Environments

                                                                                                                          Once the PR is created, an automatic comment has been dropped on our PR to let us know that the new preview environment has been created.

                                                                                                                          AWS Preview Environments

                                                                                                                          Now, when we display environments in our project, we will see that a new environment for the pull request is being deployed:

                                                                                                                          AWS Preview Environments

                                                                                                                          with all the resources we need! A database, backend, frontend - we can now test our changes in complete separation from the production without any manual setting up work:

                                                                                                                          AWS Preview Environments

                                                                                                                          Preview Environment Explained

                                                                                                                          The Preview Environment feature can be enabled or disabled per app. It creates a complete copy of your environment so that you can test new changes from pull requests in separation. It deploys your databases, backend, and frontend applications to a completely new environment once a pull request is opened. If you update your pull request, all new changes are also reflected in the new environment so that you can test them or fix problems during the review. What is great is that Qovery takes care of managing all environment variables for you as well, creates new aliases just as you had in your prod environment, so that everything is really tested separately and it all happens automagically. After the pull request is merged, Qovery automatically cleans up the preview environment to save your money.

                                                                                                                          Testing Preview Environments PT II

                                                                                                                          After a few minutes, your preview environment should be up and running. You can now navigate to the frontend app and click Open - in the image gallery, you will see an empty list because we don't yet have any images in the database.

                                                                                                                          You can add a few images manually by connecting to your mongo instance via CLI. The credentials can be found in the database overview:

                                                                                                                          AWS Preview Environments

                                                                                                                          After connecting, let's add images by executing the following:

                                                                                                                          db.createCollection("images")
                                                                                                                          -
                                                                                                                          db.images.insert([
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          },
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          },
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          }
                                                                                                                          ])

                                                                                                                          Now, after opening the frontend app in our preview environment, we will see all the images we put in the database! It looks like the feature is working well, so let's merge the PR:

                                                                                                                          AWS Preview Environments

                                                                                                                          What now happens is automatically after the PR merge, the preview environment is automatically cleaned up:

                                                                                                                          AWS Preview Environments

                                                                                                                          Great job! Thanks to Qovery Preview Environments, we managed to develop a new feature in a complete separation from our production, we tested it in a real environment deployed in the cloud, and we didn't have to spend any time preparing our environment for tests at all.

                                                                                                                          Conclusion

                                                                                                                          In the article, we quickly went through the process of creating a full-stack application with frontend, backend, and database. We enabled the Preview Environment feature to develop new features more quickly. We learned what the benefits of Preview Environments are, how to use them, and how to integrate them to day to day development workflow.

                                                                                                                          +
                                                                                                                          db.images.insert([
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          },
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          },
                                                                                                                          {
                                                                                                                          title: 'IMG_4985.HEIC',
                                                                                                                          size: '3.9 MB',
                                                                                                                          source:
                                                                                                                          'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                                                                          }
                                                                                                                          ])

                                                                                                                          Now, after opening the frontend app in our preview environment, we will see all the images we put in the database! It looks like the feature is working well, so let's merge the PR:

                                                                                                                          AWS Preview Environments

                                                                                                                          What now happens is automatically after the PR merge, the preview environment is automatically cleaned up:

                                                                                                                          AWS Preview Environments

                                                                                                                          Great job! Thanks to Qovery Preview Environments, we managed to develop a new feature in a complete separation from our production, we tested it in a real environment deployed in the cloud, and we didn't have to spend any time preparing our environment for tests at all.

                                                                                                                          Conclusion

                                                                                                                          In the article, we quickly went through the process of creating a full-stack application with frontend, backend, and database. We enabled the Preview Environment feature to develop new features more quickly. We learned what the benefits of Preview Environments are, how to use them, and how to integrate them to day to day development workflow.

                                                                                                                          - + - + diff --git a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html index 1aba77b3ef..eb389e6a9b 100644 --- a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html +++ b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html @@ -26,9 +26,9 @@ - + - + @@ -76,14 +76,14 @@
                                                                                                                          echo "Organization name: ${{ vars.QOVERY_ORGANIZATION_NAME }}"
                                                                                                                          echo "Project name: ${{ vars.QOVERY_PROJECT_NAME }}"
                                                                                                                          echo "Blueprint name: ${{ vars.QOVERY_BLUEPRINT_ENVIRONMENT_NAME }}"
                                                                                                                          new_environment_name="${GITHUB_HEAD_REF}"
                                                                                                                          echo "Let's delete '$new_environment_name' environment and release its resources"
                                                                                                                          -
                                                                                                                          qovery environment delete \
                                                                                                                          --organization "${{ vars.QOVERY_ORGANIZATION_NAME }}" \
                                                                                                                          --project "${{ vars.QOVERY_PROJECT_NAME }}" \
                                                                                                                          --environment "$new_environment_name" \
                                                                                                                          -w

                                                                                                                          The complete file is available here

                                                                                                                          We just use the qovery environment delete command to delete the ephemeral environment. The option -w is used to wait for the deletion to be completed. Qovery will automatically release the resources used by the environment.

                                                                                                                          Wrapping up

                                                                                                                          Congratulations! You've successfully built an automated E2E testing pipeline with GitHub Actions and Qovery. You can now run your tests in a fully isolated environment, provisioned and de-provisioned automatically, and integrated with your GitHub repository.

                                                                                                                          Some resources:

                                                                                                                          +
                                                                                                                          qovery environment delete \
                                                                                                                          --organization "${{ vars.QOVERY_ORGANIZATION_NAME }}" \
                                                                                                                          --project "${{ vars.QOVERY_PROJECT_NAME }}" \
                                                                                                                          --environment "$new_environment_name" \
                                                                                                                          -w

                                                                                                                          The complete file is available here

                                                                                                                          We just use the qovery environment delete command to delete the ephemeral environment. The option -w is used to wait for the deletion to be completed. Qovery will automatically release the resources used by the environment.

                                                                                                                          Wrapping up

                                                                                                                          Congratulations! You've successfully built an automated E2E testing pipeline with GitHub Actions and Qovery. You can now run your tests in a fully isolated environment, provisioned and de-provisioned automatically, and integrated with your GitHub repository.

                                                                                                                          Some resources:

                                                                                                                          - + - + diff --git a/guides/tutorial/cloudwatch-integration/index.html b/guides/tutorial/cloudwatch-integration/index.html index 2f089bde48..9c37d2a690 100644 --- a/guides/tutorial/cloudwatch-integration/index.html +++ b/guides/tutorial/cloudwatch-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -49,14 +49,14 @@
                                                                                                                          env:
                                                                                                                          - name: "AWS_ACCESS_KEY_ID"
                                                                                                                          value: "<your access key>"
                                                                                                                          - name: "AWS_SECRET_ACCESS_KEY"
                                                                                                                          value: "<your secret access key>"
                                                                                                                          firehose:
                                                                                                                          enabled: false
                                                                                                                          kinesis:
                                                                                                                          enabled: false
                                                                                                                          -
                                                                                                                          elasticsearch:
                                                                                                                          enabled: false

                                                                                                                          You can take a look at additional configuration options on the AWS provided chart

                                                                                                                          Then deploy fluent-bit with the following command:

                                                                                                                          helm upgrade --install aws-for-fluent-bit -f values.yaml --namespace fluent-bit --create-namespace eks/aws-for-fluent-bit --version 0.1.21

                                                                                                                          You should start seeing fluent-bit pods. Take a look at the logs to ensure there is no configuration issue.

                                                                                                                          Cloudwatch usage

                                                                                                                          You can now use Cloudwatch to look at your logs. Connect to Cloudwatch, go into the Logs insight section, then you can perform queries:

                                                                                                                          cloudwatch search

                                                                                                                          1. Select the fluent-bit group of logs
                                                                                                                          2. Create a query (syntax examples)
                                                                                                                          3. Run your query
                                                                                                                          4. See the result and expand to filter on other elements
                                                                                                                          +
                                                                                                                          elasticsearch:
                                                                                                                          enabled: false

                                                                                                                          You can take a look at additional configuration options on the AWS provided chart

                                                                                                                          Then deploy fluent-bit with the following command:

                                                                                                                          helm upgrade --install aws-for-fluent-bit -f values.yaml --namespace fluent-bit --create-namespace eks/aws-for-fluent-bit --version 0.1.21

                                                                                                                          You should start seeing fluent-bit pods. Take a look at the logs to ensure there is no configuration issue.

                                                                                                                          Cloudwatch usage

                                                                                                                          You can now use Cloudwatch to look at your logs. Connect to Cloudwatch, go into the Logs insight section, then you can perform queries:

                                                                                                                          cloudwatch search

                                                                                                                          1. Select the fluent-bit group of logs
                                                                                                                          2. Create a query (syntax examples)
                                                                                                                          3. Run your query
                                                                                                                          4. See the result and expand to filter on other elements
                                                                                                                          - + - + diff --git a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html index 5d372c5051..c4411d799a 100644 --- a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html +++ b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html @@ -26,9 +26,9 @@ - + - + @@ -64,14 +64,14 @@
                                                                                                                          # list likes from a tweet
                                                                                                                          curl https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                                                                          # add one like to a tweet
                                                                                                                          curl -X POST https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                                                                          # remove one like to a tweet
                                                                                                                          curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                                                                          -
                                                                                                                          # delete a tweet
                                                                                                                          curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>

                                                                                                                          What's next

                                                                                                                          In this first part we saw how to create a Rust API with Actix and Diesel. In the second part we will compare its performance with a Go application to see which one is the most performant.

                                                                                                                          Special thanks to Jason and Kokou for your reviews

                                                                                                                          Useful resources

                                                                                                                          Do you want to know more about Rust?

                                                                                                                          Tutorial
                                                                                                                          +
                                                                                                                          # delete a tweet
                                                                                                                          curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>

                                                                                                                          What's next

                                                                                                                          In this first part we saw how to create a Rust API with Actix and Diesel. In the second part we will compare its performance with a Go application to see which one is the most performant.

                                                                                                                          Special thanks to Jason and Kokou for your reviews

                                                                                                                          Useful resources

                                                                                                                          Do you want to know more about Rust?

                                                                                                                          Tutorial
                                                                                                                          - + - + diff --git a/guides/tutorial/create-a-playground-environment-on-aws/index.html b/guides/tutorial/create-a-playground-environment-on-aws/index.html index daaf26fc93..77f89e6401 100644 --- a/guides/tutorial/create-a-playground-environment-on-aws/index.html +++ b/guides/tutorial/create-a-playground-environment-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          Step-by-step guide to create a Playground environment on AWS

                                                                                                                          A Playground Environment is an environment where you can do all your testing without impacting an existing environment.

                                                                                                                          Playground environments

                                                                                                                          Here are some use cases where a playground environment is helpful for:

                                                                                                                          • Experimenting: Test your code without the fear to break anything from your original environment.
                                                                                                                          • Benchmarking: You want to stress your application without affecting the original environment.
                                                                                                                          • Debugging: You have a bug in production that you want to reproduce but without impacting the production environment.
                                                                                                                          • Product Demo: Your Sales or Product Manager needs to make an important demo and want to be sure it will work.

                                                                                                                          In this guide, we will create a playground environment on AWS.

                                                                                                                          Create your Playground Environment

                                                                                                                          To create your Playground Environment you simply need to:

                                                                                                                          1. Go into the base environment that you want to clone
                                                                                                                          2. Click on the Actions and Clone button
                                                                                                                          3. Enter a name for your playground environment
                                                                                                                          4. Select the cluster where you want to deploy it
                                                                                                                          5. Set the Environment mode to Development
                                                                                                                          6. Click on the Create button
                                                                                                                          7. Deploy your Playground Environment

                                                                                                                          Once deployed, your applications within this environment will have dedicated URLs to get access to. You can use these URLs to test your application.

                                                                                                                          Then you can check that your playground environment is working by visiting the temporary URL.

                                                                                                                          Delete your Playground Environment

                                                                                                                          To delete your Playground Environment you simply need to:

                                                                                                                          1. Go into the playground environment
                                                                                                                          2. Click on the Actions and Delete button
                                                                                                                          3. Confirm and Delete the environment

                                                                                                                          All the resources will be freed.

                                                                                                                          Optional: Create a Playground Cluster

                                                                                                                          To prevent your playground environment from impacting your production environment, you can create a dedicated cluster. So every playground environments will be on the same cluster and will not disturb your production.

                                                                                                                          Playground environments with 2 clusters

                                                                                                                          Here is how to create a playground cluster.

                                                                                                                          And how to create a playground environment on our playground cluster.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          3 min read
                                                                                                                          Updated

                                                                                                                          A Playground Environment is an environment where you can do all your testing without impacting an existing environment.

                                                                                                                          Playground environments

                                                                                                                          Here are some use cases where a playground environment is helpful for:

                                                                                                                          • Experimenting: Test your code without the fear to break anything from your original environment.
                                                                                                                          • Benchmarking: You want to stress your application without affecting the original environment.
                                                                                                                          • Debugging: You have a bug in production that you want to reproduce but without impacting the production environment.
                                                                                                                          • Product Demo: Your Sales or Product Manager needs to make an important demo and want to be sure it will work.

                                                                                                                          In this guide, we will create a playground environment on AWS.

                                                                                                                          Create your Playground Environment

                                                                                                                          To create your Playground Environment you simply need to:

                                                                                                                          1. Go into the base environment that you want to clone
                                                                                                                          2. Click on the Actions and Clone button
                                                                                                                          3. Enter a name for your playground environment
                                                                                                                          4. Select the cluster where you want to deploy it
                                                                                                                          5. Set the Environment mode to Development
                                                                                                                          6. Click on the Create button
                                                                                                                          7. Deploy your Playground Environment

                                                                                                                          Once deployed, your applications within this environment will have dedicated URLs to get access to. You can use these URLs to test your application.

                                                                                                                          Then you can check that your playground environment is working by visiting the temporary URL.

                                                                                                                          Delete your Playground Environment

                                                                                                                          To delete your Playground Environment you simply need to:

                                                                                                                          1. Go into the playground environment
                                                                                                                          2. Click on the Actions and Delete button
                                                                                                                          3. Confirm and Delete the environment

                                                                                                                          All the resources will be freed.

                                                                                                                          Optional: Create a Playground Cluster

                                                                                                                          To prevent your playground environment from impacting your production environment, you can create a dedicated cluster. So every playground environments will be on the same cluster and will not disturb your production.

                                                                                                                          Playground environments with 2 clusters

                                                                                                                          Here is how to create a playground cluster.

                                                                                                                          And how to create a playground environment on our playground cluster.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                                                                          - + - + diff --git a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html index 42838511c7..0227d854a3 100644 --- a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html +++ b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          Step-by-step guide to create your Staging environment from your Production environment on AWS

                                                                                                                          Let's say you have your production environment deployed, and you want to create a staging environment. You have two options:

                                                                                                                          1. Create a staging environment from scratch.
                                                                                                                          2. Clone your production environment and create a staging environment from it.

                                                                                                                          This is where the Environment Clone feature of Qovery is useful. No need to create a new environment, just clone your production environment and create a staging environment from it.

                                                                                                                          In this guide, we will go through the steps to create a staging environment from your production environment. While applying the best practices by isolating the staging and production environments on two separated clusters and VPCs.

                                                                                                                          Complete Production and Staging infrastructure

                                                                                                                          Create a Staging cluster

                                                                                                                          Isolating the staging and production environments on two separate clusters and VPCs is a good practice to avoid any potential issues on your production caused by your staging. This is not a mandatory step, but it is well recommended.

                                                                                                                          To create your staging cluster it's also recommended creating a new AWS IAM access key and secret access key in a dedicated subaccount. Then you are sure that both environment are also isolated at the AWS level:

                                                                                                                          1. Go to your Organization cluster settings
                                                                                                                          2. Add a cluster with a name "staging"
                                                                                                                          3. Deploy your staging cluster

                                                                                                                          Create your Staging environment from your Production environment

                                                                                                                          Now, to create your staging environment from your production environment, you need to:

                                                                                                                          1. Go inside your production environment and click on the "Clone" button.
                                                                                                                          2. Give a name to your staging environment (E.g "staging")
                                                                                                                          3. Set the mode to "Staging"
                                                                                                                          4. Set the cluster to "staging"
                                                                                                                          5. Click on "Create"
                                                                                                                          6. That's it!

                                                                                                                          Your environment has been created, but it's not deployed yet. Before we will make some adjustment to change the branch of our applications.

                                                                                                                          Update your Staging applications

                                                                                                                          Your Staging applications have the same branch as your Production applications. To update your Staging applications branch, you need to:

                                                                                                                          1. Go into the settings of each of your applications.
                                                                                                                          2. Update the branch to your Staging branch.
                                                                                                                          3. Click on "Save"

                                                                                                                          We are almost done, now we need to smartly change our environment variables and secrets to not use the one used in production.

                                                                                                                          Override your environment variables and secrets

                                                                                                                          Let's say you have a production environment with the following environment variables:

                                                                                                                          • NODE_ENV=production
                                                                                                                          • STRIPE_API_KEY=a-secret-production-key

                                                                                                                          You might need to keep the same keys but change the values. That's exactly what Qovery makes you do with the Environment Variable Override feature. You can keep the same keys but change the values.

                                                                                                                          Deploy your Staging environment

                                                                                                                          Finally, your Staging environment has been created and set up correctly. To deploy your Staging environment, you just need to go to your Staging environment and click on the "Deploy" button.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          4 min read
                                                                                                                          Updated

                                                                                                                          Let's say you have your production environment deployed, and you want to create a staging environment. You have two options:

                                                                                                                          1. Create a staging environment from scratch.
                                                                                                                          2. Clone your production environment and create a staging environment from it.

                                                                                                                          This is where the Environment Clone feature of Qovery is useful. No need to create a new environment, just clone your production environment and create a staging environment from it.

                                                                                                                          In this guide, we will go through the steps to create a staging environment from your production environment. While applying the best practices by isolating the staging and production environments on two separated clusters and VPCs.

                                                                                                                          Complete Production and Staging infrastructure

                                                                                                                          Create a Staging cluster

                                                                                                                          Isolating the staging and production environments on two separate clusters and VPCs is a good practice to avoid any potential issues on your production caused by your staging. This is not a mandatory step, but it is well recommended.

                                                                                                                          To create your staging cluster it's also recommended creating a new AWS IAM access key and secret access key in a dedicated subaccount. Then you are sure that both environment are also isolated at the AWS level:

                                                                                                                          1. Go to your Organization cluster settings
                                                                                                                          2. Add a cluster with a name "staging"
                                                                                                                          3. Deploy your staging cluster

                                                                                                                          Create your Staging environment from your Production environment

                                                                                                                          Now, to create your staging environment from your production environment, you need to:

                                                                                                                          1. Go inside your production environment and click on the "Clone" button.
                                                                                                                          2. Give a name to your staging environment (E.g "staging")
                                                                                                                          3. Set the mode to "Staging"
                                                                                                                          4. Set the cluster to "staging"
                                                                                                                          5. Click on "Create"
                                                                                                                          6. That's it!

                                                                                                                          Your environment has been created, but it's not deployed yet. Before we will make some adjustment to change the branch of our applications.

                                                                                                                          Update your Staging applications

                                                                                                                          Your Staging applications have the same branch as your Production applications. To update your Staging applications branch, you need to:

                                                                                                                          1. Go into the settings of each of your applications.
                                                                                                                          2. Update the branch to your Staging branch.
                                                                                                                          3. Click on "Save"

                                                                                                                          We are almost done, now we need to smartly change our environment variables and secrets to not use the one used in production.

                                                                                                                          Override your environment variables and secrets

                                                                                                                          Let's say you have a production environment with the following environment variables:

                                                                                                                          • NODE_ENV=production
                                                                                                                          • STRIPE_API_KEY=a-secret-production-key

                                                                                                                          You might need to keep the same keys but change the values. That's exactly what Qovery makes you do with the Environment Variable Override feature. You can keep the same keys but change the values.

                                                                                                                          Deploy your Staging environment

                                                                                                                          Finally, your Staging environment has been created and set up correctly. To deploy your Staging environment, you just need to go to your Staging environment and click on the "Deploy" button.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                                                                          - + - + diff --git a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html index 68b45db630..87ee905d7b 100644 --- a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html +++ b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          How to customize preview url with qovery cli

                                                                                                                          In this quick guide, we will show you how to automatically customize your preview URL when a new environment has been created using the Qovery CLI. By following these steps, you can create a custom domain for your service and link it to your DNS provider.

                                                                                                                          1. Create a Custom Domain for Your Service

                                                                                                                            To create a custom domain for your service, run the following command in your terminal:

                                                                                                                            # Get Pull Request ID from Qovery Environment Variables
                                                                                                                            $ PR_ID=`qovery application env list -n "Backend" --show-values | grep "QOVERY_PROJECT_ID" | awk '{print $10}'`
                                                                                                                            -
                                                                                                                            # Create a custom domain
                                                                                                                            $ qovery application domain create -n "app name" --domain app-$PR_ID.domain.name

                                                                                                                            Replace app name with the name of your application and app.domain.name with your desired custom domain.

                                                                                                                            User --organization, --project, --environment flags to specify the organization, project, and environment where you want to create the custom domain.

                                                                                                                          2. Retrieve the Validation Domain

                                                                                                                            To get the validation domain required for the next step, run the following command:

                                                                                                                            $ qovery application domain list -n "app name" | grep "app-$PR_ID.domain.name" | awk '{print $7}'

                                                                                                                            Replace app name and app.domain.name with the appropriate values. This command will output the validation domain.

                                                                                                                          3. Create a CNAME Record in Your DNS Provider

                                                                                                                            Use the validation domain from the previous step to create a CNAME record in your DNS provider. The CNAME record should point to the validation domain.

                                                                                                                            Example with Route53:

                                                                                                                            $ aws cli route53 change-resource-record-sets --hosted-zone-id "hosted zone id" --change-batch '{"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"app-$PR_ID.domain.name","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":"validation-domain"}]}}]}'

                                                                                                                            Example with Cloudflare:

                                                                                                                            $ curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
                                                                                                                            -H "X-Auth-Email: {email}" \
                                                                                                                            -H "X-Auth-Key: {key}" \
                                                                                                                            -H "Content-Type: application/json" \
                                                                                                                            --data '{"type":"CNAME","name":"app-$PR_ID.domain.name","content":"validation-domain","ttl":1,"proxied":false}'

                                                                                                                            The idea here is to create a CNAME record that points to the validation domain. The validation domain is a temporary domain that is used to validate the ownership of the custom domain.

                                                                                                                          4. Redeploy your application

                                                                                                                            Once the DNS changes have propagated, redeploy your application to complete the process.

                                                                                                                            $ qovery application redeploy -n "app name" -w

                                                                                                                            Your application should now be available at app-{PR ID}.domain.name.

                                                                                                                          Wrapping up

                                                                                                                          Congratulations! You have successfully customized your preview URL using the Qovery CLI. Now, whenever a new environment is created, the custom domain will be automatically configured. If you encounter any issues, please reach out to our support team on the Qovery forum.

                                                                                                                          +
                                                                                                                          # Create a custom domain
                                                                                                                          $ qovery application domain create -n "app name" --domain app-$PR_ID.domain.name

                                                                                                                          Replace app name with the name of your application and app.domain.name with your desired custom domain.

                                                                                                                          User --organization, --project, --environment flags to specify the organization, project, and environment where you want to create the custom domain.

                                                                                                                        • Retrieve the Validation Domain

                                                                                                                          To get the validation domain required for the next step, run the following command:

                                                                                                                          $ qovery application domain list -n "app name" | grep "app-$PR_ID.domain.name" | awk '{print $7}'

                                                                                                                          Replace app name and app.domain.name with the appropriate values. This command will output the validation domain.

                                                                                                                        • Create a CNAME Record in Your DNS Provider

                                                                                                                          Use the validation domain from the previous step to create a CNAME record in your DNS provider. The CNAME record should point to the validation domain.

                                                                                                                          Example with Route53:

                                                                                                                          $ aws cli route53 change-resource-record-sets --hosted-zone-id "hosted zone id" --change-batch '{"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"app-$PR_ID.domain.name","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":"validation-domain"}]}}]}'

                                                                                                                          Example with Cloudflare:

                                                                                                                          $ curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
                                                                                                                          -H "X-Auth-Email: {email}" \
                                                                                                                          -H "X-Auth-Key: {key}" \
                                                                                                                          -H "Content-Type: application/json" \
                                                                                                                          --data '{"type":"CNAME","name":"app-$PR_ID.domain.name","content":"validation-domain","ttl":1,"proxied":false}'

                                                                                                                          The idea here is to create a CNAME record that points to the validation domain. The validation domain is a temporary domain that is used to validate the ownership of the custom domain.

                                                                                                                        • Redeploy your application

                                                                                                                          Once the DNS changes have propagated, redeploy your application to complete the process.

                                                                                                                          $ qovery application redeploy -n "app name" -w

                                                                                                                          Your application should now be available at app-{PR ID}.domain.name.

                                                                                                                        • Wrapping up

                                                                                                                          Congratulations! You have successfully customized your preview URL using the Qovery CLI. Now, whenever a new environment is created, the custom domain will be automatically configured. If you encounter any issues, please reach out to our support team on the Qovery forum.

                                                                                                                          - + - + diff --git a/guides/tutorial/data-seeding-in-postgres/index.html b/guides/tutorial/data-seeding-in-postgres/index.html index b120e7ac36..e0df3eb62a 100644 --- a/guides/tutorial/data-seeding-in-postgres/index.html +++ b/guides/tutorial/data-seeding-in-postgres/index.html @@ -26,9 +26,9 @@ - + - + @@ -59,14 +59,14 @@
                                                                                                                          CMD [ "node", "bin/www" ]

                                                                                                                          Add entrypoint.sh file to be executed on each environment where the app container runs:

                                                                                                                          #! /bin/sh
                                                                                                                          node db/index.js
                                                                                                                          # Execute the given or default command:
                                                                                                                          -
                                                                                                                          exec "$@"

                                                                                                                          Example

                                                                                                                          The following examples will show the application of seeding the data in dev environments after cloning an environment and using the Preview Environment feature.

                                                                                                                          Clone Environment

                                                                                                                          Clone environment feature allows you to make a complete clone of a chosen environment, including its all applications, services, and their configs. In the example we will clone a new environment and have our seed data injected automatically.

                                                                                                                          First, we make a clone of our production environment:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Then, we deploy the new environment:

                                                                                                                          Seeding Postgres Database

                                                                                                                          After navigating to deployment logs, we will notice our seed data inserts logged:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Preview Environment

                                                                                                                          Preview Environment feature allows you to automatically create new development environments to validate new changes before merging them to your production branch.

                                                                                                                          First, we open a pull request:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Then, in list of environments, we get a new environment automatically created for the pull request:

                                                                                                                          Seeding Postgres Database

                                                                                                                          When you open the logs of the deployment, you’ll see the seed data injection logs:

                                                                                                                          Seeding Postgres Database

                                                                                                                          +
                                                                                                                          exec "$@"

                                                                                                                          Example

                                                                                                                          The following examples will show the application of seeding the data in dev environments after cloning an environment and using the Preview Environment feature.

                                                                                                                          Clone Environment

                                                                                                                          Clone environment feature allows you to make a complete clone of a chosen environment, including its all applications, services, and their configs. In the example we will clone a new environment and have our seed data injected automatically.

                                                                                                                          First, we make a clone of our production environment:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Then, we deploy the new environment:

                                                                                                                          Seeding Postgres Database

                                                                                                                          After navigating to deployment logs, we will notice our seed data inserts logged:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Preview Environment

                                                                                                                          Preview Environment feature allows you to automatically create new development environments to validate new changes before merging them to your production branch.

                                                                                                                          First, we open a pull request:

                                                                                                                          Seeding Postgres Database

                                                                                                                          Then, in list of environments, we get a new environment automatically created for the pull request:

                                                                                                                          Seeding Postgres Database

                                                                                                                          When you open the logs of the deployment, you’ll see the seed data injection logs:

                                                                                                                          Seeding Postgres Database

                                                                                                                          - + - + diff --git a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html index c91e7a7b10..25717c5681 100644 --- a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html +++ b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html @@ -26,9 +26,9 @@ - + - + @@ -99,14 +99,14 @@
                                                                                                                          # Execute the given or default command:
                                                                                                                          exec "$@"

                                                                                                                          Make this script executable:

                                                                                                                          chmod +x docker-entrypoint.sh

                                                                                                                          Deploy your application to Qovery

                                                                                                                          1. Create a project

                                                                                                                            Now that your Rails application is ready to be dockerized, we can create a project on the Qovery console:

                                                                                                                            Qovery console

                                                                                                                          2. Create an environment

                                                                                                                            Now we'll create an environment. Let's start with our staging environment:

                                                                                                                            Qovery console

                                                                                                                            Qovery console

                                                                                                                          3. Add your Rails app

                                                                                                                            We'll now add our Rails app to the environment:

                                                                                                                            Qovery console

                                                                                                                            On the form you'll need to enter the following information:

                                                                                                                            • The app name: it can be whatever you want. Here web.
                                                                                                                            • Pick your Git privider, then the repository for your application
                                                                                                                            • The branch you want to deploy for this application. We chose main
                                                                                                                            • The Root application path. In case your application is not at the root of your repository (e.g. you have a monorepo), otherwise it will be /.
                                                                                                                            • For the Build mode, pick Dockerfile.
                                                                                                                            • Enter the path to your Dockerfile.

                                                                                                                            Qovery console

                                                                                                                            Qovery console

                                                                                                                            You can then click Create. You'll be redirected to your application dashboard.

                                                                                                                            Qovery console

                                                                                                                          4. Add a PostgreSQL database

                                                                                                                            Our application will use a PostgreSQL database. Let's add one to our environment:

                                                                                                                            Click on ADD, then Database

                                                                                                                            Qovery console

                                                                                                                            • Give a name to your database.
                                                                                                                            • For the Type, select POSTGRESQL.
                                                                                                                            • For the Mode, we'll pick CONTAINER.
                                                                                                                            • Chose the Version you need.

                                                                                                                            Qovery console

                                                                                                                            You can then click Create

                                                                                                                          5. Add a Redis database

                                                                                                                            Since we're using Sidekiq, we'll also need a Redis database as a backend.

                                                                                                                            If you didn't close the Database modal, you can click the ADD button, then in the dropbox for Database 2 click Create database.

                                                                                                                            Qovery console

                                                                                                                            Fill the form the same way you did for PostgreSQL:

                                                                                                                            Qovery console

                                                                                                                            Click Create and close the Databases modal.

                                                                                                                            Qovery console

                                                                                                                          6. Configure your application ENV variables

                                                                                                                            Go back to your environment view:

                                                                                                                            Qovery console

                                                                                                                            Then click on your application:

                                                                                                                            Qovery console

                                                                                                                            On your application dashboard, go to Environment variables:

                                                                                                                            Qovery console

                                                                                                                            Here you can add any environment variable your application needs.

                                                                                                                            We'll now configure a few secrets for our application. Click on the Secret variables tab:

                                                                                                                            Qovery console

                                                                                                                            First since our Demo application uses the Rails Encrypted Secrets, we'll add the RAILS_MASTER_KEY secret Click on CREATE SECRET, then fill the form:

                                                                                                                            • Variable: enter the variable name, RAILS_MASTER_KEY.
                                                                                                                            • Value: enter the actual value for your RAILS_MASTER_KEY.
                                                                                                                            • Scope: chose ENVIRONMENT since the secret will be used by our Sidekiq worker too.

                                                                                                                            Qovery console

                                                                                                                            Now we'll need to add the DATABASE_URL and REDIS_URL, that Rails will use to connect to PostgreSQL and Redis. Those are secrets as well, since the URLs contain passwords.

                                                                                                                            But instead of creating new secrets like we did for the RAILS_MASTER_KEY, we'll use aliases. Aliases are just a way of giving a different name to an existing ENV variable or secret. -Since Qovery provides us with the secrets corresponding to the two databases we created earlier, we can alias them.

                                                                                                                            First, create an alias to the QOVERY_POSTGRESQL_ZXXXXXXXX_DATABASE_URL_INTERNAL:

                                                                                                                            Qovery console

                                                                                                                            In the form, chose DATABASE_URL for the alias name and set it at the ENVIRONMENT level:

                                                                                                                            Qovery console

                                                                                                                            Click Create then do the same thing with a REDIS_URL alias to the QOVERY_REDIS_ZXXXXXXXX_DATABASE_URL_INTERNAL.

                                                                                                                            You should see your two aliases created:

                                                                                                                            Qovery console

                                                                                                                          7. Deploy the environment

                                                                                                                            Go back to the staging environment view and deploy it:

                                                                                                                            Qovery console

                                                                                                                            You should see it switch to the DEPLOYING status. Wait until the status turns to RUNNING.

                                                                                                                            Qovery console

                                                                                                                            Once your environment is RUNNING, open the web application to see if it works. It will open a new tab showing your application.

                                                                                                                            Qovery console

                                                                                                                          8. Add the Sidekiq worker

                                                                                                                            The last step is to add your Sidekiq Worker. We'll follow the same steps as in the Add your Rails app section with a few differences:

                                                                                                                            Add a new application:

                                                                                                                            Qovery console

                                                                                                                            The settigs are the same as for the Rails application, except:

                                                                                                                            • We use the Dockerfile.sidekiq Dockerfile this time
                                                                                                                            • We don't declare a port since our worker is not a web service but communicates with our application through Redis.

                                                                                                                            Qovery console

                                                                                                                            Qovery console

                                                                                                                            Click Create.

                                                                                                                            If we check the ENV variables and secrets, we notice that it directly inherited the ones we set at the Environment level. So we don't need to do the configuration again.

                                                                                                                            Qovery console

                                                                                                                            You can now deploy your worker application:

                                                                                                                            Qovery console

                                                                                                                            Wait for it to switch to the RUNNING status.

                                                                                                                          Conclusion

                                                                                                                          You now have a Rails application with PostgreSQL and Sidekiq running on Qovery.

                                                                                                                          +Since Qovery provides us with the secrets corresponding to the two databases we created earlier, we can alias them.

                                                                                                                          First, create an alias to the QOVERY_POSTGRESQL_ZXXXXXXXX_DATABASE_URL_INTERNAL:

                                                                                                                          Qovery console

                                                                                                                          In the form, chose DATABASE_URL for the alias name and set it at the ENVIRONMENT level:

                                                                                                                          Qovery console

                                                                                                                          Click Create then do the same thing with a REDIS_URL alias to the QOVERY_REDIS_ZXXXXXXXX_DATABASE_URL_INTERNAL.

                                                                                                                          You should see your two aliases created:

                                                                                                                          Qovery console

                                                                                                                        • Deploy the environment

                                                                                                                          Go back to the staging environment view and deploy it:

                                                                                                                          Qovery console

                                                                                                                          You should see it switch to the DEPLOYING status. Wait until the status turns to RUNNING.

                                                                                                                          Qovery console

                                                                                                                          Once your environment is RUNNING, open the web application to see if it works. It will open a new tab showing your application.

                                                                                                                          Qovery console

                                                                                                                        • Add the Sidekiq worker

                                                                                                                          The last step is to add your Sidekiq Worker. We'll follow the same steps as in the Add your Rails app section with a few differences:

                                                                                                                          Add a new application:

                                                                                                                          Qovery console

                                                                                                                          The settigs are the same as for the Rails application, except:

                                                                                                                          • We use the Dockerfile.sidekiq Dockerfile this time
                                                                                                                          • We don't declare a port since our worker is not a web service but communicates with our application through Redis.

                                                                                                                          Qovery console

                                                                                                                          Qovery console

                                                                                                                          Click Create.

                                                                                                                          If we check the ENV variables and secrets, we notice that it directly inherited the ones we set at the Environment level. So we don't need to do the configuration again.

                                                                                                                          Qovery console

                                                                                                                          You can now deploy your worker application:

                                                                                                                          Qovery console

                                                                                                                          Wait for it to switch to the RUNNING status.

                                                                                                                        • Conclusion

                                                                                                                          You now have a Rails application with PostgreSQL and Sidekiq running on Qovery.

                                                                                                                          - + - + diff --git a/guides/tutorial/deploy-temporal-on-kubernetes/index.html b/guides/tutorial/deploy-temporal-on-kubernetes/index.html index 8800126830..0e14f07ea6 100644 --- a/guides/tutorial/deploy-temporal-on-kubernetes/index.html +++ b/guides/tutorial/deploy-temporal-on-kubernetes/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@ Save the settings and close the modal.

                                                                                                                          Qovery - Disable Public Port

                                                                                                                        • Add a PostgreSQL database

                                                                                                                          We will now add a PostgreSQL database to serve as a persistence layer to our Temporal server.

                                                                                                                          Click on Add then Database then fill the form:

                                                                                                                          • Pick a name for your DB.
                                                                                                                          • Type: PostgreSQL
                                                                                                                          • Mode: Container (less expensive than Managed for non-production environments)
                                                                                                                          • Version: 13
                                                                                                                          • Accessibility: Private

                                                                                                                          Qovery - Add Database

                                                                                                                          Qovery - Configure PosgreSQL

                                                                                                                          Your database is created:

                                                                                                                          Qovery - Application Created

                                                                                                                          Don't deploy it. We're not done setting-up our environment.

                                                                                                                        • Set the environment variables

                                                                                                                          Now we need to set a bunch of environment variables. Go back to your Temporal server app and click on Environment variables:

                                                                                                                          Qovery - Environment Variables

                                                                                                                          Add the following environment variables:

                                                                                                                          • DB=postgresql
                                                                                                                          • LOG_LEVEL=debug,info

                                                                                                                          Now create the following aliases on environment variables:

                                                                                                                          • QOVERY_POSTGRESQL_Z[DB ID]_HOST_INTERNAL: POSTGRES_SEEDS
                                                                                                                          • QOVERY_POSTGRESQL_[DB ID]_LOGIN: POSTGRES_USER
                                                                                                                          • QOVERY_POSTGRESQL_[DB ID]_PORT: DB_PORT

                                                                                                                          On an alias on secrets:

                                                                                                                          • QOVERY_POSTGRESQL_[DB ID]_PASSWORD: POSTGRES_PWD
                                                                                                                        • Deploy the Web UI

                                                                                                                          1. Create the Temporal UI application

                                                                                                                            Now go to the environment level, and click on Add. Similar to what you did for the server:

                                                                                                                            • Select your forked GitHub repository.
                                                                                                                            • Select Dockerfile as the build mode.
                                                                                                                            • Put Dockerfile.web for the Dockerfile path.
                                                                                                                            • Put 8088 as a port.
                                                                                                                            • Click Create.

                                                                                                                            Qovery - Create application 1

                                                                                                                            Qovery - Create application 2

                                                                                                                          2. Get the application ID of the Temporal server

                                                                                                                            To get the application ID of the Temporal server, go back to the corresponding app, and note the first part of the UUID in the browser URL.

                                                                                                                            Qovery - Get Application ID

                                                                                                                            Copy this ID somewhere.

                                                                                                                          3. Set the environment variables

                                                                                                                            Add the following environment variable:

                                                                                                                            • TEMPORAL_SERVER_PORT: 7233

                                                                                                                            Now create the following alias on environment variables:

                                                                                                                            • QOVERY_APPLICATION_Z[SERVER APPLICATION ID]_HOST_INTERNAL: TEMPORAL_SERVER_HOST

                                                                                                                          Deploy your environment

                                                                                                                          You can now deploy your environment. Go back to your environment view and click DEPLOY.

                                                                                                                          Qovery - Deploy Application

                                                                                                                          Once it's deployed and the status is RUNNING, you can go to the Web UI application and open it.

                                                                                                                          Qovery - Open Application

                                                                                                                          If you see the Temporal Web UI with no error, well done. Your server is deployed!

                                                                                                                          Temporal - UI

                                                                                                                          Split the temporal services for independent scaling.

                                                                                                                          Temporal server is composed of four different services. By default, they will all be running in the same process. But if you would like to scale them independently, you still have the option to deploy them separately.

                                                                                                                          See the Temporal docs for more information on the architecture: https://docs.temporal.io/docs/concepts/what-is-a-temporal-cluster

                                                                                                                          1. Clone your environment

                                                                                                                            We could start again from scratch or edit the running environment (which would require resetting the DB), but instead we will leverage the clone feature of Qovery, to start with an identical, clean environment.

                                                                                                                            On your environment page, click Actions then Clone.

                                                                                                                            Qovery - Clone Environment

                                                                                                                            Pick a name and click Create

                                                                                                                            Qovery - Clone Modal

                                                                                                                            You will land in an identical environment, not deployed yet. Don't deploy it right away, we will first split our services.

                                                                                                                          2. Switch your server service to frontend gateway

                                                                                                                            First we will rename the server application to call it temporal-frontend. Go to the server application and click Settings. Then change the name and save.

                                                                                                                            Qovery - Clone Modal

                                                                                                                          3. Add an env variable to flag the service

                                                                                                                            In order to tell our application that it should only start the frontend service, we'll add an env variable with the APPLICATION scope:

                                                                                                                            • SERVICES=frontend
                                                                                                                          4. Create the other services

                                                                                                                            Create three new application, following the steps you did for the server initially:

                                                                                                                            • temporal-history with an env variable SERVICES=history.
                                                                                                                            • temporal-matching with an env variable SERVICES=matching.
                                                                                                                            • temporal-worker with an env variable SERVICES=worker.

                                                                                                                            Each time set the port to 7233 and disable the public endpoint.

                                                                                                                            You should end up with something like this:

                                                                                                                            Qovery - Environment

                                                                                                                          5. Deploy your environment

                                                                                                                            You can now deploy your environment. -Once it is RUNNING, you can open the UI again and check everything is ok.

                                                                                                                          Conclusion

                                                                                                                          We have successfully deployed Temporal on Qovery. It can be useful for Staging or Preview environments but this is a very minimal deployment and we would not advise doing it for production.

                                                                                                                          There is no one-size-fits-all configuration for this type of products.

                                                                                                                          You would probably like to setup authentication on your Web UI as well. We include the config file in the GitHub repository. You can edit it to your needs, following this documentation.

                                                                                                                          For deploying on your Kubernetes cluster, check the documentation and the following article: https://docs.temporal.io/blog/temporal-and-kubernetes. The first video is worth watching.

                                                                                                                          +Once it is RUNNING, you can open the UI again and check everything is ok.

                                                                                                                          Conclusion

                                                                                                                          We have successfully deployed Temporal on Qovery. It can be useful for Staging or Preview environments but this is a very minimal deployment and we would not advise doing it for production.

                                                                                                                          There is no one-size-fits-all configuration for this type of products.

                                                                                                                          You would probably like to setup authentication on your Web UI as well. We include the config file in the GitHub repository. You can edit it to your needs, following this documentation.

                                                                                                                          For deploying on your Kubernetes cluster, check the documentation and the following article: https://docs.temporal.io/blog/temporal-and-kubernetes. The first video is worth watching.

                                                                                                                          - + - + diff --git a/guides/tutorial/generate-qovery-api-client/index.html b/guides/tutorial/generate-qovery-api-client/index.html index be3f839c3f..ef91b42ef0 100644 --- a/guides/tutorial/generate-qovery-api-client/index.html +++ b/guides/tutorial/generate-qovery-api-client/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@ After generating the client, we simply published the out/client folder as a Git Repository and then simply imported the code in the CLI application as a dependency:

                                                                                                                          package utils
                                                                                                                          import (
                                                                                                                          "github.com/qovery/qovery-client-go"
                                                                                                                          )

                                                                                                                          This allowed us to use the generated client code to interact with Qovery API very easily:

                                                                                                                          token, err := GetAccessToken()
                                                                                                                          if err != nil {
                                                                                                                          return err
                                                                                                                          }
                                                                                                                          auth := context.WithValue(context.Background(), qovery.ContextAccessToken, string(token))
                                                                                                                          client := qovery.NewAPIClient(qovery.NewConfiguration())
                                                                                                                          -
                                                                                                                          organizations, res, err := client.OrganizationMainCallsApi.ListOrganization(auth).Execute()
                                                                                                                          if err != nil {
                                                                                                                          return err
                                                                                                                          }
                                                                                                                          if res.StatusCode >= 400 {
                                                                                                                          return errors.New("Received " + res.Status + " response while listing organizations. ")
                                                                                                                          }

                                                                                                                          Summary

                                                                                                                          Qovery Open API specification allows creating Qovery API stubs extremely quickly. At Qovery, we officially support only Golang Client, but if you use a different language, you can generate your own client in a matter of seconds following the steps of this article.

                                                                                                                          +
                                                                                                                          organizations, res, err := client.OrganizationMainCallsApi.ListOrganization(auth).Execute()
                                                                                                                          if err != nil {
                                                                                                                          return err
                                                                                                                          }
                                                                                                                          if res.StatusCode >= 400 {
                                                                                                                          return errors.New("Received " + res.Status + " response while listing organizations. ")
                                                                                                                          }

                                                                                                                          Summary

                                                                                                                          Qovery Open API specification allows creating Qovery API stubs extremely quickly. At Qovery, we officially support only Golang Client, but if you use a different language, you can generate your own client in a matter of seconds following the steps of this article.

                                                                                                                          - + - + diff --git a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html index 647856e980..40e9ff20d6 100644 --- a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html +++ b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          Step-by-step guide to get started with the preview environment on AWS

                                                                                                                          It is critical to have testing and staging environments accurately reflect production, but achieving this can be a major operational hassle. Most engineering teams use a single staging environment which makes it hard for developers to test their changes in isolation; the alternative is for DevOps teams to spin up new testing or staging environments manually and tear them down after testing is done.

                                                                                                                          Qovery’s Preview Environments solve this problem by automatically creating a clone of your production environment (including applications, databases and configuration) on every pull request, so you can test your changes with confidence without affecting your production.

                                                                                                                          Flow on how Qovery Preview Environment works

                                                                                                                          Qovery keeps your preview environments up to date on every commit and automatically destroys them when the original pull request is merged or closed. You can also set up an expiry time to automatically clean up preview environments after a period of inactivity.

                                                                                                                          Preview Environments can be helpful in a lot of cases:

                                                                                                                          • Share your changes live in code reviews: no more Git diffs for visual changes!
                                                                                                                          • Get shareable links for upcoming features and collaborate more effectively with internal and external stakeholders.
                                                                                                                          • Run CI tests against a high fidelity copy of your production environment before merging.

                                                                                                                          In this step-by-step guide you will learn how to get started using the Preview Environments on AWS with Qovery.

                                                                                                                          Please contact us via our forum if you have any questions concerning the Preview Environments

                                                                                                                          Steps

                                                                                                                          1. Create a "Blueprint" environment
                                                                                                                          2. Enable Preview Environment feature
                                                                                                                          3. Create a Preview Environment
                                                                                                                          4. Delete a Preview Environment
                                                                                                                          5. Seed your database
                                                                                                                          6. Auto stop and start your Preview Environments
                                                                                                                          7. Integrate your CI (Continuous Deployment) platform

                                                                                                                          Create your Blueprint Environment

                                                                                                                          Even if not required, we recommend creating an environment that will serve as a root to create your Preview Environments. The idea is to keep this environment as a template of a fully working environment. This environment should not be directly used. This is what we call "blueprint environment".

                                                                                                                          I assume you already have a working environment, so to create a blueprint environment you need to:

                                                                                                                          1. Go to your working environment
                                                                                                                          2. Click on "Actions" > "Clone"
                                                                                                                          3. Name your environment "blueprint"
                                                                                                                          4. Click on "Create"

                                                                                                                          Enable Preview Environment

                                                                                                                          Now, you can go to turn on Preview Environments by:

                                                                                                                          1. Click on your Blueprint environment "Settings".
                                                                                                                          2. Click on the Preview Env. tab
                                                                                                                          3. Turn on Preview Environment feature for all your applications by clicking on Activate preview environment for all apps.

                                                                                                                          Change your base branch

                                                                                                                          Now that you have turned on the Preview Environment feature, you need to change the base branch from your applications inside your Blueprint Environment. Let's say, every new feature branch you create are coming from staging. Then you will need to change all your applications to target the staging branch.

                                                                                                                          Here is a flow example showing what happen when you create a new Pull Request from a feat/xxx branch that has been created from the base branch staging.

                                                                                                                          Flow on how Qovery Preview Environment Branching works

                                                                                                                          1. A developer creates a git branch feat/xxx is created from staging.
                                                                                                                          2. A developer creates a Pull Request for feat/xxx.
                                                                                                                          3. Qovery creates a Preview Environment feat/xxx from the blueprint environment. The frontend, backend, PostgreSQL and Redis instances are cloned!
                                                                                                                          4. The frontend app from the environment feat/xxx is accessible via a dedicated URL.

                                                                                                                          Validate your Blueprint Environment

                                                                                                                          Before creating a Preview Environment, validate that your Blueprint environment works.

                                                                                                                          Once done, you need to:

                                                                                                                          1. Stop your Blueprint environment by clicking on "Actions" > "Stop".
                                                                                                                          2. Turn off "auto-deploy" by clicking on "Settings" > "Deployment" > "Auto-deploy off" > "Save".

                                                                                                                          We are now ready to try out our Preview Environment configuration.

                                                                                                                          Create a Preview Environment

                                                                                                                          To create a Preview Environment, here are the steps:

                                                                                                                          1. Checkout your staging branch.
                                                                                                                          2. Create a branch test_qovery_preview_environment and push it.
                                                                                                                          3. Create a Pull Request/Merge Request.

                                                                                                                          You must see a new environment appearing in your environment list on Qovery. Wait until it is fully deployed, then you will be able to connect to it. This environment is fully isolated from your base environment.

                                                                                                                          Delete a Preview Environment

                                                                                                                          To delete you need to merge test_qovery_preview_environment into staging. You also have the ability to delete it manually on Qovery.

                                                                                                                          Advanced

                                                                                                                          Eager to know how to go integrate Qovery Preview Environments with your CI and much more? Check out our the following guides:

                                                                                                                          Wrapping up

                                                                                                                          Congrats! You have set up your Preview Environments features. Feel free to check out our forum and open a thread if you have any question. In the next guide, we will go deeper configuration to integrate the Preview Environment with your existing products and workflow.

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          6 min read
                                                                                                                          Updated

                                                                                                                          It is critical to have testing and staging environments accurately reflect production, but achieving this can be a major operational hassle. Most engineering teams use a single staging environment which makes it hard for developers to test their changes in isolation; the alternative is for DevOps teams to spin up new testing or staging environments manually and tear them down after testing is done.

                                                                                                                          Qovery’s Preview Environments solve this problem by automatically creating a clone of your production environment (including applications, databases and configuration) on every pull request, so you can test your changes with confidence without affecting your production.

                                                                                                                          Flow on how Qovery Preview Environment works

                                                                                                                          Qovery keeps your preview environments up to date on every commit and automatically destroys them when the original pull request is merged or closed. You can also set up an expiry time to automatically clean up preview environments after a period of inactivity.

                                                                                                                          Preview Environments can be helpful in a lot of cases:

                                                                                                                          • Share your changes live in code reviews: no more Git diffs for visual changes!
                                                                                                                          • Get shareable links for upcoming features and collaborate more effectively with internal and external stakeholders.
                                                                                                                          • Run CI tests against a high fidelity copy of your production environment before merging.

                                                                                                                          In this step-by-step guide you will learn how to get started using the Preview Environments on AWS with Qovery.

                                                                                                                          Please contact us via our forum if you have any questions concerning the Preview Environments

                                                                                                                          Steps

                                                                                                                          1. Create a "Blueprint" environment
                                                                                                                          2. Enable Preview Environment feature
                                                                                                                          3. Create a Preview Environment
                                                                                                                          4. Delete a Preview Environment
                                                                                                                          5. Seed your database
                                                                                                                          6. Auto stop and start your Preview Environments
                                                                                                                          7. Integrate your CI (Continuous Deployment) platform

                                                                                                                          Create your Blueprint Environment

                                                                                                                          Even if not required, we recommend creating an environment that will serve as a root to create your Preview Environments. The idea is to keep this environment as a template of a fully working environment. This environment should not be directly used. This is what we call "blueprint environment".

                                                                                                                          I assume you already have a working environment, so to create a blueprint environment you need to:

                                                                                                                          1. Go to your working environment
                                                                                                                          2. Click on "Actions" > "Clone"
                                                                                                                          3. Name your environment "blueprint"
                                                                                                                          4. Click on "Create"

                                                                                                                          Enable Preview Environment

                                                                                                                          Now, you can go to turn on Preview Environments by:

                                                                                                                          1. Click on your Blueprint environment "Settings".
                                                                                                                          2. Click on the Preview Env. tab
                                                                                                                          3. Turn on Preview Environment feature for all your applications by clicking on Activate preview environment for all apps.

                                                                                                                          Change your base branch

                                                                                                                          Now that you have turned on the Preview Environment feature, you need to change the base branch from your applications inside your Blueprint Environment. Let's say, every new feature branch you create are coming from staging. Then you will need to change all your applications to target the staging branch.

                                                                                                                          Here is a flow example showing what happen when you create a new Pull Request from a feat/xxx branch that has been created from the base branch staging.

                                                                                                                          Flow on how Qovery Preview Environment Branching works

                                                                                                                          1. A developer creates a git branch feat/xxx is created from staging.
                                                                                                                          2. A developer creates a Pull Request for feat/xxx.
                                                                                                                          3. Qovery creates a Preview Environment feat/xxx from the blueprint environment. The frontend, backend, PostgreSQL and Redis instances are cloned!
                                                                                                                          4. The frontend app from the environment feat/xxx is accessible via a dedicated URL.

                                                                                                                          Validate your Blueprint Environment

                                                                                                                          Before creating a Preview Environment, validate that your Blueprint environment works.

                                                                                                                          Once done, you need to:

                                                                                                                          1. Stop your Blueprint environment by clicking on "Actions" > "Stop".
                                                                                                                          2. Turn off "auto-deploy" by clicking on "Settings" > "Deployment" > "Auto-deploy off" > "Save".

                                                                                                                          We are now ready to try out our Preview Environment configuration.

                                                                                                                          Create a Preview Environment

                                                                                                                          To create a Preview Environment, here are the steps:

                                                                                                                          1. Checkout your staging branch.
                                                                                                                          2. Create a branch test_qovery_preview_environment and push it.
                                                                                                                          3. Create a Pull Request/Merge Request.

                                                                                                                          You must see a new environment appearing in your environment list on Qovery. Wait until it is fully deployed, then you will be able to connect to it. This environment is fully isolated from your base environment.

                                                                                                                          Delete a Preview Environment

                                                                                                                          To delete you need to merge test_qovery_preview_environment into staging. You also have the ability to delete it manually on Qovery.

                                                                                                                          Advanced

                                                                                                                          Eager to know how to go integrate Qovery Preview Environments with your CI and much more? Check out our the following guides:

                                                                                                                          Wrapping up

                                                                                                                          Congrats! You have set up your Preview Environments features. Feel free to check out our forum and open a thread if you have any question. In the next guide, we will go deeper configuration to integrate the Preview Environment with your existing products and workflow.

                                                                                                                          - + - + diff --git a/guides/tutorial/github-organization-repository-access/index.html b/guides/tutorial/github-organization-repository-access/index.html index 61a0569340..f419f713cd 100644 --- a/guides/tutorial/github-organization-repository-access/index.html +++ b/guides/tutorial/github-organization-repository-access/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          How to configure Github and Qovery to use your Github Organization repositories with Qovery

                                                                                                                          When you create a new application, you need to connect it to a Git repository. If your code is stored in a Github Organization, Qovery needs privileges to access your Organization's repositories -in order to run deployments.

                                                                                                                          Github Organization

                                                                                                                          If Organization repositories are missing in the repository selector, you will need to grant Qovery access to your organization.

                                                                                                                          1. Navigate to Qovery Github Application

                                                                                                                          2. Make sure Qovery has access to the organization you want to use (grant permissions if necessary)

                                                                                                                            Github Organization

                                                                                                                          After following the steps from above, you should be able to select your organization repositories in Qovery Console while creating an application.

                                                                                                                          +in order to run deployments.

                                                                                                                          Github Organization

                                                                                                                          If Organization repositories are missing in the repository selector, you will need to grant Qovery access to your organization.

                                                                                                                          1. Navigate to Qovery Github Application

                                                                                                                          2. Make sure Qovery has access to the organization you want to use (grant permissions if necessary)

                                                                                                                            Github Organization

                                                                                                                          After following the steps from above, you should be able to select your organization repositories in Qovery Console while creating an application.

                                                                                                                          - + - + diff --git a/guides/tutorial/grafana-install/index.html b/guides/tutorial/grafana-install/index.html index 4e1fa95a6f..d91f68d55c 100644 --- a/guides/tutorial/grafana-install/index.html +++ b/guides/tutorial/grafana-install/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          Grafana setup with Qovery

                                                                                                                          Easily setup Grafana with Qovery

                                                                                                                          Grafana is a famous Open Source solution to observe graphs and logs, supporting many data sources.

                                                                                                                          This tutorial explains how to install Grafana on Qovery, and you will see how easy it is.

                                                                                                                          Grafana setup

                                                                                                                          First of all, create a project and an environment. Then let's create Grafana application.

                                                                                                                          Create a Grafana application

                                                                                                                          Connect to the console and add a new application:

                                                                                                                          create gafana app

                                                                                                                          1. Set an application name
                                                                                                                          2. Select the application source type: Container registry
                                                                                                                          3. Select DockerHub Public (or the one you have. If you do not have one, create a registry pointing to DockerHub)
                                                                                                                          4. Set the image name: grafana/grafana
                                                                                                                          5. Take a look at the latest Grafana tags and set the tag you want to use (do not use latest one to avoid later issues)

                                                                                                                          Then set the resources to 1 instance and let other default values (Grafana doesn't consume a lot of resources):

                                                                                                                          set resources

                                                                                                                          Add a port mapping to the application, and set it to 3000:

                                                                                                                          set port

                                                                                                                          Finally, click on the Create button:

                                                                                                                          create app

                                                                                                                          Configure database storage

                                                                                                                          We're now going to create a volume that will contain Grafana default database:

                                                                                                                          create app

                                                                                                                          Go into Settings > Storage > Add Storage. Set the Path to /var/lib/grafana and the Size to 4Gi. Click on Create.

                                                                                                                          Usage

                                                                                                                          Now you can deploy Grafana :). On the top right, you have the Open links button which will help you to get quick access. Then connect with those credentials:

                                                                                                                          • Login: admin
                                                                                                                          • Password: admin

                                                                                                                          Cloudwatch Datasource

                                                                                                                          You can add several data sources to Grafana. One we recommend at Qovery for full-text search is Cloudwatch. First of all, you have to follow this guide to ensure all your logs are sent to Cloudwatch. Then, you can add a new data source in Grafana:

                                                                                                                          grafana cloudwatch

                                                                                                                          We advise you to use assume role or use a dedicated service account in read-only to access your logs. In this case, those permissions will be required:

                                                                                                                          {
                                                                                                                          "Version": "2012-10-17",
                                                                                                                          "Statement": [
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingLogsFromCloudWatch",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": [
                                                                                                                          "logs:DescribeLogGroups",
                                                                                                                          "logs:GetLogGroupFields",
                                                                                                                          "logs:StartQuery",
                                                                                                                          "logs:StopQuery",
                                                                                                                          "logs:GetQueryResults",
                                                                                                                          "logs:GetLogEvents"
                                                                                                                          ],
                                                                                                                          "Resource": "*"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
                                                                                                                          "Resource": "*"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingResourcesForTags",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": "tag:GetResources",
                                                                                                                          "Resource": "*"
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }

                                                                                                                          More info: https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/

                                                                                                                          Once done, you're able to create dashboards using Cloudwatch datasource and perform queries to your logs.

                                                                                                                          Links

                                                                                                                          +The currently used database is stored on the volume, so data will be lost on an application deletion. Qovery is going to implement configuration files for Docker in the coming weeks

                                                                                                                          Create a Grafana application

                                                                                                                          Connect to the console and add a new application:

                                                                                                                          create gafana app

                                                                                                                          1. Set an application name
                                                                                                                          2. Select the application source type: Container registry
                                                                                                                          3. Select DockerHub Public (or the one you have. If you do not have one, create a registry pointing to DockerHub)
                                                                                                                          4. Set the image name: grafana/grafana
                                                                                                                          5. Take a look at the latest Grafana tags and set the tag you want to use (do not use latest one to avoid later issues)

                                                                                                                          Then set the resources to 1 instance and let other default values (Grafana doesn't consume a lot of resources):

                                                                                                                          set resources

                                                                                                                          Add a port mapping to the application, and set it to 3000:

                                                                                                                          set port

                                                                                                                          Finally, click on the Create button:

                                                                                                                          create app

                                                                                                                          Configure database storage

                                                                                                                          We're now going to create a volume that will contain Grafana default database:

                                                                                                                          create app

                                                                                                                          Go into Settings > Storage > Add Storage. Set the Path to /var/lib/grafana and the Size to 4Gi. Click on Create.

                                                                                                                          Usage

                                                                                                                          Now you can deploy Grafana :). On the top right, you have the Open links button which will help you to get quick access. Then connect with those credentials:

                                                                                                                          • Login: admin
                                                                                                                          • Password: admin

                                                                                                                          Cloudwatch Datasource

                                                                                                                          You can add several data sources to Grafana. One we recommend at Qovery for full-text search is Cloudwatch. First of all, you have to follow this guide to ensure all your logs are sent to Cloudwatch. Then, you can add a new data source in Grafana:

                                                                                                                          grafana cloudwatch

                                                                                                                          We advise you to use assume role or use a dedicated service account in read-only to access your logs. In this case, those permissions will be required:

                                                                                                                          {
                                                                                                                          "Version": "2012-10-17",
                                                                                                                          "Statement": [
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingLogsFromCloudWatch",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": [
                                                                                                                          "logs:DescribeLogGroups",
                                                                                                                          "logs:GetLogGroupFields",
                                                                                                                          "logs:StartQuery",
                                                                                                                          "logs:StopQuery",
                                                                                                                          "logs:GetQueryResults",
                                                                                                                          "logs:GetLogEvents"
                                                                                                                          ],
                                                                                                                          "Resource": "*"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
                                                                                                                          "Resource": "*"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "Sid": "AllowReadingResourcesForTags",
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": "tag:GetResources",
                                                                                                                          "Resource": "*"
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }

                                                                                                                          More info: https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/

                                                                                                                          Once done, you're able to create dashboards using Cloudwatch datasource and perform queries to your logs.

                                                                                                                          Links

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html index 8aae6690e1..7384206685 100644 --- a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html +++ b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@ https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

                                                                                                                        • Select IAM user group you configured for Qovery as admin

                                                                                                                          In AWS console, go to IAM > User Groups

                                                                                                                          AWS console - go to user groups

                                                                                                                          then select the group you configured as admin group for Qovery (Admins in the example below).

                                                                                                                          AWS console - select admin user group

                                                                                                                        • Create a new policy to this group allowing full access to EKS resources

                                                                                                                          In this admin group, go to permissions tab. Click on Add permissions > Create inline policy.

                                                                                                                          AWS console - create new inline policy

                                                                                                                          Switch to JSON view.

                                                                                                                          AWS console - switch to inline policy creation json view

                                                                                                                          Put this content to the Policy editor:

                                                                                                                          {
                                                                                                                          "Version": "2012-10-17",
                                                                                                                          "Statement": [
                                                                                                                          {
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Action": [
                                                                                                                          "eks:*",
                                                                                                                          "sts:AssumeRole"
                                                                                                                          ],
                                                                                                                          "Resource": "*"
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }

                                                                                                                          Then click on Next.

                                                                                                                          AWS console - edit inline policy content

                                                                                                                          Give a name to this new policy, for example SSO_EKSClusterAdminAccess. Then click on Create Policy.

                                                                                                                          AWS console - create inline policy

                                                                                                                        • Set up CLI with SSO access to EKS

                                                                                                                          Create a named SSO profile using AWS CLI.

                                                                                                                          aws configure sso

                                                                                                                          You will be prompted an SSO session name, put what you want, I used sso-benjamin.

                                                                                                                          SSO session name (Recommended): sso-benjamin
                                                                                                                          Attempting to automatically open the SSO authorization page in your default browser.
                                                                                                                          If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
                                                                                                                          https://device.sso.us-east-2.amazonaws.com/
                                                                                                                          Then enter the code:
                                                                                                                          -
                                                                                                                          FHTG-****

                                                                                                                          You will be redirected to your browser, validate the form.

                                                                                                                          Then you will be prompted to select your AWS account.

                                                                                                                          There are 1 AWS account available to you.
                                                                                                                          > qovery, q@qovery.com (283389****)

                                                                                                                          Then you will be prompted for default region (eu-west-3 in my case), output format (json in my case) and profile name (bchastanier_sso in my case, but feel free to pick whatever you want).

                                                                                                                          Using the account ID 283389****
                                                                                                                          The only role available to you is: AdministratorAccess
                                                                                                                          Using the role name "AdministratorAccess"
                                                                                                                          CLI default client Region [None]: eu-west-3
                                                                                                                          CLI default output format [None]: json
                                                                                                                          CLI profile name: bchastanier_sso
                                                                                                                        • Get SSO role ARN

                                                                                                                          Go to AWS console > IAM > Roles.

                                                                                                                          AWS console - go to aws iam roles

                                                                                                                          Look for a role named AWSReservedSSO_xx and select it (name can varies based on what you have configured / how you named your Admins user group, but it should start with AWSReservedSSO_).

                                                                                                                          AWS console - look for SSO role

                                                                                                                          Copy its ARN and keep it somewhere, you will need it in next step.

                                                                                                                          AWS console - copy SSO role ARN

                                                                                                                        • Enable SSO on your cluster

                                                                                                                          Go to your clusters in Qovery console and click on cluster you want to activate SSO on settings.

                                                                                                                          AWS console - go to qovery cluster settings

                                                                                                                          Then go to advanced settings, and set:

                                                                                                                          • aws.iam.enable_sso to true
                                                                                                                          • aws.iam.sso_role_arn to the SSO role ARN string you copy from previous step.

                                                                                                                          AWS console - set qovery cluster advanced settings to enable SSO

                                                                                                                          Redeploy your cluster once advanced settings are saved.

                                                                                                                        • Download the Kubeconfig file

                                                                                                                          To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                                                                          When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                                                                          Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                                                                          Set the context for kubectl, run the following command:

                                                                                                                          export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                                                                          AWS console - get Kubeconfig

                                                                                                                        • Connect to your cluster

                                                                                                                          Connect via the CLI running this command:

                                                                                                                          aws sso login --profile <your-sso-profile-you-set-before>

                                                                                                                          This will open your browser and prompt you to connect, validate the form.

                                                                                                                          AWS console - validate SSO connection in browser

                                                                                                                          Now you should be able to access your cluster without anything else, let's try to get aws-auth configmap showing users and roles allowed to connect to the cluster:

                                                                                                                          AWS_PROFILE=<your-sso-profile-you-set-before> kubectl describe -n kube-system configmap/aws-auth

                                                                                                                          This should give you the config map content. If not, something is not properly configured.

                                                                                                                        • Conclusion

                                                                                                                          You can access your Qovery clusters via your SSO directly.

                                                                                                                          +
                                                                                                                          FHTG-****

                                                                                                                          You will be redirected to your browser, validate the form.

                                                                                                                          Then you will be prompted to select your AWS account.

                                                                                                                          There are 1 AWS account available to you.
                                                                                                                          > qovery, q@qovery.com (283389****)

                                                                                                                          Then you will be prompted for default region (eu-west-3 in my case), output format (json in my case) and profile name (bchastanier_sso in my case, but feel free to pick whatever you want).

                                                                                                                          Using the account ID 283389****
                                                                                                                          The only role available to you is: AdministratorAccess
                                                                                                                          Using the role name "AdministratorAccess"
                                                                                                                          CLI default client Region [None]: eu-west-3
                                                                                                                          CLI default output format [None]: json
                                                                                                                          CLI profile name: bchastanier_sso
                                                                                                                        • Get SSO role ARN

                                                                                                                          Go to AWS console > IAM > Roles.

                                                                                                                          AWS console - go to aws iam roles

                                                                                                                          Look for a role named AWSReservedSSO_xx and select it (name can varies based on what you have configured / how you named your Admins user group, but it should start with AWSReservedSSO_).

                                                                                                                          AWS console - look for SSO role

                                                                                                                          Copy its ARN and keep it somewhere, you will need it in next step.

                                                                                                                          AWS console - copy SSO role ARN

                                                                                                                        • Enable SSO on your cluster

                                                                                                                          Go to your clusters in Qovery console and click on cluster you want to activate SSO on settings.

                                                                                                                          AWS console - go to qovery cluster settings

                                                                                                                          Then go to advanced settings, and set:

                                                                                                                          • aws.iam.enable_sso to true
                                                                                                                          • aws.iam.sso_role_arn to the SSO role ARN string you copy from previous step.

                                                                                                                          AWS console - set qovery cluster advanced settings to enable SSO

                                                                                                                          Redeploy your cluster once advanced settings are saved.

                                                                                                                        • Download the Kubeconfig file

                                                                                                                          To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                                                                          When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                                                                          Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                                                                          Set the context for kubectl, run the following command:

                                                                                                                          export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                                                                          AWS console - get Kubeconfig

                                                                                                                        • Connect to your cluster

                                                                                                                          Connect via the CLI running this command:

                                                                                                                          aws sso login --profile <your-sso-profile-you-set-before>

                                                                                                                          This will open your browser and prompt you to connect, validate the form.

                                                                                                                          AWS console - validate SSO connection in browser

                                                                                                                          Now you should be able to access your cluster without anything else, let's try to get aws-auth configmap showing users and roles allowed to connect to the cluster:

                                                                                                                          AWS_PROFILE=<your-sso-profile-you-set-before> kubectl describe -n kube-system configmap/aws-auth

                                                                                                                          This should give you the config map content. If not, something is not properly configured.

                                                                                                                        • Conclusion

                                                                                                                          You can access your Qovery clusters via your SSO directly.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html index ceb608b3a4..7d29e6a4bd 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          Open-source eat the world. More and more great open-source projects are used. One standard method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. This guide will attempt to explain how to build a cloud-managed version of an open-source project.

                                                                                                                          As a developer, I am super impressed by the number of great open-source projects popping around. I think of Supabase (an open-source alternative to Firebase), Strapi (open-source headless CMS), Meilisearch (open-source search engine), Posthog (open-source product analytics tool), and so many others. For me, these are the tools that most developers will use in the future. One common method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. It is exactly what Hasura did with its cloud version - and it is pretty convenient to use their product in production. However, building a cloud version takes months (sometimes years). What takes time? Hiring platform engineers, building the infrastructure, testing it, monitoring it... All of that takes a considerable amount of time and effort. Luckily, at Qovery, we provide the infrastructure stack that every open-source project needs to build 90% of their cloud-managed version. The remaining 10% are the UI and the business model logic. In this 6-part article series, I will attempt to explain how to build a cloud-managed version of AppWrite. Let’s go!

                                                                                                                          Articles:

                                                                                                                          • Part 1: Introduction and architecture
                                                                                                                          • Part 2: Build our AppWrite cloud backend and integrate it with the Qovery API
                                                                                                                          • Part 3: Build our AppWrite cloud frontend and combine it with our cloud backend
                                                                                                                          • Part 4: Monitor our AppWrite cloud version
                                                                                                                          • Part 5: Integrate the payment system with Stripe (optional)
                                                                                                                          • Part 6: Integrate email notification with Courier (optional)
                                                                                                                          • Part 7: Give your customer a production, staging, and dev environment (optional)

                                                                                                                          Before getting started

                                                                                                                          Motivation

                                                                                                                          Since I launched Qovery in 2019, I have talked to dozens of founders from great open-source software companies. Most of them were looking to build their cloud-managed service at some point. Some of them even asked me for feedback on building one and asked me to use Qovery as a white-label technology when they discovered it was a full-time job. Qovery is a product simplifying app deployment and infrastructure management on AWS. Time flies, and as Qovery evolves, it is now possible for any open-source project to use Qovery as a white-label technology to provide a cloud version of an open-source project. No hidden cost. Just pick the plan that fits you best and build your cloud version in days instead of months. My team will be proud to help you in your success.

                                                                                                                          Why AppWrite

                                                                                                                          AppWrite is quite representative of a “modern web open-source project”. In this guide, AppWrite is used as a demo project to demonstrate the concept of building a cloud-managed version for an open-source web project. AppWrite is written in PHP for the backend and JS for the frontend. It provides a user-friendly web interface connected to a web API, and it stores the data in MariaDB and Redis databases. The idea is: if it works for AppWrite, then it is good to work for any other web open-source project with a similar technical stack. Feel free to contact me if you have any concerns.

                                                                                                                          Technologies

                                                                                                                          AppWrite is a Backend as a Service open-source software. It is similar to Supabase and Firebase to create a backend in a few minutes.

                                                                                                                          Our goal is to provide a fully managed cloud version of AppWrite. Meaning we need to deliver to our customers a way to order their AppWrite instance and use it, while the maintenance is handled by us. It is the most common managed version out there - think MongoDB Atlas. To achieve this, we will use the following technologies:

                                                                                                                          • AppWrite: We will use AppWrite Docker container image to run the latest version of AppWrite.
                                                                                                                          • MariaDB: AppWrite is using a MariaDB server for managing persistent database data.
                                                                                                                          • Redis: AppWrite uses a Redis server for managing cache, queues, and scheduled tasks.
                                                                                                                          • AWS: We will host AppWrite on AWS EKS (Kubernetes), Redis (in-memory database), and MariaDB (AWS RDS) for each customer on AWS.
                                                                                                                          • Qovery: Qovery will create an environment composed of AppWrite, Redis, and MariaDB for each customer on our AWS account.
                                                                                                                          • Hasura: Low-code GraphQL backend to manage our customers’ data.
                                                                                                                          • GatsbyJS: JS frontend framework to provide a web interface to our customers.
                                                                                                                          • PostgreSQL: database to store our customers’ data
                                                                                                                          • Auth0: To manage the auth of our customers.
                                                                                                                          • Stripe: To charge our customers.
                                                                                                                          • Courier: To send an email and Slack notifications to our customers.

                                                                                                                          This bunch of technologies combined enable us to build a cloud version for AppWrite. Let’s take a deeper look at how all of them are interconnected.

                                                                                                                          Architecture

                                                                                                                          architecture schema

                                                                                                                          This schema represents the different layers composing the cloud version of AppWrite. From top to bottom, we will give the details of each layer.

                                                                                                                          User flow 1: Customer request an AppWrite instance

                                                                                                                          customer request an appwrite instance - behind the scene

                                                                                                                          Here is what happens when the customer requests a cloud AppWrite instance:

                                                                                                                          1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                                                                          2. The customer requests a new AppWrite instance.
                                                                                                                          3. The AppWrite cloud backend calls the Qovery API to create an Environment.
                                                                                                                          4. The AppWrite cloud backend calls the Qovery API to create a MariaDB database.
                                                                                                                          5. The AppWrite cloud backend calls the Qovery API to create a Redis database.
                                                                                                                          6. The AppWrite cloud backend calls the Qovery API to create an AppWrite application.
                                                                                                                          7. The AppWrite cloud backend calls the Qovery API to bind the AppWrite application to the MariaDB and Redis databases.
                                                                                                                          8. The AppWrite cloud backend calls the Qovery API to start the Environment.
                                                                                                                          9. The Qovery API returns the temporary URL to the AppWrite cloud backend.
                                                                                                                          10. The customer receives the URL of his instance via the AppWrite cloud frontend.
                                                                                                                          11. The customer can use his AppWrite instance.

                                                                                                                          User flow 2: customer deletes an AppWrite instance

                                                                                                                          customer deletes an appwrite instance - behind the scene

                                                                                                                          Let’s say our customer now wants to delete his cloud AppWrite instance; this is what happens:

                                                                                                                          1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                                                                          2. The customer removes his AppWrite instance.
                                                                                                                          3. The AppWrite cloud backend calls the Qovery API to delete the customer Environment.
                                                                                                                          4. Qovery deletes the AppWrite application, MariaDB, and Redis databases.

                                                                                                                          We can add other steps like payment (part 5), notifications (part 6), and everything you want - they are not required to make our cloud version functional. Let’s now take a deeper look at the infrastructure.

                                                                                                                          AppWrite cloud frontend and backend (control plane)

                                                                                                                          The AppWrite cloud frontend and backend are the two components that we have to build from scratch. It includes our business logic and customer management system. We will use Hasura for the backend and GatsbyJS for the frontend. We will connect the frontend to the backend via a GraphQL API. The advantage of using Hasura instead of coding our web backend is that we have access to many features (Auth0, Stripe support...) right away. Saving days of work.

                                                                                                                          The goal here is to provide to the customers a web interface to:

                                                                                                                          • Create, update, stop, restart, delete AppWrite instances.
                                                                                                                          • Configure their custom domain.
                                                                                                                          • Charge our customers and let them pay for their subscriptions

                                                                                                                          Qovery and AWS

                                                                                                                          Qovery is the simplest way to deploy apps and manage your infrastructure on AWS. We will use Qovery as an Infrastructure as Code (IaC) API.

                                                                                                                          Qovery provides a production-ready infrastructure on our AWS account in 30 minutes that we will use to host our customers’ instances. The Qovery API provides a high-level abstraction to create for each customer an isolated Environment including:

                                                                                                                          1. An AppWrite app instance with the possibility to scale it horizontally.
                                                                                                                          2. A MariaDB database.
                                                                                                                          3. A Redis database.
                                                                                                                          4. An HTTPS endpoint.
                                                                                                                          5. The option to bind a custom domain with TLS.
                                                                                                                          6. A secure API to manage Environment variables and Secrets.

                                                                                                                          Each Environment is isolated and will be accessible for only one customer. And as admin, Qovery provides a web interface to manage all our customers’ instances and troubleshoot any of their issues.

                                                                                                                          Curious to know more about how Qovery works? Take a look at this page.

                                                                                                                          Qovery and other cloud providers

                                                                                                                          Qovery supports AWS, Digital Ocean, and Scaleway. In this guide, we will focus on AWS to make it simpler. But keep in mind that you can use another supported cloud provider. You can even imagine a feature where your customers can choose the cloud provider of their choice. This is exactly what “MongoDB Atlas” and “Hasura Cloud” do.

                                                                                                                          Side note: Qovery will support Google Cloud Platform and Microsoft Azure for S1 2022.

                                                                                                                          MariaDB - Data persistence and backup

                                                                                                                          Our customers expect us to provide a reliable service and manage the database backups by using a cloud version. For AppWrite, MariaDB is the persistent database and needs to be backed up. Four options with pros and cons do exist:

                                                                                                                          1st option: single-tenant MariaDB container

                                                                                                                          Pros:

                                                                                                                          • Cheap
                                                                                                                          • Fast to spawn
                                                                                                                          • Physical isolation per customer
                                                                                                                          • Decent performance

                                                                                                                          Cons:

                                                                                                                          • You have to manage the backups

                                                                                                                          2nd option: multi-tenant MariaDB container

                                                                                                                          Pros:

                                                                                                                          • The cheapest option (1 container divided by the number of customers means higher margins)
                                                                                                                          • Fast to spawn

                                                                                                                          Cons:

                                                                                                                          • You have to manage the backups
                                                                                                                          • No physical isolation per customer
                                                                                                                          • The more you have customers, the poorest the performance is.
                                                                                                                          • Potential security breaches as many customers are using the same database instance.

                                                                                                                          3rd option: single-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                                                                          Pros:

                                                                                                                          • Backup managed by AWS (point-in-time recovery included)
                                                                                                                          • Physical isolation per customer (security++)
                                                                                                                          • The most performant
                                                                                                                          • Scalable (managed by AWS)

                                                                                                                          Cons:

                                                                                                                          • The most expensive option (~$11 per instance for the cheapest one on AWS US-EAST-2)

                                                                                                                          4th option: multi-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                                                                          Pros:

                                                                                                                          • Backup managed by AWS (point-in-time recovery included)
                                                                                                                          • Higher performance than container version
                                                                                                                          • Scalable (managed by AWS)
                                                                                                                          • Expensive for a few customers, but the more customers you have, the cheaper it is.

                                                                                                                          Cons:

                                                                                                                          • The most expensive option (~$11 per instance for the cheapest one on AWS us-east-2)
                                                                                                                          • Potential security breaches as many customers are using the same database instance.

                                                                                                                          We will pick the third option (single-tenant with managed MariaDB database) to create a state-of-the-art cloud version, but you are free to choose the one you want for your customer. Do not forget your customer expects you to take care of their business.

                                                                                                                          Side note: AppWrite uses Redis as a caching system. Then, we will use a Redis container instance which is the cheapest.

                                                                                                                          Contributors

                                                                                                                          Here is the list of contributors to this first part:

                                                                                                                          • Ricardo Sueiras - Principal Advocate in OSS at AWS
                                                                                                                          • Raman Sharma - VP Product Marketing at DigitalOcean
                                                                                                                          • Anton Babenko - AWS Community Hero and Hashicorp Ambassador
                                                                                                                          • Javier Viola Villanueva - Simulation Network Lead at Parity
                                                                                                                          • Ziad Ghalleb - Product Marketing Manager at Gitguardian
                                                                                                                          • Oliver Juhl - CTO and co-founder at Medusa
                                                                                                                          • Yann Irbah - SRE at Fewlines
                                                                                                                          • Laurent Doguin - ex VP Developer Relation at Clever Cloud
                                                                                                                          • Qovery Team and our community ambassadors (Aggis, Stun3r, Kartik)

                                                                                                                          Thank you to our contributors for their review and suggestions.

                                                                                                                          What’s next

                                                                                                                          Thank you all for taking the time to read until the end. We will build our AppWrite cloud backend and integrate it into the Qovery API in the next part.

                                                                                                                          Tutorial
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          11 min read
                                                                                                                          Updated

                                                                                                                          As a developer, I am super impressed by the number of great open-source projects popping around. I think of Supabase (an open-source alternative to Firebase), Strapi (open-source headless CMS), Meilisearch (open-source search engine), Posthog (open-source product analytics tool), and so many others. For me, these are the tools that most developers will use in the future. One common method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. It is exactly what Hasura did with its cloud version - and it is pretty convenient to use their product in production. However, building a cloud version takes months (sometimes years). What takes time? Hiring platform engineers, building the infrastructure, testing it, monitoring it... All of that takes a considerable amount of time and effort. Luckily, at Qovery, we provide the infrastructure stack that every open-source project needs to build 90% of their cloud-managed version. The remaining 10% are the UI and the business model logic. In this 6-part article series, I will attempt to explain how to build a cloud-managed version of AppWrite. Let’s go!

                                                                                                                          Articles:

                                                                                                                          • Part 1: Introduction and architecture
                                                                                                                          • Part 2: Build our AppWrite cloud backend and integrate it with the Qovery API
                                                                                                                          • Part 3: Build our AppWrite cloud frontend and combine it with our cloud backend
                                                                                                                          • Part 4: Monitor our AppWrite cloud version
                                                                                                                          • Part 5: Integrate the payment system with Stripe (optional)
                                                                                                                          • Part 6: Integrate email notification with Courier (optional)
                                                                                                                          • Part 7: Give your customer a production, staging, and dev environment (optional)

                                                                                                                          Before getting started

                                                                                                                          Motivation

                                                                                                                          Since I launched Qovery in 2019, I have talked to dozens of founders from great open-source software companies. Most of them were looking to build their cloud-managed service at some point. Some of them even asked me for feedback on building one and asked me to use Qovery as a white-label technology when they discovered it was a full-time job. Qovery is a product simplifying app deployment and infrastructure management on AWS. Time flies, and as Qovery evolves, it is now possible for any open-source project to use Qovery as a white-label technology to provide a cloud version of an open-source project. No hidden cost. Just pick the plan that fits you best and build your cloud version in days instead of months. My team will be proud to help you in your success.

                                                                                                                          Why AppWrite

                                                                                                                          AppWrite is quite representative of a “modern web open-source project”. In this guide, AppWrite is used as a demo project to demonstrate the concept of building a cloud-managed version for an open-source web project. AppWrite is written in PHP for the backend and JS for the frontend. It provides a user-friendly web interface connected to a web API, and it stores the data in MariaDB and Redis databases. The idea is: if it works for AppWrite, then it is good to work for any other web open-source project with a similar technical stack. Feel free to contact me if you have any concerns.

                                                                                                                          Technologies

                                                                                                                          AppWrite is a Backend as a Service open-source software. It is similar to Supabase and Firebase to create a backend in a few minutes.

                                                                                                                          Our goal is to provide a fully managed cloud version of AppWrite. Meaning we need to deliver to our customers a way to order their AppWrite instance and use it, while the maintenance is handled by us. It is the most common managed version out there - think MongoDB Atlas. To achieve this, we will use the following technologies:

                                                                                                                          • AppWrite: We will use AppWrite Docker container image to run the latest version of AppWrite.
                                                                                                                          • MariaDB: AppWrite is using a MariaDB server for managing persistent database data.
                                                                                                                          • Redis: AppWrite uses a Redis server for managing cache, queues, and scheduled tasks.
                                                                                                                          • AWS: We will host AppWrite on AWS EKS (Kubernetes), Redis (in-memory database), and MariaDB (AWS RDS) for each customer on AWS.
                                                                                                                          • Qovery: Qovery will create an environment composed of AppWrite, Redis, and MariaDB for each customer on our AWS account.
                                                                                                                          • Hasura: Low-code GraphQL backend to manage our customers’ data.
                                                                                                                          • GatsbyJS: JS frontend framework to provide a web interface to our customers.
                                                                                                                          • PostgreSQL: database to store our customers’ data
                                                                                                                          • Auth0: To manage the auth of our customers.
                                                                                                                          • Stripe: To charge our customers.
                                                                                                                          • Courier: To send an email and Slack notifications to our customers.

                                                                                                                          This bunch of technologies combined enable us to build a cloud version for AppWrite. Let’s take a deeper look at how all of them are interconnected.

                                                                                                                          Architecture

                                                                                                                          architecture schema

                                                                                                                          This schema represents the different layers composing the cloud version of AppWrite. From top to bottom, we will give the details of each layer.

                                                                                                                          User flow 1: Customer request an AppWrite instance

                                                                                                                          customer request an appwrite instance - behind the scene

                                                                                                                          Here is what happens when the customer requests a cloud AppWrite instance:

                                                                                                                          1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                                                                          2. The customer requests a new AppWrite instance.
                                                                                                                          3. The AppWrite cloud backend calls the Qovery API to create an Environment.
                                                                                                                          4. The AppWrite cloud backend calls the Qovery API to create a MariaDB database.
                                                                                                                          5. The AppWrite cloud backend calls the Qovery API to create a Redis database.
                                                                                                                          6. The AppWrite cloud backend calls the Qovery API to create an AppWrite application.
                                                                                                                          7. The AppWrite cloud backend calls the Qovery API to bind the AppWrite application to the MariaDB and Redis databases.
                                                                                                                          8. The AppWrite cloud backend calls the Qovery API to start the Environment.
                                                                                                                          9. The Qovery API returns the temporary URL to the AppWrite cloud backend.
                                                                                                                          10. The customer receives the URL of his instance via the AppWrite cloud frontend.
                                                                                                                          11. The customer can use his AppWrite instance.

                                                                                                                          User flow 2: customer deletes an AppWrite instance

                                                                                                                          customer deletes an appwrite instance - behind the scene

                                                                                                                          Let’s say our customer now wants to delete his cloud AppWrite instance; this is what happens:

                                                                                                                          1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                                                                          2. The customer removes his AppWrite instance.
                                                                                                                          3. The AppWrite cloud backend calls the Qovery API to delete the customer Environment.
                                                                                                                          4. Qovery deletes the AppWrite application, MariaDB, and Redis databases.

                                                                                                                          We can add other steps like payment (part 5), notifications (part 6), and everything you want - they are not required to make our cloud version functional. Let’s now take a deeper look at the infrastructure.

                                                                                                                          AppWrite cloud frontend and backend (control plane)

                                                                                                                          The AppWrite cloud frontend and backend are the two components that we have to build from scratch. It includes our business logic and customer management system. We will use Hasura for the backend and GatsbyJS for the frontend. We will connect the frontend to the backend via a GraphQL API. The advantage of using Hasura instead of coding our web backend is that we have access to many features (Auth0, Stripe support...) right away. Saving days of work.

                                                                                                                          The goal here is to provide to the customers a web interface to:

                                                                                                                          • Create, update, stop, restart, delete AppWrite instances.
                                                                                                                          • Configure their custom domain.
                                                                                                                          • Charge our customers and let them pay for their subscriptions

                                                                                                                          Qovery and AWS

                                                                                                                          Qovery is the simplest way to deploy apps and manage your infrastructure on AWS. We will use Qovery as an Infrastructure as Code (IaC) API.

                                                                                                                          Qovery provides a production-ready infrastructure on our AWS account in 30 minutes that we will use to host our customers’ instances. The Qovery API provides a high-level abstraction to create for each customer an isolated Environment including:

                                                                                                                          1. An AppWrite app instance with the possibility to scale it horizontally.
                                                                                                                          2. A MariaDB database.
                                                                                                                          3. A Redis database.
                                                                                                                          4. An HTTPS endpoint.
                                                                                                                          5. The option to bind a custom domain with TLS.
                                                                                                                          6. A secure API to manage Environment variables and Secrets.

                                                                                                                          Each Environment is isolated and will be accessible for only one customer. And as admin, Qovery provides a web interface to manage all our customers’ instances and troubleshoot any of their issues.

                                                                                                                          Curious to know more about how Qovery works? Take a look at this page.

                                                                                                                          Qovery and other cloud providers

                                                                                                                          Qovery supports AWS, Digital Ocean, and Scaleway. In this guide, we will focus on AWS to make it simpler. But keep in mind that you can use another supported cloud provider. You can even imagine a feature where your customers can choose the cloud provider of their choice. This is exactly what “MongoDB Atlas” and “Hasura Cloud” do.

                                                                                                                          Side note: Qovery will support Google Cloud Platform and Microsoft Azure for S1 2022.

                                                                                                                          MariaDB - Data persistence and backup

                                                                                                                          Our customers expect us to provide a reliable service and manage the database backups by using a cloud version. For AppWrite, MariaDB is the persistent database and needs to be backed up. Four options with pros and cons do exist:

                                                                                                                          1st option: single-tenant MariaDB container

                                                                                                                          Pros:

                                                                                                                          • Cheap
                                                                                                                          • Fast to spawn
                                                                                                                          • Physical isolation per customer
                                                                                                                          • Decent performance

                                                                                                                          Cons:

                                                                                                                          • You have to manage the backups

                                                                                                                          2nd option: multi-tenant MariaDB container

                                                                                                                          Pros:

                                                                                                                          • The cheapest option (1 container divided by the number of customers means higher margins)
                                                                                                                          • Fast to spawn

                                                                                                                          Cons:

                                                                                                                          • You have to manage the backups
                                                                                                                          • No physical isolation per customer
                                                                                                                          • The more you have customers, the poorest the performance is.
                                                                                                                          • Potential security breaches as many customers are using the same database instance.

                                                                                                                          3rd option: single-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                                                                          Pros:

                                                                                                                          • Backup managed by AWS (point-in-time recovery included)
                                                                                                                          • Physical isolation per customer (security++)
                                                                                                                          • The most performant
                                                                                                                          • Scalable (managed by AWS)

                                                                                                                          Cons:

                                                                                                                          • The most expensive option (~$11 per instance for the cheapest one on AWS US-EAST-2)

                                                                                                                          4th option: multi-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                                                                          Pros:

                                                                                                                          • Backup managed by AWS (point-in-time recovery included)
                                                                                                                          • Higher performance than container version
                                                                                                                          • Scalable (managed by AWS)
                                                                                                                          • Expensive for a few customers, but the more customers you have, the cheaper it is.

                                                                                                                          Cons:

                                                                                                                          • The most expensive option (~$11 per instance for the cheapest one on AWS us-east-2)
                                                                                                                          • Potential security breaches as many customers are using the same database instance.

                                                                                                                          We will pick the third option (single-tenant with managed MariaDB database) to create a state-of-the-art cloud version, but you are free to choose the one you want for your customer. Do not forget your customer expects you to take care of their business.

                                                                                                                          Side note: AppWrite uses Redis as a caching system. Then, we will use a Redis container instance which is the cheapest.

                                                                                                                          Contributors

                                                                                                                          Here is the list of contributors to this first part:

                                                                                                                          • Ricardo Sueiras - Principal Advocate in OSS at AWS
                                                                                                                          • Raman Sharma - VP Product Marketing at DigitalOcean
                                                                                                                          • Anton Babenko - AWS Community Hero and Hashicorp Ambassador
                                                                                                                          • Javier Viola Villanueva - Simulation Network Lead at Parity
                                                                                                                          • Ziad Ghalleb - Product Marketing Manager at Gitguardian
                                                                                                                          • Oliver Juhl - CTO and co-founder at Medusa
                                                                                                                          • Yann Irbah - SRE at Fewlines
                                                                                                                          • Laurent Doguin - ex VP Developer Relation at Clever Cloud
                                                                                                                          • Qovery Team and our community ambassadors (Aggis, Stun3r, Kartik)

                                                                                                                          Thank you to our contributors for their review and suggestions.

                                                                                                                          What’s next

                                                                                                                          Thank you all for taking the time to read until the end. We will build our AppWrite cloud backend and integrate it into the Qovery API in the next part.

                                                                                                                          Tutorial
                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html index 4e3d86acaa..6afb1fb5d7 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          response = StopProjectOutput{
                                                                                                                          Ok: false,
                                                                                                                          }
                                                                                                                          // try to stop a project using Qovery API
                                                                                                                          err = callQoveryApi(args.Input.Id)
                                                                                                                          if err != nil {
                                                                                                                          return response, err
                                                                                                                          }
                                                                                                                          response.Ok = true
                                                                                                                          -
                                                                                                                          return response, nil
                                                                                                                          }

                                                                                                                          You can see the whole code in your forked repository on Github.

                                                                                                                          Testing AppWrite Cloud Backend

                                                                                                                          Signup

                                                                                                                          After a few minutes of deployment, the first version of our managed cloud solution should be ready. Let's use the Hasura GraphQL API to create a new user.

                                                                                                                          To do so, open your Hasura by clicking the Open button in your Hasura application. Then, run the following mutation in the GraphQL explorer:

                                                                                                                          mutation {
                                                                                                                          Signup(input: {email: "pjeziorowski@qovery.com", password: "mysecret"}) {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }

                                                                                                                          You'll end up with a response like this:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "Signup": {
                                                                                                                          "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLXVzZXItaWQiOiIyIiwieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoiYWRtaW4iLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbImFkbWluIl19LCJleHAiOjE2Mzc0ODAxNDR9.aNv72YwjWXkKItDPxQOe5bB7LPo8ZCZ0Gqb3mR6_KQI"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Great! We have just created our first user and received a token to interact with AppWrite Cloud API.

                                                                                                                          Create Project

                                                                                                                          Now, let's create our first managed AppWrite instance. In headers, include Authorization header with the Bearer token received when signing up:

                                                                                                                          mutation {
                                                                                                                          CreateProject(input: {name: "myproject"}) {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }

                                                                                                                          You should see a response similar to this one:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "CreateProject": {
                                                                                                                          "id": 10,
                                                                                                                          "name": "myproject",
                                                                                                                          "url": "<https://zf3f05b5a-zab0fb2f8-gtw.oom.sh>"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Great! In the response, we have received the URL we can use to access our managed AppWrite instance.

                                                                                                                          When we peek into Qovery UI, we see the created project for our managed AppWrite:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Start / Stop Project

                                                                                                                          It's the time to start our project. To do so, run the following mutation:

                                                                                                                          mutation {
                                                                                                                          StartProject(input: {id: 10}) {
                                                                                                                          ok
                                                                                                                          }
                                                                                                                          }

                                                                                                                          We should get this response:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "StartProject": {
                                                                                                                          "ok": true
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          And looking into Qovery, we'll see our environment is starting:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          After a few minutes, our AppWrite instance should be available up and running using the URL from the previous response. We can also list our projects to get all projects' URLs:

                                                                                                                          {
                                                                                                                          project(where: {user: {id: {_eq: 1}}}) {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Response:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "project": [
                                                                                                                          {
                                                                                                                          "id": 9,
                                                                                                                          "name": "appwrite1",
                                                                                                                          "url": "https://zd3da7904-z24aae066-gtw.oom.sh"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "id": 10,
                                                                                                                          "name": "myproject",
                                                                                                                          "url": "https://zf3f05b5a-zab0fb2f8-gtw.oom.sh"
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }
                                                                                                                          }

                                                                                                                          AppWrite Cloud API domain

                                                                                                                          Now, as the last step of this part of tutorial, let's set up a custom domain for our AppWrite Cloud.

                                                                                                                          To do so, all we need to do is to follow a few simple steps:

                                                                                                                          1. Navigate to the Hasura GraphQL API application in Qovery Console
                                                                                                                          2. Click Add button and select Custom Domain

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Type the name of desired domain, click Add and copy the Value displayed in the box below

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Add a CNAME record with value copied in the previous step in your domain provider DNS management settings

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Restart Hasura application

                                                                                                                          Congratulations, your AppWrite Cloud API will be exposed using your custom domain shortly.

                                                                                                                          Conclusion

                                                                                                                          In this tutorial, we have managed to bootstrap the backend for our AppWrite Cloud solution. Users can register, log in, create and deploy managed AppWrite projects. In the following steps, we will add more functionalities to our AppWrite Cloud offering, set up a nice to use web User Interface and continue adding new features to AppWrite Cloud on top of Qovery.

                                                                                                                          +
                                                                                                                          return response, nil
                                                                                                                          }

                                                                                                                          You can see the whole code in your forked repository on Github.

                                                                                                                          Testing AppWrite Cloud Backend

                                                                                                                          Signup

                                                                                                                          After a few minutes of deployment, the first version of our managed cloud solution should be ready. Let's use the Hasura GraphQL API to create a new user.

                                                                                                                          To do so, open your Hasura by clicking the Open button in your Hasura application. Then, run the following mutation in the GraphQL explorer:

                                                                                                                          mutation {
                                                                                                                          Signup(input: {email: "pjeziorowski@qovery.com", password: "mysecret"}) {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }

                                                                                                                          You'll end up with a response like this:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "Signup": {
                                                                                                                          "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLXVzZXItaWQiOiIyIiwieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoiYWRtaW4iLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbImFkbWluIl19LCJleHAiOjE2Mzc0ODAxNDR9.aNv72YwjWXkKItDPxQOe5bB7LPo8ZCZ0Gqb3mR6_KQI"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Great! We have just created our first user and received a token to interact with AppWrite Cloud API.

                                                                                                                          Create Project

                                                                                                                          Now, let's create our first managed AppWrite instance. In headers, include Authorization header with the Bearer token received when signing up:

                                                                                                                          mutation {
                                                                                                                          CreateProject(input: {name: "myproject"}) {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }

                                                                                                                          You should see a response similar to this one:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "CreateProject": {
                                                                                                                          "id": 10,
                                                                                                                          "name": "myproject",
                                                                                                                          "url": "<https://zf3f05b5a-zab0fb2f8-gtw.oom.sh>"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Great! In the response, we have received the URL we can use to access our managed AppWrite instance.

                                                                                                                          When we peek into Qovery UI, we see the created project for our managed AppWrite:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Start / Stop Project

                                                                                                                          It's the time to start our project. To do so, run the following mutation:

                                                                                                                          mutation {
                                                                                                                          StartProject(input: {id: 10}) {
                                                                                                                          ok
                                                                                                                          }
                                                                                                                          }

                                                                                                                          We should get this response:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "StartProject": {
                                                                                                                          "ok": true
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }

                                                                                                                          And looking into Qovery, we'll see our environment is starting:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          After a few minutes, our AppWrite instance should be available up and running using the URL from the previous response. We can also list our projects to get all projects' URLs:

                                                                                                                          {
                                                                                                                          project(where: {user: {id: {_eq: 1}}}) {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Response:

                                                                                                                          {
                                                                                                                          "data": {
                                                                                                                          "project": [
                                                                                                                          {
                                                                                                                          "id": 9,
                                                                                                                          "name": "appwrite1",
                                                                                                                          "url": "https://zd3da7904-z24aae066-gtw.oom.sh"
                                                                                                                          },
                                                                                                                          {
                                                                                                                          "id": 10,
                                                                                                                          "name": "myproject",
                                                                                                                          "url": "https://zf3f05b5a-zab0fb2f8-gtw.oom.sh"
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }
                                                                                                                          }

                                                                                                                          AppWrite Cloud API domain

                                                                                                                          Now, as the last step of this part of tutorial, let's set up a custom domain for our AppWrite Cloud.

                                                                                                                          To do so, all we need to do is to follow a few simple steps:

                                                                                                                          1. Navigate to the Hasura GraphQL API application in Qovery Console
                                                                                                                          2. Click Add button and select Custom Domain

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Type the name of desired domain, click Add and copy the Value displayed in the box below

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Add a CNAME record with value copied in the previous step in your domain provider DNS management settings

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          1. Restart Hasura application

                                                                                                                          Congratulations, your AppWrite Cloud API will be exposed using your custom domain shortly.

                                                                                                                          Conclusion

                                                                                                                          In this tutorial, we have managed to bootstrap the backend for our AppWrite Cloud solution. Users can register, log in, create and deploy managed AppWrite projects. In the following steps, we will add more functionalities to our AppWrite Cloud offering, set up a nice to use web User Interface and continue adding new features to AppWrite Cloud on top of Qovery.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html index f6c3422784..b0907db959 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html @@ -26,9 +26,9 @@ - + - + @@ -62,14 +62,14 @@
                                                                                                                          <Disclosure.Panel className="border-b border-gray-700 md:hidden">
                                                                                                                          <div className="px-2 py-3 space-y-1 sm:px-3">
                                                                                                                          {navigation.map((item) => (
                                                                                                                          <Disclosure.Button
                                                                                                                          key={item.name}
                                                                                                                          as="a"
                                                                                                                          href={item.href}
                                                                                                                          className={classNames(
                                                                                                                          item.current
                                                                                                                          ? 'bg-gray-900 text-white'
                                                                                                                          : 'text-gray-300 hover:bg-gray-700 hover:text-white',
                                                                                                                          'block px-3 py-2 rounded-md text-base font-medium'
                                                                                                                          )}
                                                                                                                          aria-current={item.current ? 'page' : undefined}
                                                                                                                          >
                                                                                                                          {item.name}
                                                                                                                          </Disclosure.Button>
                                                                                                                          ))}
                                                                                                                          </div>
                                                                                                                          <div className="pt-4 pb-3 border-t border-gray-700">
                                                                                                                          <div className="flex items-center px-5">
                                                                                                                          <div className="flex-shrink-0">
                                                                                                                          <img
                                                                                                                          className="h-10 w-10 rounded-full"
                                                                                                                          src={user.imageUrl}
                                                                                                                          alt=""
                                                                                                                          />
                                                                                                                          </div>
                                                                                                                          <div className="ml-3">
                                                                                                                          <div className="text-base font-medium leading-none text-white">
                                                                                                                          {user.name}
                                                                                                                          </div>
                                                                                                                          <div className="text-sm font-medium leading-none text-gray-400">
                                                                                                                          {user.email}
                                                                                                                          </div>
                                                                                                                          </div>
                                                                                                                          <button
                                                                                                                          type="button"
                                                                                                                          className="ml-auto bg-gray-800 flex-shrink-0 p-1 text-gray-400 rounded-full hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white"
                                                                                                                          >
                                                                                                                          <span className="sr-only">View notifications</span>
                                                                                                                          <BellIcon className="h-6 w-6" aria-hidden="true" />
                                                                                                                          </button>
                                                                                                                          </div>
                                                                                                                          <div className="mt-3 px-2 space-y-1">
                                                                                                                          {userNavigation.map((item) => (
                                                                                                                          <Disclosure.Button
                                                                                                                          key={item.name}
                                                                                                                          as="a"
                                                                                                                          href={item.href}
                                                                                                                          className="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700"
                                                                                                                          >
                                                                                                                          {item.name}
                                                                                                                          </Disclosure.Button>
                                                                                                                          ))}
                                                                                                                          </div>
                                                                                                                          </div>
                                                                                                                          </Disclosure.Panel>
                                                                                                                          </>
                                                                                                                          )}
                                                                                                                          </Disclosure>
                                                                                                                          <header className="py-10">
                                                                                                                          <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
                                                                                                                          <h1 className="text-3xl font-bold text-white">Dashboard</h1>
                                                                                                                          </div>
                                                                                                                          </header>
                                                                                                                          </div>
                                                                                                                          <main className="-mt-32">
                                                                                                                          <div className="max-w-7xl mx-auto pb-12 px-4 sm:px-6 lg:px-8">
                                                                                                                          <Signup />
                                                                                                                          <Signin />
                                                                                                                          <div className="bg-white rounded-lg shadow px-5 py-6 sm:px-6">
                                                                                                                          <div className="border-4 border-dashed border-gray-200 rounded-lg h-96" />
                                                                                                                          </div>
                                                                                                                          </div>
                                                                                                                          </main>
                                                                                                                          </div>
                                                                                                                          </>
                                                                                                                          );
                                                                                                                          }
                                                                                                                          const Signin = (email, password) => {
                                                                                                                          const mutation = useMutation((event) => {
                                                                                                                          event.preventDefault();
                                                                                                                          return axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'post',
                                                                                                                          headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                                                                          data: {
                                                                                                                          query: `
                                                                                                                          query Singin {
                                                                                                                          Singin(email: "${email}", password: "${password}") {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          })
                                                                                                                          });
                                                                                                                          return <button onClick={(event) => mutation.mutate(event)}>Login</button>;
                                                                                                                          };
                                                                                                                          -
                                                                                                                          const Signup = (email, password) => {
                                                                                                                          const mutation = useMutation((event) => {
                                                                                                                          event.preventDefault();
                                                                                                                          return axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'post',
                                                                                                                          headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                                                                          data: {
                                                                                                                          query: `
                                                                                                                          query Signup {
                                                                                                                          Signup(email: "${email}", password: "${password}") {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          })
                                                                                                                          });
                                                                                                                          return <button onClick={(event) => mutation.mutate(event)}>Signup</button>;
                                                                                                                          };

                                                                                                                          This makes the skeleton of our UI:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Clicking on the signup will send a test signup request to our backend - click Signup and see the response with an access token in the network tab of your browser:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          To send the request, we use the following piece of code:

                                                                                                                          axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'post',
                                                                                                                          headers: { Authorization: 'Bearer ' + anonymous },
                                                                                                                          data: {
                                                                                                                          query: `
                                                                                                                          mutation {
                                                                                                                          Signup(input: {email: "${email}", password: "${password}"}) {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          }

                                                                                                                          We use axios HTTP library to send a POST request to our graphqlApiEndpoint (that uses the value of the environment variable we set previously) to run a GraphQL mutation that creates a new user with a given email and password in our AppWrite Cloud backend. In the response, we receive an access token that we can use in the name of the user to interact with the API.

                                                                                                                          The anonymous token sent in the request is a way to interact with unauthenticated endpoints in the Hasura backend.

                                                                                                                          In the next step let’s take care of the list of user projects:

                                                                                                                          const { isLoading, error, data } = useQuery('projects', () => {
                                                                                                                          return axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'POST',
                                                                                                                          headers: { Authorization: 'Bearer ' + token },
                                                                                                                          data: {
                                                                                                                          query: `query Projects {
                                                                                                                          project {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          });
                                                                                                                          });

                                                                                                                          In the snippet above, we use ReactQuery to manage the server state (store the info about the project client-side) and axios for performing the HTTP request. In the headers, we send users’ accessToken, and the payload allows us to specify data that we are interested in about projects we have access to.

                                                                                                                          The response from the query contains info we can use to render the list of AppWrite projects managed by AppWriteCloud:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Now, to display it, add the following piece of code into our dashboard component:

                                                                                                                          {appwriteProjects.map((project) => (
                                                                                                                          <div
                                                                                                                          key={project.id}
                                                                                                                          className="relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-indigo-500"
                                                                                                                          >
                                                                                                                          <div className="flex-1 min-w-0">
                                                                                                                          <a href="#" className="focus:outline-none">
                                                                                                                          <span
                                                                                                                          className="absolute inset-0"
                                                                                                                          aria-hidden="true"
                                                                                                                          />
                                                                                                                          <p className="text-sm font-medium text-gray-900">
                                                                                                                          {project.name}
                                                                                                                          </p>
                                                                                                                          <a
                                                                                                                          href={project.url}
                                                                                                                          className="text-sm text-gray-500 truncate hover:text-lg"
                                                                                                                          >
                                                                                                                          {project.url}
                                                                                                                          </a>
                                                                                                                          </a>
                                                                                                                          </div>
                                                                                                                          </div>
                                                                                                                          ))}

                                                                                                                          This should allow us to display a list of user’s projects in the dashboard like this:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          After improving the sign in form (see the whole code repository here, the whole flow should now look like this:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Conclusion

                                                                                                                          In this article, we bootstrapped a frontend application and added it to our app write cloud. We created the first version of our frontend that makes use of React, Next.js, ReactQuery and Tailwind. The UI is integrated with our backend GraphQL API that is deployed on Qovery and allows us to manage AppWrite projects deployed on AWS for AppWrite Cloud clients.

                                                                                                                          +
                                                                                                                          const Signup = (email, password) => {
                                                                                                                          const mutation = useMutation((event) => {
                                                                                                                          event.preventDefault();
                                                                                                                          return axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'post',
                                                                                                                          headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                                                                          data: {
                                                                                                                          query: `
                                                                                                                          query Signup {
                                                                                                                          Signup(email: "${email}", password: "${password}") {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          })
                                                                                                                          });
                                                                                                                          return <button onClick={(event) => mutation.mutate(event)}>Signup</button>;
                                                                                                                          };

                                                                                                                          This makes the skeleton of our UI:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Clicking on the signup will send a test signup request to our backend - click Signup and see the response with an access token in the network tab of your browser:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          To send the request, we use the following piece of code:

                                                                                                                          axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'post',
                                                                                                                          headers: { Authorization: 'Bearer ' + anonymous },
                                                                                                                          data: {
                                                                                                                          query: `
                                                                                                                          mutation {
                                                                                                                          Signup(input: {email: "${email}", password: "${password}"}) {
                                                                                                                          accessToken
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          }

                                                                                                                          We use axios HTTP library to send a POST request to our graphqlApiEndpoint (that uses the value of the environment variable we set previously) to run a GraphQL mutation that creates a new user with a given email and password in our AppWrite Cloud backend. In the response, we receive an access token that we can use in the name of the user to interact with the API.

                                                                                                                          The anonymous token sent in the request is a way to interact with unauthenticated endpoints in the Hasura backend.

                                                                                                                          In the next step let’s take care of the list of user projects:

                                                                                                                          const { isLoading, error, data } = useQuery('projects', () => {
                                                                                                                          return axios({
                                                                                                                          url: graphqlApiEndpoint,
                                                                                                                          method: 'POST',
                                                                                                                          headers: { Authorization: 'Bearer ' + token },
                                                                                                                          data: {
                                                                                                                          query: `query Projects {
                                                                                                                          project {
                                                                                                                          id
                                                                                                                          name
                                                                                                                          url
                                                                                                                          }
                                                                                                                          }
                                                                                                                          `,
                                                                                                                          },
                                                                                                                          });
                                                                                                                          });

                                                                                                                          In the snippet above, we use ReactQuery to manage the server state (store the info about the project client-side) and axios for performing the HTTP request. In the headers, we send users’ accessToken, and the payload allows us to specify data that we are interested in about projects we have access to.

                                                                                                                          The response from the query contains info we can use to render the list of AppWrite projects managed by AppWriteCloud:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Now, to display it, add the following piece of code into our dashboard component:

                                                                                                                          {appwriteProjects.map((project) => (
                                                                                                                          <div
                                                                                                                          key={project.id}
                                                                                                                          className="relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-indigo-500"
                                                                                                                          >
                                                                                                                          <div className="flex-1 min-w-0">
                                                                                                                          <a href="#" className="focus:outline-none">
                                                                                                                          <span
                                                                                                                          className="absolute inset-0"
                                                                                                                          aria-hidden="true"
                                                                                                                          />
                                                                                                                          <p className="text-sm font-medium text-gray-900">
                                                                                                                          {project.name}
                                                                                                                          </p>
                                                                                                                          <a
                                                                                                                          href={project.url}
                                                                                                                          className="text-sm text-gray-500 truncate hover:text-lg"
                                                                                                                          >
                                                                                                                          {project.url}
                                                                                                                          </a>
                                                                                                                          </a>
                                                                                                                          </div>
                                                                                                                          </div>
                                                                                                                          ))}

                                                                                                                          This should allow us to display a list of user’s projects in the dashboard like this:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          After improving the sign in form (see the whole code repository here, the whole flow should now look like this:

                                                                                                                          AppWrite Qovery Case Study

                                                                                                                          Conclusion

                                                                                                                          In this article, we bootstrapped a frontend application and added it to our app write cloud. We created the first version of our frontend that makes use of React, Next.js, ReactQuery and Tailwind. The UI is integrated with our backend GraphQL API that is deployed on Qovery and allows us to manage AppWrite projects deployed on AWS for AppWrite Cloud clients.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html index b927142b76..b0f4f41cb0 100644 --- a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html +++ b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          Stats
                                                                                                                          3 min read
                                                                                                                          Updated
                                                                                                                          Contents

                                                                                                                          When creating a managed MongoDB instance on AWS via Qovery, you don't get a publicly accessible endpoint. While it is good from a security point of view, you still might need to connect to it from a local client.

                                                                                                                          Goal

                                                                                                                          This tutorial will show you how to connect to your managed MongoDB instance private endpoint from your local machine, through your EKS cluster.

                                                                                                                          1. Open two terminal windows with access to your Kubernetes cluster

                                                                                                                            We will need to run two different commands to forward your local traffic to your database.

                                                                                                                          2. Export the required environment variables

                                                                                                                            In each terminal window, export some env variables:

                                                                                                                            export SERVICE_NAME=mongodb-tunnel
                                                                                                                            export ENDPOINT=<the private endpoint to your db from your AWS console>
                                                                                                                            export PORT=<your DB port>
                                                                                                                            export LOCAL_PORT=8080 # you can use any other port available on your computer
                                                                                                                          3. Run a socat container in your cluster

                                                                                                                            socat is a relay for bidirectional data transfers between two independent data channels. It will forward all traffic between your computer and your database.

                                                                                                                            kubectl run ${SERVICE_NAME} --image=alpine/socat \
                                                                                                                            -it --tty --rm --expose=true --port=${PORT} \
                                                                                                                            -- \
                                                                                                                            tcp-listen:${PORT},fork,reuseaddr \
                                                                                                                            tcp-connect:${ENDPOINT}:${PORT}
                                                                                                                          4. Start port-forwarding to your socat pod

                                                                                                                            To access your socat pod from your container you will need to start a port-forwarding.

                                                                                                                            kubectl port-forward service/${SERVICE_NAME} ${LOCAL_PORT}:${PORT}
                                                                                                                          5. Download the MongoDB certificate

                                                                                                                            Connections to MongoDB instances on AWS use TLS. You will need the certificate to connect. You can download it here: https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

                                                                                                                          6. Connect to your DB instance

                                                                                                                            In this example we are using the Mongo Shell, but you can use any other client to connect to it. -The credentials are available on the Qovery console.

                                                                                                                            mongosh --host 127.0.0.1 \
                                                                                                                            --port ${LOCAL_PORT} \
                                                                                                                            --username <username> \
                                                                                                                            --tls --tlsCAFile <path to downloaded PEM>/rds-combined-ca-bundle.pem \
                                                                                                                            --tlsAllowInvalidCertificates
                                                                                                                          +The credentials are available on the Qovery console.

                                                                                                                          mongosh --host 127.0.0.1 \
                                                                                                                          --port ${LOCAL_PORT} \
                                                                                                                          --username <username> \
                                                                                                                          --tls --tlsCAFile <path to downloaded PEM>/rds-combined-ca-bundle.pem \
                                                                                                                          --tlsAllowInvalidCertificates
                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html index 009c90d331..ce79186674 100644 --- a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html +++ b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@
                                                                                                                          Stats
                                                                                                                          5 min read
                                                                                                                          Updated

                                                                                                                          Qovery makes it easy to create an EKS cluster on your AWS account and manage the deployment of applications on it. But you still might want to execute operations on it via kubectl like you would on any other Kubernetes cluster.

                                                                                                                          Goal

                                                                                                                          This tutorial will show you how to access a Qovery managed cluster on AWS with kubectl and shell into a running application container.

                                                                                                                          1. Install and configure your toolchain

                                                                                                                            kubectl

                                                                                                                            To interact with your cluster, you will need kubectl installed. https://kubernetes.io/docs/tasks/tools/

                                                                                                                            AWS CLI

                                                                                                                            The AWS CLI must be installed and configured on your machine. https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

                                                                                                                          2. Add your IAM user to the Admin group

                                                                                                                            Since kubectl will use IAM to authenticate, you need to add your IAM user (the one the AWS CLI is authenticated with) to the Admins group you created when setting up Qovery.

                                                                                                                            AWS console - add admin user

                                                                                                                          3. Download the Kubeconfig file

                                                                                                                            To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                                                                            When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                                                                            Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                                                                            AWS console - get Kubeconfig

                                                                                                                          4. Set the context for kubectl

                                                                                                                            To set the context for kubectl, run the following command:

                                                                                                                            export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                                                                            You can check that it works with a kubectl command. For example:

                                                                                                                            kubectl get nodes

                                                                                                                            You are good to go if you see an output like the following:

                                                                                                                            NAME STATUS ROLES AGE VERSION
                                                                                                                            zb81b1cd4-ub667 Ready <none> 14d v1.19.15
                                                                                                                            zb81b1cd4-ujkm8 Ready <none> 24d v1.19.15
                                                                                                                            zb81b1cd4-ujkmc Ready <none> 24d v1.19.15
                                                                                                                          5. Get your application namespace

                                                                                                                            When you deploy an application, Qovery will create a separate namespace for each environment on your Kubernetes cluster.

                                                                                                                            You can get the list of the namespaces on your cluster using the following command:

                                                                                                                            kubectl get namespaces

                                                                                                                            You will get an output similar to this one:

                                                                                                                            NAME STATUS AGE
                                                                                                                            cert-manager Active 44d
                                                                                                                            default Active 44d
                                                                                                                            kube-node-lease Active 44d
                                                                                                                            kube-public Active 44d
                                                                                                                            kube-system Active 44d
                                                                                                                            logging Active 44d
                                                                                                                            nginx-ingress Active 44d
                                                                                                                            prometheus Active 44d
                                                                                                                            qovery Active 44d
                                                                                                                            z0121531e-zb2daee81 Active 35d
                                                                                                                            z016bd165-zeb51c37e Active 31d

                                                                                                                            The Qovery application namespaces are the ones begining with z.

                                                                                                                            In case you have several environments running, to identify the right one:

                                                                                                                            • Go to the Qovery console
                                                                                                                            • Go to the right environment

                                                                                                                            In your URL bar you'll have something like:

                                                                                                                            https://console.qovery.com/platform/organization/<organisation id>/projects/<project id>/environments/<environment id>/applications

                                                                                                                            Qovery console - environment

                                                                                                                            The environment namespace is defined the following way: z<project short ID>-z<environment short ID>.

                                                                                                                            The short ID is the first section of the ID. For example, given the following ID: e0aabc0d-99cb-4867-ad39-332d6162c32c, the short ID will be e0aabc0d.

                                                                                                                            The following environment URL: https://console.qovery.com/platform/organization/<organisation ID>/projects/e0aabc0d-99cb-4867-ad39-332d6162c32c/environments/b91d2eb8-a850-49b5-8626-ade7afc4a28b/applications -would translate to the following namespace: ze0aabc0d-zb91d2eb8.

                                                                                                                          6. Identify the right application pod(s)

                                                                                                                            To list the pods running in your environment namespace, run the following command:

                                                                                                                            kubectl get pods --namespace <your namespace>

                                                                                                                            The output should be similar to this one:

                                                                                                                            NAME READY STATUS RESTARTS AGE
                                                                                                                            app-z2fc29b74-5db6745975-nrw8v 1/1 Running 0 29h
                                                                                                                            app-zabbcf976-74f969f848-kzp87 1/1 Running 0 29h

                                                                                                                            The same principle goes for finding the right application pod. Go to the application page on the Qovery console.

                                                                                                                            You'll get an URL looking like this:

                                                                                                                            https://console.qovery.com/platform/organization/<organisation ID>/projects/<project ID>/environments/<environment ID>/applications/abbcf976-27a1-4531-9cdd-e4d15d7b2c27/summary

                                                                                                                            Get the short ID of our application, in our case abbcf976 which means the application pod name will start with app-zabbcf976.

                                                                                                                            In case you setup your app to run multiple replicas, it is possible that you see several pods begining with the same string. You can pick any of them.

                                                                                                                            In our case the right pod corresponding to our application would be app-zabbcf976-74f969f848-kzp87.

                                                                                                                          7. Shell into the container

                                                                                                                            To get a shell access to the container running inside the application pod, all you have to do is:

                                                                                                                            kubectl exec -ti --namespace <your namespace> <your pod name> -- sh

                                                                                                                            This will open a shell inside of your application container. You can now execute any command you need.

                                                                                                                          Conclusion

                                                                                                                          Qovery helps you manage your Kubernetes cluster and deploy your applications on it while still giving you the power of a full access to your cluster.

                                                                                                                          +would translate to the following namespace: ze0aabc0d-zb91d2eb8.

                                                                                                                        • Identify the right application pod(s)

                                                                                                                          To list the pods running in your environment namespace, run the following command:

                                                                                                                          kubectl get pods --namespace <your namespace>

                                                                                                                          The output should be similar to this one:

                                                                                                                          NAME READY STATUS RESTARTS AGE
                                                                                                                          app-z2fc29b74-5db6745975-nrw8v 1/1 Running 0 29h
                                                                                                                          app-zabbcf976-74f969f848-kzp87 1/1 Running 0 29h

                                                                                                                          The same principle goes for finding the right application pod. Go to the application page on the Qovery console.

                                                                                                                          You'll get an URL looking like this:

                                                                                                                          https://console.qovery.com/platform/organization/<organisation ID>/projects/<project ID>/environments/<environment ID>/applications/abbcf976-27a1-4531-9cdd-e4d15d7b2c27/summary

                                                                                                                          Get the short ID of our application, in our case abbcf976 which means the application pod name will start with app-zabbcf976.

                                                                                                                          In case you setup your app to run multiple replicas, it is possible that you see several pods begining with the same string. You can pick any of them.

                                                                                                                          In our case the right pod corresponding to our application would be app-zabbcf976-74f969f848-kzp87.

                                                                                                                        • Shell into the container

                                                                                                                          To get a shell access to the container running inside the application pod, all you have to do is:

                                                                                                                          kubectl exec -ti --namespace <your namespace> <your pod name> -- sh

                                                                                                                          This will open a shell inside of your application container. You can now execute any command you need.

                                                                                                                        • Conclusion

                                                                                                                          Qovery helps you manage your Kubernetes cluster and deploy your applications on it while still giving you the power of a full access to your cluster.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html index 64d695de14..b4cfeb820e 100644 --- a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html +++ b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html @@ -26,9 +26,9 @@ - + - + @@ -47,14 +47,14 @@

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          How to create an RDS instance through the AWS console.

                                                                                                                          Qovery make it easy to create an RDS database on AWS with a few clicks. You might however want to create your own RDS instance in a separate VPC. For example in case you want to use the same instance with several Qovery clusters.

                                                                                                                          Goal

                                                                                                                          This tutorial will show you how to create an production-ready RDS PostgreSQL instance on AWS.

                                                                                                                          To connect your Qovery cluster(s) to the created RDS database, refer to this tutorial

                                                                                                                          1. Create RDS database

                                                                                                                            Go to the AWS RDS console and click Create database

                                                                                                                            AWS RDS console

                                                                                                                          2. Select your database type

                                                                                                                            • We will need to create a dedicated VPC, so select Standard create.
                                                                                                                            • Then chose your database type (we'll use PostgreSQL for our example) and the version.
                                                                                                                            • Since we're creating a production database, we'll select the Production template. You can pick Dev/Test template for non-production environments.

                                                                                                                            AWS RDS console

                                                                                                                          3. Settings

                                                                                                                            Select a name for your RDS instance, here my-production-database, master username and password.

                                                                                                                            AWS RDS console

                                                                                                                          4. Instance class

                                                                                                                            Pick an instance class that works for your needs. You can refer to this document for more information about the different options: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html

                                                                                                                            AWS RDS console

                                                                                                                          5. Storage

                                                                                                                            General Purpose SSD should be the right option for most cases. -Chose the allocated storage that fits the needs of your application. We also advise you to Enable storage autoscaling in case you need more storage over time.

                                                                                                                            AWS RDS console

                                                                                                                          6. Availability & durability

                                                                                                                            For a production setup you should Create a standby instance. For non-production usecase you can avoid it to reduce costs.

                                                                                                                            AWS RDS console

                                                                                                                          7. Connectivity

                                                                                                                            • Since we want the database to live in it's own VPC, make sure to select the Create new VPC option.
                                                                                                                            • Also select Create new DB Subnet Group.
                                                                                                                            • We advise you to disable Public access for security reason. We'll setup VPC peering in the next guide to allow access from your Qovery clusters through private networking.
                                                                                                                            • Finally chose Create new security group and give it a name.

                                                                                                                            AWS RDS console

                                                                                                                          8. Database authentication and estimated costs

                                                                                                                            Chose Password authentication.

                                                                                                                            AWS RDS console

                                                                                                                            You can then click on Create database

                                                                                                                          9. Database creation

                                                                                                                            You should see your new RDS instance in the list of databases, with the Creating status.

                                                                                                                            AWS RDS console

                                                                                                                          10. Name your RDS VPC

                                                                                                                            The VPC created for the new RDS database will be named -. For convenience you should rename it.

                                                                                                                            Click on your database in the list, then on the VPC id.

                                                                                                                            AWS RDS console

                                                                                                                            You will be redirected to the VPCs list, filtered on the VPC id. Click on the edit icon in the Name column, and give it a meaningful name.

                                                                                                                            AWS RDS console

                                                                                                                            AWS RDS console

                                                                                                                          Conclusion

                                                                                                                          Your RDS database is ready. Now in order to access it from your Qovery cluster, we will need to setup VPC peering. You can find the procedure in this tutorial

                                                                                                                          +Chose the allocated storage that fits the needs of your application. We also advise you to Enable storage autoscaling in case you need more storage over time.

                                                                                                                          AWS RDS console

                                                                                                                        • Availability & durability

                                                                                                                          For a production setup you should Create a standby instance. For non-production usecase you can avoid it to reduce costs.

                                                                                                                          AWS RDS console

                                                                                                                        • Connectivity

                                                                                                                          • Since we want the database to live in it's own VPC, make sure to select the Create new VPC option.
                                                                                                                          • Also select Create new DB Subnet Group.
                                                                                                                          • We advise you to disable Public access for security reason. We'll setup VPC peering in the next guide to allow access from your Qovery clusters through private networking.
                                                                                                                          • Finally chose Create new security group and give it a name.

                                                                                                                          AWS RDS console

                                                                                                                        • Database authentication and estimated costs

                                                                                                                          Chose Password authentication.

                                                                                                                          AWS RDS console

                                                                                                                          You can then click on Create database

                                                                                                                        • Database creation

                                                                                                                          You should see your new RDS instance in the list of databases, with the Creating status.

                                                                                                                          AWS RDS console

                                                                                                                        • Name your RDS VPC

                                                                                                                          The VPC created for the new RDS database will be named -. For convenience you should rename it.

                                                                                                                          Click on your database in the list, then on the VPC id.

                                                                                                                          AWS RDS console

                                                                                                                          You will be redirected to the VPCs list, filtered on the VPC id. Click on the edit icon in the Name column, and give it a meaningful name.

                                                                                                                          AWS RDS console

                                                                                                                          AWS RDS console

                                                                                                                        • Conclusion

                                                                                                                          Your RDS database is ready. Now in order to access it from your Qovery cluster, we will need to setup VPC peering. You can find the procedure in this tutorial

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html index b0dd0f19cf..6f84154bc8 100644 --- a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html +++ b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html @@ -26,9 +26,9 @@ - + - + @@ -70,14 +70,14 @@
                                                                                                                          WORKDIR /app
                                                                                                                          # Copy our build
                                                                                                                          COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/rust-prime-number-api ./
                                                                                                                          # Use an unprivileged user.
                                                                                                                          USER app:app
                                                                                                                          -
                                                                                                                          CMD ["/app/rust-prime-number-api"]

                                                                                                                          Deploy our Rust REST API app on AWS

                                                                                                                          To deploy our Rust app on AWS we are going to use Qovery. Qovery is the simplest way to deploy any app on AWS. It is the perfect candidate to deploy our Rust REST API in a few steps.

                                                                                                                          Sign up into Qovery

                                                                                                                          First, you need to sign up or sign in on Qovery.

                                                                                                                        • Sign in to the Qovery web interface.

                                                                                                                          Qovery Sign-up page

                                                                                                                        • Connect your AWS account

                                                                                                                          To connect your AWS account check out this guide.

                                                                                                                          Deploy our Rust REST API app

                                                                                                                          Once your AWS account is set-up, you can deploy your Rust app by..

                                                                                                                          Creating a project prime number.

                                                                                                                          Create a project

                                                                                                                          Creating an environment prod.

                                                                                                                          Create an environment

                                                                                                                          Creating an app by selecting your Rust app repository, build mode > Dockerfile, and the port 8000.

                                                                                                                          Create an app

                                                                                                                          And deploy! That's it 🔥... nothing more. Our Rust REST API app is ready

                                                                                                                          Our app is deployed

                                                                                                                          Check out this video to see how I quickly deploy my Rust REST API with Qovery.

                                                                                                                          Watch this video showing the final result 👇

                                                                                                                          Wrapping up

                                                                                                                          Rust combined to Rocket web framework turns building REST API super easy. Deploying your Rust app on AWS with Qovery is as simple as selecting your GitHub repository. Nothing more. Hope you liked it.

                                                                                                                          Useful resources

                                                                                                                          Tutorial
                                                                                                                          +
                                                                                                                          CMD ["/app/rust-prime-number-api"]

                                                                                                                          Deploy our Rust REST API app on AWS

                                                                                                                          To deploy our Rust app on AWS we are going to use Qovery. Qovery is the simplest way to deploy any app on AWS. It is the perfect candidate to deploy our Rust REST API in a few steps.

                                                                                                                          Sign up into Qovery

                                                                                                                          First, you need to sign up or sign in on Qovery.

                                                                                                                        • Sign in to the Qovery web interface.

                                                                                                                          Qovery Sign-up page

                                                                                                                        • Connect your AWS account

                                                                                                                          To connect your AWS account check out this guide.

                                                                                                                          Deploy our Rust REST API app

                                                                                                                          Once your AWS account is set-up, you can deploy your Rust app by..

                                                                                                                          Creating a project prime number.

                                                                                                                          Create a project

                                                                                                                          Creating an environment prod.

                                                                                                                          Create an environment

                                                                                                                          Creating an app by selecting your Rust app repository, build mode > Dockerfile, and the port 8000.

                                                                                                                          Create an app

                                                                                                                          And deploy! That's it 🔥... nothing more. Our Rust REST API app is ready

                                                                                                                          Our app is deployed

                                                                                                                          Check out this video to see how I quickly deploy my Rust REST API with Qovery.

                                                                                                                          Watch this video showing the final result 👇

                                                                                                                          Wrapping up

                                                                                                                          Rust combined to Rocket web framework turns building REST API super easy. Deploying your Rust app on AWS with Qovery is as simple as selecting your GitHub repository. Nothing more. Hope you liked it.

                                                                                                                          Useful resources

                                                                                                                          Tutorial
                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-deploy-helm-charts/index.html b/guides/tutorial/how-to-deploy-helm-charts/index.html index 102f2b67c2..d209b66841 100644 --- a/guides/tutorial/how-to-deploy-helm-charts/index.html +++ b/guides/tutorial/how-to-deploy-helm-charts/index.html @@ -26,9 +26,9 @@ - + - + @@ -49,14 +49,14 @@ In all the examples, we will make use of the Lifecycle jobs to manage the deployment of your helm chart (install and uninstall). The Lifecycle job configuration will be different depending on the method you have chosen.

                                                                                                                          Lifecycle job parameters for Helm charts

                                                                                                                          From the Qovery Helm container, several options exist and are accessible through environment variables to help you to configure the chart deployment:

                                                                                                                          NameDescriptionDefault ValueRequired
                                                                                                                          HELM_REPO_ADD_NAMEThe Helm repository nameno
                                                                                                                          HELM_REPO_ADD_URLThe Helm chart URL (if none is specified, Artifact Hub will be used)defaultno
                                                                                                                          HELM_REPO_PATHThe local repository PATH or name from Artifact Hubyes
                                                                                                                          HELM_RELEASE_NAMEThe release name of the chart deployment (should be unique in a given namespace)yes
                                                                                                                          HELM_VALUESThe Helm chart values file path, containing your custom settings to override from the default valuesno
                                                                                                                          HELM_TIMEOUT_SECThe Helm timeout in seconds, to install and uninstall chart180no
                                                                                                                          HELM_MAX_HISTORYThe number of releases history. Useful to be able to rollback50no
                                                                                                                          HELM_DRY_RUNEnable or disable dry run for testing purposefalseno
                                                                                                                          HELM_SHOW_DIFFEnable or disable helm diff between the currently deployed version and the requested onefalseno
                                                                                                                          HELM_ADDITIONAL_PARAMSAdditional Helm CLI parameters to add to the command lineno
                                                                                                                          HELM_KUBERNETES_NAMESPACEKubernetes namespace name in which this chart will be deployed$QOVERY_KUBERNETES_NAMESPACE_NAMEno
                                                                                                                          KUBECONFIGThe Kubeconfig file path locationno*
                                                                                                                          KUBECONFIG_B64The encoded base64 Kubeconfig content. It will be decoded and used in KUBECONFIG environment variableno*
                                                                                                                          KUBECONFIG_GET_EKSSet to true to get the Kubeconfig from AWS API. It will be used as KUBECONFIG environment variablefalseno*

                                                                                                                          Chart deployment

                                                                                                                          In this tutorial, Kubecost will be the chart to deploy. You can deploy it in an environment where other applications are already deployed or create a dedicated one for this purpose (tooling, monitoring...).

                                                                                                                          From a 3rd party or Artifact Hub

                                                                                                                          First of all, create a Lifecycle Job:

                                                                                                                          create lifecycle job

                                                                                                                          Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                                                                          lifecycle event

                                                                                                                          Click on continue and go up to the environment variables.

                                                                                                                          Qovery Helm image to deploy Helm charts, proposes several options to be set with the help of environment variables:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_REPO_ADD_NAMEkubecostno
                                                                                                                          HELM_REPO_ADD_URLhttps://kubecost.github.io/cost-analyzer/no
                                                                                                                          HELM_REPO_PATHkubecost/cost-analyzerno
                                                                                                                          HELM_RELEASE_NAMEkubecostno
                                                                                                                          HELM_KUBERNETES_NAMESPACEkubecostno

                                                                                                                          Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                                                                          From a Helm chart from a Git repository

                                                                                                                          If you prefer using a GitOps approach, having all your charts, etc... in a single Git repository, it is possible to deploy your charts this way.

                                                                                                                          From a very simple repository where we could have a helm-freeze configuration looking like this:

                                                                                                                          charts:
                                                                                                                          - name: cost-analyzer
                                                                                                                          version: 1.99.0
                                                                                                                          repo_name: kubecost
                                                                                                                          repos:
                                                                                                                          - name: stable
                                                                                                                          url: https://charts.helm.sh/stable
                                                                                                                          - name: kubecost
                                                                                                                          url: https://kubecost.github.io/cost-analyzer/
                                                                                                                          -
                                                                                                                          destinations:
                                                                                                                          - name: default
                                                                                                                          path: ./charts

                                                                                                                          Running helm-freeze sync will download the chart cost-analyzer into the charts folder. You can then use this simple Dockerfile which will add all the content of this git repository inside a container:

                                                                                                                          FROM qoveryrd/helm:1.0
                                                                                                                          ADD . /helm
                                                                                                                          ENTRYPOINT ["/helm/run.sh"]

                                                                                                                          Finally, add the run.sh file from the Qovery Helm image inside your repository. Commit now everything. To summarize, in your Git repository you should have:

                                                                                                                          • charts: a folder containing all the charts (here cost-analyzer chart)
                                                                                                                          • Dockerfile: helping you to deploy helm chart and containing all your charts
                                                                                                                          • helm-freeze.yaml: configuration file for helm-freeze
                                                                                                                          • run.sh: the container start script

                                                                                                                          We are now ready to create a Lifecycle job and select your repository:

                                                                                                                          create lifecycle job

                                                                                                                          Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                                                                          lifecycle event

                                                                                                                          Set the environment variables to point to the chart to deploy with the release name and other required information:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_REPO_PATH/helm/charts/cost-analyzerno
                                                                                                                          HELM_RELEASE_NAMEkubecostno
                                                                                                                          HELM_KUBERNETES_NAMESPACEkubecostno

                                                                                                                          Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                                                                          Lifecycle Job and Timeout management

                                                                                                                          The default Helm timeout set by Qovery is 3 minutes. Qovery enables Helm options:

                                                                                                                          • --wait: to wait for all resources to be in a ready state before marking the release as successful
                                                                                                                          • --atomic: to roll back the release if the deployment fails

                                                                                                                          Because of the atomic check, the rollback can take more than 5 minutes. By default, Qovery set the default Lifecycle timeout to 3 minutes, to avoid falling into this issue, but there is no guarantee, it depends on what resources are deployed:

                                                                                                                          Qovery strongly recommends leveraging the default Qovery Lifecycle Job timeout or reducing the default Helm timeout to ensure the rollback will occur properly in case of failure.

                                                                                                                          Conclusion

                                                                                                                          As you can see, deploying Helm charts with Qovery is straightforward. Qovery Lifecycle jobs and its Qovery Helm image should help you a lot if you familiarize yourself with it and its options.

                                                                                                                          +
                                                                                                                          destinations:
                                                                                                                          - name: default
                                                                                                                          path: ./charts

                                                                                                                          Running helm-freeze sync will download the chart cost-analyzer into the charts folder. You can then use this simple Dockerfile which will add all the content of this git repository inside a container:

                                                                                                                          FROM qoveryrd/helm:1.0
                                                                                                                          ADD . /helm
                                                                                                                          ENTRYPOINT ["/helm/run.sh"]

                                                                                                                          Finally, add the run.sh file from the Qovery Helm image inside your repository. Commit now everything. To summarize, in your Git repository you should have:

                                                                                                                          • charts: a folder containing all the charts (here cost-analyzer chart)
                                                                                                                          • Dockerfile: helping you to deploy helm chart and containing all your charts
                                                                                                                          • helm-freeze.yaml: configuration file for helm-freeze
                                                                                                                          • run.sh: the container start script

                                                                                                                          We are now ready to create a Lifecycle job and select your repository:

                                                                                                                          create lifecycle job

                                                                                                                          Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                                                                          lifecycle event

                                                                                                                          Set the environment variables to point to the chart to deploy with the release name and other required information:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_REPO_PATH/helm/charts/cost-analyzerno
                                                                                                                          HELM_RELEASE_NAMEkubecostno
                                                                                                                          HELM_KUBERNETES_NAMESPACEkubecostno

                                                                                                                          Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                                                                          VariableValueSecret
                                                                                                                          HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                                                                          Lifecycle Job and Timeout management

                                                                                                                          The default Helm timeout set by Qovery is 3 minutes. Qovery enables Helm options:

                                                                                                                          • --wait: to wait for all resources to be in a ready state before marking the release as successful
                                                                                                                          • --atomic: to roll back the release if the deployment fails

                                                                                                                          Because of the atomic check, the rollback can take more than 5 minutes. By default, Qovery set the default Lifecycle timeout to 3 minutes, to avoid falling into this issue, but there is no guarantee, it depends on what resources are deployed:

                                                                                                                          Qovery strongly recommends leveraging the default Qovery Lifecycle Job timeout or reducing the default Helm timeout to ensure the rollback will occur properly in case of failure.

                                                                                                                          Conclusion

                                                                                                                          As you can see, deploying Helm charts with Qovery is straightforward. Qovery Lifecycle jobs and its Qovery Helm image should help you a lot if you familiarize yourself with it and its options.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html index e9325132a8..ce23e9e79d 100644 --- a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html +++ b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          Step-by-step guide on how to deploy your apps on AWS in 30 minutes. No AWS knowledge required.
                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          1 min read
                                                                                                                          Updated
                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html index d03adb4d0a..a161384090 100644 --- a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html +++ b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -51,14 +51,14 @@ As an example we will define a workflow for a NodeJS application. We will first run our unit tests, then launch the Qovery deployment if the tests pass.

                                                                                                                          You can adapt those steps for your own stack and needs. Read the GitHub Actions documentation to learn more.

                                                                                                                          1. Create the Workflows directory

                                                                                                                            All your workflows files must be stored in a specific .github/workflows directory. Create this directory at the root of your project.

                                                                                                                          2. Add a Test and Deploy workflow

                                                                                                                            In your Workflows folder, create a test-and-deploy.yaml file with the following content:

                                                                                                                            .github/workflows/test-and-deploy.yaml
                                                                                                                            name: Test And Deploy to Qovery
                                                                                                                            on:
                                                                                                                            workflow_call:
                                                                                                                            secrets:
                                                                                                                            api-token:
                                                                                                                            required: true
                                                                                                                            jobs:
                                                                                                                            test:
                                                                                                                            runs-on: ubuntu-latest
                                                                                                                            steps:
                                                                                                                            - uses: actions/checkout@v2
                                                                                                                            - name: Install modules
                                                                                                                            run: yarn
                                                                                                                            - name: Run tests
                                                                                                                            run: yarn test
                                                                                                                            deploy:
                                                                                                                            needs: test
                                                                                                                            runs-on: ubuntu-latest
                                                                                                                            name: Deploy on Qovery
                                                                                                                            steps:
                                                                                                                            - name: Deploy with Qovery
                                                                                                                            uses: actions/checkout@v3
                                                                                                                            env:
                                                                                                                            QOVERY_CLI_ACCESS_TOKEN: ${{ secrets.QOVERY_CLI_ACCESS_TOKEN }}
                                                                                                                            shell: bash
                                                                                                                            run: |
                                                                                                                            # Download and install Qovery CLI
                                                                                                                            curl -s https://get.qovery.com | bash
                                                                                                                            qovery application deploy \
                                                                                                                            --organization <your_org_name> \
                                                                                                                            --project <your_project_name> \
                                                                                                                            --environment <your_environment_name> \
                                                                                                                            --application <your_qovery_app_name> \
                                                                                                                            --commit-id ${{ github.sha }} \
                                                                                                                            --watch
                                                                                                                            • The on section contains a workflow_call directive. It means that this workflow will be triggered when called from another workflow. We're doing this because we won't use this workflow directly. Since we might have several environments to deploy to Qovery depending on the branch, we could have one workflow per environment, and we want to avoid repeating all the steps.
                                                                                                                            • The inputs and secrets sections are defining the values that we will need to pass to our workflow
                                                                                                                            • The jobs section lists the jobs and the steps that in needs to accomplish. Here we have two jobs and five steps:
                                                                                                                              • test where we check out the code, we install Yarn modules, and we run tests through Jest
                                                                                                                              • deploy where we check out the code and deploy to Qovery.

                                                                                                                            Several things worth noting:

                                                                                                                            • The organization / project / environment / application are case-sensitive.
                                                                                                                            • Our deploy job has a needs instructions, telling GitHub Actions that this job can only run when the test job succeeds.
                                                                                                                            • The with section of our last deploy step contains interpolated strings: ${{ inputs.xxxx }}. Those are values passed to our workflow, that our Qovery action needs. They will be passed from the calling workflow.
                                                                                                                          3. Get a Qovery API token

                                                                                                                            To get an API token, use the Qovery CLI:

                                                                                                                            qovery token
                                                                                                                            • Select your organization. (tokens are valid for only one organization).
                                                                                                                            • Enter a name for your token.
                                                                                                                            • Enter a description for your token.

                                                                                                                            You will get an output like this one:

                                                                                                                            qovery token Qovery: ---- Never share this authentication token and keep it secure ----
                                                                                                                            Qovery: qov_xxx....
                                                                                                                            Qovery: ---- Never share this authentication token and keep it secure ----
                                                                                                                          4. Add your token to your GitHub repository secrets

                                                                                                                            Go to your GitHub repository then to the Settings:

                                                                                                                            Got to the Secrets/Actions section and click on New repository secret:

                                                                                                                            Add your secret with the name QOVERY_API_TOKEN and save:

                                                                                                                          Execute the GitHub Actions Pipeline

                                                                                                                          We're done with the setup. You can now push your code to the main branch. If you did it properly, under the Actions tab on your GitHub repository, you should see your job being run.

                                                                                                                          You can click on it to see the details of the jobs. Once the testing phase is green, it will start the deployment job.

                                                                                                                          As soon as the job is set up, and it starts actually deploying, go to the Qovery console and check that your application is actually being deployed.

                                                                                                                          Advanced use-cases

                                                                                                                          It's possible to support any use cases by using the Qovery CLI. Like cloning an environment, changing the branch of some applications and deploying only a subset of applications. Refers to the Qovery CLI documentation to explore all the commands that you can use.

                                                                                                                          Check out our GitHub Actions integration page to check out more examples.

                                                                                                                          Conclusion

                                                                                                                          Integrating Qovery with GitHub Actions enables more complex workflows than just deploying on code push. You can make sure your test suite succeeds before deploying -or anything else you need, without sacrificing the simplicity of deployment Qovery brings you.

                                                                                                                          +or anything else you need, without sacrificing the simplicity of deployment Qovery brings you.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-run-commands-at-application-startup/index.html b/guides/tutorial/how-to-run-commands-at-application-startup/index.html index 0b1fa21269..a12f5a3bd4 100644 --- a/guides/tutorial/how-to-run-commands-at-application-startup/index.html +++ b/guides/tutorial/how-to-run-commands-at-application-startup/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@
                                                                                                                          # ...
                                                                                                                          ENTRYPOINT ["./docker/entrypoint.sh"]
                                                                                                                          EXPOSE 3000
                                                                                                                          -
                                                                                                                          CMD ["rails", "server", "-p", "3000", "-b", "0.0.0.0"]

                                                                                                                          You can learn more about Docker entrypoints here: https://docs.docker.com/engine/reference/builder/#entrypoint

                                                                                                                        • Deploy your application

                                                                                                                          You can now commit and push your changes to your Git repository. The instructions you specified in the entrypoint.sh file will be executed before the application starts.

                                                                                                                        • +
                                                                                                                          CMD ["rails", "server", "-p", "3000", "-b", "0.0.0.0"]

                                                                                                                          You can learn more about Docker entrypoints here: https://docs.docker.com/engine/reference/builder/#entrypoint

                                                                                                                        • Deploy your application

                                                                                                                          You can now commit and push your changes to your Git repository. The instructions you specified in the entrypoint.sh file will be executed before the application starts.

                                                                                                                        • - + - + diff --git a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html index a898b515dd..201413df70 100644 --- a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html +++ b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -47,14 +47,14 @@

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          Setting up AWS CloudFront for frontend apps on Qovery

                                                                                                                          If you'd like to use Cloudflare instead of CloudFront as your CDN, check out this article.

                                                                                                                          Frontend apps primarily consist of static content which goes unchanged. Web pages that contain static assets are essentially prebuilt, which makes it efficiently quicker to grab and render content. Their static nature makes them a perfect use case for CDNs and caching systems on edge servers is as it boosts the web page performance and user experience with the system.

                                                                                                                          Stack

                                                                                                                          For our frontend stack, we'll use a React app that is served as static files using Nginx.

                                                                                                                          Frontend Application

                                                                                                                          To bootstrap the application skeleton, we use create-react-app:

                                                                                                                          npx create-react-app my-app

                                                                                                                          Then, we add a Dockerfile to configure how to build the application image:

                                                                                                                          FROM node:14-alpine AS builder
                                                                                                                          ENV NODE_ENV production
                                                                                                                          # Add a work directory
                                                                                                                          WORKDIR /app
                                                                                                                          # Cache and Install dependencies
                                                                                                                          COPY package.json .
                                                                                                                          COPY yarn.lock .
                                                                                                                          RUN yarn install --production
                                                                                                                          # Copy app files
                                                                                                                          COPY . .
                                                                                                                          # Build the app
                                                                                                                          RUN yarn build
                                                                                                                          # Bundle static assets with nginx
                                                                                                                          FROM nginx:1.21.0-alpine as production
                                                                                                                          ENV NODE_ENV production
                                                                                                                          # Copy built assets from builder
                                                                                                                          COPY --from=builder /app/build /usr/share/nginx/html
                                                                                                                          # Add your nginx.conf
                                                                                                                          COPY nginx.conf /etc/nginx/conf.d/default.conf
                                                                                                                          # Expose port
                                                                                                                          EXPOSE 80
                                                                                                                          # Start nginx
                                                                                                                          CMD ["nginx", "-g", "daemon off;"]

                                                                                                                          The last step - let's configure our Nginx server by adding a nginx.conf file with the following content:

                                                                                                                          server {
                                                                                                                          listen 80;
                                                                                                                          -
                                                                                                                          location / {
                                                                                                                          root /usr/share/nginx/html/;
                                                                                                                          include /etc/nginx/mime.types;
                                                                                                                          try_files $uri $uri/ /index.html;
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Deployment

                                                                                                                          Now, to deploy the app, create a new application on Qovery with the following configuration:

                                                                                                                          • Port - 80
                                                                                                                          • Build Mode - Docker
                                                                                                                          • Keep other options in default settings

                                                                                                                          After the app is created and configured as above, you can safely run the app deployment. After a few minutes when the app is running, click on the Open button:

                                                                                                                          CloudFront

                                                                                                                          CloudFront

                                                                                                                          To set up CloudFront as a CDN, first, navigate to CloudFront service in AWS console and click on the new distribution button:

                                                                                                                          CloudFront

                                                                                                                          In settings, choose an origin (URL to your frontend app hosted on Qovery):

                                                                                                                          CloudFront

                                                                                                                          You can also tweak other settings or leave them in their defaults:

                                                                                                                          CloudFront

                                                                                                                          Additionally, you can assign an alternate domain to your application in Alternate domain name:

                                                                                                                          CloudFront

                                                                                                                          Adding an alternate domain requires it having a certificate - click on the Request certificate button, type your alternate domain name and use DNS for validation method:

                                                                                                                          CloudFront

                                                                                                                          Request the certificate. In the end, you will see a screen with settings you need to set up in your domain name provider:

                                                                                                                          CloudFront

                                                                                                                          Copy them and save them in your DNS provider settings:

                                                                                                                          CloudFront

                                                                                                                          After it's done, you should be granted a certificate - go back to CloudFront Distribution settings, and pick the certificate for your alternate domain name from the list:

                                                                                                                          CloudFront

                                                                                                                          In the end, you should end up with a CloudFront set up with your app on Qovery and using an alternate domain name. Now it's time for you to tweak the CloudFront settings to meet your needs.

                                                                                                                          CloudFront

                                                                                                                          +
                                                                                                                          location / {
                                                                                                                          root /usr/share/nginx/html/;
                                                                                                                          include /etc/nginx/mime.types;
                                                                                                                          try_files $uri $uri/ /index.html;
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Deployment

                                                                                                                          Now, to deploy the app, create a new application on Qovery with the following configuration:

                                                                                                                          • Port - 80
                                                                                                                          • Build Mode - Docker
                                                                                                                          • Keep other options in default settings

                                                                                                                          After the app is created and configured as above, you can safely run the app deployment. After a few minutes when the app is running, click on the Open button:

                                                                                                                          CloudFront

                                                                                                                          CloudFront

                                                                                                                          To set up CloudFront as a CDN, first, navigate to CloudFront service in AWS console and click on the new distribution button:

                                                                                                                          CloudFront

                                                                                                                          In settings, choose an origin (URL to your frontend app hosted on Qovery):

                                                                                                                          CloudFront

                                                                                                                          You can also tweak other settings or leave them in their defaults:

                                                                                                                          CloudFront

                                                                                                                          Additionally, you can assign an alternate domain to your application in Alternate domain name:

                                                                                                                          CloudFront

                                                                                                                          Adding an alternate domain requires it having a certificate - click on the Request certificate button, type your alternate domain name and use DNS for validation method:

                                                                                                                          CloudFront

                                                                                                                          Request the certificate. In the end, you will see a screen with settings you need to set up in your domain name provider:

                                                                                                                          CloudFront

                                                                                                                          Copy them and save them in your DNS provider settings:

                                                                                                                          CloudFront

                                                                                                                          After it's done, you should be granted a certificate - go back to CloudFront Distribution settings, and pick the certificate for your alternate domain name from the list:

                                                                                                                          CloudFront

                                                                                                                          In the end, you should end up with a CloudFront set up with your app on Qovery and using an alternate domain name. Now it's time for you to tweak the CloudFront settings to meet your needs.

                                                                                                                          CloudFront

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html index 9adb4e4144..0d19a1d5d7 100644 --- a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html +++ b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          Learn how to use Lifecycle Job to deploy any kind of resources with Qovery.

                                                                                                                          The Lifecycle Job is a powerful feature that allows you to run any kind of commands before or after your environment is deployed. It can be used to run database migrations, create a new database, or even to run a script that will create a new user.

                                                                                                                          Some use cases:

                                                                                                                          • Run Terraform, Pulumi, or any other infrastructure as code tool to create resources.
                                                                                                                          • You want to deploy SQS, SNS, Lambdas, or any other AWS resources.
                                                                                                                          • You want to deploy MongoDB Atlas, Google BigQuery, or any other cloud services.
                                                                                                                          • Seed your database when your environment is created.

                                                                                                                          In a more general way, you can see the Lifecycle Job as a way to create and destroy resources when your environment is deployed or deleted. Possibilities are endless.

                                                                                                                          How to use Lifecycle Job (example with Terraform)

                                                                                                                          In this example, we will use Terraform to create a new AWS RDS MySQL instance. I will use this example to schematize the process of using the Lifecycle Job. ⚠️ Note that you can use any other tool to create your resources. Lifecycle Job is not limited to Terraform. However, Terraform is a great way to show the power of the Lifecycle Job since it requires a lot of configuration and can be used to create a lot of different resources.

                                                                                                                          Execution Flow

                                                                                                                          Here is the execution flow when my Environment is deployed:

                                                                                                                          1. Qovery builds my Lifecycle Job (and my others services).
                                                                                                                          2. Qovery runs my Lifecycle Job Start Event (and my others services).
                                                                                                                          3. My Lifecycle Job creates a new AWS RDS MySQL instance.
                                                                                                                          4. My Lifecycle Job injects the database credentials into a /qovery-output/qovery-output.json file.
                                                                                                                          5. Qovery reads the /qovery-output/qovery-output.json file and injects the database credentials into my Environment Variables.
                                                                                                                          6. My others services can access my database.

                                                                                                                          When my Environment is deleted:

                                                                                                                          1. Qovery runs my Lifecycle Job Deleted Event
                                                                                                                          2. My Lifecycle Job destroys the AWS RDS MySQL instance.
                                                                                                                          3. Qovery destroys my Environment and release all the resources.

                                                                                                                          Create a Lifecycle Job

                                                                                                                          1. Fork this repository.

                                                                                                                          2. Go inside your Environment, and add a Lifecycle Job.

                                                                                                                          3. Give a name, description, pick your GitHub account, and select the repository of the Lifecycle Job. In our example, the root application path is /examples/aws-rds-with-terraform.

                                                                                                                          4. Since we are using Terraform, we want to make sure that our MySQL RDS instance is created when our Environment is deployed. So we select the Start Event. -We also want to make sure that our MySQL RDS instance is destroyed when our Environment is deleted. So we select the Deleted Event.

                                                                                                                            If you look at our Dockerfile in the repository, you will see that we are using the official Terraform image. I have also inserted by default the ENTRYPOINT ["/bin/sh"] to simplify the Qovery Lifecycle Job configuration.

                                                                                                                            For the Start Event, we want to run the terraform apply -no-color -auto-approve command. We don't need to run the terraform init command since it is already done in the Dockerfile.

                                                                                                                            You will also notice that we are also using && terraform output -json > /qovery-output/qovery-output.json to create a /qovery-output/qovery-output.json file. This file will be used by Qovery to inject the database credentials into our Environment Variables. We will cover this part later.

                                                                                                                            For the Deleted Event, we want to run the terraform destroy -no-color -auto-approve command.

                                                                                                                            So for the Start Event, we have: ["-c","terraform apply -no-color -auto-approve && terraform output -json > /qovery-output/qovery-output.json"] and for the Deleted Event, we have: ["-c","terraform destroy -no-color -auto-approve"]. Feel free to copy/paste these commands.

                                                                                                                          5. I recommend setting the Timeout to 1800 seconds (30 minutes). It is the maximum time your Lifecycle Job can run. If your Lifecycle Job takes more than 30 minutes to run it will be stopped by Qovery. In our case, it should take less than 10 minutes to create the AWS RDS MySQL instance. But let's be safe.

                                                                                                                            Click Continue.

                                                                                                                          6. Now we need to set the vCPU and RAM required to run our Job. We can allocate 0.5 CPU and 256 MB of RAM. It's more than enough.

                                                                                                                          7. We need to set the Environment Variables required by our Lifecycle Job. In our case, we need to set the AWS credentials and some other environment variables. If you look at our Dockerfile, you will find the declaration of all those environment variables. You can copy/paste them.

                                                                                                                            Dockerfile
                                                                                                                            ...
                                                                                                                            ARG TF_VAR_terraform_backend_bucket
                                                                                                                            ARG TF_VAR_aws_region
                                                                                                                            ARG TF_VAR_aws_access_key_id
                                                                                                                            ARG TF_VAR_aws_secret_access_key
                                                                                                                            ARG TF_VAR_qovery_environment_id
                                                                                                                            ...

                                                                                                                            Those are the ones that we need to set.

                                                                                                                            Click on Continue.

                                                                                                                          8. Then click on Create (and not Create and Deploy).

                                                                                                                          9. Congrats, your Lifecycle Job is created. Now we just need to add the TF_VAR_qovery_environment_id environment variable before launching it.

                                                                                                                          Make your Terraform deployment multi-environments ready

                                                                                                                          To support multiple environments, we need to make sure that the name of the S3 object key where Terraform will store the state of your infrastructure is unique. To do that, we will use the TF_VAR_qovery_environment_id environment variable. This environment variable is automatically created by Qovery and contains the ID of your Environment. We just need to create an environment variable alias.

                                                                                                                          1. Go inside your MySQL RDS service, click on the Variables tab.

                                                                                                                          2. Search for QOVERY_ENVIRONMENT_ID built-in environment variable. Then click on Creat alias

                                                                                                                          3. Set the name of the environment variable to TF_VAR_qovery_environment_id with a service scope and click on Confirm.

                                                                                                                          Deploy AWS RDS MySQL instance

                                                                                                                          1. Now you are ready to deploy your Lifecycle Job and see what happened.

                                                                                                                            The job execution will take approximately 3 to 10 minutes.

                                                                                                                          2. Follow the logs of the job execution by clicking on the Logs button.

                                                                                                                            From the Deployment logs tab you can see that your Lifecycle Job is built and that the terraform init command is executed.

                                                                                                                            From the MySQL RDS tab you can see that the terraform apply -no-color -auto-approve command is executed. The creation of the AWS RDS MySQL instance is in progress.

                                                                                                                          3. Once the deployment is done, you should see that the AWS RDS MySQL instance is green and completed.

                                                                                                                          Get the MySQL RDS credentials from the Lifecycle Job

                                                                                                                          Now that the AWS RDS MySQL instance is created, we need to get the credentials to connect to it. We have use the terraform output -json > /qovery-output/qovery-output.json command to get the credentials. If you go back to the Variables tab of your MySQL RDS service, you will see that the QOVERY_OUTPUT_** environment variables are created.

                                                                                                                          By using terraform output -json > /qovery-output/qovery-output.json Qovery automatically create those environment variables for you. You can use them in your application to connect to the AWS RDS MySQL instance. Learn more on how Lifecycle Job output...

                                                                                                                          FAQ

                                                                                                                          What happen if I delete my environment with your example?

                                                                                                                          If you delete your environment, the AWS RDS MySQL instance will be deleted too. You can see that in the MySQL RDS service logs. You will see that the terraform destroy -no-color -auto-approve command is executed.

                                                                                                                          Can I use the Lifecycle Job to deploy my application?

                                                                                                                          Some users ask us if they can use the Lifecycle Job to deploy their application. The answer is yes!. The Lifecycle Job is designed to deploy all type of resources. However, we recommend using the official Qovery way to deploy applications. Learn more on how to deploy your application...

                                                                                                                          What happen if I clone my Environment with the Lifecycle Job?

                                                                                                                          If you clone an Environment with the Lifecycle Job, the Lifecycle Job will be cloned too. In our example we have set the TF_VAR_qovery_environment_id environment variable to the QOVERY_ENVIRONMENT_ID built-in environment variable. So when you clone your Environment, the QOVERY_ENVIRONMENT_ID built-in environment variable will be different. That's why you need to create a new alias environment variable for the QOVERY_ENVIRONMENT_ID built-in environment variable. Learn more on how to clone an Environment...

                                                                                                                          What happen if I modify my Lifecycle Job after my Environment is deployed?

                                                                                                                          If you modify your Lifecycle Job after your Environment is deployed, the Lifecycle Job will be redeployed. In our example, since the state of our AWS RDS MySQL instance is stored in the S3 bucket, the AWS RDS MySQL instance will not be recreated. However, if you modify the main.tf file, the AWS RDS MySQL instance will be updated.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have seen how to use the Lifecycle Job to create an AWS RDS MySQL instance with Terraform. We have also seen how to get the credentials of the AWS RDS MySQL instance to connect to it from our application. To learn more about the Lifecycle Job, you can read the Lifecycle Job documentation. To get more examples, check out the Qovery Lifecycle Examples repository.

                                                                                                                          +We also want to make sure that our MySQL RDS instance is destroyed when our Environment is deleted. So we select the Deleted Event.

                                                                                                                          If you look at our Dockerfile in the repository, you will see that we are using the official Terraform image. I have also inserted by default the ENTRYPOINT ["/bin/sh"] to simplify the Qovery Lifecycle Job configuration.

                                                                                                                          For the Start Event, we want to run the terraform apply -no-color -auto-approve command. We don't need to run the terraform init command since it is already done in the Dockerfile.

                                                                                                                          You will also notice that we are also using && terraform output -json > /qovery-output/qovery-output.json to create a /qovery-output/qovery-output.json file. This file will be used by Qovery to inject the database credentials into our Environment Variables. We will cover this part later.

                                                                                                                          For the Deleted Event, we want to run the terraform destroy -no-color -auto-approve command.

                                                                                                                          So for the Start Event, we have: ["-c","terraform apply -no-color -auto-approve && terraform output -json > /qovery-output/qovery-output.json"] and for the Deleted Event, we have: ["-c","terraform destroy -no-color -auto-approve"]. Feel free to copy/paste these commands.

                                                                                                                        • I recommend setting the Timeout to 1800 seconds (30 minutes). It is the maximum time your Lifecycle Job can run. If your Lifecycle Job takes more than 30 minutes to run it will be stopped by Qovery. In our case, it should take less than 10 minutes to create the AWS RDS MySQL instance. But let's be safe.

                                                                                                                          Click Continue.

                                                                                                                        • Now we need to set the vCPU and RAM required to run our Job. We can allocate 0.5 CPU and 256 MB of RAM. It's more than enough.

                                                                                                                        • We need to set the Environment Variables required by our Lifecycle Job. In our case, we need to set the AWS credentials and some other environment variables. If you look at our Dockerfile, you will find the declaration of all those environment variables. You can copy/paste them.

                                                                                                                          Dockerfile
                                                                                                                          ...
                                                                                                                          ARG TF_VAR_terraform_backend_bucket
                                                                                                                          ARG TF_VAR_aws_region
                                                                                                                          ARG TF_VAR_aws_access_key_id
                                                                                                                          ARG TF_VAR_aws_secret_access_key
                                                                                                                          ARG TF_VAR_qovery_environment_id
                                                                                                                          ...

                                                                                                                          Those are the ones that we need to set.

                                                                                                                          Click on Continue.

                                                                                                                        • Then click on Create (and not Create and Deploy).

                                                                                                                        • Congrats, your Lifecycle Job is created. Now we just need to add the TF_VAR_qovery_environment_id environment variable before launching it.

                                                                                                                          Make your Terraform deployment multi-environments ready

                                                                                                                          To support multiple environments, we need to make sure that the name of the S3 object key where Terraform will store the state of your infrastructure is unique. To do that, we will use the TF_VAR_qovery_environment_id environment variable. This environment variable is automatically created by Qovery and contains the ID of your Environment. We just need to create an environment variable alias.

                                                                                                                          1. Go inside your MySQL RDS service, click on the Variables tab.

                                                                                                                          2. Search for QOVERY_ENVIRONMENT_ID built-in environment variable. Then click on Creat alias

                                                                                                                          3. Set the name of the environment variable to TF_VAR_qovery_environment_id with a service scope and click on Confirm.

                                                                                                                          Deploy AWS RDS MySQL instance

                                                                                                                          1. Now you are ready to deploy your Lifecycle Job and see what happened.

                                                                                                                            The job execution will take approximately 3 to 10 minutes.

                                                                                                                          2. Follow the logs of the job execution by clicking on the Logs button.

                                                                                                                            From the Deployment logs tab you can see that your Lifecycle Job is built and that the terraform init command is executed.

                                                                                                                            From the MySQL RDS tab you can see that the terraform apply -no-color -auto-approve command is executed. The creation of the AWS RDS MySQL instance is in progress.

                                                                                                                          3. Once the deployment is done, you should see that the AWS RDS MySQL instance is green and completed.

                                                                                                                          Get the MySQL RDS credentials from the Lifecycle Job

                                                                                                                          Now that the AWS RDS MySQL instance is created, we need to get the credentials to connect to it. We have use the terraform output -json > /qovery-output/qovery-output.json command to get the credentials. If you go back to the Variables tab of your MySQL RDS service, you will see that the QOVERY_OUTPUT_** environment variables are created.

                                                                                                                          By using terraform output -json > /qovery-output/qovery-output.json Qovery automatically create those environment variables for you. You can use them in your application to connect to the AWS RDS MySQL instance. Learn more on how Lifecycle Job output...

                                                                                                                          FAQ

                                                                                                                          What happen if I delete my environment with your example?

                                                                                                                          If you delete your environment, the AWS RDS MySQL instance will be deleted too. You can see that in the MySQL RDS service logs. You will see that the terraform destroy -no-color -auto-approve command is executed.

                                                                                                                          Can I use the Lifecycle Job to deploy my application?

                                                                                                                          Some users ask us if they can use the Lifecycle Job to deploy their application. The answer is yes!. The Lifecycle Job is designed to deploy all type of resources. However, we recommend using the official Qovery way to deploy applications. Learn more on how to deploy your application...

                                                                                                                          What happen if I clone my Environment with the Lifecycle Job?

                                                                                                                          If you clone an Environment with the Lifecycle Job, the Lifecycle Job will be cloned too. In our example we have set the TF_VAR_qovery_environment_id environment variable to the QOVERY_ENVIRONMENT_ID built-in environment variable. So when you clone your Environment, the QOVERY_ENVIRONMENT_ID built-in environment variable will be different. That's why you need to create a new alias environment variable for the QOVERY_ENVIRONMENT_ID built-in environment variable. Learn more on how to clone an Environment...

                                                                                                                          What happen if I modify my Lifecycle Job after my Environment is deployed?

                                                                                                                          If you modify your Lifecycle Job after your Environment is deployed, the Lifecycle Job will be redeployed. In our example, since the state of our AWS RDS MySQL instance is stored in the S3 bucket, the AWS RDS MySQL instance will not be recreated. However, if you modify the main.tf file, the AWS RDS MySQL instance will be updated.

                                                                                                                          Wrapping up

                                                                                                                          In this guide, we have seen how to use the Lifecycle Job to create an AWS RDS MySQL instance with Terraform. We have also seen how to get the credentials of the AWS RDS MySQL instance to connect to it from our application. To learn more about the Lifecycle Job, you can read the Lifecycle Job documentation. To get more examples, check out the Qovery Lifecycle Examples repository.

                                                                                                                          - + - + diff --git a/guides/tutorial/how-to-write-a-dockerfile/index.html b/guides/tutorial/how-to-write-a-dockerfile/index.html index a3f1790509..800faf50f8 100644 --- a/guides/tutorial/how-to-write-a-dockerfile/index.html +++ b/guides/tutorial/how-to-write-a-dockerfile/index.html @@ -26,9 +26,9 @@ - + - + @@ -44,14 +44,14 @@
                                                                                                                          -

                                                                                                                          How to write a Dockerfile

                                                                                                                          How to write your first Dockerfile in order to deploy your application with Qovery

                                                                                                                          With Qovery, there are two ways to build and deploy your application:

                                                                                                                          1. Without a Dockerfile in your repository: your application is built with Buildpacks
                                                                                                                          2. With a Dockerfile: sometimes Buildpacks won't fit your specific setup, and you'll have to write your Dockerfile.

                                                                                                                          In this article, we'll see, step by step, how to quickly write a proper Dockerfile for any application you would like to deploy.


                                                                                                                          My Sweet Dockerfile

                                                                                                                          If you read this, you probably don't know why Docker is used and what is the purpose of a Dockerfile.

                                                                                                                          Docker is a container engine, building and using images to deploy applications in containers. It looks like virtualization, and each container could be compared to a virtual machine with the minimal setup to run an application.

                                                                                                                          The Dockerfile is your image builder recipe. When Docker uses it, it will follow all instructions to build your application and run it.

                                                                                                                          The first step is to create a file named Dockerfile at your project root level so Qovery would be able to find and use it.

                                                                                                                          Also, to avoid unwanted files from your repository (images, .idea, DS_Store etc.), you need to add a .dockerignore. It will prevent heavy copy tasks of useless files, mostly your project dependencies and libraries you'll get back to with your package manager.

                                                                                                                          The .dockerignore file works like the .gitignore, so add all the path of the useless files and folders in it.

                                                                                                                          FROM

                                                                                                                          The first line you'll add in your Dockerfile is FROM.

                                                                                                                          It will pull an already existing image from Docker Hub. You should most of the time use an image that fits your application language (Node, Python, Java, etc.), but you can go a step backward and begin with a simple Linux image.

                                                                                                                          Your Dockerfile's first line should look like this:

                                                                                                                          FROM <image_name>:<image_version>

                                                                                                                          For example, with python:

                                                                                                                          FROM python:3

                                                                                                                          WORKDIR

                                                                                                                          Since most of the images are Linux-based, a good practice is to set up a directory you'll work in. That's the purpose of the WORKDIR line. It defines a directory and moves you in:

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app

                                                                                                                          If you now work with a relative path (./), it will be in the app directory.

                                                                                                                          COPY

                                                                                                                          Now you have defined your base image and your working directory, it's time to add your code in. COPY works like cp linux command. First argument is the source and second one is the destination.

                                                                                                                          It's time to copy your source code in the image.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .

                                                                                                                          Here, the elements of your root folder from your current directory will be added inside the /app folder.

                                                                                                                          RUN

                                                                                                                          One does not simply get source code to run an application.

                                                                                                                          Most of the time, you have some stuff to do before an application execution like downloading/installing peer dependencies and build your application.

                                                                                                                          That's the purpose of RUN lines; it will execute a command and wait to finish the task to go forward.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff."
                                                                                                                          RUN <my_command>

                                                                                                                          You can set as many RUN lines as you need.

                                                                                                                          EXPOSE

                                                                                                                          If your app needs to be reached from outside the container, you have to open its listening port. EXPOSE is made for this.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff"
                                                                                                                          RUN <my_command>
                                                                                                                          EXPOSE <app_port>

                                                                                                                          CMD

                                                                                                                          Your application is now ready to run.

                                                                                                                          The last thing to do is to specify how to execute it. Add the CMD line with the same command with all the arguments you use locally to launch your application.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff"
                                                                                                                          RUN <my_command>
                                                                                                                          EXPOSE <app_port>
                                                                                                                          CMD [ "<command>", "<argument_1>", "<argument_2>" ]

                                                                                                                          Like a local usage, you can set as many arguments as needed.

                                                                                                                          Build your image

                                                                                                                          When Qovery uses your Dockerfile, it first builds it before running it.

                                                                                                                          If the build fails, Qovery won't be able to launch our application. To simplify debugging, you can build your image locally if you have Docker installed on your computer.

                                                                                                                          Open a terminal and set the path at the Dockerfile location, and use the command:

                                                                                                                          cd ~/my/folder/where/my/code/is
                                                                                                                          docker build .

                                                                                                                          It will build your image based on your Dockerfile. You'll see all the logs related to all lines you've added in the Dockerfile.

                                                                                                                          If something goes wrong, it will be printed onto the terminal, and you'll be able to debug it.

                                                                                                                          Test your image

                                                                                                                          If your image builds properly, you can now check how it will be handle by Qovery with the command:

                                                                                                                          qovery run

                                                                                                                          What's next?

                                                                                                                          If you follow this tutorial and everything works perfectly, it's time to deploy your app on Qovery. You will find all the things you need to know here.

                                                                                                                          Tutorial
                                                                                                                          +

                                                                                                                          How to write a Dockerfile

                                                                                                                          How to write your first Dockerfile in order to deploy your application with Qovery

                                                                                                                          With Qovery, there are two ways to build and deploy your application:

                                                                                                                          1. Without a Dockerfile in your repository: your application is built with Buildpacks
                                                                                                                          2. With a Dockerfile: sometimes Buildpacks won't fit your specific setup, and you'll have to write your Dockerfile.

                                                                                                                          In this article, we'll see, step by step, how to quickly write a proper Dockerfile for any application you would like to deploy.


                                                                                                                          My Sweet Dockerfile

                                                                                                                          If you read this, you probably don't know why Docker is used and what is the purpose of a Dockerfile.

                                                                                                                          Docker is a container engine, building and using images to deploy applications in containers. It looks like virtualization, and each container could be compared to a virtual machine with the minimal setup to run an application.

                                                                                                                          The Dockerfile is your image builder recipe. When Docker uses it, it will follow all instructions to build your application and run it.

                                                                                                                          The first step is to create a file named Dockerfile at your project root level so Qovery would be able to find and use it.

                                                                                                                          Also, to avoid unwanted files from your repository (images, .idea, DS_Store etc.), you need to add a .dockerignore. It will prevent heavy copy tasks of useless files, mostly your project dependencies and libraries you'll get back to with your package manager.

                                                                                                                          The .dockerignore file works like the .gitignore, so add all the path of the useless files and folders in it.

                                                                                                                          FROM

                                                                                                                          The first line you'll add in your Dockerfile is FROM.

                                                                                                                          It will pull an already existing image from Docker Hub. You should most of the time use an image that fits your application language (Node, Python, Java, etc.), but you can go a step backward and begin with a simple Linux image.

                                                                                                                          Your Dockerfile's first line should look like this:

                                                                                                                          FROM <image_name>:<image_version>

                                                                                                                          For example, with python:

                                                                                                                          FROM python:3

                                                                                                                          WORKDIR

                                                                                                                          Since most of the images are Linux-based, a good practice is to set up a directory you'll work in. That's the purpose of the WORKDIR line. It defines a directory and moves you in:

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app

                                                                                                                          If you now work with a relative path (./), it will be in the app directory.

                                                                                                                          COPY

                                                                                                                          Now you have defined your base image and your working directory, it's time to add your code in. COPY works like cp linux command. First argument is the source and second one is the destination.

                                                                                                                          It's time to copy your source code in the image.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .

                                                                                                                          Here, the elements of your root folder from your current directory will be added inside the /app folder.

                                                                                                                          RUN

                                                                                                                          One does not simply get source code to run an application.

                                                                                                                          Most of the time, you have some stuff to do before an application execution like downloading/installing peer dependencies and build your application.

                                                                                                                          That's the purpose of RUN lines; it will execute a command and wait to finish the task to go forward.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff."
                                                                                                                          RUN <my_command>

                                                                                                                          You can set as many RUN lines as you need.

                                                                                                                          EXPOSE

                                                                                                                          If your app needs to be reached from outside the container, you have to open its listening port. EXPOSE is made for this.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff"
                                                                                                                          RUN <my_command>
                                                                                                                          EXPOSE <app_port>

                                                                                                                          CMD

                                                                                                                          Your application is now ready to run.

                                                                                                                          The last thing to do is to specify how to execute it. Add the CMD line with the same command with all the arguments you use locally to launch your application.

                                                                                                                          FROM <image_name>:<image_version>
                                                                                                                          WORKDIR /app
                                                                                                                          COPY . .
                                                                                                                          RUN echo "Installing or doing stuff"
                                                                                                                          RUN <my_command>
                                                                                                                          EXPOSE <app_port>
                                                                                                                          CMD [ "<command>", "<argument_1>", "<argument_2>" ]

                                                                                                                          Like a local usage, you can set as many arguments as needed.

                                                                                                                          Build your image

                                                                                                                          When Qovery uses your Dockerfile, it first builds it before running it.

                                                                                                                          If the build fails, Qovery won't be able to launch our application. To simplify debugging, you can build your image locally if you have Docker installed on your computer.

                                                                                                                          Open a terminal and set the path at the Dockerfile location, and use the command:

                                                                                                                          cd ~/my/folder/where/my/code/is
                                                                                                                          docker build .

                                                                                                                          It will build your image based on your Dockerfile. You'll see all the logs related to all lines you've added in the Dockerfile.

                                                                                                                          If something goes wrong, it will be printed onto the terminal, and you'll be able to debug it.

                                                                                                                          Test your image

                                                                                                                          If your image builds properly, you can now check how it will be handle by Qovery with the command:

                                                                                                                          qovery run

                                                                                                                          What's next?

                                                                                                                          If you follow this tutorial and everything works perfectly, it's time to deploy your app on Qovery. You will find all the things you need to know here.

                                                                                                                          Tutorial
                                                                                                                          - + - + diff --git a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html index c531173cfd..13881aa8c0 100644 --- a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html +++ b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -49,14 +49,14 @@
                                                                                                                          Qovery: Select new context
                                                                                                                          Organization:
                                                                                                                          ✔ Qovery Realm
                                                                                                                          Project:
                                                                                                                          ✔ Posthog
                                                                                                                          Environment:
                                                                                                                          ✔ prod
                                                                                                                          Application:
                                                                                                                          ✔ nginx-proxy
                                                                                                                          Qovery: New context:
                                                                                                                          Organization | Qovery Realm
                                                                                                                          Project | Posthog
                                                                                                                          Environment | prod
                                                                                                                          Application | nginx-proxy

                                                                                                                          Import

                                                                                                                          With Qovery, you make the distinction between Environment Variables and Secrets. Basically, the value of a Secret is encrypted and cannot be revealed.

                                                                                                                          Let's say that we have the following dotenv file .env.development that we want to import:

                                                                                                                          STRAPI_API_KEY=x.xxyyyzzz
                                                                                                                          COLOR_BACKGROUND=fff
                                                                                                                          AUTH0_API_KEY_SECRET=0xb33f
                                                                                                                          API_URL=https://api.mytld.com

                                                                                                                          The STRAPI_API_KEY and AUTH0_API_KEY_SECRET are Secrets. COLOR_BACKGROUND and API_URL are Environment Variables.

                                                                                                                          Environment Variables

                                                                                                                          To import the Environment Variables from this file we run the command qovery env import <dotenv file> and we select the environment variables to import:

                                                                                                                          $ qovery env import .env.development
                                                                                                                          Qovery: dot env file to import: '.env.development'
                                                                                                                          ? Do you want to import Environment Variables or Secrets? Environment Variables
                                                                                                                          ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                                                                          [x] COLOR_BACKGROUND=fff
                                                                                                                          [ ] AUTH0_API_KEY_SECRET=0xb33f
                                                                                                                          > [x] API_URL=https://api.mytld.com
                                                                                                                          [ ] STRAPI_API_KEY=x.xxyyyzzz

                                                                                                                          Once validated you will see the following import validation:

                                                                                                                          ? What environment variables do you want to import? COLOR_BACKGROUND=fff, API_URL=https://api.mytld.com
                                                                                                                          Qovery: ✅ Environment Variables successfully imported!

                                                                                                                          If during the import something goes wrong, you will see the errors and why it failed.

                                                                                                                          Secrets

                                                                                                                          To import the Secrets, you need to run the same command qovery env import <dotenv file> and select the secrets to import.

                                                                                                                          $ qovery env import .env.development
                                                                                                                          -
                                                                                                                          Qovery: dot env file to import: '.env.development'
                                                                                                                          ? Do you want to import Environment Variables or Secrets? Secrets
                                                                                                                          ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                                                                          [ ] COLOR_BACKGROUND=fff
                                                                                                                          [x] AUTH0_API_KEY_SECRET=0xb33f
                                                                                                                          [ ] API_URL=https://api.mytld.com
                                                                                                                          > [x] STRAPI_API_KEY=x.xxyyyzzz

                                                                                                                          Once validated you will see the following import validation:

                                                                                                                          ? What environment variables do you want to import? STRAPI_API_KEY=x.xxyyyzzz, AUTH0_API_KEY_SECRET=0xb33
                                                                                                                          Qovery: ✅ Secrets successfully imported!

                                                                                                                          Check

                                                                                                                          Open your environment variables console to check that everything has been set correctly.

                                                                                                                          +
                                                                                                                          Qovery: dot env file to import: '.env.development'
                                                                                                                          ? Do you want to import Environment Variables or Secrets? Secrets
                                                                                                                          ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                                                                          [ ] COLOR_BACKGROUND=fff
                                                                                                                          [x] AUTH0_API_KEY_SECRET=0xb33f
                                                                                                                          [ ] API_URL=https://api.mytld.com
                                                                                                                          > [x] STRAPI_API_KEY=x.xxyyyzzz

                                                                                                                          Once validated you will see the following import validation:

                                                                                                                          ? What environment variables do you want to import? STRAPI_API_KEY=x.xxyyyzzz, AUTH0_API_KEY_SECRET=0xb33
                                                                                                                          Qovery: ✅ Secrets successfully imported!

                                                                                                                          Check

                                                                                                                          Open your environment variables console to check that everything has been set correctly.

                                                                                                                          - + - + diff --git a/guides/tutorial/index.html b/guides/tutorial/index.html index 615dfdfb87..c6eb20f96f 100644 --- a/guides/tutorial/index.html +++ b/guides/tutorial/index.html @@ -26,9 +26,9 @@ - + - + @@ -126,14 +126,14 @@
                                                                                                                          -

                                                                                                                          Tutorial Guides

                                                                                                                          Additional step-by-step resources to leverage even more Qovery
                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          +

                                                                                                                          Tutorial Guides

                                                                                                                          Additional step-by-step resources to leverage even more Qovery
                                                                                                                          tutorial

                                                                                                                          Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a blazingly fast REST API in Rust (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create a Playground Environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Create your Staging environment from your Production environment on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Creating API clients using OpenAPI Tools

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Customizing Preview URL with Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Rails with PostgreSQL and Sidekiq

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Deploy Temporal on Kubernetes

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Getting Started with Preview Environments on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Grafana setup with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to activate SSO to connect to your EKS cluster

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to a managed MongoDB instance on AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to connect to your EKS cluster with kubectl

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to create an RDS instance through the AWS console

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy a Rust REST API application on AWS with ease

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to deploy Helm charts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to integrate Qovery with GitHub Actions

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to run commands before the application starts

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to seed a Postgres database on a dev environment

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use CloudFront with a React frontend application on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to use Github Organizations with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          How to write a Dockerfile

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Import your environment variables with the Qovery CLI

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Integrate your application logs to Cloudwatch

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Kubernetes observability and monitoring with Datadog

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Managing Environment Variables in React (create-react-app)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Migrate your application from Heroku to AWS

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Setup VPC peering on AWS with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          URL Shortener API with Kotlin (Part 1/2)

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use an API gateway in front of multiple services

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Using Amazon SQS and Lambda on Qovery

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Working with Git Submodules

                                                                                                                          read now
                                                                                                                          tutorial

                                                                                                                          Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                                                                          read now
                                                                                                                          - + - + diff --git a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html index 10ad2fc2c4..f895eacd20 100644 --- a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html +++ b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html @@ -26,9 +26,9 @@ - + - + @@ -52,14 +52,14 @@
                                                                                                                          logs:
                                                                                                                          enabled: true
                                                                                                                          containerCollectAll: true
                                                                                                                          # Set to false if you are not using APM.
                                                                                                                          apm:
                                                                                                                          enabled: true
                                                                                                                          containerExcludeLogs: "kube_namespace:kube-system kube_namespace:qovery kube_namespace:cert-manager kube_namespace:nginx-ingress kube_namespace:logging kube_namespace:prometheus"
                                                                                                                          # You can remove this part if you are not using APM.
                                                                                                                          # Note that it it will be enabled for all your applications.
                                                                                                                          clusterAgent:
                                                                                                                          admissionController:
                                                                                                                          enabled: true
                                                                                                                          mutateUnlabelled: true
                                                                                                                          • Replace <CLUSTER NAME> with a meaningful name to identify your cluster.
                                                                                                                          • Set the site value corresponding to the one you selected upon account creation (you can find the information under 1 > With Helm V3 > --set datadog.site=<YOUR SITE VALUE>)

                                                                                                                          There are many other values you can set. For advanced usage, check: https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml

                                                                                                                        • Install Datadog agent in your cluster

                                                                                                                          The Datadog agent is a program that will collect data from your cluster and forward it to Datadog. -We'll install it uning Helm.

                                                                                                                          First add the datadog Helm repository and update your local list:

                                                                                                                          helm repo add datadog https://helm.datadoghq.com
                                                                                                                          helm repo update

                                                                                                                          Then we will install the agent in the datadog namespace:

                                                                                                                          helm install datadog-agent \
                                                                                                                          -n datadog --create-namespace \
                                                                                                                          -f <PATH TO datadog-values.yaml> \
                                                                                                                          --set datadog.apiKey='<API KEY>' \
                                                                                                                          datadog/datadog
                                                                                                                          • Edit the path to the datadog-values.yaml file you created
                                                                                                                          • Replace <API KEY> with your actual API KEY. You can find it under 1 > With Helm V3 > --set datadog.apiKey=<API KEY>
                                                                                                                        • Check the agent is running properly

                                                                                                                          Wait for a minute then run the following command:

                                                                                                                          kubectl get pods -n datadog

                                                                                                                          If the installation was successful, you should see an output similar to this one:

                                                                                                                          NAME READY STATUS RESTARTS AGE
                                                                                                                          datadog-agent-2xhsv 3/3 Running 0 1m
                                                                                                                          datadog-agent-cluster-agent-7f8bddd44-pwjnl 1/1 Running 0 1m
                                                                                                                          datadog-agent-kube-state-metrics-577fcf6778-kc2gk 1/1 Running 0 1m
                                                                                                                          datadog-agent-qfsl2 3/3 Running 0 1m
                                                                                                                          datadog-agent-s5r5r 3/3 Running 0 1m
                                                                                                                        • Finish Setup

                                                                                                                          Once Datadog receives your data, you should be able to click Next on the wizard. You might need to refresh the page in some cases. It can take a couple minutes before your data is ready.

                                                                                                                          You will then arrive on Step 4

                                                                                                                          Datadog - Console

                                                                                                                          You can skip this part if you're not interested in monitoring your cloud account.

                                                                                                                          Finally, restart your applications if you are using APM.

                                                                                                                        • Conclusion

                                                                                                                          You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

                                                                                                                          +We'll install it uning Helm.

                                                                                                                          First add the datadog Helm repository and update your local list:

                                                                                                                          helm repo add datadog https://helm.datadoghq.com
                                                                                                                          helm repo update

                                                                                                                          Then we will install the agent in the datadog namespace:

                                                                                                                          helm install datadog-agent \
                                                                                                                          -n datadog --create-namespace \
                                                                                                                          -f <PATH TO datadog-values.yaml> \
                                                                                                                          --set datadog.apiKey='<API KEY>' \
                                                                                                                          datadog/datadog
                                                                                                                          • Edit the path to the datadog-values.yaml file you created
                                                                                                                          • Replace <API KEY> with your actual API KEY. You can find it under 1 > With Helm V3 > --set datadog.apiKey=<API KEY>
                                                                                                                        • Check the agent is running properly

                                                                                                                          Wait for a minute then run the following command:

                                                                                                                          kubectl get pods -n datadog

                                                                                                                          If the installation was successful, you should see an output similar to this one:

                                                                                                                          NAME READY STATUS RESTARTS AGE
                                                                                                                          datadog-agent-2xhsv 3/3 Running 0 1m
                                                                                                                          datadog-agent-cluster-agent-7f8bddd44-pwjnl 1/1 Running 0 1m
                                                                                                                          datadog-agent-kube-state-metrics-577fcf6778-kc2gk 1/1 Running 0 1m
                                                                                                                          datadog-agent-qfsl2 3/3 Running 0 1m
                                                                                                                          datadog-agent-s5r5r 3/3 Running 0 1m
                                                                                                                        • Finish Setup

                                                                                                                          Once Datadog receives your data, you should be able to click Next on the wizard. You might need to refresh the page in some cases. It can take a couple minutes before your data is ready.

                                                                                                                          You will then arrive on Step 4

                                                                                                                          Datadog - Console

                                                                                                                          You can skip this part if you're not interested in monitoring your cloud account.

                                                                                                                          Finally, restart your applications if you are using APM.

                                                                                                                        • Conclusion

                                                                                                                          You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

                                                                                                                          - + - + diff --git a/guides/tutorial/managing-env-variables-in-create-react-app/index.html b/guides/tutorial/managing-env-variables-in-create-react-app/index.html index 2f9ea4b663..9ede06814d 100644 --- a/guides/tutorial/managing-env-variables-in-create-react-app/index.html +++ b/guides/tutorial/managing-env-variables-in-create-react-app/index.html @@ -26,9 +26,9 @@ - + - + @@ -54,14 +54,14 @@
                                                                                                                          ARG REACT_APP_MSG
                                                                                                                          ENV REACT_APP_MSG $REACT_APP_MSG
                                                                                                                          # Add a work directory
                                                                                                                          WORKDIR /app
                                                                                                                          # Cache and Install dependencies
                                                                                                                          COPY package.json .
                                                                                                                          COPY yarn.lock .
                                                                                                                          RUN yarn install --production
                                                                                                                          # Copy app files
                                                                                                                          COPY . .
                                                                                                                          # Build the app
                                                                                                                          RUN yarn build
                                                                                                                          # Bundle static assets with nginx
                                                                                                                          FROM nginx:1.21.0-alpine as production
                                                                                                                          ENV NODE_ENV production
                                                                                                                          # Copy built assets from builder
                                                                                                                          COPY --from=builder /app/build /usr/share/nginx/html
                                                                                                                          # Add your nginx.conf
                                                                                                                          COPY nginx.conf /etc/nginx/conf.d/default.conf
                                                                                                                          # Expose port
                                                                                                                          EXPOSE 3000
                                                                                                                          # Start nginx
                                                                                                                          CMD ["nginx", "-g", "daemon off;"]

                                                                                                                          It uses a Nginx server for hosting your application instead of starting a Node.js server, which is more optimal for production usage.

                                                                                                                          Additionally, add a nginx.conf file with this content to configure your app:

                                                                                                                          server {
                                                                                                                          listen 80;
                                                                                                                          -
                                                                                                                          location / {
                                                                                                                          root /usr/share/nginx/html/;
                                                                                                                          include /etc/nginx/mime.types;
                                                                                                                          try_files $uri $uri/ /index.html;
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Now, commit and push your changes - your create-react-app is handling env vars properly and is optimized for production usage.

                                                                                                                          Conclusion

                                                                                                                          In the guide, we went through managing environment variables in react / create-react-apps without resorting to using any bash scripts and host it on Qovery using Ngnix server.

                                                                                                                          +
                                                                                                                          location / {
                                                                                                                          root /usr/share/nginx/html/;
                                                                                                                          include /etc/nginx/mime.types;
                                                                                                                          try_files $uri $uri/ /index.html;
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Now, commit and push your changes - your create-react-app is handling env vars properly and is optimized for production usage.

                                                                                                                          Conclusion

                                                                                                                          In the guide, we went through managing environment variables in react / create-react-apps without resorting to using any bash scripts and host it on Qovery using Ngnix server.

                                                                                                                          - + - + diff --git a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html index 5b1b8db3fa..df816da194 100644 --- a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html +++ b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@
                                                                                                                          # selection the app where you want to import your environment variables
                                                                                                                          qovery context set
                                                                                                                          # import your Heroku environment variables
                                                                                                                          heroku config --app <your_heroku_app_name> --json | \
                                                                                                                          qovery env parse --heroku-json > heroku.env && \
                                                                                                                          qovery env import heroku.env && \
                                                                                                                          rm heroku.env
                                                                                                                          Qovery: dot env file to import: 'heroku.env'
                                                                                                                          ? Do you want to import Environment Variables or Secrets? Environment Variables
                                                                                                                          ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                                                                          [x] GREETINGS=hello world
                                                                                                                          [ ] STRIPE_API_KEY=xxx-yyy-zzz
                                                                                                                          > [x] IS_PRODUCTION=true
                                                                                                                          -
                                                                                                                          Qovery: ✅ Environment Variables successfully imported!

                                                                                                                          Connect your frontend app to your backend app

                                                                                                                          To connect your frontend app your backend app we will create an environment variable alias.

                                                                                                                          Here is how to create a frontend app:

                                                                                                                          And now how to connect your frontend app with your backend app:

                                                                                                                          You can also take a look at this forum reply to learn how to do it.

                                                                                                                          Connect your backend app to your database

                                                                                                                          Same as connecting your frontend app to your backend app, you can create an environment variable alias DATABASE_URL for the built-in secret finishing with _DATABASE_URL_INTERNAL.

                                                                                                                          4. Copy data from your Heroku databases to your AWS databases

                                                                                                                          Coming soon with Replibyte

                                                                                                                          5. Deploy your apps!

                                                                                                                          We are finally ready to deploy my applications on AWS!

                                                                                                                          Watch the final result 😎

                                                                                                                          FAQ by Heroku users

                                                                                                                          How to create a custom domain?

                                                                                                                          Check out the documentation on how to configure your custom domain.

                                                                                                                          How to monitor my apps?

                                                                                                                          We do recommend using Datadog or any other monitoring products for monitoring your apps deployed by Qovery. Check out our tutorial on how to install Datadog.

                                                                                                                          Do you have Heroku "Review App" equivalent?

                                                                                                                          Yes, it's what we call Preview Environment

                                                                                                                          How to rollback?

                                                                                                                          Check out the app rollback documentation

                                                                                                                          How auto-scaling works?

                                                                                                                          Check out the app auto-scaling documentation

                                                                                                                          How to manage database migration?

                                                                                                                          Check out our forum reply

                                                                                                                          Is it possible to get a shell / connect to my app?

                                                                                                                          Yes, with the Qovery CLI and the command qovery shell. Check out the documentation.

                                                                                                                          Can I use Terraform and Infrastructure as Code?

                                                                                                                          Absolutely, we have a Qovery Terraform provider available.

                                                                                                                          How can I connect my app to MongoDB Atlas?

                                                                                                                          If you use MongoDB Atlas check out our tutorial about VPC peering and how to securely connect to your existing MongoDB Atlas database.

                                                                                                                          How can I connect my app to an AWS service not managed by Qovery?

                                                                                                                          If you want to connect your app to an AWS service not managed by Qovery, check out our tutorial about VPC peering and how to securely connect to this AWS service.


                                                                                                                          If you have a common question about Qovery, we have a more general FAQ section available.

                                                                                                                          Wrapping up

                                                                                                                          Congrats! You have migrated from Heroku to AWS. Feel free to check out our forum and open a thread if you have any question.

                                                                                                                          +
                                                                                                                          Qovery: ✅ Environment Variables successfully imported!

                                                                                                                          Connect your frontend app to your backend app

                                                                                                                          To connect your frontend app your backend app we will create an environment variable alias.

                                                                                                                          Here is how to create a frontend app:

                                                                                                                          And now how to connect your frontend app with your backend app:

                                                                                                                          You can also take a look at this forum reply to learn how to do it.

                                                                                                                          Connect your backend app to your database

                                                                                                                          Same as connecting your frontend app to your backend app, you can create an environment variable alias DATABASE_URL for the built-in secret finishing with _DATABASE_URL_INTERNAL.

                                                                                                                          4. Copy data from your Heroku databases to your AWS databases

                                                                                                                          Coming soon with Replibyte

                                                                                                                          5. Deploy your apps!

                                                                                                                          We are finally ready to deploy my applications on AWS!

                                                                                                                          Watch the final result 😎

                                                                                                                          FAQ by Heroku users

                                                                                                                          How to create a custom domain?

                                                                                                                          Check out the documentation on how to configure your custom domain.

                                                                                                                          How to monitor my apps?

                                                                                                                          We do recommend using Datadog or any other monitoring products for monitoring your apps deployed by Qovery. Check out our tutorial on how to install Datadog.

                                                                                                                          Do you have Heroku "Review App" equivalent?

                                                                                                                          Yes, it's what we call Preview Environment

                                                                                                                          How to rollback?

                                                                                                                          Check out the app rollback documentation

                                                                                                                          How auto-scaling works?

                                                                                                                          Check out the app auto-scaling documentation

                                                                                                                          How to manage database migration?

                                                                                                                          Check out our forum reply

                                                                                                                          Is it possible to get a shell / connect to my app?

                                                                                                                          Yes, with the Qovery CLI and the command qovery shell. Check out the documentation.

                                                                                                                          Can I use Terraform and Infrastructure as Code?

                                                                                                                          Absolutely, we have a Qovery Terraform provider available.

                                                                                                                          How can I connect my app to MongoDB Atlas?

                                                                                                                          If you use MongoDB Atlas check out our tutorial about VPC peering and how to securely connect to your existing MongoDB Atlas database.

                                                                                                                          How can I connect my app to an AWS service not managed by Qovery?

                                                                                                                          If you want to connect your app to an AWS service not managed by Qovery, check out our tutorial about VPC peering and how to securely connect to this AWS service.


                                                                                                                          If you have a common question about Qovery, we have a more general FAQ section available.

                                                                                                                          Wrapping up

                                                                                                                          Congrats! You have migrated from Heroku to AWS. Feel free to check out our forum and open a thread if you have any question.

                                                                                                                          - + - + diff --git a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html index 91487ce92d..47525bd739 100644 --- a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html +++ b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -46,14 +46,14 @@

                                                                                                                          Setting up Cloudflare and Custom Domain on Qovery

                                                                                                                          Using Cloudflare for applications deployed on Qovery

                                                                                                                          The guide assumes that you have an application up and running on Qovery. We'll go through the process of adding a new Custom Domain to the application and use Cloudflare as the domain provider. We also assume that you own a custom domain on Cloudflare (or any other domain registrar):

                                                                                                                          Cloudflare

                                                                                                                          Adding a Custom Domain

                                                                                                                          First, let's open application settings:

                                                                                                                          Cloudflare

                                                                                                                          Add your Cloudflare managed domain in Domain section:

                                                                                                                          Cloudflare

                                                                                                                          Cloudflare Configuration

                                                                                                                          CNAME

                                                                                                                          To finish the configuration on Cloudfalre, open the DNS Settings:

                                                                                                                          Cloudflare

                                                                                                                          And add a CNAME entry with the value taken from the Qovery Console just like this:

                                                                                                                          Cloudflare

                                                                                                                          You can safely use the Proxy mode.

                                                                                                                          SSL/TLS

                                                                                                                          The last step to configure the domain Cloudflare side properly, is to use the Full TLS encryption:

                                                                                                                          Cloudflare

                                                                                                                          This is the requirement to make Custom Domain work properly using Cloudflare as the domain provider on Qovery.

                                                                                                                          Restrict application access

                                                                                                                          If you want to limit the application access via Cloudflare only, you have two ways to perform it:

                                                                                                                          IP whitelisting

                                                                                                                          In Qovery it is possible to whitelist a range of IPs that can reach your application:

                                                                                                                          • In the advanced settings section of your application:

                                                                                                                            Cloudflare

                                                                                                                          • Get the Cloudflare ips
                                                                                                                          • Edit the network.ingress.whitelist_source_range setting and add the Cloudflare IPs separated with a comma:

                                                                                                                            Cloudflare

                                                                                                                          • Save and redeploy your application

                                                                                                                          Cloudflared

                                                                                                                          Cloudflared establishes outbound connections (tunnels) between your resources and Cloudflare’s global network.

                                                                                                                          You have different ways to install Cloudflared on your cluster, you can find the installation instructions within this documentation Since Cloudflared establishes a tunnel for you and the domain and TLS management is done by Cloudflare, you don't need to expose publicly the application during the setup (See port setup

                                                                                                                          You can decide to install Cloudflared by yourself or via Qovery. Within the section below, you will find documentation on how to install Cloudflared as a container in one of the Qovery environments. -By creating and deploying the following service, using the Cloudflared image:

                                                                                                                          Cloudflare

                                                                                                                          Once your tunnel is created and connected, you have to set the public hostname and the related service settings.

                                                                                                                          Cloudflare

                                                                                                                          To get the service name of your application deployed by Qovery, you can get it in your application variables:

                                                                                                                          Cloudflare

                                                                                                                          Conclusion

                                                                                                                          After following the steps from above, our application should be accessible using the custom domain we selected:

                                                                                                                          Cloudflare

                                                                                                                          In the guide we went through all the necessary steps to configure Cloudflare and Qovery to make use of your custom domain.

                                                                                                                          +By creating and deploying the following service, using the Cloudflared image:

                                                                                                                          Cloudflare

                                                                                                                          Once your tunnel is created and connected, you have to set the public hostname and the related service settings.

                                                                                                                          Cloudflare

                                                                                                                          To get the service name of your application deployed by Qovery, you can get it in your application variables:

                                                                                                                          Cloudflare

                                                                                                                          Conclusion

                                                                                                                          After following the steps from above, our application should be accessible using the custom domain we selected:

                                                                                                                          Cloudflare

                                                                                                                          In the guide we went through all the necessary steps to configure Cloudflare and Qovery to make use of your custom domain.

                                                                                                                          - + - + diff --git a/guides/tutorial/url-shortener-api-with-kotlin/index.html b/guides/tutorial/url-shortener-api-with-kotlin/index.html index bcad06206c..1d49931a62 100644 --- a/guides/tutorial/url-shortener-api-with-kotlin/index.html +++ b/guides/tutorial/url-shortener-api-with-kotlin/index.html @@ -26,9 +26,9 @@ - + - + @@ -77,14 +77,14 @@
                                                                                                                          transaction {
                                                                                                                          // create tables if they do not exist
                                                                                                                          SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                                                                          }
                                                                                                                          }
                                                                                                                          @kotlin.jvm.JvmOverloads
                                                                                                                          fun Application.module(testing: Boolean = false) {
                                                                                                                          initDatabase()
                                                                                                                          // ...
                                                                                                                          }

                                                                                                                          We have to replace the Hash Table used to store the data by the PostgreSQL database (see the final code here)

                                                                                                                          Deploy in the Cloud with Qovery

                                                                                                                          Qovery is going to help us to deploy the final application in the Cloud without the need to configure the CI/CD, network, security, load balancing, database and all the DevOps tasks

                                                                                                                          Qovery is a deployment platform that helps all developers to deploy their applications in the Cloud in just a few seconds

                                                                                                                        • Sign in to the Qovery web interface.

                                                                                                                          Qovery Sign-up page

                                                                                                                        • Create an application

                                                                                                                          1. Create a new project

                                                                                                                            Migrate from Heroku

                                                                                                                          2. Create a new environment

                                                                                                                            Migrate from Heroku

                                                                                                                          3. Create a new application

                                                                                                                            To follow the guide, you can fork and use our repository

                                                                                                                            Use the forked repository (and branch master) while creating the application in the repository field:

                                                                                                                            Migrate from Heroku

                                                                                                                          4. After the application is created:

                                                                                                                            • Navigate application settings
                                                                                                                            • Select Port
                                                                                                                            • Add port 8080

                                                                                                                            Microservices

                                                                                                                            This will expose your application and make accessible in the public internet.

                                                                                                                          Deploy a database

                                                                                                                          Create and deploy a new database.

                                                                                                                          To learn how to do it, you can follow this guide.

                                                                                                                          Connect to PostgreSQL

                                                                                                                          Qovery add dynamically all required environment variables to connect to the database at the runtime of the container.

                                                                                                                          You can list them all in Environment Variables Secrets section in your application overview, as described in envs guide.

                                                                                                                          DB Secrets

                                                                                                                          To use them:

                                                                                                                          fun initDatabase() {
                                                                                                                          val config = HikariConfig().apply {
                                                                                                                          jdbcUrl = "jdbc:${System.getenv("QOVERY_DATABASE_MY_PQL_DB_CONNECTION_URI_WITHOUT_CREDENTIALS")}"
                                                                                                                          username = System.getenv("QOVERY_DATABASE_MY_PQL_DB_USERNAME")
                                                                                                                          password = System.getenv("QOVERY_DATABASE_MY_PQL_DB_PASSWORD")
                                                                                                                          driverClassName = "org.postgresql.Driver"
                                                                                                                          }
                                                                                                                          Database.connect(HikariDataSource(config))
                                                                                                                          -
                                                                                                                          transaction {
                                                                                                                          // create tables if they do not exist
                                                                                                                          SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Deploy

                                                                                                                          To deploy your application and database, click Action and Deploy button in your environments list view:

                                                                                                                          Kotlin URL Shortener

                                                                                                                          To get public URL to the application, open application details and click on Action Open.

                                                                                                                          Kotlin URL Shortener

                                                                                                                          Kotlin URL Shortener

                                                                                                                          Conclusion

                                                                                                                          We have seen that creating an URL shortener API with Ktor and Kotlin is extremely simple. Connecting the application to PostgreSQL is very easy with the Exposed library. In just a few lines of code, the service is fully functional and can be deployed in production very quickly with the help of Qovery. In the next part, we will see how to create a web interface connecting to this API to convert our URLs without using the curl command.

                                                                                                                          Part 2: bind a web interface to the API - [link coming soon]

                                                                                                                          Tutorial
                                                                                                                          +
                                                                                                                          transaction {
                                                                                                                          // create tables if they do not exist
                                                                                                                          SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Deploy

                                                                                                                          To deploy your application and database, click Action and Deploy button in your environments list view:

                                                                                                                          Kotlin URL Shortener

                                                                                                                          To get public URL to the application, open application details and click on Action Open.

                                                                                                                          Kotlin URL Shortener

                                                                                                                          Kotlin URL Shortener

                                                                                                                          Conclusion

                                                                                                                          We have seen that creating an URL shortener API with Ktor and Kotlin is extremely simple. Connecting the application to PostgreSQL is very easy with the Exposed library. In just a few lines of code, the service is fully functional and can be deployed in production very quickly with the help of Qovery. In the next part, we will see how to create a web interface connecting to this API to convert our URLs without using the curl command.

                                                                                                                          Part 2: bind a web interface to the API - [link coming soon]

                                                                                                                          Tutorial
                                                                                                                          - + - + diff --git a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html index 09545f524d..a3014c3e64 100644 --- a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html +++ b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -50,14 +50,14 @@ Our route configuration file looks like this:

                                                                                                                          routes.conf.template
                                                                                                                          location ~* ^/api/billing/?(.*)$ {
                                                                                                                          proxy_pass http://$BILLING_BACKEND$request_uri;
                                                                                                                          }
                                                                                                                          location ~* ^/api/messaging/?(.*)$ {
                                                                                                                          proxy_pass http://$MESSAGING_BACKEND$request_uri;
                                                                                                                          }
                                                                                                                          location ~* ^/api/(.*)$ {
                                                                                                                          proxy_pass http://$CORE_BACKEND$request_uri;
                                                                                                                          }
                                                                                                                          -
                                                                                                                          location ~* ^/?(.*)$ {
                                                                                                                          proxy_pass http://$CORE_BACKEND$request_uri;
                                                                                                                          }

                                                                                                                          Here are the explanation of those rules:

                                                                                                                          1. All the traffic matching the path /api/billing/* is redirect to the BILLING backend.
                                                                                                                          2. All the traffic matching the path /api/messaging/* is redirect to the MESSAGING backend.
                                                                                                                          3. All the traffic matching the path /api/* is redirect to the CORE backend.
                                                                                                                          4. All the traffic by default is redirected to the CORE backend.

                                                                                                                          Notes:

                                                                                                                          1. The rule definition order is from the first to the last to apply. If there is a conflicting rule, then the first matched applies.
                                                                                                                          2. The internal network is in HTTP, that is why the value of the proxy_pass directive starts with http://.
                                                                                                                          3. The connections on api.foo.bar are in HTTPS.
                                                                                                                          4. You can make complex rules like the one below:
                                                                                                                          more complex rule
                                                                                                                          location ~* ^/api/v1/user/(.*)/app/(.*)/index/(.*)/search/?(.*)$ {
                                                                                                                          proxy_pass http://$CORE_BACKEND/api/v1/user/$1/app/$2/index/$3/search/$4$is_args$args;
                                                                                                                          }

                                                                                                                          Create API Gateway app

                                                                                                                          Commit and push your changes. Then go to the Qovery web console, and add your API gateway inside the same environment of your applications.

                                                                                                                          • Build mode: Dockerfile
                                                                                                                          • Port: 80

                                                                                                                          Add environment variables

                                                                                                                          For our gateway, we need to create 3 environment variable aliases corresponding to the internal network names of our applications.

                                                                                                                          • XXX_HOST_INTERNAL -> ALIAS -> BILLING_BACKEND with scope ENVIRONMENT
                                                                                                                          • YYY_HOST_INTERNAL -> ALIAS -> MESSAGING_BACKEND with scope ENVIRONMENT
                                                                                                                          • ZZZ_HOST_INTERNAL -> ALIAS -> CORE_BACKEND with scope ENVIRONMENT

                                                                                                                          How to find the correct environment variable

                                                                                                                          When you have multiple applications within the same environment, it is difficult to find the appropriate environment variable. A workaround is to:

                                                                                                                          1. Go to one of your application
                                                                                                                          2. Find the ID of your application in your URL https://console.qovery.com/platform/organization/xxx/projects/yyy/environments/zzz/applications/082e36c4-7fbb-42b2-9046-37ccce21616a/variables
                                                                                                                          3. Truncate your application ID and take the first segment. For 082e36c4-7fbb-42b2-9046-37ccce21616a it is 082e36c4
                                                                                                                          4. Add the letter z in front of id Z082e36c4.
                                                                                                                          5. All the environment variables containing Z082e36c4 are attached to the corresponding app.

                                                                                                                          Set up custom domain

                                                                                                                          Add a custom domain to expose your API gateway with the domain of your choice. Check out this documentation to set up your domain.

                                                                                                                          Deploy API Gateway

                                                                                                                          Once everything is set up, you can deploy your application.

                                                                                                                          +
                                                                                                                          location ~* ^/?(.*)$ {
                                                                                                                          proxy_pass http://$CORE_BACKEND$request_uri;
                                                                                                                          }

                                                                                                                          Here are the explanation of those rules:

                                                                                                                          1. All the traffic matching the path /api/billing/* is redirect to the BILLING backend.
                                                                                                                          2. All the traffic matching the path /api/messaging/* is redirect to the MESSAGING backend.
                                                                                                                          3. All the traffic matching the path /api/* is redirect to the CORE backend.
                                                                                                                          4. All the traffic by default is redirected to the CORE backend.

                                                                                                                          Notes:

                                                                                                                          1. The rule definition order is from the first to the last to apply. If there is a conflicting rule, then the first matched applies.
                                                                                                                          2. The internal network is in HTTP, that is why the value of the proxy_pass directive starts with http://.
                                                                                                                          3. The connections on api.foo.bar are in HTTPS.
                                                                                                                          4. You can make complex rules like the one below:
                                                                                                                          more complex rule
                                                                                                                          location ~* ^/api/v1/user/(.*)/app/(.*)/index/(.*)/search/?(.*)$ {
                                                                                                                          proxy_pass http://$CORE_BACKEND/api/v1/user/$1/app/$2/index/$3/search/$4$is_args$args;
                                                                                                                          }

                                                                                                                          Create API Gateway app

                                                                                                                          Commit and push your changes. Then go to the Qovery web console, and add your API gateway inside the same environment of your applications.

                                                                                                                          • Build mode: Dockerfile
                                                                                                                          • Port: 80

                                                                                                                          Add environment variables

                                                                                                                          For our gateway, we need to create 3 environment variable aliases corresponding to the internal network names of our applications.

                                                                                                                          • XXX_HOST_INTERNAL -> ALIAS -> BILLING_BACKEND with scope ENVIRONMENT
                                                                                                                          • YYY_HOST_INTERNAL -> ALIAS -> MESSAGING_BACKEND with scope ENVIRONMENT
                                                                                                                          • ZZZ_HOST_INTERNAL -> ALIAS -> CORE_BACKEND with scope ENVIRONMENT

                                                                                                                          How to find the correct environment variable

                                                                                                                          When you have multiple applications within the same environment, it is difficult to find the appropriate environment variable. A workaround is to:

                                                                                                                          1. Go to one of your application
                                                                                                                          2. Find the ID of your application in your URL https://console.qovery.com/platform/organization/xxx/projects/yyy/environments/zzz/applications/082e36c4-7fbb-42b2-9046-37ccce21616a/variables
                                                                                                                          3. Truncate your application ID and take the first segment. For 082e36c4-7fbb-42b2-9046-37ccce21616a it is 082e36c4
                                                                                                                          4. Add the letter z in front of id Z082e36c4.
                                                                                                                          5. All the environment variables containing Z082e36c4 are attached to the corresponding app.

                                                                                                                          Set up custom domain

                                                                                                                          Add a custom domain to expose your API gateway with the domain of your choice. Check out this documentation to set up your domain.

                                                                                                                          Deploy API Gateway

                                                                                                                          Once everything is set up, you can deploy your application.

                                                                                                                          - + - + diff --git a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html index c74afbe695..f0268ef49d 100644 --- a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html +++ b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -45,14 +45,14 @@

                                                                                                                          Use AWS IAM roles with Qovery

                                                                                                                          Give AWS IAM permissions to your application/container/job with Qovery

                                                                                                                          AWS IAM (Identity & Access Management) service allows AWS services to interact with each other by using roles. Those roles can easily be used to give permissions to your Qovery application, container or job.

                                                                                                                          It is a secure way to give your application permissions without having to manage credentials. More than that, it rotates the token automatically.

                                                                                                                          This tutorial will show you how to add AWS IAM roles to your Qovery application, container or job.

                                                                                                                          Application requiring S3 permissions

                                                                                                                          In this first step, we will create a simple application that needs AWS permissions to access s3 buckets.

                                                                                                                          Create an application

                                                                                                                          We are going to will create a simple container, but you can use an existing one if you want (or an application or job).

                                                                                                                          Here is a simple Debian container example:

                                                                                                                          debian app

                                                                                                                          Set only 1 instance and 128MB of memory is enough for this example. Then continue until you have the Create button, there is nothing more to setup.

                                                                                                                          Get Kubernetes namespace name

                                                                                                                          Then in this container (or any application in this environment) Variables, search for the variable called QOVERY_KUBERNETES_NAMESPACE_NAME and copy its value somewhere.

                                                                                                                          debian app

                                                                                                                          It is the Kubernetes namespace name where the container is located.

                                                                                                                          Configure OIDC provider

                                                                                                                          Get your Cluster OIDC provider URL

                                                                                                                          On your AWS console, go to your EKS cluster and Overview section. Copy the OpenID Connect provider URL:

                                                                                                                          EKS OIDC

                                                                                                                          Create an Identity provider

                                                                                                                          On your AWS console, go to IAM service, then Identity providers section, and Add provider button:

                                                                                                                          1. Select the OpenID Connect provider type
                                                                                                                          2. Paste the OpenID Connect provider URL previously copied to Provider URL
                                                                                                                          3. Click on Get thumbprint button, once done the button will change to Edit URL
                                                                                                                          4. Add sts.amazonaws.com as Audience
                                                                                                                          5. Click on Add provider button

                                                                                                                          OIDC Connect

                                                                                                                          Configure AWS IAM roles

                                                                                                                          Create a role

                                                                                                                          Now we can create a role. In the IAM service, go to Roles section, and click on Create role button.

                                                                                                                          You have to select the Trusted entity type. For this tutorial, we are going to use the Web identity type.

                                                                                                                          Set the Identity provider to the one you just created, and the Audience to sts.amazonaws.com. Then click on the Next button.

                                                                                                                          Role create step 1

                                                                                                                          Role permissions

                                                                                                                          Select the policy of your choice. For this example, the policy AmazonS3ReadOnlyAccess will be used to list S3 buckets. Then click on the Next button.

                                                                                                                          To finish, set the role name and description of your choice and click on Create role button.

                                                                                                                          Configure trusted entities

                                                                                                                          Qovery environment scoped role

                                                                                                                          Once created, select your freshly created role, go to the Trust relationships tab, and click on Edit trust policy button.

                                                                                                                          role trusted default

                                                                                                                          Update the policy line regarding the OIDC condition from:

                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:aud": "sts.amazonaws.com"

                                                                                                                          to:

                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"

                                                                                                                          Replace:

                                                                                                                          • kubernetes_namespace: with the namespace name, corresponding to the Qovery environment (previously copied in step 1)
                                                                                                                          • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)

                                                                                                                          Once done, click on the Update policy button.

                                                                                                                          Last element to copy and save somewhere: is the role ARN.

                                                                                                                          In the end, you should have something like:

                                                                                                                          {
                                                                                                                          "Version": "2012-10-17",
                                                                                                                          "Statement": [
                                                                                                                          {
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Principal": {
                                                                                                                          "Federated": "arn:aws:iam::yyyyyyy:oidc-provider/oidc.eks.us-east-2.amazonaws.com/id/xxxxxxx"
                                                                                                                          },
                                                                                                                          "Action": "sts:AssumeRoleWithWebIdentity",
                                                                                                                          "Condition": {
                                                                                                                          "StringEquals": {
                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }

                                                                                                                          Cluster scoped role

                                                                                                                          If you want to be able to keep the Role and permissions with the "On-demand environment" and "Clone" features, then you have to scope the role "cluster side" instead of the "Kubernetes namespace" side.

                                                                                                                          To do so, update the Condition with StringLike instead of StringEquals, and use a wildcard instead of the namespace name:

                                                                                                                          "Condition": {
                                                                                                                          "StringLike": {
                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:z*:service_account_name"
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Replace:

                                                                                                                          • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)
                                                                                                                          • z*: the wildcard to use to match all namespaces deployed with Qovery

                                                                                                                          Create a service account

                                                                                                                          This step will help you on deploying a service account on your Kubernetes cluster. In case you want to do it manually on the cluster with kubectl, you just have to push a service account like:

                                                                                                                          apiVersion: v1
                                                                                                                          kind: ServiceAccount
                                                                                                                          metadata:
                                                                                                                          name: $SERVICE_ACCOUNT_NAME
                                                                                                                          namespace: $QOVERY_KUBERNETES_NAMESPACE_NAME
                                                                                                                          annotations:
                                                                                                                          eks.amazonaws.com/role-arn: $AWS_ROLE_ARN

                                                                                                                          Kubernetes authentication

                                                                                                                          On AWS, there are several ways to authenticate to Kubernetes. To make it simple, we are going to use a dedicated IAM user, but you can select the best method for your need.

                                                                                                                          From your AWS Console, create an IAM user account, get Access key ID and Secret access key and save them somewhere.

                                                                                                                          Qovery helps IAM users to get quick access to the Kubernetes cluster. Simply add this user to the Admins group.

                                                                                                                          Create a Lifecycle job

                                                                                                                          In the same environment than your application, create a Lifecycle job which will be used to deploy a service account on the Kubernetes cluster:

                                                                                                                          Lifecycle creation

                                                                                                                          Here a container qoveryrd/create-sa:1.0 available on DockerHub made by Qovery is used, but you can fork this repository and update to your needs if you prefer.

                                                                                                                          Click on the Continue button and select the Start event because we want to deploy the service account at the environment start and Delete to delete it if we decide to remove it. Set parameters as well with the according action:

                                                                                                                          Lifecycle creation

                                                                                                                          Then click on the Continue button, set the resources (128Mb is enough) and click on the Continue button.

                                                                                                                          Then add the following environment variables to the job scope:

                                                                                                                          • KUBERNETES_VERSION: the version of your Kubernetes cluster which will be used to download kubectl (ex: 1.23.0)
                                                                                                                          • SERVICE_ACCOUNT_NAME: the name of the service account in Kubernetes (the same name you have declared for the role in the Trusted entities policy section)
                                                                                                                          • AWS_ROLE_ARN: the AWS ARN role you have just created
                                                                                                                          • AWS_ACCESS_KEY_ID: the AWS access key ID of the IAM user you have created (if you decided to use this authentication method)
                                                                                                                          • AWS_SECRET_ACCESS_KEY: the AWS secret access key of the IAM user you have created (if you decided to use this authentication method)

                                                                                                                          Lifecycle creation

                                                                                                                          Then Create the Lifecycle job. Go into the Variables tab and create a Variable Alias on QOVERY_CLOUD_PROVIDER_REGION, name it AWS_DEFAULT_REGION and scope it to the job.

                                                                                                                          Lifecycle creation

                                                                                                                          You can now run your job by clicking on the Deploy now button. You should see the following output in your job logs:

                                                                                                                          -> Ensuring required environment variables are present
                                                                                                                          -> Downloading kubectl version 1.23.0
                                                                                                                          -> Generated service account:
                                                                                                                          apiVersion: v1
                                                                                                                          kind: ServiceAccount
                                                                                                                          metadata:
                                                                                                                          name: my-s3-role
                                                                                                                          namespace: xxxxxx
                                                                                                                          annotations:
                                                                                                                          eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxx:role/my-s3-role
                                                                                                                          -> Getting kubeconfig
                                                                                                                          Added new context arn:aws:eks:region:id:cluster/cluster-name to /root/.kube/config
                                                                                                                          -> Deploying service account
                                                                                                                          serviceaccount/aws-permissions created

                                                                                                                          Set application service account

                                                                                                                          Set service account

                                                                                                                          The final step is to set this service account (pointing to the AWS role) to your application. Go into your application Advanced settings and set the Service account to the one you have just created:

                                                                                                                          Lifecycle creation

                                                                                                                          Deploy your application with the Deploy now button.

                                                                                                                          At this stage, the job should have been executed and the service account should be deployed on your Kubernetes cluster, and the Debian container, running.

                                                                                                                          Validate access

                                                                                                                          To validate the AWS role has correctly been deployed, we can connect to the pod, and see if we have the AWS token. We will use the Qovery CLI to connect to our pod:

                                                                                                                          $ qovery shell
                                                                                                                          Qovery: Select organization
                                                                                                                          Organization:
                                                                                                                          ✔ Qovery
                                                                                                                          Qovery: Select project
                                                                                                                          Project:
                                                                                                                          ✔ AWS roles tutorial
                                                                                                                          Qovery: Select environment
                                                                                                                          Environment:
                                                                                                                          ✔ aws-role
                                                                                                                          Qovery: Select service
                                                                                                                          Services:
                                                                                                                          ✔ debian

                                                                                                                          Now we are connected to the pod, we can check the AWS token:

                                                                                                                          $ env | grep AWS
                                                                                                                          AWS_DEFAULT_REGION=us-east-2
                                                                                                                          AWS_REGION=us-east-2
                                                                                                                          AWS_ROLE_ARN=arn:aws:iam::xxxxxx:role/my-s3-role
                                                                                                                          AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
                                                                                                                          AWS_STS_REGIONAL_ENDPOINTS=regional

                                                                                                                          Token is here! Let's install the AWS CLI and validate the role access. We should be able to list S3 buckets:

                                                                                                                          $ apt-get update && apt-get -y install awscli
                                                                                                                          $ aws s3 ls
                                                                                                                          2022-09-23 06:56:38 aws-cloudtrail-logs-qovery
                                                                                                                          ...

                                                                                                                          It works! We have access to S3 buckets using the AWS role.

                                                                                                                          Conclusion

                                                                                                                          The first setup phase can be time-consuming. However, once done, applying roles to your applications is very easy and fast. You can now use roles to access any AWS service!

                                                                                                                          +
                                                                                                                          Stats
                                                                                                                          8 min read
                                                                                                                          Updated

                                                                                                                          AWS IAM (Identity & Access Management) service allows AWS services to interact with each other by using roles. Those roles can easily be used to give permissions to your Qovery application, container or job.

                                                                                                                          It is a secure way to give your application permissions without having to manage credentials. More than that, it rotates the token automatically.

                                                                                                                          This tutorial will show you how to add AWS IAM roles to your Qovery application, container or job.

                                                                                                                          Application requiring S3 permissions

                                                                                                                          In this first step, we will create a simple application that needs AWS permissions to access s3 buckets.

                                                                                                                          Create an application

                                                                                                                          We are going to will create a simple container, but you can use an existing one if you want (or an application or job).

                                                                                                                          Here is a simple Debian container example:

                                                                                                                          debian app

                                                                                                                          Set only 1 instance and 128MB of memory is enough for this example. Then continue until you have the Create button, there is nothing more to setup.

                                                                                                                          Get Kubernetes namespace name

                                                                                                                          Then in this container (or any application in this environment) Variables, search for the variable called QOVERY_KUBERNETES_NAMESPACE_NAME and copy its value somewhere.

                                                                                                                          debian app

                                                                                                                          It is the Kubernetes namespace name where the container is located.

                                                                                                                          Configure OIDC provider

                                                                                                                          Get your Cluster OIDC provider URL

                                                                                                                          On your AWS console, go to your EKS cluster and Overview section. Copy the OpenID Connect provider URL:

                                                                                                                          EKS OIDC

                                                                                                                          Create an Identity provider

                                                                                                                          On your AWS console, go to IAM service, then Identity providers section, and Add provider button:

                                                                                                                          1. Select the OpenID Connect provider type
                                                                                                                          2. Paste the OpenID Connect provider URL previously copied to Provider URL
                                                                                                                          3. Click on Get thumbprint button, once done the button will change to Edit URL
                                                                                                                          4. Add sts.amazonaws.com as Audience
                                                                                                                          5. Click on Add provider button

                                                                                                                          OIDC Connect

                                                                                                                          Configure AWS IAM roles

                                                                                                                          Create a role

                                                                                                                          Now we can create a role. In the IAM service, go to Roles section, and click on Create role button.

                                                                                                                          You have to select the Trusted entity type. For this tutorial, we are going to use the Web identity type.

                                                                                                                          Set the Identity provider to the one you just created, and the Audience to sts.amazonaws.com. Then click on the Next button.

                                                                                                                          Role create step 1

                                                                                                                          Role permissions

                                                                                                                          Select the policy of your choice. For this example, the policy AmazonS3ReadOnlyAccess will be used to list S3 buckets. Then click on the Next button.

                                                                                                                          To finish, set the role name and description of your choice and click on Create role button.

                                                                                                                          Configure trusted entities

                                                                                                                          Qovery environment scoped role

                                                                                                                          Once created, select your freshly created role, go to the Trust relationships tab, and click on Edit trust policy button.

                                                                                                                          role trusted default

                                                                                                                          Update the policy line regarding the OIDC condition from:

                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:aud": "sts.amazonaws.com"

                                                                                                                          to:

                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"

                                                                                                                          Replace:

                                                                                                                          • kubernetes_namespace: with the namespace name, corresponding to the Qovery environment (previously copied in step 1)
                                                                                                                          • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)

                                                                                                                          Once done, click on the Update policy button.

                                                                                                                          Last element to copy and save somewhere: is the role ARN.

                                                                                                                          In the end, you should have something like:

                                                                                                                          {
                                                                                                                          "Version": "2012-10-17",
                                                                                                                          "Statement": [
                                                                                                                          {
                                                                                                                          "Effect": "Allow",
                                                                                                                          "Principal": {
                                                                                                                          "Federated": "arn:aws:iam::yyyyyyy:oidc-provider/oidc.eks.us-east-2.amazonaws.com/id/xxxxxxx"
                                                                                                                          },
                                                                                                                          "Action": "sts:AssumeRoleWithWebIdentity",
                                                                                                                          "Condition": {
                                                                                                                          "StringEquals": {
                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"
                                                                                                                          }
                                                                                                                          }
                                                                                                                          }
                                                                                                                          ]
                                                                                                                          }

                                                                                                                          Cluster scoped role

                                                                                                                          If you want to be able to keep the Role and permissions with the "On-demand environment" and "Clone" features, then you have to scope the role "cluster side" instead of the "Kubernetes namespace" side.

                                                                                                                          To do so, update the Condition with StringLike instead of StringEquals, and use a wildcard instead of the namespace name:

                                                                                                                          "Condition": {
                                                                                                                          "StringLike": {
                                                                                                                          "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:z*:service_account_name"
                                                                                                                          }
                                                                                                                          }

                                                                                                                          Replace:

                                                                                                                          • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)
                                                                                                                          • z*: the wildcard to use to match all namespaces deployed with Qovery

                                                                                                                          Create a service account

                                                                                                                          This step will help you on deploying a service account on your Kubernetes cluster. In case you want to do it manually on the cluster with kubectl, you just have to push a service account like:

                                                                                                                          apiVersion: v1
                                                                                                                          kind: ServiceAccount
                                                                                                                          metadata:
                                                                                                                          name: $SERVICE_ACCOUNT_NAME
                                                                                                                          namespace: $QOVERY_KUBERNETES_NAMESPACE_NAME
                                                                                                                          annotations:
                                                                                                                          eks.amazonaws.com/role-arn: $AWS_ROLE_ARN

                                                                                                                          Kubernetes authentication

                                                                                                                          On AWS, there are several ways to authenticate to Kubernetes. To make it simple, we are going to use a dedicated IAM user, but you can select the best method for your need.

                                                                                                                          From your AWS Console, create an IAM user account, get Access key ID and Secret access key and save them somewhere.

                                                                                                                          Qovery helps IAM users to get quick access to the Kubernetes cluster. Simply add this user to the Admins group.

                                                                                                                          Create a Lifecycle job

                                                                                                                          In the same environment than your application, create a Lifecycle job which will be used to deploy a service account on the Kubernetes cluster:

                                                                                                                          Lifecycle creation

                                                                                                                          Here a container qoveryrd/create-sa:1.0 available on DockerHub made by Qovery is used, but you can fork this repository and update to your needs if you prefer.

                                                                                                                          Click on the Continue button and select the Start event because we want to deploy the service account at the environment start and Delete to delete it if we decide to remove it. Set parameters as well with the according action:

                                                                                                                          Lifecycle creation

                                                                                                                          Then click on the Continue button, set the resources (128Mb is enough) and click on the Continue button.

                                                                                                                          Then add the following environment variables to the job scope:

                                                                                                                          • KUBERNETES_VERSION: the version of your Kubernetes cluster which will be used to download kubectl (ex: 1.23.0)
                                                                                                                          • SERVICE_ACCOUNT_NAME: the name of the service account in Kubernetes (the same name you have declared for the role in the Trusted entities policy section)
                                                                                                                          • AWS_ROLE_ARN: the AWS ARN role you have just created
                                                                                                                          • AWS_ACCESS_KEY_ID: the AWS access key ID of the IAM user you have created (if you decided to use this authentication method)
                                                                                                                          • AWS_SECRET_ACCESS_KEY: the AWS secret access key of the IAM user you have created (if you decided to use this authentication method)

                                                                                                                          Lifecycle creation

                                                                                                                          Then Create the Lifecycle job. Go into the Variables tab and create a Variable Alias on QOVERY_CLOUD_PROVIDER_REGION, name it AWS_DEFAULT_REGION and scope it to the job.

                                                                                                                          Lifecycle creation

                                                                                                                          You can now run your job by clicking on the Deploy now button. You should see the following output in your job logs:

                                                                                                                          -> Ensuring required environment variables are present
                                                                                                                          -> Downloading kubectl version 1.23.0
                                                                                                                          -> Generated service account:
                                                                                                                          apiVersion: v1
                                                                                                                          kind: ServiceAccount
                                                                                                                          metadata:
                                                                                                                          name: my-s3-role
                                                                                                                          namespace: xxxxxx
                                                                                                                          annotations:
                                                                                                                          eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxx:role/my-s3-role
                                                                                                                          -> Getting kubeconfig
                                                                                                                          Added new context arn:aws:eks:region:id:cluster/cluster-name to /root/.kube/config
                                                                                                                          -> Deploying service account
                                                                                                                          serviceaccount/aws-permissions created

                                                                                                                          Set application service account

                                                                                                                          Set service account

                                                                                                                          The final step is to set this service account (pointing to the AWS role) to your application. Go into your application Advanced settings and set the Service account to the one you have just created:

                                                                                                                          Lifecycle creation

                                                                                                                          Deploy your application with the Deploy now button.

                                                                                                                          At this stage, the job should have been executed and the service account should be deployed on your Kubernetes cluster, and the Debian container, running.

                                                                                                                          Validate access

                                                                                                                          To validate the AWS role has correctly been deployed, we can connect to the pod, and see if we have the AWS token. We will use the Qovery CLI to connect to our pod:

                                                                                                                          $ qovery shell
                                                                                                                          Qovery: Select organization
                                                                                                                          Organization:
                                                                                                                          ✔ Qovery
                                                                                                                          Qovery: Select project
                                                                                                                          Project:
                                                                                                                          ✔ AWS roles tutorial
                                                                                                                          Qovery: Select environment
                                                                                                                          Environment:
                                                                                                                          ✔ aws-role
                                                                                                                          Qovery: Select service
                                                                                                                          Services:
                                                                                                                          ✔ debian

                                                                                                                          Now we are connected to the pod, we can check the AWS token:

                                                                                                                          $ env | grep AWS
                                                                                                                          AWS_DEFAULT_REGION=us-east-2
                                                                                                                          AWS_REGION=us-east-2
                                                                                                                          AWS_ROLE_ARN=arn:aws:iam::xxxxxx:role/my-s3-role
                                                                                                                          AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
                                                                                                                          AWS_STS_REGIONAL_ENDPOINTS=regional

                                                                                                                          Token is here! Let's install the AWS CLI and validate the role access. We should be able to list S3 buckets:

                                                                                                                          $ apt-get update && apt-get -y install awscli
                                                                                                                          $ aws s3 ls
                                                                                                                          2022-09-23 06:56:38 aws-cloudtrail-logs-qovery
                                                                                                                          ...

                                                                                                                          It works! We have access to S3 buckets using the AWS role.

                                                                                                                          Conclusion

                                                                                                                          The first setup phase can be time-consuming. However, once done, applying roles to your applications is very easy and fast. You can now use roles to access any AWS service!

                                                                                                                          - + - + diff --git a/guides/tutorial/working-with-git-submodules/index.html b/guides/tutorial/working-with-git-submodules/index.html index c8a7b954ec..3277a0dd45 100644 --- a/guides/tutorial/working-with-git-submodules/index.html +++ b/guides/tutorial/working-with-git-submodules/index.html @@ -26,9 +26,9 @@ - + - + @@ -48,14 +48,14 @@ This short guide will explain how to use Git Submodules on Qovery.

                                                                                                                          Example

                                                                                                                          To include the Foo source code into the Bar project, use the following commands:

                                                                                                                          $ cd ~/code/Bar
                                                                                                                          $ git submodule add https://github.com/myusername/Foo somefolder/Foo
                                                                                                                          Cloning into 'somefolder/Foo'...
                                                                                                                          remote: Counting objects: 26, done.
                                                                                                                          remote: Compressing objects: 100% (17/17), done.
                                                                                                                          remote: Total 26 (delta 8), reused 19 (delta 5)
                                                                                                                          Unpacking objects: 100% (26/26), done.

                                                                                                                          This would create a new submodule called Foo and place Foo code into somefolder/Foo directory of Bar app.

                                                                                                                          After a Git Submodule is added locally, you need to commit it to your app repository:

                                                                                                                          $ git commit -am "adding a submodule"
                                                                                                                          [master 314ef62] adding a submodule
                                                                                                                          2 files changed, 4 insertions(+)

                                                                                                                          Committed submodule source code can be used by your application and is available in Qovery CI/CD build/deployment pipeline.

                                                                                                                          Private Submodules

                                                                                                                          Qovery does not have access to locally available credentials, so if you want to use some way of authentication, there are two ways to achieve it.

                                                                                                                          Use HTTP basic authentication URL scheme:

                                                                                                                          $ git submodule add https://username:password@github.com/myusername/FooBar

                                                                                                                          This adds a private Git Submodule to the application while still allowing it to resolve in non-local environments.

                                                                                                                          SSH / Git protocol Submodules

                                                                                                                          For Qovery to be able to access those private submodules when cloning your application repository, you need to add a secret named GIT_SSH_KEY_xxx, -(where xxx can be replaced by anything), containing a private SSH key with access to your Git repository.

                                                                                                                          SSH:

                                                                                                                          [submodule "path/to/module"]
                                                                                                                          url = ssh://user/repo

                                                                                                                          Git:

                                                                                                                          [submodule "path/to/module"]
                                                                                                                          url = git://github.com/torvalds/linux.git
                                                                                                                          +(where xxx can be replaced by anything), containing a private SSH key with access to your Git repository.

                                                                                                                          SSH:

                                                                                                                          [submodule "path/to/module"]
                                                                                                                          url = ssh://user/repo

                                                                                                                          Git:

                                                                                                                          [submodule "path/to/module"]
                                                                                                                          url = git://github.com/torvalds/linux.git
                                                                                                                          - + - + diff --git a/index.html b/index.html index 78ba51e366..801e5d0194 100644 --- a/index.html +++ b/index.html @@ -26,9 +26,9 @@ - + - + @@ -42,14 +42,14 @@
                                                                                                                          - +
                                                                                                                          - + - + diff --git a/mailing_list/index.html b/mailing_list/index.html index 05acdb9a3b..06c1f00249 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,9 +22,9 @@ - + - + @@ -37,9 +37,9 @@ - + - + diff --git a/main.f3dbfa62.js b/main.b4c4c120.js similarity index 99% rename from main.f3dbfa62.js rename to main.b4c4c120.js index ef1460a5b3..4c188310e5 100644 --- a/main.f3dbfa62.js +++ b/main.b4c4c120.js @@ -1,2 +1,2 @@ -/*! For license information please see main.f3dbfa62.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[282],[function(e,t,n){"use strict";e.exports=n(98)},function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t=0;p--){var f=a[p];"."===f?i(a,p):".."===f?(i(a,p),d++):d&&(i(a,p),d--)}if(!u)for(;d--;d)a.unshift("..");!u||""===a[0]||a[0]&&r(a[0])||a.unshift("");var g=a.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};function s(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,o){return e(t,n[o])}));if("object"==typeof t||"object"==typeof n){var o=s(t),r=s(n);return o!==t||r!==n?e(o,r):Object.keys(Object.assign({},t,n)).every((function(o){return e(t[o],n[o])}))}return!1},u=n(4);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function g(e){var t=e.pathname,n=e.search,o=e.hash,r=t||"/";return n&&"?"!==n&&(r+="?"===n.charAt(0)?n:"?"+n),o&&"#"!==o&&(r+="#"===o.charAt(0)?o:"#"+o),r}function m(e,t,n,r){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",o="",r=t.indexOf("#");-1!==r&&(o=t.substr(r),t=t.substr(0,r));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===o?"":o}}(e)).state=t:(void 0===(i=Object(o.a)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(i.key=n),r?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,r.pathname)):i.pathname=r.pathname:i.pathname||(i.pathname="/"),i}function h(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,o,r){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof o?o(i,r):r(!0):r(!1!==i)}else r(!0)},appendListener:function(e){var n=!0;function o(){n&&e.apply(void 0,arguments)}return t.push(o),function(){n=!1,t=t.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),o=0;ot?n.splice(t,n.length-t,o):n.push(o),d({action:"PUSH",location:o,index:t,entries:n})}}))},replace:function(e,t){var o=m(e,t,p(),w.location);c.confirmTransitionTo(o,"REPLACE",n,(function(e){e&&(w.entries[w.index]=o,d({action:"REPLACE",location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(r[n]=e[n]);return r}n.d(t,"a",(function(){return o}))},function(e,t,n){e.exports=!n(14)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(28),r=n(57);e.exports=n(10)?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(5),r=n(17),i=n(11),a=n(16),s=n(30),l=function(e,t,n){var u,c,d,p,f=e&l.F,g=e&l.G,m=e&l.S,h=e&l.P,b=e&l.B,v=g?o:m?o[t]||(o[t]={}):(o[t]||{}).prototype,y=g?r:r[t]||(r[t]={}),w=y.prototype||(y.prototype={});for(u in g&&(n=t),n)d=((c=!f&&v&&void 0!==v[u])?v:n)[u],p=b&&c?s(d,o):h&&"function"==typeof d?s(Function.call,d):d,v&&a(v,u,d,e&l.U),y[u]!=d&&i(y,u,p),h&&w[u]!=d&&(w[u]=d)};o.core=r,l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){e.exports=n(110)()},function(e,t,n){var o=n(5),r=n(11),i=n(31),a=n(40)("src"),s=n(104),l=(""+s).split("toString");n(17).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,s){var u="function"==typeof n;u&&(i(n,"name")||r(n,"name",t)),e[t]!==n&&(u&&(i(n,a)||r(n,a,e[t]?""+e[t]:l.join(String(t)))),e===o?e[t]=n:s?e[t]?e[t]=n:r(e,t,n):(delete e[t],r(e,t,n)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[a]||s.call(this)}))},function(e,t){var n=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},function(e,t,n){"use strict";t.a={plugins:["plugin-image-zoom","posthog-docusaurus",["@docusaurus/plugin-content-docs",{sidebarPath:"/home/runner/work/documentation/documentation/website/sidebars.js"}],["@docusaurus/plugin-content-blog",{feedOptions:{type:"all",copyright:"Copyright \xa9 2023 Qovery, Inc.",baseUrl:""}}],"/home/runner/work/documentation/documentation/website/plugins/guides",["@docusaurus/plugin-content-pages",{}],["/home/runner/work/documentation/documentation/website/plugins/sitemap",{}]],themes:[["@docusaurus/theme-classic",{customCss:"/home/runner/work/documentation/documentation/website/src/css/custom.css"}],"@docusaurus/theme-search-algolia"],customFields:{metadata:{databases:[{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"mysql"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"postgresql"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"mongodb"}],event_types:[],frameworks:[{dark_logo_path:"/img/logos/hasura_white.svg",logo_path:"/img/logos/hasura.svg",name:"hasura"},{dark_logo_path:"/img/logos/laravel.svg",logo_path:"/img/logos/laravel.svg",name:"laravel"},{dark_logo_path:"/img/logos/springboot.svg",logo_path:"/img/logos/springboot.svg",name:"springboot"},{dark_logo_path:"/img/logos/nodejs.svg",logo_path:"/img/logos/nodejs.svg",name:"nodejs"},{dark_logo_path:"/img/logos/flask_white.svg",logo_path:"/img/logos/flask.svg",name:"flask"},{dark_logo_path:"/img/logos/jhipster.svg",logo_path:"/img/logos/jhipster.svg",name:"jhipster"},{dark_logo_path:"/img/logos/gin.svg",logo_path:"/img/logos/gin.svg",name:"gin"},{dark_logo_path:"/img/logos/rails.svg",logo_path:"/img/logos/rails.svg",name:"rails"},{dark_logo_path:"/img/logos/django.svg",logo_path:"/img/logos/django.svg",name:"django"},{dark_logo_path:"/img/logos/deno.svg",logo_path:"/img/logos/deno.svg",name:"deno"},{dark_logo_path:"/img/logos/strapi.svg",logo_path:"/img/logos/strapi.svg",name:"strapi"},{dark_logo_path:"/img/logos/nuxtjs.svg",logo_path:"/img/logos/nuxtjs.svg",name:"nuxtjs"},{dark_logo_path:"/img/logos/discordpy.svg",logo_path:"/img/logos/discordpy.svg",name:"discordpy"},{dark_logo_path:"/img/logos/sinatra.svg",logo_path:"/img/logos/sinatra.svg",name:"sinatra"},{dark_logo_path:"/img/logos/meilisearch.svg",logo_path:"/img/logos/meilisearch.svg",name:"meilisearch"}],guides:{"getting-started":{children:{},description:"Take Qovery from zero to production in less than 10 minutes.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/create-a-database",last_modified_on:null,path:"website/guides/getting-started/create-a-database.md",series_position:null,title:"Create a database"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/setting-custom-domain",last_modified_on:null,path:"website/guides/getting-started/setting-custom-domain.md",series_position:null,title:"Custom domain"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/debugging",last_modified_on:null,path:"website/guides/getting-started/debugging.md",series_position:null,title:"Debugging"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/managing-environment-variables",last_modified_on:null,path:"website/guides/getting-started/managing-environment-variables.md",series_position:null,title:"Environment variables"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/deploy-your-first-application",last_modified_on:null,path:"website/guides/getting-started/deploy-your-first-application.md",series_position:null,title:"Hello World. Deploy your first application."}],name:"getting-started",series:!0,title:"Getting Started"},"installation-guide":{children:{},description:"Install Qovery on your technical stack.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/installation-guide/guide-amazon-web-services",last_modified_on:null,path:"website/guides/installation-guide/guide-amazon-web-services.md",series_position:null,title:"Install Qovery on your Amazon Web Services account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/installation-guide/guide-kubernetes",last_modified_on:null,path:"website/guides/installation-guide/guide-kubernetes.md",series_position:null,title:"Install Qovery on your Kubernetes cluster"},{author_github:"https://github.com/evoxmusic",description:null,id:"/installation-guide/guide-microsoft-azure",last_modified_on:null,path:"website/guides/installation-guide/guide-microsoft-azure.md",series_position:null,title:"Install Qovery on your Microsoft Azure account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/installation-guide/guide-scaleway",last_modified_on:null,path:"website/guides/installation-guide/guide-scaleway.md",series_position:null,title:"Install Qovery on your Scaleway account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/installation-guide/guide-google-cloud-platform",last_modified_on:null,path:"website/guides/installation-guide/guide-google-cloud-platform.md",series_position:null,title:"Install Qovery your Google Cloud Platform account"}],name:"installation-guide",series:!1,title:"Installation Guide"},advanced:{children:{},description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/continuous-integration",last_modified_on:null,path:"website/guides/advanced/continuous-integration.md",series_position:null,title:"Continuous Integration"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/costs-control",last_modified_on:null,path:"website/guides/advanced/costs-control.md",series_position:null,title:"Costs Control"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-api-gateway",last_modified_on:null,path:"website/guides/advanced/deploy-api-gateway.md",series_position:null,title:"Deploy API Gateway"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-aws-services",last_modified_on:null,path:"website/guides/advanced/deploy-aws-services.md",series_position:null,title:"Deploy AWS Services"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-external-services",last_modified_on:null,path:"website/guides/advanced/deploy-external-services.md",series_position:null,title:"Deploy External Services"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-frontend",last_modified_on:null,path:"website/guides/advanced/deploy-frontend.md",series_position:null,title:"Deploy Frontend App"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/helm-chart",last_modified_on:null,path:"website/guides/advanced/helm-chart.md",series_position:null,title:"Helm Charts"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/advanced/microservices",last_modified_on:null,path:"website/guides/advanced/microservices.md",series_position:null,title:"Microservices"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/migration",last_modified_on:null,path:"website/guides/advanced/migration.md",series_position:null,title:"Migration"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/monitoring",last_modified_on:null,path:"website/guides/advanced/monitoring.md",series_position:null,title:"Monitoring"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/advanced/monorepository",last_modified_on:null,path:"website/guides/advanced/monorepository.md",series_position:null,title:"Mono repository"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/use-preview-environments",last_modified_on:null,path:"website/guides/advanced/use-preview-environments.md",series_position:null,title:"Preview Environments"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/production",last_modified_on:null,path:"website/guides/advanced/production.md",series_position:null,title:"Production"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/seed-database",last_modified_on:null,path:"website/guides/advanced/seed-database.md",series_position:null,title:"Seed Database"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/terraform",last_modified_on:null,path:"website/guides/advanced/terraform.md",series_position:null,title:"Terraform"}],name:"advanced",series:!1,title:"Advanced"},tutorial:{children:{},description:"Additional step-by-step resources to leverage even more Qovery. ",guides:[{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws",last_modified_on:null,path:"website/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws.md",series_position:null,title:"Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/build-e2e-testing-ephemeral-environments",last_modified_on:null,path:"website/guides/tutorial/build-e2e-testing-ephemeral-environments.md",series_position:null,title:"Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-a-playground-environment-on-aws",last_modified_on:null,path:"website/guides/tutorial/create-a-playground-environment-on-aws.md",series_position:null,title:"Create a Playground Environment on AWS"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-a-blazingly-fast-api-in-rust-part-1",last_modified_on:null,path:"website/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1.md",series_position:null,title:"Create a blazingly fast REST API in Rust (Part 1/2)"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-your-staging-environment-from-your-production-environment-on-aws",last_modified_on:null,path:"website/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws.md",series_position:null,title:"Create your Staging environment from your Production environment on AWS"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/generate-qovery-api-client",last_modified_on:null,path:"website/guides/tutorial/generate-qovery-api-client.md",series_position:null,title:"Creating API clients using OpenAPI Tools"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/customizing-preview-url-with-qovery-cli",last_modified_on:null,path:"website/guides/tutorial/customizing-preview-url-with-qovery-cli.md",series_position:null,title:"Customizing Preview URL with Qovery CLI"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/deploy-rails-with-postgresql-and-sidekiq",last_modified_on:null,path:"website/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq.md",series_position:null,title:"Deploy Rails with PostgreSQL and Sidekiq"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/deploy-temporal-on-kubernetes",last_modified_on:null,path:"website/guides/tutorial/deploy-temporal-on-kubernetes.md",series_position:null,title:"Deploy Temporal on Kubernetes"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/getting-started-with-preview-environments-on-aws-for-beginners",last_modified_on:null,path:"website/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners.md",series_position:null,title:"Getting Started with Preview Environments on AWS"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/grafana-install",last_modified_on:null,path:"website/guides/tutorial/grafana-install.md",series_position:null,title:"Grafana setup with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources",last_modified_on:null,path:"website/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources.md",series_position:null,title:"How To Use Lifecycle Job To Deploy Any Kind Of Resources"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3"},{author_github:"https://github.com/benjaminch",description:null,id:"/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster",last_modified_on:null,path:"website/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster.md",series_position:null,title:"How to activate SSO to connect to your EKS cluster"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws",last_modified_on:null,path:"website/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws.md",series_position:null,title:"How to connect to a managed MongoDB instance on AWS"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl",last_modified_on:null,path:"website/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl.md",series_position:null,title:"How to connect to your EKS cluster with kubectl"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-create-an-rds-instance-through-aws-console",last_modified_on:null,path:"website/guides/tutorial/how-to-create-an-rds-instance-through-aws-console.md",series_position:null,title:"How to create an RDS instance through the AWS console"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/how-to-deploy-helm-charts",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-helm-charts.md",series_position:null,title:"How to deploy Helm charts"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease.md",series_position:null,title:"How to deploy a Rust REST API application on AWS with ease"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-integrate-qovery-with-github-actions",last_modified_on:null,path:"website/guides/tutorial/how-to-integrate-qovery-with-github-actions.md",series_position:null,title:"How to integrate Qovery with GitHub Actions"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-run-commands-at-application-startup",last_modified_on:null,path:"website/guides/tutorial/how-to-run-commands-at-application-startup.md",series_position:null,title:"How to run commands before the application starts"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/data-seeding-in-postgres",last_modified_on:null,path:"website/guides/tutorial/data-seeding-in-postgres.md",series_position:null,title:"How to seed a Postgres database on a dev environment"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery",last_modified_on:null,path:"website/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery.md",series_position:null,title:"How to use CloudFront with a React frontend application on Qovery"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/github-organization-repository-access",last_modified_on:null,path:"website/guides/tutorial/github-organization-repository-access.md",series_position:null,title:"How to use Github Organizations with Qovery"},{author_github:"https://github.com/MacLikorne",description:null,id:"/tutorial/how-to-write-a-dockerfile",last_modified_on:null,path:"website/guides/tutorial/how-to-write-a-dockerfile.md",series_position:null,title:"How to write a Dockerfile"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/import-your-environment-variables-with-the-qovery-cli",last_modified_on:null,path:"website/guides/tutorial/import-your-environment-variables-with-the-qovery-cli.md",series_position:null,title:"Import your environment variables with the Qovery CLI"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/cloudwatch-integration",last_modified_on:null,path:"website/guides/tutorial/cloudwatch-integration.md",series_position:null,title:"Integrate your application logs to Cloudwatch"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/kubernetes-observability-and-monitoring-with-datadog",last_modified_on:null,path:"website/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",series_position:null,title:"Kubernetes observability and monitoring with Datadog"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/managing-env-variables-in-create-react-app",last_modified_on:null,path:"website/guides/tutorial/managing-env-variables-in-create-react-app.md",series_position:null,title:"Managing Environment Variables in React (create-react-app)"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/migrate-your-application-from-heroku-to-aws",last_modified_on:null,path:"website/guides/tutorial/migrate-your-application-from-heroku-to-aws.md",series_position:null,title:"Migrate your application from Heroku to AWS"},{author_github:"https://github.com/jul-dan",description:null,id:"/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery",last_modified_on:null,path:"website/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery.md",series_position:null,title:"Setting up Cloudflare and Custom Domain on Qovery"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/aws-vpc-peering-with-qovery",last_modified_on:null,path:"website/guides/tutorial/aws-vpc-peering-with-qovery.md",series_position:null,title:"Setup VPC peering on AWS with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/url-shortener-api-with-kotlin",last_modified_on:null,path:"website/guides/tutorial/url-shortener-api-with-kotlin.md",series_position:null,title:"URL Shortener API with Kotlin (Part 1/2)"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/use-aws-iam-roles-with-qovery",last_modified_on:null,path:"website/guides/tutorial/use-aws-iam-roles-with-qovery.md",series_position:null,title:"Use AWS IAM roles with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/use-an-api-gateway-in-front-of-multiple-services",last_modified_on:null,path:"website/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services.md",series_position:null,title:"Use an API gateway in front of multiple services"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/aws-sqs-lambda-with-qovery",last_modified_on:null,path:"website/guides/tutorial/aws-sqs-lambda-with-qovery.md",series_position:null,title:"Using Amazon SQS and Lambda on Qovery"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/working-with-git-submodules",last_modified_on:null,path:"website/guides/tutorial/working-with-git-submodules.md",series_position:null,title:"Working with Git Submodules"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes.md",series_position:null,title:"Zero to Hero - How to deploy your apps on AWS in 30 minutes"}],name:"tutorial",series:!1,title:"Tutorial"},engineering:{children:{},description:"We share our engineering learning with all of you. ",guides:[],name:"engineering",series:!1,title:"Engineering"}},highlights:[],installation:{},installation_guides:[{dark_logo_path:"/img/logos/aws_white.svg",logo_path:"/img/logos/aws.svg",name:"aws"},{dark_logo_path:"/img/logos/digitalocean_white.svg",logo_path:"/img/logos/digitalocean.svg",name:"digital_ocean"},{dark_logo_path:"/img/logos/scaleway_white.svg",logo_path:"/img/logos/scaleway.svg",name:"scaleway"},{dark_logo_path:"/img/logos/gcp_white.svg",logo_path:"/img/logos/gcp.svg",name:"gcp"},{dark_logo_path:"/img/logos/azure_white.svg",logo_path:"/img/logos/azure.svg",name:"azure"},{dark_logo_path:"/img/logos/kubernetes_white.svg",logo_path:"/img/logos/kubernetes.svg",name:"kubernetes"}],languages:[{dark_logo_path:"/img/logos/php.svg",logo_path:"/img/logos/php.svg",name:"php"},{dark_logo_path:"/img/logos/kotlin.svg",logo_path:"/img/logos/kotlin.svg",name:"kotlin"},{dark_logo_path:"/img/logos/java.svg",logo_path:"/img/logos/java.svg",name:"java"},{dark_logo_path:"/img/logos/javascript.svg",logo_path:"/img/logos/javascript.svg",name:"javascript"},{dark_logo_path:"/img/logos/python.svg",logo_path:"/img/logos/python.svg",name:"python"},{dark_logo_path:"/img/logos/rust_white.svg",logo_path:"/img/logos/rust.svg",name:"rust"},{dark_logo_path:"/img/logos/go.svg",logo_path:"/img/logos/go.svg",name:"go"},{dark_logo_path:"/img/logos/ruby.svg",logo_path:"/img/logos/ruby.svg",name:"ruby"},{dark_logo_path:"/img/logos/scala.svg",logo_path:"/img/logos/scala.svg",name:"scala"}],latest_highlight:{},latest_post:{},latest_release:{},post_tags:[],posts:[],releases:{},sinks:{},sources:{},team:[{avatar:"https://github.com/evoxmusic.png",bio:'Romaric is a Software Engineer, and CEO at Qovery. He has 10+ years of experience in R&D. From the Ad-Tech to the financial industry, he has deep expertise in highly-reliable and performant systems.\n',github:"https://github.com/evoxmusic",id:"romaric",keybase:"https://keybase.io/evoxmusic",name:"Romaric P."},{avatar:"https://github.com/deimosfr.png",bio:'Pierre is an SRE, and CTO of Qovery. He has 15+ years of experience in R&D. From the financial to the Ad-Tech industry, he has a strong knowledge in distributed and highly-reliable systems. He\'s also the MariaDB High Performance book author.\n',github:"https://github.com/deimosfr",id:"pierre",keybase:"https://keybase.io/pierre",name:"Pierre M."},{avatar:"https://github.com/pjeziorowski.png",bio:'Patryk is an experienced Software Engineer, and a Backend Developer at Qovery. ',github:"https://github.com/pjeziorowski",id:"patryk",keybase:"https://keybase.io/patryk",name:"Patryk J."},{avatar:"https://github.com/maclikorne.png",bio:'Enzo is a Backend Developer at Qovery. ',github:"https://github.com/MacLikorne",id:"enzo",keybase:"https://keybase.io/enzo",name:"Enzo R."},{avatar:"https://github.com/l0ck3.png",bio:'Yann is a Developer Experience Engineer at Qovery. He has 15+ years of experience in development and SRE.\n',github:"https://github.com/l0ck3",id:"yann",keybase:"https://keybase.io/l0ck3",name:"Yann I."},{avatar:"https://github.com/sileht.png",bio:'Mehdi is Senior DevOps Engineer at Qovery, with 15+ years of software development and managing infrastructures, Co-founder of Mergify, active member of non-profit Tetaneutral.net ISP and Hosting provider, and he also likes to dance on crazy swing rhythm.\n',github:"https://github.com/sileht",id:"mehdi",keybase:"https://keybase.io/mehdi",name:"Mehdi A."},{avatar:"https://github.com/Stun3R.png",bio:'Thibaut is an experienced developer, CTO of Shelt.in and active Qovery contributor. ',github:"https://github.com/Stun3R",id:"thibaut_david",keybase:"https://keybase.io/Stun3R",name:"Thibaut David"},{avatar:"https://github.com/Aggis15.png",bio:"Angelos is a self-taught programmer using Python, Qovery ambassador and contributor. ",github:"https://github.com/Aggis15",id:"Aggis15",keybase:"https://keybase.io/Aggis15",name:"Angelos Rinas"},{avatar:"https://github.com/ilmiont.png",bio:"James Walker is the founder of Heron Web, a UK-based digital agency providing bespoke software development services to SMEs. He has experience managing complete end-to-end web development workflows with DevOps, CI/CD, Docker, and Kubernetes.\n",github:"https://github.com/ilmiont",id:"james_walker",keybase:"https://keybase.io/ilmiont",name:"James Walker"},{avatar:"https://github.com/Qovery.png",bio:"Dhiraj Kumar has 10+ years of experience in Python and Machine learning. I specialize in Data analytics and Machine learning using python. My Primary Expertise includes Python, Flask, Django, Pandas, NumPy, SciKit-Learn, NLP, Docker, Machine Learning, Deep Learning, Chatbot, NLP, Spark, AWS, C#, and Azure\n",github:"https://github.com/dhiraj_kumar",id:"dhiraj_kumar",keybase:"https://keybase.io/dhiraj_kumar",name:"Dhiraj Kumar"},{avatar:"https://github.com/Qovery.png",bio:"Shingai Zivuku is a softwage engineer passionated by the cloud.\n",github:"https://github.com/shingai_zivuku",id:"shingai_zivuku",keybase:"https://keybase.io/shingai_zivuku",name:"Shingai Zivuku"},{avatar:"https://github.com/benjaminch.png",bio:'Benjamin is a senior Backend Developer at Qovery.',github:"https://github.com/benjaminch",id:"benjaminch",keybase:"https://keybase.io/benjaminch",name:"Benjamin Chastanier"},{avatar:"https://github.com/jul-dan.png",bio:'Julien is a Technical Product Manager at Qovery.',github:"https://github.com/jul-dan",id:"jul-dan",keybase:"https://keybase.io/jul-dan",name:"Julien Dan"}],technologies:[{dark_logo_path:"/img/logos/kubernetes_white.svg",logo_path:"/img/logos/kubernetes.svg",name:"kubernetes"},{dark_logo_path:"/img/logos/helm_white.svg",logo_path:"/img/logos/helm.svg",name:"helm"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"docker"},{dark_logo_path:"/img/logos/kotlin.svg",logo_path:"/img/logos/kotlin.svg",name:"kotlin"},{dark_logo_path:"/img/logos/qovery.svg",logo_path:"/img/logos/qovery.svg",name:"qovery"},{dark_logo_path:"/img/logos/posthog.svg",logo_path:"/img/logos/posthog.svg",name:"posthog"},{dark_logo_path:"/img/logos/terraform.svg",logo_path:"/img/logos/terraform.svg",name:"terraform"},{dark_logo_path:"/img/logos/github.svg",logo_path:"/img/logos/github.png",name:"github"}],transforms:{}}},themeConfig:{disableDarkMode:!1,navbar:{hideOnScroll:!0,logo:{alt:"Qovery",src:"img/logo-light.svg",srcDark:"img/logo-dark.svg",url:"https://www.qovery.com"},links:[{to:"guides/",label:"Guides",position:"left"},{to:"docs/",label:"Docs",position:"left"},{to:"guides/tutorial",label:"Tutorials",position:"left"},{href:"https://discuss.qovery.com",label:"Forum",position:"left"},{href:"https://start.qovery.com",label:"Web Console",position:"right"},{href:"https://www.qovery.com",label:"Home",position:"right"},{href:"https://github.com/Qovery",label:"GitHub",position:"right"}]},image:"img/open-graph.png",prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["hcl","rust"]},footer:{links:[{title:"Resources",items:[{label:"Documentation",to:"docs"},{label:"Guides",to:"guides"},{label:"Tutorials",to:"guides/tutorial"},{label:"Engineering",to:"guides/engineering"},{label:"Pricing",to:"https://www.qovery.com/pricing"},{label:"Enterprise",to:"https://www.qovery.com/enterprise"},{label:"API",to:"https://api-doc.qovery.com"},{label:"Github",to:"https://github.com/Qovery"}]},{title:"Community",items:[{label:"Discord",to:"https://discord.qovery.com"},{label:"Forum",to:"https://community.qovery.com"},{label:"Community call",to:"https://www.qovery.com/community-call"},{label:"Goodies",to:"https://shop.qovery.com"},{label:"Roadmap",to:"https://roadmap.qovery.com"},{label:"Replibyte",to:"https://github.com/Qovery/replibyte"}]},{title:"Company",items:[{label:"Blog",to:"https://www.qovery.com/blog"},{label:"Jobs",to:"https://jobs.qovery.com"},{label:"Team",to:"https://www.qovery.com/team"},{label:"Investors",to:"https://www.qovery.com/investors"},{label:"Contact",to:"https://www.qovery.com/contact"}]}],copyright:"\xa9 2023 DESIGNED BY QOVERY | PROUD SILVER MEMBER OF CNCF AND LINUX FOUNDATION | QOVERY BY BIRDSIGHT - ALL RIGHTS RESERVED"},algolia:{appId:"FT65SBJ2DA",apiKey:"02604e8b2e0918e90edd1d9eb8e30f5e",indexName:"qovery",algoliaOptions:{}},googleAnalytics:{trackingId:"UA-129773960-5"},posthog:{apiKey:"phc_IgdG1K2GveDUte1gJ6hlwNbFHCv9nViWETUyLMU7ciq",appUrl:"https://phprox.qovery.com",enableInDevelopment:!1},imageZoom:{selector:"img"}},title:"Qovery",tagline:"Deploy On-demand Environments on AWS, Remarkably Fast",url:"https://hub.qovery.com",baseUrl:"/",favicon:"img/logo-square.svg",organizationName:"Qovery",projectName:"documentation",presets:[],scripts:["/js/intercom.js",{src:"https://www.googletagmanager.com/gtag/js?id=UA-129773960-5",async:!0},"/js/ga.js"],stylesheets:["https://fonts.googleapis.com/css?family=Ubuntu|Roboto|Source+Code+Pro","https://at-ui.github.io/feather-font/css/iconfont.css"]}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return l}));var o=n(3),r=n(1),i=n(0),a=n.n(i);function s(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?Object(o.f)(t,e):n.length?n[n.length-1].match:o.c.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&s(e.routes,t,n)),r})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.a.createElement(o.d,n,e.map((function(e,n){return a.a.createElement(o.b,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render(Object(r.a)({},n,{},t,{route:e})):a.a.createElement(e.component,Object(r.a)({},n,t,{route:e}))}})}))):null}},function(e,t){var n=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:n,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&!!window.screen};e.exports=o},function(e,t,n){"use strict";var o=n(36),r={};r[n(2)("toStringTag")]="z",r+""!="[object z]"&&n(16)(Object.prototype,"toString",(function(){return"[object "+o(this)+"]"}),!0)},function(e,t,n){"use strict";var o=n(74),r=n(88),i=n(24),a=n(33);e.exports=n(61)(Array,"Array",(function(e,t){this._t=a(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports={}},function(e,t,n){var o=n(107),r=n(65);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){var o=n(35),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){var o=n(34);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(8),r=n(86),i=n(87),a=Object.defineProperty;t.f=n(10)?Object.defineProperty:function(e,t,n){if(o(e),t=i(t,!0),o(n),r)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){for(var o=n(22),r=n(25),i=n(16),a=n(5),s=n(11),l=n(24),u=n(2),c=u("iterator"),d=u("toStringTag"),p=l.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},g=r(f),m=0;m0?o:n)(e)}},function(e,t,n){var o=n(23),r=n(2)("toStringTag"),i="Arguments"==o(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),r))?n:i?o(t):"Object"==(a=o(t))&&"function"==typeof t.callee?"Arguments":a}},function(e){e.exports=JSON.parse('{"/":{"component":"c4f5d8e4"},"/community":{"component":"672ba3d6"},"/components":{"component":"54e7632e"},"/contact":{"component":"83e9e333"},"/docs":{"component":"25b7c3f2"},"/guides":{"component":"c6d06197","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"8f02216a"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"9fe26b56"},{"content":"ff2506fd"},{"content":"86a0e6ef"},{"content":"73d96058"},{"content":"946bf02d"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"dea3d534"},{"content":"6ce627d6"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"05049f86"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"49d2885e"},"/guides/advanced":{"component":"d9deea5f","items":[{"content":"1a39f24c"},{"content":"da253275"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"8f02216a"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"05049f86"}],"metadata":"3e1d77c1"},"/guides/advanced/continuous-integration":{"component":"1c13b173","content":"03d003d1"},"/guides/advanced/costs-control":{"component":"1c13b173","content":"a8a9c166"},"/guides/advanced/deploy-api-gateway":{"component":"1c13b173","content":"b7d53051"},"/guides/advanced/deploy-aws-services":{"component":"1c13b173","content":"5385e737"},"/guides/advanced/deploy-external-services":{"component":"1c13b173","content":"e7d0ec68"},"/guides/advanced/deploy-frontend":{"component":"1c13b173","content":"1dd2c233"},"/guides/advanced/helm-chart":{"component":"1c13b173","content":"c24a85bb"},"/guides/advanced/microservices":{"component":"1c13b173","content":"66bbed7b"},"/guides/advanced/migration":{"component":"1c13b173","content":"10c2e3e6"},"/guides/advanced/monitoring":{"component":"1c13b173","content":"18415bef"},"/guides/advanced/monorepository":{"component":"1c13b173","content":"f756422c"},"/guides/advanced/production":{"component":"1c13b173","content":"93701b40"},"/guides/advanced/seed-database":{"component":"1c13b173","content":"2309a9c8"},"/guides/advanced/terraform":{"component":"1c13b173","content":"9c8ed74f"},"/guides/advanced/use-preview-environments":{"component":"1c13b173","content":"8bfd1931"},"/guides/getting-started":{"component":"d9deea5f","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"}],"metadata":"0e2fb061"},"/guides/getting-started/create-a-database":{"component":"1c13b173","content":"24e60f8a"},"/guides/getting-started/debugging":{"component":"1c13b173","content":"6504a542"},"/guides/getting-started/deploy-your-first-application":{"component":"1c13b173","content":"cc9be38a"},"/guides/getting-started/managing-environment-variables":{"component":"1c13b173","content":"b7280cb5"},"/guides/getting-started/setting-custom-domain":{"component":"1c13b173","content":"c0594016"},"/guides/installation-guide":{"component":"d9deea5f","items":[{"content":"9fe26b56"},{"content":"ff2506fd"},{"content":"86a0e6ef"},{"content":"73d96058"},{"content":"946bf02d"}],"metadata":"6852f5b3"},"/guides/installation-guide/guide-amazon-web-services":{"component":"1c13b173","content":"225ad2ad"},"/guides/installation-guide/guide-google-cloud-platform":{"component":"1c13b173","content":"9b266254"},"/guides/installation-guide/guide-kubernetes":{"component":"1c13b173","content":"dffbf523"},"/guides/installation-guide/guide-microsoft-azure":{"component":"1c13b173","content":"f6a16982"},"/guides/installation-guide/guide-scaleway":{"component":"1c13b173","content":"7cc8f9b8"},"/guides/tags":{"component":"3116c1fa","tags":"a81fb19d"},"/guides/tags/database-postgresql":{"component":"004ec9e5","items":[{"content":"50bab564"},{"content":"2cb76395"},{"content":"f7098925"}],"metadata":"4a111132"},"/guides/tags/framework-rails":{"component":"004ec9e5","items":[{"content":"50bab564"}],"metadata":"a264e41a"},"/guides/tags/installation-guide-aws":{"component":"004ec9e5","items":[{"content":"a156f6a6"},{"content":"3e6b1f84"},{"content":"1b633bfd"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"a1fea8fb"},{"content":"9fe26b56"},{"content":"6ce627d6"},{"content":"c8223350"},{"content":"cbb976f4"},{"content":"0c18cf89"}],"metadata":"c539337b"},"/guides/tags/installation-guide-azure":{"component":"004ec9e5","items":[{"content":"86a0e6ef"}],"metadata":"73709b64"},"/guides/tags/installation-guide-gcp":{"component":"004ec9e5","items":[{"content":"946bf02d"}],"metadata":"1e2e1850"},"/guides/tags/installation-guide-kubernetes":{"component":"004ec9e5","items":[{"content":"ff2506fd"}],"metadata":"7e863710"},"/guides/tags/installation-guide-scaleway":{"component":"004ec9e5","items":[{"content":"73d96058"}],"metadata":"a601bb0b"},"/guides/tags/language-javascript":{"component":"004ec9e5","items":[{"content":"498daee8"},{"content":"072d4c63"}],"metadata":"cb05c8fa"},"/guides/tags/language-kotlin":{"component":"004ec9e5","items":[{"content":"f7098925"}],"metadata":"dbe0f891"},"/guides/tags/language-ruby":{"component":"004ec9e5","items":[{"content":"50bab564"}],"metadata":"f7aa8e39"},"/guides/tags/language-rust":{"component":"004ec9e5","items":[{"content":"89caf623"},{"content":"b565c464"}],"metadata":"2e212509"},"/guides/tags/technology-docker":{"component":"004ec9e5","items":[{"content":"bbfbe73c"}],"metadata":"d4b6ce89"},"/guides/tags/technology-github":{"component":"004ec9e5","items":[{"content":"40ec3bc1"}],"metadata":"60ad046d"},"/guides/tags/technology-helm":{"component":"004ec9e5","items":[{"content":"8f02216a"}],"metadata":"49dea187"},"/guides/tags/technology-qovery":{"component":"004ec9e5","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"56c0a343"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"5e5fefd2"},{"content":"36676680"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"a960914c"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"ba43933d"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"f3d8c143"}],"metadata":"4c0b3d74"},"/guides/tags/technology-terraform":{"component":"004ec9e5","items":[{"content":"05049f86"}],"metadata":"63ea0c72"},"/guides/tags/type-guide":{"component":"004ec9e5","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"8f02216a"},{"content":"9fe26b56"},{"content":"ff2506fd"},{"content":"86a0e6ef"},{"content":"73d96058"},{"content":"946bf02d"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"05049f86"}],"metadata":"f11e9a8e"},"/guides/tags/type-tutorial":{"component":"004ec9e5","items":[{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"6ce627d6"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"bf22200e"},"/guides/tutorial":{"component":"d9deea5f","items":[{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"6ce627d6"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"af9ec14b"},"/guides/tutorial/aws-sqs-lambda-with-qovery":{"component":"1c13b173","content":"bbedfc29"},"/guides/tutorial/aws-vpc-peering-with-qovery":{"component":"1c13b173","content":"e9c994cf"},"/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws":{"component":"1c13b173","content":"94a00d4e"},"/guides/tutorial/build-e2e-testing-ephemeral-environments":{"component":"1c13b173","content":"2121549d"},"/guides/tutorial/cloudwatch-integration":{"component":"1c13b173","content":"83a41d86"},"/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1":{"component":"1c13b173","content":"db372ba8"},"/guides/tutorial/create-a-playground-environment-on-aws":{"component":"1c13b173","content":"2ea1d02e"},"/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws":{"component":"1c13b173","content":"410a9ba0"},"/guides/tutorial/customizing-preview-url-with-qovery-cli":{"component":"1c13b173","content":"b76eb9a9"},"/guides/tutorial/data-seeding-in-postgres":{"component":"1c13b173","content":"4592dbe6"},"/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq":{"component":"1c13b173","content":"a3cf753a"},"/guides/tutorial/deploy-temporal-on-kubernetes":{"component":"1c13b173","content":"49a59b02"},"/guides/tutorial/generate-qovery-api-client":{"component":"1c13b173","content":"a4401f0f"},"/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners":{"component":"1c13b173","content":"1a3e0044"},"/guides/tutorial/github-organization-repository-access":{"component":"1c13b173","content":"55af4c9e"},"/guides/tutorial/grafana-install":{"component":"1c13b173","content":"5b8d4026"},"/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster":{"component":"1c13b173","content":"06e8d299"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1":{"component":"1c13b173","content":"10dee872"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2":{"component":"1c13b173","content":"a4c8ecc0"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3":{"component":"1c13b173","content":"b74d0aaa"},"/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws":{"component":"1c13b173","content":"eb0c7ce5"},"/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl":{"component":"1c13b173","content":"7aa59ca3"},"/guides/tutorial/how-to-create-an-rds-instance-through-aws-console":{"component":"1c13b173","content":"e4768112"},"/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease":{"component":"1c13b173","content":"3da71a70"},"/guides/tutorial/how-to-deploy-helm-charts":{"component":"1c13b173","content":"4fed1128"},"/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes":{"component":"1c13b173","content":"97f5d064"},"/guides/tutorial/how-to-integrate-qovery-with-github-actions":{"component":"1c13b173","content":"c7bfb1d3"},"/guides/tutorial/how-to-run-commands-at-application-startup":{"component":"1c13b173","content":"1d3be599"},"/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery":{"component":"1c13b173","content":"311fe203"},"/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources":{"component":"1c13b173","content":"6b7a52aa"},"/guides/tutorial/how-to-write-a-dockerfile":{"component":"1c13b173","content":"a9994e72"},"/guides/tutorial/import-your-environment-variables-with-the-qovery-cli":{"component":"1c13b173","content":"bb89e1a0"},"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog":{"component":"1c13b173","content":"b479fc9a"},"/guides/tutorial/managing-env-variables-in-create-react-app":{"component":"1c13b173","content":"a4459aa8"},"/guides/tutorial/migrate-your-application-from-heroku-to-aws":{"component":"1c13b173","content":"03dbc155"},"/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery":{"component":"1c13b173","content":"e5653b8d"},"/guides/tutorial/url-shortener-api-with-kotlin":{"component":"1c13b173","content":"ab8f5b83"},"/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services":{"component":"1c13b173","content":"35d9179e"},"/guides/tutorial/use-aws-iam-roles-with-qovery":{"component":"1c13b173","content":"5b5f8b70"},"/guides/tutorial/working-with-git-submodules":{"component":"1c13b173","content":"f26e55ec"},"/mailing_list":{"component":"48912b2c"},"/docs/:route":{"component":"1be78505","docsMetadata":"20ac7829"},"/docs/getting-started":{"component":"17896441","content":"d589d3a7"},"/docs/getting-started/basic-concepts":{"component":"17896441","content":"d85dc1ef"},"/docs/getting-started/deploy-my-app":{"component":"17896441","content":"4354960d"},"/docs/getting-started/how-qovery-works":{"component":"17896441","content":"cb2208c1"},"/docs/getting-started/install-qovery":{"component":"17896441","content":"1a1dfe25"},"/docs/getting-started/install-qovery/aws":{"component":"17896441","content":"4132998e"},"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery":{"component":"17896441","content":"e862b20f"},"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials":{"component":"17896441","content":"04b748dc"},"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq":{"component":"17896441","content":"48dbd876"},"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure":{"component":"17896441","content":"c8dfbbe7"},"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart":{"component":"17896441","content":"099598c5"},"/docs/getting-started/install-qovery/aws/self-managed-cluster":{"component":"17896441","content":"ab1ec509"},"/docs/getting-started/install-qovery/azure":{"component":"17896441","content":"115eba8e"},"/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery":{"component":"17896441","content":"0f632e24"},"/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart":{"component":"17896441","content":"256f5506"},"/docs/getting-started/install-qovery/azure/self-managed-cluster":{"component":"17896441","content":"ac0a13b6"},"/docs/getting-started/install-qovery/gcp":{"component":"17896441","content":"d99b987c"},"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery":{"component":"17896441","content":"cc3d7007"},"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials":{"component":"17896441","content":"be464708"},"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart":{"component":"17896441","content":"150479d1"},"/docs/getting-started/install-qovery/gcp/self-managed-cluster":{"component":"17896441","content":"b49a87dd"},"/docs/getting-started/install-qovery/kubernetes":{"component":"17896441","content":"87080b01"},"/docs/getting-started/install-qovery/kubernetes/quickstart":{"component":"17896441","content":"9d099993"},"/docs/getting-started/install-qovery/scaleway":{"component":"17896441","content":"9c253a96"},"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery":{"component":"17896441","content":"b0059451"},"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials":{"component":"17896441","content":"40c64f54"},"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq":{"component":"17896441","content":"b557ef1e"},"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart":{"component":"17896441","content":"27d7a36c"},"/docs/getting-started/install-qovery/scaleway/self-managed-cluster":{"component":"17896441","content":"952063ba"},"/docs/getting-started/what-is-qovery":{"component":"17896441","content":"68b95634"},"/docs/getting-started/whats-next":{"component":"17896441","content":"543e268a"},"/docs/security-and-compliance":{"component":"17896441","content":"fcb698a1"},"/docs/security-and-compliance/backup-and-restore":{"component":"17896441","content":"b98931a2"},"/docs/security-and-compliance/encryption":{"component":"17896441","content":"2486bcfc"},"/docs/security-and-compliance/gdpr":{"component":"17896441","content":"7278678a"},"/docs/security-and-compliance/soc2":{"component":"17896441","content":"cf490432"},"/docs/useful-resources/faq":{"component":"17896441","content":"59157ba2"},"/docs/useful-resources/help-and-support":{"component":"17896441","content":"d2075f7f"},"/docs/using-qovery":{"component":"17896441","content":"56cfbe62"},"/docs/using-qovery/audit-logs":{"component":"17896441","content":"b8490823"},"/docs/using-qovery/configuration":{"component":"17896441","content":"fc376fea"},"/docs/using-qovery/configuration/advanced-settings":{"component":"17896441","content":"4f6caeac"},"/docs/using-qovery/configuration/application":{"component":"17896441","content":"8d5726d6"},"/docs/using-qovery/configuration/application-health-checks":{"component":"17896441","content":"91473650"},"/docs/using-qovery/configuration/cloud-service-provider":{"component":"17896441","content":"33b1fe0f"},"/docs/using-qovery/configuration/cluster-advanced-settings":{"component":"17896441","content":"2f1afd92"},"/docs/using-qovery/configuration/clusters":{"component":"17896441","content":"dc00a797"},"/docs/using-qovery/configuration/cronjob":{"component":"17896441","content":"54ad54c7"},"/docs/using-qovery/configuration/database":{"component":"17896441","content":"9feef5a0"},"/docs/using-qovery/configuration/database/mongodb":{"component":"17896441","content":"9ddfc3dc"},"/docs/using-qovery/configuration/database/mysql":{"component":"17896441","content":"accdb2b4"},"/docs/using-qovery/configuration/database/postgresql":{"component":"17896441","content":"baf9cc25"},"/docs/using-qovery/configuration/database/redis":{"component":"17896441","content":"c536ba8c"},"/docs/using-qovery/configuration/deployment-rule":{"component":"17896441","content":"db96bb7d"},"/docs/using-qovery/configuration/environment":{"component":"17896441","content":"a4a09dfe"},"/docs/using-qovery/configuration/environment-variable":{"component":"17896441","content":"07c2f310"},"/docs/using-qovery/configuration/helm":{"component":"17896441","content":"02ec211a"},"/docs/using-qovery/configuration/lifecycle-job":{"component":"17896441","content":"16557ade"},"/docs/using-qovery/configuration/object-storage":{"component":"17896441","content":"9d3c5a68"},"/docs/using-qovery/configuration/organization":{"component":"17896441","content":"ff91a867"},"/docs/using-qovery/configuration/organization/api-token":{"component":"17896441","content":"1d187ae3"},"/docs/using-qovery/configuration/organization/container-registry":{"component":"17896441","content":"6b0e113a"},"/docs/using-qovery/configuration/organization/git-repository-access":{"component":"17896441","content":"9406f053"},"/docs/using-qovery/configuration/organization/helm-repository":{"component":"17896441","content":"2737c3be"},"/docs/using-qovery/configuration/organization/members-rbac":{"component":"17896441","content":"b2880863"},"/docs/using-qovery/configuration/project":{"component":"17896441","content":"bd10520b"},"/docs/using-qovery/configuration/provider":{"component":"17896441","content":"89de14d0"},"/docs/using-qovery/configuration/service-health-checks":{"component":"17896441","content":"073aa0b0"},"/docs/using-qovery/configuration/user-account":{"component":"17896441","content":"376f4c3b"},"/docs/using-qovery/deployment":{"component":"17896441","content":"8ca6d3cf"},"/docs/using-qovery/deployment/deploying-with-auto-deploy":{"component":"17896441","content":"39686ad9"},"/docs/using-qovery/deployment/deploying-with-ci-cd":{"component":"17896441","content":"36b4c04d"},"/docs/using-qovery/deployment/deployment-actions":{"component":"17896441","content":"8ae34d0a"},"/docs/using-qovery/deployment/deployment-history":{"component":"17896441","content":"47a329cb"},"/docs/using-qovery/deployment/deployment-pipeline":{"component":"17896441","content":"55ef6d6a"},"/docs/using-qovery/deployment/deployment-strategies":{"component":"17896441","content":"b79e7411"},"/docs/using-qovery/deployment/image-mirroring":{"component":"17896441","content":"6308ca27"},"/docs/using-qovery/deployment/logs":{"component":"17896441","content":"6ebd4d49"},"/docs/using-qovery/deployment/running-and-deployment-statuses":{"component":"17896441","content":"e3c664e0"},"/docs/using-qovery/integration":{"component":"17896441","content":"8d1c77c1"},"/docs/using-qovery/integration/api-integration":{"component":"17896441","content":"d28d5470"},"/docs/using-qovery/integration/container-registry":{"component":"17896441","content":"7f79072b"},"/docs/using-qovery/integration/continuous-integration":{"component":"17896441","content":"1772e35f"},"/docs/using-qovery/integration/continuous-integration/circle-ci":{"component":"17896441","content":"1aa86e56"},"/docs/using-qovery/integration/continuous-integration/github-actions":{"component":"17896441","content":"3a11bd48"},"/docs/using-qovery/integration/continuous-integration/gitlab-ci":{"component":"17896441","content":"120e882c"},"/docs/using-qovery/integration/continuous-integration/jenkins":{"component":"17896441","content":"4dcdbf34"},"/docs/using-qovery/integration/git-repository":{"component":"17896441","content":"2a88660b"},"/docs/using-qovery/integration/helm-repository":{"component":"17896441","content":"8bd1b610"},"/docs/using-qovery/integration/monitoring":{"component":"17896441","content":"592d28ca"},"/docs/using-qovery/integration/monitoring/datadog":{"component":"17896441","content":"d471c358"},"/docs/using-qovery/integration/monitoring/new-relic":{"component":"17896441","content":"e1e0a511"},"/docs/using-qovery/integration/secret-manager":{"component":"17896441","content":"888595cd"},"/docs/using-qovery/integration/secret-manager/aws-secrets-manager":{"component":"17896441","content":"dab3a2be"},"/docs/using-qovery/integration/secret-manager/doppler":{"component":"17896441","content":"5e60e078"},"/docs/using-qovery/integration/slack":{"component":"17896441","content":"40a919e7"},"/docs/using-qovery/integration/terraform":{"component":"17896441","content":"deef6d59"},"/docs/using-qovery/integration/webhook":{"component":"17896441","content":"7df50433"},"/docs/using-qovery/interface":{"component":"17896441","content":"3a03b8f9"},"/docs/using-qovery/interface/cli":{"component":"17896441","content":"d9a4c8ef"},"/docs/using-qovery/interface/rest-api":{"component":"17896441","content":"c3f02c14"},"/docs/using-qovery/interface/terraform-interface":{"component":"17896441","content":"f0f90e68"},"/docs/using-qovery/interface/web-interface":{"component":"17896441","content":"58379094"},"/docs/using-qovery/maintenance":{"component":"17896441","content":"ac2c90fd"},"/docs/using-qovery/troubleshoot":{"component":"17896441","content":"b4dda200"},"/docs/using-qovery/troubleshoot/cluster-troubleshoot":{"component":"17896441","content":"3cfde410"},"/docs/using-qovery/troubleshoot/service-deployment-troubleshoot":{"component":"17896441","content":"1350cb71"},"/docs/using-qovery/troubleshoot/service-run-troubleshoot":{"component":"17896441","content":"b538f6fb"}}')},function(e,t,n){var o,r;void 0===(r="function"==typeof(o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
                                                                                                                          '};function r(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,o.minimum,1),n.status=1===e?null:e;var l=n.render(!t),u=l.querySelector(o.barSelector),c=o.speed,d=o.easing;return l.offsetWidth,a((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),s(u,function(e,t,n){var r;return(r="translate3d"===o.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,r}(e,c,d)),1===e?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var r,a=t.querySelector(o.barSelector),l=e?"-100":i(n.status||0),c=document.querySelector(o.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),o.showSpinner||(r=t.querySelector(o.spinnerSelector))&&p(r),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var a=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var o,r=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((o=e[r]+i)in n)return o;return t}(n))}function o(e,t,o){t=n(t),e.style[t]=o}return function(e,t){var n,r,i=arguments;if(2==i.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,i[1],i[2])}}();function l(e,t){return("string"==typeof e?e:d(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=d(e),o=n+t;l(n,t)||(e.className=o.substring(1))}function c(e,t){var n,o=d(e);l(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function d(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?o.call(t,n,t,e):o)||(e.exports=r)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return w}));var o=n(3);n.d(t,"c",(function(){return o.a})),n.d(t,"d",(function(){return o.f})),n.d(t,"e",(function(){return o.g})),n.d(t,"f",(function(){return o.h}));var r=n(6),i=n(0),a=n.n(i),s=n(7),l=(n(15),n(1)),u=n(9),c=n(4),d=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),r=0;r1&&s.call(o[0],n,(function(){for(r=1;re.length)return;if(!(k instanceof l)){if(m&&y!=t.length-1){if(p.lastIndex=w,!(P=p.exec(e)))break;for(var x=P.index+(g?P[1].length:0),E=P.index+P[0].length,_=y,S=w,T=t.length;_=(S+=t[_].length)&&(++y,w=S);if(t[y]instanceof l)continue;q=_-y,k=e.slice(w,S),P.index-=w}else{p.lastIndex=0;var P=p.exec(k),q=1}if(P){g&&(h=P[1]?P[1].length:0),E=(x=P.index+h)+(P=P[0].slice(h)).length;var C=k.slice(0,x),O=k.slice(E),A=[y,q];C&&(++y,w+=C.length,A.push(C));var R=new l(u,f?r.tokenize(P,f):P,b,P,m);if(A.push(R),O&&A.push(O),Array.prototype.splice.apply(t,A),1!=q&&r.matchGrammar(e,t,n,y,w,!0,u),a)break}else if(a)break}}}}},hooks:{add:function(){}},tokenize:function(e,t,n){var o=[e],i=t.rest;if(i){for(var a in i)t[a]=i[a];delete t.rest}return r.matchGrammar(e,o,t,0,0,!1),o}},(i=r.Token=function(e,t,n,o,r){this.type=e,this.content=t,this.alias=n,this.length=0|(o||"").length,this.greedy=!!r}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===r.util.type(e))return e.map((function(n){return i.stringify(n,t,e)})).join("");var o={type:e.type,content:i.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var a="Array"===r.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(o.classes,a)}var s=Object.keys(o.attributes).map((function(e){return e+'="'+(o.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+(s?" "+s:"")+">"+o.content+""},r);a.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var o={"included-cdata":{pattern://i,inside:n}};o["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,e),"i"),lookbehind:!0,greedy:!0,inside:o},a.languages.insertBefore("markup","cdata",r)}}),a.languages.xml=a.languages.extend("markup",{}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,i=0;i=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{"class-name":{pattern:/(\b(?:enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),a.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete a.languages.c.boolean,a.languages.cpp=a.languages.extend("c",{"class-name":{pattern:/(\b(?:class|enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),a.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},n.tag))}(a),a.languages.css.selector={pattern:a.languages.css.selector,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:/\[(?:[^[\]"']|("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1)*\]/,greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},attribute:{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},value:[/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],punctuation:/[()]/}},a.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}}),a.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:/#[\da-f]{3,8}/i,entity:/\\[\da-f]{1,8}/i,unit:{pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},number:/-?[\d.]+/}),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}}}),a.languages.markup&&a.languages.markup.tag.addInlined("script","javascript"),a.languages.js=a.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{(?:\{[^}]*\}|[^}])*\}|[^}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},o=function(t){for(var r=[],i=0;i0&&r[r.length-1].tagName===n(a.content[0].content[1])&&r.pop():"/>"===a.content[a.content.length-1].content||r.push({tagName:n(a.content[0].content[1]),openedBraces:0}):r.length>0&&"punctuation"===a.type&&"{"===a.content?r[r.length-1].openedBraces++:r.length>0&&r[r.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?r[r.length-1].openedBraces--:s=!0),(s||"string"==typeof a)&&r.length>0&&0===r[r.length-1].openedBraces){var l=n(a);i0&&("string"==typeof t[i-1]||"plain-text"===t[i-1].type)&&(l=n(t[i-1])+l,t.splice(i-1,1),i--),t[i]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&o(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||o(e.tokens)}))}(a),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){"string"==typeof t&&(t=[t]),t.forEach((function(t){!function(t,n){var o=e.languages[t];if(o){var r=o["doc-comment"];if(!r){var i={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,alias:"comment"}};r=(o=e.languages.insertBefore(t,"comment",i))["doc-comment"]}if(r instanceof RegExp&&(r=o["doc-comment"]={pattern:r}),Array.isArray(r))for(var a=0,s=r.length;a>>?=?|->|([-+&|])\2|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":n,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(a),function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,o,r,i){if(n.language===o){var a=n.tokenStack=[];n.code=n.code.replace(r,(function(e){if("function"==typeof i&&!i(e))return e;for(var r,s=a.length;-1!==n.code.indexOf(r=t(o,s));)++s;return a[s]=e,r})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,o){if(n.language===o&&n.tokenStack){n.grammar=e.languages[o];var r=0,i=Object.keys(n.tokenStack);!function a(s){for(var l=0;l=i.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=i[r],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(o,c),g=p.indexOf(f);if(g>-1){++r;var m=p.substring(0,g),h=new e.Token(o,e.tokenize(d,n.grammar),"language-"+o,d),b=p.substring(g+f.length),v=[];m&&v.push.apply(v,a([m])),v.push(h),b&&v.push.apply(v,a([b])),"string"==typeof u?s.splice.apply(s,[l,1].concat(v)):u.content=v}}else u.content&&a(u.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.php=e.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,boolean:{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),e.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),e.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),e.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),e.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var t={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:{rest:e.languages.php}};e.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:t}}}),delete e.languages.php.string,e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(a),function(e){var t=e.languages.javascript,n=/{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}/.source,o="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(o+/[$\w\xA0-\uFFFF.]+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(o+/\[[$\w\xA0-\uFFFF.]+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{punctuation:/[.,:?=<>|{}()[\]]/}},{pattern:/(@(?:augments|extends|class|interface|memberof!?|this)\s+)[A-Z]\w*(?:\.[A-Z]\w*)*/,lookbehind:!0,inside:{punctuation:/\./}}],example:{pattern:/(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^(\s*(?:\*\s*)?).+$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(a),a.languages.actionscript=a.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),a.languages.actionscript["class-name"].alias="function",a.languages.markup&&a.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:a.languages.markup}}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:/(\.\s*)#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],n=0;n))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(a),a.languages.n4js=a.languages.extend("javascript",{keyword:/\b(?:any|Array|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),a.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),a.languages.n4jsd=a.languages.n4js,a.languages.typescript=a.languages.extend("javascript",{keyword:/\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),a.languages.ts=a.languages.typescript,function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,o=t.inside.interpolation,r=o.inside["interpolation-punctuation"],i=o.pattern.source;function a(t,o){if(e.languages[t])return{pattern:RegExp("((?:"+o+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,o){var r={code:t,grammar:n,language:o};return e.hooks.run("before-tokenize",r),r.tokens=e.tokenize(r.code,r.grammar),e.hooks.run("after-tokenize",r),r.tokens}function u(t){var n={};n["interpolation-punctuation"]=r;var i=e.tokenize(t,n);if(3===i.length){var a=[1,1];a.push.apply(a,l(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,a)}return new e.Token("interpolation",i,o.alias,t)}function c(t,n,o){var r=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),a=0,c={},d=l(r.map((function(e){if("string"==typeof e)return e;for(var n,r=e.content;-1!==t.indexOf(n=s(a++,o)););return c[n]=r,n})).join(""),n,o),p=Object.keys(c);return a=0,function e(t){for(var n=0;n=p.length)return;var o=t[n];if("string"==typeof o||"string"==typeof o.content){var r=p[a],i="string"==typeof o?o:o.content,s=i.indexOf(r);if(-1!==s){++a;var l=i.substring(0,s),d=u(c[r]),f=i.substring(s+r.length),g=[];if(l&&g.push(l),g.push(d),f){var m=[f];e(m),g.push.apply(g,m)}"string"==typeof o?(t.splice.apply(t,[n,1].concat(g)),n+=g.length-1):o.content=g}}else{var h=o.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(o,d,"language-"+o,t)}e.languages.javascript["template-string"]=[a("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),a("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),a("svg",/\bsvg/.source),a("markdown",/\b(?:md|markdown)/.source),a("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var o=0,r=n.length;o/g,t),n&&(e=e+"|"+e.replace(/_/g,"\\*")),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var o=/(?:\\.|``.+?``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\r?\n|\r)|$)/.source.replace(/__/g,o),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\r?\n|\r)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+i+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+i+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/(^[ \t]*(?:\r?\n|\r))(?: {4}|\t).+(?:(?:\r?\n|\r)(?: {4}|\t).+)*/m,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\r?\n|\r))[\s\S]+?(?=(?:\r?\n|\r)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\r?\n|\r)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/__(?:(?!_)|_(?:(?!_))+_)+__/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/_(?:(?!_)|__(?:(?!_))+__)+_/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+?\2/.source,!1),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[(?:(?!\]))+\])/.source,!1),lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(\[)[^\]]+(?=\]$)/,lookbehind:!0},content:{pattern:/(^!?\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,o=t.length;n",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var o=t[n],r=[];/^\w+$/.test(n)||r.push(/\w+/.exec(n)[0]),"diff"===n&&r.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+o+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete a.languages.go["class-name"],function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*~?\s*)[#\/]\S+?(?=\s*~?\s*$|\s)/i,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}))}(a),a.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,number:/-?\d+\.?\d*(e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{keyword:/\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,type:{pattern:/\B['`]\w*/,alias:"variable"},directive:{pattern:/\B#\w+/,alias:"function"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/,punctuation:/[(){}\[\]|_.,:;]/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/i,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{comment:{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),a.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={url:/url\((["']?).*?\1\)/i,string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,number:/\b\d+(?:\.\d+)?%?/,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.+|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],punctuation:/[{}()\[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={comment:{pattern:/(^|[^\\])(\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:t.interpolation,punctuation:/[{},]/}},func:t.func,string:t.string,interpolation:t.interpolation,punctuation:/[{}()\[\];:.]/}}(a);var s=a.util.clone(a.languages.typescript);a.languages.tsx=a.languages.extend("jsx",s),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},a.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},a.languages.yml=a.languages.yaml,t.a=a},function(e,t,n){var o=n(23);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==o(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var o=n(36),r=RegExp.prototype.exec;e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==o(e))throw new TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},function(e,t,n){"use strict";n(103);var o=n(16),r=n(11),i=n(14),a=n(34),s=n(2),l=n(45),u=s("species"),c=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),d=function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();e.exports=function(e,t,n){var p=s(e),f=!i((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),g=f?!i((function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===e&&(n.constructor={},n.constructor[u]=function(){return n}),n[p](""),!t})):void 0;if(!f||!g||"replace"===e&&!c||"split"===e&&!d){var m=/./[p],h=n(a,p,""[e],(function(e,t,n,o,r){return t.exec===l?f&&!r?{done:!0,value:m.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}})),b=h[0],v=h[1];o(String.prototype,e,b),r(RegExp.prototype,p,2==t?function(e,t){return v.call(e,this,t)}:function(e){return v.call(e,this)})}}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var o,r,i,a,s=n(44),l=n(5),u=n(30),c=n(36),d=n(12),p=n(13),f=n(32),g=n(80),m=n(81),h=n(63),b=n(70).set,v=n(122)(),y=n(71),w=n(123),k=n(124),x=n(125),E=l.TypeError,_=l.process,S=_&&_.versions,T=S&&S.v8||"",P=l.Promise,q="process"==c(_),C=function(){},O=r=y.f,A=!!function(){try{var e=P.resolve(1),t=(e.constructor={})[n(2)("species")]=function(e){e(C,C)};return(q||"function"==typeof PromiseRejectionEvent)&&e.then(C)instanceof t&&0!==T.indexOf("6.6")&&-1===k.indexOf("Chrome/66")}catch(o){}}(),R=function(e){var t;return!(!p(e)||"function"!=typeof(t=e.then))&&t},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;v((function(){for(var o=e._v,r=1==e._s,i=0,a=function(t){var n,i,a,s=r?t.ok:t.fail,l=t.resolve,u=t.reject,c=t.domain;try{s?(r||(2==e._h&&j(e),e._h=1),!0===s?n=o:(c&&c.enter(),n=s(o),c&&(c.exit(),a=!0)),n===t.promise?u(E("Promise-chain cycle")):(i=R(n))?i.call(n,l,u):l(n)):u(o)}catch(d){c&&!a&&c.exit(),u(d)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&I(e)}))}},I=function(e){b.call(l,(function(){var t,n,o,r=e._v,i=z(e);if(i&&(t=w((function(){q?_.emit("unhandledRejection",r,e):(n=l.onunhandledrejection)?n({promise:e,reason:r}):(o=l.console)&&o.error&&o.error("Unhandled promise rejection",r)})),e._h=q||z(e)?2:1),e._a=void 0,i&&t.e)throw t.v}))},z=function(e){return 1!==e._h&&0===(e._a||e._c).length},j=function(e){b.call(l,(function(){var t;q?_.emit("rejectionHandled",e):(t=l.onrejectionhandled)&&t({promise:e,reason:e._v})}))},L=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw E("Promise can't be resolved itself");(t=R(e))?v((function(){var o={_w:n,_d:!1};try{t.call(e,u(F,o,1),u(L,o,1))}catch(r){L.call(o,r)}})):(n._v=e,n._s=1,N(n,!1))}catch(o){L.call({_w:n,_d:!1},o)}}};A||(P=function(e){g(this,P,"Promise","_h"),f(e),o.call(this);try{e(u(F,this,1),u(L,this,1))}catch(t){L.call(this,t)}},(o=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(82)(P.prototype,{then:function(e,t){var n=O(h(this,P));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=q?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),i=function(){var e=new o;this.promise=e,this.resolve=u(F,e,1),this.reject=u(L,e,1)},y.f=O=function(e){return e===P||e===a?new i(e):r(e)}),d(d.G+d.W+d.F*!A,{Promise:P}),n(41)(P,"Promise"),n(94)("Promise"),a=n(17).Promise,d(d.S+d.F*!A,"Promise",{reject:function(e){var t=O(this);return(0,t.reject)(e),t.promise}}),d(d.S+d.F*(s||!A),"Promise",{resolve:function(e){return x(s&&this===a?P:this,e)}}),d(d.S+d.F*!(A&&n(83)((function(e){P.all(e).catch(C)}))),"Promise",{all:function(e){var t=this,n=O(t),o=n.resolve,r=n.reject,i=w((function(){var n=[],i=0,a=1;m(e,!1,(function(e){var s=i++,l=!1;n.push(void 0),a++,t.resolve(e).then((function(e){l||(l=!0,n[s]=e,--a||o(n))}),r)})),--a||o(n)}));return i.e&&r(i.v),n.promise},race:function(e){var t=this,n=O(t),o=n.reject,r=w((function(){m(e,!1,(function(e){t.resolve(e).then(n.resolve,o)}))}));return r.e&&o(r.v),n.promise}})},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}}(),e.exports=n(99)},function(e,t,n){"use strict";var o=n(64)(!0);e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},function(e,t,n){"use strict";var o=n(44),r=n(12),i=n(16),a=n(11),s=n(24),l=n(105),u=n(41),c=n(108),d=n(2)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,g,m,h,b){l(n,t,g);var v,y,w,k=function(e){if(!p&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",E="values"==m,_=!1,S=e.prototype,T=S[d]||S["@@iterator"]||m&&S[m],P=T||k(m),q=m?E?k("entries"):P:void 0,C="Array"==t&&S.entries||T;if(C&&(w=c(C.call(new e)))!==Object.prototype&&w.next&&(u(w,x,!0),o||"function"==typeof w[d]||a(w,d,f)),E&&T&&"values"!==T.name&&(_=!0,P=function(){return T.call(this)}),o&&!b||!p&&!_&&S[d]||a(S,d,P),s[t]=P,s[x]=f,m)if(v={values:E?P:k("values"),keys:h?P:k("keys"),entries:q},b)for(y in v)y in S||i(S,y,v[y]);else r(r.P+r.F*(p||_),t,v);return v}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var o=n(8),r=n(32),i=n(2)("species");e.exports=function(e,t){var n,a=o(e).constructor;return void 0===a||null==(n=o(a)[i])?t:r(n)}},function(e,t,n){var o=n(35),r=n(34);e.exports=function(e){return function(t,n){var i,a,s=String(r(t)),l=o(n),u=s.length;return l<0||l>=u?e?"":void 0:(i=s.charCodeAt(l))<55296||i>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):a-56320+(i-55296<<10)+65536}}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var o=n(5).document;e.exports=o&&o.documentElement},function(e,t,n){"use strict";var o=n(19);t.a=o.b},function(e,t,n){"use strict";e.exports=n(113)},function(e,t,n){"use strict";var o=n(0),r=n.n(o);t.a=r.a.createContext({})},function(e,t,n){var o,r,i,a=n(30),s=n(121),l=n(66),u=n(46),c=n(5),d=c.process,p=c.setImmediate,f=c.clearImmediate,g=c.MessageChannel,m=c.Dispatch,h=0,b={},v=function(){var e=+this;if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},y=function(e){v.call(e.data)};p&&f||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return b[++h]=function(){s("function"==typeof e?e:Function(e),t)},o(h),h},f=function(e){delete b[e]},"process"==n(23)(d)?o=function(e){d.nextTick(a(v,e,1))}:m&&m.now?o=function(e){m.now(a(v,e,1))}:g?(i=(r=new g).port2,r.port1.onmessage=y,o=a(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(o=function(e){c.postMessage(e+"","*")},c.addEventListener("message",y,!1)):o="onreadystatechange"in u("script")?function(e){l.appendChild(u("script")).onreadystatechange=function(){l.removeChild(this),v.call(e)}}:function(e){setTimeout(a(v,e,1),0)}),e.exports={set:p,clear:f}},function(e,t,n){"use strict";var o=n(32);function r(e){var t,n;this.promise=new e((function(e,o){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)}e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";(function(t){var n="__global_unique_id__";e.exports=function(){return t[n]=(t[n]||0)+1}}).call(this,n(76))},function(e,t,n){"use strict";var o=n(68),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return o.isMemo(e)?a:s[e.$$typeof]||r}s[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[o.Memo]=a;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,o){if("string"!=typeof n){if(g){var r=f(n);r&&r!==g&&e(t,r,o)}var a=c(n);d&&(a=a.concat(d(n)));for(var s=l(t),m=l(n),h=0;h]*>)/g,f=/\$([$&`']|\d\d?)/g;n(56)("replace",2,(function(e,t,n,g){return[function(o,r){var i=e(this),a=null==o?void 0:o[t];return void 0!==a?a.call(o,i,r):n.call(String(i),o,r)},function(e,t){var r=g(n,e,this,t);if(r.done)return r.value;var d=o(e),p=String(this),f="function"==typeof t;f||(t=String(t));var h=d.global;if(h){var b=d.unicode;d.lastIndex=0}for(var v=[];;){var y=l(d,p);if(null===y)break;if(v.push(y),!h)break;""===String(y[0])&&(d.lastIndex=s(p,i(d.lastIndex),b))}for(var w,k="",x=0,E=0;E=x&&(k+=p.slice(x,S)+O,x=S+_.length)}return k+p.slice(x)}];function m(e,t,o,i,a,s){var l=o+e.length,u=i.length,c=f;return void 0!==a&&(a=r(a),c=p),n.call(s,c,(function(n,r){var s;switch(r.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,o);case"'":return t.slice(l);case"<":s=a[r.slice(1,-1)];break;default:var c=+r;if(0===c)return n;if(c>u){var p=d(c/10);return 0===p?n:p<=u?void 0===i[p-1]?r.charAt(1):i[p-1]+r.charAt(1):n}s=i[c-1]}return void 0===s?"":s}))}}))},function(e,t,n){"use strict";var o=n(95),r=n(8),i=n(63),a=n(60),s=n(26),l=n(55),u=n(45),c=n(14),d=Math.min,p=[].push,f="length",g=!c((function(){RegExp(4294967295,"y")}));n(56)("split",2,(function(e,t,n,c){var m;return m="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1)[f]||2!="ab".split(/(?:ab)*/)[f]||4!=".".split(/(.?)(.?)/)[f]||".".split(/()()/)[f]>1||"".split(/.?/)[f]?function(e,t){var r=String(this);if(void 0===e&&0===t)return[];if(!o(e))return n.call(r,e,t);for(var i,a,s,l=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),d=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,c+"g");(i=u.call(m,r))&&!((a=m.lastIndex)>d&&(l.push(r.slice(d,i.index)),i[f]>1&&i.index=g));)m.lastIndex===i.index&&m.lastIndex++;return d===r[f]?!s&&m.test("")||l.push(""):l.push(r.slice(d)),l[f]>g?l.slice(0,g):l}:"0".split(void 0,0)[f]?function(e,t){return void 0===e&&0===t?[]:n.call(this,e,t)}:n,[function(n,o){var r=e(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,r,o):m.call(String(r),n,o)},function(e,t){var o=c(m,e,this,t,m!==n);if(o.done)return o.value;var u=r(e),p=String(this),f=i(u,RegExp),h=u.unicode,b=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(g?"y":"g"),v=new f(g?u:"^(?:"+u.source+")",b),y=void 0===t?4294967295:t>>>0;if(0===y)return[];if(0===p.length)return null===l(v,p)?[p]:[];for(var w=0,k=0,x=[];k=t.length?{value:void 0,done:!0}:(e=o(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t){e.exports=function(e,t,n,o){if(!(e instanceof t)||void 0!==o&&o in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var o=n(30),r=n(91),i=n(92),a=n(8),s=n(26),l=n(93),u={},c={};(t=e.exports=function(e,t,n,d,p){var f,g,m,h,b=p?function(){return e}:l(e),v=o(n,d,t?2:1),y=0;if("function"!=typeof b)throw TypeError(e+" is not iterable!");if(i(b)){for(f=s(e.length);f>y;y++)if((h=t?v(a(g=e[y])[0],g[1]):v(e[y]))===u||h===c)return h}else for(m=b.call(e);!(g=m.next()).done;)if((h=r(m,v,g.value,t))===u||h===c)return h}).BREAK=u,t.RETURN=c},function(e,t,n){var o=n(16);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},function(e,t,n){var o=n(2)("iterator"),r=!1;try{var i=[7][o]();i.return=function(){r=!0},Array.from(i,(function(){throw 2}))}catch(a){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var i=[7],s=i[o]();s.next=function(){return{done:n=!0}},i[o]=function(){return s},e(i)}catch(a){}return n}},function(e,t,n){var o=n(12);o(o.S+o.F,"Object",{assign:n(126)})},function(e,t,n){var o=n(12),r=n(129)(!1);o(o.S,"Object",{values:function(e){return r(e)}})},function(e,t,n){e.exports=!n(10)&&!n(14)((function(){return 7!=Object.defineProperty(n(46)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(13);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var o=n(8),r=n(106),i=n(65),a=n(47)("IE_PROTO"),s=function(){},l=function(){var e,t=n(46)("iframe"),o=i.length;for(t.style.display="none",n(66).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("