link2cid is k8s-ified

This commit is contained in:
Chris Grimmett 2024-03-15 19:48:24 -08:00
parent 044fd3c71a
commit 726d2b5504
50 changed files with 966 additions and 5 deletions

2
.envrc Normal file
View File

@ -0,0 +1,2 @@
export FOO=barbazfooblahblah
export KUBECONFIG=/home/chris/.kube/vke.yaml

View File

@ -2,9 +2,8 @@ git monorepo.
pnpm required for workspaces.
Yarn required for packages/strapi
Yarn required for packages/strapi.
Development uses docker compose with dotenv.
Production uses dokku.
Kubernetes for Development using Tiltfile
Kubernetes for Production, deployed using Helm/helmfile

View File

@ -1,2 +1,6 @@
# futureporn-monorepo
## minikube setup
minikube addons enable volumesnapshots
minikube addons enable csi-hostpath-driver

22
Tiltfile Normal file
View File

@ -0,0 +1,22 @@
# load('ext://dotenv', 'dotenv')
# dotenv()
k8s_yaml(helm(
'./charts/fp',
values=['./charts/fp/values-dev.yaml'],
))
docker_build('fp/link2cid', './packages/link2cid')
k8s_resource(
workload='link2cid-pod',
port_forwards=3939
)
# v1alpha1.extension_repo(name='default', url='https://github.com/tilt-dev/tilt-extensions')
# v1alpha1.extension(name='ngrok', repo_name='default', repo_path='ngrok')
# settings = read_json('tilt_option.json', default={})
# default_registry(settings.get('default_registry', 'sjc.vultrcr.com/fpcontainers'))

9
charts/fp/Chart.yaml Normal file
View File

@ -0,0 +1,9 @@
name: fp
description: The Galaxy's Best VTuber Hentai Site
version: 0.0.1
apiVersion: v1
keywords:
- fp
- futureporn
sources: []
home: 'https://gitea.futureporn.net/futureporn'

9
charts/fp/README.md Normal file
View File

@ -0,0 +1,9 @@
This chart was originally created by Kompose.
Then I realized I don't understand kubernetes.
It was too complex.
I needed to start over, understand each piece before moving on.
so we're starting small, incrementally migrating services to the cluster.

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: bot-claim0
name: bot-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: bot-claim1
name: bot-claim1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,38 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: bot
name: bot
spec:
containers:
- env:
- name: DISCORD_GUILD_ID
- name: DISCORD_TOKEN
- name: REST_HOST
value: localhost
- name: REST_PORT
value: "8888"
image: bot
name: fp-bot
ports:
- containerPort: 8888
resources: {}
volumeMounts:
- mountPath: /app/package.json
name: bot-claim0
- mountPath: /app/src
name: bot-claim1
restartPolicy: OnFailure
volumes:
- name: bot-claim0
persistentVolumeClaim:
claimName: bot-claim0
- name: bot-claim1
persistentVolumeClaim:
claimName: bot-claim1
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: bot
name: bot
spec:
ports:
- name: "8888"
port: 8888
targetPort: 8888
selector:
io.kompose.service: bot
status:
loadBalancer: {}

View File

@ -0,0 +1,22 @@
apiVersion: v1
kind: Pod
metadata:
name: chisel
spec:
containers:
- args:
- client
- --auth=
- R:8899:cluster0:9094
- R:8901:link2cid:3939
- R:8900:strapi:1337
- R:8902:next:3000
- R:8903:uppy:3020
- R:8904:uppy:8888
image: jpillora/chisel
name: fp-chisel
ports:
- containerPort: 9312
resources: {}
restartPolicy: OnFailure
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: chisel
name: chisel
spec:
ports:
- name: "9312"
port: 9312
targetPort: 9312
selector:
io.kompose.service: chisel
status:
loadBalancer: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: cluster0-claim0
name: cluster0-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,39 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: cluster0
name: cluster0
spec:
containers:
- env:
- name: CLUSTER_CRDT_TRUSTEDPEERS
value: '*'
- name: CLUSTER_IPFSHTTP_NODEMULTIADDRESS
value: /dns4/ipfs0/tcp/5001
- name: CLUSTER_MONITORPINGINTERVAL
value: 2s
- name: CLUSTER_PEERNAME
value: cluster0
- name: CLUSTER_RESTAPI_BASICAUTHCREDENTIALS
- name: CLUSTER_RESTAPI_HTTPLISTENMULTIADDRESS
value: /ip4/0.0.0.0/tcp/9094
- name: CLUSTER_SECRET
image: ipfs/ipfs-cluster:latest
name: fp-cluster0
ports:
- containerPort: 9094
resources: {}
volumeMounts:
- mountPath: /data/ipfs-cluster
name: cluster0-claim0
restartPolicy: OnFailure
volumes:
- name: cluster0-claim0
persistentVolumeClaim:
claimName: cluster0-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: cluster0
name: cluster0
spec:
ports:
- name: "9094"
port: 9094
targetPort: 9094
selector:
io.kompose.service: cluster0
status:
loadBalancer: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: db-claim0
name: db-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,33 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: db
name: db
spec:
containers:
- env:
- name: PGDATA
value: /var/lib/postgresql/data
- name: PGPORT
- name: POSTGRES_DB
- name: POSTGRES_PASSWORD
- name: POSTGRES_USER
image: postgres:16
name: fp-db
ports:
- containerPort: 15432
resources: {}
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: db-claim0
restartPolicy: OnFailure
volumes:
- name: db-claim0
persistentVolumeClaim:
claimName: db-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: db
name: db
spec:
ports:
- name: "15432"
port: 15432
targetPort: 15432
selector:
io.kompose.service: db
status:
loadBalancer: {}

View File

@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: external-dns
template:
metadata:
labels:
app: external-dns
spec:
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.14.0
args:
- --source=service # ingress is also possible
- --domain-filter=futureporn.net # (optional) limit to only example.com domains; change to match the zone created above.
- --provider=vultr
env:
- name: VULTR_API_KEY
value: "YOU_VULTR_API_KEY"

View File

@ -0,0 +1,15 @@
apiVersion: v1
kind: Pod
metadata:
name: httpd-pod
spec:
containers:
- name: httpd-pod
image: httpd
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
memory: 128Mi
restartPolicy: OnFailure

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: ipfs0-claim0
name: ipfs0-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,26 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: ipfs0
name: ipfs0
spec:
containers:
- image: ipfs/kubo:release
name: fp-ipfs0
ports:
- containerPort: 5001
resources: {}
volumeMounts:
- mountPath: /data/ipfs
name: ipfs0-claim0
restartPolicy: OnFailure
volumes:
- name: ipfs0-claim0
persistentVolumeClaim:
claimName: ipfs0-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: ipfs0
name: ipfs0
spec:
ports:
- name: "5001"
port: 5001
targetPort: 5001
selector:
io.kompose.service: ipfs0
status:
loadBalancer: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: link2cid-claim0
name: link2cid-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,41 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
labels:
io.kompose.service: link2cid
name: link2cid
spec:
containers:
- env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: link2cid
key: apiKey
- name: IPFS_URL
value: http://ipfs0:5001
- name: PORT
value: "3939"
image: link2cid
name: fp-link2cid
ports:
- containerPort: 3939
resources:
limits:
cpu: 100m
memory: 2048Gi
requests:
cpu: 100m
memory: 2048Gi
volumeMounts:
- mountPath: /app/index.js
name: link2cid-claim0
restartPolicy: OnFailure
volumes:
- name: link2cid-claim0
persistentVolumeClaim:
claimName: link2cid-claim0
status: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: link2cid-pv
spec:
type:
accessModes:
- ReadWriteOnce
storageClassName: {{ .Values.storageClassName }}
capacity:
storage: 40Gi
claimRef:
name: link2cid-pvc
namespace: default

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: link2cid
name: link2cid
spec:
ports:
- name: "3939"
port: 3939
targetPort: 3939
selector:
io.kompose.service: link2cid
status:
loadBalancer: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: next-claim0
name: next-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,29 @@
apiVersion: v1
kind: Pod
metadata:
labels:
io.kompose.service: next
name: next
spec:
containers:
- env:
- name: NEXT_PUBLIC_SITE_URL
- name: NEXT_PUBLIC_STRAPI_URL
- name: NEXT_PUBLIC_UPPY_COMPANION_URL
- name: NODE_ENV
value: development
- name: REVALIDATION_TOKEN
image: next
name: fp-next
ports:
- containerPort: 3000
resources: {}
volumeMounts:
- mountPath: /app/app
name: next-claim0
restartPolicy: OnFailure
volumes:
- name: next-claim0
persistentVolumeClaim:
claimName: next-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: next
name: next
spec:
ports:
- name: "3000"
port: 3000
targetPort: 3000
selector:
io.kompose.service: next
status:
loadBalancer: {}

View File

@ -0,0 +1,26 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: orgchart
labels:
app: orgchart
spec:
selector:
matchLabels:
app: orgchart
replicas: 1
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/agent-inject-status: 'update'
vault.hashicorp.com/role: "internal-app"
vault.hashicorp.com/agent-inject-secret-database-config.txt: "internal/data/database/config"
labels:
app: orgchart
spec:
serviceAccountName: internal-app
containers:
- name: orgchart
image: jweissig/app:0.0.1

View File

@ -0,0 +1,26 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: pgadmin
name: pgadmin
spec:
containers:
- env:
- name: GUNICORN_ACCESS_LOGFILE
value: /tmp/pgadmin-gunicorn-access.log
- name: PGADMIN_DEFAULT_EMAIL
- name: PGADMIN_DEFAULT_PASSWORD
- name: PGADMIN_DISABLE_POSTFIX
value: yessir
image: dpage/pgadmin4:8
name: fp-pgadmin
ports:
- containerPort: 80
resources: {}
restartPolicy: OnFailure
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: pgadmin
name: pgadmin
spec:
ports:
- name: "5050"
port: 5050
targetPort: 80
selector:
io.kompose.service: pgadmin
status:
loadBalancer: {}

View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
name: strapi-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 40Gi
storageClassName: vultr-block-storage-hdd
status: {}

View File

@ -0,0 +1,64 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: strapi
name: strapi
spec:
containers:
- env:
- name: ADMIN_JWT_SECRET
- name: API_TOKEN_SALT
- name: APP_KEYS
- name: AWS_ACCESS_KEY_ID
- name: AWS_SECRET_ACCESS_KEY
- name: BASE_URL
- name: CDN_BUCKET_URL
- name: CDN_BUCKET_USC_URL
- name: DATABASE_CLIENT
value: postgres
- name: DATABASE_HOST
value: db
- name: DATABASE_NAME
- name: DATABASE_PASSWORD
- name: DATABASE_PORT
- name: DATABASE_USERNAME
- name: JWT_SECRET
- name: MUX_PLAYBACK_RESTRICTION_ID
- name: MUX_SIGNING_KEY_ID
- name: MUX_SIGNING_KEY_PRIVATE_KEY
- name: NODE_ENV
- name: S3_USC_BUCKET_APPLICATION_KEY
- name: S3_USC_BUCKET_ENDPOINT
- name: S3_USC_BUCKET_KEY_ID
- name: S3_USC_BUCKET_NAME
- name: S3_USC_BUCKET_REGION
- name: SENDGRID_API_KEY
- name: SMTP_AUTH_STRATEGY
value: NONE
- name: SMTP_FROM_EMAIL
value: sender@example.com
- name: SMTP_HOST
value: 172.17.0.1
- name: SMTP_PORT
value: "25"
- name: STRAPI_URL
- name: TRANSFER_TOKEN_SALT
image: fp-strapi:14
name: fp-strapi
ports:
- containerPort: 1337
resources: {}
volumeMounts:
- mountPath: /opt/app
name: strapi-claim0
restartPolicy: OnFailure
volumes:
- name: strapi-claim0
persistentVolumeClaim:
claimName: strapi-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: strapi
name: strapi
spec:
ports:
- name: "1337"
port: 1337
targetPort: 1337
selector:
io.kompose.service: strapi
status:
loadBalancer: {}

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: uppy-claim0
name: uppy-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
status: {}

View File

@ -0,0 +1,47 @@
apiVersion: v1
kind: Pod
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: uppy
name: uppy
spec:
containers:
- env:
- name: B2_BUCKET
- name: B2_ENDPOINT
- name: B2_KEY
- name: B2_REGION
- name: B2_SECRET
- name: DRIVE_KEY
- name: DRIVE_SECRET
- name: DROPBOX_KEY
- name: DROPBOX_SECRET
- name: FILEPATH
- name: HOST
- name: JWT_SECRET
- name: NEXT_PUBLIC_SITE_URL
- name: PORT
- name: SECRET
- name: SERVER_BASE_URL
- name: SESSION_SECRET
- name: STRAPI_API_KEY
- name: STRAPI_URL
- name: UPLOAD_URLS
image: uppy
name: fp-uppy
ports:
- containerPort: 3020
resources: {}
volumeMounts:
- mountPath: /app/index.js
name: uppy-claim0
restartPolicy: OnFailure
volumes:
- name: uppy-claim0
persistentVolumeClaim:
claimName: uppy-claim0
status: {}

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --file compose.yml -c --out ./charts
kompose.version: 1.26.0 (40646f47)
creationTimestamp: null
labels:
io.kompose.service: uppy
name: uppy
spec:
ports:
- name: "3020"
port: 3020
targetPort: 3020
selector:
io.kompose.service: uppy
status:
loadBalancer: {}

View File

@ -0,0 +1,23 @@
apiVersion: v1
kind: Pod
metadata:
name: link2cid-pod
spec:
containers:
- name: link2cid-pod
image: fp/link2cid
ports:
- containerPort: 3939
env:
- name: PORT
value: '3939'
- name: API_KEY
valueFrom:
secretKeyRef:
name: link2cid
key: apiKey
resources:
limits:
cpu: 500m
memory: 1024Mi
restartPolicy: OnFailure

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: link2cid-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 40Gi
allowVolumeExpansion: true
storageClassName: {{ .Values.storageClassName }}
status: {}

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: link2cid-service
spec:
ports:
- name: "3939"
port: 3939
targetPort: 3939
status:
loadBalancer: {}

View File

@ -0,0 +1 @@
storageClassName: csi-hostpath-sc

View File

@ -0,0 +1 @@
storageClassName: vultr-block-storage-hdd

View File

@ -0,0 +1,3 @@
windmill helm chart is pulled in via ../../helmfile.yaml.
This folder is here just to hold our values.yaml file for configuring windmill.

View File

@ -0,0 +1,87 @@
# windmill root values block
windmill:
# domain as shown in browser, this is used together with `baseProtocol` as part of the BASE_URL environment variable in app and worker container and in the ingress resource, if enabled
baseDomain: windmill
baseProtocol: http
# postgres URI, pods will crashloop if database is unreachable, sets DATABASE_URL environment variable in app and worker container
databaseUrl: postgres://postgres:windmill@windmill-postgresql/windmill?sslmode=disable
# replica for the application app
appReplicas: 2
# replicas for the workers, jobs are executed on the workers
lspReplicas: 2
workerGroups:
# The default worker group is the one that will execute jobs with any taggs except the native ones. Windmill has a default worker group configuration for it
- name: "default"
replicas: 2
# -- Annotations to apply to the pods
annotations: {}
# -- Labels to apply to the pods
labels: {}
# -- Node selector to use for scheduling the pods
nodeSelector: {}
# -- Tolerations to apply to the pods
tolerations: []
# -- Affinity rules to apply to the pods
affinity: {}
# -- Resource limits and requests for the pods
resources:
requests:
memory: "1028Mi"
cpu: "500m"
limits:
memory: "2048Mi"
cpu: "1000m"
# -- Extra environment variables to apply to the pods
extraEnv: []
# -- Extra sidecar containers
extraContainers: []
# Thenative worker group will only execute native jobs. Windmill has a default worker group configuration for it
- name: "native"
replicas: 3
# -- Resource limits and requests for the pods
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
# -- Extra environment variables to apply to the pods
extraEnv: []
# -- Extra sidecar containers
extraContainers: []
- name: "gpu"
replicas: 0
# Use those to override the tag or image used for the app and worker containers. Windmill uses the same image for both.
# By default, if enterprise is enable, the image is set to ghcr.io/windmill-labs/windmill-ee, otherwise the image is set to ghcr.io/windmill-labs/windmill
#tag: "mytag"
#image: "ghcr.io/windmill-labs/windmill"
# enable postgres (bitnami) on kubernetes
postgresql:
enabled: true
# enable minio (bitnami) on kubernetes
minio:
enabled: false
# Configure Ingress
# ingress:
# className: ""
# enable enterprise features
enterprise:
# -- enable windmill enterprise, requires license key.
enabled: false

14
helmfile.yaml Normal file
View File

@ -0,0 +1,14 @@
# repositories:
# - name: windmill
# url: https://windmill-labs.github.io/windmill-helm-charts
releases:
# - name: windmill
# namespace: windmill
# chart: windmill/windmill
# values:
# - ./charts/windmill/values.yaml
- name: fp
namespace: default
chart: charts/fp

1
packages/link2cid/.npmrc Normal file
View File

@ -0,0 +1 @@
engine-strict=true

1
packages/link2cid/.nvmrc Normal file
View File

@ -0,0 +1 @@
lts/iron

View File

@ -25,7 +25,7 @@ app.use(bodyParser.urlencoded({ extended: false }));
const port = process.env.PORT || 3000;
const ipfsUrl = process.env.IPFS_URL || 'http://localhost:5001';
if (!process.env.API_KEY) throw new Error('API_KEY was missing in env');
if (!process.env.PORT) throw new Error('PORT is missing in env');
// greetz https://stackoverflow.com/a/51302466/1004931
async function downloadFile(url, filePath, sse) {