├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── cdk8s-examples ├── bitwarden.ts ├── bookstack.ts ├── ciao.ts ├── codeserver.ts ├── cyberchef.ts ├── flexget.ts ├── gaps.ts ├── grafana.ts ├── grocy.ts ├── heimdall.ts ├── homeassistant.ts ├── homer.ts ├── huginn.ts ├── influxdb.ts ├── jackett.ts ├── jellyfin.ts ├── komga.ts ├── lazylibrarian.ts ├── lidarr.ts ├── main.test.ts ├── main.ts ├── mariadb.ts ├── minecraft-bedrock.ts ├── minecraft.ts ├── mongo.ts ├── monitorr.ts ├── mylar.ts ├── mysql.ts ├── observium.ts ├── ombi.ts ├── organizr.ts ├── perkeep.ts ├── phpservermon.ts ├── postgres.ts ├── radarr.ts ├── raneto.ts ├── readarr.ts ├── sickgear.ts ├── smokeping.ts ├── snipeit.ts ├── sonarr.ts ├── stuffinspace.ts ├── tautulli.ts ├── transmission.ts ├── trilium.ts ├── ubooquity.ts ├── varken.ts ├── wallabag.ts └── wekan.ts └── yaml-examples ├── bitwarden ├── bitwarden-deployment.yaml ├── bitwarden-ingress.yaml ├── bitwarden-pvc.yaml └── bitwarden-service.yaml ├── bookstack ├── bookstack-deployment.yaml ├── bookstack-ingress.yaml ├── bookstack-pvc.yaml └── bookstack-service.yaml ├── ciao ├── ciao-deployment.yaml ├── ciao-ingress.yaml ├── ciao-pvc.yaml └── ciao-service.yaml ├── codeserver ├── codeserver-deployment.yaml ├── codeserver-ingress.yaml ├── codeserver-pvc.yaml └── codeserver-service.yaml ├── couchpotato ├── couchpotato-deployment.yaml ├── couchpotato-ingress.yaml ├── couchpotato-pvc.yaml └── couchpotato-service.yaml ├── cyberchef ├── cyberchef-deployment.yaml ├── cyberchef-ingress.yaml └── cyberchef-service.yaml ├── deluge ├── deluge-deployment.yaml ├── deluge-ingress.yaml ├── deluge-pvc.yaml └── deluge-service.yaml ├── flexget ├── flexget-deployment.yaml ├── flexget-ingress.yaml ├── flexget-pvc.yaml └── flexget-service.yaml ├── gaps ├── gaps-deployment.yaml ├── gaps-ingress.yaml ├── gaps-pvc.yaml └── gaps-service.yaml ├── grafana ├── grafana-deployment.yaml ├── grafana-ingress.yaml ├── grafana-pvc.yaml └── grafana-service.yaml ├── grocy ├── grocy-deployment.yaml ├── grocy-ingress.yaml ├── grocy-pvc.yaml └── grocy-service.yaml ├── handbrake ├── handbrake-deployment.yaml ├── handbrake-ingress.yaml └── handbrake-service.yaml ├── healthchecks ├── healthchecks-deployment.yaml ├── healthchecks-ingress.yaml ├── healthchecks-pvc.yaml └── healthchecks-service.yaml ├── heimdall ├── heimdall-deployment.yaml ├── heimdall-ingress.yaml ├── heimdall-pvc.yaml └── heimdall-service.yaml ├── homeassistant ├── homeassistant-deployment.yaml ├── homeassistant-ingress.yaml ├── homeassistant-pvc.yaml └── homeassistant-service.yaml ├── homer ├── homer-deployment.yaml ├── homer-ingress.yaml ├── homer-pvc.yaml └── homer-service.yaml ├── hrconvert2 ├── hrconvert2-deployment.yaml ├── hrconvert2-ingress.yaml └── hrconvert2-service.yaml ├── huggin ├── huginn-deployment.yaml ├── huginn-ingress.yaml ├── huginn-pvc.yaml └── huginn-service.yaml ├── influxdb ├── influxdb-deployment.yaml ├── influxdb-pvc.yaml └── influxdb-service.yaml ├── jackett ├── jackett-deployment.yaml ├── jackett-ingress.yaml ├── jackett-pvc.yaml └── jackett-service.yaml ├── jellyfin ├── jellyfin-deployment.yaml ├── jellyfin-ingress.yaml ├── jellyfin-pvc.yaml └── jellyfin-service.yaml ├── jupyter ├── jupyter-deployment.yaml ├── jupyter-ingress.yaml └── jupyter-service.yaml ├── komga ├── komga-deployment.yaml ├── komga-ingress.yaml ├── komga-pvc.yaml └── komga-service.yaml ├── lazylibrarian ├── lazylibrarian-deployment.yaml ├── lazylibrarian-ingress.yaml ├── lazylibrarian-pvc.yaml └── lazylibrarian-service.yaml ├── lidarr ├── lidarr-deployment.yaml ├── lidarr-ingress.yaml └── lidarr-service.yaml ├── mariadb ├── mariadb-deployment.yaml ├── mariadb-pvc.yaml └── mariadb-service.yaml ├── medusa ├── medusa-deployment.yaml ├── medusa-ingress.yaml ├── medusa-pvc.yaml └── medusa-service.yaml ├── metube ├── metube-deployment.yaml ├── metube-ingress.yaml └── metube-service.yaml ├── minecraft-bedrock ├── minecraft-bedrock-deployment.yaml ├── minecraft-bedrock-pvc.yaml └── minecraft-bedrock-service.yaml ├── minecraft ├── README.md ├── minecraft-deployment.yaml ├── minecraft-pvc.yaml └── minecraft-service.yaml ├── mongo-express ├── mongo-express-configmap.yaml ├── mongo-express-deployment.yaml ├── mongo-express-ingress.yaml └── mongo-express-service.yaml ├── mongo ├── mongo-deployment.yaml ├── mongo-pvc.yaml └── mongo-service.yaml ├── monica ├── monica-configmap.yaml ├── monica-deployment.yaml ├── monica-ingress.yaml ├── monica-pvc.yaml └── monica-service.yaml ├── monitorr ├── monitorr-deployment.yaml ├── monitorr-ingress.yaml ├── monitorr-pvc.yaml └── monitorr-service.yaml ├── mylar ├── mylar-deployment.yaml ├── mylar-ingress.yaml ├── mylar-pvc.yaml └── mylar-service.yaml ├── mysql ├── mysql-deployment.yaml ├── mysql-pvc.yaml └── mysql-service.yaml ├── nefarious ├── nefarious-deployment.yaml ├── nefarious-ingress.yaml └── nefarious-service.yaml ├── nexus3 ├── nexus3-deployment.yaml ├── nexus3-ingress.yaml └── nexus3-service.yaml ├── nfs-provisioner └── nfs-provisioner-answers.yaml ├── observium ├── observium-deployment.yaml ├── observium-ingress.yaml ├── observium-pvc.yaml └── observium-service.yaml ├── ombi ├── ombi-deployment.yaml ├── ombi-ingress.yaml ├── ombi-pvc.yaml └── ombi-service.yaml ├── organizr ├── organizr-deployment.yaml ├── organizr-ingress.yaml ├── organizr-pvc.yaml └── organizr-service.yaml ├── perkeep ├── perkeep-deployment.yaml ├── perkeep-ingress.yaml ├── perkeep-pvc.yaml └── perkeep-service.yaml ├── pgadmin4 ├── pgadmin4-configmap.yaml ├── pgadmin4-deployment.yaml ├── pgadmin4-ingress.yaml └── pgadmin4-service.yaml ├── phpservermon ├── psm-deployment.yaml ├── psm-ingress.yaml └── psm-service.yaml ├── postgres ├── postgres-deployment.yaml ├── postgres-pvc.yaml └── postgres-service.yaml ├── qbittorrent ├── qbittorrent-deployment.yaml ├── qbittorrent-ingress.yaml ├── qbittorrent-pvc.yaml └── qbittorrent-service.yaml ├── radarr ├── radarr-deployment.yaml ├── radarr-ingress.yaml ├── radarr-pvc.yaml └── radarr-service.yaml ├── raneto ├── raneto-deployment.yaml ├── raneto-ingress.yaml ├── raneto-pvc.yaml └── raneto-service.yaml ├── reactive-resume ├── reactive-resume-deployment.yaml ├── reactive-resume-ingress.yaml └── reactive-resume-service.yaml ├── readarr ├── readarr-deployment.yaml ├── readarr-ingress.yaml └── readarr-service.yaml ├── searx ├── searx-deployment.yaml ├── searx-ingress.yaml ├── searx-pvc.yaml └── searx-service.yaml ├── sickchill ├── sickchill-deployment.yaml ├── sickchill-ingress.yaml ├── sickchill-pvc.yaml └── sickchill-service.yaml ├── sickgear ├── sickgear-deployment.yaml ├── sickgear-ingress.yaml ├── sickgear-pvc.yaml └── sickgear-service.yaml ├── smokeping ├── smokeping-deployment.yaml ├── smokeping-ingress.yaml ├── smokeping-pvc.yaml └── smokeping-service.yaml ├── snipeit ├── snipeit-configmap.yaml ├── snipeit-deployment.yaml ├── snipeit-ingress.yaml ├── snipeit-pvc.yaml └── snipeit-service.yaml ├── sonarr ├── sonarr-deployment.yaml ├── sonarr-ingress.yaml ├── sonarr-pvc.yaml └── sonarr-service.yaml ├── stuffinspace ├── stuffinspace-deployment.yaml ├── stuffinspace-ingress.yaml ├── stuffinspace-pvc.yaml └── stuffinspace-service.yaml ├── tautulli ├── tautulli-deployment.yaml ├── tautulli-ingress.yaml ├── tautulli-pvc.yaml └── tautulli-service.yaml ├── transmission ├── transmission-deployment.yaml ├── transmission-ingress.yaml ├── transmission-pvc.yaml └── transmission-service.yaml ├── trilium ├── trilium-deployment.yaml ├── trilium-ingress.yaml ├── trilium-pvc.yaml └── trilium-service.yaml ├── ubooquity ├── ubooquity-deployment.yaml ├── ubooquity-ingress.yaml ├── ubooquity-pvc.yaml └── ubooquity-service.yaml ├── varken ├── varken-deployment.yaml └── varken-pvc.yaml ├── wallabag ├── wallabag-deployment.yaml ├── wallabag-ingress.yaml ├── wallabag-pvc.yaml └── wallabag-service.yaml └── wekan ├── wekan-deployment.yaml ├── wekan-ingress.yaml └── wekan-service.yaml /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea/ 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [Unreleased](https://github.com/joshdavidson/firework8s/tree/HEAD) 4 | 5 | [Full Changelog](https://github.com/joshdavidson/firework8s/compare/0.0.2...HEAD) 6 | 7 | **Closed issues:** 8 | 9 | - Separate databases from bookstack, phpservermon, snipeit, and wekan deployments [\#2](https://github.com/joshdavidson/firework8s/issues/2) 10 | 11 | ## [0.0.2](https://github.com/joshdavidson/firework8s/tree/0.0.2) (2020-11-13) 12 | 13 | [Full Changelog](https://github.com/joshdavidson/firework8s/compare/0.0.1...0.0.2) 14 | 15 | **Merged pull requests:** 16 | 17 | - Removing databases from app deployments. [\#3](https://github.com/joshdavidson/firework8s/pull/3) ([joshdavidson](https://github.com/joshdavidson)) 18 | 19 | ## [0.0.1](https://github.com/joshdavidson/firework8s/tree/0.0.1) (2020-11-07) 20 | 21 | [Full Changelog](https://github.com/joshdavidson/firework8s/compare/67a563c60289fdc40cce680950799fa162bdc49a...0.0.1) 22 | 23 | 24 | 25 | \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 joshdavidson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /cdk8s-examples/bitwarden.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class BitwardenChart extends Chart { 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | 10 | const label = {app: 'bitwarden'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { name: 'bitwarden' }, 14 | spec: { 15 | storageClassName: 'default', 16 | accessModes: ['ReadWriteOnce'], 17 | resources: { 18 | requests: { 19 | storage: '250Mi' 20 | } 21 | } 22 | } 23 | }); 24 | 25 | new Deployment(this, 'deployment', { 26 | spec: { 27 | replicas: 1, 28 | selector: { 29 | matchLabels: label 30 | }, 31 | template: { 32 | metadata: {labels: label}, 33 | spec: { 34 | volumes: [{ 35 | name: 'data', 36 | persistentVolumeClaim: {claimName: 'bitwarden'} 37 | }], 38 | containers: [{ 39 | name: 'bitwarden', 40 | image: 'bitwardenrs/server', 41 | ports: [{containerPort: 80}], 42 | volumeMounts: [{mountPath: '/data', name: 'data'}] 43 | }] 44 | } 45 | } 46 | } 47 | }); 48 | 49 | const service = new Service(this, 'service',{ 50 | ports: [{port: 80, targetPort: 80}], 51 | }); 52 | service.addSelector('app', label.app); 53 | 54 | const ingress = new Ingress(this, 'ingress'); 55 | ingress.addHostDefaultBackend('bitwarden.lan', IngressBackend.fromService(service)); 56 | } 57 | } 58 | 59 | const app = new App(); 60 | new BitwardenChart(app, 'bitwarden'); 61 | app.synth(); 62 | -------------------------------------------------------------------------------- /cdk8s-examples/ciao.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class CiaoChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | 11 | const label = {app: 'ciao'}; 12 | 13 | new PersistentVolumeClaim(this, 'pvc', { 14 | metadata: {name: 'ciao'}, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '250Mi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | const service = new Service(this, 'service', { 27 | ports: [{port: 3000, targetPort: 3000}] 28 | }); 29 | service.addSelector('app', 'ciao'); 30 | 31 | new Deployment(this, 'deployment', { 32 | spec: { 33 | replicas: 1, 34 | selector: { 35 | matchLabels: label 36 | }, 37 | template: { 38 | metadata: {labels: label}, 39 | spec: { 40 | volumes: [{ 41 | name: 'ciao', 42 | persistentVolumeClaim: {claimName: 'ciao'} 43 | }], 44 | containers: [{ 45 | name: 'ciao', 46 | image: 'brotandgames/ciao', 47 | 48 | ports: [{containerPort: 3000}], 49 | env: [ 50 | {name: 'SECRET_KEY_BASE', value: 'sensitive_secret_key_base'}, 51 | {name: 'SMTP_ADDRESS', value: 'smtp.sendgrid.net'}, 52 | {name: 'SMTP_EMAIL_FROM', value: 'noreply@ciao.lan'}, 53 | {name: 'SMTP_EMAIL_TO', value: 'yourname@youremail.com'}, 54 | {name: 'SMTP_PORT', value: '587'}, 55 | {name: 'SMTP_AUTHENTICATION', value: 'plain'}, 56 | {name: 'SMTP_DOMAIN', value: 'smtp.sendgrid.net'}, 57 | {name: 'SMTP_ENABLE_STARTTLS_AUTO', value: 'true'}, 58 | {name: 'SMTP_USERNAME', value: 'apikey'}, 59 | {name: 'SMTP_PASSWORD', value: 'your sendgrid api key'} 60 | ], 61 | volumeMounts: [{mountPath: '/app/db/sqlite', name: 'ciao'}] 62 | }] 63 | } 64 | } 65 | } 66 | }); 67 | 68 | const ingress = new Ingress(this, 'ingress'); 69 | ingress.addHostDefaultBackend('ciao.lan', IngressBackend.fromService(service)); 70 | } 71 | } 72 | 73 | const app = new App(); 74 | new CiaoChart(app, 'ciao'); 75 | app.synth(); 76 | -------------------------------------------------------------------------------- /cdk8s-examples/codeserver.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class VsCodeChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'vscode'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'vscode' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 8443, targetPort: 8443}] 29 | }); 30 | service.addSelector('app', 'vscode'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: {matchLabels: label}, 36 | template: { 37 | metadata: {labels: label}, 38 | spec: { 39 | volumes: [{name: 'vscode', persistentVolumeClaim: {claimName: 'vscode'}}], 40 | containers: [{ 41 | name: 'vscode', 42 | image: 'linuxserver/code-server', 43 | 44 | ports: [{containerPort: 8443}], 45 | env: [ 46 | {name: 'PUID', value: '1000'}, 47 | {name: 'PGID', value: '1000'}, 48 | {name: 'TZ', value: 'America/New_York'}, 49 | {name: 'PASSWORD', value: 'password'}, 50 | {name: 'SUDO_PASSWORD', value: 'password'} 51 | ], 52 | volumeMounts: [{mountPath: '/config', name: 'vscode'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | 59 | const ingress = new Ingress(this, 'ingress'); 60 | ingress.addHostDefaultBackend('vscode.lan', IngressBackend.fromService(service)); 61 | } 62 | } 63 | 64 | const app = new App(); 65 | new VsCodeChart(app, 'vscode'); 66 | app.synth(); 67 | -------------------------------------------------------------------------------- /cdk8s-examples/cyberchef.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import * as kplus from 'cdk8s-plus'; 4 | 5 | export class CyberChefChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const ingress = new kplus.Ingress(this, 'ingress'); 10 | ingress.addHostDefaultBackend('cyberchef.lan', this.getIngressBackend()); 11 | } 12 | 13 | private static getContainer() { 14 | return new kplus.Container({ 15 | image: 'mpepping/cyberchef', 16 | port: 8000 17 | }); 18 | } 19 | 20 | private getDeployment() { 21 | return new kplus.Deployment(this, 'deployment', { 22 | containers: [CyberChefChart.getContainer()] 23 | }); 24 | } 25 | 26 | private getIngressBackend() { 27 | return kplus.IngressBackend.fromService(this.getDeployment().expose(8000)); 28 | } 29 | } 30 | 31 | const app = new App(); 32 | new CyberChefChart(app, 'cyberchef'); 33 | app.synth(); 34 | -------------------------------------------------------------------------------- /cdk8s-examples/gaps.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class GapsChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'gaps'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'gaps' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 8484, targetPort: 8484}] 29 | }); 30 | service.addSelector('app', 'gaps'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'gaps', persistentVolumeClaim: {claimName: 'gaps'}}], 42 | containers: [{ 43 | name: 'gaps', 44 | image: 'housewrecker/gaps', 45 | 46 | ports: [{containerPort: 8484}], 47 | volumeMounts: [{mountPath: '/usr/data', name: 'gaps'}] 48 | }] 49 | } 50 | } 51 | } 52 | }); 53 | 54 | const ingress = new Ingress(this, 'ingress'); 55 | ingress.addHostDefaultBackend('gaps.lan', IngressBackend.fromService(service)); 56 | } 57 | } 58 | 59 | const app = new App(); 60 | new GapsChart(app, 'gaps'); 61 | app.synth(); 62 | -------------------------------------------------------------------------------- /cdk8s-examples/grafana.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class GrafanaChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'grafana'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'grafana' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 3000, targetPort: 3000}] 29 | }); 30 | service.addSelector('app', 'grafana'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'grafana', persistentVolumeClaim: {claimName: 'grafana'}}], 42 | containers: [{ 43 | name: 'grafana', 44 | image: 'grafana/grafana', 45 | 46 | ports: [{containerPort: 3000}], 47 | env: [ 48 | {name: 'GF_INSTALL_PLUGINS', value: 'grafana-piechart-panel,grafana-worldmap-panel'}, 49 | {name: 'GF_PATHS_DATA', value: '/config/data'}, 50 | {name: 'GF_PATHS_LOGS', value: '/config/logs'}, 51 | {name: 'GF_PATHS_PLUGINS', value: '/config/plugins'} 52 | ], 53 | volumeMounts: [{mountPath: '/config', name: 'grafana'}] 54 | }] 55 | } 56 | } 57 | } 58 | }); 59 | 60 | const ingress = new Ingress(this, 'ingress'); 61 | ingress.addHostDefaultBackend('grafana.lan', IngressBackend.fromService(service)); 62 | } 63 | } 64 | 65 | const app = new App(); 66 | new GrafanaChart(app, 'grafana'); 67 | app.synth(); 68 | -------------------------------------------------------------------------------- /cdk8s-examples/grocy.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class GrocyChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'grocy'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'grocy' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 80, targetPort: 80}] 29 | }); 30 | service.addSelector('app', 'grocy'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'grocy', persistentVolumeClaim: {claimName: 'grocy'}}], 42 | containers: [{ 43 | name: 'grocy', 44 | image: 'linuxserver/grocy', 45 | 46 | ports: [{containerPort: 80}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'} 51 | ], 52 | volumeMounts: [{mountPath: '/config', name: 'grocy'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | 59 | const ingress = new Ingress(this, 'ingress'); 60 | ingress.addHostDefaultBackend('grocy.lan', IngressBackend.fromService(service)); 61 | } 62 | } 63 | 64 | const app = new App(); 65 | new GrocyChart(app, 'grocy'); 66 | app.synth(); 67 | -------------------------------------------------------------------------------- /cdk8s-examples/heimdall.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class HeimdallChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'heimdall'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'heimdall' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 80, targetPort: 80}] 29 | }); 30 | service.addSelector('app', 'heimdall'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'heimdall', persistentVolumeClaim: {claimName: 'heimdall'}}], 42 | containers: [{ 43 | name: 'heimdall', 44 | image: 'linuxserver/heimdall', 45 | 46 | ports: [{containerPort: 80}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'} 51 | ], 52 | volumeMounts: [{mountPath: '/config', name: 'heimdall'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | 59 | const ingress = new Ingress(this, 'ingress'); 60 | ingress.addHostDefaultBackend('heimdall.lan', IngressBackend.fromService(service)); 61 | } 62 | } 63 | 64 | const app = new App(); 65 | new HeimdallChart(app, 'heimdall'); 66 | app.synth(); 67 | -------------------------------------------------------------------------------- /cdk8s-examples/homeassistant.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class HomeAssistantChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'homeassistant'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'homeassistant' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 8123, targetPort: 8123}] 29 | }); 30 | service.addSelector('app', 'homeassistant'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'homeassistant', persistentVolumeClaim: {claimName: 'homeassistant'}}], 42 | containers: [{ 43 | name: 'homeassistant', 44 | image: 'homeassistant/home-assistant:stable', 45 | 46 | ports: [{containerPort: 8123}], 47 | env: [{name: 'TZ', value: 'America/New_York'}], 48 | volumeMounts: [{mountPath: '/config', name: 'homeassistant'}] 49 | }] 50 | } 51 | } 52 | } 53 | }); 54 | 55 | const ingress = new Ingress(this, 'ingress'); 56 | ingress.addHostDefaultBackend('homeassistant.lan', IngressBackend.fromService(service)); 57 | } 58 | } 59 | 60 | const app = new App(); 61 | new HomeAssistantChart(app, 'homeassistant'); 62 | app.synth(); 63 | -------------------------------------------------------------------------------- /cdk8s-examples/homer.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class HomerChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'homer'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'homer' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 8080, targetPort: 8080}] 29 | }); 30 | service.addSelector('app', 'homer'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'homer', persistentVolumeClaim: {claimName: 'homer'}}], 42 | containers: [{ 43 | name: 'homer', 44 | image: 'b4bz/homer', 45 | 46 | ports: [{containerPort: 8080}], 47 | env: [ 48 | {name: 'UID', value: '1000'}, 49 | {name: 'GID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'} 51 | ], 52 | volumeMounts: [{mountPath: '/www/assets', name: 'homer'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | 59 | const ingress = new Ingress(this, 'ingress'); 60 | ingress.addHostDefaultBackend('homer.lan', IngressBackend.fromService(service)); 61 | } 62 | } 63 | 64 | const app = new App(); 65 | new HomerChart(app, 'homer'); 66 | app.synth(); 67 | -------------------------------------------------------------------------------- /cdk8s-examples/influxdb.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, IntOrString, PersistentVolumeClaim, Service} from './imports/k8s' 4 | 5 | export class InfluxDbChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const label = {app: 'influxdb'}; 10 | 11 | new PersistentVolumeClaim(this, 'pvc', { 12 | metadata: { 13 | name: 'influxdb' 14 | }, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '250Mi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | new Service(this, 'service', { 27 | spec: { 28 | ports: [{port: 8086, targetPort: IntOrString.fromNumber(8086)}], 29 | selector: label 30 | } 31 | }); 32 | 33 | new Deployment(this, 'deployment', { 34 | spec: { 35 | replicas: 1, 36 | selector: { 37 | matchLabels: label 38 | }, 39 | template: { 40 | metadata: {labels: label}, 41 | spec: { 42 | volumes: [ 43 | { 44 | name: 'influxdb', 45 | persistentVolumeClaim: {claimName: 'influxdb'} 46 | }], 47 | containers: [{ 48 | name: 'influxdb', 49 | image: 'influxdb', 50 | 51 | ports: [{containerPort: 8086}], 52 | volumeMounts: [{mountPath: '/var/lib/influxdb', name: 'influxdb'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | } 59 | } 60 | 61 | const app = new App(); 62 | new InfluxDbChart(app, 'influxdb'); 63 | app.synth(); 64 | -------------------------------------------------------------------------------- /cdk8s-examples/jackett.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class JackettChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'jackett'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'jackett' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 9117, targetPort: 9117}] 29 | }); 30 | service.addSelector('app', 'jackett'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'jackett', persistentVolumeClaim: {claimName: 'jackett'}}], 42 | containers: [{ 43 | name: 'jackett', 44 | image: 'linuxserver/jackett', 45 | 46 | ports: [{containerPort: 9117}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'}, 51 | {name: 'AUTO_UPDATE', value: 'true'} 52 | ], 53 | volumeMounts: [{mountPath: '/config', name: 'jackett'}] 54 | }] 55 | } 56 | } 57 | } 58 | }); 59 | 60 | const ingress = new Ingress(this, 'ingress'); 61 | ingress.addHostDefaultBackend('jackett.lan', IngressBackend.fromService(service)); 62 | } 63 | } 64 | 65 | const app = new App(); 66 | new JackettChart(app, 'jackett'); 67 | app.synth(); 68 | -------------------------------------------------------------------------------- /cdk8s-examples/mariadb.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, IntOrString, PersistentVolumeClaim, Service} from './imports/k8s' 4 | 5 | export class MariaDbChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const label = {app: 'mariadb'}; 10 | 11 | new PersistentVolumeClaim(this, 'pvc', { 12 | metadata: { 13 | name: 'mariadb' 14 | }, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '250Mi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | new Service(this, 'service', { 27 | spec: { 28 | ports: [{port: 3306, targetPort: IntOrString.fromNumber(3306)}], 29 | selector: label 30 | } 31 | }); 32 | 33 | new Deployment(this, 'deployment', { 34 | spec: { 35 | replicas: 1, 36 | selector: { 37 | matchLabels: label 38 | }, 39 | template: { 40 | metadata: {labels: label}, 41 | spec: { 42 | volumes: [ 43 | { 44 | name: 'mariadb', 45 | persistentVolumeClaim: {claimName: 'mariadb'} 46 | }], 47 | containers: [{ 48 | name: 'mariadb', 49 | image: 'mariadb', 50 | 51 | ports: [{containerPort: 3306}], 52 | env: [ 53 | {name: 'MYSQL_DATABASE', value: 'mariadb'}, 54 | {name: 'MYSQL_ROOT_PASSWORD', value: 'password'}, 55 | {name: 'MYSQL_USER', value: 'mariadb'}, 56 | {name: 'MYSQL_PASSWORD', value: 'mariadb'} 57 | ], 58 | volumeMounts: [{mountPath: '/var/lib/mysql', name: 'mariadb'}] 59 | }] 60 | } 61 | } 62 | } 63 | }); 64 | } 65 | } 66 | 67 | const app = new App(); 68 | new MariaDbChart(app, 'mariadb'); 69 | app.synth(); 70 | -------------------------------------------------------------------------------- /cdk8s-examples/minecraft.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, IntOrString, PersistentVolumeClaim, Service} from './imports/k8s' 4 | 5 | export class MinecraftChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const label = {app: 'minecraft'}; 10 | 11 | new PersistentVolumeClaim(this, 'pvc', { 12 | metadata: { 13 | name: 'minecraft' 14 | }, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '2Gi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | new Service(this, 'service', { 27 | spec: { 28 | type: 'NodePort', 29 | ports: [{port: 25565, nodePort: 25565, targetPort: IntOrString.fromNumber(25565)}], 30 | selector: label 31 | } 32 | }); 33 | 34 | new Deployment(this, 'deployment', { 35 | spec: { 36 | replicas: 1, 37 | selector: { 38 | matchLabels: label 39 | }, 40 | template: { 41 | metadata: {labels: label}, 42 | spec: { 43 | volumes: [{ 44 | name: 'data', 45 | persistentVolumeClaim: {claimName: 'minecraft'} 46 | }], 47 | containers: [{ 48 | name: 'minecraft', 49 | image: 'itzg/minecraft-server', 50 | 51 | env: [{name: 'EULA', value: 'true'}], 52 | ports: [{containerPort: 25565, hostPort: 25565}], 53 | volumeMounts: [{mountPath: '/data', name: 'data'}], 54 | readinessProbe: { 55 | exec: { 56 | command: ['mc-monitor', 'status', '-- host', '127.0.0.1'] 57 | }, 58 | initialDelaySeconds: 5, 59 | periodSeconds: 5 60 | } 61 | }] 62 | } 63 | } 64 | } 65 | }); 66 | 67 | } 68 | } 69 | 70 | const app = new App(); 71 | new MinecraftChart(app, 'minecraft'); 72 | app.synth(); 73 | -------------------------------------------------------------------------------- /cdk8s-examples/monitorr.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class MonitorrChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'monitorr'}; 11 | 12 | new PersistentVolumeClaim(this, 'monitorr', { 13 | metadata: { 14 | name: 'monitorr' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 80, targetPort: 80}] 29 | }); 30 | service.addSelector('app', 'monitorr'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{ 42 | name: 'monitorr', 43 | persistentVolumeClaim: {claimName: 'monitorr'} 44 | }], 45 | containers: [{ 46 | name: 'monitorr', 47 | image: 'monitorr/monitorr', 48 | 49 | ports: [{containerPort: 80}], 50 | env: [ 51 | {name: 'TZ', value: 'America/New_York'}, 52 | {name: 'PUID', value: '1000'}, 53 | {name: 'PGID', value: '1000'} 54 | ], 55 | volumeMounts: [{mountPath: '/app', name: 'monitorr'}] 56 | }] 57 | } 58 | } 59 | } 60 | }); 61 | 62 | const ingress = new Ingress(this, 'ingress'); 63 | ingress.addHostDefaultBackend('monitorr.lan', IngressBackend.fromService(service)); 64 | } 65 | } 66 | 67 | const app = new App(); 68 | new MonitorrChart(app, 'monitorr'); 69 | app.synth(); 70 | -------------------------------------------------------------------------------- /cdk8s-examples/mysql.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, IntOrString, PersistentVolumeClaim, Service} from './imports/k8s' 4 | 5 | export class MySqlChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const label = {app: 'mysql'}; 10 | 11 | new PersistentVolumeClaim(this, 'pvc', { 12 | metadata: { 13 | name: 'mysql' 14 | }, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '250Mi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | new Service(this, 'service', { 27 | spec: { 28 | ports: [{port: 3306, targetPort: IntOrString.fromNumber(3306)}], 29 | selector: label 30 | } 31 | }); 32 | 33 | new Deployment(this, 'deployment', { 34 | spec: { 35 | replicas: 1, 36 | selector: { 37 | matchLabels: label 38 | }, 39 | template: { 40 | metadata: {labels: label}, 41 | spec: { 42 | volumes: [ 43 | { 44 | name: 'mysql', 45 | persistentVolumeClaim: {claimName: 'mysql'} 46 | }], 47 | containers: [{ 48 | name: 'mysql', 49 | image: 'mysql', 50 | 51 | ports: [{containerPort: 3306}], 52 | env: [ 53 | {name: 'MYSQL_DATABASE', value: 'mysql'}, 54 | {name: 'MYSQL_ROOT_PASSWORD', value: 'password'}, 55 | {name: 'MYSQL_USER', value: 'mysql'}, 56 | {name: 'MYSQL_PASSWORD', value: 'mysql'} 57 | ], 58 | volumeMounts: [{mountPath: '/var/lib/mysql', name: 'mysql'}] 59 | }] 60 | } 61 | } 62 | } 63 | }); 64 | } 65 | } 66 | 67 | const app = new App(); 68 | new MySqlChart(app, 'mysql'); 69 | app.synth(); 70 | -------------------------------------------------------------------------------- /cdk8s-examples/ombi.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class OmbiChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'ombi'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'ombi' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 3579, targetPort: 3579}] 29 | }); 30 | service.addSelector('app', 'ombi'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'ombi', persistentVolumeClaim: {claimName: 'ombi'}}], 42 | containers: [{ 43 | name: 'ombi', 44 | image: 'linuxserver/ombi', 45 | 46 | ports: [{containerPort: 3579}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'} 51 | ], 52 | volumeMounts: [ 53 | {mountPath: '/config', name: 'ombi'} 54 | ] 55 | }] 56 | } 57 | } 58 | } 59 | }); 60 | 61 | const ingress = new Ingress(this, 'ingress'); 62 | ingress.addHostDefaultBackend('ombi.lan', IngressBackend.fromService(service)); 63 | } 64 | } 65 | 66 | const app = new App(); 67 | new OmbiChart(app, 'ombi'); 68 | app.synth(); 69 | -------------------------------------------------------------------------------- /cdk8s-examples/organizr.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class OrganizrChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'organizr'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'organizr' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 80, targetPort: 80}] 29 | }); 30 | service.addSelector('app', 'organizr'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'organizr', persistentVolumeClaim: {claimName: 'organizr'}}], 42 | containers: [{ 43 | name: 'organizr', 44 | image: 'organizr/organizr', 45 | 46 | ports: [{containerPort: 80}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'}, 51 | {name: 'fpm', value: 'false'} 52 | ], 53 | volumeMounts: [ 54 | {mountPath: '/config', name: 'organizr'} 55 | ] 56 | }] 57 | } 58 | } 59 | } 60 | }); 61 | 62 | const ingress = new Ingress(this, 'ingress'); 63 | ingress.addHostDefaultBackend('organizr.lan', IngressBackend.fromService(service)); 64 | } 65 | } 66 | 67 | const app = new App(); 68 | new OrganizrChart(app, 'organizr'); 69 | app.synth(); 70 | -------------------------------------------------------------------------------- /cdk8s-examples/phpservermon.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class PhpServerMonChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'phpservermon'}; 11 | 12 | const service = new Service(this, 'service', { 13 | ports: [{port: 80, targetPort: 80}] 14 | }); 15 | service.addSelector('app', 'phpservermon'); 16 | 17 | new Deployment(this, 'deployment', { 18 | spec: { 19 | replicas: 1, 20 | selector: { 21 | matchLabels: label 22 | }, 23 | template: { 24 | metadata: {labels: label}, 25 | spec: { 26 | containers: [{ 27 | name: 'phpservermon', 28 | image: 'benoitpodwinski/phpservermon', 29 | 30 | ports: [{containerPort: 80}], 31 | env: [ 32 | {name: 'PSM_BASE_URL', value: 'http://phpservermon.lan/'}, 33 | {name: 'PSM_DB_HOST', value: 'mariadb'}, 34 | {name: 'PSM_DB_NAME', value: 'phpservermon'}, 35 | {name: 'PSM_DB_USER', value: 'root'}, 36 | {name: 'PSM_DB_PASS', value: 'password'}, 37 | {name: 'PSM_DB_PREFIX', value: 'psm_'}, 38 | {name: 'PHP_TIMEZONE', value: 'America/New_York'} 39 | ] 40 | }] 41 | } 42 | } 43 | } 44 | }); 45 | 46 | const ingress = new Ingress(this, 'ingress'); 47 | ingress.addHostDefaultBackend('phpservermon.lan', IngressBackend.fromService(service)); 48 | } 49 | } 50 | 51 | const app = new App(); 52 | new PhpServerMonChart(app, 'phpservermon'); 53 | app.synth(); 54 | -------------------------------------------------------------------------------- /cdk8s-examples/postgres.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, IntOrString, PersistentVolumeClaim, Service} from './imports/k8s' 4 | 5 | export class PostgresChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const label = {app: 'postgres'}; 10 | 11 | new PersistentVolumeClaim(this, 'pvc', { 12 | metadata: { 13 | name: 'postgres' 14 | }, 15 | spec: { 16 | storageClassName: 'default', 17 | accessModes: ['ReadWriteOnce'], 18 | resources: { 19 | requests: { 20 | storage: '250Mi' 21 | } 22 | } 23 | } 24 | }); 25 | 26 | new Service(this, 'service', { 27 | spec: { 28 | ports: [{port: 5432, targetPort: IntOrString.fromNumber(5432)}], 29 | selector: label 30 | } 31 | }); 32 | 33 | new Deployment(this, 'deployment', { 34 | spec: { 35 | replicas: 1, 36 | selector: { 37 | matchLabels: label 38 | }, 39 | template: { 40 | metadata: {labels: label}, 41 | spec: { 42 | volumes: [ 43 | { 44 | name: 'postgres', 45 | persistentVolumeClaim: {claimName: 'postgres'} 46 | }], 47 | containers: [{ 48 | name: 'postgres', 49 | image: 'postgres', 50 | 51 | ports: [{containerPort: 5432}], 52 | env: [{name: 'POSTGRES_PASSWORD', value: 'password'}], 53 | volumeMounts: [{mountPath: '/var/lib/postgres/data', name: 'postgres'}] 54 | }] 55 | } 56 | } 57 | } 58 | }); 59 | } 60 | } 61 | 62 | const app = new App(); 63 | new PostgresChart(app, 'postgres'); 64 | app.synth(); 65 | -------------------------------------------------------------------------------- /cdk8s-examples/raneto.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class RanetoChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'raneto'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'raneto' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 3000, targetPort: 3000}] 29 | }); 30 | service.addSelector('app', 'raneto'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'raneto', persistentVolumeClaim: {claimName: 'raneto'}}], 42 | containers: [{ 43 | name: 'raneto', 44 | image: 'linuxserver/raneto', 45 | 46 | ports: [{containerPort: 3000}], 47 | env: [ 48 | {name: 'PUID', value: '1000'}, 49 | {name: 'PGID', value: '1000'}, 50 | {name: 'TZ', value: 'America/New_York'} 51 | ], 52 | volumeMounts: [{mountPath: '/config', name: 'raneto'}] 53 | }] 54 | } 55 | } 56 | } 57 | }); 58 | 59 | const ingress = new Ingress(this, 'ingress'); 60 | ingress.addHostDefaultBackend('raneto.lan', IngressBackend.fromService(service)); 61 | } 62 | } 63 | 64 | const app = new App(); 65 | new RanetoChart(app, 'raneto'); 66 | app.synth(); 67 | -------------------------------------------------------------------------------- /cdk8s-examples/stuffinspace.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import * as kplus from 'cdk8s-plus'; 4 | 5 | export class StuffInSpaceChart extends Chart { 6 | 7 | constructor(scope: Construct, name: string) { 8 | super(scope, name); 9 | const ingress = new kplus.Ingress(this, 'ingress'); 10 | ingress.addHostDefaultBackend('stuffinspace.lan', this.getIngressBackend()); 11 | } 12 | 13 | private static getContainer() { 14 | const container = new kplus.Container({ 15 | image: 'joshdavidson/stuffinspace', 16 | port: 80 17 | }); 18 | 19 | container.addEnv('APACHE_SERVER_NAME', kplus.EnvValue.fromValue('stuffinspace.lan')); 20 | container.addEnv('CONTAINER_TIMEZONE', kplus.EnvValue.fromValue('America/New_York')); 21 | 22 | return container; 23 | } 24 | 25 | private getDeployment() { 26 | return new kplus.Deployment(this, 'deployment', { 27 | containers: [StuffInSpaceChart.getContainer()] 28 | }); 29 | } 30 | 31 | private getIngressBackend() { 32 | return kplus.IngressBackend.fromService(this.getDeployment().expose(80)); 33 | } 34 | } 35 | 36 | const app = new App(); 37 | new StuffInSpaceChart(app, 'stuffinspace'); 38 | app.synth(); 39 | -------------------------------------------------------------------------------- /cdk8s-examples/trilium.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class TriliumChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'trilium'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'trilium' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 8080}] 29 | }); 30 | service.addSelector('app', 'trilium'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'trilium', persistentVolumeClaim: {claimName: 'trilium'}}], 42 | containers: [{ 43 | name: 'trilium', 44 | image: 'zadam/trilium', 45 | 46 | ports: [{containerPort: 8080}], 47 | volumeMounts: [ 48 | {mountPath: '/root/trilium-data', name: 'trilium'} 49 | ] 50 | }] 51 | } 52 | } 53 | } 54 | }); 55 | 56 | const ingress = new Ingress(this, 'ingress'); 57 | ingress.addHostDefaultBackend('trilium.lan', IngressBackend.fromService(service)); 58 | } 59 | } 60 | 61 | const app = new App(); 62 | new TriliumChart(app, 'trilium'); 63 | app.synth(); 64 | -------------------------------------------------------------------------------- /cdk8s-examples/wallabag.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment, PersistentVolumeClaim} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class WallabagChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'wallabag'}; 11 | 12 | new PersistentVolumeClaim(this, 'pvc', { 13 | metadata: { 14 | name: 'wallabag' 15 | }, 16 | spec: { 17 | storageClassName: 'default', 18 | accessModes: ['ReadWriteOnce'], 19 | resources: { 20 | requests: { 21 | storage: '250Mi' 22 | } 23 | } 24 | } 25 | }); 26 | 27 | const service = new Service(this, 'service', { 28 | ports: [{port: 80, targetPort: 80}] 29 | }); 30 | service.addSelector('app', 'wallabag'); 31 | 32 | new Deployment(this, 'deployment', { 33 | spec: { 34 | replicas: 1, 35 | selector: { 36 | matchLabels: label 37 | }, 38 | template: { 39 | metadata: {labels: label}, 40 | spec: { 41 | volumes: [{name: 'wallabag', persistentVolumeClaim: {claimName: 'wallabag'}}], 42 | containers: [{ 43 | name: 'wallabag', 44 | image: 'wallabag/wallabag', 45 | 46 | ports: [{containerPort: 80}], 47 | env: [ 48 | {name: 'SYMFONY__ENV__DOMAIN_NAME', value: 'http://wallabag.lan'}, 49 | {name: 'POPULATE_DATABASE', value: 'True'}, 50 | ], 51 | volumeMounts: [{mountPath: '/var/www/wallabag/data', name: 'wallabag'}] 52 | }] 53 | } 54 | } 55 | } 56 | }); 57 | 58 | const ingress = new Ingress(this, 'ingress'); 59 | ingress.addHostDefaultBackend('wallabag.lan', IngressBackend.fromService(service)); 60 | } 61 | } 62 | 63 | const app = new App(); 64 | new WallabagChart(app, 'wallabag'); 65 | app.synth(); 66 | -------------------------------------------------------------------------------- /cdk8s-examples/wekan.ts: -------------------------------------------------------------------------------- 1 | import {Construct} from 'constructs'; 2 | import {App, Chart} from 'cdk8s'; 3 | import {Deployment} from './imports/k8s' 4 | import {Ingress, IngressBackend, Service} from 'cdk8s-plus'; 5 | 6 | export class WekanChart extends Chart { 7 | 8 | constructor(scope: Construct, name: string) { 9 | super(scope, name); 10 | const label = {app: 'wekan'}; 11 | 12 | const service = new Service(this, 'service', { 13 | ports: [{port: 8080, targetPort: 8080}] 14 | }); 15 | service.addSelector('app', 'wekan'); 16 | 17 | new Deployment(this, 'deployment', { 18 | spec: { 19 | replicas: 1, 20 | selector: { 21 | matchLabels: label 22 | }, 23 | template: { 24 | metadata: {labels: label}, 25 | spec: { 26 | containers: [{ 27 | name: 'wekan', 28 | image: 'wekan/wekan', 29 | 30 | ports: [{containerPort: 8080}], 31 | env: [ 32 | {name: 'BIGEVENTS_PATTERN', value: 'NONE'}, 33 | {name: 'BROWSER_POLICY_ENABLED', value: 'true'}, 34 | {name: 'CARD_OPENED_WEBHOOK_ENABLED', value: 'false'}, 35 | {name: 'MAIL_FROM', value: 'Wekan Notifications '}, 36 | { 37 | name: 'MAIL_URL', 38 | value: 'smtp://smtp.sendgrid.net:25/?ignoreTLS=true&tls={rejectUnauthorized:false}' 39 | }, 40 | {name: 'MONGO_URL', value: 'mongodb://mongo:27017/wekan'}, 41 | {name: 'RICHER_CARD_COMMENT_EDITOR', value: 'false'}, 42 | {name: 'ROOT_URL', value: 'http://wekan.lan'}, 43 | {name: 'SCROLLAMOUNT', value: 'auto'}, 44 | {name: 'SCROLLINERTIA', value: '0'}, 45 | {name: 'WITH_API', value: 'true'} 46 | ], 47 | }] 48 | } 49 | } 50 | } 51 | }); 52 | 53 | const ingress = new Ingress(this, 'ingress'); 54 | ingress.addHostDefaultBackend('wekan.lan', IngressBackend.fromService(service)); 55 | } 56 | } 57 | 58 | const app = new App(); 59 | new WekanChart(app, 'wekan'); 60 | app.synth(); 61 | -------------------------------------------------------------------------------- /yaml-examples/bitwarden/bitwarden-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: bitwarden 5 | labels: 6 | app: bitwarden 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: bitwarden 12 | template: 13 | metadata: 14 | labels: 15 | app: bitwarden 16 | spec: 17 | containers: 18 | - name: bitwarden 19 | image: bitwardenrs/server 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | volumeMounts: 24 | - name: data 25 | mountPath: /data 26 | volumes: 27 | - name: data 28 | persistentVolumeClaim: 29 | claimName: bitwarden 30 | -------------------------------------------------------------------------------- /yaml-examples/bitwarden/bitwarden-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: bitwarden 5 | spec: 6 | rules: 7 | - host: bitwarden.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: bitwarden 13 | port: 14 | number: 80 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/bitwarden/bitwarden-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: bitwarden 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/bitwarden/bitwarden-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: bitwarden 5 | namespace: default 6 | spec: 7 | selector: 8 | app: bitwarden 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/bookstack/bookstack-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: bookstack 6 | name: bookstack 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: bookstack 12 | template: 13 | metadata: 14 | labels: 15 | app: bookstack 16 | spec: 17 | containers: 18 | - env: 19 | - name: PUID 20 | value: "1000" 21 | - name: PGID 22 | value: "1000" 23 | - name: DB_HOST 24 | value: "mariadb" 25 | - name: DB_USER 26 | value: "root" 27 | - name: DB_PASS 28 | value: "password" 29 | - name: DB_DATABASE 30 | value: "bookstackapp" 31 | - name: APP_URL 32 | value: "http://bookstack.lan" 33 | image: linuxserver/bookstack:latest 34 | imagePullPolicy: Always 35 | name: bookstack 36 | ports: 37 | - containerPort: 80 38 | volumeMounts: 39 | - mountPath: /config 40 | name: bookstack 41 | restartPolicy: Always 42 | volumes: 43 | - name: bookstack 44 | persistentVolumeClaim: 45 | claimName: bookstack -------------------------------------------------------------------------------- /yaml-examples/bookstack/bookstack-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: bookstack 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: bookstack.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: bookstack 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/bookstack/bookstack-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: bookstack 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/bookstack/bookstack-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: bookstack 6 | name: bookstack 7 | spec: 8 | ports: 9 | - name: "80" 10 | port: 80 11 | targetPort: 80 12 | selector: 13 | app: bookstack -------------------------------------------------------------------------------- /yaml-examples/ciao/ciao-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: ciao 5 | labels: 6 | app: ciao 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: ciao 12 | template: 13 | metadata: 14 | labels: 15 | app: ciao 16 | spec: 17 | containers: 18 | - name: ciao 19 | image: brotandgames/ciao 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 3000 23 | env: 24 | - name: SECRET_KEY_BASE 25 | value: "sensitive_secret_key_base" 26 | - name: SMTP_ADDRESS 27 | value: "smtp.sendgrid.net" 28 | - name: SMTP_EMAIL_FROM 29 | value: "noreply@ciao.lan" 30 | - name: SMTP_EMAIL_TO 31 | value: "yourname@youremail.com" 32 | - name: SMTP_PORT 33 | value: "587" 34 | - name: SMTP_AUTHENTICATION 35 | value: "plain" 36 | - name: SMTP_DOMAIN 37 | value: "smtp.sendgrid.net" 38 | - name: SMTP_ENABLE_STARTTLS_AUTO 39 | value: "true" 40 | - name: SMTP_USERNAME 41 | value: "apikey" 42 | - name: SMTP_PASSWORD 43 | value: "your sendgrid api key" 44 | volumeMounts: 45 | - name: data 46 | mountPath: /app/db/sqlite 47 | volumes: 48 | - name: data 49 | persistentVolumeClaim: 50 | claimName: ciao 51 | -------------------------------------------------------------------------------- /yaml-examples/ciao/ciao-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: ciao 5 | spec: 6 | rules: 7 | - host: ciao.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: ciao 13 | port: 14 | number: 3000 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/ciao/ciao-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: ciao 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/ciao/ciao-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: ciao 5 | namespace: default 6 | spec: 7 | selector: 8 | app: ciao 9 | ports: 10 | - name: web 11 | port: 3000 12 | targetPort: 3000 -------------------------------------------------------------------------------- /yaml-examples/codeserver/codeserver-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: codeserver 5 | labels: 6 | app: codeserver 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: codeserver 12 | template: 13 | metadata: 14 | labels: 15 | app: codeserver 16 | spec: 17 | containers: 18 | - name: codeserver 19 | image: linuxserver/code-server 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 8443 23 | env: 24 | - name: PUID 25 | value: "1000" 26 | - name: PGID 27 | value: "1000" 28 | - name: TZ 29 | value: "America/New_York" 30 | volumeMounts: 31 | - mountPath: /config 32 | name: config 33 | volumes: 34 | - name: config 35 | persistentVolumeClaim: 36 | claimName: codeserver -------------------------------------------------------------------------------- /yaml-examples/codeserver/codeserver-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: codeserver 5 | spec: 6 | rules: 7 | - host: codeserver.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: codeserver 13 | port: 14 | number: 8443 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/codeserver/codeserver-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: codeserver 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/codeserver/codeserver-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: codeserver 5 | namespace: default 6 | spec: 7 | selector: 8 | app: codeserver 9 | ports: 10 | - name: web 11 | port: 8443 12 | targetPort: 8443 13 | -------------------------------------------------------------------------------- /yaml-examples/couchpotato/couchpotato-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: couchpotato 5 | namespace: default 6 | labels: 7 | app: couchpotato 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: couchpotato 13 | template: 14 | metadata: 15 | labels: 16 | app: couchpotato 17 | spec: 18 | 19 | containers: 20 | - name: couchpotato 21 | image: linuxserver/couchpotato 22 | imagePullPolicy: Always 23 | ports: 24 | - containerPort: 5050 25 | env: 26 | - name: PUID 27 | value: "1000" 28 | - name: PGID 29 | value: "1000" 30 | - name: UMASK_SET 31 | value: "000" 32 | - name: TZ 33 | value: "America/New_York" 34 | volumeMounts: 35 | - mountPath: /config 36 | name: config 37 | - mountPath: /downloads 38 | name: downloads 39 | - mountPath: /movies 40 | name: movies 41 | volumes: 42 | - name: config 43 | persistentVolumeClaim: 44 | claimName: couchpotato 45 | - name: downloads 46 | hostPath: 47 | path: /mnt/share/Downloads 48 | - name: movies 49 | hostPath: 50 | path: /mnt/share/Movies -------------------------------------------------------------------------------- /yaml-examples/couchpotato/couchpotato-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: couchpotato 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: couchpotato.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: couchpotato 14 | port: 15 | number: 5050 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/couchpotato/couchpotato-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: couchpotato 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/couchpotato/couchpotato-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: couchpotato 5 | namespace: default 6 | spec: 7 | selector: 8 | app: couchpotato 9 | ports: 10 | - port: 5050 11 | targetPort: 5050 -------------------------------------------------------------------------------- /yaml-examples/cyberchef/cyberchef-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: cyberchef 5 | labels: 6 | app: cyberchef 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: cyberchef 12 | template: 13 | metadata: 14 | labels: 15 | app: cyberchef 16 | spec: 17 | containers: 18 | - name: cyberchef 19 | image: mpepping/cyberchef 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 8000 23 | livenessProbe: 24 | httpGet: 25 | port: 8000 26 | path: / 27 | httpHeaders: 28 | - name: Liveness-Header 29 | value: Cyberchef-Probe 30 | initialDelaySeconds: 30 31 | periodSeconds: 10 32 | timeoutSeconds: 3 -------------------------------------------------------------------------------- /yaml-examples/cyberchef/cyberchef-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: cyberchef 5 | spec: 6 | rules: 7 | - host: cyberchef.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: cyberchef 13 | port: 14 | number: 8000 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/cyberchef/cyberchef-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: cyberchef 5 | namespace: default 6 | spec: 7 | selector: 8 | app: cyberchef 9 | ports: 10 | - name: web 11 | port: 8000 12 | targetPort: 8000 -------------------------------------------------------------------------------- /yaml-examples/deluge/deluge-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: deluge 5 | labels: 6 | app: deluge 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: deluge 12 | template: 13 | metadata: 14 | labels: 15 | app: deluge 16 | spec: 17 | containers: 18 | - name: deluge 19 | image: ghcr.io/linuxserver/deluge 20 | imagePullPolicy: IfNotPresent 21 | ports: 22 | - containerPort: 8112 23 | env: 24 | - name: PUID 25 | value: "1000" 26 | - name: PGID 27 | value: "1000" 28 | - name: TZ 29 | value: "America/New_York" 30 | - name: DELUGE_LOGLEVEL 31 | value: "error" 32 | - name: WEB_PORT 33 | value: "8112" 34 | volumeMounts: 35 | - mountPath: /config 36 | name: config 37 | - mountPath: /downloads 38 | name: downloads 39 | volumes: 40 | - name: config 41 | persistentVolumeClaim: 42 | claimName: deluge 43 | - name: downloads 44 | hostPath: 45 | path: /mnt/share/Downloads -------------------------------------------------------------------------------- /yaml-examples/deluge/deluge-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: deluge 5 | spec: 6 | rules: 7 | - host: deluge.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: deluge 13 | port: 14 | number: 8112 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/deluge/deluge-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: deluge 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/deluge/deluge-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: deluge 5 | namespace: default 6 | spec: 7 | selector: 8 | app: deluge 9 | ports: 10 | - name: "8112" 11 | port: 8112 12 | targetPort: 8112 13 | - name: "58846" 14 | port: 58846 15 | targetPort: 58846 16 | - name: "58946" 17 | port: 58946 18 | targetPort: 58946 -------------------------------------------------------------------------------- /yaml-examples/flexget/flexget-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: flexget 5 | namespace: default 6 | labels: 7 | app: flexget 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: flexget 13 | template: 14 | metadata: 15 | labels: 16 | app: flexget 17 | spec: 18 | containers: 19 | - name: flexget 20 | image: wiserain/flexget 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 5050 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | - name: FG_WEBUI_PASSWD 32 | value: "password" 33 | - name: FG_LOG_LEVEL 34 | value: "info" 35 | volumeMounts: 36 | - mountPath: /config 37 | name: config 38 | - mountPath: /data 39 | name: data 40 | - mountPath: /downloads 41 | name: downloads 42 | - mountPath: /movies 43 | name: movies 44 | - mountPath: /tv 45 | name: tv 46 | volumes: 47 | - name: config 48 | persistentVolumeClaim: 49 | claimName: flexget-config 50 | - name: data 51 | persistentVolumeClaim: 52 | claimName: flexget-data 53 | - name: downloads 54 | hostPath: 55 | path: /mnt/share/Downloads 56 | - name: movies 57 | hostPath: 58 | path: /mnt/share/Movies 59 | - name: tv 60 | hostPath: 61 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/flexget/flexget-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: flexget 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: flexget.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: flexget 14 | port: 15 | number: 5050 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/flexget/flexget-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: flexget-config 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | --- 13 | apiVersion: v1 14 | kind: PersistentVolumeClaim 15 | metadata: 16 | name: flexget-data 17 | spec: 18 | storageClassName: "default" 19 | accessModes: 20 | - ReadWriteOnce 21 | resources: 22 | requests: 23 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/flexget/flexget-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: flexget 5 | namespace: default 6 | spec: 7 | selector: 8 | app: flexget 9 | ports: 10 | - name: default 11 | port: 5050 12 | targetPort: 5050 -------------------------------------------------------------------------------- /yaml-examples/gaps/gaps-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: gaps 5 | namespace: default 6 | labels: 7 | app: gaps 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: gaps 13 | template: 14 | metadata: 15 | labels: 16 | app: gaps 17 | spec: 18 | containers: 19 | - name: gaps 20 | image: housewrecker/gaps 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8484 24 | volumeMounts: 25 | - mountPath: /usr/data 26 | name: gaps 27 | volumes: 28 | - name: gaps 29 | persistentVolumeClaim: 30 | claimName: gaps -------------------------------------------------------------------------------- /yaml-examples/gaps/gaps-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: gaps 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: gaps.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: gaps 14 | port: 15 | number: 8484 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/gaps/gaps-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: gaps 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/gaps/gaps-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: gaps 5 | namespace: default 6 | spec: 7 | selector: 8 | app: gaps 9 | ports: 10 | - port: 8484 11 | targetPort: 8484 -------------------------------------------------------------------------------- /yaml-examples/grafana/grafana-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: grafana 6 | name: grafana 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: grafana 12 | strategy: 13 | type: Recreate 14 | template: 15 | metadata: 16 | labels: 17 | app: grafana 18 | spec: 19 | containers: 20 | - name: grafana 21 | image: grafana/grafana 22 | imagePullPolicy: Always 23 | env: 24 | - name: GF_INSTALL_PLUGINS 25 | value: grafana-piechart-panel,grafana-worldmap-panel 26 | - name: GF_PATHS_DATA 27 | value: /config/data 28 | - name: GF_PATHS_LOGS 29 | value: /config/logs 30 | - name: GF_PATHS_PLUGINS 31 | value: /config/plugins 32 | ports: 33 | - containerPort: 3000 34 | volumeMounts: 35 | - mountPath: /config 36 | name: grafana 37 | volumes: 38 | - name: grafana 39 | persistentVolumeClaim: 40 | claimName: grafana -------------------------------------------------------------------------------- /yaml-examples/grafana/grafana-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: grafana 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: grafana.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: grafana 14 | port: 15 | number: 3000 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/grafana/grafana-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: grafana 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 250Mi 11 | -------------------------------------------------------------------------------- /yaml-examples/grafana/grafana-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: grafana 6 | name: grafana 7 | spec: 8 | ports: 9 | - name: "3000" 10 | port: 3000 11 | targetPort: 3000 12 | selector: 13 | app: grafana 14 | -------------------------------------------------------------------------------- /yaml-examples/grocy/grocy-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: grocy 5 | namespace: default 6 | labels: 7 | app: grocy 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: grocy 13 | template: 14 | metadata: 15 | labels: 16 | app: grocy 17 | spec: 18 | containers: 19 | - name: grocy 20 | image: linuxserver/grocy 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 80 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: grocy -------------------------------------------------------------------------------- /yaml-examples/grocy/grocy-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: grocy 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: grocy.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: grocy 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/grocy/grocy-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: grocy 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/grocy/grocy-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grocy 5 | namespace: default 6 | spec: 7 | selector: 8 | app: grocy 9 | ports: 10 | - port: 80 11 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/handbrake/handbrake-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: handbrake 5 | namespace: default 6 | labels: 7 | app: handbrake 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: handbrake 13 | template: 14 | metadata: 15 | labels: 16 | app: handbrake 17 | spec: 18 | affinity: 19 | nodeAffinity: 20 | requiredDuringSchedulingIgnoredDuringExecution: 21 | nodeSelectorTerms: 22 | - matchExpressions: 23 | - key: kubernetes.io/hostname 24 | operator: In 25 | values: 26 | - macpro01 27 | containers: 28 | - name: handbrake 29 | image: jlesage/handbrake 30 | imagePullPolicy: Always 31 | ports: 32 | - containerPort: 5800 33 | env: 34 | - name: PUID 35 | value: "1000" 36 | - name: PGID 37 | value: "1000" 38 | - name: TZ 39 | value: "America/New_York" 40 | volumeMounts: 41 | - mountPath: /config 42 | name: config 43 | - mountPath: /storage 44 | name: storage 45 | - mountPath: /watch 46 | name: watch 47 | - mountPath: /output 48 | name: output 49 | volumes: 50 | - name: config 51 | hostPath: 52 | path: /data/handbrake/config 53 | - name: output 54 | hostPath: 55 | path: /data/handbrake/output 56 | - name: storage 57 | hostPath: 58 | path: /data/handbrake 59 | - name: watch 60 | hostPath: 61 | path: /data/handbrake/watch 62 | -------------------------------------------------------------------------------- /yaml-examples/handbrake/handbrake-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: handbrake 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: handbrake.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: handbrake 14 | port: 15 | number: 5800 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/handbrake/handbrake-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: handbrake 5 | namespace: default 6 | spec: 7 | selector: 8 | app: handbrake 9 | ports: 10 | - port: 5800 11 | targetPort: 5800 -------------------------------------------------------------------------------- /yaml-examples/healthchecks/healthchecks-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: healthchecks 5 | namespace: default 6 | labels: 7 | app: healthchecks 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: healthchecks 13 | template: 14 | metadata: 15 | labels: 16 | app: healthchecks 17 | spec: 18 | 19 | containers: 20 | - name: healthchecks 21 | image: linuxserver/healthchecks 22 | imagePullPolicy: Always 23 | ports: 24 | - containerPort: 8000 25 | env: 26 | - name: PUID 27 | value: "1000" 28 | - name: PGID 29 | value: "1000" 30 | - name: TZ 31 | value: "America/New_York" 32 | - name: DEFAULT_FROM 33 | value: "noreply@healthchecks.lan" 34 | - name: SITE_ROOT 35 | value: 'http://healthchecks.lan' 36 | - name: EMAIL_HOST 37 | value: "smtp.sendgrid.net" 38 | - name: EMAIL_PORT 39 | value: "587" 40 | - name: EMAIL_HOST_USER 41 | value: "apikey" 42 | - name: EMAIL_HOST_PASSWORD 43 | value: "" 44 | - name: EMAIL_USE_TLS 45 | value: "True" 46 | - name: ALLOWED_HOST 47 | value: "*" 48 | - name: SUPERUSER_EMAIL 49 | value: "" 50 | - name: SUPERUSER_PASSWORD 51 | value: "" 52 | volumeMounts: 53 | - mountPath: /config 54 | name: config 55 | volumes: 56 | - name: config 57 | persistentVolumeClaim: 58 | claimName: healthchecks -------------------------------------------------------------------------------- /yaml-examples/healthchecks/healthchecks-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: healthchecks 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: healthchecks.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: healthchecks 14 | port: 15 | number: 8000 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/healthchecks/healthchecks-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: healthchecks 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/healthchecks/healthchecks-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: healthchecks 5 | namespace: default 6 | spec: 7 | selector: 8 | app: healthchecks 9 | ports: 10 | - port: 8000 11 | targetPort: 8000 -------------------------------------------------------------------------------- /yaml-examples/heimdall/heimdall-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: heimdall 5 | namespace: default 6 | labels: 7 | app: heimdall 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: heimdall 13 | template: 14 | metadata: 15 | labels: 16 | app: heimdall 17 | spec: 18 | containers: 19 | - name: heimdall 20 | image: linuxserver/heimdall 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 80 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: heimdall -------------------------------------------------------------------------------- /yaml-examples/heimdall/heimdall-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: heimdall 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: heimdall.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: heimdall 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/heimdall/heimdall-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: heimdall 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/heimdall/heimdall-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: heimdall 5 | namespace: default 6 | spec: 7 | selector: 8 | app: heimdall 9 | ports: 10 | - port: 80 11 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/homeassistant/homeassistant-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: homeassistant 5 | namespace: default 6 | labels: 7 | app: homeassistant 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: homeassistant 13 | template: 14 | metadata: 15 | labels: 16 | app: homeassistant 17 | spec: 18 | containers: 19 | - name: homeassistant 20 | image: homeassistant/home-assistant:beta 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8123 24 | env: 25 | - name: TZ 26 | value: "America/New_York" 27 | volumeMounts: 28 | - mountPath: /config 29 | name: config 30 | volumes: 31 | - name: config 32 | persistentVolumeClaim: 33 | claimName: homeassistant -------------------------------------------------------------------------------- /yaml-examples/homeassistant/homeassistant-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: homeassistant 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: homeassistant.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: homeassistant 14 | port: 15 | number: 8123 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/homeassistant/homeassistant-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: homeassistant 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250m -------------------------------------------------------------------------------- /yaml-examples/homeassistant/homeassistant-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: homeassistant 5 | namespace: default 6 | spec: 7 | selector: 8 | app: homeassistant 9 | ports: 10 | - port: 8123 11 | targetPort: 8123 -------------------------------------------------------------------------------- /yaml-examples/homer/homer-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: homer 5 | namespace: default 6 | labels: 7 | app: homer 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: homer 13 | template: 14 | metadata: 15 | labels: 16 | app: homer 17 | spec: 18 | containers: 19 | - name: homer 20 | image: b4bz/homer 21 | imagePullPolicy: Always 22 | env: 23 | - name: UID 24 | value: "1000" 25 | - name: GID 26 | value: "1000" 27 | ports: 28 | - containerPort: 8080 29 | volumeMounts: 30 | - mountPath: /www/assets 31 | name: assets 32 | volumes: 33 | - name: assets 34 | persistentVolumeClaim: 35 | claimName: homer -------------------------------------------------------------------------------- /yaml-examples/homer/homer-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: homer 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: homer.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: homer 14 | port: 15 | number: 8080 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/homer/homer-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: homer 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/homer/homer-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: homer 5 | namespace: default 6 | spec: 7 | ports: 8 | - name: default 9 | port: 8080 10 | protocol: TCP 11 | targetPort: 8080 12 | selector: 13 | app: homer -------------------------------------------------------------------------------- /yaml-examples/hrconvert2/hrconvert2-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: hrconvert2 5 | labels: 6 | app: hrconvert2 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: hrconvert2 12 | template: 13 | metadata: 14 | labels: 15 | app: hrconvert2 16 | spec: 17 | containers: 18 | - name: hrconvert2 19 | image: dwaaan/hrconvert2-docker 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | livenessProbe: 24 | httpGet: 25 | port: 80 26 | path: / 27 | httpHeaders: 28 | - name: Liveness-Header 29 | value: HRConvert2-Probe 30 | initialDelaySeconds: 30 31 | periodSeconds: 10 32 | timeoutSeconds: 3 -------------------------------------------------------------------------------- /yaml-examples/hrconvert2/hrconvert2-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: hrconvert2 5 | spec: 6 | rules: 7 | - host: hrconvert2.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: hrconvert2 13 | port: 14 | number: 80 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/hrconvert2/hrconvert2-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: hrconvert2 5 | namespace: default 6 | spec: 7 | selector: 8 | app: hrconvert2 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/huggin/huginn-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: huginn 5 | labels: 6 | app: huginn 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: huginn 12 | template: 13 | metadata: 14 | labels: 15 | app: huginn 16 | spec: 17 | containers: 18 | - name: huginn 19 | image: huginn/huginn 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 3000 23 | volumeMounts: 24 | - name: data 25 | mountPath: /var/lib/mysql 26 | volumes: 27 | - name: data 28 | persistentVolumeClaim: 29 | claimName: huginn -------------------------------------------------------------------------------- /yaml-examples/huggin/huginn-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: huginn 5 | spec: 6 | rules: 7 | - host: huginn.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: huginn 13 | port: 14 | number: 3000 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/huggin/huginn-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: huginn 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/huggin/huginn-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: huginn 5 | namespace: default 6 | spec: 7 | selector: 8 | app: huginn 9 | ports: 10 | - name: web 11 | port: 3000 12 | targetPort: 3000 -------------------------------------------------------------------------------- /yaml-examples/influxdb/influxdb-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: influxdb 6 | name: influxdb 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: influxdb 12 | strategy: 13 | type: Recreate 14 | template: 15 | metadata: 16 | labels: 17 | app: influxdb 18 | spec: 19 | containers: 20 | - name: influxdb 21 | image: influxdb 22 | imagePullPolicy: Always 23 | ports: 24 | - containerPort: 8086 25 | volumeMounts: 26 | - mountPath: /var/lib/influxdb 27 | name: influxdb 28 | volumes: 29 | - name: influxdb 30 | persistentVolumeClaim: 31 | claimName: influxdb -------------------------------------------------------------------------------- /yaml-examples/influxdb/influxdb-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: influxdb 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/influxdb/influxdb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: influxdb 6 | name: influxdb 7 | spec: 8 | ports: 9 | - name: "8086" 10 | port: 8086 11 | targetPort: 8086 12 | selector: 13 | app: influxdb -------------------------------------------------------------------------------- /yaml-examples/jackett/jackett-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: jackett 5 | namespace: default 6 | labels: 7 | app: jackett 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: jackett 13 | template: 14 | metadata: 15 | labels: 16 | app: jackett 17 | spec: 18 | containers: 19 | - name: jackett 20 | image: linuxserver/jackett 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 9117 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | - name: AUTO_UPDATE 32 | value: "true" 33 | volumeMounts: 34 | - mountPath: /config 35 | name: config 36 | volumes: 37 | - name: config 38 | persistentVolumeClaim: 39 | claimName: jackett -------------------------------------------------------------------------------- /yaml-examples/jackett/jackett-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: jackett 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: jackett.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: jackett 14 | port: 15 | number: 9117 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/jackett/jackett-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: jackett 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/jackett/jackett-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: jackett 5 | namespace: default 6 | spec: 7 | selector: 8 | app: jackett 9 | ports: 10 | - name: default 11 | port: 9117 12 | targetPort: 9117 -------------------------------------------------------------------------------- /yaml-examples/jellyfin/jellyfin-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: jellyfin 5 | namespace: default 6 | labels: 7 | app: jellyfin 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: jellyfin 13 | template: 14 | metadata: 15 | labels: 16 | app: jellyfin 17 | spec: 18 | containers: 19 | - name: jellyfin 20 | image: linuxserver/jellyfin 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8096 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /cache 33 | name: cache 34 | - mountPath: /config 35 | name: config 36 | - mountPath: /movies 37 | name: moves 38 | - mountPath: /tv 39 | name: tv 40 | volumes: 41 | - name: config 42 | persistentVolumeClaim: 43 | claimName: config 44 | - name: cache 45 | persistentVolumeClaim: 46 | claimName: cache 47 | - name: movies 48 | hostPath: 49 | path: /mnt/share/Movies 50 | - name: tv 51 | hostPath: 52 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/jellyfin/jellyfin-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: jellyfin 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: jellyfin.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: jellyfin 14 | port: 15 | number: 8096 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/jellyfin/jellyfin-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: jellyfin 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/jellyfin/jellyfin-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: jellyfin 5 | namespace: default 6 | spec: 7 | selector: 8 | app: jellyfin 9 | ports: 10 | - port: 8096 11 | targetPort: 8096 -------------------------------------------------------------------------------- /yaml-examples/jupyter/jupyter-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: jupyter 5 | namespace: default 6 | labels: 7 | app: jupyter 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: jupyter 13 | template: 14 | metadata: 15 | labels: 16 | app: jupyter 17 | spec: 18 | 19 | containers: 20 | - name: jupyter 21 | image: jupyter/scipy-notebook 22 | imagePullPolicy: Always 23 | ports: 24 | - containerPort: 8888 25 | env: 26 | - name: NB_USER 27 | value: "jupyter" 28 | - name: NB_UID 29 | value: "1000" 30 | - name: NB_GID 31 | value: "1000" 32 | - name: CHOWN_HOME 33 | value: "yes" 34 | - name: RESTARTABLE 35 | value: "yes" 36 | - name: GRANT_SUDO 37 | value: "yes" 38 | - name: JUPYTER_ENABLE_LAB 39 | value: "yes" 40 | volumeMounts: 41 | - mountPath: /datasets 42 | name: datasets 43 | volumes: 44 | - name: datasets 45 | hostPath: 46 | path: /mnt/share/Datasets -------------------------------------------------------------------------------- /yaml-examples/jupyter/jupyter-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: jupyter 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: jupyter.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: jupyter 14 | port: 15 | number: 8888 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/jupyter/jupyter-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: jupyter 5 | namespace: default 6 | spec: 7 | selector: 8 | app: jupyter 9 | ports: 10 | - port: 8888 11 | targetPort: 8888 -------------------------------------------------------------------------------- /yaml-examples/komga/komga-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: komga 5 | namespace: default 6 | labels: 7 | app: komga 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: komga 13 | template: 14 | metadata: 15 | labels: 16 | app: komga 17 | spec: 18 | containers: 19 | - name: komga 20 | image: gotson/komga 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8080 24 | env: 25 | - name: TZ 26 | value: "America/New_York" 27 | - name: PUID 28 | value: "1000" 29 | - name: PGID 30 | value: "1000" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | - mountPath: /comics 35 | name: comics 36 | volumes: 37 | - name: config 38 | persistentVolumeClaim: 39 | claimName: komga 40 | - name: comics 41 | hostPath: 42 | path: /mnt/share/Comics 43 | -------------------------------------------------------------------------------- /yaml-examples/komga/komga-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: komga 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: komga.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: komga 14 | port: 15 | number: 8080 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/komga/komga-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: komga 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/komga/komga-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: komga 5 | namespace: default 6 | spec: 7 | selector: 8 | app: komga 9 | ports: 10 | - name: default 11 | port: 8080 12 | targetPort: 8080 -------------------------------------------------------------------------------- /yaml-examples/lazylibrarian/lazylibrarian-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: lazylibrarian 5 | namespace: default 6 | labels: 7 | app: lazylibrarian 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: lazylibrarian 13 | template: 14 | metadata: 15 | labels: 16 | app: lazylibrarian 17 | spec: 18 | containers: 19 | - name: lazylibrarian 20 | image: linuxserver/lazylibrarian 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 5299 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | - name: DOCKER_MODS 32 | value: "linuxserver/calibre-web:calibre|linuxserver/mods:lazylibrarian-ffmpeg" 33 | volumeMounts: 34 | - mountPath: /config 35 | name: config 36 | - mountPath: /books 37 | name: books 38 | - mountPath: /comics 39 | name: comics 40 | - mountPath: /downloads 41 | name: downloads 42 | volumes: 43 | - name: config 44 | persistentVolumeClaim: 45 | claimName: lazylibrarian 46 | - name: books 47 | hostPath: 48 | path: /mnt/share/eBooks 49 | - name: comics 50 | hostPath: 51 | path: /mnt/share/Comics 52 | - name: downloads 53 | hostPath: 54 | path: /mnt/share/Downloads 55 | -------------------------------------------------------------------------------- /yaml-examples/lazylibrarian/lazylibrarian-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: lazylibrarian 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: lazylibrarian.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: lazylibrarian 14 | port: 15 | number: 5299 16 | path: / 17 | pathType: ImplementationSpecific 18 | -------------------------------------------------------------------------------- /yaml-examples/lazylibrarian/lazylibrarian-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: lazylibrarian 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/lazylibrarian/lazylibrarian-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: lazylibrarian 5 | namespace: default 6 | spec: 7 | selector: 8 | app: lazylibrarian 9 | ports: 10 | - name: default 11 | port: 5299 12 | targetPort: 5299 -------------------------------------------------------------------------------- /yaml-examples/lidarr/lidarr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: lidarr 5 | namespace: default 6 | labels: 7 | app: lidarr 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: lidarr 13 | template: 14 | metadata: 15 | labels: 16 | app: lidarr 17 | spec: 18 | affinity: 19 | nodeAffinity: 20 | requiredDuringSchedulingIgnoredDuringExecution: 21 | nodeSelectorTerms: 22 | - matchExpressions: 23 | - key: kubernetes.io/hostname 24 | operator: In 25 | values: 26 | - macpro01 27 | containers: 28 | - name: lidarr 29 | image: linuxserver/lidarr:nightly 30 | imagePullPolicy: Always 31 | ports: 32 | - containerPort: 8686 33 | env: 34 | - name: PUID 35 | value: "1000" 36 | - name: PGID 37 | value: "1000" 38 | - name: TZ 39 | value: "America/New_York" 40 | volumeMounts: 41 | - mountPath: /config 42 | name: config 43 | - mountPath: /downloads 44 | name: downloads 45 | - mountPath: /music 46 | name: music 47 | livenessProbe: 48 | httpGet: 49 | port: 8686 50 | path: / 51 | httpHeaders: 52 | - name: Liveness-Header 53 | value: Readarr-Probe 54 | initialDelaySeconds: 30 55 | periodSeconds: 10 56 | timeoutSeconds: 3 57 | volumes: 58 | - name: config 59 | hostPath: 60 | path: /data/lidarr 61 | - name: downloads 62 | hostPath: 63 | path: /mnt/share/Downloads 64 | - name: music 65 | hostPath: 66 | path: /mnt/share/Music -------------------------------------------------------------------------------- /yaml-examples/lidarr/lidarr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: lidarr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: lidarr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: lidarr 14 | port: 15 | number: 8686 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/lidarr/lidarr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: lidarr 5 | namespace: default 6 | spec: 7 | selector: 8 | app: lidarr 9 | ports: 10 | - port: 8686 11 | targetPort: 8686 -------------------------------------------------------------------------------- /yaml-examples/mariadb/mariadb-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: mariadb 5 | namespace: default 6 | labels: 7 | app: mariadb 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: mariadb 13 | template: 14 | metadata: 15 | labels: 16 | app: mariadb 17 | spec: 18 | containers: 19 | - name: mariadb 20 | image: mariadb 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 3306 24 | env: 25 | - name: MYSQL_DATABASE 26 | value: "mariadb" 27 | - name: MYSQL_ROOT_PASSWORD 28 | value: "password" 29 | - name: MYSQL_USER 30 | value: "mariadb" 31 | - name: MYSQL_PASSWORD 32 | value: "mariadb" 33 | volumeMounts: 34 | - mountPath: /var/lib/mysql 35 | name: mariadb 36 | restartPolicy: Always 37 | volumes: 38 | - name: mariadb 39 | persistentVolumeClaim: 40 | claimName: mariadb -------------------------------------------------------------------------------- /yaml-examples/mariadb/mariadb-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mariadb 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 5Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/mariadb/mariadb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: mariadb 6 | name: mariadb 7 | spec: 8 | ports: 9 | - name: "3306" 10 | port: 3306 11 | nodePort: 32306 12 | targetPort: 3306 13 | selector: 14 | app: mariadb 15 | type: NodePort -------------------------------------------------------------------------------- /yaml-examples/medusa/medusa-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: medusa 5 | namespace: default 6 | labels: 7 | app: medusa 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: medusa 13 | template: 14 | metadata: 15 | labels: 16 | app: medusa 17 | spec: 18 | containers: 19 | - name: medusa 20 | image: linuxserver/medusa 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8081 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | - mountPath: /downloads 35 | name: downloads 36 | - mountPath: /tv 37 | name: tv 38 | volumes: 39 | - name: config 40 | persistentVolumeClaim: 41 | claimName: medusa 42 | - name: downloads 43 | hostPath: 44 | path: /mnt/share/Downloads 45 | - name: tv 46 | hostPath: 47 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/medusa/medusa-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: medusa 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: medusa.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: medusa 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/medusa/medusa-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: medusa 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/medusa/medusa-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: medusa 5 | namespace: default 6 | spec: 7 | selector: 8 | app: medusa 9 | ports: 10 | - port: 8081 11 | targetPort: 8081 -------------------------------------------------------------------------------- /yaml-examples/metube/metube-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: metube 5 | namespace: default 6 | labels: 7 | app: metube 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: metube 13 | template: 14 | metadata: 15 | labels: 16 | app: metube 17 | spec: 18 | containers: 19 | - name: metube 20 | image: alexta69/metube 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8081 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | - name: UMASK 32 | value: "002" 33 | - name: DEBUG 34 | value: "no" 35 | volumeMounts: 36 | - mountPath: /downloads 37 | name: downloads 38 | volumes: 39 | - name: downloads 40 | hostPath: 41 | path: /mnt/share/Downloads -------------------------------------------------------------------------------- /yaml-examples/metube/metube-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: metube 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: metube.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: metube 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/metube/metube-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: metube 5 | namespace: default 6 | spec: 7 | selector: 8 | app: metube 9 | ports: 10 | - port: 8081 11 | targetPort: 8081 -------------------------------------------------------------------------------- /yaml-examples/minecraft-bedrock/minecraft-bedrock-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: minecraft-bedrock 5 | namespace: default 6 | labels: 7 | app: minecraft-bedrock 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: minecraft-bedrock 13 | template: 14 | metadata: 15 | labels: 16 | app: minecraft-bedrock 17 | spec: 18 | containers: 19 | - name: minecraft-bedrock 20 | image: itzg/minecraft-bedrock-server 21 | imagePullPolicy: Always 22 | env: 23 | - name: EULA 24 | value: "true" 25 | - name: GAMEMODE 26 | value: creative 27 | - name: DIFFICULTY 28 | value: easy 29 | ports: 30 | - containerPort: 19132 31 | hostPort: 19132 32 | protocol: UDP 33 | readinessProbe: 34 | exec: 35 | command: 36 | - mc-monitor 37 | - status-bedrock 38 | - --host 39 | - 127.0.0.1 40 | initialDelaySeconds: 30 41 | resources: 42 | requests: 43 | cpu: 50m 44 | memory: 100Mi 45 | limits: 46 | cpu: "1" 47 | memory: 2Gi 48 | volumeMounts: 49 | - mountPath: /data 50 | name: data 51 | volumes: 52 | - name: data 53 | persistentVolumeClaim: 54 | claimName: minecraft-bedrock -------------------------------------------------------------------------------- /yaml-examples/minecraft-bedrock/minecraft-bedrock-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: minecraft-bedrock 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/minecraft-bedrock/minecraft-bedrock-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: minecraft-bedrock 5 | namespace: default 6 | spec: 7 | selector: 8 | app: minecraft-bedrock 9 | ports: 10 | - port: 19132 11 | nodePort: 19132 12 | protocol: UDP 13 | ipFamilies: 14 | - IPv4 15 | type: NodePort -------------------------------------------------------------------------------- /yaml-examples/minecraft/README.md: -------------------------------------------------------------------------------- 1 | If you need port 25565 for this deployment, you can run the following command on each node that has a pod: 2 | ```shell script 3 | kubectl port-forward --address 0.0.0.0 service/minecraft 25565 4 | ``` -------------------------------------------------------------------------------- /yaml-examples/minecraft/minecraft-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: minecraft 5 | namespace: default 6 | labels: 7 | app: minecraft 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: minecraft 13 | template: 14 | metadata: 15 | labels: 16 | app: minecraft 17 | spec: 18 | containers: 19 | - name: minecraft 20 | image: itzg/minecraft-server 21 | imagePullPolicy: Always 22 | env: 23 | - name: EULA 24 | value: "true" 25 | ports: 26 | - containerPort: 25565 27 | hostPort: 25565 28 | readinessProbe: 29 | exec: 30 | command: 31 | - mc-monitor 32 | - status 33 | - -- host 34 | - 127.0.0.1 35 | initialDelaySeconds: 5 36 | periodSeconds: 5 37 | resources: 38 | requests: 39 | cpu: 50m 40 | memory: 100Mi 41 | limits: 42 | cpu: "1" 43 | memory: 2Gi 44 | volumeMounts: 45 | - mountPath: /data 46 | name: data 47 | volumes: 48 | - name: data 49 | persistentVolumeClaim: 50 | claimName: minecraft -------------------------------------------------------------------------------- /yaml-examples/minecraft/minecraft-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: minecraft 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/minecraft/minecraft-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: minecraft 5 | namespace: default 6 | spec: 7 | selector: 8 | app: minecraft 9 | ports: 10 | - port: 25565 11 | nodePort: 25565 12 | targetPort: 25565 13 | type: NodePort -------------------------------------------------------------------------------- /yaml-examples/mongo-express/mongo-express-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: mongo-express 5 | namespace: default 6 | data: 7 | ME_CONFIG_BASICAUTH_USERNAME: 'admin' 8 | ME_CONFIG_BASICAUTH_PASSWORD: 'password' 9 | ME_CONFIG_MONGODB_ENABLE_ADMIN: 'true' 10 | ME_CONFIG_MONGODB_PORT: '27017' 11 | ME_CONFIG_MONGODB_SERVER: 'mongo' 12 | ME_CONFIG_OPTIONS_EDITORTHEME: 'darcula' 13 | -------------------------------------------------------------------------------- /yaml-examples/mongo-express/mongo-express-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: mongo-express 6 | name: mongo-express 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: mongo-express 12 | strategy: 13 | type: Recreate 14 | template: 15 | metadata: 16 | labels: 17 | app: mongo-express 18 | spec: 19 | containers: 20 | - envFrom: 21 | - configMapRef: 22 | name: mongo-express 23 | image: mongo-express:latest 24 | imagePullPolicy: Always 25 | name: mongo-express 26 | ports: 27 | - containerPort: 8081 -------------------------------------------------------------------------------- /yaml-examples/mongo-express/mongo-express-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: mongo-express 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: mongo-express.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: mongo-express 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/mongo-express/mongo-express-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: mongo-express 6 | name: mongo-express 7 | spec: 8 | ports: 9 | - name: "8081" 10 | port: 8081 11 | targetPort: 8081 12 | selector: 13 | app: mongo-express -------------------------------------------------------------------------------- /yaml-examples/mongo/mongo-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: mongo 6 | name: mongo 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: mongo 12 | strategy: 13 | type: Recreate 14 | template: 15 | metadata: 16 | labels: 17 | app: mongo 18 | spec: 19 | containers: 20 | - args: 21 | - mongod 22 | image: mongo:latest 23 | imagePullPolicy: Always 24 | name: mongo 25 | ports: 26 | - containerPort: 27017 27 | volumeMounts: 28 | - mountPath: /data/db 29 | name: mongo 30 | - mountPath: /dump 31 | name: mongo-dump 32 | volumes: 33 | - name: mongo 34 | persistentVolumeClaim: 35 | claimName: mongo 36 | - name: mongo-dump 37 | persistentVolumeClaim: 38 | claimName: mongo-dump -------------------------------------------------------------------------------- /yaml-examples/mongo/mongo-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mongo 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | --- 13 | apiVersion: v1 14 | kind: PersistentVolumeClaim 15 | metadata: 16 | name: mongo-dump 17 | spec: 18 | storageClassName: "default" 19 | accessModes: 20 | - ReadWriteOnce 21 | resources: 22 | requests: 23 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/mongo/mongo-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: mongo 6 | name: mongo 7 | spec: 8 | ports: 9 | - name: "27017" 10 | port: 27017 11 | targetPort: 27017 12 | selector: 13 | app: mongo -------------------------------------------------------------------------------- /yaml-examples/monica/monica-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: monica 5 | namespace: default 6 | data: 7 | APP_ENV: "local" 8 | APP_DEBUG: "true" 9 | APP_KEY: "ChangeMeBy32KeyLengthOrGenerated" 10 | HASH_SALT: "ChangeMeBy20+KeyLength" 11 | HASH_LENGTH: "18" 12 | APP_URL: "http://monica.lan" 13 | 14 | DB_CONNECTION: "mysql" 15 | DB_HOST: "mariadb" 16 | DB_PORT: "3306" 17 | DB_DATABASE: "monica" 18 | DB_USERNAME: "mariadb" 19 | DB_PASSWORD: "mariadb" 20 | DB_PREFIX: "" 21 | 22 | # Mail credentials used to send emails from the application. 23 | MAIL_MAILER: "smtp" 24 | MAIL_HOST: "smtp.sendgrid.net" 25 | MAIL_PORT: "587" 26 | MAIL_USERNAME: "apikey" 27 | MAIL_PASSWORD: "insert your password here..." 28 | MAIL_ENCRYPTION: "tls" 29 | MAIL_FROM_ADDRESS: "noreply@monica.lan" 30 | MAIL_FROM_NAME: "Monica" 31 | APP_EMAIL_NEW_USERS_NOTIFICATION: "" 32 | 33 | # Default locale used in the application. 34 | APP_DEFAULT_LOCALE: "en" 35 | 36 | # Ability to disable signups on your instance. 37 | # Can be true or false. Default to false. 38 | APP_DISABLE_SIGNUP: "true" 39 | # Enable user email verification. 40 | APP_SIGNUP_DOUBLE_OPTIN: "false" 41 | 42 | # Set trusted proxy IP addresses. Useful for ssl terminating loadbalancers. 43 | # To trust all proxies that connect directly to your server, use a "*". 44 | # To trust one or more specific proxies that connect directly to your server, use a comma separated list of IP addresses. 45 | APP_TRUSTED_PROXIES: "" 46 | 47 | # Frequency of creation of new log files. Logs are written when an error occurs. 48 | # Refer to config/logging.php for the possible values. 49 | LOG_CHANNEL: "single" 50 | 51 | SENTRY_SUPPORT: "false" 52 | SENTRY_LARAVEL_DSN: "" 53 | 54 | CHECK_VERSION: "false" 55 | 56 | REQUIRES_SUBSCRIPTION: "false" 57 | 58 | # Change this only if you know what you are doing 59 | CACHE_DRIVER: "file" 60 | SESSION_DRIVER: "file" 61 | SESSION_LIFETIME: "120" 62 | QUEUE_CONNECTION: "sync" 63 | BROADCAST_DRIVER: "log" 64 | 65 | # Default filesystem to store uploaded files. 66 | # Possible values: public|s3 67 | DEFAULT_FILESYSTEM: "public" 68 | 69 | # AWS keys for S3 when using this storage method 70 | AWS_KEY: "" 71 | AWS_SECRET: "" 72 | AWS_REGION: "us-east-1" 73 | AWS_BUCKET: "" 74 | AWS_SERVER: "" 75 | 76 | # Allow Two Factor Authentication feature on your instance 77 | MFA_ENABLED: "true" 78 | 79 | # Enable DAV support (beta feature) 80 | DAV_ENABLED: "true" -------------------------------------------------------------------------------- /yaml-examples/monica/monica-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: monica 6 | name: monica 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: monica 12 | template: 13 | metadata: 14 | labels: 15 | app: monica 16 | spec: 17 | containers: 18 | - name: monica 19 | envFrom: 20 | - configMapRef: 21 | name: monica 22 | image: monica 23 | imagePullPolicy: Always 24 | ports: 25 | - containerPort: 80 26 | volumeMounts: 27 | - mountPath: /var/www/html/storage 28 | name: data 29 | restartPolicy: Always 30 | volumes: 31 | - name: data 32 | persistentVolumeClaim: 33 | claimName: monica -------------------------------------------------------------------------------- /yaml-examples/monica/monica-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: monica 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: monica.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: monica 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/monica/monica-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: monica 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/monica/monica-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: monica 6 | name: monica 7 | spec: 8 | ports: 9 | - name: "80" 10 | port: 80 11 | targetPort: 80 12 | selector: 13 | app: monica -------------------------------------------------------------------------------- /yaml-examples/monitorr/monitorr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: monitorr 5 | labels: 6 | app: monitorr 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: monitorr 12 | template: 13 | metadata: 14 | labels: 15 | app: monitorr 16 | spec: 17 | containers: 18 | - name: monitorr 19 | image: monitorr/monitorr 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | env: 24 | - name: TZ 25 | value: "America/New_York" 26 | - name: PUID 27 | value: "1000" 28 | - name: PGID 29 | value: "1000" 30 | volumeMounts: 31 | - name: data 32 | mountPath: /app 33 | volumes: 34 | - name: data 35 | persistentVolumeClaim: 36 | claimName: monitorr -------------------------------------------------------------------------------- /yaml-examples/monitorr/monitorr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: monitorr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: monitorr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: monitorr 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/monitorr/monitorr-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: monitorr 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/monitorr/monitorr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: monitorr 5 | namespace: default 6 | spec: 7 | selector: 8 | app: monitorr 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/mylar/mylar-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: mylar 5 | namespace: default 6 | labels: 7 | app: mylar 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: mylar 13 | template: 14 | metadata: 15 | labels: 16 | app: mylar 17 | spec: 18 | containers: 19 | - name: mylar 20 | image: hotio/mylar3:nightly 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8090 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | - name: UMASK 32 | value: "000" 33 | - name: DEBUG 34 | value: "no" 35 | volumeMounts: 36 | - mountPath: /config 37 | name: config 38 | - mountPath: /downloads 39 | name: downloads 40 | - mountPath: /comics 41 | name: comics 42 | volumes: 43 | - name: config 44 | persistentVolumeClaim: 45 | claimName: mylar 46 | - name: downloads 47 | hostPath: 48 | path: /mnt/share/Downloads 49 | - name: comics 50 | hostPath: 51 | path: /mnt/share/Comics -------------------------------------------------------------------------------- /yaml-examples/mylar/mylar-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: mylar 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: mylar.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: mylar 14 | port: 15 | number: 8090 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/mylar/mylar-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mylar 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/mylar/mylar-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mylar 5 | namespace: default 6 | spec: 7 | selector: 8 | app: mylar 9 | ports: 10 | - port: 8090 11 | targetPort: 8090 -------------------------------------------------------------------------------- /yaml-examples/mysql/mysql-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: mysql 5 | namespace: default 6 | labels: 7 | app: mysql 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: mysql 13 | template: 14 | metadata: 15 | labels: 16 | app: mysql 17 | spec: 18 | containers: 19 | - name: mysql 20 | image: mysql 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 3306 24 | env: 25 | - name: MYSQL_ROOT_PASSWORD 26 | value: "password" 27 | volumeMounts: 28 | - mountPath: /var/lib/mysql 29 | name: mysql 30 | restartPolicy: Always 31 | volumes: 32 | - name: mysql 33 | persistentVolumeClaim: 34 | claimName: mysql -------------------------------------------------------------------------------- /yaml-examples/mysql/mysql-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mysql 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/mysql/mysql-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: mysql 6 | name: mysql 7 | spec: 8 | ports: 9 | - name: "3306" 10 | port: 3306 11 | targetPort: 3306 12 | selector: 13 | app: mysql -------------------------------------------------------------------------------- /yaml-examples/nefarious/nefarious-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: nefarious 5 | namespace: default 6 | labels: 7 | app: nefarious 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: nefarious 13 | template: 14 | metadata: 15 | labels: 16 | app: nefarious 17 | spec: 18 | containers: 19 | - name: nefarious 20 | image: lardbit/nefarious 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 80 24 | env: 25 | - name: HOST_DOWNLOAD_UID 26 | value: "1000" 27 | - name: HOST_DOWNLOAD_GID 28 | value: "1000" 29 | - name: LOCAL_NETWORK 30 | value: "" 31 | - name: HOST_DOWNLOAD_PATH 32 | value: /downloads 33 | volumeMounts: 34 | - mountPath: /downloads 35 | name: downloads 36 | - mountPath: /movies 37 | name: movies 38 | - mountPath: /tv 39 | name: tv 40 | volumes: 41 | - name: downloads 42 | hostPath: 43 | path: /mnt/share/Downloads 44 | - name: movies 45 | hostPath: 46 | path: /mnt/share/Movies 47 | - name: tv 48 | hostPath: 49 | path: /mnt/share/Television 50 | -------------------------------------------------------------------------------- /yaml-examples/nefarious/nefarious-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: nefarious 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: nefarious.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: nefarious 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/nefarious/nefarious-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nefarious 5 | namespace: default 6 | spec: 7 | selector: 8 | app: nefarious 9 | ports: 10 | - port: 80 11 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/nexus3/nexus3-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: nexus 5 | namespace: default 6 | labels: 7 | app: nexus 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: nexus 13 | template: 14 | metadata: 15 | labels: 16 | app: nexus 17 | spec: 18 | containers: 19 | - name: nexus 20 | image: sonatype/nexus3 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8081 24 | - containerPort: 5000 25 | hostPort: 5000 26 | volumeMounts: 27 | - mountPath: /nexus-data 28 | name: nexus-data 29 | volumes: 30 | - name: nexus-data 31 | hostPath: 32 | path: /mnt/share/nexus-data 33 | 34 | -------------------------------------------------------------------------------- /yaml-examples/nexus3/nexus3-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: nexus 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: nexus.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: nexus 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific 18 | -------------------------------------------------------------------------------- /yaml-examples/nexus3/nexus3-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nexus 5 | namespace: default 6 | spec: 7 | selector: 8 | app: nexus 9 | ports: 10 | - name: "8081" 11 | port: 8081 12 | targetPort: 8081 13 | - name: "5000" 14 | port: 5000 15 | targetPort: 5000 16 | -------------------------------------------------------------------------------- /yaml-examples/nfs-provisioner/nfs-provisioner-answers.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | defaultImage: true 3 | image: 4 | repository: "ranchercharts/kubernetes_incubator-nfs-provisioner" 5 | tag: "v2.2.1-k8s1.12" 6 | storageClass: 7 | create: true 8 | name: "default" 9 | defaultClass: true 10 | reclaimPolicy: "Delete" 11 | allowVolumeExpansion: true 12 | persistence: 13 | enabled: false 14 | size: "20Gi" 15 | storageClass: "" 16 | hostPath: "/srv/volumes" 17 | service: 18 | type: "ClusterIP" 19 | nfsNodePort: "" 20 | mountdNodePort: "" 21 | rpcbindNodePort: "" 22 | nodeSelector: 23 | kubernetes.io/hostname: docker03 -------------------------------------------------------------------------------- /yaml-examples/observium/observium-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: observium 5 | namespace: default 6 | labels: 7 | app: observium 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: observium 13 | template: 14 | metadata: 15 | labels: 16 | app: observium 17 | spec: 18 | containers: 19 | - name: observium 20 | image: uberchuckie/observium 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8668 24 | env: 25 | - name: TZ 26 | value: "America/New_York" 27 | volumeMounts: 28 | - mountPath: /config 29 | name: config 30 | - mountPath: /opt/observium/logs 31 | name: logs 32 | - mountPath: /opt/observium/rrd 33 | name: rrd 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: observium-config 38 | - name: logs 39 | persistentVolumeClaim: 40 | claimName: observium-logs 41 | - name: rrd 42 | persistentVolumeClaim: 43 | claimName: observium-rrd -------------------------------------------------------------------------------- /yaml-examples/observium/observium-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: observium 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: observium.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: observium 14 | port: 15 | number: 8668 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/observium/observium-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: observium-config 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | --- 13 | apiVersion: v1 14 | kind: PersistentVolumeClaim 15 | metadata: 16 | name: observium-logs 17 | spec: 18 | storageClassName: "default" 19 | accessModes: 20 | - ReadWriteOnce 21 | resources: 22 | requests: 23 | storage: 250Mi 24 | --- 25 | apiVersion: v1 26 | kind: PersistentVolumeClaim 27 | metadata: 28 | name: observium-rrd 29 | spec: 30 | storageClassName: "default" 31 | accessModes: 32 | - ReadWriteOnce 33 | resources: 34 | requests: 35 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/observium/observium-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: observium 5 | namespace: default 6 | spec: 7 | selector: 8 | app: observium 9 | ports: 10 | - name: default 11 | port: 8668 12 | targetPort: 8668 -------------------------------------------------------------------------------- /yaml-examples/ombi/ombi-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: ombi 5 | namespace: default 6 | labels: 7 | app: ombi 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: ombi 13 | template: 14 | metadata: 15 | labels: 16 | app: ombi 17 | spec: 18 | containers: 19 | - name: ombi 20 | image: linuxserver/ombi 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 3579 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: ombi -------------------------------------------------------------------------------- /yaml-examples/ombi/ombi-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: ombi 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: ombi.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: ombi 14 | port: 15 | number: 3579 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/ombi/ombi-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: ombi 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/ombi/ombi-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: ombi 5 | namespace: default 6 | spec: 7 | selector: 8 | app: ombi 9 | ports: 10 | - port: 3579 11 | targetPort: 3579 -------------------------------------------------------------------------------- /yaml-examples/organizr/organizr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: organizr 5 | labels: 6 | app: organizr 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: organizr 12 | template: 13 | metadata: 14 | labels: 15 | app: organizr 16 | spec: 17 | containers: 18 | - name: organizr 19 | image: organizr/organizr 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | env: 24 | - name: PUID 25 | value: "1000" 26 | - name: PGID 27 | value: "1000" 28 | - name: TZ 29 | value: "America/New_York" 30 | - name: fpm 31 | value: "false" 32 | volumeMounts: 33 | - mountPath: /config 34 | name: config 35 | volumes: 36 | - name: config 37 | persistentVolumeClaim: 38 | claimName: organizr -------------------------------------------------------------------------------- /yaml-examples/organizr/organizr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: organizr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: organizr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: organizr 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/organizr/organizr-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: organizr 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/organizr/organizr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: organizr 5 | spec: 6 | selector: 7 | app: organizr 8 | ports: 9 | - port: 80 10 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/perkeep/perkeep-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: perkeep 5 | namespace: default 6 | labels: 7 | app: perkeep 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: perkeep 13 | template: 14 | metadata: 15 | labels: 16 | app: perkeep 17 | spec: 18 | containers: 19 | - name: perkeep 20 | image: jhillyerd/perkeep 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 3179 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | volumeMounts: 30 | - mountPath: /config 31 | name: config 32 | - mountPath: /storage 33 | name: data 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: perkeep-conf 38 | - name: data 39 | persistentVolumeClaim: 40 | claimName: perkeep-data 41 | -------------------------------------------------------------------------------- /yaml-examples/perkeep/perkeep-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: perkeep 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: perkeep.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: perkeep 14 | port: 15 | number: 3179 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/perkeep/perkeep-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: perkeep-conf 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | --- 13 | apiVersion: v1 14 | kind: PersistentVolumeClaim 15 | metadata: 16 | name: perkeep-data 17 | spec: 18 | storageClassName: "default" 19 | accessModes: 20 | - ReadWriteOnce 21 | resources: 22 | requests: 23 | storage: 10Gi -------------------------------------------------------------------------------- /yaml-examples/perkeep/perkeep-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: perkeep 5 | namespace: default 6 | spec: 7 | selector: 8 | app: perkeep 9 | ports: 10 | - name: default 11 | port: 3179 12 | targetPort: 3179 -------------------------------------------------------------------------------- /yaml-examples/pgadmin4/pgadmin4-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: pgadmin4 5 | labels: 6 | app: pgadmin4 7 | namespace: postgres 8 | data: 9 | PGADMIN_DEFAULT_EMAIL: admin@pgadmin4.lan 10 | PGADMIN_DEFAULT_PASSWORD: postgres -------------------------------------------------------------------------------- /yaml-examples/pgadmin4/pgadmin4-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: pgadmin4 5 | namespace: postgres 6 | labels: 7 | app: pgadmin4 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: pgadmin4 13 | template: 14 | metadata: 15 | labels: 16 | app: pgadmin4 17 | spec: 18 | containers: 19 | - name: pgadmin4 20 | image: dpage/pgadmin4:6 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 80 24 | volumeMounts: 25 | - mountPath: /var/lib/pgadmin 26 | name: data 27 | - mountPath: /pgadmin4/servers.json 28 | name: config 29 | envFrom: 30 | - configMapRef: 31 | name: pgadmin4 32 | volumes: 33 | - name: config 34 | emptyDir: { } 35 | - name: data 36 | emptyDir: { } 37 | -------------------------------------------------------------------------------- /yaml-examples/pgadmin4/pgadmin4-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: pgadmin4 5 | namespace: postgres 6 | spec: 7 | rules: 8 | - host: pgadmin4.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: pgadmin4 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/pgadmin4/pgadmin4-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: pgadmin4 5 | namespace: default 6 | spec: 7 | selector: 8 | app: pgadmin4 9 | ports: 10 | - port: 80 11 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/phpservermon/psm-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: phpservermon 6 | name: phpservermon 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: phpservermon 12 | template: 13 | metadata: 14 | labels: 15 | app: phpservermon 16 | spec: 17 | containers: 18 | - env: 19 | - name: PSM_BASE_URL 20 | value: http://phpservermon.lan/ 21 | - name: PSM_DB_HOST 22 | value: mariadb 23 | - name: PSM_DB_NAME 24 | value: phpservermon 25 | - name: PSM_DB_USER 26 | value: root 27 | - name: PSM_DB_PASS 28 | value: password 29 | - name: PSM_DB_PREFIX 30 | value: psm_ 31 | - name: PHP_TIMEZONE 32 | value: America/New_York 33 | image: benoitpodwinski/phpservermon:latest 34 | imagePullPolicy: Always 35 | name: phpservermon-app 36 | ports: 37 | - containerPort: 80 38 | restartPolicy: Always -------------------------------------------------------------------------------- /yaml-examples/phpservermon/psm-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: phpservermon 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: phpservermon.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: phpservermon 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/phpservermon/psm-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: phpservermon 6 | name: phpservermon 7 | spec: 8 | ports: 9 | - name: "80" 10 | port: 80 11 | targetPort: 80 12 | selector: 13 | app: phpservermon -------------------------------------------------------------------------------- /yaml-examples/postgres/postgres-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: postgres 5 | namespace: default 6 | labels: 7 | app: postgres 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: postgres 13 | template: 14 | metadata: 15 | labels: 16 | app: postgres 17 | spec: 18 | containers: 19 | - name: postgres 20 | image: postgres 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 5432 24 | env: 25 | - name: POSTGRES_PASSWORD 26 | value: "postgres" 27 | volumeMounts: 28 | - mountPath: /var/lib/postgres/data 29 | name: postgres 30 | restartPolicy: Always 31 | volumes: 32 | - name: postgres 33 | persistentVolumeClaim: 34 | claimName: postgres -------------------------------------------------------------------------------- /yaml-examples/postgres/postgres-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: postgres 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/postgres/postgres-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: postgres 6 | name: postgres 7 | spec: 8 | ports: 9 | - name: "5432" 10 | port: 5432 11 | targetPort: 5432 12 | selector: 13 | app: postgres -------------------------------------------------------------------------------- /yaml-examples/qbittorrent/qbittorrent-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: qbittorrent 5 | labels: 6 | app: qbittorrent 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: qbittorrent 12 | template: 13 | metadata: 14 | labels: 15 | app: qbittorrent 16 | spec: 17 | containers: 18 | - name: qbittorrent 19 | image: ghcr.io/linuxserver/qbittorrent 20 | imagePullPolicy: IfNotPresent 21 | ports: 22 | - containerPort: 8080 23 | - containerPort: 6881 24 | protocol: TCP 25 | - containerPort: 6881 26 | protocol: UDP 27 | env: 28 | - name: PUID 29 | value: "1000" 30 | - name: PGID 31 | value: "1000" 32 | - name: TZ 33 | value: "America/New_York" 34 | - name: WEBUI_PORT 35 | value: "8080" 36 | - name: UMASK 37 | value: "000" 38 | volumeMounts: 39 | - mountPath: /config 40 | name: config 41 | - mountPath: /downloads 42 | name: downloads 43 | volumes: 44 | - name: config 45 | persistentVolumeClaim: 46 | claimName: qbittorrent 47 | - name: downloads 48 | hostPath: 49 | path: /mnt/share/Downloads -------------------------------------------------------------------------------- /yaml-examples/qbittorrent/qbittorrent-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: qbittorrent 5 | spec: 6 | rules: 7 | - host: qbittorrent.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: qbittorrent 13 | port: 14 | number: 8080 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/qbittorrent/qbittorrent-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: qbittorrent 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/qbittorrent/qbittorrent-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: qbittorrent 5 | namespace: default 6 | spec: 7 | selector: 8 | app: qbittorrent 9 | ports: 10 | - name: "8080" 11 | port: 8080 12 | targetPort: 8080 13 | - name: "6881" 14 | port: 6881 15 | targetPort: 6881 16 | protocol: TCP 17 | - name: "6881-udp" 18 | port: 6881 19 | targetPort: 6881 20 | protocol: UDP -------------------------------------------------------------------------------- /yaml-examples/radarr/radarr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: radarr 5 | namespace: default 6 | labels: 7 | app: radarr 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: radarr 13 | template: 14 | metadata: 15 | labels: 16 | app: radarr 17 | spec: 18 | affinity: 19 | nodeAffinity: 20 | requiredDuringSchedulingIgnoredDuringExecution: 21 | nodeSelectorTerms: 22 | - matchExpressions: 23 | - key: kubernetes.io/hostname 24 | operator: In 25 | values: 26 | - macpro01 27 | containers: 28 | - name: radarr 29 | image: linuxserver/radarr:nightly 30 | imagePullPolicy: Always 31 | ports: 32 | - containerPort: 7878 33 | env: 34 | - name: PUID 35 | value: "1000" 36 | - name: PGID 37 | value: "1000" 38 | - name: TZ 39 | value: "America/New_York" 40 | volumeMounts: 41 | - mountPath: /config 42 | name: config 43 | - mountPath: /downloads 44 | name: downloads 45 | - mountPath: /movies 46 | name: movies 47 | volumes: 48 | - name: config 49 | hostPath: 50 | path: /data/radarr 51 | - name: downloads 52 | hostPath: 53 | path: /mnt/share/Downloads 54 | - name: movies 55 | hostPath: 56 | path: /mnt/share/Movies -------------------------------------------------------------------------------- /yaml-examples/radarr/radarr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: radarr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: radarr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: radarr 14 | port: 15 | number: 7878 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/radarr/radarr-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: radarr 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/radarr/radarr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: radarr 5 | namespace: default 6 | spec: 7 | selector: 8 | app: radarr 9 | ports: 10 | - port: 7878 11 | targetPort: 7878 -------------------------------------------------------------------------------- /yaml-examples/raneto/raneto-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: raneto 5 | namespace: default 6 | labels: 7 | app: raneto 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: raneto 13 | template: 14 | metadata: 15 | labels: 16 | app: raneto 17 | spec: 18 | containers: 19 | - name: raneto 20 | image: linuxserver/raneto 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 3000 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | volumes: 35 | - name: config 36 | persistentVolumeClaim: 37 | claimName: raneto -------------------------------------------------------------------------------- /yaml-examples/raneto/raneto-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: raneto 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: raneto.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: raneto 14 | port: 15 | number: 3000 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/raneto/raneto-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: raneto 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/raneto/raneto-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: raneto 5 | namespace: default 6 | spec: 7 | selector: 8 | app: raneto 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /yaml-examples/reactive-resume/reactive-resume-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: reactive-resume 5 | labels: 6 | app: reactive-resume 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: reactive-resume 12 | template: 13 | metadata: 14 | labels: 15 | app: reactive-resume 16 | spec: 17 | containers: 18 | - name: reactive-resume 19 | image: amruthpillai/reactive-resume:v1 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 80 23 | livenessProbe: 24 | httpGet: 25 | port: 80 26 | path: / 27 | httpHeaders: 28 | - name: Liveness-Header 29 | value: RxResume-Probe 30 | initialDelaySeconds: 30 31 | periodSeconds: 10 32 | timeoutSeconds: 3 -------------------------------------------------------------------------------- /yaml-examples/reactive-resume/reactive-resume-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: reactive-resume 5 | spec: 6 | rules: 7 | - host: reactive-resume.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: reactive-resume 13 | port: 14 | number: 80 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/reactive-resume/reactive-resume-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: reactive-resume 5 | namespace: default 6 | spec: 7 | selector: 8 | app: reactive-resume 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/readarr/readarr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: readarr 5 | labels: 6 | app: readarr 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: readarr 12 | template: 13 | metadata: 14 | labels: 15 | app: readarr 16 | spec: 17 | affinity: 18 | nodeAffinity: 19 | requiredDuringSchedulingIgnoredDuringExecution: 20 | nodeSelectorTerms: 21 | - matchExpressions: 22 | - key: kubernetes.io/hostname 23 | operator: In 24 | values: 25 | - macpro01 26 | containers: 27 | - name: readarr 28 | image: hotio/readarr:nightly 29 | imagePullPolicy: Always 30 | ports: 31 | - containerPort: 8787 32 | env: 33 | - name: PUID 34 | value: "1000" 35 | - name: PGID 36 | value: "1000" 37 | - name: TZ 38 | value: "America/New_York" 39 | - name: UMASK 40 | value: "000" 41 | - name: DEBUG 42 | value: "no" 43 | volumeMounts: 44 | - mountPath: /config 45 | name: config 46 | - mountPath: /books 47 | name: books 48 | - mountPath: /downloads 49 | name: downloads 50 | livenessProbe: 51 | httpGet: 52 | port: 8787 53 | path: / 54 | httpHeaders: 55 | - name: Liveness-Header 56 | value: Readarr-Probe 57 | initialDelaySeconds: 30 58 | periodSeconds: 10 59 | timeoutSeconds: 3 60 | volumes: 61 | - name: config 62 | hostPath: 63 | path: /data/readarr 64 | - name: books 65 | hostPath: 66 | path: /mnt/share/eBooks 67 | - name: downloads 68 | hostPath: 69 | path: /mnt/share/Downloads -------------------------------------------------------------------------------- /yaml-examples/readarr/readarr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: readarr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: readarr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: readarr 14 | port: 15 | number: 8787 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/readarr/readarr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: readarr 5 | spec: 6 | selector: 7 | app: readarr 8 | ports: 9 | - port: 8787 10 | targetPort: 8787 -------------------------------------------------------------------------------- /yaml-examples/searx/searx-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: searx 5 | namespace: default 6 | labels: 7 | app: searx 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: searx 13 | template: 14 | metadata: 15 | labels: 16 | app: searx 17 | spec: 18 | 19 | containers: 20 | - name: searx 21 | image: searx/searx 22 | imagePullPolicy: Always 23 | ports: 24 | - containerPort: 8080 25 | env: 26 | - name: BASE_URL 27 | value: "http://searx.lan/" 28 | volumeMounts: 29 | - mountPath: /etc/searx 30 | name: config 31 | volumes: 32 | - name: config 33 | persistentVolumeClaim: 34 | claimName: searx -------------------------------------------------------------------------------- /yaml-examples/searx/searx-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: searx 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: searx.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: searx 14 | port: 15 | number: 8080 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/searx/searx-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: searx 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 2Gi -------------------------------------------------------------------------------- /yaml-examples/searx/searx-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: searx 5 | namespace: default 6 | spec: 7 | selector: 8 | app: searx 9 | ports: 10 | - port: 8080 11 | targetPort: 8080 -------------------------------------------------------------------------------- /yaml-examples/sickchill/sickchill-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: sickchill 5 | namespace: default 6 | labels: 7 | app: sickchill 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: sickchill 13 | template: 14 | metadata: 15 | labels: 16 | app: sickchill 17 | spec: 18 | containers: 19 | - name: sickchill 20 | image: linuxserver/sickchill 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8081 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | - mountPath: /downloads 35 | name: downloads 36 | - mountPath: /tv 37 | name: tv 38 | volumes: 39 | - name: config 40 | persistentVolumeClaim: 41 | claimName: sickchill 42 | - name: downloads 43 | hostPath: 44 | path: /mnt/share/Downloads 45 | - name: tv 46 | hostPath: 47 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/sickchill/sickchill-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: sickchill 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: sickchill.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: sickchill 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/sickchill/sickchill-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: sickchill 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/sickchill/sickchill-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: sickchill 5 | namespace: default 6 | spec: 7 | selector: 8 | app: sickchill 9 | ports: 10 | - port: 8081 11 | targetPort: 8081 -------------------------------------------------------------------------------- /yaml-examples/sickgear/sickgear-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: sickgear 5 | namespace: default 6 | labels: 7 | app: sickgear 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: sickgear 13 | template: 14 | metadata: 15 | labels: 16 | app: sickgear 17 | spec: 18 | containers: 19 | - name: sickgear 20 | image: linuxserver/sickgear 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8081 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | - mountPath: /downloads 35 | name: downloads 36 | - mountPath: /tv 37 | name: tv 38 | volumes: 39 | - name: config 40 | persistentVolumeClaim: 41 | claimName: sickgear 42 | - name: downloads 43 | hostPath: 44 | path: /mnt/share/Downloads 45 | - name: tv 46 | hostPath: 47 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/sickgear/sickgear-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: sickgear 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: sickgear.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: sickgear 14 | port: 15 | number: 8081 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/sickgear/sickgear-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: sickgear 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/sickgear/sickgear-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: sickgear 5 | namespace: default 6 | spec: 7 | selector: 8 | app: sickgear 9 | ports: 10 | - port: 8081 11 | targetPort: 8081 -------------------------------------------------------------------------------- /yaml-examples/smokeping/smokeping-deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: smokeping 6 | labels: 7 | app: smokeping 8 | spec: 9 | strategy: 10 | type: Recreate 11 | replicas: 1 12 | selector: 13 | matchLabels: 14 | app: smokeping 15 | template: 16 | metadata: 17 | labels: 18 | app: smokeping 19 | spec: 20 | containers: 21 | - name: smokeping 22 | image: linuxserver/smokeping 23 | imagePullPolicy: Always 24 | ports: 25 | - containerPort: 80 26 | volumeMounts: 27 | - mountPath: "/config" 28 | name: config 29 | - mountPath: "/data" 30 | name: data 31 | env: 32 | - name: PUID 33 | value: "1000" 34 | - name: PGID 35 | value: "1000" 36 | - name: TZ 37 | value: "America/New_York" 38 | volumes: 39 | - name: config 40 | persistentVolumeClaim: 41 | claimName: smokeping-config 42 | - name: data 43 | persistentVolumeClaim: 44 | claimName: smokeping-data 45 | -------------------------------------------------------------------------------- /yaml-examples/smokeping/smokeping-ingress.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: networking.k8s.io/v1 3 | kind: Ingress 4 | metadata: 5 | name: smokeping 6 | labels: 7 | app: smokeping 8 | annotations: 9 | kubernetes.io/ingress.class: "nginx" 10 | cert-manager.io/cluster-issuer: "letsencrypt" 11 | spec: 12 | tls: 13 | - hosts: 14 | - "smokeping.darkness.network" 15 | secretName: "smokeping-tls" 16 | rules: 17 | - host: "smokeping.lan" 18 | http: 19 | paths: 20 | - path: / 21 | backend: 22 | service: 23 | name: smokeping 24 | port: 25 | number: 80 26 | -------------------------------------------------------------------------------- /yaml-examples/smokeping/smokeping-pvc.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: smokeping-config 6 | labels: 7 | app: smokeping 8 | spec: 9 | accessModes: 10 | - ReadWriteOnce 11 | resources: 12 | requests: 13 | storage: 250Mi 14 | --- 15 | kind: PersistentVolumeClaim 16 | apiVersion: v1 17 | metadata: 18 | name: smokeping-data 19 | labels: 20 | app: smokeping 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 250Mi 27 | 28 | 29 | -------------------------------------------------------------------------------- /yaml-examples/smokeping/smokeping-service.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: smokeping 6 | labels: 7 | app: smokeping 8 | spec: 9 | ports: 10 | - port: 80 11 | targetPort: 80 12 | protocol: TCP 13 | name: http 14 | selector: 15 | app: smokeping 16 | -------------------------------------------------------------------------------- /yaml-examples/snipeit/snipeit-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: snipeit-config 5 | namespace: default 6 | data: 7 | MYSQL_PORT_3306_TCP_ADDR: "mariadb" 8 | MYSQL_PORT_3306_TCP_PORT: "3306" 9 | MYSQL_ROOT_PASSWORD: "password" 10 | MYSQL_DATABASE: "snipeit" 11 | MYSQL_USER: "root" 12 | MYSQL_PASSWORD: "password" 13 | MAIL_PORT_587_TCP_ADDR: "smtp.sendgrid.net" 14 | MAIL_PORT_587_TCP_PORT: "587" 15 | MAIL_ENV_FROM_ADDR: "noreply@snipeit.lan" 16 | MAIL_ENV_FROM_NAME: "Snip-IT System E-mail" 17 | MAIL_ENV_ENCRYPTION: "tls" 18 | MAIL_ENV_USERNAME: "apikey" 19 | MAIL_ENV_PASSWORD: "YOUR_SENDGRID_KEY" 20 | APP_ENV: "production" 21 | APP_DEBUG: "false" 22 | APP_KEY: "base64:D5oGA+zhFSVA3VwuoZoQ21RAcwBtJv/RGiqOcZ7BUvI=" 23 | APP_URL: "http://snipeit.lan" 24 | APP_TIMEZONE: "US/New_York" 25 | APP_LOCALE: "en" -------------------------------------------------------------------------------- /yaml-examples/snipeit/snipeit-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: snipeit 6 | name: snipeit 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: snipeit 12 | strategy: 13 | type: Recreate 14 | template: 15 | metadata: 16 | labels: 17 | app: snipeit 18 | spec: 19 | containers: 20 | - name: snipeit 21 | envFrom: 22 | - configMapRef: 23 | name: snipeit-config 24 | image: snipe/snipe-it 25 | imagePullPolicy: Always 26 | ports: 27 | - containerPort: 80 28 | resources: { } 29 | volumeMounts: 30 | - mountPath: /var/lib/snipeit 31 | name: data 32 | restartPolicy: Always 33 | serviceAccountName: "" 34 | volumes: 35 | - name: data 36 | persistentVolumeClaim: 37 | claimName: snipeit -------------------------------------------------------------------------------- /yaml-examples/snipeit/snipeit-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: snipeit 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: snipeit.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: snipeit 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/snipeit/snipeit-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: snipeit 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/snipeit/snipeit-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: snipeit 6 | name: snipeit 7 | spec: 8 | ports: 9 | - name: "80" 10 | port: 80 11 | targetPort: 80 12 | selector: 13 | app: snipeit -------------------------------------------------------------------------------- /yaml-examples/sonarr/sonarr-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: sonarr 5 | namespace: default 6 | labels: 7 | app: sonarr 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: sonarr 13 | template: 14 | metadata: 15 | labels: 16 | app: sonarr 17 | spec: 18 | affinity: 19 | nodeAffinity: 20 | requiredDuringSchedulingIgnoredDuringExecution: 21 | nodeSelectorTerms: 22 | - matchExpressions: 23 | - key: kubernetes.io/hostname 24 | operator: In 25 | values: 26 | - macpro01 27 | containers: 28 | - name: sonarr 29 | image: hotio/sonarr:nightly 30 | imagePullPolicy: Always 31 | ports: 32 | - containerPort: 8989 33 | env: 34 | - name: PUID 35 | value: "1000" 36 | - name: PGID 37 | value: "1000" 38 | - name: TZ 39 | value: "America/New_York" 40 | volumeMounts: 41 | - mountPath: /config 42 | name: config 43 | - mountPath: /downloads 44 | name: downloads 45 | - mountPath: /tv 46 | name: tv 47 | volumes: 48 | - name: config 49 | hostPath: 50 | path: /data/sonarr 51 | - name: downloads 52 | hostPath: 53 | path: /mnt/share/Downloads 54 | - name: tv 55 | hostPath: 56 | path: /mnt/share/Television -------------------------------------------------------------------------------- /yaml-examples/sonarr/sonarr-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: sonarr 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: sonarr.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: sonarr 14 | port: 15 | number: 8989 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/sonarr/sonarr-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: sonarr 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/sonarr/sonarr-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: sonarr 5 | namespace: default 6 | spec: 7 | selector: 8 | app: sonarr 9 | ports: 10 | - port: 8989 11 | targetPort: 8989 -------------------------------------------------------------------------------- /yaml-examples/stuffinspace/stuffinspace-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: stuffinspace 5 | labels: 6 | app: stuffinspace 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: stuffinspace 12 | template: 13 | metadata: 14 | labels: 15 | app: stuffinspace 16 | spec: 17 | volumes: 18 | - name: web-root 19 | persistentVolumeClaim: 20 | claimName: stuffinspace 21 | containers: 22 | - name: stuffinspace 23 | image: joshdavidson/stuffinspace 24 | imagePullPolicy: Always 25 | env: 26 | - name: APACHE_SERVER_NAME 27 | value: "stuffinspace.lan" 28 | - name: CONTAINER_TIMEZONE 29 | value: "America/New_York" 30 | ports: 31 | - containerPort: 80 32 | volumeMounts: 33 | - mountPath: /var/www/localhost/htdocs 34 | name: web-root -------------------------------------------------------------------------------- /yaml-examples/stuffinspace/stuffinspace-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: stuffinspace 5 | spec: 6 | rules: 7 | - host: stuffinspace.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: stuffinspace 13 | port: 14 | number: 80 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/stuffinspace/stuffinspace-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: stuffinspace 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 400Mi 12 | -------------------------------------------------------------------------------- /yaml-examples/stuffinspace/stuffinspace-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: stuffinspace 5 | namespace: default 6 | spec: 7 | selector: 8 | app: stuffinspace 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/tautulli/tautulli-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: tautulli 5 | namespace: default 6 | labels: 7 | app: tautulli 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: tautulli 13 | template: 14 | metadata: 15 | labels: 16 | app: tautulli 17 | spec: 18 | containers: 19 | - name: tautulli 20 | image: linuxserver/tautulli 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 8181 24 | env: 25 | - name: PUID 26 | value: "1000" 27 | - name: PGID 28 | value: "1000" 29 | - name: TZ 30 | value: "America/New_York" 31 | volumeMounts: 32 | - mountPath: /config 33 | name: config 34 | - mountPath: /logs 35 | name: logs 36 | volumes: 37 | - name: config 38 | persistentVolumeClaim: 39 | claimName: tautulli-conf 40 | - name: logs 41 | persistentVolumeClaim: 42 | claimName: tautulli-logs -------------------------------------------------------------------------------- /yaml-examples/tautulli/tautulli-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: tautulli 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: tautulli.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: tautulli 14 | port: 15 | number: 8181 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/tautulli/tautulli-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: tautulli-conf 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteMany 9 | resources: 10 | requests: 11 | storage: 250Mi 12 | --- 13 | apiVersion: v1 14 | kind: PersistentVolumeClaim 15 | metadata: 16 | name: tautulli-logs 17 | spec: 18 | storageClassName: "default" 19 | accessModes: 20 | - ReadWriteMany 21 | resources: 22 | requests: 23 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/tautulli/tautulli-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: tautulli 5 | namespace: default 6 | spec: 7 | selector: 8 | app: tautulli 9 | ports: 10 | - port: 8181 11 | targetPort: 8181 -------------------------------------------------------------------------------- /yaml-examples/transmission/transmission-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: transmission 5 | labels: 6 | app: transmission 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: transmission 12 | template: 13 | metadata: 14 | labels: 15 | app: transmission 16 | spec: 17 | containers: 18 | - name: transmission 19 | image: ghcr.io/linuxserver/transmission 20 | imagePullPolicy: IfNotPresent 21 | ports: 22 | - containerPort: 9091 23 | - containerPort: 51413 24 | protocol: TCP 25 | - containerPort: 51413 26 | protocol: UDP 27 | 28 | env: 29 | - name: PUID 30 | value: "1000" 31 | - name: PGID 32 | value: "1000" 33 | - name: TZ 34 | value: "America/New_York" 35 | - name: USER 36 | value: "transmission" 37 | - name: PASS 38 | value: "transmission" 39 | - name: UMASK 40 | value: "000" 41 | volumeMounts: 42 | - mountPath: /config 43 | name: config 44 | - mountPath: /downloads 45 | name: downloads 46 | volumes: 47 | - name: config 48 | persistentVolumeClaim: 49 | claimName: transmission 50 | - name: downloads 51 | hostPath: 52 | path: /mnt/share/Downloads -------------------------------------------------------------------------------- /yaml-examples/transmission/transmission-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: transmission 5 | spec: 6 | rules: 7 | - host: transmission.lan 8 | http: 9 | paths: 10 | - backend: 11 | service: 12 | name: transmission 13 | port: 14 | number: 9091 15 | path: / 16 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/transmission/transmission-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: transmission 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/transmission/transmission-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: transmission 5 | namespace: default 6 | spec: 7 | selector: 8 | app: transmission 9 | ports: 10 | - name: "9091" 11 | port: 9091 12 | targetPort: 9091 13 | - name: "51413" 14 | port: 51413 15 | targetPort: 51413 16 | protocol: TCP 17 | - name: "51413-udp" 18 | port: 51413 19 | targetPort: 51413 20 | protocol: UDP -------------------------------------------------------------------------------- /yaml-examples/trilium/trilium-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: trilium 5 | labels: 6 | app: trilium 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: trilium 12 | template: 13 | metadata: 14 | labels: 15 | app: trilium 16 | spec: 17 | containers: 18 | - name: trilium 19 | image: zadam/trilium 20 | imagePullPolicy: Always 21 | ports: 22 | - containerPort: 8080 23 | volumeMounts: 24 | - mountPath: /root/trilium-data 25 | name: data 26 | volumes: 27 | - name: data 28 | persistentVolumeClaim: 29 | claimName: trilium -------------------------------------------------------------------------------- /yaml-examples/trilium/trilium-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: trilium 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: trilium.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: trilium 14 | port: 15 | number: 8080 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/trilium/trilium-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: trilium 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/trilium/trilium-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: trilium 5 | spec: 6 | selector: 7 | app: trilium 8 | ports: 9 | - port: 8080 10 | targetPort: 8080 -------------------------------------------------------------------------------- /yaml-examples/ubooquity/ubooquity-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: ubooquity 5 | namespace: default 6 | labels: 7 | app: ubooquity 8 | spec: 9 | replicas: 1 10 | selector: 11 | matchLabels: 12 | app: ubooquity 13 | template: 14 | metadata: 15 | labels: 16 | app: ubooquity 17 | spec: 18 | containers: 19 | - name: ubooquity 20 | image: linuxserver/ubooquity 21 | imagePullPolicy: Always 22 | ports: 23 | - containerPort: 2202 24 | - containerPort: 2203 25 | env: 26 | - name: PUID 27 | value: "1000" 28 | - name: PGID 29 | value: "1000" 30 | - name: TZ 31 | value: "America/New_York" 32 | - name: MAXMEM 33 | value: "1024" 34 | volumeMounts: 35 | - mountPath: /config 36 | name: config 37 | - mountPath: /books 38 | name: books 39 | - mountPath: /comics 40 | name: comics 41 | volumes: 42 | - name: config 43 | persistentVolumeClaim: 44 | claimName: ubooquity 45 | - name: books 46 | hostPath: 47 | path: /mnt/share/eBooks 48 | - name: comics 49 | hostPath: 50 | path: /mnt/share/Comics -------------------------------------------------------------------------------- /yaml-examples/ubooquity/ubooquity-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: ubooquity 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: ubooquity.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: ubooquity 14 | port: 15 | number: 2202 16 | path: /ubooquity 17 | pathType: ImplementationSpecific 18 | - backend: 19 | service: 20 | name: ubooquity 21 | port: 22 | number: 2203 23 | path: /ubooquity/admin 24 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/ubooquity/ubooquity-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: ubooquity 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 1Gi 12 | -------------------------------------------------------------------------------- /yaml-examples/ubooquity/ubooquity-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: ubooquity 5 | namespace: default 6 | spec: 7 | selector: 8 | app: ubooquity 9 | ports: 10 | - name: default 11 | port: 2202 12 | targetPort: 2202 13 | - name: admin 14 | port: 2203 15 | targetPort: 2203 -------------------------------------------------------------------------------- /yaml-examples/varken/varken-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: varken 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 250Mi 11 | -------------------------------------------------------------------------------- /yaml-examples/wallabag/wallabag-deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: apps/v1 3 | metadata: 4 | name: wallabag 5 | labels: 6 | app: wallabag 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: wallabag 12 | template: 13 | metadata: 14 | labels: 15 | app: wallabag 16 | spec: 17 | containers: 18 | - name: wallabag 19 | image: wallabag/wallabag 20 | ports: 21 | - containerPort: 80 22 | env: 23 | - name: SYMFONY__ENV__DOMAIN_NAME 24 | value: "http://wallabag.lan" 25 | - name: POPULATE_DATABASE 26 | value: "True" 27 | volumeMounts: 28 | - name: data 29 | mountPath: /var/www/wallabag/data 30 | livenessProbe: 31 | httpGet: 32 | port: 80 33 | path: / 34 | initialDelaySeconds: 30 35 | periodSeconds: 10 36 | timeoutSeconds: 3 37 | volumes: 38 | - name: data 39 | persistentVolumeClaim: 40 | claimName: wallabag -------------------------------------------------------------------------------- /yaml-examples/wallabag/wallabag-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: wallabag 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: wallabag.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: wallabag 14 | port: 15 | number: 80 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/wallabag/wallabag-pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: wallabag 5 | spec: 6 | storageClassName: "default" 7 | accessModes: 8 | - ReadWriteOnce 9 | resources: 10 | requests: 11 | storage: 250Mi -------------------------------------------------------------------------------- /yaml-examples/wallabag/wallabag-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wallabag 5 | namespace: default 6 | spec: 7 | selector: 8 | app: wallabag 9 | ports: 10 | - name: web 11 | port: 80 12 | targetPort: 80 -------------------------------------------------------------------------------- /yaml-examples/wekan/wekan-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: wekan 6 | name: wekan 7 | spec: 8 | replicas: 1 9 | selector: 10 | matchLabels: 11 | app: wekan 12 | template: 13 | metadata: 14 | labels: 15 | app: wekan 16 | spec: 17 | containers: 18 | - env: 19 | - name: BIGEVENTS_PATTERN 20 | value: NONE 21 | - name: BROWSER_POLICY_ENABLED 22 | value: "true" 23 | - name: CARD_OPENED_WEBHOOK_ENABLED 24 | value: "false" 25 | - name: MAIL_FROM 26 | value: Wekan Notifications 27 | - name: MAIL_URL 28 | value: smtp://smtp.sendgrid.net:25/?ignoreTLS=true&tls={rejectUnauthorized:false} 29 | - name: MONGO_URL 30 | value: mongodb://mongo:27017/wekan 31 | - name: RICHER_CARD_COMMENT_EDITOR 32 | value: "false" 33 | - name: ROOT_URL 34 | value: http://wekan.lan 35 | - name: SCROLLAMOUNT 36 | value: auto 37 | - name: SCROLLINERTIA 38 | value: "0" 39 | - name: WITH_API 40 | value: "true" 41 | image: wekanteam/wekan 42 | imagePullPolicy: Always 43 | name: wekan 44 | ports: 45 | - containerPort: 8080 46 | restartPolicy: Always -------------------------------------------------------------------------------- /yaml-examples/wekan/wekan-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: wekan 5 | namespace: default 6 | spec: 7 | rules: 8 | - host: wekan.lan 9 | http: 10 | paths: 11 | - backend: 12 | service: 13 | name: wekan 14 | port: 15 | number: 8080 16 | path: / 17 | pathType: ImplementationSpecific -------------------------------------------------------------------------------- /yaml-examples/wekan/wekan-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: wekan 6 | name: wekan 7 | spec: 8 | ports: 9 | - name: "8080" 10 | port: 8080 11 | targetPort: 8080 12 | selector: 13 | app: wekan --------------------------------------------------------------------------------