4 Commits
Author SHA1 Message Date
Nicolas Meienberger 434e261943 Add Nginx app 2025-04-25 09:00:23 +02:00
Nicolas Meienberger f5d39e61d8 test: ensure file formats 2025-04-25 07:08:58 +02:00
Nicolas Meienberger 65a5a418e8 feat: base config 2025-04-23 21:06:48 +02:00
NicoandGitHub 631177e3b2 Initial commit 2025-04-23 20:03:32 +02:00
18 changed files with 16 additions and 395 deletions
Vendored
BIN
View File
Binary file not shown.
+4 -14
View File
@@ -22,24 +22,14 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Install node
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Cache Bun global packages
uses: actions/cache@v4
with:
path: ~/.bun/install/global
key: ${{ runner.os }}-bun-global-renovate-40
restore-keys: |
${{ runner.os }}-bun-global-
- name: Install Renovate
run: bun install -g renovate@40
run: bun install -g renovate re2
- name: Echo repository
run: echo ${{ github.repository }}
- name: Run renovate
run: LOG_LEVEL=${{ github.event.inputs.log_level || 'INFO' }} renovate --token ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }}
+2 -2
View File
@@ -2,9 +2,9 @@ name: Test
on:
push:
branches: [main]
branches: [ main ]
pull_request:
branches: [main]
branches: [ main ]
jobs:
test:
-13
View File
@@ -1,13 +0,0 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
+1 -31
View File
@@ -1,31 +1 @@
# Example App Store Template
This repository serves as a template for creating your own custom app store for the Runtipi platform. Use this as a starting point to create and share your own collection of applications.
## Repository Structure
- **apps/**: Contains individual app directories
- Each app has its own folder (e.g., `whoami/`) with the following structure:
- `config.json`: App configuration file
- `docker-compose.json`: Docker setup for the app
- `metadata/`: Contains app visuals and descriptions
- `description.md`: Markdown description of the app
- `logo.jpg`: App logo image
- **tests/**: Contains test files for the app store
- `apps.test.ts`: Test suite for validating apps
## Getting Started
This repository is intended to serve as a template for creating your own app store. Follow these steps to get started:
1. Click the "Use this template" button to create a new repository based on this template
2. Customize the apps or add your own app folders in the `apps/` directory
3. Test your app store by using it with Runtipi
## Documentation
For detailed instructions on creating your own app store, please refer to the official guide:
[Create Your Own App Store Guide](https://runtipi.io/docs/guides/create-your-own-app-store)
# example-appstore
+1 -7
View File
@@ -6,13 +6,7 @@ import path from 'node:path'
const getApps = async () => {
const appsDir = await fs.promises.readdir(path.join(process.cwd(), 'apps'))
const appDirs = appsDir.filter((app) => {
const stat = fs.statSync(path.join(process.cwd(), 'apps', app))
return stat.isDirectory()
})
return appDirs
return appsDir
};
const getFile = async (app: string, file: string) => {
-37
View File
@@ -1,37 +0,0 @@
{
"name": "kopia",
"min_tipi_version": "4.5.0",
"available": true,
"port": 51515,
"exposable": true,
"dynamic_config": true,
"id": "kopia",
"description": "",
"tipi_version": 2,
"version": "20251023.0.52914",
"categories": ["utilities"],
"short_desc": "",
"author": "kopia",
"dynamic":true,
"source": "https://github.com/kopia/kopia",
"website": "https://kopia.io",
"form_fields": [
{"type":"text",
"label":"username",
"required":true,
"env_variable":"USER"},
{"type":"text",
"label":"TZ",
"required":false,
"env_variable":"TZ"},
{"type":"password",
"label":"Password",
"required":true,
"env_variable":"PASSWORD"},
{"type":"text",
"label":"FingerPrint",
"required":false,
"env_variable":"KOPIA_SERVER_FINGERPRINT"}
],
"supported_architectures": ["amd64"]
}
-84
View File
@@ -1,84 +0,0 @@
{
"schemaVersion": 2,
"services": [
{
"name": "kopia",
"image": "kopia/kopia:latest",
"command": [
"server",
"start",
"--disable-csrf-token-checks",
"--tls-cert-file=/app/certs/my.cert",
"--tls-key-file=/app/certs/my.key",
"--address=0.0.0.0:51515",
"--server-username=${USER}",
"--server-password=${PASSWORD}"
],
"environment": [
{
"key": "KOPIA_PASSWORD",
"value": "${PASSWORD}"
},
{
"key": "KOPIA_SERVER_FINGERPRINT",
"value": "${KOPIA_SERVER_FINGERPRINT}"
},
{
"key": "TZ",
"value": "${TZ}"
},
{
"key": "USER",
"value": "${USER}"
}
],
"addPorts": [
{"containerPort":51515,
"hostPort":"$APP_PORT",
"tcp":true,
"udp":false}
],
"volumes": [
{
"hostPath": "${APP_DATA_DIR}/certs",
"containerPath": "/app/certs",
"readOnly": false,
"shared": false,
"private": false
},
{
"hostPath": "${APP_DATA_DIR}/config",
"containerPath": "/app/config",
"readOnly": false,
"shared": false,
"private": false
},
{
"hostPath": "${APP_DATA_DIR}/cache",
"containerPath": "/app/cache",
"readOnly": false,
"shared": false,
"private": false
},
{
"hostPath": "${APP_DATA_DIR}/logs",
"containerPath": "/app/logs",
"readOnly": false,
"shared": false,
"private": false
}
],
"hostname": "kopia-server",
"devices": [
"/dev/fuse:/dev/fuse:rwm"
],
"privileged": true,
"capAdd": [
"SYS_ADMIN"
],
"securityOpt": [
"apparmor:unconfined"
]
}
]
}
-30
View File
@@ -1,30 +0,0 @@
{
"name": "OpenAudible",
"min_tipi_version": "4.5.0",
"port": 3000,
"dynamic":true,
"available": true,
"exposable": true,
"dynamic_config": true,
"id": "openaudible",
"tipi_version": 2,
"version": "4.6.7",
"categories": ["media"],
"description": "OpenAudible is a cross-platform audiobook manager designed for Audible users. Manage/Download all your audiobooks with this easy-to-use desktop application",
"short_desc": "OpenAudible is a cross-platform audiobook manager designed for Audible users. Manage/Download all your audiobooks with this easy-to-use desktop applicationOpenAudible is a cross-platform audiobook manager designed for Audible users. Manage/Download all your audiobooks with this easy-to-use desktop application",
"author": "OpenAudible",
"source": "https://github.com/openaudible/openaudible_docker",
"website": "https://openaudible.org",
"form_fields": [
{
"type": "text",
"label":"rootPath",
"min":1,
"default":"${APP_DATA_DIR}",
"env_variable":"ROOTPATH"
}
],
"supported_architectures": ["amd64"],
"created_at": 1691943801422,
"updated_at": 1760070985003
}
-22
View File
@@ -1,22 +0,0 @@
{
"schemaVersion":2,
"services": [
{
"name": "openaudible",
"image": "openaudible/openaudible:latest",
"addPorts": [
{"containerPort":3000,
"hostPort":"$APP_PORT",
"tcp":true,
"udp":false}
],
"environment": [],
"volumes": [
{
"hostPath": "${ROOTPATH}",
"containerPath": "/config/OpenAudible"
}
]
}
]
}
-91
View File
@@ -1,91 +0,0 @@
# OpenAudible for Docker
This container runs [OpenAudible](https://openaudible.org) with its GUI accessible by browser.
This is an experimental alternative to the supported and recommended desktop binaries available at [openaudible.org](https://openaudible.org).
This project is hosted on [github](https://github.com/openaudible/openaudible_docker) and [dockerhub](https://hub.docker.com/r/openaudible/openaudible)
This project is based on the excellent [https://www.kasmweb.com/kasmvnc](https://www.kasmweb.com/kasmvnc) remote desktop container.
## Description
OpenAudible runs on Linux, Mac, and Windows. This Docker container runs the latest linux version
in a container running Ubuntu that is via web browser.
This allows you to run OpenAudible from a container, on the cloud, or from any Docker capable system (NAS system?).
No passwords are needed to access the web page, but a password can be added by modifying the "run.sh" file.
For personal use. Only one user can
view web sessions at one time-so this can't be used to share the application with multiple viewers at the same time.
You may want to map the volume /root/openaudible to access downloaded and converted audiobooks.
## Quick Start
```
docker run -d --rm -it -p 3000:3000 --security-opt seccomp=unconfined --name openaudible openaudible/openaudible:latest
```
Then open your web browser to http://localhost:3000
You'll probably want to access the volume where OpenAudible saves books.
## Building and running from source
```
git clone https://github.com/openaudible/openaudible_docker.git
cd openaudible_docker
./run.sh
```
The [run.sh](run.sh) file builds and runs the docker image. You may want to modify it to expose the OPENAUDIBLE volume.
Note: The latest version requires the docker run to include --security-opt seccomp=unconfined in the arguments. Without that, you would need to start OpenAudible manually, which can be done via:
```
./bash.sh
su abc
OpenAudible
```
If successful, the application will be up and running on port 3000 and
accessible via http://localhost:3000 in a browser.
The -rm flag removes the container when it quits. Any downloaded or converted books will be in the docker Volume.
## Upgrade the Application
To upgrade, you'll need to stop and delete (rm) the container, then restart using the same command you used to start it.
Then when you launch the web page http://localhost:3000 the latest version will be downloaded and installed.
```
docker stop openaudible
docker rm openaudible
docker run -d --rm -it -p 3000:3000 --security-opt seccomp=unconfined --name openaudible openaudible/openaudible:latest
```
Alternately, you can download and run the OpenAudible installer and not update the web linux environment:
```
curl -OL https://openaudible.org/latest/OpenAudible_x86_64.sh
chmod +x OpenAudible_x86_64.sh
./OpenAudible_x86_64.sh
# If successful, delete installer file:
rm ./OpenAudible_x86_64.sh
```
## Known limitations:
* Another user logging on to the web page disconnects anyone else already connected
* No password protection is offered or https proxy-but can be added.
* But it does allow a user to try the software in a containerized, accessible-from-anywhere way.
## TODO items
* Document how to access the "config" volume so you can access any converted books from the host machine.
## Notes
* This is experimental and unsupported. We hope some people find it useful.
* If you find any issues, please report them on [github.com/openaudible/openaudible_docker/issues](https://github.com/openaudible/openaudible_docker/issues).
* Before deleting the container and volume, if you logged into Audible, you should Log out using the Control Menu, which will delete your virtual device.
* Would appreciate feedback or pull requests.
* Docker is great for testing something, but we still recommend the desktop app for most users.
## License
The OpenAudible desktop application is free to try shareware.
-13
View File
@@ -1,13 +0,0 @@
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="64" height="64" rx="32" fill="url(#paint0_linear)"/>
<path d="M34.8689 31.2038V19.3257C34.8689 19.03 35.1035 18.7959 35.3999 18.7959H37.4496C37.7459 18.7959 37.9806 19.03 37.9806 19.3257V29.7868C36.931 30.1811 35.8938 30.6493 34.8689 31.2038ZM42.2158 28.6778V24.5008C42.2158 24.2051 41.9812 23.971 41.6849 23.971H39.6352C39.3388 23.971 39.1042 24.2051 39.1042 24.5008V29.4048C40.1291 29.0844 41.1663 28.838 42.2158 28.6778ZM19.2243 28.4437C19.8417 28.4437 20.4591 28.4807 21.0765 28.5423V21.3711C21.0765 21.0754 20.8419 20.8413 20.5455 20.8413H18.4958C18.1995 20.8413 17.9648 21.0754 17.9648 21.3711V28.493C18.3847 28.456 18.8045 28.4437 19.2243 28.4437ZM45.167 28.4437C45.5868 28.4437 46.0189 28.456 46.4264 28.493V22.7881C46.4264 22.4924 46.1918 22.2583 45.8955 22.2583H43.8457C43.5494 22.2583 43.3148 22.4924 43.3148 22.7881V28.5423C43.9445 28.4807 44.5619 28.4437 45.167 28.4437ZM32.2018 32.8549C32.7081 32.4975 33.239 32.1525 33.7576 31.8322V21.3711C33.7576 21.0754 33.523 20.8413 33.2267 20.8413H31.1769C30.8806 20.8413 30.646 21.0754 30.646 21.3711V31.8322C31.1646 32.1525 31.6832 32.4975 32.2018 32.8549ZM25.3118 29.4048V24.5008C25.3118 24.2051 25.0772 23.971 24.7808 23.971H22.7187C22.4224 23.971 22.1878 24.2051 22.1878 24.5008V28.6778C23.225 28.838 24.2745 29.0844 25.3118 29.4048ZM29.5347 31.2038V17.9334C29.5347 17.6377 29.3001 17.4036 29.0037 17.4036H26.954C26.6577 17.4036 26.4231 17.6377 26.4231 17.9334V29.7868C27.4726 30.1811 28.5098 30.6493 29.5347 31.2038Z" fill="white"/>
<path d="M32.2018 34.1733C27.6455 30.7479 22.5212 29.2077 17.9648 29.5527V41.3691C17.9648 41.9729 18.4711 42.4534 19.0885 42.4288C23.1509 42.2686 27.5837 43.5501 31.6091 46.2731C31.9672 46.5196 32.4364 46.5196 32.7945 46.2731C36.8322 43.5501 41.2527 42.2686 45.3151 42.4288C45.9202 42.4534 46.4388 41.9729 46.4388 41.3691V29.5527C41.8824 29.2077 36.7581 30.7479 32.2018 34.1733Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear" x1="31.9848" y1="64.5485" x2="31.9848" y2="9.05001" gradientUnits="userSpaceOnUse">
<stop stop-color="#3A1E68"/>
<stop offset="0.25" stop-color="#422873"/>
<stop offset="0.7581" stop-color="#584290"/>
<stop offset="1" stop-color="#6450A1"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

+2 -2
View File
@@ -9,7 +9,7 @@
"utilities"
],
"description": "Tiny Go webserver that prints OS information and HTTP request to output.",
"tipi_version": 2,
"tipi_version": 1,
"version": "v1.11.0",
"source": "https://github.com/traefik/whoami",
"exposable": true,
@@ -18,7 +18,7 @@
"amd64"
],
"created_at": 1745082405284,
"updated_at": 1745674974072,
"updated_at": 1745082405284,
"dynamic_config": true,
"form_fields": []
}
-34
View File
@@ -1,34 +0,0 @@
services:
whoami:
image: traefik/whoami:v1.11.0
container_name: whoami
ports:
- ${APP_PORT}:80
networks:
- tipi_main_network
labels:
# Main
traefik.enable: true
traefik.http.middlewares.whoami-web-redirect.redirectscheme.scheme: https
traefik.http.services.whoami.loadbalancer.server.port: 80
# Web
traefik.http.routers.whoami-insecure.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.whoami-insecure.entrypoints: web
traefik.http.routers.whoami-insecure.service: whoami
traefik.http.routers.whoami-insecure.middlewares: whoami-web-redirect
# Websecure
traefik.http.routers.whoami.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.whoami.entrypoints: websecure
traefik.http.routers.whoami.service: whoami
traefik.http.routers.whoami.tls.certresolver: myresolver
# Local domain
traefik.http.routers.whoami-local-insecure.rule: Host(`whoami.${LOCAL_DOMAIN}`)
traefik.http.routers.whoami-local-insecure.entrypoints: web
traefik.http.routers.whoami-local-insecure.service: whoami
traefik.http.routers.whoami-local-insecure.middlewares: whoami-web-redirect
# Local domain secure
traefik.http.routers.whoami-local.rule: Host(`whoami.${LOCAL_DOMAIN}`)
traefik.http.routers.whoami-local.entrypoints: websecure
traefik.http.routers.whoami-local.service: whoami
traefik.http.routers.whoami-local.tls: true
runtipi.managed: true
BIN
View File
Binary file not shown.
-3
View File
@@ -1,3 +0,0 @@
export default {
allowedCommands: ["bun ./scripts/update-config.ts", "bun install && bun run test"],
};
+1 -4
View File
@@ -11,15 +11,12 @@
"author": "",
"license": "ISC",
"devDependencies": {
"@types/bun": "latest",
"@types/bun": "^1.2.10",
"@types/node": "^22.14.1"
},
"dependencies": {
"@runtipi/common": "^0.8.0",
"bun": "^1.2.10",
"zod-validation-error": "^3.4.0"
},
"peerDependencies": {
"typescript": "^5.0.0"
}
}
+4 -7
View File
@@ -1,14 +1,13 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"automerge": false,
"extends": [
"config:recommended"
],
"addLabels": [
"renovate"
],
"enabledManagers": ["regex"],
"automergeStrategy": "rebase",
"ignoreTests": true,
"customManagers": [
{
"customType": "regex",
@@ -25,18 +24,17 @@
{
"matchUpdateTypes": [
"minor",
"major",
"patch",
"pin",
"digest"
],
"automerge": false
"automerge": true
},
{
"matchDepTypes": [
"devDependencies"
],
"automerge": false
"automerge": true
},
{
"matchPackageNames": [
@@ -51,8 +49,7 @@
],
"postUpgradeTasks": {
"commands": [
"bun ./scripts/update-config.ts {{packageFile}} {{newVersion}}",
"bun install && bun run test"
"bun ./scripts/update-config.ts {{packageFile}} {{newVersion}}"
],
"fileFilters": [
"**/*"