diff --git a/.gitignore b/.gitignore index 2852b63370b..39152680011 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ tgz_cache/ index_cache/ helm/ node_modules/ +!archive/website \ No newline at end of file diff --git a/archive/website/src/content/deprecated/SCALE/SUPPORT.md b/archive/website/src/content/deprecated/SCALE/SUPPORT.md new file mode 100644 index 00000000000..eefd253f713 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/SUPPORT.md @@ -0,0 +1,92 @@ +--- +title: Support Policy +sidebar: + order: 2 +--- + +## TrueCharts on TrueNAS SCALE + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +### Supported Versions of TrueNAS SCALE + +| TrueNAS Version | Branch | Getting Updates | Accepting Support Tickets | Accepting Bug Reports | Notes | +| ------------------ | -------------- | --------------- | ------------------------- | --------------------- | ---------------------------------------------------------------------------------------------- | +| 22.12.4.2 or prior | `master` | ❌ | ❌ | ❌ | SCALE is deprecated | +| 23.10.2 | `legacy_23.10` | ❌ | ❌ | ❌ | SCALE is deprecated | +| 24.04.X | `master` | ❌ | ❌ | ❌ | SCALE is deprecated | +| Alpha/BETA/RC | `master` | ❌ | ❌ | ❌ | SCALE is deprecated | +| Nightly | `master` | ❌ | ❌ | ❌ | SCALE is deprecated | + +:::tip + +Set aside time for a maintenance window or simple check-in for your SCALE system every week, month or quarter as this can go a long way to helping prevent lengthy amounts of time needing to be spent bringing a SCALE system up to date. SCALE _usually_ has two major version releases each year, so at a minimum ensuring you're prepared for those will help. + +::: + +## Project Scope + +For more info on what to expect from TrueCharts Apps, be sure to also read the [Project Scope documentation](/general/scope). + +:::caution[Support Guidelines] + +Our [Discord](/s/discord) support (the ticketing system inside #support) is primarily limited to what is covered by our written guides. This includes installing, linking and editing apps. This doesn't mean the actual setup of the application. All #support tickets covered by the staff are done so on a **best effort** basis. + +::: + +## Unsupported Features + +iX-Systems has built a rather crude middleware in-between Apps and the Kubernetes cluster itself. Many of its features have severe design flaws, and they do not have the expertise in-house nor the intention to fix the codebase. + +For this reason we do not support a number of features on TrueNAS SCALE Apps and/or have alternative features implemented ourselves. This includes + +### Stop Button + +**DO NOT** use the iX-provided `Stop` button in the SCALE GUI. Its implementation is severely flawed and only works with Kubernetes objects designed by iX-Systems themselves, leaving your Apps open to being left in a limbo state. +Instead of the Stop button, use either + +- The TrueCharts "Stop-All" feature available in the apps configuration/edit section or + +- [HeavyScript](https://github.com/Heavybullets8/heavy_script) with the `-x appname` or `--stop appname` arguments. + +### Storage Rollback + +While rollback of Kubernetes objects works fine, this is a native feature on normal Helm deployments as well. +The "include storage" option for rollback on SCALE either does not work at all or breaks some things (like databases). + +### Migration to another Pool + +While the idea of cross-pool migration is nice, it inherently does not work because it's not Kubernetes aware and only works correctly with a limited subset of Kubernetes objects created by iX-Systems. + +Migration certainly does not work with CNPG, our PostgreSQL backend at all. +Manual steps might be needed to restore systems containing databases. + +### SCALE Certificates + +There are a lot of issues with SCALE certificates and they are crudely injected into the Kubernetes cluster in ways that are not "normal" when working with Kubernetes. +We instead rely on `Cert-Manager`, an industry-standard Kubernetes-aware certificate management solution for Kubernetes. + +### iX-Volumes + +iX-Volumes are a crudely designed "PVC-like" storage solution by iX-Systems, offloading behavior that should normally be handled by PVC storage controllers onto the host system. +This is not a good way to deal with storage on Kubernetes and might unexpectedly lead to issues. + +We use PVC storage, like normal with Kubernetes, instead. + +### Backup and Restore + +iX-Systems has not officially released backup and restore, and SCALE Apps do not work with normal Kubernetes backup and restore tools like Velero, due to their archaic Kubernetes folder-structure-design. +[HeavyScript](https://github.com/Heavybullets8/heavy_script) offers an alternative, but we cannot guarantee it works out-of-the-box, at all or with our Apps. But it's the best there is at the moment. + +Backup and Restore certainly does not work with CNPG, our PostgreSQL backend at all. Manual steps might be needed to restore systems containing databases. + +### TrueNAS GPU Selectors + +The GPU selectors have weirdly worded options, confusing many users and heavily rely on the host system to say which GPUs are available or not. This might cause issues with updates, installs, edits etc. +Kubernetes usually handles GPUs itself, the amount entered is just a request of how many GPUs the applications/container wants assigned and Kubernetes can handle the rest. + +Instead we offer our own option, where you can enter the number of specific GPUs you want assigned under "Resources" in the "Limits" section diff --git a/archive/website/src/content/deprecated/SCALE/guides/add-storage.md b/archive/website/src/content/deprecated/SCALE/guides/add-storage.md new file mode 100644 index 00000000000..e0fbc6e170a --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/add-storage.md @@ -0,0 +1,74 @@ +--- +title: Adding Storage +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +Apps in SCALE rely on several kinds of storage for core data: + +- [Persistent Volumes](https://docs.k3s.io/storage) (`PVC`), a specific volume which Kubernetes will not delete (i.e. persist) through upgrades, restarts, and rollbacks of your app/chart. +- Hostpaths (`hostpath`), a path (/mnt/tank/pool/folder) to a data volume, typically a dataset within a pool on your SCALE installation, or a mounted folder to network attached storage. +- You can use a folder mapped to the container or memory (`emptyDir`). +- You can directly link an NFS share (`NFS Share`) to your app storage. + +You can choose during app installation to use a PVC to store all of your app's data, or manually assign a hostpath. + +**Note:** We only provide support for apps using **PVC** for core app storage, often named "config", but you can always add additional hostpaths for other storage, such as your media. + +## Adding additional app storage + +Even if an app doesn't let you specify a hostpath in its chart config, the TrueCharts config lets you **add additional app storage** through hostpaths which are linked to a local path on the app (e.g linking `/mnt/tank/pool/folder` to `/media/folder`). This will allow the path on your SCALE installation to be available from your app, assuming permissions are correctly configured. + +From your SCALE App's configuration (during or after installation): + +1. Scroll down to `Storage and Persistence` +2. Under `Additional App Storage`, click **Add** +3. Check the box next to **Automatic Permissions** if you'd like the app to automatically configure permissions to the UID of the container (_default:_ `568`) +4. Specify the type of storage you'd like to add (typically a `hostpath`) +5. _(For hostpaths)_ Specify the path on your SCALE installation you'd like to mount to the container (e.g. `/mnt/tank/pool/folder`) +6. _(For hostpaths)_ Specify the path on you App you'd like to link to the hostpath (e.g. `/media/folder`) +7. Click **Save** to re-create your App with the specified additional app storage. + +## Permissions + +Permissions apply for app storage and are based on the app's fsGroup which you can configure during app installation. By default most apps will set this to the `apps` group (568). + +Apps also have a **Automatic Permissions** option for app storage and additional app storage. If you enable automatic permissions, the app will attempt to `chown` the hostpath and all subfolders within the hostpath during deployment. **Note:** This may not work for large volumes. + +- Be careful with automatic permissions for shared datasets, especially if folders or subfolders carry different user/group owners. Be sure that your permission changes will not break other apps/services. +- The `Automatic Permissions` command for an app will only apply upon the installation or update of an app. +- It's not typically recommended to use automatic permissions for mounted shares (e.g. NFS shares on other external systems) since it will rewrite permissions for those folders which may be shared with multiple systems. +- You can always add the apps fsGroup (_default:_ `568`) +- ACLs are not recommended or supported for app storage as many apps have issues with accessing data managed by an ACL. + +You can learn more about permissions and ACLs in the [TrueNAS SCALE Docs](https://www.truenas.com/docs/scale/scaleuireference/storage/datasets/editaclscreens/). + +## Host Path Validation Safety + +Starting with SCALE Bluefin (22.12), there's a new safety check on apps called **Host Path Safety Checks** located in your SCALE installation's Apps **Advanced Settings** (the same place as your k3s network, GPU, and other settings). This check is intended to ensure datasets used by your apps (e.g. media datasets) are not in use by a network share (e.g. SMB, NFS, CIFS). We require this for security (Protect the system from container escape vulnerabilities using hostPath) and reliability (Prevent multiple services (shares for example) from using the same dataset.) reasons. **You can disable these checks, but it may lead to issues with your Apps depending on your permissions configuration**. + +To disable Host Path Safety Checks: + +1. From the SCALE Apps page, click **Settings** > **Advanced Settings** +2. Uncheck **Enable Host Path Safety Checks** +3. Click **Save** and wait for your apps to re-deploy. + +Alternatively, you can add your additional app storage [using the NFS share option](/deprecated/scale/guides/nfs-share) instead of hostpath without violating Host Path Safety Checks. + +**If you choose to disable your host path safety checks, we cannot provide support for any issues related to storage or permission.** When opening a TrueCharts support ticket related to storage issues, you must show that host path safety checks are still enabled in order for us to help. + +## Video Guide + + + +## Notes + +- When using hostpaths for config data and other app data, you typically want to create a dataset in your pool for each app so you can individually configure and manage the data and permissions. +- Using hostpath instead of PVC can also cause issues with rollbacks if the container isn't able to update config files and other data during the rollback. +- If you have legacy (i.e. FreeNAS, TrueNAS or early SCALE) datasets, you may typically see the media fsGroup or PUID (`8675309`) which you'll want to adjust your permission to work with apps running under the apps PUID (`568`). +- Apps which violate Host Path Safety Checks will not finish deploying. In other words, if you have an app deploying which includes a hostpath shared with an SMB/NFS share, you'll see errors in the App's events during deployment. +- Creating separate datasets in your pool will let you independently manage permissions each for parent or child dataset. diff --git a/archive/website/src/content/deprecated/SCALE/guides/backup-restore.md b/archive/website/src/content/deprecated/SCALE/guides/backup-restore.md new file mode 100644 index 00000000000..df7ce3ab0ab --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/backup-restore.md @@ -0,0 +1,127 @@ +--- +title: Backup, Migrations and Restoring +sidebar: + order: 15 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +:::caution[The below is a work in progress] + +We've recently completely reworked the way we handle backups, moving away from platform-specific solutions to a "one size fits everyone" system using VolSync and CNPG backups. We're also making it known that the prior version of this guide will **not** work on TrueNAS SCALE 24.04.X "DragonFish". This updated guide has been written with the best efforts of the staff and tested as best possible. We are not responsible if it doesn't work for every scenario or user situation. + +::: + +## Requirements + +### System Apps + +As this is a SCALE-specific guide, we expect users to have fully followed the SCALE quick-start [guide](/deprecated/scale) and hence have installed _all_ [operators](/deprecated/scale/#minimal-getting-started-setup-with-scale) from the `system` train as listed there. This includes `VolSync`, which depends on `Prometheus-Operator`, so ensure you have installed `Prometheus-Operator` prior to installing `VolSync`. + +### S3 Provider Setup + +## Backup Configuration + +:::caution[Credentials] + +Do not add the credentials inside the VolSync chart. This won't work as they need to be added to each chart individually. + +::: + +Enter your S3 credentials under the `credentials` section in each app you want to enable backup/restore functionality on. + +![S3 Credentials](./img/s3_scale_credentials.png) + +### PVC Backups + +PVC data can be easily backed up to S3 storage by using our integrated VolSync support. For each individual app, the `VolSync Destination (Restore)` option _must_ set on creation of the app by doing the following: + +1. Add `VolSync` to each persistence object you want synced as below + +![S3 Scale VolSync ](./img/s3_scale_pvc_backup.png) + +2. Add the name you gave to the S3 credentials earlier, under the `credentials` section of VolumeSnapshots + +3. Enable the `VolSync Source (backup)` and/or `VolSync Destination Restore)` options as desired + +4. Confirm the data is being sent to your S3 host after ~5 minutes + +:::note[Bucket Creation] + +You do not have to manually create the bucket beforehand, although this is recommended to ensure the bucket's name is available beforehand. + +::: + +### CNPG Database Backups + +CNPG-backed PostgreSQL databases have their own S3 backup system. We have integrated it in such a way that they can safely share a bucket with the above PVC backups. + +For each app: + +1. Add CNPG backups to each database you want backed up like shown below + +2. Add the name you gave to the S3 credentials earlier, under the `credentials` section + +3. Confirm the data is being sent to your S3 host after ~5 minutes + +4. We advise you to set the "mode" to `restore`, this should prevent the app starting with an empty database upon restore. + +![S3 Scale CNPG ](./img/s3_scale_cnpg_backup.png) + +#### Exporting App Configuration + +To be done. This section will contain information to export your App configuration so it can be imported later. + +## Restoration Configuration + +:::note[SCALE Restore Functionality] + +As mentioned in our news post, this new restore functionality isn't yet functional on TrueNAS SCALE due to an [upstream bug](https://github.com/openebs/zfs-localpv/issues/536) with OpenEBS. We've submitted a bug report and will update this page once resolved. + +::: + +### Recreating an App + +When you've no exported app configuration, you can remake the app while also restoring your PVC and CNPG backups using the steps as follows: + +1. Ensure the app name matches the name of the app previously backed up + +2. Enter the same S3 credentials from earlier, under the `credentials` section + +3. Preferably ensure all other configuration options are set precisely the same as the last time you used the app, to ensure compatibility + +### PVC data Restoration + +PVC data restoration will happen automatically before the app starts. Please be aware this can take a while depending on the size of the backup, your connection speed, etc. + +### CNPG Database Restore + +Before CNPG will correctly restore the database, the following modifications need to be done after recreating or importing the app configuration: + +1. Ensure you've setup CNPG backups as well as restore as it was previously + +2. Ensure the "mode" is set to `recovery` + +3. Set "revision" on your restore to match the previous **revision** setting on your backup settings + +4. Increase the **revision** on your backup setting by 1 (or set to 1 if previously empty) + +#### Importing App Configuration + +To be done. This section will contain information to import your App configuration so you do not have to manually recreate it. + +## Total System Restore and Migration to New System + +When on a completely new system, you can easily restore using the above steps with the following caveats: + +- On a non-SCALE system, the PVC backend needs to support snapshots +- The apps need to be called **exactly** the same as they were before, preferably using a previously-exported config +- If you've any non-PVC storage attached, be sure that this is still available or apps won't start until this is resolved + +## Video Guide + +TBD diff --git a/archive/website/src/content/deprecated/SCALE/guides/cnpg-migration-guide.md b/archive/website/src/content/deprecated/SCALE/guides/cnpg-migration-guide.md new file mode 100644 index 00000000000..7a25fd84c00 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/cnpg-migration-guide.md @@ -0,0 +1,117 @@ +--- +title: "Postgresql Export/Import" +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +This guide will assist you in migrating to the new CNPG operator. + +## Prerequisites + +1. Install PGAdmin from the TrueCharts Stable train. + +2. Setup the [tcdbinfo.sh script](/deprecated/scale/guides/sql-export#how-to-list-database-login-info-for-truecharts-apps) + +3. Add the system train to your TrueCharts Catalog + +![cnpg-add-system-train](./img/Dragonfish-Storage5b.png) + +## Acquire Database Credentials + +1. Run tcdbinfo.sh to get a list of database credentials. + +```bash +bash tcdbinfo.sh +``` + +![cnpg-info](./img/cnpg-info.png) + +## Connect to CNPG Databases in PGAdmin + +1. Click Add Server. + +![cnpg-pgadmin-add](./img/cnpg-pgadmin-add.png) + +2. Choose a name for the database, this will only be used to help you identify it. + +![cnpg-pgadmin-name](./img/cnpg-pgadmin-name.png) + +3. Enter database server and credentials previously acquired from tcdbinfo.sh script and save. + +![cnpg-pgadmin-creds](./img/cnpg-pgadmin-creds.png) + +## Backup CNPG Databases + +1. Right click on the database and select backup as shown below. + +![cnpg-pgadmin-backup](./img/cnpg-pgadmin-backup.png) + +2. Choose a name for the database backup and click backup. + +![cnpg-pgadmin-save](./img/cnpg-pgadmin-save.png) + +## Remove Old CNPG + +1. Run the following command in system shell as root. + +```bash +k3s kubectl delete --grace-period 30 --v=4 -k https://github.com/truecharts/manifests/delete2 +``` + +## Install cloudnative-pg + +1. Install cloudnative-pg from the system train, wait for it to go ACTIVE. + +## Prepare CNPG Apps + +1. Edit the app config of the CNPG application (home assistant in this example) and save the configuration without making any changes. + +2. Wait for all pods to be created and app to be Active. This may take a few minutes. In this example Home Assistant will show ACTIVE 3/3 when its ready. + +3. Get the name of the app deploy. + +```bash +k3s kubectl get deploy -n ix- +``` + +4. Stop the main pod of the app you are migrating. + +```bash +k3s kubectl scale deploy -n ix- --replicas=0 +``` + +![cnpg-scaled](./img/cnpg-scaled.png) + +## Restore CNPG Databases + +1. Right click on the database and select restore as shown below in PGAdmin. + +![cnpg-pgadmin-restore](./img/cnpg-pgadmin-restore.png) + +2. Select the database backup you created previously. + +![cnpg-pgadmin-restore2](./img/cnpg-pgadmin-restore2.png) + +3. Configure Data/Objects as shown below. + +![cnpg-pgadmin-restore3](./img/cnpg-pgadmin-restore3.png) + +4. Configure Options as shown below and click restore. + +![cnpg-pgadmin-restore4](./img/cnpg-pgadmin-restore4.png) + +:::caution PGAdmin Error + +PGAdmin may display an error during the restore process. This is known to occur and may be ignored if the app functions properly. + +::: + +5. Start the main pod of the app you are migrating. + +```bash +k3s kubectl scale deploy -n ix- --replicas=1 +``` diff --git a/archive/website/src/content/deprecated/SCALE/guides/dataset.md b/archive/website/src/content/deprecated/SCALE/guides/dataset.md new file mode 100644 index 00000000000..a521be9e25c --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/dataset.md @@ -0,0 +1,91 @@ +--- +title: Dataset and Share Setup Guide +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +This guide provides the recommended setup for dataset permissions, shares and application data storage. + +## Dataset Permissions + +TrueCharts applications are designed to use the `apps` (568) user for data permissions. Configure your dataset permissions as shown below to allows applications access. + +:::tip[ACL] + +If your existing dataset shows `Edit ACL` then you need to `Strip ACL` before continuing. + +::: + +![data-perms](./img/data-perms.png) + +## SMB Access + +For SMB access you will need to create a user(s) that are members of the `apps` group and modify the default SMB settings. + +### SMB User + +Create a user and assign it to the `apps` group under `Auxiliary Groups` as shown below. + +![user-groups](./img/user-groups.png) + +### SMB Share + +Create an SMB Share as shown below. All settings should remain default. + +:::caution[ACL] + +After saving SMB settings TrueNAS Scale will ask if you want to `Configure ACL`. Do **NOT** as this will overwrite the previously configured permissions. You can select `Cancel`, the SMB Share will still be configured. + +::: + +![share-smb](./img/share-smb-cobia.png) + +#### Setup SMB Share Auxiliary Parameters + +With the release of Cobia the `Auxiliary Parameters` has been removed from the WebUI. The below will guide you through the use of API calls and the system shell to add the correct parameters. + +Open the SCALE System GUI Shell and enter the following command: + +```bash +midclt call sharing.smb.query | jq +``` + +![smb-cli1](./img/smb-cli1.png) + +Take note of the id(s) you wish to setup. + +Enter the following command, make sure to replace `` with the id from above. + +```bash +midclt call sharing.smb.update '{"auxsmbconf": "force user = apps\nforce group = apps"}' +``` + +The output should include the following if it was done correctly: + +![smb-cli2](./img/smb-cli2.png) + +Repeat for any additional SMB Shares. + +## NFS Share + +Create an NFS Share which will be used for applications to access the dataset. Configure an NFS Share as shown below. You will need to click `Advanced Options` to set `Maproot User` to `root`. + +![nfs-share-cobia](./img/nfs-share-cobia.png) + +## App Storage + +For most applications data access will be configured under `Additional App Storage`. + +:::caution[APP CONFIG STORAGE] + +NFS should **NOT** be used for `App Config Storage`. This should be left on the default of PVC. + +::: + +Configure `Additional App Storage` as shown below. In some applications data storage is part of the application configuration, in those cases you would still configure NFS but not need to setup a `Mount Path`. + +![app-storage](./img/app-storage.png) diff --git a/archive/website/src/content/deprecated/SCALE/guides/image.png b/archive/website/src/content/deprecated/SCALE/guides/image.png new file mode 100644 index 00000000000..fac6bf1a874 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/image.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/AddNFSShare.png b/archive/website/src/content/deprecated/SCALE/guides/img/AddNFSShare.png new file mode 100644 index 00000000000..e8242526825 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/AddNFSShare.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Export.png b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Export.png new file mode 100644 index 00000000000..4dde1a6fd61 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Export.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Import.png b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Import.png new file mode 100644 index 00000000000..6318a9c97a1 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Import.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login.png b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login.png new file mode 100644 index 00000000000..e26c0fa3642 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login2.png new file mode 100644 index 00000000000..bfc9b88327a Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Adminer-Login2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/AppShellStorageAdded.png b/archive/website/src/content/deprecated/SCALE/guides/img/AppShellStorageAdded.png new file mode 100644 index 00000000000..167c200a0e1 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/AppShellStorageAdded.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps.png new file mode 100644 index 00000000000..8d3fb8622a1 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps2.png new file mode 100644 index 00000000000..266d967e8a3 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps3.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps3.png new file mode 100644 index 00000000000..ebf96dffad8 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps4.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps4.png new file mode 100644 index 00000000000..f0c0b23290f Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps4.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps5.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps5.png new file mode 100644 index 00000000000..7a6f2d17a89 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps5.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps6.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps6.png new file mode 100644 index 00000000000..d075fca2351 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps6.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Apps7.png b/archive/website/src/content/deprecated/SCALE/guides/img/Apps7.png new file mode 100644 index 00000000000..b9b21a899aa Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Apps7.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/BlankAddAppStorage.png b/archive/website/src/content/deprecated/SCALE/guides/img/BlankAddAppStorage.png new file mode 100644 index 00000000000..ad096ab0284 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/BlankAddAppStorage.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Copy-App-Config.png b/archive/website/src/content/deprecated/SCALE/guides/img/Copy-App-Config.png new file mode 100644 index 00000000000..f7fc36e17b7 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Copy-App-Config.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/CustomVPNprovider.png b/archive/website/src/content/deprecated/SCALE/guides/img/CustomVPNprovider.png new file mode 100644 index 00000000000..1208f56f9fb Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/CustomVPNprovider.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage1.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage1.png new file mode 100644 index 00000000000..b0f4df3fd2f Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage2.png new file mode 100644 index 00000000000..c8ea34bf3e8 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage3.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage3.png new file mode 100644 index 00000000000..f27b1087d87 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage4.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage4.png new file mode 100644 index 00000000000..6d4e2d5a90f Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage4.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5.png new file mode 100644 index 00000000000..2232e534654 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5b.png b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5b.png new file mode 100644 index 00000000000..84da6d5adea Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Dragonfish-Storage5b.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy1.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy1.png new file mode 100644 index 00000000000..fa227314f5a Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy2.png new file mode 100644 index 00000000000..6d1870167af Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy3.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy3.png new file mode 100644 index 00000000000..a80d2a3c450 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-Proxy3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN1.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN1.png new file mode 100644 index 00000000000..87c3ea43194 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN2.png new file mode 100644 index 00000000000..b16d76141a9 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN3.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN3.png new file mode 100644 index 00000000000..af09692cd07 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN4.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN4.png new file mode 100644 index 00000000000..c2ccbdc3165 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN4.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN5.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN5.png new file mode 100644 index 00000000000..2cbfe16f3ba Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN5.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN6.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN6.png new file mode 100644 index 00000000000..9c1a6ce611c Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN6.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN7.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN7.png new file mode 100644 index 00000000000..1bab034b641 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN7.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN8.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN8.png new file mode 100644 index 00000000000..bb1f1b34777 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-VPN8.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log-icon.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log-icon.png new file mode 100644 index 00000000000..6cc917c08f4 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log-icon.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log.png b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log.png new file mode 100644 index 00000000000..665834e74ee Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Gluetun-vpn-log.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Backup.png b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Backup.png new file mode 100644 index 00000000000..a1121a513bc Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Backup.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Main.png b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Main.png new file mode 100644 index 00000000000..ab065b50d76 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Main.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Restore-List.png b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Restore-List.png new file mode 100644 index 00000000000..d2364b60157 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/HeavyScript-Restore-List.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv1.png b/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv1.png new file mode 100644 index 00000000000..4e30f79bd2a Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv2.png b/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv2.png new file mode 100644 index 00000000000..966d4eaf6ca Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/MariaDBenv2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageBlank.png b/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageBlank.png new file mode 100644 index 00000000000..ea8bfaa21b9 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageBlank.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageFilled.png b/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageFilled.png new file mode 100644 index 00000000000..12c3af28b66 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/NFSAddAppStorageFilled.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Config.png b/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Config.png new file mode 100644 index 00000000000..128a33db4d4 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Config.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Finish.png b/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Finish.png new file mode 100644 index 00000000000..46b3a10c749 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/New-App-Finish.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS-storage.png b/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS-storage.png new file mode 100644 index 00000000000..d8f1b047ecc Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS-storage.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS.png b/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS.png new file mode 100644 index 00000000000..8926b52638b Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/OpenEBS.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Replication1.png b/archive/website/src/content/deprecated/SCALE/guides/img/Replication1.png new file mode 100644 index 00000000000..f6ab59aa738 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Replication1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Replication2.png b/archive/website/src/content/deprecated/SCALE/guides/img/Replication2.png new file mode 100644 index 00000000000..02ab3033cd3 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Replication2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Replication3.png b/archive/website/src/content/deprecated/SCALE/guides/img/Replication3.png new file mode 100644 index 00000000000..8108cd99eff Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Replication3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/Sharesmain.png b/archive/website/src/content/deprecated/SCALE/guides/img/Sharesmain.png new file mode 100644 index 00000000000..511c8c9b729 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/Sharesmain.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/StopAll.png b/archive/website/src/content/deprecated/SCALE/guides/img/StopAll.png new file mode 100644 index 00000000000..094805f1fc1 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/StopAll.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/app-storage.png b/archive/website/src/content/deprecated/SCALE/guides/img/app-storage.png new file mode 100644 index 00000000000..47de9534c41 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/app-storage.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-add-operator-train.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-add-operator-train.png new file mode 100644 index 00000000000..2e76f2d617f Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-add-operator-train.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-info.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-info.png new file mode 100644 index 00000000000..10caca664f2 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-info.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-add.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-add.png new file mode 100644 index 00000000000..0104b2d96c2 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-add.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-backup.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-backup.png new file mode 100644 index 00000000000..29ed4017c84 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-backup.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-creds.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-creds.png new file mode 100644 index 00000000000..5be9d517045 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-creds.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-name.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-name.png new file mode 100644 index 00000000000..b26dffe96b6 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-name.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore.png new file mode 100644 index 00000000000..3884e0c3d86 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore2.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore2.png new file mode 100644 index 00000000000..df3dcb170e7 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore3.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore3.png new file mode 100644 index 00000000000..10d4332c9c8 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore4.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore4.png new file mode 100644 index 00000000000..c20f1bdee22 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-restore4.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-save.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-save.png new file mode 100644 index 00000000000..5c83a7aba81 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-pgadmin-save.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-scaled.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-scaled.png new file mode 100644 index 00000000000..ef999754f86 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-scaled.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-shell-command.png b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-shell-command.png new file mode 100644 index 00000000000..b7a5c9f2359 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/cnpg-shell-command.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/data-perms.png b/archive/website/src/content/deprecated/SCALE/guides/img/data-perms.png new file mode 100644 index 00000000000..0638ecf247c Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/data-perms.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/authelia.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/authelia.png new file mode 100644 index 00000000000..fe6e83ec76c Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/authelia.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/blocky.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/blocky.png new file mode 100644 index 00000000000..72ff723772c Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/blocky.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/cert-manager.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/cert-manager.png new file mode 100644 index 00000000000..8099a9fae91 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/cert-manager.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/cnpg.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/cnpg.png new file mode 100644 index 00000000000..3e51f61a820 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/cnpg.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/metallb.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/metallb.png new file mode 100644 index 00000000000..ff0017ef588 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/metallb.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/openebs.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/openebs.png new file mode 100644 index 00000000000..1d7bdedfa5e Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/openebs.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/prometheus-operator.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/prometheus-operator.png new file mode 100644 index 00000000000..083dc763c3e Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/prometheus-operator.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.png b/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.png new file mode 100644 index 00000000000..f650d068b05 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.webp b/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.webp new file mode 100644 index 00000000000..47b3de3c236 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/icons/traefik.webp differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/image.png b/archive/website/src/content/deprecated/SCALE/guides/img/image.png new file mode 100644 index 00000000000..2e5c64c33ee Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/image.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/inotify.png b/archive/website/src/content/deprecated/SCALE/guides/img/inotify.png new file mode 100644 index 00000000000..563c4051942 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/inotify.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/nfs-share-cobia.png b/archive/website/src/content/deprecated/SCALE/guides/img/nfs-share-cobia.png new file mode 100644 index 00000000000..7e106d1dbd9 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/nfs-share-cobia.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackup.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackup.png new file mode 100644 index 00000000000..e747a243626 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackup.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackupselect.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackupselect.png new file mode 100644 index 00000000000..04140f57144 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminbackupselect.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminconnect.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminconnect.png new file mode 100644 index 00000000000..d68cc5667d8 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminconnect.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestore.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestore.png new file mode 100644 index 00000000000..583a33910fe Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestore.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage1.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage1.png new file mode 100644 index 00000000000..e72d2d22ea4 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage2.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage2.png new file mode 100644 index 00000000000..0e2fd9ec572 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage3.png b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage3.png new file mode 100644 index 00000000000..1c741b78898 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/pgadminrestorepage3.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_cnpg_backup.png b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_cnpg_backup.png new file mode 100644 index 00000000000..2ba955bcdbf Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_cnpg_backup.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_credentials.png b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_credentials.png new file mode 100644 index 00000000000..6e549831646 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_credentials.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_pvc_backup.png b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_pvc_backup.png new file mode 100644 index 00000000000..fac6bf1a874 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/s3_scale_pvc_backup.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/share-smb-cobia.png b/archive/website/src/content/deprecated/SCALE/guides/img/share-smb-cobia.png new file mode 100644 index 00000000000..a1eaa0741d2 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/share-smb-cobia.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli1.png b/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli1.png new file mode 100644 index 00000000000..1802a01f4c2 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli1.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli2.png b/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli2.png new file mode 100644 index 00000000000..bd68fc79133 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/smb-cli2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/tcdbinfo.png b/archive/website/src/content/deprecated/SCALE/guides/img/tcdbinfo.png new file mode 100644 index 00000000000..109c09c882f Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/tcdbinfo.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/truenas-web-gui-via-traefik-screenshot.png b/archive/website/src/content/deprecated/SCALE/guides/img/truenas-web-gui-via-traefik-screenshot.png new file mode 100644 index 00000000000..ba0c1791e1e Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/truenas-web-gui-via-traefik-screenshot.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/user-groups.png b/archive/website/src/content/deprecated/SCALE/guides/img/user-groups.png new file mode 100644 index 00000000000..6fcc77971ea Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/user-groups.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-backup-verify.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-backup-verify.png new file mode 100644 index 00000000000..304264fe3c0 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-backup-verify.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-complete.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-complete.png new file mode 100644 index 00000000000..30d981896ee Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-complete.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-create-disaster.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-create-disaster.png new file mode 100644 index 00000000000..33cb6cb9c96 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-create-disaster.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket-2.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket-2.png new file mode 100644 index 00000000000..c817c087c45 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket-2.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket.png new file mode 100644 index 00000000000..706d11876a1 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-minio-create-bucket.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/img/velero-restore.png b/archive/website/src/content/deprecated/SCALE/guides/img/velero-restore.png new file mode 100644 index 00000000000..e1151c17318 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/guides/img/velero-restore.png differ diff --git a/archive/website/src/content/deprecated/SCALE/guides/linking-apps.md b/archive/website/src/content/deprecated/SCALE/guides/linking-apps.md new file mode 100644 index 00000000000..6dbec432f31 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/linking-apps.md @@ -0,0 +1,111 @@ +--- +title: Linking Apps Internally +sidebar: + order: 7 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +You'll often need to connect individual apps to each other to exchange data, for example: Sonarr to SABnzbd to allow Sonarr to control downloads within SABnzbd. + +The backend for TrueNAS SCALE Apps is Kubernetes. As you can't point directly to other Kubernetes app containers using their IP address you need to use their internal domain name instead. + +Please beware: this name is only available between Apps and cannot be reached from the host/node or your own PC. + +## Main service + +For most apps, you'll want to contact the main service (usually the web interface or primary way you interact with the app) + +Please replace `$NAME` with the name you gave your App when installing it, and `$APP` with the name the app has on the catalog as needed. + +**If your app name _contains_ the name of the app as in the catalog, the format is as follows.** + +- `$NAME.ix-$NAME.svc.cluster.local` + +**If your app name _does NOT contain_ the name of the app as in the catalog, the format is as follows.** + +- `$NAME-$APP.ix-$NAME.svc.cluster.local` + +### Multiple Services + +If you need to reach a different service of your app (which is not often the case), you need a slightly different format. + +As well as the above naming, replace `$SVCNAME` with the name of the service you want to reach: + +**If your app name _contains_ the name of the app as in the catalog, the format is as follows.** + +- `$NAME-$SVCNAME.ix-$NAME.svc.cluster.local` + +**If your app name _does NOT contain_ the name of the app as in the catalog, the format is as follows.** + +- `$NAME-$APPNAME-$SVCNAME.ix-$NAME.svc.cluster.local` + +Be aware: you'll only be able to reach ports published on the service they are published to - see the Multiple Services example below for a +demonstration of this. + +## List Internal Domain Names using HeavyScript + +HeavyScript is a very useful command-line utility built to help simplify administration of TrueNAS Scale apps. One of it's many features is being able +to list the internal DNS names and ports of your apps. If you are unsure of how names are "built" - then this is by far the easiest and recommended way +to be sure you are using the correct name. + +Firstly, install HeavyScript or update your current installation to at least version 2.9.0. Visit their [GitHub repo to find out how](https://github.com/Heavybullets8/heavy_script) + +To list the DNS entries for your apps, open the TrueNAS Scale shell and use the command `heavyscript dns` or `heavyscript dns APPNAME1 APPNAME2` + +## Naming Examples + +### Main Service + +To reach an app named "sabnzbd" (note: the name contains the catalog app name "sabnzbd") you can use the following internal domain name: + +- `sabnzbd.ix-sabnzbd.svc.cluster.local` + +To reach an app named "sab" (note: the name does NOT contain catalog app name "sabnzbd") you can use the following internal domain name: + +- `sab-sabnzbd.ix-sab.svc.cluster.local` + +To reach an app named "sabnzbd-23" (note: the name contains the catalogue app name "sabnzbd" as well as extra name information "-23") you can use the following internal domain name: + +- `sabnzbd-23.ix-sabnzbd-23.svc.cluster.local` + +### Multiple Services + +This is an example of where an app has more than one service, in this case it's Traefik + +It's main service (note it follows the examples above) + +- `traefik.ix-traefik.svc.cluster.local` + +Then, it's extra services - one for metrics, and one for tcp + +- `traefik-metrics.ix-traefik.svc.cluster.local` +- `traefik-tcp.ix-traefik.svc.cluster.local` + +When you install an app with multiple services, you'll be able to see which ports are published to which service - if you aren't sure of this from the +installation/edit view then HeavyScript will also show these. + +This is a HeavyScript output for Traefik, showing it's services and the published ports + +- `traefik.ix-traefik.svc.cluster.local 9000/TCP` +- `traefik-metrics.ix-traefik.svc.cluster.local 9180/TCP` +- `traefik-tcp.ix-traefik.svc.cluster.local 80/TCP,443/TCP` + +So, if you wanted to reach the metrics port, you should use `traefik-metrics.ix-traefik.svc.cluster.local` as the name as that port would not be +available on other services. + +## Video Guide + + diff --git a/archive/website/src/content/deprecated/SCALE/guides/migration-pvc.md b/archive/website/src/content/deprecated/SCALE/guides/migration-pvc.md new file mode 100644 index 00000000000..084aa8117a4 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/migration-pvc.md @@ -0,0 +1,243 @@ +--- +title: Migrating Apps +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +## Goal + +A safe migration of an existing app to a new app, while still having the old app available. So if something goes wrong, you haven't lost the old app. + +## Create new app with a different name + +In this guide, I'll be using the app `vaultwarden` as an example. I chose the name `testwarden` for the new app install. + +I installed the new app with mostly default settings, just changed service type to `ClusterIP` and setup a new, temporary, ingress. + +## Scale down both apps + +We need to run the following commands in the host shell. Everything between `<>` needs to be replaced with the actual value. + +First, we need to get the names of the deploys. + +```bash +k3s kubectl get deploy -n ix- +k3s kubectl get deploy -n ix- +``` + +Example: + +```bash +root@truenasvm[/mnt/tank/apps]# k3s kubectl get deploy -n ix-vaultwarden +NAME READY UP-TO-DATE AVAILABLE AGE +vaultwarden 1/1 1 1 3h21m +root@truenasvm[/mnt/tank/apps]# k3s kubectl get deploy -n ix-testwarden +NAME READY UP-TO-DATE AVAILABLE AGE +testwarden-vaultwarden-cnpg-main-rw 2/2 2 2 3h12m +testwarden-vaultwarden 1/1 1 1 3h12m +``` + +Here we find the names of the deploys we want to scale down. For apps installed with the default name, it will just be that name. + +For apps installed with a different name, it will be `-`. + +So for `vaultwarden` (the default name), it will be `vaultwarden`. But for the vaultwarden app that was installed with the name `testwarden`, it will be `testwarden-vaultwarden`. + +:::caution[Replace the names in the angle brackets before executing commands] + +```bash +k3s kubectl scale deploy - -n ix- --replicas=0 +k3s kubectl scale deploy -n ix- --replicas=0 +``` + +::: + +:::caution[Example commands for apps with name vaultwarden and testwarden] + +```bash +k3s kubectl scale deploy testwarden-vaultwarden -n ix-testwarden --replicas=0 +k3s kubectl scale deploy vaultwarden -n ix-vaultwarden --replicas=0 +``` + +::: + +## Postgresql databases + +:::tip + +You can skip this section if the app in question doesn't have a Postgresql database + +::: + +If the app uses a Postgresql database, we need to make a backup and restore that backup to the new app's database. To access the database, the app must be running. + +:::note[Requirements] + +Make sure you have `pgAdmin` installed, as we'll be using it to make a backup and to restore the database. It's a TrueCharts app from the stable train. You can install it with all default settings, and it will work. + +Also make sure you have the database info script (`tcdbinfo.sh`) available on your server. Check the [Postgres DB info and restore](/deprecated/scale/guides/sql-export) for these files. + +::: + +### Configure database connections in pgAdmin + +run the tcdbinfo.sh script to see the connection details for both the old and the new database, and set them up in pgAdmin. + +![tcdbinfo](./img/tcdbinfo.png) +![PG Admin Connect](./img/pgadminconnect.png) + +### Create database Backup + +In `pgAdmin`, right click `vaultwarden->Databases->vaultwarden` and click `Backup...`. Give the file a name (e.g. `vaultwarden.sql`) and click `Backup`. + +![PG Admin Select Backup](./img/pgadminbackupselect.png) +![PG Admin Backuo](./img/pgadminbackup.png) + +### Restore database backup + +In `pgAdmin`, right click `testwarden->Databases->vaultwarden` and click `Restore...`. Select the sql file (`vaultwarden.sql`). + +![PG Admin Restore](./img/pgadminrestore.png) +![PG Admin Restore](./img/pgadminrestorepage1.png) + +On the 2nd tab page, select the first 3 options (`Pre-data`, `Data` and `Post-data`). On the last tab, select `Clean before restore`. Now click `Restore`. + +![PG Admin Restore](./img/pgadminrestorepage2.png) +![PG Admin Restore](./img/pgadminrestorepage3.png) + +## MariaDB Databases + +
+ MariaDB Database Migration +
+
View MariaDB export and import instructions
+
+If the app uses a MariaDB database, we need to make a backup and restore that backup to the new app's database. + +:::note[Requirements] + +Make sure you have `adminer` installed, as we'll be using it to make a backup and to restore the database. It's a TrueCharts app from the stable train. You can install it with all default settings, and it will work. + +::: + +### Configure database connections in adminer + +To get the MariaDB credentials from each install the easiest way (until a script does this) is logging into the main container shell and typing `env`, which pulls down the list of `environment variables` used by the container, including the `database credentials`. + +![MariaDB](./img/MariaDBenv1.png) + +Repeat the same for the "new" app + +![MariaDB2](./img/MariaDBenv2.png) + +### Create database Backup + +Login to `adminer` using the 4 values highlighted in red above. For most users it'll be `appname-mariadb.ix-appname.svc.cluster.local:3306` or in this case `photoprism-mariadb.ix-photoprism.svc.cluster.local:3306` + +![AdminerLogin](./img/Adminer-Login.png) + +Click `Export`, choose a compression output (gzip) and press `export` + +![AdminerExport](./img/Adminer-Export.png) + +### Restore database backup + +Now you login to `adminer` with the "new" app + +![AdminerLogin2](./img/Adminer-Login2.png) + +Click `Import`, then `Choose Files`, upload your backup and then click `Execute` + +![AdminerImport](./img/Adminer-Import.png) + +
+
+ +## Migrate the PVCs + +### Get the PVCs names and paths + +The following commands will return the PVCs for the old and the new install. + +```bash +k3s kubectl get pvc -n ix-vaultwarden +k3s kubectl get pvc -n ix-testwarden +``` + +Take note of all the PVCs that do not contain `postgres`, `redis` or `cnpg`. `vaultwarden` only has 1 data PVC. There are apps that have more than 1. You'll want to migrate them all. + +Now, find the full paths to all these PVCs. + +```bash +zfs list | grep pvc | grep legacy +``` + +If this returns a very long list, you can add `| grep ` to filter for only the PVCs of the app you're currently working on. + +A full PVC path looks something like this: `poolname/ix-applications/releases/app-name/volumes/pvc-32341f93-0647-4bf9-aab1-e09b3ebbd2b3`. + +### Destroy new PVC and copy over old PVC + +Destroy the PVCs of the new app and replicate the PVC of the old app to the new location. + +:::danger + +Make sure you're not mixing up the old app and the new app here. Destroy the _NEW_ PVC. The old PVC contains your data. + +::: + +```bash +zfs destroy new-pvc +zfs snapshot old-pvc@migrate +zfs send old-pvc@migrate | zfs recv new-pvc@migrate +zfs set mountpoint=legacy new-pvc +``` + +The `new-pvc` will look something like `poolname/ix-applications/releases/testwarden/volumes/pvc-32341f93-0647-4bf9-aab1-e09b3ebbd2b3`. + +The `old-pvc` will look something like `poolname/ix-applications/releases/vaultwarden/volumes/pvc-40275e0e-5f99-4052-96f1-63e26be01236`. + +Example of all commands in one go: + +```bash +root@truenasvm[~]# k3s kubectl get pvc -n ix-vaultwarden +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE +vaultwarden-data Bound pvc-33646e70-ccaa-464c-b315-64b24fcd9e83 256Gi RWO ix-storage-class-vaultwarden 4h27m +db-vaultwarden-postgresql-0 Bound pvc-5b3aa878-0b76-4022-8542-b82cd3fdcf71 999Gi RWO ix-storage-class-vaultwarden 4h27m +root@truenasvm[~]# k3s kubectl get pvc -n ix-testwarden +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE +testwarden-vaultwarden-data Bound pvc-e56982a7-e2c7-4b98-b875-5612d92506fd 256Gi RWO ix-storage-class-testwarden 4h18m +testwarden-vaultwarden-cnpg-main-1 Bound pvc-bed595ad-74f1-4828-84c7-764693785630 256Gi RWO ix-storage-class-testwarden 4h18m +testwarden-vaultwarden-cnpg-main-1-wal Bound pvc-79d46775-f60b-4dc6-99a3-1a63d26cd171 256Gi RWO ix-storage-class-testwarden 4h18m +testwarden-vaultwarden-cnpg-main-2 Bound pvc-dbc6501a-bfac-4a95-81a2-c05c5b28b5ff 256Gi RWO ix-storage-class-testwarden 4h18m +testwarden-vaultwarden-cnpg-main-2-wal Bound pvc-331f5cf3-5f39-4567-83f7-3700d4f582db 256Gi RWO ix-storage-class-testwarden 4h18m +root@truenasvm[~]# zfs list | grep pvc | grep legacy | grep warden +tank/ix-applications/releases/testwarden/volumes/pvc-331f5cf3-5f39-4567-83f7-3700d4f582db 1.10M 25.1G 1.10M legacy +tank/ix-applications/releases/testwarden/volumes/pvc-79d46775-f60b-4dc6-99a3-1a63d26cd171 4.72M 25.1G 4.72M legacy +tank/ix-applications/releases/testwarden/volumes/pvc-bed595ad-74f1-4828-84c7-764693785630 8.67M 25.1G 8.67M legacy +tank/ix-applications/releases/testwarden/volumes/pvc-dbc6501a-bfac-4a95-81a2-c05c5b28b5ff 8.64M 25.1G 8.64M legacy +tank/ix-applications/releases/testwarden/volumes/pvc-e56982a7-e2c7-4b98-b875-5612d92506fd 112K 25.1G 112K legacy +tank/ix-applications/releases/vaultwarden/volumes/pvc-33646e70-ccaa-464c-b315-64b24fcd9e83 112K 25.1G 112K legacy +tank/ix-applications/releases/vaultwarden/volumes/pvc-5b3aa878-0b76-4022-8542-b82cd3fdcf71 12.8M 25.1G 12.8M legacy +root@truenasvm[~]# zfs destroy tank/ix-applications/releases/testwarden/volumes/pvc-e56982a7-e2c7-4b98-b875-5612d92506fd +root@truenasvm[~]# zfs snapshot tank/ix-applications/releases/vaultwarden/volumes/pvc-33646e70-ccaa-464c-b315-64b24fcd9e83@migrate +root@truenasvm[~]# zfs send tank/ix-applications/releases/vaultwarden/volumes/pvc-33646e70-ccaa-464c-b315-64b24fcd9e83@migrate | zfs recv tank/ix-applications/releases/testwarden/volumes/pvc-e56982a7-e2c7-4b98-b875-5612d92506fd@migrate +root@truenasvm[~]# zfs set mountpoint=legacy tank/ix-applications/releases/testwarden/volumes/pvc-e56982a7-e2c7-4b98-b875-5612d92506fd +``` + +## Scale up both apps + +Use the same commands from the scaling down step, but replace the 0 with a 1. + +```bash +k3s kubectl scale deploy testwarden-vaultwarden -n ix-testwarden --replicas=1 +k3s kubectl scale deploy vaultwarden -n ix-vaultwarden --replicas=1 +``` + +## Conclusion + +You should now be able to log in on the new install. diff --git a/archive/website/src/content/deprecated/SCALE/guides/nfs-share.md b/archive/website/src/content/deprecated/SCALE/guides/nfs-share.md new file mode 100644 index 00000000000..928cd569db0 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/nfs-share.md @@ -0,0 +1,63 @@ +--- +title: NFS Shares with Apps on TrueNAS SCALE +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +With the changes to TrueNAS SCALE 22.12 concerning HostPath validation (read our [news](/news/hostpath-validation) or our [adding storage](/deprecated/scale/guides/add-storage) pages to learn more) the one way to add media storage is to mount NFS Shares to your TrueCharts applications. This process involves two parts, and this guide will demonstrate each step to create NFS Shares in SCALE and then add them in the `Storage` section of TrueCharts apps. + +Additionally, you can use NFS shares and SMB shares on the same dataset, but only NFS shares are mounted by TrueCharts applications. + +:::note + +This won't work with the iX/"Official" catalog applications + +::: + +:::caution[Application Databases / Configs on NFS Shares] + +NFS Shares are meant for sharing your file/media shares with other users or computers. This is not meant for the entire application. Our recommended approach and default for most applications is PVC storage (read more [here](/general/faq#why-pvc-is-recommended-over-hostpath)). There is known cases of database corruption with NFS Shares and sqlite so you are warned + +::: + +## Part 1 - Create NFS Shares in SCALE + +In the main SCALE GUI, select the `Shares` item on the menu bar and you'll read this page. + +![Shares Main](./img/Sharesmain.png) + +Click on `Add` inside the "UNIX (NFS) Shares" section. Select the dataset or folder that contains your media library, a description is optional but helps, and then click `Save` + +![Add NFS Share](./img/AddNFSShare.png) + +Repeat as necessary for different folders or datasets you wish to share, and make sure you note the paths of each NFS Share, as you will need to enter those later. + +## Part 2 - Add NFS Shares to Applications + +Next you're going to add NFS Storage to your applications. This can be in the "media" or "downloads" storage sections for certain apps, or "Additional App Storage" for others (such as the example below). **We do not recommend installing the entire app to NFS Shares as that can corrupt any databases inside the app.** This is meant for media or file storage only. + +1. Select `Add` next to "Additional Add Storage" + +![Additional Storage Add](./img/BlankAddAppStorage.png) + +2. Change to `NFS Share` in the "Type of Storage" dropdown + +![NFS Add Storage Blank](./img/NFSAddAppStorageBlank.png) + +3. Enter info for yourNFS Share as below, for this example we'll use the "Downloads" share we created above. + +- The NFS Server should be `localhost` +- `Path on NFS Server` has to match your NFS Shares path, as above I had _mnt/Storage/Apps/Downloads/_ +- `Mount Path` is the container's path to mount the storage to, I simply put `/downloads` + +![NFS Add Storage Filled](./img/NFSAddAppStorageFilled.png) + +- Continue entering info as any regular app and click `Save`. + +And that's it, to verify depending on the app you can use the App Shell such as the example below or the GUI inside the web interface of your app. + +![App Shell Storage Added](./img/AppShellStorageAdded.png) diff --git a/archive/website/src/content/deprecated/SCALE/guides/pci-passthrough.md b/archive/website/src/content/deprecated/SCALE/guides/pci-passthrough.md new file mode 100644 index 00000000000..a584625cecc --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/pci-passthrough.md @@ -0,0 +1,25 @@ +--- +title: PCIe Device Passthrough to Apps +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +To Passthrough your PCI(-E) cards you need to: + +1. Go to Installed Applications +2. Click the menu button on the right side of the App card +3. Select Edit +4. Scroll down to "Resources and Devices" Section +5. Under Configure Mount USB devices Click the Add button on the right (This will work for PCI devices too\*) +6. In "Host Device Path" & "Container Device Path" enter the /dev/path for your card (ex: for dvb devices it will be: /dev/dvb) +7. Submit your changes + +:::note + +This method is not guaranteed to work, and we don't officially offer support for PCI(-E) device passthrough at the moment. + +::: diff --git a/archive/website/src/content/deprecated/SCALE/guides/pvc-access.md b/archive/website/src/content/deprecated/SCALE/guides/pvc-access.md new file mode 100644 index 00000000000..2576e30b6fa --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/pvc-access.md @@ -0,0 +1,157 @@ +--- +title: Accessing App PVCs on TrueNAS SCALE +sidebar: + order: 16 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +## Where are my application files? + +- Your files are held within the container +- They are not visible from your server's file structure without first mounting that PVC + +## Mounting PVC Data + +### HeavyScript + +One option is to use [HeavyScript](https://github.com/Heavybullets8/heavy_script). + +If you plan on mounting PVC storage more than just a couple of times this may be the best option for you. + +1. The script will list all of your PVC information for each application +2. Safely shut down your application before mounting +3. Mount your PVC to /mnt/temporary/STORAGE-NAME + +### Manual Method - New User Guide + +Manually mounting PVC storage takes a little bit more time than the script method. + +However, I know some users like to know exactly what commands they are running etc. + +### Recommended Items + +- A terminal that allows copying and pasting +- An open notepad + +1\. **STOP the application you plan on mounting** + +2\. **Run the following command to view your PVC data** + +```bash +k3s kubectl get pvc -A | sort -u | awk '{print "\t" $1 "\t" $2 "\t" $4}' | column -t +``` + +3\. **Find the application you would like to mount** + +This can be confusing at first because many applications will have many different instances of PVC. + +![pvc_list](/img/pvc_access/pvc_list.png) + +- You'll see in this photo, Nextcloud has many different PVC's. + - However, if you break it down by looking at the middle column, it's not too confusing. + 1. `data-nextcloud-redis-0` + - This is your Redis PVC + 2. `db-nextcloud-postgresql-0` + - This is your PostgreSQL PVC + 3. `nextcloud-data` + - This is your Data PVC + +4\. **After finding which PVC you would like to mount, copy the far right column (The Volume) that starts with pvc- into a notepad for use in the next command** + +- If I was wanting to mount `nextcloud-data`, I would use: +- `pvc-cd84394b-7812-43c3-a6d9-1a5693592cbe` + +5\. **Run the following command to find the full path to your applications PVC** + +```bash +zfs list | grep PVC_VOLUME +``` + +- Going off of the Nextcloud example, I would simply replace `PVC_VOLUME` with `pvc-cd84394b-7812-43c3-a6d9-1a5693592cbe` + +Example: + +```bash +zfs list | grep pvc-cd84394b-7812-43c3-a6d9-1a5693592cbe +``` + +Here is what the output should look like +![nextcloud_volumes](/img/pvc_access/nextcloud_volumes.png) + +6\. **Mount your PVC** + +```bash +zfs set mountpoint=/temporary/NAME FULL_PVC_PATH +``` + +Example: + +```bash +zfs set mountpoint=/temporary/nextcloud-data speed/ix-applications/releases/nextcloud/volumes/pvc-cd84394b-7812-43c3-a6d9-1a5693592cbe +``` + +- This command will produce no output if it's successful +- Now you should be able to do whatever you want within the app's PVC + +7\. **Remounting** + +```bash +zfs set mountpoint=legacy POOL_NAME/ix-applications/releases/APPLICATION_NAME/volumes/VOLUME-NAME +``` + +Example: + +```bash +zfs set mountpoint=legacy speed/ix-applications/releases/nextcloud/volumes/pvc-cd84394b-7812-43c3-a6d9-1a5693592cbe +``` + +Afterwards, I always like to `rmdir` on the directory that was created when mounting + +- In my case I would run: + +```bash +rmdir /mnt/temporary/nextcloud-data +``` + +- This just helps keep your temporary folder clean, and lets you know what is or is not currently mounted. + +- Do not worry, `rmdir` cannot delete mounted folders, or folders with contents in them. + +### Manual Method - Advanced User Guide + +:::warning + +**ALWAYS MAKE SURE THE APP IS STOPPED WHILE MOUNTING THE PVC** + +::: + +#### To get the PVCNAME + +```bash +k3s kubectl get pvc -n ix-APPNAME +``` + +#### To get the PVCPATH + +```bash +zfs list | grep legacy | grep APPNAME +``` + +#### If you want to mount the PVC content + +```bash +zfs set mountpoint=/temporary PVCPATH +``` + +Your PVC will be mounted under `/mnt/temporary` + +#### and when you're done editing + +```bash +zfs set mountpoint=legacy PVCPATH +``` diff --git a/archive/website/src/content/deprecated/SCALE/guides/questions-yaml.md b/archive/website/src/content/deprecated/SCALE/guides/questions-yaml.md new file mode 100644 index 00000000000..06f08a5895a --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/questions-yaml.md @@ -0,0 +1,250 @@ +--- +title: Questions.yaml +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +Questions.yaml is the file which get rendered by TrueNAS to create the UI. When not creating new charts, most of what this project does is stitching together questions.yaml files to turn existing Helm Charts into Apps. + +## Syntax + +In this document we give you a short reference guide (ported from IX Official) which lays out the settings available in questions.yaml. + +### Question Variable Reference + +| Variable | Type | Required | Description | +| --------------------------- | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| variable | string | true | define the variable name specified in the `values.yaml`file. | +| label | string | true | define the UI label. | +| description | string | false | specify the description of the variable. | +| group | string | false | group questions by input value. | +| schema | dictionary | true | specify schema details for the `variable` | +| schema.type | string | true | specify type of value for `variable` (current supported types are string, int, boolean, path, hostpath, list, dict, ipaddr, and cron). | +| schema.required | bool | false | define if the variable is required or not (true \ false), defaults to false | +| schema.default | object | false | specify the default value. | +| schema.min_length | int | false | min character length for string type variable. | +| schema.max_length | int | false | max character length for string type variable. | +| schema.min | int | false | min integer length. | +| schema.max | int | false | max integer length. | +| schema.enum | []dictionary | false | specify the options when the variable type is `string`, for example,

enum:
- value: "RollingUpdate"
  description: "Create new pods and then kill old ones"
- value: "Recreate"
  description: "Kill existing pods before creating new ones" | +| schema.valid_chars | string | false | regular expression for input chars validation. | +| schema.subquestions | []subquestion | false | add an array of subquestions. | +| schema.show_if | string | false | show current variable if condition specified is true, for example `show_if: [["workloadType", "=", "CronJob"]]` | +| schema.show_subquestions_if | string | false | show subquestions if is true or equal to one of the options. for example `show_subquestion_if: "static"`. system will convert this to the filters format specified for `schema.show_if` automatically. | +| schema.attrs | []variables | false | specified when `schema.type` is dictionary to declare attributes allowed in the dictionary. | +| schema.items | []variables | false | specified when `schema.type` is list to declare attributes allowed in the list. | +| schema.private | bool | false | specified for declaring information sensitive fields. | +| schema.null | bool | false | specifies if the value for the variable can be null. defaults to false. | + +#### Subquestions + +`subquestions[]` cannot contain `subquestions` or `show_subquestions_if` keys, but all other keys in the above table are supported. Also variables having `schema.type` list do not support `subquestions`. + +#### Special Questions + +There are some novel cases where we would like to provide ability to configure / manage resources for workloads with getting some data from system dynamically. +So a chart can specify certain actions to be performed by the system for a variable by defining a reference. An example better illustrates this concept: + +```yaml +- variable: volume + label: "Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: mountPath + label: "Mount Path" + description: "Path where the volume will be mounted inside the pod" + schema: + type: path + required: true + - variable: datasetName + label: "Dataset Name" + schema: + type: string + required: true +``` + +In the above variable we define a `$ref` in schema which specifies that the system should take some action for normalizing the value specified for the variable. +In this specific case, `ix_volume` is a concept introduced where we recommend using a volume which we are able to rollback automatically on chart release rollback. In essence, +it is just a `hostPath` volume for which the system automatically creates the dataset specified. +We have following types of actions supported in `$ref` right now: + +1. definitions +2. normalize + For (1), system will automatically update schema for a particular definition. For example, + +```yaml +- variable: hostInterface + description: "Please specify host interface" + label: "Host Interface" + schema: + type: string + required: true + $ref: + - "definitions/interface" +``` + +System will automatically populate available interfaces for the user based on what interfaces are available on the system. +For (2), system will normalize values or perform some actions as discussed above. + +#### Standardized questions.yaml sections + +To minimize the maintenance load of our App collection, we always aim to standardize as much as possible. The same goes for questions.yaml. Included here are some code standardized code-snippets that are expected to be included in every App. +Be aware that sometimes specific functions might or might not completely function. However, omitting them would significantly increase the maintenance burden and this functionality is often incorporated into the common-chart anyway. + +#### Groups + +To make sure all apps stay somewhat the same, we use a list of standardized groups for the groups section. Please make sure to use these groups in your Apps: + +```yaml +groups: + - name: "Container Image" + description: "Image to be used for container" + - name: "Workload Configuration" + description: "Configure workload deployment" + - name: "Configuration" + description: "additional container configuration" + - name: "Networking" + description: "Configure Network and Services for container" + - name: "Storage" + description: "Persist and share data that is separate from the lifecycle of the container" + - name: "Resources and Devices" + description: "Specify resources/devices to be allocated to workload" + - name: "Ingress Configuration" + description: "Ingress Configuration" + - name: "Security" + description: "Configure security context" + - name: "Advanced" + description: "Advanced Configuration" + - name: "WARNING" + description: "WARNING" +``` + +#### General Configuration options + +These options are always\* included because almost every chart (eventually) has a use for them and/or other parts of the common chart depend on them. +They are called general options, because they affect the basic functionalities of a chart. For example: Custom User environment variables, permissions and timezones. + +\*`PUID`, `PGID`, `UMASK` are only included when they are needed. + +```yaml +- variable: env + group: "Configuration" + label: "Image Environment" + schema: + additional_attrs: true + type: dict + attrs: + - variable: TZ + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: PUID + label: "PUID" + description: "Sets the PUID env var for LinuxServer.io (compatible) containers" + schema: + type: int + default: 568 + - variable: PGID + label: "PGID" + description: "Sets the PGID env var for LinuxServer.io (compatible) containers" + schema: + type: int + default: 568 + - variable: UMASK + label: "UMASK" + description: "Sets the UMASK env var for LinuxServer.io (compatible) containers" + schema: + type: string + default: "002" + +# Configure Custom Environment Variables +- variable: environmentVariables + label: "Image environment" + group: "Configuration" + schema: + type: list + default: [] + items: + - variable: environmentVariable + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string +``` + +#### Security Context Configuration options + +```yaml +# Enable privileged +- variable: securityContext + group: "Security" + label: "Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Enable privileged mode for Common-Chart based charts" + schema: + type: boolean + default: false +# Set Pod Security Policy +- variable: podSecurityContext + group: "Security" + label: "Pod Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 568 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: "OnRootMismatch" + enum: + - value: "OnRootMismatch" + description: "OnRootMismatch" + - value: "Always" + description: "Always" +``` diff --git a/archive/website/src/content/deprecated/SCALE/guides/recover-cnpg.md b/archive/website/src/content/deprecated/SCALE/guides/recover-cnpg.md new file mode 100644 index 00000000000..3d08f2d5828 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/recover-cnpg.md @@ -0,0 +1,106 @@ +--- +title: Recovering CNPG Apps after Reboot +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +Apps with a PostgreSQL database that were updated to the new CNPG common sometimes don't survive a reboot of TrueNAS Scale. The App then hangs on _DEPLOYING_ and pods are in state _Completed_ or _TaintToleration_. + +:::caution[Best Effort Policy] + +This guide has been written with the best efforts of the staff and tested as best possible. We are not responsible if it doesn't work for every scenario or user situation or if you suffer data loss as a result. +This guide has been tested with TrueNAS SCALE Bluefin 22.12.4.2, Cobia 23.10, CNPG 1.20.2_2.0.3 and HomeAssistant 2023.10.3_20.0.12. + +::: + +## Symptoms + +If you have rebooted and your Apps are hanging on _DEPLOYING_, check if you see pods in state _Completed_ or _TaintToleration_ and the apps main pod in state _Init_ with the +command `k3s kubectl get all -n ix-`. + +```bash +Examples: + +k3s kubectl get all -n ix-home-assistant +NAME READY STATUS RESTARTS AGE +pod/home-assistant-cnpg-main-1 0/1 TaintToleration 0 12h +pod/home-assistant-cnpg-main-2 0/1 TaintToleration 0 12h +pod/home-assistant-85865456d5-tc8h4 0/1 TaintToleration 0 12h +pod/home-assistant-85865456d5-kl96x 0/1 Init:0/2 0 12h + +k3s kubectl get all -n ix-home-assistant +NAME READY STATUS RESTARTS AGE +pod/home-assistant-cnpg-main-2 0/1 Completed 0 22m +pod/home-assistant-cnpg-main-rw-df9bcbccc-s8z2n 0/1 Completed 0 23m +pod/home-assistant-cnpg-main-rw-df9bcbccc-ptltn 0/1 Completed 0 23m +pod/home-assistant-cnpg-main-rw-df9bcbccc-jbbcj 1/1 Running 0 12m +pod/home-assistant-5867d984d9-gfznd 0/1 Completed 0 23m +pod/home-assistant-cnpg-main-1 0/1 Completed 0 23m +pod/home-assistant-cnpg-main-rw-df9bcbccc-q2w2d 1/1 Running 0 12m +pod/home-assistant-5867d984d9-vcp6x 0/1 Init:0/2 0 12m +``` + +Logs from the cnpg-wait container in the main app pod show something like this: + +```bash +Testing database on url: home-assistant-cnpg-main-rw +home-assistant-cnpg-main-rw:5432 - no response +``` + +## Recovery Steps + +To recover your app, you need to first stop it ([do not click the _Stop_ button!](/general/faq#how-do-i-stop-a-truecharts-app-truenas-scale-only)), delete the hanging pods and then restart the app. + +1. Stop the app either by checking "Stop All" in the app settings or with HeavyScript via the SCALE GUI Shell as below + +```bash +heavyscript app --stop ` +``` + +2. Wait 2-3min + +3. Delete any still hanging pods with the below command + +```bash +k3s kubectl delete pods -n ix- ` +e.g. k3s kubectl delete pods -n ix-home-assistant home-assistant-85865456d5-tc8h4 +``` + +4. Start the app either by unchecking "Stop All" in the app settings or with HeavyScript as below + +```bash +heavyscript app --start +``` + +5. If you unchecked "Stop All" you might have to click the `Start` button on the GUI (Start is safe, Stop is NOT). There also might be a task that gets stuck in TrueNAS under Jobs (top right). You can get rid of those by restarting the TrueNAS GUI with the below command + +```bash +systemctl restart middlewared +``` + +6. Wait 2-3 minutes + +7. Check that the app and all of its pods are running. In the third paragraph there should be no _deployment.apps_ with 0 _AVAILABLE_ + +```bash +Example: +k3s kubectl get all -n ix-home-assistant` +NAME READY UP-TO-DATE AVAILABLE AGE +deployment.apps/home-assistant-cnpg-main-rw 0/0 0 0 14h +deployment.apps/home-assistant 1/1 1 1 14h +``` + +8. You can scale them up manually to 1 replica or if it's a cnpg-main-rw pod you might want 2 replicas + +```bash +k3s kubectl scale deploy -n ix- --replicas=1 +e.g. k3s kubectl scale deploy home-assistant-cnpg-main-rw -n ix-home-assistant --replicas=2 +``` + +**Credit** + +Thanks to [Zasx](https://github.com/ZasX) from the [TrueCharts](https://www.truecharts.org) team for the steps used to create this guide. diff --git a/archive/website/src/content/deprecated/SCALE/guides/scale-intro.mdx b/archive/website/src/content/deprecated/SCALE/guides/scale-intro.mdx new file mode 100644 index 00000000000..c3a6a8926f1 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/scale-intro.mdx @@ -0,0 +1,195 @@ +--- +title: Introduction to TrueNAS SCALE +sidebar: + order: 2 +--- + +## IMPORTANT: Must Read! + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +All guides under this section are made for TrueNAS SCALE. We do **NOT** control anything made by iX-Systems, no matter how good or bad it is. More specifically, we have no control **AT ALL** over the following: + +- Adding/Creating certificates +- Backup functions +- Restore functions +- Rollback functions +- Opening the Shell +- All GUI elements except: Install-menu, Edit-menu and Portal-Button + +Even if we made some tools and guides to make the above easier to use, we cannot provide **any** support for these features. + +More specifically: +Anything related to TrueTool has been deprecated and is now replaced with [HeavyScript](https://github.com/Heavybullets8/heavy_script), any guides still referring to TrueTool will be updated or replaced. + +## Installing Apps + +Removed as SCALE is deprecated. + +### Requirements + +Removed as SCALE is deprecated. + +:::tip[Additional App Storage] + +If you plan to add additional app storage to your app, review important information about [app storage and host path validation](/deprecated/scale/guides/add-storage). + +::: + +### Adding the App + +Removed as SCALE is deprecated. + +### Example App Configuration Options + +- **Application Name** Configure a custom name for your app and select a version to install. +- **General Settings:** Choose the number of replicas, preferred timezone, and add custom environmental variables. +- **Networking & Services:** Choose how you'd like to expose your app from the k3s network to your local network and the Internet. +- **Storage and Persistence:** Configure core app storage and [add additional app storage](/deprecated/scale/guides/add-storage). +- **Ingress:** For TrueCharts apps you can configure [Ingress with Traefik](/charts/premium/traefik/how-to) to easily proxy Internet traffic to your app. +- **Security & Permissions:** Configure PUID, fsGroup, and other security and file permissions for your app. +- **Other Options:** You can also configure GPU support, addons (such as adding a CodeServer for easy file editing), and advanced app settings. + +### Video Guide + + + +### Notes + +- You can view specific configuration information about your app in its app-specific page by searching for it in the [charts list](/charts/description-list), searching our guides, or by searching for threads about it on the TrueCharts Discord. +- If you see both an `incubator` and `stable` version of an app in the TrueCharts catalog, you should always use the `stable` version as it is the best maintained version. +- Some apps are available in both the TrueCharts catalog and iXsystems default catalog. We recommend and only support the TrueCharts version of an app for access to features and capability alignment. +- Once an app is thoroughly tested and known to be stable, it can be moved from the `incubator` train to the `stable` train. You can let the TrueCharts team know if a particular app appears to be working well enough to be moved to the `stable` train. + +## Editing Apps + +Editing Apps has a slightly different GUI however it exposes the same settings as when installing an App. + +### Requirements + +- Make sure your storage-pool is created and working +- Make sure you selected your storage-pool when you first opened the "Apps" interface, if not please refer to [Configuring your Apps Pool](/deprecated/scale) +- Make sure you have a working internet connection and can reach github and truecharts.org from the host system +- Make sure you already added the TrueCharts catalog from [Adding TrueCharts to SCALE](/deprecated/scale#adding-truecharts) +- Make sure your App is installed and, preferably, working. + +### Editing the App + +1. Go to the `Apps` page of the SCALE GUI +2. Select your desired app to edit from the list of installed apps +3. Select the `Edit` button +4. Change any settings you want to change +5. Submit your changes. + +The App will then go through a process of submitting your changes. If the process fails, your changes will not be submitted and the edit will be reverted. Once the process popup disappears, it might take a few minutes to actually re-deploy the app with your new changes due to some things that happen in the background. + +### Video Guide + + + +### Notes + +- It's NOT advisable to switch between Nodeport and Loadbalancer, using the same ports. This WILL cause problems. If you edit an app and switch between NodePort and Loadbalancer, please be sure to use different ports. + +## Upgrading + +### Upgrading the app using the SCALE GUI + +1. Go to the `Apps` page of the SCALE GUI +2. Make sure your App reports that an Upgrade is available on the App Card +3. Make note of the current version, you might want to revert to this version in the future +4. Select `Upgrade` or `Update` +5. Confirm you want to upgrade, checking the changelog for any potential issues such as breaking changes. + +The App will then go through a process of backing up(!) and upgrading. If the process fails, your changes will not be submitted and the edit will be reverted. After the process popup disappears, it might take a few minutes to actually re-deploy your newly upgraded app, due to some things that happen in the background. + +### Upgrading the app using HeavyScript + +Alternatively, you can also use [HeavyScript](/deprecated/scale/#heavyscript) to update your apps and even configure it to do so automatically via a CRON job. Examples and instructions are found on the linked page and the HeavyScript Github, also linked on that page. + +## Rollback an app + +### Reverting using the GUI + +1. Select the app you wish to rollback from the list of installed apps +2. Select "Roll Back" +3. Under "Version" - Click the dropdown and select which version you would like to rollback to +4. Check the "Roll Back Snapshot" box +5. Select "Roll Back" + +Wait a few moments for the process to happen in the background and you should soon be greeted by the prior version of the app deployed and running. + +### Reverting using the CLI + +1. Enter cli to enter the SCALE command line interface +2. Enter app chart_release rollback + It should give you this screen: + ![cli-rollback1](/img/rollback/cli-rollback1.png) +3. Enter the release name and item_version like this: + ![cli-rollback2](/img/rollback/cli-rollback2.png) + (be sure to remove the # before the release name) +4. Click save then click quit + It should show something like this, confirming the rollback: + ![cli-rollback3](/img/rollback/cli-rollback3.png) + +### Finding the last installed version + +SCALE does not list which versions are available to roll-back to, but does required a version to be entered. +There is a short walk-through to get the versioning history for the app in question: + +1. Run `export KUBECONFIG=/etc/rancher/k3s/k3s.yaml` +2. Run `helm history jackett -n ix-jackett` where "jackett" should be replaced with the name of the App that broke your UI. + You'll see this: + ![history](/img/rollback/history.png) + Take note of the "Chart" column, it lists the version numbers you can enter in the rollback interface, prefixed by the App Name. + Of coarse only enter the version number in the GUI or CLI, not the name + +## Delete + +### Delete using the GUI + +1. Select the app you wish to delete from the list of installed apps +2. Select "Delete" +3. Check the "Confirm" box +4. Select "Continue" + +Wait a few moments for the process to happen in the background. + +### Delete using the CLI + +1. Enter the SCALE terminal via the GUI or SSH +2. Type the following command + - `cli -c 'app chart_release delete release_name=NAME_OF_APPLICATION'` + - ex: `cli -c 'app chart_release delete release_name=traefik'` + +### Video Guide + + diff --git a/archive/website/src/content/deprecated/SCALE/guides/sql-export.md b/archive/website/src/content/deprecated/SCALE/guides/sql-export.md new file mode 100644 index 00000000000..bfaedd89eb9 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/sql-export.md @@ -0,0 +1,59 @@ +--- +title: PostgreSQL Database Exporting +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +The information below is to help with current or future migration of the Postgres databases on your SCALE system running TrueCharts apps. + +## Prerequisites + +The user running the scripts must have permissions to access the TrueNAS SCALE host shell and execute `kubectl` commands. + +## How to list database login info for TrueCharts apps + +You can use these details to login to e.g. `pgadmin`, one of the TC apps that lets you manage databases. + +```bash title="tcdbinfo.sh" +#!/bin/bash + +# get namespaces +namespaces=$(k3s kubectl get secrets -A | grep -E "dbcreds|cnpg-main-urls" | awk '{print $1, $2}') + +# iterate over namespaces +( printf "Application | Username | Password | Address | Port\n" +echo "$namespaces" | while read ns secret; do + # extract application name + app_name=$(echo "$ns" | sed 's/^ix-//') + if [ "$secret" = "dbcreds" ]; then + creds=$(k3s kubectl get secret/$secret --namespace "$ns" -o jsonpath='{.data.url}' | base64 -d) + else + creds=$(k3s kubectl get secret/$secret --namespace "$ns" -o jsonpath='{.data.std}' | base64 -d) + fi + + # get username, password, addresspart, and port + username=$(echo "$creds" | awk -F '//' '{print $2}' | awk -F ':' '{print $1}') + password=$(echo "$creds" | awk -F ':' '{print $3}' | awk -F '@' '{print $1}') + addresspart=$(echo "$creds" | awk -F '@' '{print $2}' | awk -F ':' '{print $1}') + port=$(echo "$creds" | awk -F ':' '{print $4}' | awk -F '/' '{print $1}') + + # construct full address + full_address="${addresspart}.${ns}.svc.cluster.local" + + # print results with aligned columns + printf "%s | %s | %s | %s | %s\n" "$app_name" "$username" "$password" "$full_address" "$port" +done ) | column -t -s "|" +``` + +## Setting up the files + +In TrueNAS SCALE, create a dataset that can house the script files. Put the `.sh` files in that dataset. Navigate to the dataset from the host shell. Make the files executable. + +```bash +cd /mnt/tank/scripts/databases +chmod +x tcdbinfo.sh +``` diff --git a/archive/website/src/content/deprecated/SCALE/guides/truenas-web-gui-via-traefik.md b/archive/website/src/content/deprecated/SCALE/guides/truenas-web-gui-via-traefik.md new file mode 100644 index 00000000000..77083ab2749 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/truenas-web-gui-via-traefik.md @@ -0,0 +1,26 @@ +--- +title: Accessing the TrueNAS SCALE Web GUI via Traefik +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +If you followed the instructions in [Installing Traefik](/charts/premium/traefik/how-to), your TrueNAS Web GUI will now be served on custom ports (port 81 and 444 in the video guide). + +To access the TrueNAS Web GUI via Traefik on port 443, use the `external-service` app: + +1. Set `External Service IP` to the ip address of your TrueNAS server +2. Set `Port Type` to `HTTPS` +3. Set `Service Port` to the same value as `Web Interface HTTPS Port` in the TrueNAS GUI Settings (`444` if you followed [Installing Traefik](/charts/premium/traefik/how-to)) +4. Setup Ingress according to guide 12 (set the `Host` and `HostName` values to e.g. truenas.example.com) + +Now, Traefik will serve the TrueNAS Web GUI over HTTPS on truenas.example.com. Ensure your DNS points truenas.example.com to the ip address of your TrueNAS server. + +To check if you setup everything correctly, compare your settings to the settings in this screenshot: + +![Screenshot with External Service settings overview](./img/truenas-web-gui-via-traefik-screenshot.png) + +Once your External Service is deployed, you can get this overview by choosing "Edit" from the External Service menu (three dots). diff --git a/archive/website/src/content/deprecated/SCALE/guides/vpn-setup.md b/archive/website/src/content/deprecated/SCALE/guides/vpn-setup.md new file mode 100644 index 00000000000..f04fd5ac47f --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/guides/vpn-setup.md @@ -0,0 +1,182 @@ +--- +title: Setting up VPNs on TrueNAS SCALE +sidebar: + order: 13 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +## Gluetun VPN Add-on Setup Guide + +Basic setup of the TrueCharts [Gluetun](https://github.com/qdm12/gluetun/) VPN addon + +:::caution[Unique VPN Environmental Variables] + +The guide below uses Mullvad and Windscribe as examples. You must visit the [Gluetun Wiki](https://github.com/qdm12/gluetun-wiki) and use the environmental variables listed for your VPN provider. Attempting to use the variables listed below will not work with any other providers and will cause Gluetun to fail during start up and the app it is attached to not to start. + +::: + +## Prerequisites + +- Anything migrated to the new common chart that features `Gluetun` +- Ideally a VPN provider supported by `Gluetun`, check the [Gluetun Wiki](https://github.com/qdm12/gluetun-wiki) for more info. + There are custom providers but that is beyond the scope of this guide. + +## Gluetun VPN Addon Setup + +- Install app as per usual and scroll down the to the `Addons` section +- Click on `VPN` and select `Gluetun` + +![VPN Gluetun 1](./img/Gluetun-VPN1.png) + +`Gluetun` works with Environment Variables so we need to configure them below. Enter your `VPN Provider` specific ones (see below) + +### OpenVPN Example + +![VPN Gluetun 2](./img/Gluetun-VPN2.png) + +- All providers will generally need `VPN_SERVICE_PROVIDER` and `VPN_TYPE`, for me it's `Windscribe` and `openvpn` but I could easily choose `Wireguard` +- Scroll to the [Gluetun Wiki](https://github.com/qdm12/gluetun-wiki) and find your specific provider and enter their info, eg [Windscribe Wiki Page](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/windscribe.md) + +### Wireguard Example + +I will demonstrate using `Mullvad` as the provider. + +- I pull my private key, endpoint port and Wireguard Addresses from a `Mullvad` wireguard config file. + + ![Mullvad Config File](./img/Gluetun-VPN4.png) + +- You can generate a new config file from the `Mullvad` website, here is the [Mullvad Config Generator](https://mullvad.net/en/account/#/wireguard-config/) + +Now we can enter the Env Vars + +- Install app as per usual and scroll down the to the `Addons` section, click `Add` for each new environment variable + + ![WG ENV Vars 1](./img/Gluetun-VPN5.png) + +- Enable the killswitch by ticking `Enable Killswitch` box +- Click `Add` for every subnet you would like to exclude from the VPN tunnel. I have added my local subnet. + +:::caution[Killswitch Entry] + +The Killswitch entry uses the Network ID and CIDR. Please note the example above is 192.168.1.0/24. This is never your default gateway or router IP address. If you fill this entry out incorrectly Gluetun will fail to start and the application it is attached to will fail to start. In almost all situations the Network ID will end in a .0 (ie. 192.168.0.0, 10.0.0.0, 172.16.0.0) and the CIDR will be /24. + +> Specifying the kubernetes subnet is not necessary as it is automatically excluded from the VPN tunnel + +::: + +- VPN Config File Location is not necessary, we will be using environment variables instead, so leave it blank + + ![WG ENV Vars 2](./img/Gluetun-VPN6.png) + +- `VPN_TYPE` is `wireguard` +- `VPN_SERVICE_PROVIDER` is `mullvad` in my case + + ![WG ENV Vars 3](./img/Gluetun-VPN7.png) + +- `WIREGUARD_PRIVATE_KEY` is the private key from the `Mullvad` config file above +- `FIREWALL_VPN_INPUT_PORTS` is the _port forward_ port. +- `WIREGUARD_ADDRESSES` is the `Mullvad` endpoint IP address, found in the `Mullvad` config file above + + ![WG ENV Vars 4](./img/Gluetun-VPN8.png) + +- `SERVER_CITIES` is the `Mullvad` server city, it should likely be in from the same city your config file is from, and should share the same city as your forwarded port. + In my case, I am using the `Toronto` server city, and my forwarded port is from `Toronto`. +- `VPN_ENDPOINT_PORT` is the `Mullvad` endpoint port, found in the `Mullvad` config file above +- Basically same as above but needs the `VPN_TYPE` switched to `wireguard`, `WIREGUARD_PRIVATE_KEY` and `WIREGUARD_ADDRESSES` + + ![VPN Gluetun 4](./img/Gluetun-VPN4.png) + +## Verify it works + +Easiest way to verify after it deploys (the app will fail if your credentials don't work) for me is using `qbittorrent` since the network page shows the interfaces +can be shown quickly (or check the logs), the interface will be `tun0`. + +![VPN Gluetun 3](./img/Gluetun-VPN3.png) + +## Additional Gluetun Options + +### Proxy Example + +Gluetun offers HTTP (and Shadowsocks) proxy support. This is useful in scenarios when a private tracker requires the same IP address for both indexing _and_ downloading torrents. It is also generally useful if you want to route some HTTP traffic through your VPN from another container. + +#### Step 1: Set the HTTP Proxy VPN Environment Variables + +- `HTTPPROXY`: `on` +- `HTTPPROXY_LOG`: `on` (optional, but useful to verify initial setup) + +![VPN Gluetun Proxy Env Var](./img/Gluetun-Proxy1.png) + +Gluetun's default HTTP proxy port is `8888`. If you wish to change the port, then change it by adding the `HTTPPROXY_LISTENING_ADDRESS` environment variable. + +See Gluetun's website for more proxy configuration options (like setting a username/password): + +- [http-proxy](https://github.com/qdm12/gluetun-wiki/blob/main/setup/options/http-proxy.md) +- [shadowsocks](https://github.com/qdm12/gluetun-wiki/blob/main/setup/options/shadowsocks.md) + +#### Step 2: Add a new service for the proxy + +On the same app where you configured the Gluetun VPN addon proxy environment variables, add the following: + +1. Under `Networking and Services` section, check `Show Expert Config` +2. Click Add for `Manual Custom Services` + - Name: `proxy` + - Service Type: `ClusterIP` (if you plan to use the proxy external to SCALE Apps, then set `LoadBalancer`) + - Port Name: `proxy` + - Port Type: `HTTP` + - Target and Container Port: `8888` (Gluetun default for HTTP proxy) +3. Click Save + +![VPN Gluetun Proxy Manual Custom Service](./img/Gluetun-Proxy2.png) + +#### Step 3: Determine the proxy internal DNS name + +The service name will end in `-proxy`. For an app named `qbittorrent` it will be:\ +`qbittorrent-proxy.ix-qbittorrent.svc.cluster.local`. + +If your app is named something different, you can look it up using + +- `k3s kubectl get svc -A` or +- the DNS command in heavyscript (`heavyscript dns --all` or `heavyscript --dns -v`) + +#### Step 4: Configure the proxy in your indexer app (Prowlarr) + +1. In Prowlarr, under `Settings -> Indexers -> Add [Indexer Proxies]`, select `Http` + - Name: `GluetunProxy` (or whatever name you prefer) + - Tags: `proxy` (set this if you only want the proxy to be used on certain trackers/indexers, otherwise leave blank) + - Host: `qbittorrent-proxy.ix-qbittorrent.svc.cluster.local` + - Port: `8888` (or whatever port you configured) + - Username & Password: leave blank (unless you added those env variables). + - Click Test to confirm connection, then Save. + +![VPN Gluetun Proxy Prowlarr Config](./img/Gluetun-Proxy3.png) + +If you added a `proxy` tag, make sure to also add that to the desired Indexers, under `Indexers -> Edit Indexer -> Tags`. + +Your indexer traffic will now be routed through the Gluetun HTTP proxy. Check the `qbittorrent-vpn` container logs to confirm. + +### Custom Provider Example + +If your provider isn't supported by `Gluetun` then you can use a [custom provider](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/custom.md) and configure as below, for example here's a provider with `OpenVPN` + +- Note: use `/gluetun/vpn.conf` for `OPENVPN_CUSTOM_CONFIG` and not the path specified inside the `VPN config file location` above + +![Custom Provider Example](./img/CustomVPNprovider.png) + +## Troubleshooting + +To access the Gluetun logs do the following. + +1. On the installed apps page, click the row for the app you are using with Gluetun. + +2. In the Workloads pane on the right, click the "View Logs" icon (see image) + +![Gluteun VPN Log](./img/Gluetun-vpn-log-icon.png) + +3. In the Containers dropdown select the log that ends with "-vpn". + +![Gluteun VPN Log](./img/Gluetun-vpn-log.png) diff --git a/archive/website/src/content/deprecated/SCALE/img/volumesnapshotclass.png b/archive/website/src/content/deprecated/SCALE/img/volumesnapshotclass.png new file mode 100644 index 00000000000..6f2ef47e012 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/img/volumesnapshotclass.png differ diff --git a/archive/website/src/content/deprecated/SCALE/index.mdx b/archive/website/src/content/deprecated/SCALE/index.mdx new file mode 100644 index 00000000000..28a946af831 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/index.mdx @@ -0,0 +1,138 @@ +--- +title: Getting Started +sidebar: + order: 1 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references for users with chart-specific scenarios and may be removed at any time. + +::: + +SCALE Apps is a Helm-Charts-as-Apps tool. However, in contrast to more "premium-grade" solutions like kubeapps, it's not built by Kubernetes specialists and it does not offer complete freedom to deploy helm charts. Nor can you manually edit Chart-Yaml files manually. + +This makes SCALE Apps a great tool for users running a TrueNAS SCALE NAS and running a few applications on it. But makes it less optimal for Advanced users. + +:::tip + +Please, always remember to check the content specific to the chart. + +::: + +## Tier + +SCALE Apps are what we call a "Tier 3" deployment option. This means that while we expect it to go smoothly, there are likely caveats, limited options and/or we've limited staff available to help out users with support. Hence, we would advise a "Tier 2" or "Tier 1" solution instead. + +## Caveats + +SCALE Apps is a pretty limited solution. For normal homelab use, TrueCharts SCALE Apps likely will suffice just fine. But for more advanced setups, as mentioned above, it's not sufficient. It also adds significant layers of "middleware" between the App GUI and Kubernetes/Helm, which is prone to lead to niche issues that other deployment options do not face. + +We also would like to point out that iX-Systems, the creators of TrueNAS SCALE, do not have much kubernetes experience or specialised engineers available. This does affect the quality of the end product. + +Hence for chart management our preference would be to use FluxCD instead. + +## How to Configure + +Removed as SCALE is deprecated. + +## Requirements + +Removed as SCALE is deprecated. + +## Minimal Getting Started Setup with SCALE + +Removed as SCALE is deprecated. + +## Adding TrueCharts + +Removed as SCALE is deprecated. + +## Getting started using Charts with your own Domain + +- Move TrueNAS Port to 81,444 -> [TrueNAS WebUI Instructions](/charts/premium/traefik/how-to#truenas-webui) +- Add Traefik -> [Traefik How-To](/charts/premium/traefik/how-to) +- Use Cloudflare for DNS and create API token -> [Guide](/charts/premium/clusterissuer/how-to#configure-acme-issuer) +- Add ClusterIssuer -> [Clusterissuer How-to](/charts/premium/clusterissuer/how-to) +- Add Blocky -> [Blocky Setup Guide](/charts/premium/blocky/setup-guide) +- Setup ingress on each Chart you want to expose -> [Configure Ingress using Clusterissuer certs](/charts/premium/clusterissuer/how-to/#configure-ingress-using-clusterissuer) + +## Full TrueCharts Setup on TrueNAS SCALE + +Removed as SCALE is deprecated. + +### TrueCharts Trains Overview + +TrueCharts has multiple "trains", or branches of apps which you can choose to install. Below is a summary of each train and its intended use. + +- `stable` contains apps which have been thoroughly tested and expected to be stable and working. The `stable` version of an app is always the best available version +- `incubator` contains apps which are still in development and/or are not considered to be stable and working well enough to be moved into the `stable` branch +- `dependency` contains apps that are mostly used as dependencies. This train is not supported, aside from bug fixes +- `premium` contains apps for core TrueCharts features and, in the future, will be covered by additional support for professional use cases +- `system` contains operators required for certain apps apps to function at all, recommended leaving this `enabled`. + +[See here](/charts/description-list) for a list of all apps available for each TrueCharts trains. + +### HeavyScript + +Removed as SCALE is deprecated and HeavyScript is no longer actively supported/developed by HeavyBullets. + +### OpenEBS Setup + +Removed as SCALE is deprecated. + +### MetalLB installation and disabling integrated LoadBalancer + +![metallb](./guides/img/icons/metallb.png) + +This step may be optional but is recommended for advanced users and/or those who which to assign specific IPs to their SCALE applications. We have a full guide explaining the setups on the [MetalLB-Config Setup Guide](/charts/premium/metallb-config/setup-guide) page on how to setup MetalLB and disable the integrated LoadBalancer. Please refer to that page for more info. + +### Prometheus and CNPG system app installations + +![Prometheus](./guides/img/icons/prometheus-operator.png) ![CNPG](./guides/img/icons/cnpg.png) + +Many of the popular TrueCharts apps for TrueNAS SCALE rely on `Prometheus Operator` and `Cloudnative-PG Operator` to be installed **PRIOR** to installing another app that may rely on functionality these operators provide. If you're unsure if you're using any TrueCharts apps that require Prometheus or CNPG functionality, we advise you install these system apps first anyway before attempting to then install any other apps. + +[Here](/general/faq#how-do-i-know-if-an-app-uses-cnpg) is a list of apps that rely on CNPG functionality. If you intend to deploy any of these apps, you **must** install the `Cloudnative-PG Operator` app first as above. + +If you are migrating from a different CNPG operator, you can use our [CNPG Migration Guide](/deprecated/scale/guides/cnpg-migration-guide) for steps on how to install the `Cloudnative-PG` operator and migrating to it. We also have [this](/general/faq#operators) FAQ entry on removing the previous CNPG backend once migrated. + +For new users just starting out with TrueNAS SCALE, simply **first** install `Prometheus Operator` **followed by** `Cloudnative-PG Operator` from the TrueCharts Community Catalog before continuing. + +### Traefik installation for Ingress / Reverse-Proxy support with TrueCharts Apps + +![Traefik](./guides/img/icons/traefik.png) + +`Traefik` is our "ingress" or "reverse-proxy" solution of choice and is integrated into all our apps in order to make it as easy as possible to secure your apps. To support this, we supply a separate Traefik "ingress" app, which has been pre-configured to provide secure and fast connections. Please check the `Traefik` [How-To](/charts/premium/traefik/how-to) for basic instructions and a video as well. + +An optional but extra function enabled by Traefik and supported by many Truecharts Community Catalog apps like `Nextcloud`, is the ability to use a `middleware` to use your apps remotely. You can setup a basicAuth middleware using our guide [Add Traefik Basic Auth to Apps](/charts/premium/traefik/traefik-basicauth-middleware/). + +### Cert-Manager (operator) and Clusterissuer installation for certificate management + +![Cert-Manager](./guides/img/icons/cert-manager.png) + +TrueCharts only supports the usage of `Cert-Manager` (both the operator portion and the main `clusterissuer`) for certificate management inside apps for TrueNAS SCALE. The usage of TrueNAS SCALE certificates through the GUI is deprecated and may cease to function in future updates. We highly recommend setting up `clusterissuer` using our [clusterissuer setup-guide](/charts/premium/clusterissuer/how-to) before adding `Ingress` to your applications. + +### Blocky DNS provider for split-DNS installation and guide + +![Blocky](./guides/img/icons/blocky.png) + +Blocky is the optional, but preferred DNS solution for TrueCharts. It's a DNS proxy, DNS enhancer and ad-blocker which supports "split-DNS" through `K8S-Gateway` and is highly-available. The [Blocky Setup-Guide](/charts/premium/blocky/setup-guide) will cover basic setup options which will get you up and running and is not all inclusive. + +### Authelia Installation + +![Authelia](./guides/img/icons/authelia.png) + +Authelia is a Single Sign-On Multi-Factor portal for web apps, and is the preferred solution to secure your TrueCharts apps when exposing them using `Traefik` as your ingress solution. We have a detailed guide that goes through setting up Authelia, along with LLDAP as a backend for Authelia and setting up the `forwardAuth` section of Traefik to handle the redirections and securing your apps. Please refer to the [Authelia Setup-Guide](/charts/premium/authelia/setup-guide) for more info. It is not strictly required, however you are otherwise encouraged to set a very strong password in your previous steps. + +### Outdated Video Guide + + diff --git a/archive/website/src/content/deprecated/SCALE/migrations/cobia-dragonfish.mdx b/archive/website/src/content/deprecated/SCALE/migrations/cobia-dragonfish.mdx new file mode 100644 index 00000000000..1faba9447a2 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/migrations/cobia-dragonfish.mdx @@ -0,0 +1,213 @@ +--- +title: Cobia to DragonFish Storage Migration +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +:::caution[Execute all steps at once] + +It's imperative to execute **ALL** steps in this guide in one sitting. If you reboot or take any time away from this task, we cannot guarantee your data and apps stay working. +Please only continue when you have time available to complete the migration. + +It's also important to note that the migration to DragonFish **requires** reinstallation of all apps, for which an automated solution is available in the guide as well. +Please read this migration guide carefully _before_ upgrading to DragonFish. + +::: + +## Important Changes + +iX-Systems no longer maintains or supports any form of PVC-based storage for apps. This includes their own "legacy" storage backend. This means that when using the following SCALE features, you will lose some functionality: + + - **SCALE Backup and Restore (unreleased feature available through HeavyScript)** - Will no longer back up PVC storage at all. + - **SCALE App Rollback** - You will no longer be able to roll back any PVC storage. + - **SCALE App Pool Migration** - You will no longer be able to migrate PVC storage using the pool migration feature in SCALE. + +The above issues exist both for our new in-house TrueCharts OpenEBS storage solution **and** for users using already installed apps that use the legacy storage backend from iX-Systems. + +## For Existing Users and Apps + +### Pre Cobia-to-DragonFish Upgrade Steps + + + +1. Ensure apps are up-to-date on Cobia + + Prior to updating to TrueNAS SCALE DragonFish, please ensure that TrueNAS SCALE is updated to the latest version of Cobia (23.10.2), and that all of your TrueCharts apps are fully updated, on the [correct trains](/news/train-renames), and running or otherwise working correctly. + +2. Create a backup using HeavyScript + + For details on installing and creating a backup with HeavyScript, please see the [HeavyScript GitHub Repo.](https://github.com/Heavybullets8/heavy_script) + + + +:::note[Upgrade to Dragonfish] + + Update to DragonFish as usual through TrueNAS' System Settings > Update page. + +::: + +### Post Cobia-to-DragonFish Upgrade Steps + +import { Steps } from "@astrojs/starlight/components"; + + + +1. Wait at least 30 minutes after Cobia-to-Dragonfish upgrade + + Once you have completed updating your TrueNAS SCALE system from Cobia to DragonFish, the first step is to **wait at least 30 minutes after updating and the SCALE WebUI becomes accessible**. This allows time for the update to finish and services to be started. Do not restart the system or otherwise interrupt its operation during this time. + +2. Clean up the System + + We now need to clean up some old Cobia objects. Enter the following command in the TrueNAS SCALE shell as root: + + _Replace `TANK` in the command with your pool name that contains the ix-applications dataset_ + + ```shell title="Remove Old OpenEBS" + rm /mnt/TANK/ix-applications/k3s/server/manifests/zfs-operator.yaml && sudo k3s kubectl delete -f https://truecharts.org/openebsrem.yaml && sudo k3s kubectl delete storageClass openebs-zfspv-default + ``` + +3. Create Dataset for PVCs and Install OpenEBS + + Continue with the OpenEBS setup section of our TrueNAS SCALE Getting Started [Guide](/deprecated/scale#openebs-setup) and once complete, proceed to next step. + + :::caution[Dataset Location] + + **The dataset you create for OpenEBS usage MUST reside on the same storage pool as the existing ix-applications dataset. Refer to the example apps dataset images at the [end](/deprecated/scale/migrations/cobia-dragonfish/#post-migration-steps) of the guide.** + + ::: + +4. Migrate Apps to New Storage using TT-Migration Script + + Thanks to great collaboration with HeavyBullets, the TT-Migration tool will automate most of the migration process for existing apps: + https://github.com/Heavybullets8/TT-Migration + + - Existing apps with PVCs or databases should be reinstalled using the TT-Migration script. + - System train apps (`cloudnative-pg`, `cert-manager`, etc.) **should _NOT_ be reinstalled**. Apps from all other trains **should** be migrated. You will see a warning in the script if you attempt to migrate a **system** train app. + - Apps without PVC storage **do** still need to be reinstalled to remove every remnant of old storage backends. You may see a notice in the migration script if you attempt to migrate an app with no PVCs, if this is the case, continue with migrating the app (unless it's on the System train, per above) + + :::danger[Systems Train Apps] + + **NEVER** attempt to delete or reinstall system train apps without direction from the support team. Doing so may result in data loss. + + ::: + + Running the below command in the TrueNAS SCALE shell will (1) clone/download Heavy's TT-Migration repo to your SCALE system, (2) enter the path for it and (3) execute the migration script as root: + + ```shell title="Install and Run TT-Migration" + git clone https://github.com/Heavybullets8/TT-Migration.git && cd TT-Migration && sudo bash migrate.sh + ``` + + If you want to see the steps that it performs, or if you'd like to perform the steps yourself manually using the guide, follow the instructions [here](https://github.com/Heavybullets8/TT-Migration?tab=readme-ov-file#guide). + + + +:::tip + +After running the above command for the first time, there's no need to repeatedly clone/download the repo each time after. So after running it the first time, feel free to only run the below each time after: + + ```shell title="Run TT-Migration" + cd TT-Migration && sudo bash migrate.sh + ``` + +::: + +### Post Migration Steps + +Once you have completed the above, you are finished the migration process. Your apps datasets should now look something like this: + +![OpenEBS Apps](./img/openebs-datasets.png) + +Where you have a top-level dataset for everything related to apps (in the above image this is the "Apps" one), an "ix-applications" dataset which still retains non-PVC data for your apps and should **NOT** be deleted, and the dataset you created for OpenEBS use in an earlier part of this guide or when fresh installing SCALE and following our getting started [guide](/deprecated/scale/). In the above photo, this is the "pvcApps" dataset. + +Nested inside "pvcApps" (in the above example) will be the PVC folders for each of your apps that use PVC storage. Taking into account the above example layout, the OpenEBS operator apps' storage options will look like this (obviously adjust based on your naming and dataset layout): + +![OpenEBS Storage](./img/openebs-options.png) + +As you can see, I have 1 app using PVC storage, managed by OpenEBS, and whose data resides in the "pvc-7f970..." folder nested under pvcApps. You will have one of these nested folders for each app you have installed that uses PVC storage for application or config data. + +Feel free to let the system settle for 30 minutes after completing the process and then reboot it to ensure that app apps come back online correctly. + +:::note[OpenEBS] + + The OpenEBS operator now handles all PVC storage functionality for your installed apps, and should **NOT** be removed. + +::: + +## Known Issues with Migrations + +Sometimes, things don't go as smoothly as they should. These are tips to help with any known issues identified as part of the migration process. + +### CNPG database cannot be restored via the migration script + +For instances where an application's database cannot be restored, the script will prompt you to select a backup (created with HeavyScript) instead. This guide assumes HeavyScript has been installed under the current user's home directory. + +1. Navigate to HeavyScript's backup folder for the selected application and list database dumps. + + ```shell title="Check for Backups" + cd ~/heavy_script/database_dumps/APPNAME && ls + ``` + +2. Copy the latest database dump to the migration dataset created by the migration script. + + ```shell title="Copy Database" + cp APPNAME_TIMESTAMP.sql.gz /mnt/TANK/migration/APPNAME/backup/ + ``` + +3. Re-run the migration process and select the backup. + + ```shell title="Rerun Migration" + sudo bash migrate.sh --skip + ``` + + ```txt title="Use the backup copied in the previous step" + Select your original app name: + 1) APPNAME + Enter the number associated with the app: 1 + You have chosen TANK/migration/APPNAME + + Since a CNPG pod was found, the script can attempt to automatically create a database dump. Note that this requires the CNPG pod to have the ability to run successfully. If you have a recent CNPG database dump from another source (e.g., HeavyScript), you can provide that instead. + The default action is to have the script attempt to create a database dump, and should always be used unless your CNPG pod is problematic. + + Would you like to provide your own database dump file? [y/N] + y + ``` + +### "Dataset Busy" error when following the migration process/script + +Try the following in these EXACT steps, deviation of any kind can result in data loss: + +1. Try to delete the dataset using the command `zfs destroy -r "TANK/ix-applications/releases/APPNAME"` + + ````shell title="ZFS Destroy" + zfs destroy -r "TANK/ix-applications/releases/APPNAME" + ``` + + ```` + +2. If Step 1 fails, note the name of the failed app(s) and continue migrating ALL remaining apps. + +:::danger[Complete Migration First] + +You **MUST** complete or start the migration of all apps before continuing. If you do not, the migration of any remaining apps not yet completed will no longer be possible. + +**YOU HAVE BEEN WARNED** + +::: + +3. After all apps are migrated, [unset](https://www.truenas.com/docs/scale/scaleuireference/apps/#unset-pool) the apps pool. TrueNAS SCALE GUI -> Applications -> Settings -> Unset Pool + +4. Go through your list of failed apps and delete them one by one, for example: `zfs destroy -r "TANK/ix-applications/releases/APPNAME"` + +5. After all failed apps datasets are deleted, [re-set](https://www.truenas.com/docs/scale/scaleuireference/apps/#settings) the apps pool the apps pool. TrueNAS SCALE GUI -> Applications -> Settings -> Set Pool + +6. Re-run the script with `--skip` flag for all failed apps. + +It is very important to attempt all migrations **before** unsetting the applications pool. Unsetting the applications pool, or restarting with applications mid-migration, can result in data loss. + +``` + +``` diff --git a/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-datasets.png b/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-datasets.png new file mode 100644 index 00000000000..cf772a6cc76 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-datasets.png differ diff --git a/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-options.png b/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-options.png new file mode 100644 index 00000000000..aa6dd78eb47 Binary files /dev/null and b/archive/website/src/content/deprecated/SCALE/migrations/img/openebs-options.png differ diff --git a/archive/website/src/content/deprecated/SCALE/migrations/index.md b/archive/website/src/content/deprecated/SCALE/migrations/index.md new file mode 100644 index 00000000000..99ab366b8d2 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/migrations/index.md @@ -0,0 +1,7 @@ +--- +title: TrueNAS SCALE Migrations +--- + +This page has a list of available migration guides for TrueNAS SCALE. + +- [`Cobia to DragonFish`](/deprecated/scale/migrations/cobia-dragonfish) diff --git a/archive/website/src/content/deprecated/SCALE/systemrequirements.md b/archive/website/src/content/deprecated/SCALE/systemrequirements.md new file mode 100644 index 00000000000..f948ea70861 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/systemrequirements.md @@ -0,0 +1,43 @@ +--- +title: System Requirements +sidebar: + order: 3 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +All of the below recommendations assume the TrueNAS system in question is not used for anything other than running apps and storage. Adding VMs, network shares or other services may significantly increase overall system requirements. + +## Minimum System Specifications + +Systems complying with these minimum specifications will be able to run **some** of our apps and will likely be limited to just a few at the same time. Experiences in terms of performance and which apps work may vary. + +**CPU:** 4 *Physical* Cores + +**RAM:** 16GB+ + +**GPU:** None + +**Apps Storage:** 250GB HDD apps Pool **with** a supporting SSD metadata/8K-smallblocks "special" VDEV or 250GB+ SSD apps Pool. + +:::note + +To be clear: An apps pool residing on HDD-based storage **without** a supporting SSD-based small-blocks/metadata aka "special" VDEV is **NOT** supported. + +::: + +## Recommended System Specifications + +Systems complying with these recommended specifications will likely be able to run almost any app we offer and likely many at the same time, depending on system load and the specific apps in deployment. + +**CPU:** 8 *Physical* Cores + +**RAM:** 32GB+ + +**GPU:** Intel iGPU (some Nvidia and AMD GPUs are supported, albeit with potential caveats) + +**Apps Storage:** 1TB+ SSD-based apps pool or HDD **with** a supporting SSD metadata/16K-smallblocks special VDEV. diff --git a/archive/website/src/content/deprecated/SCALE/validation.md b/archive/website/src/content/deprecated/SCALE/validation.md new file mode 100644 index 00000000000..ad764dbb302 --- /dev/null +++ b/archive/website/src/content/deprecated/SCALE/validation.md @@ -0,0 +1,63 @@ +--- +title: Input Validation +sidebar: + order: 4 +--- + +:::danger + +TrueNAS SCALE Apps are considered Deprecated. We heavily recommend using a more mature Kubernetes platform such as "TalosOS" instead, and no longer offer an apps/charts catalogue for SCALE users to install. The below docs exist purely as historical references and may be removed at any time. + +::: + +Validation makes sure that your input is in the desired format, so the application can parse it without problems. +Below you can find more info about which fields have the mentioned validation and what formats are accepted. + +## All Apps + +--- + +## Resources and Devices + +**`CPU`** +Accepted formats are: + +- Plain integer (eg. `1`) - This means 1 hyperthread +- Float (eg. `0.5`) - This means half hyperthread +- Milicpu (eg. `500m`) This means also half hyperthread + +Regex used to match those: `^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$` +You can try live [here](https://regex101.com/r/WxComc/1) +More detailed info can be found [here](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu) + +**`Memory RAM`** +Accepted formats are: + +- Suffixed with E, P, T, G, M, K (eg. `5G`) - This means 5Gigabyte of RAM +- Suffixed with Ei, Pi, Ti, Gi, Mi, Ki (eg. `5Gi`) - This means 5Gibibyte of RAM +- Plain integer (eg. `134217728`) - This means 128Megabyte of RAM +- As an exponent format (eg. `134e6`) This means ~128Megabyte of RAM + +Regex used to match those: `^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$` +You can try live [here](https://regex101.com/r/LyDc6u/1) +More detailed info can be found [here](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory) + +## Paths + +Accepted formats are: + +- Paths prefixed with `/`, without whitespace characters on begin or end of each segment (eg. `/media`, `/media/shows`, `/media/movies/`) + +Accepted characters are: + +- `a-z`, `A-Z` +- `0-9` +- `.`, `-`, `_` +- `" "` (Whitespace, Not on begin or end) + +Regex used to match those: `^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$` +You can try live [here](https://regex101.com/r/WjSpXg/1) + +--- + +_If you find a field that you think it needs validation, please open an issue on github_