diff --git a/public/docs/css/main.css b/public/docs/css/main.css index a4765cdc7a..c9fb8a2445 100644 --- a/public/docs/css/main.css +++ b/public/docs/css/main.css @@ -2210,6 +2210,14 @@ a[data-youtube] { display: block; } +.page-content { + li:has(figure) { + display: flex; + flex-direction: column; + gap: 1rem; + } +} + /* Paging */ .post-paging { diff --git a/public/docs/i/1000/octopus-logo.webp b/public/docs/i/1000/octopus-logo.webp new file mode 100644 index 0000000000..b472afc374 Binary files /dev/null and b/public/docs/i/1000/octopus-logo.webp differ diff --git a/public/docs/i/2000/octopus-logo.webp b/public/docs/i/2000/octopus-logo.webp new file mode 100644 index 0000000000..b472afc374 Binary files /dev/null and b/public/docs/i/2000/octopus-logo.webp differ diff --git a/public/docs/i/600/octopus-logo.webp b/public/docs/i/600/octopus-logo.webp new file mode 100644 index 0000000000..b472afc374 Binary files /dev/null and b/public/docs/i/600/octopus-logo.webp differ diff --git a/public/docs/i/x/octopus-logo.png b/public/docs/i/x/octopus-logo.png new file mode 100644 index 0000000000..6e5b6163c4 Binary files /dev/null and b/public/docs/i/x/octopus-logo.png differ diff --git a/public/docs/img/octopus-logo.png.json b/public/docs/img/octopus-logo.png.json new file mode 100644 index 0000000000..351b1eb5a0 --- /dev/null +++ b/public/docs/img/octopus-logo.png.json @@ -0,0 +1 @@ +{"width":140,"height":140,"updated":"2026-05-18T14:36:41.108Z"} \ No newline at end of file diff --git a/src/pages/docs/getting-started/first-deployment/add-deployment-targets.mdx b/src/pages/docs/getting-started/first-deployment/add-deployment-targets.mdx index 3e82123707..223278bcba 100644 --- a/src/pages/docs/getting-started/first-deployment/add-deployment-targets.mdx +++ b/src/pages/docs/getting-started/first-deployment/add-deployment-targets.mdx @@ -17,35 +17,27 @@ With Octopus, you can deploy software to: - Offline package drop - Cloud region -Regardless of where you’re deploying your software, these machines and services are known as your deployment targets. +Regardless of where you're deploying your software, these machines and services are known as your deployment targets. ## Add deployment target 1. From the left Deploy menu, click **Deployment Targets**. -:::figure -![Deployment Targets page](/docs/img/getting-started/first-deployment/images/deployment-targets-page.png) -::: + :::figure + ![Deployment Targets page](/docs/img/getting-started/first-deployment/images/deployment-targets-page.png) + ::: 2. Click **Add Deployment Target**. 3. Use the category tabs to filter by deployment target type. 4. Click **Add** on the deployment target you want to add. -### Name - -Give your deployment target a descriptive name, for example, `Hello world tutorial target`. - -### Environments - -We’ll scope this deployment target to one environment. Later, you can add additional targets and scope them to your other environments. + **Name** - Give your deployment target a descriptive name, for example, `Hello world tutorial target`.**Environments** - We'll scope this deployment target to one environment. Later, you can add additional targets and scope them to your other environments. 5. Select **Development** from the **Environments** dropdown list. -### Target Tags - -Octopus uses target tags to select which deployment target a project should deploy to. Later, you’ll add the same target tag to your deployment process. You can deploy to multiple targets simply by adding this tag. + **Target Tags** - Octopus uses target tags to select which deployment target a project should deploy to. Later, you'll add the same target tag to your deployment process. You can deploy to multiple targets simply by adding this tag. -6. Add a new target tag by typing it into the field. For this example, we’ll use `tutorial-target`. +6. Add a new target tag by typing it into the field. For this example, we'll use `tutorial-target`. :::figure ![Deployment target form](/docs/img/getting-started/first-deployment/images/deployment-target-form.png) @@ -61,7 +53,7 @@ Fill in the other sections of the deployment target form. If you need guidance, - [Offline package drop](/docs/infrastructure/deployment-targets/offline-package-drop) - [Cloud region](/docs/infrastructure/deployment-targets/cloud-regions) -Next, let’s [deploy a sample package](/docs/getting-started/first-deployment/deploy-a-package) to your deployment target. +Next, let's [deploy a sample package](/docs/getting-started/first-deployment/deploy-a-package) to your deployment target. ### All guides in this tutorial series diff --git a/src/pages/docs/getting-started/first-deployment/approvals-with-manual-interventions.md b/src/pages/docs/getting-started/first-deployment/approvals-with-manual-interventions.md index 3eae51fbff..cb45bfd330 100644 --- a/src/pages/docs/getting-started/first-deployment/approvals-with-manual-interventions.md +++ b/src/pages/docs/getting-started/first-deployment/approvals-with-manual-interventions.md @@ -17,27 +17,19 @@ The **Manual Intervention Required** step lets you add approvals or manual check 3. Select the **Other** category to filter the types of steps. 4. Locate the Manual Intervention Required card and click **Add Step**. -:::figure -![Add Manual Intervention Required step to deployment process](/docs/img/getting-started/first-deployment/images/manual-intervention-step.png) -::: - -### Step name - -You can leave this as the default *Manual Intervention Required*. - -### Instructions - -5. Copy the message below and paste it into the **Instructions** field. + :::figure + ![Add Manual Intervention Required step to deployment process](/docs/img/getting-started/first-deployment/images/manual-intervention-step.png) + ::: -``` -Please verify the Production environment is ready before proceeding. -``` + **Step name** - You can leave this as the default *Manual Intervention Required*. -### Responsible Teams +5. **Instructions** - Copy the message below and paste it into the **Instructions** field. -6. Select **Octopus Administrators** and **Octopus Managers** from the **Responsible Teams** dropdown list. + ```text + Please verify the Production environment is ready before proceeding. + ``` -### Environments +6. **Responsible Teams** - Select **Octopus Administrators** and **Octopus Managers** from the **Responsible Teams** dropdown list. 7. Select **Run only for specific environments**. 8. Select **Production** from the **Environments** dropdown list. @@ -61,7 +53,7 @@ Currently, your deployment process will run manual intervention after the script 1. Create a new release and deploy it through to the Production environment. -You will notice manual intervention doesn’t run in the Development or Staging environments. When the deployment reaches Production, it will pause and request approval. +You will notice manual intervention doesn't run in the Development or Staging environments. When the deployment reaches Production, it will pause and request approval. :::figure ![Manual intervention is required in production](/docs/img/getting-started/first-deployment/images/manual-intervention.png) diff --git a/src/pages/docs/getting-started/first-deployment/define-and-use-variables.md b/src/pages/docs/getting-started/first-deployment/define-and-use-variables.md index 1f0ed721dc..9f036496c7 100644 --- a/src/pages/docs/getting-started/first-deployment/define-and-use-variables.md +++ b/src/pages/docs/getting-started/first-deployment/define-and-use-variables.md @@ -15,7 +15,7 @@ Octopus lets you define variables and scope them for use in different phases of 1. From the *Hello world* project you created earlier, click **Project Variables** in the left menu. 2. Click **Create Variables**. 3. Add `Helloworld.Greeting` in the **Name** column, -4. Add `Hello, Development` in the **Value** column, +4. Add `Hello, Development` in the **Value** column, 5. Click the **Scope** column and select the `Development` environment. 6. Click **Add another value**. 7. Add `Hello, Staging` and scope it to the `Staging` environment. @@ -34,32 +34,32 @@ Steps in the deployment process can reference variables. 1. Click **Process** in the left menu. 2. Select the previously created **Run a Script** step. -### Inline Source Code + **Inline Source Code** 3. Based on your selected language, copy the appropriate script from below. 4. Replace the script in the code editor with the new script. -
-PowerShell +
+ PowerShell -```powershell -Write-Host $OctopusParameters["Helloworld.Greeting"] -``` + ```powershell + Write-Host $OctopusParameters["Helloworld.Greeting"] + ``` -
-
-Bash +
+
+ Bash -```bash -greeting=$(get_octopusvariable "Helloworld.Greeting") -echo $greeting -``` + ```bash + greeting=$(get_octopusvariable "Helloworld.Greeting") + echo $greeting + ``` -
+
-:::div{.hint} -If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. -::: + :::div{.hint} + If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. + ::: 5. Click **Save** 6. Click **Create Release**. @@ -67,14 +67,14 @@ If you are using Octopus Cloud, Bash scripts require you to select the **Hosted :::div{.hint} A release snapshots everything about your project, including variables and the deployment process. You have to create a new release to see any changes. ::: - + As you promote through the environments, you will see the greeting change. :::figure ![The results of the hello world deployment with variables](/docs/img/getting-started/first-deployment/images/environment-variables.png) ::: -Great job! Next, let's build on your deployment process and [add an approval process using manual interventions](/docs/getting-started/first-deployment/approvals-with-manual-interventions). +Great job! Next, let's build on your deployment process and [add an approval process using manual interventions](/docs/getting-started/first-deployment/approvals-with-manual-interventions). ### All guides in this tutorial series diff --git a/src/pages/docs/getting-started/first-deployment/deploy-a-package.md b/src/pages/docs/getting-started/first-deployment/deploy-a-package.mdx similarity index 64% rename from src/pages/docs/getting-started/first-deployment/deploy-a-package.md rename to src/pages/docs/getting-started/first-deployment/deploy-a-package.mdx index 3c136604ed..79f86886dc 100644 --- a/src/pages/docs/getting-started/first-deployment/deploy-a-package.md +++ b/src/pages/docs/getting-started/first-deployment/deploy-a-package.mdx @@ -7,6 +7,7 @@ description: Deploy a sample package using Octopus Deploy. Create a deploy packa navOrder: 80 hideInThisSection: true --- +import Image from "src/components/Image.astro"; Deploying software with Octopus often involves deploying packages, for example, `.zip`, `.nupkg`, `.jar`, `.tar`, etc. In this section, we'll walk you through the steps to deploy a sample hello world package to your deployment target. @@ -14,7 +15,7 @@ Deploying software with Octopus often involves deploying packages, for example, To learn about supported formats, versioning, and packaging applications, refer to the [packaging documentation](/docs/packaging-applications). ::: -## Before your start +## Before you start Please download our sample package: @@ -24,13 +25,12 @@ Please download our sample package: 1. From the left Deploy menu, click **Packages**. -:::figure -![Packages page](/docs/img/getting-started/first-deployment/images/packages-page.png) -::: - -2. Click **Upload Package**. -3. Select the package you want to upload. + :::figure + ![Packages page](/docs/img/getting-started/first-deployment/images/packages-page.png) + ::: +1. Click **Upload Package**. +1. Select the package you want to upload. ## Add deploy package step @@ -43,42 +43,34 @@ Add a step to the deployment process to push that package to your deployment tar 5. Select the **Package** category to filter the types of steps. 6. Locate the Deploy a Package card and click **Add Step**. -:::figure -![Add Deploy a Package step to deployment process](/docs/img/getting-started/first-deployment/images/deploy-package-step.png) -::: + Add Deploy a Package step to deployment process -### Step name +7. **Step name:** - You can leave this as the default *Deploy a Package*. +8. **Target tags:** - Select **tutorial-target** from the **Target Tags** dropdown list. -You can leave this as the default *Deploy a Package*. + :::div{.hint} + **Context for target tags** -### Target tags + When configuring your deployment process, you can click a target tag to see the deployment targets and environments the step will run on. -7. Select **tutorial-target** from the **Target Tags** dropdown list. + :::figure + ![Target tags popover that shows correlating deployment targets](/docs/img/getting-started/first-deployment/images/target-tags-popover.png) + ::: -:::div{.hint} -**Context for target tags** +9. **Package:** - Select **hello-world** from the **Package ID** dropdown list. -When configuring your deployment process, you can click a target tag to see the deployment targets and environments the step will run on. + You can skip the other sections of this page for this tutorial. -:::figure -![Target tags popover that shows correlating deployment targets](/docs/img/getting-started/first-deployment/images/target-tags-popover.png) -::: - -### Package - -8. Select **hello-world** from the **Package ID** dropdown list. - -You can skip the other sections of this page for this tutorial. - -**Save** your deployment process and you can move on to create and deploy a release. - -:::figure -![Deploy a package step with target tag and package selected](/docs/img/getting-started/first-deployment/images/deploy-package-step-form.png) -::: + **Save** your deployment process and you can move on to create and deploy a release. -## Release and deploy + :::figure + ![Deploy a package step with target tag and package selected](/docs/img/getting-started/first-deployment/images/deploy-package-step-form.png) + ::: -1. Create a new release and deploy it to the Development environment. +10. **Release and deploy** - Create a new release and deploy it to the Development environment. The release will deploy the *hello world* package to the *Hello world tutorial target*. diff --git a/src/pages/docs/getting-started/first-deployment/index.mdx b/src/pages/docs/getting-started/first-deployment/index.mdx index b0e173bce4..0036c34a9d 100644 --- a/src/pages/docs/getting-started/first-deployment/index.mdx +++ b/src/pages/docs/getting-started/first-deployment/index.mdx @@ -11,18 +11,19 @@ import OctopusDeploySetupOptions from 'src/shared-content/concepts/octopus-deplo 👋 Welcome to Octopus Deploy! -This tutorial series will help you complete your first deployment in Octopus Deploy. We’ll walk you through the steps to deploy a sample [hello world package](https://octopus.com/images/docs/hello-world.1.0.0.zip) to one or more of your servers. +This tutorial series will help you complete your first deployment in Octopus Deploy. We'll walk you through the steps to deploy a sample [hello world package](https://octopus.com/images/docs/hello-world.1.0.0.zip) to one or more of your servers. :::div{.hint} If you're using **Octopus 2024.2** or earlier, please visit one of these legacy guides: - **Octopus 2022.2** or earlier [read the 2022 guide](/docs/getting-started/first-deployment/legacy-guide/2022) - **Octopus 2024.2** or earlier [read the 2024 guide](/docs/getting-started/first-deployment/legacy-guide/2024) + ::: ## Before you start -To follow this tutorial, you will need an Octopus Deploy instance. If you haven’t already, set up an instance using one of these methods: +To follow this tutorial, you will need an Octopus Deploy instance. If you haven't already, set up an instance using one of these methods: @@ -30,28 +31,30 @@ To follow this tutorial, you will need an Octopus Deploy instance. If you haven 1. Log in to your Octopus instance and click **New Project**. -:::figure -![Get started welcome screen](/docs/img/getting-started/first-deployment/images/get-started.png) -::: + :::figure + ![Get started welcome screen](/docs/img/getting-started/first-deployment/images/get-started.png) + ::: -## Add project -Projects let you manage software applications and services, each with their own deployment process. + **Add project:** + + Projects let you manage software applications and services, each with their own deployment process. 2. Give your project a descriptive name, for example, `Hello world deployment`. -Octopus lets you store your deployment process, settings, and non-sensitive variables in either Octopus or a Git repository. + Octopus lets you store your deployment process, settings, and non-sensitive variables in either Octopus or a Git repository. 3. For this example, keep the default **Octopus** option selected. 4. Leave the rest as is and click **Create Project**. -:::figure -![Add new project screen](/docs/img/getting-started/first-deployment/images/add-new-project.png) -::: + :::figure + ![Add new project screen](/docs/img/getting-started/first-deployment/images/add-new-project.png) + ::: + + **Add environments:** -## Add environments -You'll need an environment to deploy to. + You'll need an environment to deploy to. -Environments are how you organize your infrastructure into groups representing the different stages of your deployment pipeline. For example, Development, Staging, and Production. + Environments are how you organize your infrastructure into groups representing the different stages of your deployment pipeline. For example, Development, Staging, and Production. 5. Keep the default environments and click **Create Environments**. @@ -61,65 +64,58 @@ Environments are how you organize your infrastructure into groups representing t ## Create deployment process -The next step is creating your deployment process. This is where you define the steps that Octopus uses to deploy your software. +The next step is creating your deployment process. This is where you define the steps that Octopus uses to deploy your software. -For this deployment, we will configure one step to print _Hello World_. +For this deployment, we will configure one step to print *Hello World*. 1. In the "Welcome to your Project" dialog, click **Thanks, got it**. -Octopus lands you in the process step template library. + Octopus lands you in the process step template library. 2. In the **Featured** category, locate the Run a Script card and click **Add Step**. -:::figure -![Add Run a Script step to deployment process](/docs/img/getting-started/first-deployment/images/run-script-step.png) -::: + :::figure + ![Add Run a Script step to deployment process](/docs/img/getting-started/first-deployment/images/run-script-step.png) + ::: -### Step Name -You can leave this as the default _Run a Script_. + **Step Name:** You can leave this as the default *Run a Script*. -### Script Source + **Script Source:** You can source script files via 3 methods: -You can source script files via 3 methods: + - Inline script (default) + - Git repository + - Package -- Inline script (default) -- Git repository -- Package +3. Select **Inline script** as your script source. -3. Select **Inline script** as your script source. + :::figure + ![Script source expander where users can select where to source scripts from](/docs/img/getting-started/first-deployment/images/script-source.png) + ::: -:::figure -![Script source expander where users can select where to source scripts from](/docs/img/getting-started/first-deployment/images/script-source.png) -::: - -### Inline Source Code - -4. Select an appropriate script language. -5. **Copy** the script below and **paste** it into the source code editor. +4. **Inline Source Code:** + 1. Select an appropriate script language. + 2. **Copy** the script below and **paste** it into the source code editor. -``` -Write-Host "Hello, World!" -``` + ```powershell + Write-Host "Hello, World!" + ``` -:::figure -![Inline source code expander where users can type a script](/docs/img/getting-started/first-deployment/images/inline-source-code.png) -::: + :::figure + ![Inline source code expander where users can type a script](/docs/img/getting-started/first-deployment/images/inline-source-code.png) + ::: -### Execution Location - -6. If you’re using Octopus Cloud, select **Run once on a worker**. -7. If you’re using a self-hosted Octopus instance, select **Run once on the Octopus Server**. - -:::figure -![Execution location expander where users can select where this step will run](/docs/img/getting-started/first-deployment/images/execution-location.png) -::: +5. **Execution Location:** + 1. If you're using Octopus Cloud, select **Run once on a worker**. + 2. If you're using a self-hosted Octopus instance, select **Run once on the Octopus Server**. -### Worker Pool + :::figure + ![Execution location expander where users can select where this step will run](/docs/img/getting-started/first-deployment/images/execution-location.png) + ::: -8. If you’re using Octopus Cloud, keep the default **Runs on a worker from a specific worker pool** option selected. +6. **Worker Pool:** If you're using Octopus Cloud, keep the default **Runs on a worker from a specific worker pool** option selected. :::div{.hint} -If you’re using Octopus Cloud and a Bash script language, select the Hosted Ubuntu option from the dropdown. The Default Worker Pool is running Windows and doesn’t have Bash installed. +If you're using Octopus Cloud and a Bash script language, select the Hosted Ubuntu option from the dropdown. The Default Worker Pool is running Windows and doesn't have Bash installed. ::: :::figure @@ -144,7 +140,7 @@ A release is a snapshot of the deployment process and the associated assets (pac Deployments typically occur in a defined environment order (for example, Development ➜ Staging ➜ Production), starting with the first one. Later you can configure Lifecycles with complex promotion rules to accurately reflect how you want to release software. 1. Click the **Deploy to Development…** button to deploy to the development environment. -2. Review the preview summary and when you’re ready, click **Deploy**. +2. Review the preview summary and when you're ready, click **Deploy**. The **Task Log** will show you in real-time the tasks Octopus is taking to run your Hello World script. @@ -152,9 +148,9 @@ The **Task Log** will show you in real-time the tasks Octopus is taking to run y ![Successful first deployment message](/docs/img/getting-started/first-deployment/images/successful-deployment.png) ::: -You successfully completed your first deployment! 🎉 +You successfully completed your first deployment! 🎉 -Up next, we’ll introduce you to the [power of variables](/docs/getting-started/first-deployment/define-and-use-variables). +Up next, we'll introduce you to the [power of variables](/docs/getting-started/first-deployment/define-and-use-variables). :::div{.hint} **⭐ Favoriting projects** diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/configure-environments.mdx b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/configure-environments.mdx index 4969576476..e88afea7e3 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/configure-environments.mdx +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/configure-environments.mdx @@ -13,7 +13,7 @@ import CreatingEnvironments from 'src/shared-content/concepts/creating-environme The next step will [create a project](/docs/getting-started/first-deployment/legacy-guide/2022/create-projects). -**Further Reading** +**Further Reading:** For further reading on environments in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-and-deploy-a-release.md b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-and-deploy-a-release.md index c061241aab..d23250de1d 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-and-deploy-a-release.md +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-and-deploy-a-release.md @@ -18,14 +18,14 @@ When you deploy the release, you execute the deployment process with all the ass 1. The release is created and given a version number. There is a space to add release notes—click **SAVE**. 1. To deploy this version of the release, click **DEPLOY TO TEST...**. -The next screen gives you the details of the release you are about to deploy: + The next screen gives you the details of the release you are about to deploy: -:::figure -![Deploy release screen in the Octopus Web Portal](/docs/img/getting-started/first-deployment/legacy-guide/images/deploy-release.png) -::: + :::figure + ![Deploy release screen in the Octopus Web Portal](/docs/img/getting-started/first-deployment/legacy-guide/images/deploy-release.png) + ::: -4. To deploy the release, click **Deploy**. -5. The next screen displays a task summary. If you click the **TASK LOG**, you'll see the steps Octopus took to execute your hello world script. +1. To deploy the release, click **Deploy**. +1. The next screen displays a task summary. If you click the **TASK LOG**, you'll see the steps Octopus took to execute your hello world script. Because we didn't define any deployment targets for the **Test** environment, Octopus leased a [dynamic worker](/docs/infrastructure/workers/dynamic-worker-pools/#on-demand) (a machine that executes tasks on behalf of the Octopus Server) that was then used to execute the hello world script. If you are on a self-hosted instance of Octopus Deploy, you won't see that message. @@ -35,7 +35,7 @@ Because we didn't define any deployment targets for the **Test** environment, Oc You have finished your first deployment! But there is still a bit of work to do. The next step will [define and use variables](/docs/getting-started/first-deployment/define-and-use-variables) in the deployment process. -**Further Reading** +**Further Reading:** For further reading on creating releases in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-projects.mdx b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-projects.mdx index e6e7d549ff..bae33bbf95 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-projects.mdx +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/create-projects.mdx @@ -14,7 +14,7 @@ import CreateProjects from 'src/shared-content/concepts/create-projects.include. The next step will [define the deployment process](/docs/getting-started/first-deployment/legacy-guide/2022/define-the-deployment-process) in the newly created project. -**Further Reading** +**Further Reading:** For further reading on projects in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/define-the-deployment-process.md b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/define-the-deployment-process.md index c2bc494730..9cefb3a025 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/define-the-deployment-process.md +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/define-the-deployment-process.md @@ -25,32 +25,32 @@ The deployment process is the steps the Octopus Server orchestrates to deploy yo 1. In the **Execution Location** section, select **Run once on a worker** (if you are on self-hosted Octopus, select **Run once on the Octopus Server**). If you are using Octopus Cloud and want to use Bash scripts change the worker pool from **Default Worker Pool** to **Hosted Ubuntu**. 1. Scroll down to the **Script**, select your script language of choice, and enter the following script in the **Inline Source Code** section: -
-PowerShell +
+ PowerShell -```powershell -Write-Host "Hello, World!" -``` + ```powershell + Write-Host "Hello, World!" + ``` -
-
-Bash +
+
+ Bash -```bash -echo "Hello, World!" -``` + ```bash + echo "Hello, World!" + ``` -
+
-:::div{.hint} -If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. -::: + :::div{.hint} + If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. + ::: -8. Click **SAVE**. +1. Click **SAVE**. The next step will [create a release and deploy it](/docs/getting-started/first-deployment/legacy-guide/2022/create-and-deploy-a-release). -**Further Reading** +**Further Reading:** For further reading on defining a deployment process in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/index.mdx b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/index.mdx index 61541e4ce6..b7a18ded4b 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/index.mdx +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2022/index.mdx @@ -16,8 +16,9 @@ import OctopusDeploySetupOptions from 'src/shared-content/concepts/octopus-deplo :::div{.hint} **Other versions of this guide** -* **Octopus 2024.3** or newer [First deployment guide](/docs/getting-started/first-deployment) -* **Octopus 2022.3** or newer [First deployment guide](/docs/getting-started/first-deployment/legacy-guide/2024) +- **Octopus 2024.3** or newer [First deployment guide](/docs/getting-started/first-deployment) +- **Octopus 2022.3** or newer [First deployment guide](/docs/getting-started/first-deployment/legacy-guide/2024) + ::: This tutorial will help you complete your first deployment in Octopus Deploy. It will walk through the steps to deploy a sample [hello world package](https://octopus.com/images/docs/hello-world.1.0.0.zip) to one or more of your servers. The only prerequisite is a running Octopus Deploy instance, either in Octopus Cloud or self-hosted. The tutorial assumes you have a brand new instance running and will walk through the rest of the setup, including configuring deployment targets. @@ -39,7 +40,7 @@ Before starting the tutorial, if you haven't set up an Octopus Deploy instance, When you have an instance running, go to the [configure environments page](/docs/getting-started/first-deployment/legacy-guide/2022/configure-environments) to get started. -**Further Reading** +**Further Reading:** This tutorial will deploy a sample package to your servers. If you prefer to skip that and start configuring Octopus Deploy for your application right away, please see: diff --git a/src/pages/docs/getting-started/first-deployment/legacy-guide/2024/index.mdx b/src/pages/docs/getting-started/first-deployment/legacy-guide/2024/index.mdx index a49594a0ca..5aa47d081b 100644 --- a/src/pages/docs/getting-started/first-deployment/legacy-guide/2024/index.mdx +++ b/src/pages/docs/getting-started/first-deployment/legacy-guide/2024/index.mdx @@ -20,8 +20,9 @@ This tutorial will help you complete your first deployment in Octopus Deploy. We :::div{.hint} **Other versions of this guide** -* **Octopus 2022.2** or earlier [First deployment guide](/docs/getting-started/first-deployment/legacy-guide/2022) -* **Octopus 2024.3** or newer [First deployment guide](/docs/getting-started/first-deployment) +- **Octopus 2022.2** or earlier [First deployment guide](/docs/getting-started/first-deployment/legacy-guide/2022) +- **Octopus 2024.3** or newer [First deployment guide](/docs/getting-started/first-deployment) + ::: Before starting the tutorial, if you haven't set up an Octopus Deploy instance, please do so by picking from one of the following options: @@ -67,7 +68,7 @@ Click **SUBMIT** and you will be taken to your project. ## Create deployment process -The next step in the journey is to create your deployment process. This is where you define the steps that Octopus uses to deploy your software. For our simple Hello World deployment, we will configure one step to print _Hello World_. +The next step in the journey is to create your deployment process. This is where you define the steps that Octopus uses to deploy your software. For our simple Hello World deployment, we will configure one step to print *Hello World*. :::figure ![Create deployment process](/docs/img/getting-started/first-deployment/legacy-guide/images/img-createdeploymentprocess.png) @@ -78,14 +79,15 @@ The next step in the journey is to create your deployment process. This is where 3. Scroll down and click **ADD** on the **Run a Script** tile. 4. Accept the default name for the script. 5. In the Execution Location section, select **Run once on a worker** if you're using Octopus Cloud, or **Run once on the Octopus Server** if you're using a self-hosted Octopus instance. -6. Scroll down to the Script section, select your script language of choice, and enter the following script in the Inline Source Code section. -``` -Write-Host "Hello, World!" -``` +6. Scroll down to the Script section, select your script language of choice, and enter the following script in the Inline Source Code section. -:::div{.hint} -If you are using Octopus Cloud, Bash scripts require you to select the Hosted Ubuntu worker pool. The Default Worker Pool is running Windows and doesn't have Bash installed. -::: + ```bash + Write-Host "Hello, World!" + ``` + + :::div{.hint} + If you are using Octopus Cloud, Bash scripts require you to select the Hosted Ubuntu worker pool. The Default Worker Pool is running Windows and doesn't have Bash installed. + ::: 7. Click **SAVE** to save the step. @@ -119,7 +121,7 @@ Subsequent pages in the guide: 3. [Add deployment targets](/docs/getting-started/first-deployment/add-deployment-targets) 4. [Deploy a sample package](/docs/getting-started/first-deployment/deploy-a-package) -**Further Reading** +**Further Reading:** This tutorial will deploy a sample package to your servers. If you prefer to skip that and start configuring Octopus Deploy for your application right away, please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/add-runbook-deployment-targets.mdx b/src/pages/docs/getting-started/first-runbook-run/add-runbook-deployment-targets.mdx index b7085f4d8e..0380cfa650 100644 --- a/src/pages/docs/getting-started/first-runbook-run/add-runbook-deployment-targets.mdx +++ b/src/pages/docs/getting-started/first-runbook-run/add-runbook-deployment-targets.mdx @@ -13,7 +13,7 @@ import AddDeploymentTargets from 'src/shared-content/concepts/add-deployment-tar The next step of this guide will [update the runbook process](/docs/getting-started/first-runbook-run/define-the-runbook-process-for-targets) to run a script on those newly created runbook targets. -**Further Reading** +**Further Reading:** For further reading on deployment targets in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/configure-runbook-environments.mdx b/src/pages/docs/getting-started/first-runbook-run/configure-runbook-environments.mdx index cb8fb209dd..999e138788 100644 --- a/src/pages/docs/getting-started/first-runbook-run/configure-runbook-environments.mdx +++ b/src/pages/docs/getting-started/first-runbook-run/configure-runbook-environments.mdx @@ -17,7 +17,7 @@ Try to reuse the same environments as your deployments whenever possible. You w The next step will [create a project to house the runbook](/docs/getting-started/first-runbook-run/create-runbook-projects). -**Further Reading** +**Further Reading:** For further reading on deployment targets in Octopus Deploy please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/create-a-runbook.md b/src/pages/docs/getting-started/first-runbook-run/create-a-runbook.md index 0a703a0351..55acf65586 100644 --- a/src/pages/docs/getting-started/first-runbook-run/create-a-runbook.md +++ b/src/pages/docs/getting-started/first-runbook-run/create-a-runbook.md @@ -15,13 +15,13 @@ A single Octopus Deploy Project can have multiple Runbooks. Each Runbook has a ::: 1. From the *Hello world* project you created on the previous page, click **OPERATIONS** on the left menu to expand it (if it is not already expanded). -1. Click **GO TO RUNBOOKS**. +1. Click **GO TO RUNBOOKS**. 1. Click **ADD RUNBOOK**. 1. Give the Runbook a name, for example, *Hello Runbook* and click **SAVE**. The next step will [define a simple runbook process](/docs/getting-started/first-runbook-run/define-the-runbook-process) to run on either the Octopus Server or a worker (if you are using Octopus Cloud). -**Further Reading** +**Further Reading:** For further reading on Runbooks please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/create-runbook-projects.mdx b/src/pages/docs/getting-started/first-runbook-run/create-runbook-projects.mdx index 954aa79236..0c5c02cffd 100644 --- a/src/pages/docs/getting-started/first-runbook-run/create-runbook-projects.mdx +++ b/src/pages/docs/getting-started/first-runbook-run/create-runbook-projects.mdx @@ -13,7 +13,7 @@ import CreateProjects from 'src/shared-content/concepts/create-projects.include. The next step will [create a runbook](/docs/getting-started/first-runbook-run/create-a-runbook) in the newly created project. -**Further Reading** +**Further Reading:** For further reading on Runbooks and projects please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process-for-targets.md b/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process-for-targets.md index 02baaec912..7c8e75bc48 100644 --- a/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process-for-targets.md +++ b/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process-for-targets.md @@ -16,44 +16,44 @@ A runbook process can run steps, which include scripts, on the Octopus Server, a 1. Click **ADD STEP**. 1. Select the **Script** tile to filter the types of steps. 1. Scroll down and click **ADD** on the **Run a Script** tile. -1. Change **Name** of the script to be "Run a script on deployment targets" for the script +1. Change **Name** of the script to be "Run a script on deployment targets" for the script 1. Leave the **Enabled** check-box ticked. 1. In the **Execution Location** section change the option to be **Run on each deployment target**. 1. In the **Target Tags** section change the tag to be `Hello-World`. -:::figure -![Changing the script step to run on a deployment target](/docs/img/getting-started/first-runbook-run/images/run-script-on-deployment-target.png) -::: + :::figure + ![Changing the script step to run on a deployment target](/docs/img/getting-started/first-runbook-run/images/run-script-on-deployment-target.png) + ::: -:::div{.hint} -Not all steps can run on deployment targets. A step missing the option **Target Tags** indicates that step must run on the Octopus Server or a [on a worker](/docs/infrastructure/workers) -::: + :::div{.hint} + Not all steps can run on deployment targets. A step missing the option **Target Tags** indicates that step must run on the Octopus Server or a [on a worker](/docs/infrastructure/workers) + ::: -11. Scroll down to the **Script**, select your script language of choice and enter the following script in the **Inline Source Code** section: +1. Scroll down to the **Script**, select your script language of choice and enter the following script in the **Inline Source Code** section: -
-PowerShell +
+ PowerShell -```powershell -Write-Host $OctopusParameters["Helloworld.Greeting"] -Write-Host $OctopusParameters["Octopus.Machine.Name"] -``` + ```powershell + Write-Host $OctopusParameters["Helloworld.Greeting"] + Write-Host $OctopusParameters["Octopus.Machine.Name"] + ``` -
-
-Bash +
+
+ Bash -```bash -greeting=$(get_octopusvariable "Helloworld.Greeting") -echo $greeting -machineName=$(get_octopusvariable "Octopus.Machine.Name") -echo $machineName -``` + ```bash + greeting=$(get_octopusvariable "Helloworld.Greeting") + echo $greeting + machineName=$(get_octopusvariable "Octopus.Machine.Name") + echo $machineName + ``` -
+
-1. Click **SAVE** -2. Click **RUN...** and select an environment to run on. +1. Click **SAVE** +1. Click **RUN...** and select an environment to run on. :::figure ![Running the runbook script on a deployment target](/docs/img/getting-started/first-runbook-run/images/run-deployment-target-results.png) @@ -65,7 +65,7 @@ Not all scripts should run on a deployment target. A rule of thumb is a script The next step will [publish the runbook](/docs/getting-started/first-runbook-run/publishing-a-runbook) so it can used by triggers and users have a known version to run. -**Further Reading** +**Further Reading:** For further reading on runbook processes and what is possible please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process.md b/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process.md index 88c5e5a660..d536bda790 100644 --- a/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process.md +++ b/src/pages/docs/getting-started/first-runbook-run/define-the-runbook-process.md @@ -47,7 +47,7 @@ If you are using Octopus Cloud, Bash scripts require you to select the **Hosted The next step will [run the runbook](/docs/getting-started/first-runbook-run/running-a-runbook). -**Further Reading** +**Further Reading:** For further reading on runbook processes and what is possible please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/index.mdx b/src/pages/docs/getting-started/first-runbook-run/index.mdx index 7ae42475d0..928eccf134 100644 --- a/src/pages/docs/getting-started/first-runbook-run/index.mdx +++ b/src/pages/docs/getting-started/first-runbook-run/index.mdx @@ -29,9 +29,9 @@ Before starting the tutorial, if you haven't set up an Octopus Deploy instance, When you have an instance running, go to the [configure runbook environments page](/docs/getting-started/first-runbook-run/configure-runbook-environments) to get started. -**Further Reading** +**Further Reading:** This tutorial will run a sample script, first on the default worker or your server; then, it will move onto running that script on your servers. If you prefer to skip that and start configuring Octopus Deploy runbooks to meet your requirements, please see: -- [Runbook Documentation](/docs/runbooks) +- [Runbook Documentation](/docs/runbooks) - [Runbook Examples](/docs/runbooks/runbook-examples) diff --git a/src/pages/docs/getting-started/first-runbook-run/publishing-a-runbook.md b/src/pages/docs/getting-started/first-runbook-run/publishing-a-runbook.md index 221e96a225..92421c7848 100644 --- a/src/pages/docs/getting-started/first-runbook-run/publishing-a-runbook.md +++ b/src/pages/docs/getting-started/first-runbook-run/publishing-a-runbook.md @@ -27,7 +27,7 @@ The specific version of any packages used in a runbook process is included in th You have now completed the tutorial for running your first runbook! -**Further Reading** +**Further Reading:** This tutorial is designed to cover the basics of how to configure runbooks and how they work. For further reading please see: diff --git a/src/pages/docs/getting-started/first-runbook-run/runbook-specific-variables.md b/src/pages/docs/getting-started/first-runbook-run/runbook-specific-variables.md index c2408363dc..12cd226b1a 100644 --- a/src/pages/docs/getting-started/first-runbook-run/runbook-specific-variables.md +++ b/src/pages/docs/getting-started/first-runbook-run/runbook-specific-variables.md @@ -36,30 +36,30 @@ Steps in the runbook process can reference the variables. 1. Select the script step. 1. Change the script in the script step based on your language of choice: -
-PowerShell +
+ PowerShell -```powershell -Write-Host $OctopusParameters["Helloworld.Greeting"] -``` + ```powershell + Write-Host $OctopusParameters["Helloworld.Greeting"] + ``` -
-
-Bash +
+
+ Bash -```bash -greeting=$(get_octopusvariable "Helloworld.Greeting") -echo $greeting -``` + ```bash + greeting=$(get_octopusvariable "Helloworld.Greeting") + echo $greeting + ``` -
+
-:::div{.hint} -If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. -::: + :::div{.hint} + If you are using Octopus Cloud, Bash scripts require you to select the **Hosted Ubuntu** worker pool. The **Default Worker Pool** is running Windows and doesn't have Bash installed. + ::: -6. Click the **SAVE** button. -7. Click the **RUN...** button, select and environment, and run the Runbook. +1. Click the **SAVE** button. +1. Click the **RUN...** button, select and environment, and run the Runbook. :::figure ![The results of the hello world runbook run with variables](/docs/img/getting-started/first-runbook-run/images/runbook-run-with-variables.png) @@ -67,7 +67,7 @@ If you are using Octopus Cloud, Bash scripts require you to select the **Hosted The next step will [add deployment targets to run runbooks on](/docs/getting-started/first-runbook-run/add-runbook-deployment-targets). -**Further Reading** +**Further Reading:** For further reading on Runbook variables please see: diff --git a/src/pages/docs/getting-started/managing-octopus-subscriptions.md b/src/pages/docs/getting-started/managing-octopus-subscriptions.md index d01bc02ef7..eda4f082cf 100644 --- a/src/pages/docs/getting-started/managing-octopus-subscriptions.md +++ b/src/pages/docs/getting-started/managing-octopus-subscriptions.md @@ -103,7 +103,7 @@ Invite a user to manage a subscription group and access all current and future s 1. In the [Control Center](https://billing.octopus.com/) dashboard, locate your subscription group. 2. Click **User Access**. 3. Click **Invite User**. -4. Enter the user’s details. +4. Enter the user's details. 5. Select which role to give the user ([see role permissions below](#role-permissions-for-subscription-group-access)). 6. Click **Invite**. @@ -123,8 +123,8 @@ Otherwise, they will first need to **Register** a new account using the email ad ##### Group-level -| | Administrator | Technical Manager | Billing Manager | -| ------------ | ------------------------ | ------------------------------ | ----------------------- | +| -- | Administrator | Technical Manager | Billing Manager | +| -- | -- | -- | -- | | **Control Center**
(billing.octopus.com)
| Rename/Delete Group
Manage User Access
| Rename/Delete Group
Manage User Access
| - | ##### Subscription-level @@ -132,23 +132,22 @@ Otherwise, they will first need to **Register** a new account using the email ad
Cloud -| | Administrator | Technical Manager | Billing Manager | -| ------------ | ------------------------ | ------------------------------ | ----------------------- | +| -- | Administrator | Technical Manager | Billing Manager | +| -- | -- | -- | -- | | **Control Center**
(billing.octopus.com)
| View Overview
Manage Billing
Manage Configuration
Manage User Access
| View Overview
Manage Configuration
Manage User Access | View Overview
Manage Billing
| -| **Octopus Instance**
(example.octopus.com)
| “Octopus Managers" team | “Space Managers” team | - | +| **Octopus Instance**
(example.octopus.com)
| "Octopus Managers" team | "Space Managers" team | - | :::div{.hint} -Octopus uses teams and user roles to manage permissions. The “Octopus Managers” and “Space Managers” teams provide different levels of access in your instance. Learn about best practices for [users, roles, and teams](/docs/best-practices/octopus-administration/users-roles-and-teams). +Octopus uses teams and user roles to manage permissions. The "Octopus Managers" and "Space Managers" teams provide different levels of access in your instance. Learn about best practices for [users, roles, and teams](/docs/best-practices/octopus-administration/users-roles-and-teams). :::
Server -| | Administrator | Technical Manager | Billing Manager | -| ------------ | ------------------------ | ------------------------------ | ----------------------- | -| **Control Center**
(billing.octopus.com)
| View License Key
Manage Billing
Manage User Access | View License Key
Manage User Access
| View License Key
Manage Billing
| - +| -- | Administrator | Technical Manager | Billing Manager | +| -- | -- | -- | -- | +| **Control Center**
(billing.octopus.com)
| View License Key
Manage Billing
Manage User Access | View License Key
Manage User Access
| View License Key
Manage Billing
|
@@ -163,7 +162,7 @@ Invite a user to access a specific subscription. 1. Navigate to your Cloud instance in [Control Center](https://billing.octopus.com/). 2. Click **User Access** in the left sidebar. 3. Click **Invite User**. -4. Enter the user’s details. +4. Enter the user's details. 5. Select which role to give the user ([see role permissions below](#role-permissions-for-direct-access)). 6. Click **Invite**. @@ -172,7 +171,7 @@ Invite a user to access a specific subscription. 1. Navigate to your Server license in [Control Center](https://billing.octopus.com/). 2. Click **Admin Access** in the left sidebar. 3. Click **Invite Admin**. -4. Enter the user’s details. +4. Enter the user's details. 5. Select which role to give the user ([see role permissions below](#role-permissions-for-direct-access)). 6. Click **Invite**. @@ -189,7 +188,7 @@ If they already have an [Octopus ID](/docs/security/authentication/octopusid-aut Otherwise, they will first need to **Register** a new account using the email address the invitation was sent to. :::div{.hint} -**Cloud instances note:** Invited users are only added to an Octopus Cloud instance after their first sign-in. To manage a newly invited user’s permissions, you will need to ask them to sign in to your Octopus Cloud instance first. +**Cloud instances note:** Invited users are only added to an Octopus Cloud instance after their first sign-in. To manage a newly invited user's permissions, you will need to ask them to sign in to your Octopus Cloud instance first. ::: #### Role permissions for Direct access @@ -197,21 +196,21 @@ Otherwise, they will first need to **Register** a new account using the email ad
Cloud -| | Cloud Subscription Owner | Cloud Subscription User (Contributor) | Cloud Subscription User (Base) | -| --------------------------- | ---------------------------------------- | ------------------------------------------------ | ------------------------------------------------ | +| -- | Cloud Subscription Owner | Cloud Subscription User (Contributor) | Cloud Subscription User (Base) | +| -- | -- | -- | -- | | **Control Center**
(billing.octopus.com)
| View Overview
Manage Billing
Manage Configuration
Manage User Access
| View Overview | View Overview | -| **Octopus Instance**
(example.octopus.com)
| “Octopus Managers” team
By default, the user has full permissions across all spaces.
| “Space Managers” team
By default, the user has full permissions in the “Default” space only.
If you delete the “Default” space, the user will be added to the “Everyone” team.
| “Everyone” team
By default, the user can sign in but can't view or do anything.
| +| **Octopus Instance**
(example.octopus.com)
| "Octopus Managers" team
By default, the user has full permissions across all spaces.
| "Space Managers" team
By default, the user has full permissions in the "Default" space only.
If you delete the "Default" space, the user will be added to the "Everyone" team.
| "Everyone" team
By default, the user can sign in but can't view or do anything.
| :::div{.hint} -Octopus uses teams and user roles to manage permissions. The “Octopus Managers”, “Space Managers”, and “Everyone” teams provide different levels of access in your instance. Learn about best practices for [users, roles, and teams](/docs/best-practices/octopus-administration/users-roles-and-teams). +Octopus uses teams and user roles to manage permissions. The "Octopus Managers", "Space Managers", and "Everyone" teams provide different levels of access in your instance. Learn about best practices for [users, roles, and teams](/docs/best-practices/octopus-administration/users-roles-and-teams). :::
Server -| | Server License Owner | Server License Viewer | -| ------------ | ------------------------------ | ------------------------------| +| -- | Server License Owner | Server License Viewer | +| -- | -- | -- | | **Control Center**
(billing.octopus.com)
| View License Key
Manage Billing
Manage User Access | View License Key |
diff --git a/src/pages/docs/getting-started/reference-architectures/eks-reference-architecture.md b/src/pages/docs/getting-started/reference-architectures/eks-reference-architecture.md index a924f25bfa..4a58a6e8b2 100644 --- a/src/pages/docs/getting-started/reference-architectures/eks-reference-architecture.md +++ b/src/pages/docs/getting-started/reference-architectures/eks-reference-architecture.md @@ -21,19 +21,19 @@ Hosted Octopus users should use the `Hosted Ubuntu` worker pool and run the step The step exposes a number of options, typically requesting credentials to the various platforms that are configured to support EKS deployments: -* `AWS Access Key` and `AWS Secret Key` require the [access keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) of the user that will create the EKS cluster. -* `Docker Hub Username` and `Docker Hub Password` require the credentials of a [Docker Hub user](https://docs.docker.com/docker-id/) that is used to access sample Docker images from public DockerHub repositories. These credentials are also used by a sample GitHub Actions workflow that publishes Docker images. -* `GitHub Access Token` requires the [GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) of a user that is used to create a new GitHub repository holding a sample application. -* `Octopus API Key` requires an [API key](https://octopus.com/docs/octopus-rest-api/how-to-create-an-api-key) to the Octopus instance where the reference architecture projects and supporting resources are created. -* `Octopus Space ID` requires the space ID where the reference architecture projects and supporting resources are created. Leave the default value to populate the same space as the runbook. -* `Octopus Server URL` requires the URL of the Octopus instance where the reference architecture projects and supporting resources are created. Leave the default value to populate the same instance as the runbook. -* `Optional Terraform Apply Args` allows custom arguments to be passed to the `terraform apply` command. The Terraform module applied by this step exposes a number of optional variables that can be defined as apply arguments. These arguments can be defined by setting this field to a value like `-var=project_template_project_name=renamed -var=infrastructure_project_name=renamed2 -var=frontend_project_name=renamed3 -var=products_project_name=renamed4 -var=audits_project_name=renamed5`: - * `infrastructure_project_name` defines the name of the `_ AWS EKS Infrastructure` project - * `project_template_project_name` defines the name of the `Docker Project Templates` project - * `frontend_project_name` defines the name of the `EKS Octopub Frontend` project - * `products_project_name` defines the name of the `EKS Octopub Products` project - * `audits_project_name` defines the name of the `EKS Octopub Audits` project -* `Optional Terraform Init Args` allows custom argument to be passed to the `terraform init` command. Leave this field blank unless you have a specific use case. +- `AWS Access Key` and `AWS Secret Key` require the [access keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) of the user that will create the EKS cluster. +- `Docker Hub Username` and `Docker Hub Password` require the credentials of a [Docker Hub user](https://docs.docker.com/docker-id/) that is used to access sample Docker images from public DockerHub repositories. These credentials are also used by a sample GitHub Actions workflow that publishes Docker images. +- `GitHub Access Token` requires the [GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) of a user that is used to create a new GitHub repository holding a sample application. +- `Octopus API Key` requires an [API key](https://octopus.com/docs/octopus-rest-api/how-to-create-an-api-key) to the Octopus instance where the reference architecture projects and supporting resources are created. +- `Octopus Space ID` requires the space ID where the reference architecture projects and supporting resources are created. Leave the default value to populate the same space as the runbook. +- `Octopus Server URL` requires the URL of the Octopus instance where the reference architecture projects and supporting resources are created. Leave the default value to populate the same instance as the runbook. +- `Optional Terraform Apply Args` allows custom arguments to be passed to the `terraform apply` command. The Terraform module applied by this step exposes a number of optional variables that can be defined as apply arguments. These arguments can be defined by setting this field to a value like `-var=project_template_project_name=renamed -var=infrastructure_project_name=renamed2 -var=frontend_project_name=renamed3 -var=products_project_name=renamed4 -var=audits_project_name=renamed5`: + - `infrastructure_project_name` defines the name of the `_ AWS EKS Infrastructure` project + - `project_template_project_name` defines the name of the `Docker Project Templates` project + - `frontend_project_name` defines the name of the `EKS Octopub Frontend` project + - `products_project_name` defines the name of the `EKS Octopub Products` project + - `audits_project_name` defines the name of the `EKS Octopub Audits` project +- `Optional Terraform Init Args` allows custom argument to be passed to the `terraform init` command. Leave this field blank unless you have a specific use case. ### Reference projects @@ -41,11 +41,11 @@ The step creates a number of reference projects demonstrating how to deploy appl The `_ AWS EKS Infrastructure` project contains a runbook called `Create EKS Cluster`. This runbook creates a [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) EKS cluster with the supplied name in the supplied region and then installs the NGINX ingress controller on it. The script then creates a new [Kubernetes target](/docs/kubernetes/targets/kubernetes-api) using [dynamic infrastructure](/docs/infrastructure/deployment-targets/dynamic-infrastructure). This cluster can be destroyed with the `Delete EKS Cluster` runbook. -The `EKS Octopub Audits`, `EKS Octopub Frontend`, `EKS Octopub Products` projects deploy the [Octopub](https://github.com/OctopusSolutionsEngineering/Octopub) sample application to the EKS cluster, performs a smoke test, and scans the [SBOM](https://www.cisa.gov/sbom) associated with each image using [Trivy](https://aquasecurity.github.io/trivy/). Each of these projects have a number of supporting runbooks to inspect Kubernetes resources. +The `EKS Octopub Audits`, `EKS Octopub Frontend`, `EKS Octopub Products` projects deploy the [Octopub](https://github.com/OctopusSolutionsEngineering/Octopub) sample application to the EKS cluster, performs a smoke test, and scans the [SBOM](https://www.cisa.gov/sbom) associated with each image using [Trivy](https://aquasecurity.github.io/trivy/). Each of these projects have a number of supporting runbooks to inspect Kubernetes resources. In addition, there are two runbooks called `Scale Pods to One` and `Scale Pods to Zero` that scale the number of pods associated with the deployment. These runbooks are expected to be triggered in the morning and afternoon to scale non-production environments up and down. Because the pods are run on Fargate nodes, scaling a deployment to zero removes the compute costs associated with them. -The `_ Deploy EKS Octopub Stack` project uses the [Deploy a release](/docs/projects/coordinating-multiple-projects/deploy-release-step) step to orchestrate the deployment of the individual microservices that make up the Octopub sample application. Orchestration projects provide a convenient way of promoting multiple related releases between environments in a predefined order, which may be required when applications are tightly bound or a well-defined set of release versions must be installed as a group. +The `_ Deploy EKS Octopub Stack` project uses the [Deploy a release](/docs/projects/coordinating-multiple-projects/deploy-release-step) step to orchestrate the deployment of the individual microservices that make up the Octopub sample application. Orchestration projects provide a convenient way of promoting multiple related releases between environments in a predefined order, which may be required when applications are tightly bound or a well-defined set of release versions must be installed as a group. The `Docker Project Templates` project contains a runbook called `Create Template Github Node.js Project` that: @@ -61,14 +61,14 @@ This reference architecture provides the ability to deploy feature branch builds The implementation satisfies these requirements: -* Feature branches are deployed to their own namespace -* Feature branch builds can not be promoted to production -* The feature branch environment is initially populated with the set of applications in another environment -* Feature branch artifacts are identified by the [prerelease component of their version](https://semver.org/) e.g. `myfeature` in the version `0.2.8-myfeature.4` +- Feature branches are deployed to their own namespace +- Feature branch builds can not be promoted to production +- The feature branch environment is initially populated with the set of applications in another environment +- Feature branch artifacts are identified by the [prerelease component of their version](https://semver.org/) e.g. `myfeature` in the version `0.2.8-myfeature.4` Feature branch deployments are performed in the environment called `Feature Branch`. This environment is defined as an optional phase after `Development` for regular mainline deployments. Typically, mainline deployments will skip the `Feature Branch` environment, but it is possible to promote deployments from `Development` to `Feature Branch` in order to recreate the `Development` environment for the purposes of testing a feature branch build. -Each application deployment project has two channels: `Mainline` and `Feature Branch`. The `Mainline` channel requires containers to have no prerelease component in their tags. The `Feature Branch` channel has no restrictions, allowing both mainline and feature branch builds to be deployed. +Each application deployment project has two channels: `Mainline` and `Feature Branch`. The `Mainline` channel requires containers to have no prerelease component in their tags. The `Feature Branch` channel has no restrictions, allowing both mainline and feature branch builds to be deployed. The `Feature Branch` channel is configured to use the `Feature Branch` lifecycle, which only contains the `Feature Branch` environment. This ensures that feature branch builds can not be promoted to production. @@ -77,4 +77,3 @@ The typical workflow is this: 1. Using the `_ Deploy EKS Octopub Stack` orchestration project, the current state of the `Development` environment is promoted to the `Feature Branch` environment. The namespace hosting the feature branch is prompted for, just before the release is deployed. This effectively recreates the `Development` environment in a new namespace. 2. The feature branch build of the individual microservice being tested is then manually deployed using the `Feature Branch` channel. 3. The end result is a copy of the mainline applications deployed to a feature branch namespace with a single feature branch build of the microservice being tested. This allows the feature branch microservice to be tested in isolation with a complete microservice stack. - diff --git a/src/pages/docs/getting-started/reference-architectures/webapp-reference-architecture.md b/src/pages/docs/getting-started/reference-architectures/webapp-reference-architecture.md index c9c0b79b28..596bd26e1d 100644 --- a/src/pages/docs/getting-started/reference-architectures/webapp-reference-architecture.md +++ b/src/pages/docs/getting-started/reference-architectures/webapp-reference-architecture.md @@ -18,19 +18,19 @@ Hosted Octopus users should use the `Hosted Ubuntu` worker pool and run the step The step exposes a number of options, typically requesting credentials to the various platforms that are configured to support Azure Web App deployments: -* `Azure account application ID`, `Azure account subscription ID`, `Azure account tenant ID`, and `Azure account password` require the details associated with a [service principal](https://learn.microsoft.com/en-us/purview/create-service-principal-azure) used to access the Azure platform. -* `Docker Hub Username` and `Docker Hub Password` require the credentials of a [Docker Hub user](https://docs.docker.com/docker-id/) that is used to access sample Docker images from public DockerHub repositories. These credentials are also used by a sample GitHub Actions workflow that publishes Docker images. -* `GitHub Access Token` requires the [GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) of a user that is used to create a new GitHub repository holding a sample application. -* `Octopus API Key` requires an [API key](https://octopus.com/docs/octopus-rest-api/how-to-create-an-api-key) to the Octopus instance where the reference architecture projects and supporting resources are created. -* `Octopus Space ID` requires the space ID where the reference architecture projects and supporting resources are created. Leave the default value to populate the same space as the runbook. -* `Octopus Server URL` requires the URL of the Octopus instance where the reference architecture projects and supporting resources are created. Leave the default value to populate the same instance as the runbook. -* `Optional Terraform Apply Args` allows custom arguments to be passed to the `terraform apply` command. The Terraform module applied by this step exposes a number of optional variables that can be defined as apply arguments. These arguments can be defined by setting this field to a value like `-var=project_template_project_name=renamed -var=infrastructure_project_name=renamed2 -var=frontend_project_name=renamed3 -var=products_project_name=renamed4 -var=audits_project_name=renamed5`: - * `infrastructure_project_name` defines the name of the `_ Azure Web App Infrastructure` project - * `project_template_project_name` defines the name of the `Docker Project Templates` project - * `frontend_project_name` defines the name of the `Azure WebApp Octopub Frontend` project - * `products_project_name` defines the name of the `Azure WebApp Octopub Products` project - * `audits_project_name` defines the name of the `Azure WebApp Octopub Audits` project -* `Optional Terraform Init Args` allows custom argument to be passed to the `terraform init` command. Leave this field blank unless you have a specific use case. +- `Azure account application ID`, `Azure account subscription ID`, `Azure account tenant ID`, and `Azure account password` require the details associated with a [service principal](https://learn.microsoft.com/en-us/purview/create-service-principal-azure) used to access the Azure platform. +- `Docker Hub Username` and `Docker Hub Password` require the credentials of a [Docker Hub user](https://docs.docker.com/docker-id/) that is used to access sample Docker images from public DockerHub repositories. These credentials are also used by a sample GitHub Actions workflow that publishes Docker images. +- `GitHub Access Token` requires the [GitHub access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) of a user that is used to create a new GitHub repository holding a sample application. +- `Octopus API Key` requires an [API key](https://octopus.com/docs/octopus-rest-api/how-to-create-an-api-key) to the Octopus instance where the reference architecture projects and supporting resources are created. +- `Octopus Space ID` requires the space ID where the reference architecture projects and supporting resources are created. Leave the default value to populate the same space as the runbook. +- `Octopus Server URL` requires the URL of the Octopus instance where the reference architecture projects and supporting resources are created. Leave the default value to populate the same instance as the runbook. +- `Optional Terraform Apply Args` allows custom arguments to be passed to the `terraform apply` command. The Terraform module applied by this step exposes a number of optional variables that can be defined as apply arguments. These arguments can be defined by setting this field to a value like `-var=project_template_project_name=renamed -var=infrastructure_project_name=renamed2 -var=frontend_project_name=renamed3 -var=products_project_name=renamed4 -var=audits_project_name=renamed5`: + - `infrastructure_project_name` defines the name of the `_ Azure Web App Infrastructure` project + - `project_template_project_name` defines the name of the `Docker Project Templates` project + - `frontend_project_name` defines the name of the `Azure WebApp Octopub Frontend` project + - `products_project_name` defines the name of the `Azure WebApp Octopub Products` project + - `audits_project_name` defines the name of the `Azure WebApp Octopub Audits` project +- `Optional Terraform Init Args` allows custom argument to be passed to the `terraform init` command. Leave this field blank unless you have a specific use case. ### Reference projects @@ -40,7 +40,7 @@ The `_ Azure Web App Infrastructure` project contains a runbook called `Create W The `Azure WebApp Octopub Audits`, `Azure WebApp Octopub Frontend`, `Azure WebApp Octopub Products` projects deploy the [Octopub](https://github.com/OctopusSolutionsEngineering/Octopub) sample application to an Azure Web App, performs a smoke test, and scans the [SBOM](https://www.cisa.gov/sbom) associated with each image using [Trivy](https://aquasecurity.github.io/trivy/). Each of these projects have a number of supporting runbooks to inspect Kubernetes resources. -The `_ Deploy Azure Web App Octopub Stack` project uses the [Deploy a release](/docs/projects/coordinating-multiple-projects/deploy-release-step) step to orchestrate the deployment of the individual microservices that make up the Octopub sample application. Orchestration projects provide a convenient way of promoting multiple related releases between environments in a predefined order, which may be required when applications are tightly bound or a well-defined set of release versions must be installed as a group. +The `_ Deploy Azure Web App Octopub Stack` project uses the [Deploy a release](/docs/projects/coordinating-multiple-projects/deploy-release-step) step to orchestrate the deployment of the individual microservices that make up the Octopub sample application. Orchestration projects provide a convenient way of promoting multiple related releases between environments in a predefined order, which may be required when applications are tightly bound or a well-defined set of release versions must be installed as a group. The `Docker Project Templates` project contains a runbook called `Create Template Github Node.js Project` that: diff --git a/src/pages/docs/getting-started/samples-instance.mdx b/src/pages/docs/getting-started/samples-instance.mdx index 6ec4f0ec2b..8eee373995 100644 --- a/src/pages/docs/getting-started/samples-instance.mdx +++ b/src/pages/docs/getting-started/samples-instance.mdx @@ -20,7 +20,7 @@ import SamplesJavaRunbookFeatureList from 'src/shared-content/samples/samples-ja import SamplesKubernetesRunbookFeatureList from 'src/shared-content/samples/samples-java-runbook-feature-list.include.md'; import SamplesTerraformRunbookFeatureList from 'src/shared-content/samples/samples-terraform-runbook-feature-list.include.md'; -Our [samples instance](https://samples.octopus.app) contains real-world deployment and runbook examples. +Our [samples instance](https://samples.octopus.app) contains real-world deployment and runbook examples. Each one highlights one or more available Octopus features, from deploying Java applications to upgrading a Helm chart in a Kubernetes cluster. diff --git a/src/pages/docs/installation/automating-installation.mdx b/src/pages/docs/installation/automating-installation.mdx index 7192e6c820..92310e6308 100644 --- a/src/pages/docs/installation/automating-installation.mdx +++ b/src/pages/docs/installation/automating-installation.mdx @@ -114,4 +114,4 @@ To review the latest available settings and properties, refer to the [OctopusDSC ## Taking DSC further -DSC can be applied in various ways, such as [Group Policy](https://sdmsoftware.com/group-policy-blog/desired-state-configuration/desired-state-configuration-and-group-policy-come-together/), a [DSC Pull Server](https://docs.microsoft.com/en-us/powershell/scripting/dsc/pull-server/pullserver), [Azure Automation](https://docs.microsoft.com/en-us/azure/automation/automation-dsc-overview), or even via configuration management tools such as [Chef](https://docs.chef.io/resources/dsc_resource/) or [Puppet](https://github.com/puppetlabs/puppetlabs-dsc). Learn more about Desired State Configuration at [Windows PowerShell Desired State Configuration ](https://docs.microsoft.com/en-us/powershell/scripting/dsc/overview/overview). +DSC can be applied in various ways, such as [Group Policy](https://sdmsoftware.com/group-policy-blog/desired-state-configuration/desired-state-configuration-and-group-policy-come-together/), a [DSC Pull Server](https://docs.microsoft.com/en-us/powershell/scripting/dsc/pull-server/pullserver), [Azure Automation](https://docs.microsoft.com/en-us/azure/automation/automation-dsc-overview), or even via configuration management tools such as [Chef](https://docs.chef.io/resources/dsc_resource/) or [Puppet](https://github.com/puppetlabs/puppetlabs-dsc). Learn more about Desired State Configuration at [Windows PowerShell Desired State Configuration](https://docs.microsoft.com/en-us/powershell/scripting/dsc/overview/overview). diff --git a/src/pages/docs/installation/file-storage/aws-file-storage.mdx b/src/pages/docs/installation/file-storage/aws-file-storage.mdx index 615a8d097f..cf51eceb1c 100644 --- a/src/pages/docs/installation/file-storage/aws-file-storage.mdx +++ b/src/pages/docs/installation/file-storage/aws-file-storage.mdx @@ -10,29 +10,35 @@ hideInThisSection: true import FileStorageHA from 'src/shared-content/installation/file-storage-ha.include.md'; AWS has multiple storage options to choose from: + - Elastic Block Store (EBS) - Elastic File System (EFS) - FSx ## Elastic Block Store (EBS) + AWS EBS is limited in that it can be attached to only one EC2 or container instance and is not an option for High Availability. ## Elastic File System (EFS) + EFS is perhaps the most versatile storage options that AWS offers. EFS works with EC2 instances, ECS services, and EKS clusters. If you intend on running [Octopus Deploy Server as a Linux Container](https://octopus.com/docs/installation/octopus-server-linux-container), EFS is likely going to be your only option. ### EC2 -Amazon provides an [easy way](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEFS.html) to connect Linux based EC2 instances to EFS. As noted on https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html, Amazon does not support mounting EFS to EC2 instances running Windows. Windows, however, has an NFS client that can be installed to configure and access NFS shares. + +Amazon provides an [easy way](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEFS.html) to connect Linux based EC2 instances to EFS. As noted on `https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html`, Amazon does not support mounting EFS to EC2 instances running Windows. Windows, however, has an NFS client that can be installed to configure and access NFS shares. See more information about [Windows NFS and Octopus Deploy](/docs/installation/file-storage/windows-nfs). ## FSx + `Amazon FSx` includes full support for the SMB protocol, Windows NTFS, and **requires** Microsoft Active Directory (AD) integration. This makes it an ideal choice for connecting to your EC2 instances hosting Octopus to store all your Octopus packages and log files. If you choose to go with Amazon FSx there are some resources that will help you get started: + - AWS have a [starter guide](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started.html) which explains how to configure Amazon FSx and connect it up to an EC2 machine. - AWS have a [hands-on lab](https://aws.amazon.com/blogs/storage/how-to-replicate-amazon-fsx-file-server-data-across-aws-regions/) on using DataSync to support multi-region FSx data across AWS regions. This could be useful when considering disaster recovery options for Octopus High Availability. - We have an [AWS FSx High Availability blog post](https://octopus.com/blog/aws-fsx-ha) which is a step-by-step guide to connecting Amazon FSx to your Octopus High Availability Server nodes on Windows. ## High Availability - \ No newline at end of file + diff --git a/src/pages/docs/installation/file-storage/azure-file-storage.mdx b/src/pages/docs/installation/file-storage/azure-file-storage.mdx index 1ece411a96..5e309354c7 100644 --- a/src/pages/docs/installation/file-storage/azure-file-storage.mdx +++ b/src/pages/docs/installation/file-storage/azure-file-storage.mdx @@ -33,7 +33,7 @@ Z:\SharedFolder\EventExports In the event you need the locations to be in different locations, you have the flexibility to set the paths to the individual items :::div{.hint} -It's worth noting that you need to have created the folders within the Azure File Share first before running this step. +It's worth noting that you need to have created the folders within the Azure File Share first before running this step. ::: ```powershell @@ -44,13 +44,14 @@ It's worth noting that you need to have created the folders within the Azure Fil & 'C:\Program Files\Octopus Deploy\Octopus\Octopus.Server.exe' path --imports "Z:\Imports" & 'C:\Program Files\Octopus Deploy\Octopus\Octopus.Server.exe' path --eventExports "Z:\EventExports" ``` + ## High Availability ## Disaster Recovery -For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). To achieve this with Azure you have several options available. Further details on the redundancy options available for Azure Storage can be found [here](https://learn.microsoft.com/en-us/azure/storage/common/storage-redundancy). +For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). To achieve this with Azure you have several options available. Further details on the [redundancy options available for Azure Storage](https://learn.microsoft.com/en-us/azure/storage/common/storage-redundancy) can be found in the Microsoft documentation. ### Zone-redundant Storage @@ -70,4 +71,4 @@ Geo-zone-redundant storage (GZRS) combines ZRS and GRS. It will protect against :::div{.hint} When using GRS or GZRS a failure of the primary region would require a [manual failover](https://learn.microsoft.com/en-us/azure/storage/common/storage-failover-customer-managed-unplanned?tabs=grs-ra-grs) to be triggered within Azure which would update the the Azure Storage DNS entry to point to the secondary region. This process can take up to an hour. -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/file-storage/gcp-file-storage.mdx b/src/pages/docs/installation/file-storage/gcp-file-storage.mdx index 8f3742c7df..69a86d4e50 100644 --- a/src/pages/docs/installation/file-storage/gcp-file-storage.mdx +++ b/src/pages/docs/installation/file-storage/gcp-file-storage.mdx @@ -28,7 +28,8 @@ See more information about [Windows NFS and Octopus Deploy](/docs/installation/f ## Disaster Recovery -For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). To achieve this with GCP you have several options available. Further details on the redundancy options available for Filestore can be found [here](https://cloud.google.com/architecture/filers-on-compute-engine#filestore-basic). + +For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). To achieve this with GCP you have several options available. Further details on the [redundancy options available for Filestore](https://cloud.google.com/architecture/filers-on-compute-engine#filestore-basic) can be found in the GCP documentation. ### Zonal @@ -42,4 +43,4 @@ Whether you use Zonal or Regional availability, it would be necessary to create :::div{.warning} In the event of a failure of the primary region, it would be necessary to restore the backup of your Filestore to a secondary region and reconfigure Octopus to point to the new region. There may be some data loss to consider in this scenario based on how often your Filestore backups are taken. -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/file-storage/local-storage.mdx b/src/pages/docs/installation/file-storage/local-storage.mdx index 14624bd761..7bd0545b7b 100644 --- a/src/pages/docs/installation/file-storage/local-storage.mdx +++ b/src/pages/docs/installation/file-storage/local-storage.mdx @@ -33,7 +33,7 @@ One common approach we've seen is leveraging a distributed file system (DFS) suc ## DFS :::div{.warning} -**DFS in the standard configuration (i.e., accessed through a DFS Namespace Root) is _not_ suitable for use as a shared file store with Octopus Deploy.** +**DFS in the standard configuration (i.e., accessed through a DFS Namespace Root) is *not* suitable for use as a shared file store with Octopus Deploy.** Operating Octopus Deploy with the non-recommended DFS configuration will likely result in intermittent and potentially significant issues. ::: @@ -51,7 +51,7 @@ Below are recommendations and more details on: For a single-node Octopus Server using DFS for file storage, the node must be **configured to use a specific DFS Replica and not the DFS Namespace Root**. Despite no contention between nodes in the single-node configuration, there is still the DFS location transparency, which will cause unpredictable behavior when the node is directed to a different replica. -In the diagram, the single node is configured to use the replica `\\SVR_ONE\public` as the DFS file share and not the namespace root (`\\Contoso\public`). +In the diagram, the single node is configured to use the replica `\\SVR_ONE\public` as the DFS file share and not the namespace root (`\\Contoso\public`). :::figure ![A single Octopus Deploy node with DFS shared storage](/docs/img/getting-started/best-practices/images/single-node-od-with-dfs.png) @@ -59,9 +59,9 @@ In the diagram, the single node is configured to use the replica `\\SVR_ONE\publ ### Configuring DFS with a Multi-Node Octopus Server cluster (Octopus HA) -For a multi-node Octopus cluster using DFS for file storage, it is imperative that **_all_ nodes in the cluster are configured to use the same DFS Replica and not the DFS Namespace Root**. Both using the namespace root or using different replicas for different Octopus nodes will cause unpredictable behavior. +For a multi-node Octopus cluster using DFS for file storage, it is imperative that ***all* nodes in the cluster are configured to use the same DFS Replica and not the DFS Namespace Root**. Both using the namespace root or using different replicas for different Octopus nodes will cause unpredictable behavior. -In the diagram below each node in the cluster is configured to use the same replica (`\\SVR_ONE\public`) as the DFS file share and not the namespace root (`\\Contoso\public`). +In the diagram below each node in the cluster is configured to use the same replica (`\\SVR_ONE\public`) as the DFS file share and not the namespace root (`\\Contoso\public`). :::figure ![A multi-node (HA) Octopus Cluster with DFS shared storage](/docs/img/getting-started/best-practices/images/multi-node-od-with-dfs.png) diff --git a/src/pages/docs/installation/file-storage/windows-nfs.md b/src/pages/docs/installation/file-storage/windows-nfs.md index c1cf6d036c..4684345d69 100644 --- a/src/pages/docs/installation/file-storage/windows-nfs.md +++ b/src/pages/docs/installation/file-storage/windows-nfs.md @@ -9,7 +9,7 @@ hideInThisSection: true --- Follow the steps below to configure NFS on a Windows Server for Octopus Deploy to use. -1. Install NFS on the Windows VM +1. Install NFS on the Windows VM On the Windows VM, open PowerShell as an administrator, and install the NFS client: @@ -31,6 +31,7 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" ` -Name "AnonymousGid" -Value "0" -PropertyType DWORD ``` + 3. Restart the NFS client service ```cmd @@ -38,6 +39,7 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t nfsadmin client start ``` + 4. Create a batch file (`.bat` or `.cmd`) to mount the NFS share. ```cmd @@ -51,8 +53,8 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t - `share-name` with the Filestore instance share name 5. Create a Windows Scheduled Task to run at system startup to mount the NFS share using the batch file. - - Below is an example scheduled task for mounting an NFS volume. Remember to substitute `C:\OctoHA\MountNfsShare.cmd` with the path to your batch file and ensure the task is set to run as `LocalSystem`. + + Below is an example scheduled task for mounting an NFS volume. Remember to substitute `C:\OctoHA\MountNfsShare.cmd` with the path to your batch file and ensure the task is set to run as `LocalSystem`. ```xml @@ -99,12 +101,13 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t ``` - + You can add multiple Actions to a Scheduled task. If you want to be sure the NFS share is mounted *before* the Octopus Service is started, you can set the service **Startup Type** to `Manual`, and add the following command to run *after* the NFS share is mounted: ```cmd Command-line C:\Program Files\Octopus Deploy\Octopus\Octopus.Server.exe" checkservices --instances OctopusServer ``` + ```xml Scheduled Task XML Snippet "C:\Program Files\Octopus Deploy\Octopus\Octopus.Server.exe" @@ -112,6 +115,7 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t ``` + :::div{.hint} This is in effect the same when using the [watchdog](/docs/octopus-rest-api/octopus.server.exe-command-line/watchdog) command to configure a scheduled task to monitor the Octopus Server service. ::: @@ -121,7 +125,7 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t 7. Create the symbolic links for the Artifacts, Packages, TaskLogs, Imports, and EventExports folders. Run the following PowerShell script, substituting the placeholder values with your own: - + ```powershell # Create the local folder to use to create the symbolic links within. $LocalFolder="C:\OctopusShared" @@ -158,7 +162,7 @@ Follow the steps below to configure NFS on a Windows Server for Octopus Deploy t New-Item -Path $EventExportsFolder -ItemType SymbolicLink -Value "$NfsShare\EventExports" } ``` - + :::div{.hint} Remember to create the folders in the NFS share before trying to create the symbolic links. ::: @@ -176,4 +180,4 @@ Once you've completed those steps, [install Octopus](/docs/installation/) and th :::div{.hint} Changing the path only needs to be done once, and not on each node as the values are stored in the database. -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/load-balancers/azure-load-balancers.mdx b/src/pages/docs/installation/load-balancers/azure-load-balancers.mdx index 3a52736bdc..585fee390b 100644 --- a/src/pages/docs/installation/load-balancers/azure-load-balancers.mdx +++ b/src/pages/docs/installation/load-balancers/azure-load-balancers.mdx @@ -7,7 +7,7 @@ description: Route traffic to Octopus Deploy using Azure load balancers. Review navOrder: 30 hideInThisSection: true --- -To distribute HTTP load among Octopus Server nodes with a single point of access, we recommended using an HTTP load balancer. +To distribute HTTP load among Octopus Server nodes with a single point of access, we recommended using an HTTP load balancer. Azure has a wide range of [load balancers](https://docs.microsoft.com/azure/architecture/guide/technology-choices/load-balancing-overview) that will work with Octopus in a highly-available configuration: @@ -18,4 +18,4 @@ Azure has a wide range of [load balancers](https://docs.microsoft.com/azure/arch - [Kemp LoadMaster](https://kemptechnologies.com/uk/solutions/microsoft-load-balancing/loadmaster-azure/) - [F5 Big-IP Virtual Edition](https://www.f5.com/partners/technology-alliances/microsoft-azure) -For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). Azure's [recommendation](https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service?tabs=graph%2Ccli#active-passive-architecture) of using Azure Front Door is a great way to achieve this. This method will allow you to easily route traffic to the secondary region in the event of a primary region failure. \ No newline at end of file +For disaster recovery scenarios, [we recommend leveraging a hot/cold configuration](https://octopus.com/whitepapers/best-practice-for-self-hosted-octopus-deploy-ha-dr). Azure's [recommendation](https://learn.microsoft.com/en-us/azure/reliability/reliability-app-service?tabs=graph%2Ccli#active-passive-architecture) of using Azure Front Door is a great way to achieve this. This method will allow you to easily route traffic to the secondary region in the event of a primary region failure. diff --git a/src/pages/docs/installation/load-balancers/gcp-load-balancers.mdx b/src/pages/docs/installation/load-balancers/gcp-load-balancers.mdx index 54d7240993..49f6018105 100644 --- a/src/pages/docs/installation/load-balancers/gcp-load-balancers.mdx +++ b/src/pages/docs/installation/load-balancers/gcp-load-balancers.mdx @@ -10,12 +10,12 @@ hideInThisSection: true To distribute traffic to the Octopus web portal on multiple nodes, you need to use a load balancer. Google Cloud provides two options you should consider to distribute HTTP/HTTPS traffic to your Compute Engine instances. -* [External HTTP(S) Load Balancer](https://cloud.google.com/load-balancing/docs/https) -* [External TCP Network Load Balancer](https://cloud.google.com/load-balancing/docs/network) +- [External HTTP(S) Load Balancer](https://cloud.google.com/load-balancing/docs/https) +- [External TCP Network Load Balancer](https://cloud.google.com/load-balancing/docs/network) If you are *only* using [Listening Tentacles](/docs/infrastructure/deployment-targets/tentacle/tentacle-communication/#listening-tentacles-recommended), we recommend using the HTTP(S) Load Balancer. -However, [Polling Tentacles](/docs/infrastructure/deployment-targets/tentacle/tentacle-communication/#polling-tentacles) aren't compatible with the HTTP(S) Load Balancer, so instead, we recommend using the Network Load Balancer. It allows you to configure TCP Forwarding rules on a specific port to each compute engine instance, which is [one way to route traffic to each individual node](#using-a-unique-port) as required for Polling Tentacles when running Octopus High Availability. +However, [Polling Tentacles](/docs/infrastructure/deployment-targets/tentacle/tentacle-communication/#polling-tentacles) aren't compatible with the HTTP(S) Load Balancer, so instead, we recommend using the Network Load Balancer. It allows you to configure TCP Forwarding rules on a specific port to each compute engine instance, which is one way to route traffic to each individual node as required for Polling Tentacles when running Octopus High Availability. To use Network Load Balancers exclusively for Octopus High Availability with Polling Tentacles you'd potentially need to configure multiple load balancer(s) / forwarding rules: @@ -31,4 +31,4 @@ With Network Load Balancers, you can configure a health check to ensure your Com :::figure ![Network Load Balancer health check](/docs/img/administration/high-availability/design/images/gcp-octopus-nlb-health-check.png) -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/load-balancers/use-iis-as-reverse-proxy.md b/src/pages/docs/installation/load-balancers/use-iis-as-reverse-proxy.md index 096fcd4799..eb1d49674a 100644 --- a/src/pages/docs/installation/load-balancers/use-iis-as-reverse-proxy.md +++ b/src/pages/docs/installation/load-balancers/use-iis-as-reverse-proxy.md @@ -29,7 +29,7 @@ At the end of this walk-through, you should be able to: - Set and verify a custom HTTP header with IIS. :::figure -![](/docs/img/administration/high-availability/design/images/create-server-farm.png) +![Create server farm in IIS](/docs/img/administration/high-availability/design/images/create-server-farm.png) ::: ## Install URLRewrite and ARR @@ -105,7 +105,7 @@ There is no need to specify outbound rules, as the Octopus Portal always uses re Click OK and close down all dialogs. -You should now be able to navigate to https://servername/ in your browser and log in to Octopus Deploy. +You should now be able to navigate to `https://servername/` in your browser and log in to Octopus Deploy. :::div{.warning} **Polling Tentacles are not supported with this scenario** diff --git a/src/pages/docs/installation/load-balancers/use-nginx-as-reverse-proxy.md b/src/pages/docs/installation/load-balancers/use-nginx-as-reverse-proxy.md index fe2a8080fe..f7fb29c9ba 100644 --- a/src/pages/docs/installation/load-balancers/use-nginx-as-reverse-proxy.md +++ b/src/pages/docs/installation/load-balancers/use-nginx-as-reverse-proxy.md @@ -28,6 +28,7 @@ At the end of this walk-through, you should be able to: Unlike a web server such as Microsoft's Internet Information Services (IIS), NGINX doesn't have a user interface. All configuration in NGINX is done via a configuration file such as the `nginx.conf` file. An SSL certificate doesn't have to be "installed" in a certificate store. They are placed in a folder, and the configuration file references them. See [NGINX's documentation](https://docs.nginx.com/nginx/admin-guide/) for more details. ## NGINX hosted on a server + Follow these steps if you're running NGINX directly on a server, such as Windows or Linux. The first step is to copy the SSL certificate to a folder NGINX can access, for example, `/etc/nginx`. This example will use two files, `STAR_octopusdemos.app.pem` and `STAR_octopusdemos.app.key`. The .pem file contains the entire certificate chain. @@ -40,7 +41,7 @@ The next step is to modify the configuration file. The file to edit depends on Below is an example reverse proxy configuration: -``` +```nginx upstream octopusdeploy { server servername:8080; } @@ -69,7 +70,7 @@ Octopus generates a self signed certificate for gRPC communications. When the a The `ssl_certificate` refers to your CA certificate used for the HTTPS configuration. -``` +```nginx upstream octopusdeploy_grpc { server servername:8443; } @@ -90,7 +91,7 @@ server { #### TLS/SSL Passthrough -``` +```nginx stream { upstream octopusdeploy_grpc { server OctopusServer1:8443; @@ -108,7 +109,7 @@ stream { NGINX 1.19 added support for environment variables. Instead of modifying the `nginx.conf` file, you'll create a `default.conf.template` file. The environment variable is `${OCTOPUS_SERVER}`. That value will be replaced when the Docker container starts up. -``` +```nginx upstream octopusdeploy { server ${OCTOPUS_SERVER}; } @@ -130,7 +131,7 @@ server { The Dockerfile will copy that template file to `/etc/nginx/templates/default.conf.template` and copy in the certificate and key files. -``` +```dockerfile FROM nginx:latest ENV OCTOPUS_SERVER servername:8080 @@ -142,21 +143,23 @@ COPY ./STAR_octopusdemos_app.pem /etc/nginx/STAR_octopusdemos_app.pem Build the Docker image like any other Docker image. The `-t` parameter tags the image to make it easier to reference. Replace `octopusbob` with the name of your repository. -``` +```bash docker build -t octopusbob/nginx:1.0.0 -t octopusbob/nginx:latest . ``` ### Running the NGINX Container + Then you can run the Docker image in a container by running the command. -``` +```bash docker run --name octopus-reverse-proxy -p 443:443 -e OCTOPUS_SERVER=servername:8080 octopusbob/nginx:latest ``` ### Referencing the NGINX Container in Docker Compose + If you prefer, you can run the image via a docker-compose file. -``` +```yaml version: '3' services: db: @@ -204,7 +207,8 @@ services: ``` The .env file will look something like this: -``` + +```ini # It is highly recommended this value is changed as it's the password used for the database user. SA_PASSWORD=REPLACE ME! @@ -253,11 +257,12 @@ ADMIN_API_KEY= # Sets the task cap for this node. If not specified the default is 5. TASK_CAP=20 ``` + ## NGINX as a Load Balancer NGINX can be used as a load balancer for Octopus Deploy configured for [High Availability](/docs/administration/high-availability). To do so, add all the HA nodes to this section. -``` +```nginx upstream octopusdeploy { server servername:8080; server servername02:8080; @@ -266,7 +271,7 @@ upstream octopusdeploy { The full file will look like: -``` +```nginx http { upstream octopusdeploy { server servername:8080; diff --git a/src/pages/docs/installation/octopus-server-linux-container/docker-compose-linux.md b/src/pages/docs/installation/octopus-server-linux-container/docker-compose-linux.md index 4eb46321b2..25d28ca2fb 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/docker-compose-linux.md +++ b/src/pages/docs/installation/octopus-server-linux-container/docker-compose-linux.md @@ -68,7 +68,7 @@ volumes: We will provide some of the environment variables to run this container with an additional `.env` file: -``` +```ini # Define the password for the SQL database. This also must be set in the DB_CONNECTION_STRING value. SA_PASSWORD= @@ -125,13 +125,13 @@ CONTAINER_USER=octopus TASK_CAP=20 ``` -You will have to supply your own values for `SA_PASSWORD`, `ADMIN_USERNAME`, and `ADMIN_PASSWORD`. +You will have to supply your own values for `SA_PASSWORD`, `ADMIN_USERNAME`, and `ADMIN_PASSWORD`. It is also highly recommended that you create a new master key with the command `openssl rand 16 | base64` and supply it through the `MASTER_KEY` property before you boot Octopus for the first time. If a master key is not supplied, Octopus will generate one, and the generated value must be saved in the `MASTER_KEY` property when the Octopus container is restarted. Start both containers by running: -``` +```bash docker-compose --project-name octopus up -d ``` @@ -141,10 +141,10 @@ When both containers are healthy, you can browse directly to `http://localhost:8 Octopus Server can interface with several external sources (feeds, git repos, etc.), and those sources are often configured to use SSL/TLS for secure communication. It is common for organizations to have their own Certificate Authority (CA) servers for their internal networks. A CA server can issue SSL certificates for internal resources, such as build servers or internally hosted applications, without purchasing from a third-party vendor. Technologies such as Group Policy Objects (GPO) can configure machines (servers and clients) to trust the CA automatically, so users don't have to configure trust for them manually. However, this is not inherited in containers. When attempting to configure a connection to an external resource with an untrusted CA, you'll most likely encounter an error similar to this: -``` +```text Could not connect to the package feed. The SSL connection could not be established, see inner exception. The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot ``` - + The recommended approach is to add the certificate to the Docker host, such as `/etc/ssl/certs`, and mount a volume to it inside the container. To do this, add a `volumes` section to the `octopus-server` container just after the `image` component ```yaml @@ -165,5 +165,5 @@ For further information about the additional configuration of the SQL Server con ## Learn more - - [Docker blog posts](https://octopus.com/blog/tag/docker/1) - - [Linux blog posts](https://octopus.com/blog/tag/linux/1) +- [Docker blog posts](https://octopus.com/blog/tag/docker/1) +- [Linux blog posts](https://octopus.com/blog/tag/linux/1) diff --git a/src/pages/docs/installation/octopus-server-linux-container/index.mdx b/src/pages/docs/installation/octopus-server-linux-container/index.mdx index 402d98b5d5..5f8e0f48c6 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/index.mdx +++ b/src/pages/docs/installation/octopus-server-linux-container/index.mdx @@ -24,14 +24,14 @@ This page describes how to run Octopus Server in the Linux Container. Although there are a few different configuration options, the following is a simple example of starting the  Octopus Server Linux container: ```bash -$ docker run --interactive --detach --name OctopusDeploy --publish 1322:8080 --env ACCEPT_EULA="Y" --env DB_CONNECTION_STRING="..." octopusdeploy/octopusdeploy +docker run --interactive --detach --name OctopusDeploy --publish 1322:8080 --env ACCEPT_EULA="Y" --env DB_CONNECTION_STRING="..." octopusdeploy/octopusdeploy ``` - We run in detached mode with `--detach` to allow the container to run in the background. - The `--interactive` argument ensures that `STDIN` is kept open, which is required since this is what the running `Octopus.Server.exe` process is waiting on to close. - Setting `--name OctopusServer` gives us an easy-to-remember name for this container. This is optional, but we recommend you provide a name that is meaningful to you, as that will make it easier to perform actions on the container later if necessary. -- Using `--publish 1322:8080` maps the _container port_ `8080` to `1322` on the host so that the Octopus instance is accessible outside this server. -- To set the connection string we provide an _environment variable_ `DB_CONNECTION_STRING` (this can be a local or external database). +- Using `--publish 1322:8080` maps the *container port* `8080` to `1322` on the host so that the Octopus instance is accessible outside this server. +- To set the connection string we provide an *environment variable* `DB_CONNECTION_STRING` (this can be a local or external database). In this example, we run the image `octopusdeploy/octopusdeploy` without an explicit tag, running the `latest` version of Octopus Server that's been published to DockerHub. @@ -45,7 +45,7 @@ This section walks through some of the different ways you can run the Octopus Se ## Migration -You may already have Octopus Server running on Windows Server or in a Windows container you wish to run in a Linux Container. This section walks through the different options and considerations for migrating to an Octopus Server Linux Container. +You may already have Octopus Server running on Windows Server or in a Windows container you wish to run in a Linux Container. This section walks through the different options and considerations for migrating to an Octopus Server Linux Container. - [Migrate to Octopus Server Linux Container from Windows Server](/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-server) - [Migrate to Octopus Server Linux Container from Windows Container](/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-container) @@ -64,7 +64,7 @@ If you do not specify a master key when Octopus is first run, Octopus will gener Master keys must be a 128 bit string encoded in base 64. You can generate a random string to use as the master key with the command: -``` +```bash openssl rand 16 | base64 ``` @@ -72,11 +72,11 @@ openssl rand 16 | base64 Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file) about setting environment variables. -|  Name       |    | -| ------------- | ------- | +|Name|Description| +|--|--| |**DB_CONNECTION_STRING**|Connection string to the database to use| |**MASTER_KEY**|The Master Key to connect to an existing database. If not supplied, and the database does not exist, it will generate a new one. The Master Key is mandatory if the database exists.| -|**OCTOPUS_SERVER_BASE64_LICENSE**|Your license key for Octopus Deploy. If left empty, it will try to create a free license key for use +|**OCTOPUS_SERVER_BASE64_LICENSE**|Your license key for Octopus Deploy. If left empty, it will try to create a free license key for use| |**ADMIN_USERNAME**|The admin user to create for the Octopus Server| |**ADMIN_PASSWORD**|The password for the admin user for the Octopus Server| |**ADMIN_EMAIL**|The email associated with the admin user account| @@ -87,26 +87,25 @@ Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/ Read Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose) about exposing ports. -|  Port       |    | -| ------------- | ------- | -|**8080**| Port for API and HTTP portal | -|**443**| SSL Port for API and HTTP portal | +|Port|Description| +|--|--| +|**8080**|Port for API and HTTP portal| +|**443**|SSL Port for API and HTTP portal| |**10943**|Port for Polling Tentacles to contact the server| |**8443**|Port for gRPC clients to contact the server| - ### Volume mounts Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only) about mounting volumes. | Name     | Description | Mount source | -| ------------- | ------- | ------- | -|**/import**| Imports from this folder if [Octopus Migrator](/docs/octopus-rest-api/octopus.migrator.exe-command-line) metadata.json exists, then migrator `Import` takes place on startup | Host filesystem or container | -|**/repository**| Package path for the built-in package repository | Shared storage | -|**/artifacts**| Path where artifacts are stored | Shared storage | -|**/taskLogs**| Path where task logs are stored | Shared storage | -|**/eventExports**| Path where event audit logs are exported | Shared storage | -|**/cache**| Path where cached files e.g., signature and delta files (used for package acquisition), are stored | Host filesystem or container | +| ------------- | ------- | ------- | +| **/import** | Imports from this folder if [Octopus Migrator](/docs/octopus-rest-api/octopus.migrator.exe-command-line) metadata.json exists, then migrator `Import` takes place on startup | Host filesystem or container | +| **/repository** | Package path for the built-in package repository | Shared storage | +| **/artifacts** | Path where artifacts are stored | Shared storage | +| **/taskLogs** | Path where task logs are stored | Shared storage | +| **/eventExports** | Path where event audit logs are exported | Shared storage | +| **/cache** | Path where cached files e.g., signature and delta files (used for package acquisition), are stored | Host filesystem or container | :::div{.hint} **Note:** We recommend using shared storage when mounting the volumes for files that must be shared between multiple octopus container nodes, e.g., artifacts, packages, task logs, and event exports. @@ -118,16 +117,16 @@ When the volumes are externally mounted to the host filesystem, upgrades between Similar to moving an instance, to perform the container upgrade, you will need the Master Key you used to set up the original database. You can find the Master Key for an Octopus Server in a container with the container exec command: -``` +```text > docker container exec /Octopus/Octopus.Server show-master-key --console --instance OctopusServer 5qJcW9E6B99teMmrOzaYNA== ``` -When you have the Master Key, you can stop the running Octopus Server container instance (delete it if you plan on using the same name) and run _almost_ the same command as before, but this time, pass in the Master Key as an environment variable and reference the new Octopus Server version. When this new container starts up, it will use the same credentials and detect that the database has already been set up and use the Master Key to access its sensitive values: +When you have the Master Key, you can stop the running Octopus Server container instance (delete it if you plan on using the same name) and run *almost* the same command as before, but this time, pass in the Master Key as an environment variable and reference the new Octopus Server version. When this new container starts up, it will use the same credentials and detect that the database has already been set up and use the Master Key to access its sensitive values: ```bash -$ docker run --interactive --detach --name OctopusServer --publish 1322:8080 --env DB_CONNECTION_STRING="..." --env MASTER_KEY "5qJcW9E6B99teMmrOzaYNA==" octopusdeploy/octopusdeploy +docker run --interactive --detach --name OctopusServer --publish 1322:8080 --env DB_CONNECTION_STRING="..." --env MASTER_KEY "5qJcW9E6B99teMmrOzaYNA==" octopusdeploy/octopusdeploy ``` The standard backup and restore procedures for the [data stored on the filesystem](/docs/administration/data/backup-and-restore/#octopus-file-storage) and the connected [SQL Server](/docs/administration/data) still apply as per regular Octopus installations. diff --git a/src/pages/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-server.mdx b/src/pages/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-server.mdx index 525d88a88b..538417e0a4 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-server.mdx +++ b/src/pages/docs/installation/octopus-server-linux-container/migration/migrate-to-server-container-linux-from-windows-server.mdx @@ -35,4 +35,4 @@ The LDAP authentication provider was introduced in Octopus Deploy **2021.2**. ## Further Reading -This guide is meant to address the differences you may encounter when switching from running Octopus Server on Windows to the Octopus Server Linux Container. For a deeper dive in how to run the Octopus Server Linux Container please refer to [this documentation](/docs/installation/octopus-server-linux-container). \ No newline at end of file +This guide is meant to address the differences you may encounter when switching from running Octopus Server on Windows to the Octopus Server Linux Container. For a deeper dive in how to run the Octopus Server Linux Container please refer to [this documentation](/docs/installation/octopus-server-linux-container). diff --git a/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx b/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx index 12e59d9644..4ea905c305 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx +++ b/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx @@ -20,7 +20,7 @@ Whether you are running Octopus in a Container using Docker or Kubernetes, or ru - A Highly available [SQL Server database](/docs/installation/sql-server-database) - A shared file system for [Artifacts, Packages, Task Logs, and Event Exports](/docs/administration/managing-infrastructure/server-configuration-and-file-storage/#file-storage) -- A [Load balancer](/docs/administration/high-availability/load-balancing) for traffic to the Octopus Web Portal +- A [Load balancer](/docs/administration/high-availability/load-balancing) for traffic to the Octopus Web Portal - Access to each Octopus Server node for [Polling Tentacles](/docs/administration/high-availability/polling-tentacles-with-ha) The following sections describe these in more detail. @@ -39,7 +39,7 @@ For more details on the different hosted database options, refer to the document #### Running SQL in a Container \{#running-sql-in-container} -Its possible to run SQL Server in a container. This can be useful when running a Proof of Concept (PoC) with Octopus in Kubernetes. +Its possible to run SQL Server in a container. This can be useful when running a Proof of Concept (PoC) with Octopus in Kubernetes. The following YAML creates a single instance of SQL Server Express that can be deployed to a Kubernetes cluster. It creates a [persistent volume claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes) to store the database files, a [service](https://kubernetes.io/docs/concepts/services-networking/service/) to expose the database internally, and the database itself. @@ -114,6 +114,7 @@ spec: - name: mssql_db mountPath: /var/opt/mssql ``` + :::div{.hint} **Change the SA Password:** If you use the YAML definition above, remember to change the `SA_PASSWORD` from the value used here. @@ -125,7 +126,7 @@ A Load balancer is required to direct traffic to the Octopus Web Portal, and opt ### Octopus Web Portal load balancer \{#octopus-web-portal-load-balancer} -The Octopus Web Portal is a React single page application (SPA) that can direct all backend requests to any Octopus Server node. This means we can expose all Octopus Server nodes through a single load balancer for the web interface. +The Octopus Web Portal is a React single page application (SPA) that can direct all backend requests to any Octopus Server node. This means we can expose all Octopus Server nodes through a single load balancer for the web interface. The following YAML creates a load balancer service directing web traffic on port `80` to pods with the label `app:octopus`: @@ -144,6 +145,7 @@ spec: selector: app: octopus ``` + #### Octopus Server Node load balancer \{#octopus-node-load-balancers} Unlike the Octopus Web Portal, Polling Tentacles must be able to connect to each Octopus node individually to pick up new tasks. Our Octopus HA cluster assumes two nodes, therefore a load balancer is required for each node to allow direct access. @@ -151,6 +153,7 @@ Unlike the Octopus Web Portal, Polling Tentacles must be able to connect to each The following YAML creates load balancers with separate public IPs for each node. They direct web traffic to each node on port `80`, Polling Tentacle traffic on port `10943`, and gRPC traffic on port `8443`. The `octopus-0` load balancer: + ```yaml apiVersion: v1 kind: Service @@ -202,7 +205,8 @@ spec: ``` Note the selectors of: -- `statefulset.kubernetes.io/pod-name: octopus-0` and + +- `statefulset.kubernetes.io/pod-name: octopus-0` and - `statefulset.kubernetes.io/pod-name: octopus-1` These labels are added to pods created as part of a [Stateful Set](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset), and the values are the combination of the Stateful Set name and the pod index. @@ -218,15 +222,15 @@ To share common files between the Octopus Server nodes, we need access to a mini - Task Logs - Event Exports -These are created via [persistent volume claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes) with an [access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) of `ReadWriteMany` to indicate they are shared between multiple pods. +These are created via [persistent volume claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes) with an [access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) of `ReadWriteMany` to indicate they are shared between multiple pods. -Most of the YAML in this guide can be used with any Kubernetes provider. However, the YAML describing file storage can have differences between each Kubernetes provider as they typically expose different names for their shared file systems via the `storageClassName` property. +Most of the YAML in this guide can be used with any Kubernetes provider. However, the YAML describing file storage can have differences between each Kubernetes provider as they typically expose different names for their shared file systems via the `storageClassName` property. :::div{.hint} To find out more about storage classes, refer to the [Kubernetes Storage Classes](https://kubernetes.io/docs/concepts/storage/storage-classes/) documentation. ::: -While it's possible to mount external storage by manually defining Persistent Volume definitions in YAML, Cloud providers offering Kubernetes managed services typically include the option to dynamically provision file storage based on persistent volume claim definitions. +While it's possible to mount external storage by manually defining Persistent Volume definitions in YAML, Cloud providers offering Kubernetes managed services typically include the option to dynamically provision file storage based on persistent volume claim definitions. The next sections describe how to create file storage for use with Octopus running in Kubernetes using different Kubernetes providers to dynamically provision file storage. @@ -414,9 +418,9 @@ volumeMounts: subPath: eventExports ``` -## Deploying the Octopus Server +## Deploying the Octopus Server -Once the pre-requisites are in place, we need to install the Octopus Server. This can be done via our official Helm chart, or the Kubernetes resources can be directly deployed. +Once the pre-requisites are in place, we need to install the Octopus Server. This can be done via our official Helm chart, or the Kubernetes resources can be directly deployed. ### Helm Chart \{#helm-chart} @@ -434,13 +438,13 @@ Octopus requires the server component to be installed as a [Stateful Set](https: A Stateful Set is used rather than a Kubernetes Deployment, as the Stateful Set provides: -- Fixed names +- Fixed names - Consistent ordering - An initial deployment process that rolls out one pod at a time, ensuring each is healthy before the next is started. This functionality works very nicely when deploying Octopus, as we need to ensure that Octopus instances start sequentially so only one instance attempts to apply updates to the database schema. However redeployments (e.g. when upgrading) do need special consideration, see the [Upgrading Octopus in Kubernetes](#upgrading-octopus-in-kubernetes) section for further details. -The following YAML below creates a Stateful Set with two pods. These pods will be called `octopus-0` and `octopus-1`, which will also be the value assigned to the `statefulset.kubernetes.io/pod-name` label. This is how we can link services exposing individual pods. +The following YAML below creates a Stateful Set with two pods. These pods will be called `octopus-0` and `octopus-1`, which will also be the value assigned to the `statefulset.kubernetes.io/pod-name` label. This is how we can link services exposing individual pods. The pods then mount a single shared volume for the artifacts, built-in feed packages, task logs, the server task logs, and event exports for each pod. @@ -578,7 +582,7 @@ Once fully deployed, this Stateful Set configuration will have three load balanc The `octopus-web` service is used to access the web interface. The Octopus Web Portal can make requests to any node, so load balancing across all the nodes means the web interface is accessible even if one node is down. -The `octopus-0` service is used to point Polling Tentacles to the first node, and the `octopus-1` service is used to point Polling Tentacles to the second node. We have also exposed the web interface through these services, which gives the ability to directly interact with a given node, but the `octopus-web` service should be used for day to day work as it is load balanced. +The `octopus-0` service is used to point Polling Tentacles to the first node, and the `octopus-1` service is used to point Polling Tentacles to the second node. We have also exposed the web interface through these services, which gives the ability to directly interact with a given node, but the `octopus-web` service should be used for day to day work as it is load balanced. The next sections describe the Stateful Set definition in more detail. @@ -605,9 +609,9 @@ affinity: In addition to the shared folders that are mounted for Packages, Artifacts, Task Logs, and Event Exports, each Octopus Server node (Pod) also writes logs to a local folder in each running container. -To mount the same volume used for the shared folders for the server logs, we need a way to create a sub-folder on the external volume that's unique to each Octopus Server node running in a Pod. +To mount the same volume used for the shared folders for the server logs, we need a way to create a sub-folder on the external volume that's unique to each Octopus Server node running in a Pod. -It's possible to achieve this using a special expression known as [subPathExpr](https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath-expanded-environment). The server logs folder is mounted to the unique sub-folder determined by the environment variable `OCTOPUS_SERVER_NODE_NAME`, which is simply the pod name. +It's possible to achieve this using a special expression known as [subPathExpr](https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath-expanded-environment). The server logs folder is mounted to the unique sub-folder determined by the environment variable `OCTOPUS_SERVER_NODE_NAME`, which is simply the pod name. ```yaml - name: octopus-storage-vol @@ -615,9 +619,9 @@ It's possible to achieve this using a special expression known as [subPathExpr]( subPathExpr: serverLogs/$(OCTOPUS_SERVER_NODE_NAME) ``` -An alternative option to using an external volume mount is to use a [volume claim template](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-storage). +An alternative option to using an external volume mount is to use a [volume claim template](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-storage). -For each VolumeClaimTemplate entry defined in a `StatefulSet`, each Pod receives one PersistentVolumeClaim. When a Pod is (re-)scheduled onto a node, its `volumeMounts` mount the PersistentVolumes associated with its PersistentVolume Claims. +For each VolumeClaimTemplate entry defined in a `StatefulSet`, each Pod receives one PersistentVolumeClaim. When a Pod is (re-)scheduled onto a node, its `volumeMounts` mount the PersistentVolumes associated with its PersistentVolume Claims. ```yaml volumeClaimTemplates: @@ -738,7 +742,7 @@ One limitation with Stateful Sets is how they process updates. For example, if t The typical solution to this problem is to use a [recreate deployment strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#recreate-deployment). Unfortunately, Stateful Sets don't support the recreate strategy. -What this means is that the Stateful Set can not be updated in place, but instead must be deleted and then a new version deployed. +What this means is that the Stateful Set can not be updated in place, but instead must be deleted and then a new version deployed. ### Delete the Stateful Set @@ -750,7 +754,7 @@ kubectl get statefulset octopus -o jsonpath="{.status.replicas}" This checks to see if the Stateful Set exists by retrieving it's `replicas` count. If the Stateful Set doesn't exist, then the command will complete with an error: -``` +```text Error from server (NotFound): statefulsets.apps "octopus" not found. ``` @@ -770,7 +774,7 @@ It's recommended best practice to access your Octopus instance over a secure HTT While this guide doesn't include specific instructions on how to configure access to Octopus Server in Kubernetes using an SSL/TLS certificate, there are many guides available. -In Kubernetes, this can be configured using an [Ingress Controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/), for example [NGINX](https://kubernetes.github.io/ingress-nginx/user-guide/tls/). +In Kubernetes, this can be configured using an [Ingress Controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/), for example [NGINX](https://kubernetes.github.io/ingress-nginx/user-guide/tls/). For web traffic destined for the Octopus Web Portal and REST API, you would terminate SSL on the ingress controller. For Polling Tentacles, passthrough would need to be allowed, usually on port `10943`. @@ -804,11 +808,13 @@ spec: ``` ## Trusting custom/internal Certificate Authority (CA) + Octopus Server can interface with several external sources (feeds, git repos, etc.), and those sources are often configured to use SSL/TLS for secure communication. It is common for organizations to have their own Certificate Authority (CA) servers for their internal networks. A CA server can issue SSL certificates for internal resources, such as build servers or internally hosted applications, without purchasing from a third-party vendor. Technologies such as Group Policy Objects (GPO) can configure machines (servers and clients) to trust the CA automatically, so users don't have to configure trust for them manually. However, this is not inherited in Kubernetes containers. When attempting to configure a connection to an external resource with an untrusted CA, you'll most likely encounter an error similar to this: -``` +```text Could not connect to the package feed. The SSL connection could not be established, see inner exception. The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot ``` + Kubernetes provides a method to incorporate a certificate without having to modify hosts or embed the certificate within the container by using a ConfigMap. ### Create ConfigMap @@ -835,7 +841,9 @@ With the ConfigMap created, add a `volumeMounts` component to the container sect readOnly: false ... ``` + Add the following excerpt to the end of the Octopus Server YAML + ```yaml volumes: - name: ca-pemstore diff --git a/src/pages/docs/installation/octopus-server-linux-container/systemd-service-definition.md b/src/pages/docs/installation/octopus-server-linux-container/systemd-service-definition.md index 51b240ce66..dd1322bbf7 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/systemd-service-definition.md +++ b/src/pages/docs/installation/octopus-server-linux-container/systemd-service-definition.md @@ -13,7 +13,7 @@ You can use `systemd` to boot the Octopus Server Linux container each time the O Be sure to change the `ADMIN_PASSWORD` and `MASTER_KEY` from the defaults shown here. ::: -``` +```ini [Unit] Description=Daemon for octopusdeploy After=docker-mssql.service docker.service @@ -44,7 +44,7 @@ docker network create -d bridge octopus The Octopus service also relies on a MS SQL service define in the file `/etc/systemd/system/docker-mssql.service` with the following contents: -``` +```ini [Unit] Description=Daemon for mssql After=docker.service @@ -78,4 +78,4 @@ Then start the services with the commands: ```bash systemctl start docker-mssql systemctl start docker-octopusdeploy -``` \ No newline at end of file +``` diff --git a/src/pages/docs/installation/octopus-server-linux-container/troubleshooting-octopus-server-in-a-container.md b/src/pages/docs/installation/octopus-server-linux-container/troubleshooting-octopus-server-in-a-container.md index ec910aea12..67e6e4d862 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/troubleshooting-octopus-server-in-a-container.md +++ b/src/pages/docs/installation/octopus-server-linux-container/troubleshooting-octopus-server-in-a-container.md @@ -17,7 +17,7 @@ When you create an Octopus Server container, you must agree with the [Octopus De If you get an error similar to: -``` +```text ERROR: You must accept the EULA ``` @@ -27,14 +27,16 @@ You must pass `--env "ACCEPT_EULA=Y"` when using `docker run` with an Octopus Se If you get an error similar to: -``` +```text image operating system "windows" cannot be used on this platform. ``` + or -``` +```text image operating system "linux" cannot be used on this platform. ``` + then you likely are using a Windows image with Linux Containers or a Linux image with Windows Containers. When running Containers on a Windows host machine, there is the options to run both Windows Containers and Linux Containers. Docker must be set to the correct container mode for the image you are using. Please refer to [switching between Windows and Linux Containers](https://docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers) documentation to learn how to switch between them. @@ -43,7 +45,7 @@ When running Containers on a Windows host machine, there is the options to run b You should create your Windows Containers with a volume mount so files such as logs can be stored outside the container. If you get an error similar to: -``` +```text Error response from daemon: invalid volume specification: '...': invalid mount config for type "bind": bind source path does not exist: ... ``` @@ -51,4 +53,4 @@ Please ensure that the folder you are mounting exists on the host machine and tr ### How can I install other software in the container? -When you have the container running, you may need to install other programs within it or read/modify files within. For example, you may want to have [PowerShell Core](https://github.com/PowerShell/PowerShell) available to run PowerShell scripts on the Octopus Server. To access bash within the container first run the command `docker ps` to find your container, then copy the Container ID. Next run `docker exec -it /bin/bash` to enter bash within the container. From there, you can install, remove or access anything else that is required. +When you have the container running, you may need to install other programs within it or read/modify files within. For example, you may want to have [PowerShell Core](https://github.com/PowerShell/PowerShell) available to run PowerShell scripts on the Octopus Server. To access bash within the container first run the command `docker ps` to find your container, then copy the Container ID. Next run `docker exec -it /bin/bash` to enter bash within the container. From there, you can install, remove or access anything else that is required. diff --git a/src/pages/docs/installation/permissions-for-the-octopus-windows-service.md b/src/pages/docs/installation/permissions-for-the-octopus-windows-service.md index bdcc4feccc..cc2a546aca 100644 --- a/src/pages/docs/installation/permissions-for-the-octopus-windows-service.md +++ b/src/pages/docs/installation/permissions-for-the-octopus-windows-service.md @@ -37,4 +37,4 @@ If you rely on Octopus to run certain tasks on the Octopus Server, you'll also n ## Learn more - - [Octopus installation](/docs/installation). +- [Octopus installation](/docs/installation). diff --git a/src/pages/docs/installation/sql-database/aws-rds.mdx b/src/pages/docs/installation/sql-database/aws-rds.mdx index 0ef49248e8..a14fca95b0 100644 --- a/src/pages/docs/installation/sql-database/aws-rds.mdx +++ b/src/pages/docs/installation/sql-database/aws-rds.mdx @@ -13,7 +13,6 @@ Each Octopus Server node stores project, environment, and deployment-related dat - [SQL Server on EC2](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/sql-server-on-ec2-overview.html) - To run SQL Server on a VM, please refer to our [self-managed SQL Server guide](/docs/installation/sql-database/self-managed-sql-server). - [AWS RDS for SQL Server](https://aws.amazon.com/rds/sqlserver/) - ## High Availability The database is a critical component of Octopus Deploy. If the database is lost or destroyed all your configuration will be lost with it. We highly recommend leveraging a combination of backups and SQL Server's high availability functionality. @@ -22,4 +21,4 @@ We recommend using [Multi-AZ](https://aws.amazon.com/rds/features/multi-az/) wit ## Disaster Recovery -Amazon provides [several mechanisms](https://docs.aws.amazon.com/prescriptive-guidance/latest/dr-standard-edition-amazon-rds/introduction.html) for Disaster Recovery (DR) should an entire region fail. We recommend reviewing the [DR solution matrix](https://docs.aws.amazon.com/prescriptive-guidance/latest/dr-standard-edition-amazon-rds/dr-matrix.html) to determine which method best suits your organizations needs. \ No newline at end of file +Amazon provides [several mechanisms](https://docs.aws.amazon.com/prescriptive-guidance/latest/dr-standard-edition-amazon-rds/introduction.html) for Disaster Recovery (DR) should an entire region fail. We recommend reviewing the [DR solution matrix](https://docs.aws.amazon.com/prescriptive-guidance/latest/dr-standard-edition-amazon-rds/dr-matrix.html) to determine which method best suits your organizations needs. diff --git a/src/pages/docs/installation/sql-database/azure-sql.mdx b/src/pages/docs/installation/sql-database/azure-sql.mdx index 4635efd422..3da7a8265b 100644 --- a/src/pages/docs/installation/sql-database/azure-sql.mdx +++ b/src/pages/docs/installation/sql-database/azure-sql.mdx @@ -14,7 +14,6 @@ Each Octopus Server node stores project, environment, and deployment-related dat - [SQL Server on a Virtual Machine](https://docs.microsoft.com/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-iaas-overview/) - To run SQL Server on a VM, please refer to our [self-managed SQL Server guide](/docs/installation/sql-database/self-managed-sql-server). - [Azure SQL Database as a Service](https://docs.microsoft.com/azure/sql-database/sql-database-technical-overview/) - ## Using Microsoft Entra in Azure SQL \{#using-entra-in-azure-sql} Octopus Deploy supports using [Microsoft Entra](https://docs.microsoft.com/en-us/sql/connect/ado-net/sql/azure-active-directory-authentication?view=sql-server-ver15#setting-azure-active-directory-authentication) for authentication. This includes the ability to use a [Managed Identity](https://docs.microsoft.com/en-us/sql/connect/ado-net/sql/azure-active-directory-authentication?view=sql-server-ver15#using-active-directory-managed-identity-authentication) when connecting to your Octopus database hosted in Azure SQL. @@ -25,7 +24,7 @@ For self-hosted installations of Octopus Deploy, you will need to click on the ` ## High Availability -The database is a critical component of Octopus Deploy. If the database is lost or destroyed all your configuration will be lost with it. +The database is a critical component of Octopus Deploy. If the database is lost or destroyed all your configuration will be lost with it. We recommend using [zone-redundant availability](https://learn.microsoft.com/en-us/azure/azure-sql/database/high-availability-sla?view=azuresql&tabs=azure-powershell#zone-redundant-availability) with Azure SQL to ensure the resilience and availability of your Octopus database. This will ensure that your replicated is spread across three Azure availability zones in the primary region. In the event of a failure of the primary zone Azure SQL automatically switches to another zone. @@ -39,4 +38,4 @@ In the event of a failover it would be necessary to re-configure the database co :::div{.warning} When a disaster occurs, any data not synchronized will be lost. Depending on the replication speed, this could be up to a couple of minutes. -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/sql-database/gcp-cloud-sql.mdx b/src/pages/docs/installation/sql-database/gcp-cloud-sql.mdx index 086cc90490..0068df450a 100644 --- a/src/pages/docs/installation/sql-database/gcp-cloud-sql.mdx +++ b/src/pages/docs/installation/sql-database/gcp-cloud-sql.mdx @@ -27,4 +27,4 @@ In the event of a primary region failure we recommend following Google's [docume :::div{.warning} When a disaster occurs, any data not synchronized will be lost. Depending on the replication speed, this could be up to a couple of minutes. -::: \ No newline at end of file +::: diff --git a/src/pages/docs/installation/sql-database/self-managed-sql-server.md b/src/pages/docs/installation/sql-database/self-managed-sql-server.md index a8ae7bdfba..4001d4e68a 100644 --- a/src/pages/docs/installation/sql-database/self-managed-sql-server.md +++ b/src/pages/docs/installation/sql-database/self-managed-sql-server.md @@ -28,9 +28,9 @@ If you don't want Octopus to automatically create the database for you as part o 1. The default schema must be **dbo**. 1. The database must use a **case-insensitive collation** (a collation with a name containing "\_CI\_"). 1. If you are using **Integrated Authentication** to connect to your database: - - The user account installing Octopus must be a member of the **db\_owner** role for that database. - - The account the Octopus Deploy Windows Server process runs under (by default, the `Local System` account) must be a member of the **db\_owner** role for that database. -2. If you are using **SQL Authentication** to connect to your database, the SQL user account defined in your connection string must be a member of the **db\_owner** role for that database. + - The user account installing Octopus must be a member of the **db\_owner** role for that database. + - The account the Octopus Deploy Windows Server process runs under (by default, the `Local System` account) must be a member of the **db\_owner** role for that database. +1. If you are using **SQL Authentication** to connect to your database, the SQL user account defined in your connection string must be a member of the **db\_owner** role for that database. ## Changing the database collation @@ -55,7 +55,7 @@ Make sure the Octopus Server is connecting to the listener which will route data A typical connection string for using a SQL Server AlwaysOn availability group looks like this: -``` +```text Server=tcp:AGListener,1433;Database=Octopus;IntegratedSecurity=SSPI;MultiSubnetFailover=True ``` @@ -95,4 +95,3 @@ When a disaster occurs, any data not synchronized will be lost. Depending on th Fundamentally, both options are the same. They asynchronously transfer database transactions to a secondary data center. When a disaster occurs, you perform the necessary steps as detailed by Microsoft to make the secondary database the primary. There are pros and cons to either approach. And there might be additional licensing costs or limits. Our recommendation is to consult your DBA on which option they prefer. - diff --git a/src/pages/docs/installation/troubleshooting.md b/src/pages/docs/installation/troubleshooting.md index 5c700de957..eefe5c12f7 100644 --- a/src/pages/docs/installation/troubleshooting.md +++ b/src/pages/docs/installation/troubleshooting.md @@ -24,6 +24,7 @@ As of **Octopus 2018.5.3** and **Tentacle 3.21.0**, most operations support long ## Enabling On the target machine: + 1. Ensure .NET Framework 4.6.2 or later is installed. 1. Open Group Policy Editor (Press Windows Key and type `gpedit.msc` and hit Enter key). 1. Navigate to and enable. @@ -42,4 +43,4 @@ Once this option is on, PowerShell scripts automatically support long file names ## Learn more - - [Octopus installation](/docs/installation) +- [Octopus installation](/docs/installation)