Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions kubernetes/argocd/09_privacy/linkwarden.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: linkwarden
namespace: argocd
spec:
destination:
name: ''
namespace: privacy
server: 'https://kubernetes.default.svc'
source:
path: kubernetes/cluster/privacy/linkwarden
repoURL: 'https://github.com/maxim-mityutko/home-infra.git'
targetRevision: main
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
39 changes: 39 additions & 0 deletions kubernetes/cluster/privacy/linkwarden/ingress.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: linkwarden
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
annotations:
kubernetes.io/ingress.class: public
cert-manager.io/cluster-issuer: lets-encrypt
spec:
rules:
- host: bookmarks.brhd.io
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: linkwarden
port:
number: 80
tls:
- hosts:
- bookmarks.brhd.io
---
apiVersion: externaldns.k8s.io/v1alpha1
kind: DNSEndpoint
metadata:
name: bookmarks.brhd.io
namespace: privacy
spec:
endpoints:
- dnsName: bookmarks.brhd.io
recordTTL: 86400
recordType: CNAME
targets:
- casa.brhd.io
7 changes: 7 additions & 0 deletions kubernetes/cluster/privacy/linkwarden/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- secret.yaml
- linkwarden.yaml
- ingress.yaml
- volumes.yaml
88 changes: 88 additions & 0 deletions kubernetes/cluster/privacy/linkwarden/linkwarden.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Service: Linkwarden
# Ingress: bookmarks.brhd.io
# Label: app.kubernetes.io/name: linkwarden
---
apiVersion: v1
kind: Service
metadata:
name: linkwarden
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 3000
selector:
app.kubernetes.io/name: linkwarden
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: linkwarden
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: linkwarden
strategy:
type: Recreate
revisionHistoryLimit: 1
template:
metadata:
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
spec:
restartPolicy: Always
containers:
- name: linkwarden
image: ghcr.io/linkwarden/linkwarden:v2.8.4
resources:
requests:
memory: 100Mi
cpu: 50m
limits:
cpu: 800m
memory: 1Gi
ports:
- containerPort: 3000
envFrom:
- secretRef:
name: linkwarden
- configMapRef:
name: linkwarden
volumeMounts:
- name: linkwarden-data
mountPath: /data/assets
volumes:
- name: linkwarden-data
persistentVolumeClaim:
claimName: linkwarden-data
nodeSelector:
kubernetes.io/node-size: large
---
apiVersion: v1
kind: ConfigMap
metadata:
name: linkwarden
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
data:
STORAGE_FOLDER: /assets
RE_ARCHIVE_LIMIT: "1440" # 1 day
ARCHIVE_TAKE_COUNT: "1"

NEXT_PUBLIC_DISABLE_REGISTRATION: "true"
NEXT_PUBLIC_CREDENTIALS_ENABLED: "false"
DISABLE_NEW_SSO_USERS: "false"

NEXT_PUBLIC_AUTHENTIK_ENABLED: "true"
AUTHENTIK_CUSTOM_NAME: Authentik
NEXTAUTH_URL: https://bookmarks.brhd.io/api/v1/auth
19 changes: 19 additions & 0 deletions kubernetes/cluster/privacy/linkwarden/secret.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: linkwarden
namespace: privacy
spec:
encryptedData:
AUTHENTIK_CLIENT_ID: AgC70R47L9xMrI/g3Vy2JWeD1IX+nmq9Sg8SE98YE00qHRZ/f1fds8dodPAG7eZZooEW7cwqcCBq8J1EtKoQP5jCppXR9AIbi9Bdzq6hRwKyXFZVDJRoPXfSWd14qs9xLCaPwBHd1nHSXeTmlzuHJ0g7B5gWAfUSZ4O14cdv33xDEPrwRUhaviVneb0wBFywGuRHrgJfrFN0Fw7M+i5lTPWw2+11huwGKYiyc2N/yTjvs+LpL/+mX54T60uYcrMb0n4dy43164ed3VPbpaCw9Mz/tG9XmOcZ0kEqHHZw/vkmPttsXSOGxO2XHYd+cZ2VIUUMFoqllEK9cB/DoTZLNyhvRMiR57r3xGHT8d6bnV9oSfj6kjpcoeXY2PEm8MhK48y/GnPUXVlQghCR9AV3LcFldDOT/6pkTgQorLqOSLPLu03LmhB35lQg5bdApiE0eEzBhGbhaYBnDmagtfgvBTCCpX7krJirXAwMOGTJgdR6ncI+jzRyzI7G2BtHaEy2n61Ldg91cOnmQOSr3PKEjHTcQUAqrFikUfF0jAhH9184GT9NcqOhnb9T1WLo/IvjUUQy5bP5b0vWN5YO0lQYZvSgIWkOUmUUF1EcR9a9FJzslCaJS4qG+WdMP5QKUJPilib+SRLOFbwpvL3JtaedGTGesCMyZwH2pJdl1sreDaYjpg6twL3yWcl1V6P+xV03XEYxI60cI6cXI64iXC+QmE91XD6LnNFJxrdCUe6fLmvlP19zpxuOxuYE
AUTHENTIK_CLIENT_SECRET: AgBBZ5DWOjxVmJMzkc0N5FsUBQ8Z4RPvmvKopeusCYzrOeyrLsj9mAYp6uKtfjRsXRg90yn5vSTbnycwaThzYMzQr2s0eyP7wRIJ2w6oEJjcYaDbkHdSf8LBuqU25hlDxuC6mydQudxeuxN0ifPs+Qb65C297PtIhcGO5mw22zEm5J04WY/ngR/T+dtBO4/rMy6jJXb6LljF0+1ixI1xmwWbyKncym0MA2okISTiUgOIU+6je2ll1lsOSZw9NdwNLWL2rTfyQA/Zx8yamrhZM/OTPazGzMLjNrayCiaQnG1umy3lxRNeqMA1Zyw0NL+FP1kkkZv6A+qPmwVOAT/7lBi2wGU3bH9O1VKRYjPG1BtrjzDCD8f0Hj59GuUJ1igEZwhVsYQQZRyJZt2NZz2J+8irPg9s4irq4PvxTDc00BHSqoQszK8WFFyR+p9TWH+7RcVF5o4L/ln8SEtavAQlyac6M2Tx0eYaratCtM94WFM4K84O2BrFnAVRbRXvAQHPmkaULLgpRW2p2kNYvDxCSAh7k0Fe4nSO44fdrzxoKeqUqw0gBnn3/8cb3amAezlLRbcI9ifBduo7sifHXNuiIeffDRiieHxiVVtuSlv1F/IRS+e+TlkZV8HV4cVYKT8zTr1TzXhdhoYwVWwblkhlcOLTngdKz+ap58CLNkOyXgDEps2fpnz7wSAb6aTwkUO5E8Nbj6Blp5icsgoLUdOt28CeNvt5YfmXz0lhp62mwW4RufENbqrkeUcN0InY1H6+zMgWdHTirZ8CEbjJdBA1ePNAxXJPK5Vr8+1b29z82Z0Pdx7C86KYLGr6Jl6m0e2CEbLh5qOxLpmYaKH+Vz+1ChnWTHQJJXJWSMtGLi5GmTy4bQ==
AUTHENTIK_ISSUER: AgC6Fw3DXZ2L1u7vKyBA1LBtuR8WLrmJ77bRRZbAo3qMmrG0fdU/kvh8+XdBPNbFG6aG7co+EudKl8IB+Mp7XswQMqYIcgfPVZVFSESWiYOCh0buqNAryh50WTUWmIyrQWkLzqZP6ABicmWZKHsnxyQvMUURHAtsb42dYKHBr9ddZLYXyCDJvA1WehVcYcvzLCAN6HqOmdvUByTe8rSC8F1tkP17uoxCdbc0B6mu4w1PRAlFjUy92c+7tiVuqgo+GAcnuQ8dOb+hXVsQHiCMJm3ucNzEQwUFhkTYq8h4yc/HUd9ieZo2w1V18Q3CN56IpAgKf9DvWTDTZzlNIQIpsf1cUkqQ9+00NbEx0yceVUR08CdlhhUGFiLKLXZYtJHum3dfOyGU3895nb1xrn6I3beYuyMkENgkvEyg+hiDpX7H+WdDrJW/RwKIEIl00I5vhg2Kkp9HLtp9Uz/7FcusM8CdnqvzBh98Io3EwB+K3AYBTeOuT7byDRDc2Ap9gKCHYkkQwASR7huezM0N/ObUPFLR4S9j758+SzHHEvcdgNKQpwCAgB7Xxq0oB7NEChdG4bq8Ga//Hr/AzIuls+Hqj6SxC+62nVRnF6HUBhGr4lcTq4p5HylPqj/ti9EyTBw/5SBJt8cfV7+8qDcCE8BLvtYFsnYAgc7hy8ai0vsuJ0nf4rdwNfPI7IjXr+Laz89p1J7CXVHXGvEFQ1GfrgsOhhoiyfFPmKwLsrOWGxU/2uZYEGUmg/9SWK3oDPsrjOA=
DATABASE_URL: AgBU/onOgkULCcN2dw15cm/OXIQwlc1hZSbVCeQtBSfSNmJlUjMA99r8zAnYG5sSfBEMFMxXnBzbTIca40anPhJcNaNjehSwvQYdven24xvOPRLB4Dxsc8erfDFbxhM+X86mFGCfoDGm7Rv1444bdOzAZL6kjsBpNhLZ7rYI9+1TPYyyViKBxNlv9rUGL/gTR4ESFlpqMNRe4R1xessPG9XYW8md7K8apNP8xT7qVA+pmF62TFFEy14dtfKBeYlj3KnSuB9LWMeHQLrXqZ7GWiN5d2CjZKM/7kZL7dz24FDw/As6hP+pniCQN36lwwARAPYZRwZYf1siOB0G4cXEx8XVx33GEYIfsZ5cJF272LDvaqP++/OJG79bb8t2ecu9UcyxMV1jX7Eb/S1LbYAuTvu4gLIMp/LKXTVi1w+UqJNfklSjNTccMwjiP8fG7mt05s/9p9mHhJm3DW8H4Y3AnOtGDA2k3t6NbjNdg1QIniBI1xumhK5+qwU64PubsOiWJedAvpeShONEkH6LTWCfQN6fWiaGs8rsr8QVBNSfCgXLRj/vMOyK5zA88dWob/fd5AKz23+k4d8CnpfcXN0zb55GG73+crWwOpzrHNKrrEpyIYedVJl1/uHDxL7b0zhwOMLtoXVMi0afp0PKWDQeDA5tsULAVSzVjYIH6pSV3KulFCuT9FUj8/gUDwXcCUKVsqwD2Ewe6Cng/YW7V7NDL7YnuOK/W/ryU640bV2C0tVH2FnARCC1EIAtBIvnbT57IpbEYMUZnl1kS8WWQ6OWDgv0OjubV5pB16LKIj8oTlBbOTPG8qbmZoUYSUT76iVMOkBKz0tz3DhF
NEXTAUTH_SECRET: AgA8EyyaIc0Xf+dznUFu/H+RNuPPvFetfIcmz1Ff4yBn0FU3CIDOiS2Uxx2jpTrFWVuSWzuYpHL+OiBQLphnPnPQ6d8w0+BG10eOq8rUXtwCEkeswd7iwx+opv+oQtDI+vooYfNLgtkMoCY+qbHVUQvxAzVkLHyhHdzvMT1Y8G7Tx8MchV6tkqVAxqY1BLn8CDQr3klDQs09Xw5xTNDZMLSXPp/qW0fGPVwHYi67SnzMRkLnSwHuCMLR1xPzjOszpJSNmZPzbrWbY28IX7LRa1Y7HwyoWj+ydAFhRG97bVEmN0D9dJ8zcdSy2SRIVObo8lIMsJiNf9VO2hEVsbFxELlcoFqdBCzCV+pEcwLDnIYdikLTV1B1cYWZYz7V7spdrBzpJkfmYOShLlngFG4aQYXJQ7LwqRglPtyODmOmOJRCv4Bf+oloYb3Q7hK82RfkZCCyYg25+O4U9NFEogVwDDzIUjFdNyI40aVaM4WBXIpWBTdVH6GUM54+qpYUlNrLbIE6+6yYWKFntvihIRgWJDALwJvI4GZbvwp7lMAtebZWlia4VKcMeu4S1r2iG3piYyKZsjiwOanh1/0WA5UzXviydINmmRmGh26J2Rt+eKF/2CrIl20Ih66cC/CDC+oB3KgteLTR9r1W2DHOKnfY3emu5u3TPXc+ZIW7KeZafzSJ4JIUEOzgd+Z6/wxwEsV/PE8mZROo7Ge6a6qbJLFuUPhnLUgvCq3i0+Lvtfa0OMt17c67AgLa8ZW01RVKrXdM+Yft+PlCBhPANVt/ZIZnAcZ7bcT3sTj5iWUD/ZGy41tKB00nt8bYDi3dkjM=
template:
metadata:
labels:
app.kubernetes.io/name: linkwarden
name: linkwarden
namespace: privacy
type: Opaque
16 changes: 16 additions & 0 deletions kubernetes/cluster/privacy/linkwarden/volumes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: linkwarden-data
namespace: privacy
labels:
app.kubernetes.io/name: linkwarden
spec:
accessModes:
- ReadWriteOnce
- ReadOnlyMany
storageClassName: nfs-subdir
resources:
requests:
storage: 100M