diff --git a/docs/Deploy/Deploy-Fleet-on-AWS-ECS.md b/articles/deploy-fleet-on-aws-ecs.md
similarity index 71%
rename from docs/Deploy/Deploy-Fleet-on-AWS-ECS.md
rename to articles/deploy-fleet-on-aws-ecs.md
index a1601178e5..db0a440218 100644
--- a/docs/Deploy/Deploy-Fleet-on-AWS-ECS.md
+++ b/articles/deploy-fleet-on-aws-ecs.md
@@ -1,4 +1,8 @@
-## Deploy Fleet on AWS ECS
+# Deploy Fleet on AWS ECS
+
+> **This article was archived on May 15, 2024** and may be out of date. Check out [Deploy Fleet](https://fleetdm.com/docs/deploy/deploy-fleet) for our recommended deployment method.
+
+
Terraform reference architecture can be found [here](https://github.com/fleetdm/fleet/tree/main/infrastructure/dogfood/terraform/aws)
@@ -22,7 +26,11 @@ Migrations in ECS can be achieved by running [dedicated ECS tasks](https://githu
Alternatively you can bake the prepare command into the same task definition see [here for a discussion](https://github.com/fleetdm/fleet/pull/1761#discussion_r697599457), but this is not recommended for production environments.
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Deploy/deploy-on-aws-with-terraform.md b/articles/deploy-fleet-on-aws-with-terraform.md
similarity index 96%
rename from docs/Deploy/deploy-on-aws-with-terraform.md
rename to articles/deploy-fleet-on-aws-with-terraform.md
index 2aaf52eb44..e441730bc6 100644
--- a/docs/Deploy/deploy-on-aws-with-terraform.md
+++ b/articles/deploy-fleet-on-aws-with-terraform.md
@@ -1,5 +1,7 @@
# Deploy Fleet on AWS with Terraform
+
+
Learn how to deploy Fleet on AWS with Terraform IaC (infrastructure as code).
Deploying on AWS with Fleet’s reference architecture is an easy way to get a fully functional Fleet instance that can scale to your needs.
@@ -347,7 +349,10 @@ This particular issue would only be encountered for the largest of Fleet deploym
More troubleshooting tips can be found here https://fleetdm.com/docs/get-started/faq#deployment
-
-
-
-
+
+
+
+
+
+
+
diff --git a/docs/Deploy/Deploy-Fleet-on-CentOS.md b/articles/deploy-fleet-on-centos.md
similarity index 91%
rename from docs/Deploy/Deploy-Fleet-on-CentOS.md
rename to articles/deploy-fleet-on-centos.md
index 016a3c94bf..efb7fefc80 100644
--- a/docs/Deploy/Deploy-Fleet-on-CentOS.md
+++ b/articles/deploy-fleet-on-centos.md
@@ -1,8 +1,10 @@
-## Deploy Fleet on CentOS
+# Deploy Fleet on CentOS
+
+
In this guide, we're going to install Fleet and all of its application dependencies on a CentOS 7.1 server. Once we have Fleet up and running, we're going to install osquery on that same CentOS 7.1 host and enroll it in Fleet. This should give you a good understanding of both how to install Fleet as well as how to install and configure osquery such that it can communicate with Fleet.
-### Setting up a host
+## Setting up a host
If you don't have a CentOS host readily available, Fleet recommends using [Vagrant](https://www.vagrantup.com/) for this guide. You can find installation instructions on Vagrant's [downloads page](https://developer.hashicorp.com/vagrant/downloads).
@@ -17,7 +19,7 @@ vagrant up
vagrant ssh
```
-### Installing Fleet
+## Installing Fleet
To install Fleet, [download](https://github.com/fleetdm/fleet/releases) the latest release from GitHub. The binary is in an archive that uses this naming convention, including the current version: `fleet__linux.tar.gz`.
@@ -31,9 +33,9 @@ For example:
fleet version
```
-### Installing and configuring dependencies
+## Installing and configuring dependencies
-#### MySQL
+### MySQL
To install the MySQL server files, run the following:
@@ -100,7 +102,7 @@ It's also worth creating a MySQL database for us to use at this point. Run the f
echo 'CREATE DATABASE fleet;' | mysql -u root -p
```
-#### Redis
+### Redis
To install the Redis server files, run the following:
@@ -115,7 +117,7 @@ To start the Redis server in the background, you can run the following:
sudo service redis start
```
-### Running the Fleet server
+## Running the Fleet server
Now that we have installed Fleet, MySQL, and Redis, we are ready to launch Fleet! First, we must "prepare" the database. We do this via `fleet prepare db`:
@@ -162,11 +164,11 @@ Now we are ready to run the server! We do this via `fleet serve`:
Now, if you go to [https://localhost:8080](https://localhost:8080) in your local browser, you should be redirected to [https://localhost:8080/setup](https://localhost:8080/setup) where you can create your first Fleet user account.
-### Running Fleet with systemd
+## Running Fleet with systemd
See [Running with systemd](https://fleetdm.com/docs/deploying/configuration#running-with-systemd) for documentation on running fleet as a background process and managing the fleet server logs.
-### Installing and running osquery
+## Installing and running osquery
> Note that this whole process is outlined in more detail in the [Adding Hosts To Fleet](https://fleetdm.com/docs/using-fleet/adding-hosts) document. The steps are repeated here for the sake of a continuous tutorial.
@@ -214,7 +216,10 @@ sudo /usr/bin/osqueryd \
If you go back to [https://localhost:8080/hosts/manage](https://localhost:8080/hosts/manage), you should have a host successfully enrolled in Fleet!
-
-
+
+
+
+
+
+
-
diff --git a/docs/Deploy/cloudgov.md b/articles/deploy-fleet-on-cloudgov.md
similarity index 87%
rename from docs/Deploy/cloudgov.md
rename to articles/deploy-fleet-on-cloudgov.md
index 75198c362a..506ef1ca96 100644
--- a/docs/Deploy/cloudgov.md
+++ b/articles/deploy-fleet-on-cloudgov.md
@@ -1,5 +1,7 @@
# Deploy Fleet on Cloud.gov (Cloud Foundry)
+
+
Cloud.gov is a [FEDRAMP moderate Platform-as-a-Service
(PaaS)](https://marketplace.fedramp.gov/#!/product/18f-cloudgov?sort=productName). This repository
includes a sample [manifest.yml.example](https://github.com/fleetdm/fleet/blob/main/manifest.yml.cloudgov.example) file ready to be pushed and run the
@@ -110,7 +112,10 @@ variables](https://fleetdm.com/docs/deploying/configuration#using-only-environme
}
```
-
-
-
-
+
+
+
+
+
+
+
diff --git a/docs/Deploy/deploy-on-hetzner-cloud.md b/articles/deploy-fleet-on-hetzner-cloud.md
similarity index 97%
rename from docs/Deploy/deploy-on-hetzner-cloud.md
rename to articles/deploy-fleet-on-hetzner-cloud.md
index a32d2df8dc..bc61e48b69 100644
--- a/docs/Deploy/deploy-on-hetzner-cloud.md
+++ b/articles/deploy-fleet-on-hetzner-cloud.md
@@ -1,5 +1,7 @@
# Deploy Fleet on Hetzner Cloud
+
+
Learn how to deploy Fleet on Hetzner Cloud using cloud-init and Docker. [Hetzner](https://hetzner.com) is a great price-performance provider for “root” (dedicated) and Virtual Private Servers (VPS), offering high performance and generous bandwidth.
## The 2 minute setup
@@ -344,7 +346,7 @@ To follow this guide, you’ll need:
First, purchase a machine (for example, a [Hetzner Cloud](https://hetzner.com/cloud) instance):
-
+
_Hetzner cloud purchase machine screen_
After purchasing, you should know the IP address of your machine (and make sure you set up things like SSH [securely](https://community.hetzner.com/tutorials/securing-ssh)!)
@@ -701,7 +703,11 @@ Now that you’re ready to use Fleet and have a host installed. Here's some next
- Import Fleet's [standard query library](https://fleetdm.com/docs/using-fleet/standard-query-library) to start asking questions about your hosts.
- To run a more secure setup, consider creating a dedicated `fleet` user with Docker's support for user [namespaces](https://docs.docker.com/engine/security/userns-remap/).
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Deploy/Deploy-Fleet-on-Kubernetes.md b/articles/deploy-fleet-on-kubernetes.md
similarity index 90%
rename from docs/Deploy/Deploy-Fleet-on-Kubernetes.md
rename to articles/deploy-fleet-on-kubernetes.md
index c5318ccb22..e8f4a85fae 100644
--- a/docs/Deploy/Deploy-Fleet-on-Kubernetes.md
+++ b/articles/deploy-fleet-on-kubernetes.md
@@ -1,10 +1,12 @@
-## Deploy Fleet on Kubernetes
+# Deploy Fleet on Kubernetes
+
+
In this guide, we will focus on deploying Fleet only on a Kubernetes cluster. Kubernetes is a container orchestration tool that was open sourced by Google in 2014.
There are 2 primary ways to deploy the Fleet server to a Kubernetes cluster. The first is via `kubectl` with a `deployment.yml` file. The second is using Helm, the Kubernetes Package Manager.
-### Deploying Fleet with kubectl
+## Deploying Fleet with kubectl
We will assume you have `kubectl` and MySQL and Redis are all set up and running. Optionally you have minikube to test your deployment locally on your machine.
@@ -14,7 +16,7 @@ Let's tell Kubernetes to create the cluster by running the below command.
`kubectl apply -f ./fleet-deployment.yml`
-### Initializing Helm
+## Initializing Helm
If you have not used Helm before, you must run the following to initialize your cluster prior to installing Fleet:
@@ -24,7 +26,7 @@ helm init
> Note: The helm init command has been removed in Helm v3. It performed two primary functions. First, it installed Tiller which is no longer needed. Second, it set up directories and repositories where Helm configuration lived. This is now automated in Helm v3; if the directory is not present it will be created.
-### Deploying Fleet with Helm
+## Deploying Fleet with Helm
To configure preferences for Fleet for use in Helm, including secret names, MySQL and Redis hostnames, and TLS certificates, download the [values.yaml](https://raw.githubusercontent.com/fleetdm/fleet/main/charts/fleet/values.yaml) and change the settings to match your configuration.
@@ -40,11 +42,11 @@ helm upgrade --install fleet fleet \
The Fleet Helm Chart [README.md](https://github.com/fleetdm/fleet/blob/main/charts/fleet/README.md) also includes an example using namespaces, which is outside the scope of the examples below.
-### Installing infrastructure dependencies with Helm
+## Installing infrastructure dependencies with Helm
For the sake of this tutorial, we will again use Helm, this time to install MySQL and Redis.
-#### MySQL
+### MySQL
The MySQL that we will use for this tutorial is not replicated and it is not Highly Available. If you're deploying Fleet on a Kubernetes managed by a cloud provider (GCP, Azure, AWS, etc), I suggest using their MySQL product if possible as running HA MySQL in Kubernetes can be difficult. To make this tutorial cloud provider agnostic however, we will use a non-replicated instance of MySQL.
@@ -76,7 +78,7 @@ fleet-database-mysql:3306
We will use this address when we configure the Kubernetes deployment and database migration job, but if you're not using a Helm-installed MySQL in your deployment, you'll have to change this in your Kubernetes config files. For the Fleet Helm Chart, this will be used in the `values.yaml`.
-##### Database migrations
+#### Database migrations
Note: this step is not neccessary when using the Fleet Helm Chart as it handles migrations automatically.
@@ -93,7 +95,7 @@ kubectl delete -f ./docs/Deploy/_kubernetes/fleet-migrations.yml
kubectl create -f ./docs/Deploy/_kubernetes/fleet-migrations.yml
```
-#### Redis
+### Redis
Helm v2
```sh
@@ -118,17 +120,17 @@ fleet-cache-redis:6379
We will use this address when we configure the Kubernetes deployment, but if you're not using a Helm-installed Redis in your deployment, you'll have to change this in your Kubernetes config files. If you are using the Fleet Helm Chart, this will also be used in the `values.yaml` file.
-### Setting up and installing Fleet
+## Setting up and installing Fleet
> **A note on container versions**
>
> The Kubernetes files referenced by this tutorial use the Fleet container tagged at `1.0.5`. The tag is something that should be consistent across the migration job and the deployment specification. If you use these files, I suggest creating a workflow that allows you templatize the value of this tag. For further reading on this topic, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/overview/#container-images).
-#### Create server secrets
+### Create server secrets
It should be noted that by default Kubernetes stores secret data in plaintext in etcd. Using an alternative secret storage mechanism is outside the scope of this tutorial, but let this serve as a reminder to secure the storage of your secrets.
-##### TLS certificate & key
+#### TLS certificate & key
Consider using Lets Encrypt to easily generate your TLS certificate. For examples on using `lego`, the command-line Let's Encrypt client, see the [documentation](https://github.com/xenolf/lego#cli-example). Consider the following example, which may be useful if you're a GCP user:
@@ -153,7 +155,7 @@ Now you'll have to give this CSR to a Certificate Authority, and they will give
kubectl create secret tls fleet-tls --key=./tls.key --cert=./tls.crt
```
-#### Deploying Fleet
+### Deploying Fleet
First we must deploy the instances of the Fleet webserver. The Fleet webserver is described using a Kubernetes deployment object. To create this deployment, run the following:
@@ -169,7 +171,7 @@ ts=2017-11-16T02:48:38.440578433Z component=service method=ListUsers user=none e
ts=2017-11-16T02:48:38.441148166Z transport=https address=0.0.0.0:443 msg=listening
```
-#### Deploying the load balancer
+### Deploying the load balancer
Now that the Fleet server is running on our cluster, we have to expose the Fleet webservers to the internet via a load balancer. To create a Kubernetes `Service` of type `LoadBalancer`, run the following:
@@ -177,7 +179,7 @@ Now that the Fleet server is running on our cluster, we have to expose the Fleet
kubectl apply -f ./docs/Deploy/_kubernetes/fleet-service.yml
```
-#### Configure DNS
+### Configure DNS
Finally, we must configure a DNS address for the external IP address that we now have for the Fleet load balancer. Run the following to show some high-level information about the service:
@@ -189,7 +191,10 @@ In this output, you should see an "EXTERNAL-IP" column. If this column says `
-
-
-
+
+
+
+
+
+
+
diff --git a/docs/Deploy/deploy-on-render.md b/articles/deploy-fleet-on-render.md
similarity index 90%
rename from docs/Deploy/deploy-on-render.md
rename to articles/deploy-fleet-on-render.md
index 4d699970f3..aae6749182 100644
--- a/docs/Deploy/deploy-on-render.md
+++ b/articles/deploy-fleet-on-render.md
@@ -1,5 +1,9 @@
# Deploy Fleet on Render
+
+
+> Updated May 2024 to reflect Fleet's recommended Render deployment.
+
[Render](https://render.com/) is a cloud hosting service that makes it easy to get up and running fast, without the typical configuration headaches of larger enterprise hosting providers. Our Render blueprint offers a one-click deploy of Fleet in under five minutes, and provides a scalable cloud environment with a lower barrier to entry, making it a great place to get some experience with [Fleet](https://fleetdm.com/) and [osquery](https://osquery.io/).
With one click, our Render blueprint will provision a Fleet web service, a MySQL database, and a Redis in-memory data store. Each service requires Render's `standard` plan at a cost of $7/mo each, totaling $21/mo to host your Fleet instance. If you prefer to follow a video, you can [watch us demonstrating the Render deployment process](https://www.loom.com/share/9373fb6bab2c43aa91949490ceb2678c?sid=081d70de-d736-4681-8107-2d80ec525235).
@@ -76,7 +80,10 @@ fleetctl apply -f standard-query-library.yaml
That’s it! We have successfully deployed and configured a Fleet instance! Render makes this process super easy, and you can even enable auto-scaling and let the app grow with your needs.
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/website/assets/images/articles/deploy-fleet-on-aws-ecs-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-aws-ecs-800x450@2x.png
new file mode 100644
index 0000000000..203c205fe0
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-aws-ecs-800x450@2x.png differ
diff --git a/website/assets/images/articles/deploy-fleet-on-aws-with-terraform-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-aws-with-terraform-800x450@2x.png
new file mode 100644
index 0000000000..7ceb7ac372
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-aws-with-terraform-800x450@2x.png differ
diff --git a/website/assets/images/articles/deploy-fleet-on-centos-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-centos-800x450@2x.png
new file mode 100644
index 0000000000..390e7b3e89
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-centos-800x450@2x.png differ
diff --git a/website/assets/images/articles/deploy-fleet-on-cloudgov-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-cloudgov-800x450@2x.png
new file mode 100644
index 0000000000..306c4fae28
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-cloudgov-800x450@2x.png differ
diff --git a/docs/images/deploy-fleet-on-hetzner-cloud-1-932x388@2x.png b/website/assets/images/articles/deploy-fleet-on-hetzner-cloud-1-932x388@2x.png
similarity index 100%
rename from docs/images/deploy-fleet-on-hetzner-cloud-1-932x388@2x.png
rename to website/assets/images/articles/deploy-fleet-on-hetzner-cloud-1-932x388@2x.png
diff --git a/website/assets/images/articles/deploy-fleet-on-hetzner-cloud-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-hetzner-cloud-800x450@2x.png
new file mode 100644
index 0000000000..55031a459f
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-hetzner-cloud-800x450@2x.png differ
diff --git a/website/assets/images/articles/deploy-fleet-on-kubernetes-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-kubernetes-800x450@2x.png
new file mode 100644
index 0000000000..be94ed82dc
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-kubernetes-800x450@2x.png differ
diff --git a/website/assets/images/articles/deploy-fleet-on-render-800x450@2x.png b/website/assets/images/articles/deploy-fleet-on-render-800x450@2x.png
new file mode 100644
index 0000000000..84d0023f33
Binary files /dev/null and b/website/assets/images/articles/deploy-fleet-on-render-800x450@2x.png differ
diff --git a/website/config/routes.js b/website/config/routes.js
index 3475959179..c7f446ab32 100644
--- a/website/config/routes.js
+++ b/website/config/routes.js
@@ -434,6 +434,13 @@ module.exports.routes = {
'GET /docs/deploy/proxies': '/docs/deploy/reference-architectures#using-a-proxy',
'GET /docs/deploy/public-ip': '/docs/deploy/reference-architectures#public-ips-of-devices',
'GET /docs/deploy/monitoring-fleet': '/docs/deploy/reference-architectures#monitoring-fleet',
+ 'GET /docs/deploy/deploy-fleet-on-aws-ecs': '/guides/deploy-fleet-on-aws-ecs',
+ 'GET /docs/deploy/deploy-fleet-on-centos': '/guides/deploy-fleet-on-centos',
+ 'GET /docs/deploy/cloudgov': '/guides/deploy-fleet-on-cloudgov',
+ 'GET /docs/deploy/deploy-on-aws-with-terraform': '/guides/deploy-fleet-on-aws-with-terraform',
+ 'GET /docs/deploy/deploy-on-hetzner-cloud': '/guides/deploy-fleet-on-hetzner-cloud',
+ 'GET /docs/deploy/deploy-on-render': '/guides/deploy-fleet-on-render',
+ 'GET /docs/deploy/deploy-fleet-on-kubernetes': '/guides/deploy-fleet-on-kubernetes',
// ╔╦╗╦╔═╗╔═╗ ╦═╗╔═╗╔╦╗╦╦═╗╔═╗╔═╗╔╦╗╔═╗ ┬ ╔╦╗╔═╗╦ ╦╔╗╔╦ ╔═╗╔═╗╔╦╗╔═╗
// ║║║║╚═╗║ ╠╦╝║╣ ║║║╠╦╝║╣ ║ ║ ╚═╗ ┌┼─ ║║║ ║║║║║║║║ ║ ║╠═╣ ║║╚═╗