{"id":42204483,"url":"https://github.com/thylong/linkstack-chart","last_synced_at":"2026-01-27T00:31:27.104Z","repository":{"id":213399782,"uuid":"731719885","full_name":"thylong/linkstack-chart","owner":"thylong","description":"LinkStack Helm chart","archived":false,"fork":false,"pushed_at":"2024-05-08T09:30:24.000Z","size":269,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-30T19:25:39.082Z","etag":null,"topics":["helm","helm-chart","linkstack","linktree","linktree-alternative"],"latest_commit_sha":null,"homepage":"http://thylong.com/linkstack-chart/","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thylong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-14T18:05:14.000Z","updated_at":"2024-05-08T09:30:24.000Z","dependencies_parsed_at":"2023-12-20T19:44:51.089Z","dependency_job_id":"ce2c1a14-1502-466f-9f7c-71e3ee3e9a38","html_url":"https://github.com/thylong/linkstack-chart","commit_stats":null,"previous_names":["thylong/linkstack-chart"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/thylong/linkstack-chart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thylong%2Flinkstack-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thylong%2Flinkstack-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thylong%2Flinkstack-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thylong%2Flinkstack-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thylong","download_url":"https://codeload.github.com/thylong/linkstack-chart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thylong%2Flinkstack-chart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28793339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["helm","helm-chart","linkstack","linktree","linktree-alternative"],"created_at":"2026-01-27T00:31:26.382Z","updated_at":"2026-01-27T00:31:27.093Z","avatar_url":"https://github.com/thylong.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# linkstack\n\n![Version: 0.2.0](https://img.shields.io/badge/Version-0.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.16.0](https://img.shields.io/badge/AppVersion-1.16.0-informational?style=flat-square)\n\nA LinkStack unofficial Helm chart\n\nThis helm chart offers a way to schedule a [linkstack](https://linkstack.org/) instance on a K8s cluster.\n\nThe chart currently supports:\n- Basic setup with sqlite as backend\n- Basic setup with mysql as backend\n- PersistentVolume to store data\n\n## Getting Started\n\n### Requirement\n\nHelm (version \u003e= 3) and a functional kubernetes cluster (\u003e=1.24) are the sole dependencies.\n\n## Install\n\nTo install a simple linkstack instance with sqlite as a backend:\n```bash\nhelm repo add linkstack https://thylong.github.io/linkstack-chart\n\nhelm install linkstack linkstack/linkstack\n```\n\n### Enable litestream\n\nYou can provide a `values.yaml` file with custom configuration.\nTo run sqlite with [litestream](https://litestream.io/) as a sidecar, create the following file:\n\n```yaml\n# Example of values.yaml\n# [...]\nlitestream:\n  enabled: true\n  image:\n    repository: litestream/litestream\n    pullPolicy: IfNotPresent\n    tag: \"latest\"\n  limits:\n    cpu: 250m\n    memory: 256Mi\n  requests:\n    cpu: 125m\n    memory: 128Mi\n  path: /htdocs/database/database.sqlite\n  url: \"s3://\u003cyour_s3_bucket\u003e/\u003cpath_to_specific_directory\u003e\"\n  region: \"\u003cyour_s3_bucket_region\u003e\"\n  skipVerify: true\n  volumeMounts:\n    - name: linkstack-litestream\n      mountPath: /etc/litestream.yml\n      subPath: litestream.yml\n# [...]\n```\n\nYour will have to create a K8s secret to access the S3 bucket:\n\n```bash\nkubectl create secret generic litestream \\\n    --from-literal=LITESTREAM_ACCESS_KEY_ID=\"my_access_key_id\" \\\n    --from-literal=LITESTREAM_SECRET_ACCESS_KEY=\"my_secret_access_key\"\n```\n\nThen run :\n\n```bash\nhelm repo add linkstack https://thylong.github.io/linkstack-chart\n\nhelm install linkstack linkstack/linkstack --values=values.yaml\n```\n\n## Features considered\n\n- [x] Optional pre-defined Network Policy\n- [x] Optional pre-defined securityContext\n- [x] SQLite disaster recovery with litestream\n- [ ] Already setup linkstack installation through Helm\n\n## References\n\n**Homepage:** \u003chttps://linkstack.org/\u003e\n\n## Values\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| affinity | object | `{}` | Affinity rules to constrain pod scheduling to specific node(s) matching rules. |\n| autoscaling | object | `{\"enabled\":false,\"maxReplicas\":10,\"minReplicas\":1,\"targetCPUUtilizationPercentage\":80}` | HPA rules. |\n| fullnameOverride | string | `\"\"` |  |\n| ingress.annotations | object | `{}` |  |\n| ingress.className | string | `\"\"` | Name of the ingress class to route through this application |\n| ingress.enabled | bool | `false` |  |\n| linkstack | object | `{\"backend\":\"sqlite\",\"env\":[{\"name\":\"php_memory_limit\",\"value\":\"512M\"},{\"name\":\"upload_max_filesize\",\"value\":\"8M\"},{\"name\":\"tz\",\"value\":\"Europe/Paris\"},{\"name\":\"log_level\",\"value\":\"info\"}],\"image\":{\"pullPolicy\":\"IfNotPresent\",\"repository\":\"linkstackorg/linkstack\",\"tag\":\"latest\"},\"resources\":{\"limits\":{\"cpu\":\"250m\",\"memory\":\"512Mi\"},\"requests\":{\"cpu\":\"250m\",\"memory\":\"512Mi\"}},\"volumeMounts\":[{\"mountPath\":\"/htdocs\",\"name\":\"linkstack-sqlite\",\"readOnly\":false}]}` | Linkstack container specific configuration |\n| linkstack.backend | string | `\"sqlite\"` | Datastore to use (either sqlite or mysql) |\n| linkstack.resources.limits.memory | string | `\"512Mi\"` | PHP_MEMORY_LIMIT should be adjusted accordingly |\n| linkstack.volumeMounts | list | `[{\"mountPath\":\"/htdocs\",\"name\":\"linkstack-sqlite\",\"readOnly\":false}]` | Additional volumeMounts on the output Deployment definition. |\n| litestream | object | `{\"enabled\":false,\"env\":[{\"name\":\"LITESTREAM_ACCESS_KEY_ID\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"LITESTREAM_ACCESS_KEY_ID\",\"name\":\"litestream\"}}},{\"name\":\"LITESTREAM_SECRET_ACCESS_KEY\",\"valueFrom\":{\"secretKeyRef\":{\"key\":\"LITESTREAM_SECRET_ACCESS_KEY\",\"name\":\"litestream\"}}}],\"image\":{\"pullPolicy\":\"IfNotPresent\",\"repository\":\"litestream/litestream\",\"tag\":\"latest\"},\"path\":\"/htdocs/database/database.sqlite\",\"region\":\"eu-west-1\",\"resources\":{\"limits\":{\"cpu\":\"250m\",\"memory\":\"256Mi\"},\"requests\":{\"cpu\":\"125m\",\"memory\":\"128Mi\"}},\"skipVerify\":true,\"url\":\"s3://linkstack-backup/litestream\",\"volumeMounts\":[{\"mountPath\":\"/etc/litestream.yml\",\"name\":\"linkstack-litestream\",\"subPath\":\"litestream.yml\"}]}` | Litestream sidecar specific configuration (sqlite disaster-recovery tool) This configuration won't be used if sqlite is not selected as backend. |\n| nameOverride | string | `\"\"` |  |\n| namespace | string | `\"\"` | Specifies in which namespace linkstack release should be deployed Will be deployed to the default namespace if not specified |\n| networkPolicy | object | `{\"enabled\":false,\"ports\":[{\"port\":443},{\"port\":80}]}` | Restrict network permissions using Kubernetes L4 network policies |\n| nodeSelector | object | `{}` | Assign pods to nodes matching specific label. |\n| objectStorageBackup | object | `{\"enabled\":true,\"env\":[]}` | Helper to restore data from remote source instead of Docker image default content (S3, GCS, etc) |\n| podAnnotations | object | `{}` |  |\n| podLabels | object | `{}` |  |\n| podSecurityContext | object | `{}` |  |\n| replicaCount | int | `1` | Number of linkstack pods |\n| securityContext | object | `{}` |  |\n| service.port | int | `80` |  |\n| service.type | string | `\"ClusterIP\"` |  |\n| serviceAccount.annotations | object | `{}` | Annotations to add to the service account |\n| serviceAccount.automount | bool | `true` | Automatically mount a ServiceAccount's API credentials? |\n| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |\n| serviceAccount.name | string | `\"\"` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |\n| tolerations | list | `[]` | Tolerations lift taint constraints with a tradeoff on scheduling guarantees. |\n| volumes | list | `[{\"name\":\"linkstack-sqlite\",\"persistentVolumeClaim\":{\"claimName\":\"linkstack-sqlite-pvc\"}},{\"configMap\":{\"name\":\"linkstack-litestream\"},\"name\":\"linkstack-litestream\"}]` | Additional volumes on the output Deployment definition. |\n\n## License\n\n[![License: AGPL v3](https://img.lss.ovh/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n\nAs of version 4.0.0, the license for this project has been updated to the GNU Affero General Public License v3.0, which explicitly requires that any modifications made to the project must be made public. This license also requires that a copyright notice and license notice be included in any copies or derivative works of the project.\n\nAdditionally, any changes made to the project must be clearly stated, and the source code for the modified version must be made available to anyone who receives the modified version. Network use of the project is also considered distribution, and as such, any network use of the project must comply with the terms of the license.\n\nFinally, any derivative works of the project must be licensed under the same license terms as the original project.\n\n[Read more here](https://www.gnu.org/licenses/agpl-3.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthylong%2Flinkstack-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthylong%2Flinkstack-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthylong%2Flinkstack-chart/lists"}