From b15677e969e9c4cef0e316105f0f34a54d4c979e Mon Sep 17 00:00:00 2001 From: Osco Date: Wed, 4 Oct 2023 23:26:40 -0400 Subject: [PATCH 01/20] MongoDB and Mongo Express Initial Commit --- apps/mongo-express/config.json | 53 +++++++++++++++ apps/mongo-express/docker-compose.yml | 42 ++++++++++++ apps/mongo-express/metadata/description.md | 28 ++++++++ apps/mongo-express/metadata/logo.jpg | Bin 0 -> 13757 bytes apps/mongodb/config.json | 37 +++++++++++ apps/mongodb/docker-compose.yml | 38 +++++++++++ apps/mongodb/metadata/description.md | 74 +++++++++++++++++++++ apps/mongodb/metadata/logo.jpg | Bin 0 -> 37188 bytes 8 files changed, 272 insertions(+) create mode 100644 apps/mongo-express/config.json create mode 100644 apps/mongo-express/docker-compose.yml create mode 100644 apps/mongo-express/metadata/description.md create mode 100644 apps/mongo-express/metadata/logo.jpg create mode 100644 apps/mongodb/config.json create mode 100644 apps/mongodb/docker-compose.yml create mode 100644 apps/mongodb/metadata/description.md create mode 100644 apps/mongodb/metadata/logo.jpg diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json new file mode 100644 index 00000000..b19173e0 --- /dev/null +++ b/apps/mongo-express/config.json @@ -0,0 +1,53 @@ +{ + "$schema": "../schema.json", + "name": "Mongo Express", + "id": "mongo-express", + "available": true, + "short_desc": "Web-based MongoDB admin interface, written with Node.js and Express", + "author": "MongoDB", + "port": 8208, + "categories": [ + "development", + "data" + ], + "description": "A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3", + "tipi_version": 1, + "version": "1.0.0", + "source": "https://github.com/mongo-express/mongo-express", + "website": "https://www.mongodb.com/", + "exposable": true, + "form_fields": [ + { + "type": "text", + "label": "MongoDB Admin Username", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_MONGODB_ADMINUSERNAME" + }, + { + "type": "password", + "label": "MongoDB Admin Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_MONGODB_ADMINPASSWORD" + }, + { + "type": "text", + "label": "Mongo Express Web Username", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_BASICAUTH_USERNAME" + }, + { + "type": "password", + "label": "Mongo Express Web Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_BASICAUTH_PASSWORD" + } + ] +} \ No newline at end of file diff --git a/apps/mongo-express/docker-compose.yml b/apps/mongo-express/docker-compose.yml new file mode 100644 index 00000000..752f9c73 --- /dev/null +++ b/apps/mongo-express/docker-compose.yml @@ -0,0 +1,42 @@ +version: "3.8" +services: + mongo-express: + container_name: mongo-express + image: mongo-express:1.0.0 + restart: unless-stopped + ports: + - ${APP_PORT}:8081 + networks: + - tipi_main_network + environment: + - ME_CONFIG_MONGODB_SERVER=mongo + - ME_CONFIG_MONGODB_ENABLE_ADMIN=true + - ME_CONFIG_MONGODB_ADMINUSERNAME=${ME_CONFIG_MONGODB_ADMINUSERNAME} + - ME_CONFIG_MONGODB_ADMINPASSWORD=${ME_CONFIG_MONGODB_ADMINPASSWORD} + - ME_CONFIG_BASICAUTH_USERNAME=${ME_CONFIG_BASICAUTH_USERNAME} + - ME_CONFIG_BASICAUTH_PASSWORD=${ME_CONFIG_BASICAUTH_PASSWORD} + labels: + # Main + traefik.enable: true + traefik.http.middlewares.mongo-express-web-redirect.redirectscheme.scheme: https + traefik.http.services.mongo-express.loadbalancer.server.port: 8081 + # Web + traefik.http.routers.mongo-express-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongo-express-insecure.entrypoints: web + traefik.http.routers.mongo-express-insecure.service: mongo-express + traefik.http.routers.mongo-express-insecure.middlewares: mongo-express-web-redirect + # Websecure + traefik.http.routers.mongo-express.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongo-express.entrypoints: websecure + traefik.http.routers.mongo-express.service: mongo-express + traefik.http.routers.mongo-express.tls.certresolver: myresolver + # Local domain + traefik.http.routers.mongo-express-local-insecure.rule: Host(`mongo-express.${LOCAL_DOMAIN}`) + traefik.http.routers.mongo-express-local-insecure.entrypoints: web + traefik.http.routers.mongo-express-local-insecure.service: mongo-express + traefik.http.routers.mongo-express-local-insecure.middlewares: mongo-express-web-redirect + # Local domain secure + traefik.http.routers.mongo-express-local.rule: Host(`mongo-express.${LOCAL_DOMAIN}`) + traefik.http.routers.mongo-express-local.entrypoints: websecure + traefik.http.routers.mongo-express-local.service: mongo-express + traefik.http.routers.mongo-express-local.tls: true diff --git a/apps/mongo-express/metadata/description.md b/apps/mongo-express/metadata/description.md new file mode 100644 index 00000000..84fa25b5 --- /dev/null +++ b/apps/mongo-express/metadata/description.md @@ -0,0 +1,28 @@ +# mongo-express + +A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3 + +## Features +- Connect to multiple databases +- View/add/delete databases +- View/add/rename/delete collections +- View/add/update/delete documents +- Preview audio/video/image assets inline in the collection view +- Nested and/or large objects are collapsible for easy overview +- Async on-demand loading of big document properties (>100KB default) to keep collection view fast +- GridFS support - add/get/delete incredibly large files +- Use BSON data types in documents +- Mobile / Responsive - Bootstrap 3 works passably on small screens when you're in a bind +- Connect and authenticate to individual databases +- Authenticate as admin to view all databases +- Database blacklist/whitelist +- Custom CA and CA validation disabling +- Supports replica sets + +## Screenshots + +|Home Page|Database View|Collection View|Editing A Document| +|---|---|---|---| +|[![](https://camo.githubusercontent.com/bf9f84dbe8904f11cf1feee1257c384fc370f74b91aec78a27109466938c5676/687474703a2f2f692e696d6775722e636f6d2f58695968626c412e706e67 "Home Page showing databases")](https://camo.githubusercontent.com/bf9f84dbe8904f11cf1feee1257c384fc370f74b91aec78a27109466938c5676/687474703a2f2f692e696d6775722e636f6d2f58695968626c412e706e67)|[![](https://camo.githubusercontent.com/6933157b5afc955b83ed44edb82c87f9ce88e358515adc23d133cf7034dff0a1/687474703a2f2f692e696d6775722e636f6d2f585763496759312e706e67 "Viewing collections & buckets in a database")](https://camo.githubusercontent.com/6933157b5afc955b83ed44edb82c87f9ce88e358515adc23d133cf7034dff0a1/687474703a2f2f692e696d6775722e636f6d2f585763496759312e706e67)|[![](https://camo.githubusercontent.com/0d117c0fefa49f0f9d72d68633876694f6cc887915b26375375c073cc3b559d4/68747470733a2f2f696d6775722e636f6d2f556d47537233782e706e67 "Viewing documents in a collection")](https://camo.githubusercontent.com/0d117c0fefa49f0f9d72d68633876694f6cc887915b26375375c073cc3b559d4/68747470733a2f2f696d6775722e636f6d2f556d47537233782e706e67)|[![](https://camo.githubusercontent.com/7e5c4cea092e84aedb38a5a39acc86e4d69040a0fe8389ed22d705fc25833985/68747470733a2f2f696d6775722e636f6d2f6c4c333861626e2e706e67 "Editing a document")](https://camo.githubusercontent.com/7e5c4cea092e84aedb38a5a39acc86e4d69040a0fe8389ed22d705fc25833985/68747470733a2f2f696d6775722e636f6d2f6c4c333861626e2e706e67)| + +These screenshots are from version 0.30.40 View the album for more screenshots: (server status, database views, etc..) [https://imgur.com/a/9vHsF](https://imgur.com/a/9vHsF) \ No newline at end of file diff --git a/apps/mongo-express/metadata/logo.jpg b/apps/mongo-express/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c25cd38f2ae8064c1dab696b431b2d15d3c54f43 GIT binary patch literal 13757 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 literal 0 HcmV?d00001 diff --git a/apps/mongodb/config.json b/apps/mongodb/config.json new file mode 100644 index 00000000..5b81e5c2 --- /dev/null +++ b/apps/mongodb/config.json @@ -0,0 +1,37 @@ +{ + "$schema": "../schema.json", + "name": "MongoDB", + "id": "mongodb", + "available": true, + "short_desc": "MongoDB is an open-source NoSQL database", + "author": "MongoDB", + "port": 27017, + "categories": [ + "development", + "data" + ], + "description": "MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.", + "tipi_version": 1, + "version": "7.0.2", + "source": "https://github.com/mongodb/mongo", + "website": "https://www.mongodb.com/", + "exposable": true, + "form_fields": [ + { + "type": "text", + "label": "Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "MONGO_INITDB_ROOT_USERNAME" + }, + { + "type": "password", + "label": "Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "MONGO_INITDB_ROOT_PASSWORD" + } + ] +} diff --git a/apps/mongodb/docker-compose.yml b/apps/mongodb/docker-compose.yml new file mode 100644 index 00000000..94908978 --- /dev/null +++ b/apps/mongodb/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3.8" +services: + mongodb: + container_name: mongodb + image: mongo:7.0.2 + restart: unless-stopped + ports: + - ${APP_PORT}:27017 + networks: + - tipi_main_network + environment: + - MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME} + - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD} + labels: + # Main + traefik.enable: true + traefik.http.middlewares.mongodb-web-redirect.redirectscheme.scheme: https + traefik.http.services.mongodb.loadbalancer.server.port: 27017 + # Web + traefik.http.routers.mongodb-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongodb-insecure.entrypoints: web + traefik.http.routers.mongodb-insecure.service: mongodb + traefik.http.routers.mongodb-insecure.middlewares: mongodb-web-redirect + # Websecure + traefik.http.routers.mongodb.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongodb.entrypoints: websecure + traefik.http.routers.mongodb.service: mongodb + traefik.http.routers.mongodb.tls.certresolver: myresolver + # Local domain + traefik.http.routers.mongodb-local-insecure.rule: Host(`mongodb.${LOCAL_DOMAIN}`) + traefik.http.routers.mongodb-local-insecure.entrypoints: web + traefik.http.routers.mongodb-local-insecure.service: mongodb + traefik.http.routers.mongodb-local-insecure.middlewares: mongodb-web-redirect + # Local domain secure + traefik.http.routers.mongodb-local.rule: Host(`mongodb.${LOCAL_DOMAIN}`) + traefik.http.routers.mongodb-local.entrypoints: websecure + traefik.http.routers.mongodb-local.service: mongodb + traefik.http.routers.mongodb-local.tls: true diff --git a/apps/mongodb/metadata/description.md b/apps/mongodb/metadata/description.md new file mode 100644 index 00000000..dafaeec8 --- /dev/null +++ b/apps/mongodb/metadata/description.md @@ -0,0 +1,74 @@ +# MongoDB +MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.  + +The MongoDB database is developed and managed by MongoDB.Inc under SSPL(Server Side Public License) and initially released in February 2009. It also provides official driver support for all the popular languages like C, C++, C#, and .Net, Go, Java, Node.js, Perl, PHP, Python, Motor, Ruby, Scala, Swift, Mongoid. So, that you can create an application using any of these languages. Nowadays there are so many companies that used MongoDB like Facebook, Nokia, eBay, Adobe, Google, etc. to store their large amount of data.  + +## How it works ? + +Now, we will see how actually thing happens behind the scene. As we know that MongoDB is a database server and the data is stored in these databases. Or in other words, MongoDB environment gives you a server that you can start and then create multiple databases on it using MongoDB.  +Because of its NoSQL database, the data is stored in the collections and documents. Hence the database, collection, and documents are related to each other as shown below:  +  + +![mongodb-nosql-working](https://media.geeksforgeeks.org/wp-content/uploads/20200127193216/mongodb-nosql-working.jpg) + +- The MongoDB database contains collections just like the MYSQL database contains tables. You are allowed to create multiple databases and multiple collections. +- Now inside of the collection we have documents. These documents contain the data we want to store in the MongoDB database and a single collection can contain multiple documents and you are schema-less means it is not necessary that one document is similar to another. +- The documents are created using the fields. Fields are key-value pairs in the documents, it is just like columns in the relation database. The value of the fields can be of any BSON data types like double, string, boolean, etc. +- The data stored in the MongoDB is in the format of BSON documents. Here, BSON stands for Binary representation of JSON documents. Or in other words, in the backend, the MongoDB server converts the JSON data into a binary form that is known as BSON and this BSON is stored and queried more efficiently. +- In MongoDB documents, you are allowed to store nested data. This nesting of data allows you to create complex relations between data and store them in the same document which makes the working and fetching of data extremely efficient as compared to SQL. In SQL, you need to write complex joins to get the data from table 1 and table 2. The maximum size of the BSON document is 16MB. + +**NOTE:** In MongoDB server, you are allowed to run multiple databases.  + +For example, we have a database named GeeksforGeeks. Inside this database, we have two collections and in these collections we have two documents. And in these documents we store our data in the form of fields. As shown in the below image:  +  + +![](https://media.geeksforgeeks.org/wp-content/uploads/20200123222337/Untitled-Diagram-57.jpg) + +**How mongoDB is different from RDBMS ?**  +Some major differences in between MongoDB and the RDBMS are as follows:  +  + +|MongoDB|RDBMS| +|---|---| +|It is a non-relational and document-oriented database.|It is a relational database.| +|It is suitable for hierarchical data storage.|It is not suitable for hierarchical data storage.| +|It has a dynamic schema.|It has a predefined schema.| +|It centers around the CAP theorem (Consistency, Availability, and Partition tolerance).|It centers around ACID properties (Atomicity, Consistency, Isolation, and Durability).| +|In terms of performance, it is much faster than RDBMS.|In terms of performance, it is slower than MongoDB.| +||| + +## Features of MongoDB – + +- **Schema-less Database:** It is the great feature provided by the MongoDB. A Schema-less database means one collection can hold different types of documents in it. Or in other words, in the MongoDB database, a single collection can hold multiple documents and these documents may consist of the different numbers of fields, content, and size. It is not necessary that the one document is similar to another document like in the relational databases. Due to this cool feature, MongoDB provides great flexibility to databases. +- **Document Oriented:** In MongoDB, all the data stored in the documents instead of tables like in RDBMS. In these documents, the data is stored in fields(key-value pair) instead of rows and columns which make the data much more flexible in comparison to RDBMS. And each document contains its unique object id. +- **Indexing:** In MongoDB database, every field in the documents is indexed with primary and secondary indices this makes easier and takes less time to get or search data from the pool of the data. If the data is not indexed, then database search each document with the specified query which takes lots of time and not so efficient. +- **Scalability:** MongoDB provides horizontal scalability with the help of sharding. Sharding means to distribute data on multiple servers, here a large amount of data is partitioned into data chunks using the shard key, and these data chunks are evenly distributed across shards that reside across many physical servers. It will also add new machines to a running database. +- **Replication:** MongoDB provides high availability and redundancy with the help of replication, it creates multiple copies of the data and sends these copies to a different server so that if one server fails, then the data is retrieved from another server. +- **Aggregation:** It allows to perform operations on the grouped data and get a single result or computed result. It is similar to the SQL GROUPBY clause. It provides three different aggregations i.e, aggregation pipeline, map-reduce function, and single-purpose aggregation methods +- **High Performance:** The performance of MongoDB is very high and data persistence as compared to another database due to its features like scalability, indexing, replication, etc. + +**Advantages of MongoDB :**  +  + +- It is a schema-less NoSQL database. You need not to design the schema of the database when you are working with MongoDB. +- It does not support join operation. +- It provides great flexibility to the fields in the documents. +- It contains heterogeneous data. +- It provides high performance, availability, scalability. +- It supports Geospatial efficiently. +- It is a document oriented database and the data is stored in BSON documents. +- It also supports multiple document ACID transition(string from MongoDB 4.0). +- It does not require any SQL injection. +- It is easily integrated with Big Data Hadoop + +**Disadvantages of MongoDB :**  +  + +- It uses high memory for data storage. +- You are not allowed to store more than 16MB data in the documents. +- The nesting of data in BSON is also limited you are not allowed to nest data more than 100 levels. + +## Learn MongoDB +- Documentation - [https://docs.mongodb.com/manual/](https://docs.mongodb.com/manual/) +- Developer Center - [https://www.mongodb.com/developer/](https://www.mongodb.com/developer/) +- MongoDB University - [https://learn.mongodb.com](https://learn.mongodb.com/) \ No newline at end of file diff --git a/apps/mongodb/metadata/logo.jpg b/apps/mongodb/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d06672de8ea3e3e485171ed9187aec3c67ef2a2 GIT binary patch literal 37188 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 GfdAPoAH8(| literal 0 HcmV?d00001 From 97a58052a79ce312a1a4a4689d60557a0ce1c83d Mon Sep 17 00:00:00 2001 From: Osco Date: Wed, 4 Oct 2023 23:40:22 -0400 Subject: [PATCH 02/20] Update Config Params --- README.md | 4 +++- apps/mongo-express/config.json | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6a93225e..112dd1df 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,9 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Monica](https://github.com/monicahq/monica) - A Personal Relationship Management tool to help you document your social life - [Mixpost](https://github.com/inovector/mixpost) - Self-hosted social media management. Schedule and organize your social content. - [Mixpost Pro](https://mixpost.app/pricing) - Self-hosted social media management. Schedule and organize your social content. -- [Movary](https://github.com/leepeuker/movary - ) Track and rate your watched movies +- [MongoDB](https://github.com/mongodb/mongo)- MongoDB is an open-source NoSQL database +- [Mongo Express](https://github.com/mongo-express/mongo-express) - A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3 +- [Movary](https://github.com/leepeuker/movary ) - Track and rate your watched movies - [mStream](https://github.com/IrosTheBeggar/mStream) - The easiest music streaming server available - [Mylar3](https://github.com/mylar3/mylar3) - Mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. - [n8n](https://github.com/n8n-io/n8n) - Workflow Automation Tool diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json index b19173e0..3f58276f 100644 --- a/apps/mongo-express/config.json +++ b/apps/mongo-express/config.json @@ -5,7 +5,7 @@ "available": true, "short_desc": "Web-based MongoDB admin interface, written with Node.js and Express", "author": "MongoDB", - "port": 8208, + "port": 8087, "categories": [ "development", "data" @@ -16,12 +16,13 @@ "source": "https://github.com/mongo-express/mongo-express", "website": "https://www.mongodb.com/", "exposable": true, + "no_gui": true, "form_fields": [ { "type": "text", "label": "MongoDB Admin Username", "max": 50, - "min": 10, + "min": 3, "required": true, "env_variable": "ME_CONFIG_MONGODB_ADMINUSERNAME" }, @@ -37,7 +38,7 @@ "type": "text", "label": "Mongo Express Web Username", "max": 50, - "min": 10, + "min": 3, "required": true, "env_variable": "ME_CONFIG_BASICAUTH_USERNAME" }, From 3df7f3beb2029703fc73c389e0a03f4b1d9801af Mon Sep 17 00:00:00 2001 From: Osco Date: Wed, 4 Oct 2023 23:52:57 -0400 Subject: [PATCH 03/20] rename to mongo --- apps/mongodb/config.json | 4 ++-- apps/mongodb/docker-compose.yml | 40 ++++++++++++++++----------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/apps/mongodb/config.json b/apps/mongodb/config.json index 5b81e5c2..8aa6b73f 100644 --- a/apps/mongodb/config.json +++ b/apps/mongodb/config.json @@ -19,7 +19,7 @@ "form_fields": [ { "type": "text", - "label": "Username", + "label": "Admin Username", "max": 50, "min": 3, "required": true, @@ -27,7 +27,7 @@ }, { "type": "password", - "label": "Password", + "label": "Admin Password", "max": 50, "min": 10, "required": true, diff --git a/apps/mongodb/docker-compose.yml b/apps/mongodb/docker-compose.yml index 94908978..576e2ba6 100644 --- a/apps/mongodb/docker-compose.yml +++ b/apps/mongodb/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.8" services: - mongodb: - container_name: mongodb + mongo: + container_name: mongo image: mongo:7.0.2 restart: unless-stopped ports: @@ -14,25 +14,25 @@ services: labels: # Main traefik.enable: true - traefik.http.middlewares.mongodb-web-redirect.redirectscheme.scheme: https - traefik.http.services.mongodb.loadbalancer.server.port: 27017 + traefik.http.middlewares.mongo-web-redirect.redirectscheme.scheme: https + traefik.http.services.mongo.loadbalancer.server.port: 27017 # Web - traefik.http.routers.mongodb-insecure.rule: Host(`${APP_DOMAIN}`) - traefik.http.routers.mongodb-insecure.entrypoints: web - traefik.http.routers.mongodb-insecure.service: mongodb - traefik.http.routers.mongodb-insecure.middlewares: mongodb-web-redirect + traefik.http.routers.mongo-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongo-insecure.entrypoints: web + traefik.http.routers.mongo-insecure.service: mongo + traefik.http.routers.mongo-insecure.middlewares: mongo-web-redirect # Websecure - traefik.http.routers.mongodb.rule: Host(`${APP_DOMAIN}`) - traefik.http.routers.mongodb.entrypoints: websecure - traefik.http.routers.mongodb.service: mongodb - traefik.http.routers.mongodb.tls.certresolver: myresolver + traefik.http.routers.mongo.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mongo.entrypoints: websecure + traefik.http.routers.mongo.service: mongo + traefik.http.routers.mongo.tls.certresolver: myresolver # Local domain - traefik.http.routers.mongodb-local-insecure.rule: Host(`mongodb.${LOCAL_DOMAIN}`) - traefik.http.routers.mongodb-local-insecure.entrypoints: web - traefik.http.routers.mongodb-local-insecure.service: mongodb - traefik.http.routers.mongodb-local-insecure.middlewares: mongodb-web-redirect + traefik.http.routers.mongo-local-insecure.rule: Host(`mongo.${LOCAL_DOMAIN}`) + traefik.http.routers.mongo-local-insecure.entrypoints: web + traefik.http.routers.mongo-local-insecure.service: mongo + traefik.http.routers.mongo-local-insecure.middlewares: mongo-web-redirect # Local domain secure - traefik.http.routers.mongodb-local.rule: Host(`mongodb.${LOCAL_DOMAIN}`) - traefik.http.routers.mongodb-local.entrypoints: websecure - traefik.http.routers.mongodb-local.service: mongodb - traefik.http.routers.mongodb-local.tls: true + traefik.http.routers.mongo-local.rule: Host(`mongo.${LOCAL_DOMAIN}`) + traefik.http.routers.mongo-local.entrypoints: websecure + traefik.http.routers.mongo-local.service: mongo + traefik.http.routers.mongo-local.tls: true From e2b060b6ff069ba3249a0d3cf097c9f3f0d0ec04 Mon Sep 17 00:00:00 2001 From: Osco Date: Thu, 5 Oct 2023 10:05:58 -0400 Subject: [PATCH 04/20] update tipi version --- apps/mongo-express/config.json | 2 +- apps/mongodb/config.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json index 3f58276f..3c963fc2 100644 --- a/apps/mongo-express/config.json +++ b/apps/mongo-express/config.json @@ -11,7 +11,7 @@ "data" ], "description": "A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3", - "tipi_version": 1, + "tipi_version": 2, "version": "1.0.0", "source": "https://github.com/mongo-express/mongo-express", "website": "https://www.mongodb.com/", diff --git a/apps/mongodb/config.json b/apps/mongodb/config.json index 8aa6b73f..ee54ca33 100644 --- a/apps/mongodb/config.json +++ b/apps/mongodb/config.json @@ -11,7 +11,7 @@ "data" ], "description": "MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.", - "tipi_version": 1, + "tipi_version": 2, "version": "7.0.2", "source": "https://github.com/mongodb/mongo", "website": "https://www.mongodb.com/", From 007da3662b11c5080fd791692557aafb2f169682 Mon Sep 17 00:00:00 2001 From: Osco Date: Thu, 5 Oct 2023 10:19:52 -0400 Subject: [PATCH 05/20] revert tipi version --- apps/mongo-express/config.json | 3 +-- apps/mongodb/config.json | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json index 3c963fc2..f0ed50fe 100644 --- a/apps/mongo-express/config.json +++ b/apps/mongo-express/config.json @@ -11,11 +11,10 @@ "data" ], "description": "A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3", - "tipi_version": 2, + "tipi_version": 1, "version": "1.0.0", "source": "https://github.com/mongo-express/mongo-express", "website": "https://www.mongodb.com/", - "exposable": true, "no_gui": true, "form_fields": [ { diff --git a/apps/mongodb/config.json b/apps/mongodb/config.json index ee54ca33..3b7c3d11 100644 --- a/apps/mongodb/config.json +++ b/apps/mongodb/config.json @@ -11,11 +11,12 @@ "data" ], "description": "MongoDB is an open-source document-oriented database that is designed to store a large scale of data and also allows you to work with that data very efficiently. It is categorized under the NoSQL (Not only SQL) database because the storage and retrieval of data in the MongoDB are not in the form of tables.", - "tipi_version": 2, + "tipi_version": 1, "version": "7.0.2", "source": "https://github.com/mongodb/mongo", "website": "https://www.mongodb.com/", "exposable": true, + "no_gui": true, "form_fields": [ { "type": "text", From 48a333350b353fefbf6b1772e2029cbe1cc87365 Mon Sep 17 00:00:00 2001 From: Osco Date: Thu, 5 Oct 2023 10:30:18 -0400 Subject: [PATCH 06/20] update gist link for owncast documentation --- apps/owncast/metadata/description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/owncast/metadata/description.md b/apps/owncast/metadata/description.md index 4d8d847c..e9a27f10 100755 --- a/apps/owncast/metadata/description.md +++ b/apps/owncast/metadata/description.md @@ -4,7 +4,7 @@ ### Setting Up an Exposed Instance with SSL Certs As Owncast uses the RTMP protocol for ingesting incoming streams, the typical Cloudflare Zero Access configuration will not work as it does not have RTMP as an option for routing. -You can optionally follow [this guide](https://gist.github.com/HeyOsco/6e8102d7d82ffaeaae16f41bef98b739) for setting up an exposed Owncast server with your RunTipi instance. +You can optionally follow [this guide](https://gist.github.com/oscoDOTblog/6e8102d7d82ffaeaae16f41bef98b739) for setting up an exposed Owncast server with your RunTipi instance. ### Admin Dashboard Access From db302bd112109513e7f230f51e0d8cd1a9ad0b3a Mon Sep 17 00:00:00 2001 From: Osco Date: Thu, 5 Oct 2023 10:32:10 -0400 Subject: [PATCH 07/20] rename appid to mongo --- apps/{mongodb => mongo}/config.json | 2 +- apps/{mongodb => mongo}/docker-compose.yml | 0 apps/{mongodb => mongo}/metadata/description.md | 0 apps/{mongodb => mongo}/metadata/logo.jpg | Bin 4 files changed, 1 insertion(+), 1 deletion(-) rename apps/{mongodb => mongo}/config.json (98%) rename apps/{mongodb => mongo}/docker-compose.yml (100%) rename apps/{mongodb => mongo}/metadata/description.md (100%) rename apps/{mongodb => mongo}/metadata/logo.jpg (100%) diff --git a/apps/mongodb/config.json b/apps/mongo/config.json similarity index 98% rename from apps/mongodb/config.json rename to apps/mongo/config.json index 3b7c3d11..d8da7ade 100644 --- a/apps/mongodb/config.json +++ b/apps/mongo/config.json @@ -1,7 +1,7 @@ { "$schema": "../schema.json", "name": "MongoDB", - "id": "mongodb", + "id": "mongo", "available": true, "short_desc": "MongoDB is an open-source NoSQL database", "author": "MongoDB", diff --git a/apps/mongodb/docker-compose.yml b/apps/mongo/docker-compose.yml similarity index 100% rename from apps/mongodb/docker-compose.yml rename to apps/mongo/docker-compose.yml diff --git a/apps/mongodb/metadata/description.md b/apps/mongo/metadata/description.md similarity index 100% rename from apps/mongodb/metadata/description.md rename to apps/mongo/metadata/description.md diff --git a/apps/mongodb/metadata/logo.jpg b/apps/mongo/metadata/logo.jpg similarity index 100% rename from apps/mongodb/metadata/logo.jpg rename to apps/mongo/metadata/logo.jpg From c24fa98911703427c28e631057e47a8f366915cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:36:13 +0000 Subject: [PATCH 08/20] chore(deps): update tooljet/tooljet-server-ce docker tag to v2.19.2 (#1352) --- apps/tooljet/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tooljet/docker-compose.yml b/apps/tooljet/docker-compose.yml index 2a6ba2f7..883282d8 100644 --- a/apps/tooljet/docker-compose.yml +++ b/apps/tooljet/docker-compose.yml @@ -44,7 +44,7 @@ services: tooljet-server: container_name: tooljet-server - image: tooljet/tooljet-server-ce:v2.19.1 + image: tooljet/tooljet-server-ce:v2.19.2 tty: true stdin_open: true restart: always From 8252cf91b7cc2a4d201921e4be4b923cd934957c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:37:22 +0000 Subject: [PATCH 09/20] chore(deps): update ghcr.io/dgtlmoon/changedetection.io docker tag to v0.45.3 (#1351) --- apps/changedetection/config.json | 34 ++++++++++++------------- apps/changedetection/docker-compose.yml | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/changedetection/config.json b/apps/changedetection/config.json index 307abab1..8a0e3e32 100644 --- a/apps/changedetection/config.json +++ b/apps/changedetection/config.json @@ -1,18 +1,18 @@ { - "name": "ChangeDetection", - "available": true, - "port": 8257, - "exposable": true, - "id": "changedetection", - "description": "The best and simplest free open source website change detection, restock monitor and notification service.", - "tipi_version": 1, - "version": "0.45.2", - "categories": [ - "utilities" - ], - "short_desc": "Website change detection.", - "author": "dgtlmoon", - "source": "https://github.com/dgtlmoon/changedetection.io", - "website": "https://changedetection.io/", - "form_fields": [] -} \ No newline at end of file + "name": "ChangeDetection", + "available": true, + "port": 8257, + "exposable": true, + "id": "changedetection", + "description": "The best and simplest free open source website change detection, restock monitor and notification service.", + "tipi_version": 2, + "version": "0.45.3", + "categories": [ + "utilities" + ], + "short_desc": "Website change detection.", + "author": "dgtlmoon", + "source": "https://github.com/dgtlmoon/changedetection.io", + "website": "https://changedetection.io/", + "form_fields": [] +} diff --git a/apps/changedetection/docker-compose.yml b/apps/changedetection/docker-compose.yml index f14fd078..03e03888 100644 --- a/apps/changedetection/docker-compose.yml +++ b/apps/changedetection/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: changedetection: - image: ghcr.io/dgtlmoon/changedetection.io:0.45.2 + image: ghcr.io/dgtlmoon/changedetection.io:0.45.3 container_name: changedetection hostname: changedetection volumes: From 4e1cd31287d0b065b3633f8143353c1403260fbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:05:28 +0000 Subject: [PATCH 10/20] chore(deps): update ghcr.io/ignisda/ryot docker tag to v2.21.1 (#1353) --- apps/ryot/config.json | 4 ++-- apps/ryot/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/ryot/config.json b/apps/ryot/config.json index 7bc1db52..d617e690 100644 --- a/apps/ryot/config.json +++ b/apps/ryot/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ryot", - "tipi_version": 21, - "version": "2.21.0", + "tipi_version": 22, + "version": "2.21.1", "categories": [ "media" ], diff --git a/apps/ryot/docker-compose.yml b/apps/ryot/docker-compose.yml index 4c18ca24..64b7d5e4 100644 --- a/apps/ryot/docker-compose.yml +++ b/apps/ryot/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: ryot: - image: ghcr.io/ignisda/ryot:v2.21.0 + image: ghcr.io/ignisda/ryot:v2.21.1 container_name: ryot environment: - DATABASE_URL=postgres://tipi:${RYOT_DB_PASSWORD}@ryot-db:5432/ryot From 53075be8bdd52f64beffa76f8c1418feb433767c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:05:42 +0000 Subject: [PATCH 11/20] chore(deps): update neosmemo/memos docker tag to v0.16.0 (#1354) --- apps/memos/config.json | 4 ++-- apps/memos/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/memos/config.json b/apps/memos/config.json index 0d2626d2..ced9ef55 100644 --- a/apps/memos/config.json +++ b/apps/memos/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 5230, "id": "memos", - "tipi_version": 16, - "version": "0.15.2", + "tipi_version": 17, + "version": "0.16.0", "categories": [ "utilities" ], diff --git a/apps/memos/docker-compose.yml b/apps/memos/docker-compose.yml index 30a56787..ea5b691f 100644 --- a/apps/memos/docker-compose.yml +++ b/apps/memos/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: memos: - image: neosmemo/memos:0.15.2 + image: neosmemo/memos:0.16.0 container_name: memos volumes: - ${APP_DATA_DIR}/memos:/var/opt/memos From de9a9879469a81e32d8523497d3116331f967146 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 22:57:08 +0000 Subject: [PATCH 12/20] chore(deps): update leepeuker/movary docker tag to v0.59.0 (#1355) --- apps/movary/config.json | 4 ++-- apps/movary/docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/movary/config.json b/apps/movary/config.json index 20399147..980b98a8 100644 --- a/apps/movary/config.json +++ b/apps/movary/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "movary", - "tipi_version": 25, - "version": "0.58.0", + "tipi_version": 26, + "version": "0.59.0", "categories": [ "media" ], diff --git a/apps/movary/docker-compose.yml b/apps/movary/docker-compose.yml index e9d371c2..5d5a396b 100644 --- a/apps/movary/docker-compose.yml +++ b/apps/movary/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: movary: - image: leepeuker/movary:0.58.0 + image: leepeuker/movary:0.59.0 container_name: movary user: ${TIPI_UID}:${TIPI_GID} group_add: @@ -56,7 +56,7 @@ services: traefik.http.routers.movary-local.tls: true movary-migration: - image: leepeuker/movary:0.58.0 + image: leepeuker/movary:0.59.0 container_name: movary-migration command: php bin/console.php database:migration:migrate user: ${TIPI_UID}:${TIPI_GID} From 92dd5f604b099d70124bea5f753252bcaa71b43b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 16:59:40 +0000 Subject: [PATCH 13/20] chore(deps): update codeberg.org/forgejo/forgejo docker tag to v1.20.5 (#1356) --- apps/forgejo/config.json | 4 ++-- apps/forgejo/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/forgejo/config.json b/apps/forgejo/config.json index 6d2df1ca..a70df637 100644 --- a/apps/forgejo/config.json +++ b/apps/forgejo/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "forgejo", - "tipi_version": 7, - "version": "1.20.4-0", + "tipi_version": 8, + "version": "1.20.5-0", "categories": [ "development" ], diff --git a/apps/forgejo/docker-compose.yml b/apps/forgejo/docker-compose.yml index bb3f902a..1164e81c 100644 --- a/apps/forgejo/docker-compose.yml +++ b/apps/forgejo/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.7' services: forgejo: - image: codeberg.org/forgejo/forgejo:1.20.4-0 + image: codeberg.org/forgejo/forgejo:1.20.5-0 container_name: forgejo environment: - USER_UID=1000 From c3e74223134f70f572c680b9ffe7405ba8625b96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:45:47 +0000 Subject: [PATCH 14/20] chore(deps): update budibase/budibase docker tag to v2.11.15 (#1357) --- apps/budibase/config.json | 4 ++-- apps/budibase/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/budibase/config.json b/apps/budibase/config.json index 15d94d8d..9e050bf7 100644 --- a/apps/budibase/config.json +++ b/apps/budibase/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "budibase", - "tipi_version": 14, - "version": "2.11.8", + "tipi_version": 15, + "version": "2.11.15", "categories": [ "development" ], diff --git a/apps/budibase/docker-compose.yml b/apps/budibase/docker-compose.yml index 1f6b016b..bfcdf8c0 100644 --- a/apps/budibase/docker-compose.yml +++ b/apps/budibase/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: budibase: - image: budibase/budibase:2.11.8 + image: budibase/budibase:2.11.15 restart: unless-stopped container_name: budibase ports: From 341fb77c31957cc76f6199b38836e41b358615db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 21:53:02 +0000 Subject: [PATCH 15/20] chore(deps): update ghost docker tag to v5.67.0 (#1358) --- apps/ghost/config.json | 4 ++-- apps/ghost/docker-compose.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/ghost/config.json b/apps/ghost/config.json index b4015d8e..2355092a 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 51, - "version": "5.66.1", + "tipi_version": 52, + "version": "5.67.0", "categories": [ "social", "media" diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index 8a29896c..0eb4c0f5 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: ghost: - image: ghost:5.66.1 + image: ghost:5.67.0 container_name: ghost depends_on: - ghostdb From 71f7728f091d578b97fdf21dcbd514a4eb153af4 Mon Sep 17 00:00:00 2001 From: jonnymacbean <75743578+jonnymacbean@users.noreply.github.com> Date: Wed, 27 Sep 2023 16:34:01 +0100 Subject: [PATCH 16/20] add kwiix-serve files --- apps/kiwix-serve/config.json | 19 +++++++++++ apps/kiwix-serve/docker-compose.yml | 39 +++++++++++++++++++++++ apps/kiwix-serve/metadata/description.md | 1 + apps/kiwix-serve/metadata/logo.jpg | Bin 0 -> 12163 bytes 4 files changed, 59 insertions(+) create mode 100644 apps/kiwix-serve/config.json create mode 100644 apps/kiwix-serve/docker-compose.yml create mode 100644 apps/kiwix-serve/metadata/description.md create mode 100644 apps/kiwix-serve/metadata/logo.jpg diff --git a/apps/kiwix-serve/config.json b/apps/kiwix-serve/config.json new file mode 100644 index 00000000..35898c4c --- /dev/null +++ b/apps/kiwix-serve/config.json @@ -0,0 +1,19 @@ +{ + "$schema": "../schema.json", + "name": "Kiwix Serve", + "port": 8080, + "available": true, + "exposable": true, + "id": "kiwix-serve", + "tipi_version": 1, + "version": "3.5.0-2", + "categories": [ + "media" + ], + "description": "Kiwix Serve is a web server for hosting .zim files", + "short_desc": "Kiwix Serve is a web server for hosting .zim files", + "author": "Kiwix", + "source": "https://github.com/kiwix/kiwix-tools/", + "website": "https://kiwix.org/", + "form_fields": [] +} \ No newline at end of file diff --git a/apps/kiwix-serve/docker-compose.yml b/apps/kiwix-serve/docker-compose.yml new file mode 100644 index 00000000..7c349984 --- /dev/null +++ b/apps/kiwix-serve/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.9" + +services: + kiwix-serve: + container_name: kiwix-serve + image: ghcr.io/kiwix/kiwix-serve:3.5.0-2 + ports: + - ${APP_PORT}:8080 + volumes: + - ${APP_DATA_DIR}/zim:/data + command: '*.zim' + restart: unless-stopped + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.kiwix-serve-web-redirect.redirectscheme.scheme: https + traefik.http.services.kiwix-serve.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.kiwix-serve-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.kiwix-serve-insecure.entrypoints: web + traefik.http.routers.kiwix-serve-insecure.service: kiwix-serve + traefik.http.routers.kiwix-serve-insecure.middlewares: kiwix-serve-web-redirect + # Websecure + traefik.http.routers.kiwix-serve.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.kiwix-serve.entrypoints: websecure + traefik.http.routers.kiwix-serve.service: kiwix-serve + traefik.http.routers.kiwix-serve.tls.certresolver: myresolver + # Local domain + traefik.http.routers.kiwix-serve-local-insecure.rule: Host(`kiwix-serve.${LOCAL_DOMAIN}`) + traefik.http.routers.kiwix-serve-local-insecure.entrypoints: web + traefik.http.routers.kiwix-serve-local-insecure.service: kiwix-serve + traefik.http.routers.kiwix-serve-local-insecure.middlewares: kiwix-serve-web-redirect + # Local domain secure + traefik.http.routers.kiwix-serve-local.rule: Host(`kiwix-serve.${LOCAL_DOMAIN}`) + traefik.http.routers.kiwix-serve-local.entrypoints: websecure + traefik.http.routers.kiwix-serve-local.service: kiwix-serve + traefik.http.routers.kiwix-serve-local.tls: true diff --git a/apps/kiwix-serve/metadata/description.md b/apps/kiwix-serve/metadata/description.md new file mode 100644 index 00000000..30404ce4 --- /dev/null +++ b/apps/kiwix-serve/metadata/description.md @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/apps/kiwix-serve/metadata/logo.jpg b/apps/kiwix-serve/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f31a9e0c3bdce49488796765c427a6ba22cd75fc GIT binary patch literal 12163 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

AzBRaLY9Ji^%xk{ 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 Date: Wed, 27 Sep 2023 20:54:27 +0100 Subject: [PATCH 17/20] added description --- apps/kiwix-serve/config.json | 6 ++--- apps/kiwix-serve/metadata/description.md | 27 ++++++++++++++++++++++- apps/kiwix-serve/metadata/logo.jpg | Bin 12163 -> 26000 bytes 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/apps/kiwix-serve/config.json b/apps/kiwix-serve/config.json index 35898c4c..c6f7140d 100644 --- a/apps/kiwix-serve/config.json +++ b/apps/kiwix-serve/config.json @@ -1,6 +1,6 @@ { "$schema": "../schema.json", - "name": "Kiwix Serve", + "name": "Kiwix Server", "port": 8080, "available": true, "exposable": true, @@ -10,8 +10,8 @@ "categories": [ "media" ], - "description": "Kiwix Serve is a web server for hosting .zim files", - "short_desc": "Kiwix Serve is a web server for hosting .zim files", + "description": "Kiwix Server is a web server for hosting .zim files", + "short_desc": "Kiwix Server is a web server for hosting .zim files", "author": "Kiwix", "source": "https://github.com/kiwix/kiwix-tools/", "website": "https://kiwix.org/", diff --git a/apps/kiwix-serve/metadata/description.md b/apps/kiwix-serve/metadata/description.md index 30404ce4..eab0c153 100644 --- a/apps/kiwix-serve/metadata/description.md +++ b/apps/kiwix-serve/metadata/description.md @@ -1 +1,26 @@ -TODO \ No newline at end of file +# Kiwix Server + +Kiwix Server is a .zim compatible web server: it allows you to deliver .zim files over the HTTP protocol within your local network – be it a University or your own house. Simply start Kiwix-Serve on your machine, and your content will be available for anybody through their web browser. This allows you to view a website without having internet access. + + +**Ensure that your there are .zim files in the `${APP_DATA_DIR}/zim` directory otherwise the server won't launch properly and will need to be restarted** + +For doumentation see [the Kiwix wiki](https://wiki.kiwix.org/wiki/Kiwix-serve) + +## Features + +* Full text search engine +* Search suggestions +* Really small and efficient +* Compatible with almost all browsers +* Available on all platforms +* Available as command line executable +* Embedded in Kiwix UI +* Able to deal with one ZIM file or XML library files +* [RESTful API endpoint with OPDS (XML)](https://wiki.kiwix.org/wiki/OPDS) + +## What are ZIM files? + +The ZIM file format is an open file format that stores wiki content for offline usage. The format is defined by the openZIM project, which also supports an Kiwix. The format is primarily used to store the contents of Wikipedia and other Wikimedia projects, including articles, full-text search indices and auxiliary files. + +Download ZIM files from the [Kiwix library](https://library.kiwix.org/#lang=eng), or create your own (see [Zimit](https://www.youzim.it/)) \ No newline at end of file diff --git a/apps/kiwix-serve/metadata/logo.jpg b/apps/kiwix-serve/metadata/logo.jpg index f31a9e0c3bdce49488796765c427a6ba22cd75fc..588df3e83402892660358562f4c3677fbd8e10a3 100644 GIT binary patch literal 26000 zcmeFZdpuNY|35r(CQZ&ErXngyNfa`bBuOf}Bxx$iDI`RUSw#pTI;g}bNhc=favI|_ zA;}@fm_c&LFyk;5vu1g&_I>Yt?|Xmm`}@70@AEvb=l926wPvmvYpv^ZeXh^-IlMog zYZf~f`?08bpxXru#@ZUQ0fWJaVMGOFFoK{Z0RCYFlrh4;wlSD<0xG|^-38YD{hB4< z8a)hn#mIs4@)Fs9+#BhJ5&HYR5#asju^*h^segOd+pM?MX!8yuJ;PO742<+Pg9ZkJ zy^X<$f-8hJ>*;N|E%@7$1$NyQ`n~2$ z|0Tsl#D4$&KW;4cg1CCsVg*K8Yzc_S1qIe%mPiW-N((Gj3p@ouzVP2D{EY#CP9b3t zQ894|NdN>02nsF{5)>8|0$_tc$j@+JNLpBC^_JZtvPaH}uJMu6yPohwOnpxdP5x*z zTVw0F%c0^D3W_U~l-Fu%ty{lAf182f_8mrMd(HP*?6*8%`^&N8b|>slI-PgE;Nt4$ z?(64&B_Qx>P}q&|h{&5!(TR8N-n*al;NhdE>CZBrXTEs(DmO2`ps?uO`{K%~>Y7^m zhr0Tf*0wM09i3g>{R4yFhQ1GvjE-@pre|ikbMX8Ez!v^C9Ps+L5&dC20L&0rA|xaz zB>Hna0!sqGDJU%@yn2g>%a-S0nm;K);V?u^Y2gPykGrpfm=LLD6+jqcQ(~o{OLV51^s>{{R|V{tuv` z^*^NHxtC4JBPYxJ0OZ9I_YK%BA&Z#FJC@&TjSauKE~$~1Fd{Evj&Imi&+z*!_~QR% z0b6YQZ-~rxsV-m7ZVJs;p~?l)4;QrLmzi$e`K9;kYvEF9%JD>t)zTI(w;|6LF|^%O z<^;aeg6r%-U4qsX`V!qadw1OW+GWYrS+ZU`9vF7|vul zE@Fg_E@DE1NY$pE6qYW>qY7QwcIK#q70;$;n<;*@zSGiY5fdjs7;4~of^MoA>|dxo zA=xto8Dv*-1*%m1mD*{F?S0lgf1Y2r*22&hdqkrqmtuB;~1%ix^jYI7yCkaTPK(Dtl_ALm1Dz zFlMrdsn|vNI@v`*v65iY&J$1Gm(m^#kBlmp@7rIYU&M8?ZS63-S3|Mzi zGWNwr#Bz=52K!~(!;bD+P3IGJ-p`0oGj?u0-ny;KK+4AAUEKHfeue$cHzMQqcb=C! zOFL>Ly-VenBjy;n|A!~E_~l5oN%TK3WhDrc=BiB%mKF@YchDp?J-+AlBYU+NF8i zv&m&(s22ZaX$GW_*R-vzac5Ohz>afQHBx5;7On${UIx0ZB=r*5wl?yXFGwwF8-4me z3{77w)y=rjv^RfPJLZzjqlRwFZp)pV8j?famLJwnuSu-?_vgwtwi6vc$cStaD(L|_ z5C9#xjkR;BONgfz;&0rmvgzOH>pu~@=9|lT^RS*fe4a~G+2!q&53kk<^4;;w`&72C z;W!@LDV}5lpXI0>gRMAvlNT-1Jq)$ElA~|8=ajFOt~1%FcQd0&43`C2*4JA!5SWUI zrFOGBfON!w<&uVXr*!I%LL!S8w~kUci~U^cEnTX*t3&@m5H{!Q2Pjy1+5Og(cLGj< zH5lmC7x^iRaev-L^dqB)OzXkN;d48pvrKHBoVvcUQaADYC*paUzaVK!++t4EV&$!u zBIQMCOQP5PuTSh^`=7<8v}9ni28zT9pvoT973I1f3Vmv9dc^oQYMZ}gVV6|C^wRrY z!=KlEdn~L}gSm{$C$qHJHr(B?ZZ_#NK3}cOv!5&uUtxSIDSOB2QjfK0)JR;Z;ghzB zbxjz$i$@gbs3eusgG#&~>@tx}Q;8QNsx(gojH)SPr+bY;dK&jq8Z?ICHQ(2Xir;yN z6GbIs!4$lJpMX~aJk|b4BgsgsQdjb;5lq-~h2}d4k)X}m zk@&$`NBT9>RWPI9B37SzlPcx!Q6_r2*-K`s>hRl#SreX_w}v#L_tN&M-UOPi{FKvB zrrne*5F=qAMu{dmJin?8(g#Li!BA>AC;W)#OqShHVGhSs6theQD9{u8WSl;pz?a}& zP>V#7mEz#Wa()=at5ln#J+RbNgLCZRI#iAQO6nwE)?otjfEIC*!g z7H}*#_MihCY(mx^JGr+m+ifJoaf@&z_PnL`!p{pmCxLP3WMAb_$Fm0cDz#kcSM!Xn zys({x6QRLZdQ3#S_nyQo)JA)I-%r^kEO+ETI&q5~|GY>%RMWSi1Tx!C3sESy=`kFX zY8v0lGaQ3B?k1waMaN4Epk9xK#vIxX9I53qay$Or)c4c7Zp4q~q01tG7RslN%k#A8 zJOiRiTX`MFY~V|N``bo=>h9wa_yB)DFVnCx$Z}aB1;q`>n?|bPZnC0;g7UFcZhL#fSV}2 zta&VHl)#KzW@I-(K%^T`$veFLz&F!E*Y1AaX=xaZ%DE@)o^2Ah)~cJn)M2nRu&7wD zb(#NQgQ$~TQ@ma_>dal}O;M`p+a~e( z(_80A54Oz={YSPI`eW>)9S$c90*3}!2Zv-KhvDlXY7d_TUalNI+O}z^Ux%fmu4lEH zyZ5L^F=cQL#R~Gv*1`fj>g2%6-Z4f;|gfQ`Gn6_yP$~HZQ7k@xm}K#wXE5_OSY>`1Lj>E&rIn z-zM@uewQD`EhQ-s&EeL;UafxbO6z63>Qwa(FX89p=cAwV=M=XZvgyi8Q}L_o2CkX( zMWdb6a|C#+7WXck^5kS-1GkeiORhTqZnqX!A;D`~h@}9kl+kxTXZwuVHqz@;VA}2y z-bS_DFd)m92CI(Xeh_#&2AcT3ybT;y`89l_S~OaX_x6Uj4st*9$uruMH_5qLQ5VrI zqsOD2Lo^%~F&8|pW11$OxFky65@^=2*eSEMg_?j}?h3SR__o&+DfsCpPyFGW1lB~B zSNaxfp=Q;1m0G5ppStk=4{6JSz#74RZGuPo6Gw)R4(w9YZ~Xm z4YGkc@99F9k>qQi8Cgvye1$DPn6v`1Vr$jnBfE8LY$A*@%8U9L%e!{Ja4X`*ma8N? zgiEcw2^Ig+0jt~1Wi4VvfV)CF;Wg8={3}G$DK{9q#kFhjeHAES|Mi?wt#fH>(#~f} z?{7eo8`I&thea2pkC@A0{)baw@egsXM+opdy$`98q5LaV4Y5>Y(LBDls`$1AKE)4 z$k`wag$G2JT4n_{R2N6alv-?g*S5_e%4;HH=V`aj64_bJYdc>3H}2G*t>&LU>u2d~ zDo}YbK0fGn;o%L}n|k)i*D$J0yR`WiAtnQY*F;{YGC??!_a(AMH#+FNA*4cdb6&Z? znt7pYttlQ_JbHx=3qiWw2cWD6{_7I1qa-TZTXcLh9c{(2?HFOHk{o?;|BO-PyM1el zqiT;u#0d6Qi_L7+aFR#q34GcviC1!GY+shHqcrJuQ&EYRzywb4Be$LHr*y{;d9=jrrfzI*SS%$5C#s4=u9-uWQeoqwb}FNd0&SkKkJFE01&=9q+@bf}ognYeX= zh^YOQ$F?3U2wvAQ&dWsWsYUTMlU)om>qp)#Xp&Zx6uc#gtJ>wNj&>KaTj{(^y)CXW_72}HUZ9BckxWG>!R({ zj??&e+K2+WoOpsmsc4EWSA`qd-Rw>{tTHGioAUgtE|OQA>$A~frO*4TYLD%Bwh(O_ z#7rZILCg$7u3ZGxjd9~nZS0F`o!OMFSDagBU4IFA-m<&no0pSQEJx0VmWHJh;2r6x zq{_e~tVtQ4PA4kxQ*?#nYiy!kUMlQhdWGN)6m{o0rq!Cvue^DtNphNcqJlD2$iYSV zPb&ThNY&z)vue{{FzTlr9Ub>yNWHpp=#iz$#*a1{kI+|m=9DPM4RHMBh-KDQa#sU; z5o3uq_0E}4^Lyu$@vP^*gt`>W{_F<8^;LlDNAb)8NY->?AO%%T=Gp$R{gIb-E9tbz zm&xX9RZb%c$&^Q?|$D3`+01|nk$^ZTjYR{e50RRcB> zjcaSk8n55W*slr9wIGUuC1(fGoY8e7cqNDlmMP8z>W@-zG#aigex}fp`8Cmahv~P^U&nZQx0GEK|(SlfAr}rdJxBUOLVjZ(woXY8#ZB{2H$8vhdUobCUy%=pMUp= z{*56OUHk+1hH6lm+?Nlb^OR8T>p7L0jx0DMiat%5_M^-IRUOuj;B^?|+U)e|x7o)V z=#a~Wap6y7fIHRxKw8#eo<{%gPfDvUteJ_(TX0{2sXR$^1x7K8XX5VDkja=o;z7cd zH;g_iD0K;cw0XCstXBQQ&72ut_+9iu^DbNm1yKMnhYe7QQ{ZL>=_6?c+}L08zFZC= z!Y)Eg7$WSu-*K{4tIFEL?L|d|ti~pj52l|Bhw|1qt@W5+I%F;Jk$NThpFCz#G+h)M)g0+VVU^@fM@lR~}IS~g~D?Vr%~%Ffog7hZaC_ig%;{U@|m2cM(1`CK8F z5SYi(0wYhc3ky63Y@~V{&%Wrazti)zXGesq^R1!N1_$Mw)i>B>K$ofPeUq@UU3IEt zh%Pq(5T4#>Q1Gl|ZCO%0GyY>){^>B@(G|5`%b})fvrjALTMkZOa3kU7mk3x>^+4=E zN2q?&O~z9H7(8$xYKk3Cj4Asy__t_fV^QMeTq z<75X$_vvni@iofJ-ge^r)hu%Hkqg$)U2UnXq84h887eWy-ZaQf1SFqFF2RQ9LanlF zX$!Xsqi#)<=ESp(GohXn$Enq2<+B)r|AlM+@1y?qR{az!2WsTO7SC_*-=(x~ABd7H z$zci~sWYuC?<)WVIYPAk6q5}mZf-9U=LdFZiE);KQOcKTg85u6!#@ zrlsnz4;2_jl)7c~x+%vN$#kEtY;VnM-+?(hZ>PNrmycsxHo-bgtY9Ek8JuD|dklt? z`oGNdU3ksxJ#c}yw2Rl$W2o6Oh?{EJQt)nCx?;s5#uf*ZIU;Y!JpgEVLR=L;Kp1Ca zi?n&Jv0=qyPqSi?Sor`IB@)m*@a`kMo1;!_gTI zC)%bPcurm3j}C7(>fC*zkO zp5j9mZe-nq9ns4OHZFLL-p2G4_`BYqF+Ovso5aEx{hRr~{t;x$@b?sMEb0DQo4a?= zW4)5FjgZqQp??^tm^J)|UQ{Qjr(~dLyh)#QP)&xjmX(#b&}n?N5WvoYg@KLGyGAHk z7f}n~t+ZldyOS!Yg_KB7CBMm=MlM{n*Bb_1zv#!$9z>_Qjb8E0cHwHI{=-=HzmI8c z?^*e!iF5$(@@>+%3U43a&t4SoM$V&;cRe-8eAS0?$HorQoigoT3QSPeV&*St@n?p` zS8UqT(L-fhPQt5`SW#evzi|A^Uo*3Il&)vDh<9z%RT?`?&e3e5%0GkFmyr24(Y=e9 z`*Dx$7C^3nW(+Zt3AuBKERJbiRI!NZ%Cne~=UTmXpL00h=I`-r#dLOtfN$KDeQ6de z`sEIb)-l+Y6nJ&!co-0>JhpHwBi!#D@fb(%gatSA*6fPqea1zMxW;AuZr=Pho5$HE zwZ5&~lKNAg!_(W&MPuf*xf%Qj=)89ifyQD&-Q<35?4XrQvh*Y?vO8@qbjZL)d@i=F zgPjQmVht2F9$iJ;4#M(5QAF0zmRwVO!0VB>i2Ky4FK2fdN;~^bSzH!nS8b}>y#1;a zlrE(o?tS;OD6A4lr=@Dc!2=$X!tmt5;%5I?z2ikCZ_C43*`Ci2ExlZ`=5_iq=Jiwe zpxh!v-U=1F%2NW|IA)@)Gg)1xALucln!iTJur}!60o{Hv)BO{+LsligOqe_yvREjJ z--bFe*kGk-P*@<`5Xy(sOr&{cu6g z2|oC7g!aaAs4Ebn7hRMw&YN>8`a&4`B`M8{S`6Tw9w}ZeAnVoTJl$S^Oik}Qj?*!v zHm0LeGk|;dW(i%NLazo&<1){pLU6_MmLsi;TcGOxY1aH9Mm!Km=>?g zU!~t@ap=noyiG^Vb;8q2-SX`HHEM>j6&va;grq+MH~93wSbP73QfhMsQOOJ*K*g%6 zsLV$w9$ug3a23^VNmE4L1J5pHCQNEn0OKl|@`x$DM4d}vm zM&CrH*Uqg-^k2keOYejZQ}eKh(zd4-E0rm%1Wuwy)OI&Nsz{gE=b-DsLCYZaio>Gw z^RKpsG`D0fPofQyr$5^*ED%Ki>z(n;Sp1Tw(Yx7COwIkFW(NXoD%r=&K`FwA6imOFEX zr;y?cgfMNNN9RlvtToB%$VsR?QRhp8q)G<{$rpX6vg)T$ugbjOdMXv4#eJ`0)S+B}buhiDg!9}M0}o$jgXs6+ZG zb9<(2!JXy%=a3OWWQG4^C|QxXo(vx_+49;Ago@8~+e{)1 zM=xSX>ph>ov(fbLi-b=s(f)uO;Ta9!)YW5fQWg9)pTIW9 z;%aNBnfFqY)giT{mtzJe7B<@L#&fzc0G$ca=Kq4Y062gM(bP>2XYqk%6sJV+MN+b! zU4xj8`Lk2H(Nty~xwDdc+*ATC8Fbu^E8%|Fs0;2cR}Tev$RjY6-SN_(v-oo54Gxvm zeCrm&v;O@zy!nd6f^SJw_IYe|+9GBIm%s19AfLMQ0J(nVvnV^<911KBK$L_Br#GWt z_)j+~;1`_xuUe6co|X+);@RhMl`$dlgH7=ZWh1CYYrdEcq?+A zFNi|0PJf6R%1}F=zU={(dN9b*alSR424?UnW%?nFsZ39QPlIvTnA@gn8} zbjoHtWvwl*(&JjHtJ>}Kq5{YZ&$ga~^%c4He6m&!oWKkCACUD5s5!Ky9z~LKq{#xCT`TDkCffZ}p%Dd=EIWeioiQ3jwDR_Fago^V zEwpZP4t?d>BhnTEyOtCO{UJ3{YC8x5Yqk?N4R(A*lz|s9{Uy5cu-(a+x{_A!L55^p zwcmNavBcGOW}!Efxy2wPe?w)yTg0$E18S(S){WvK)_UHitl?OaMC8^}->!C(BM);+ zB=EuRW!VX&Ly6)2jQQiv8!mb9;YmN9&VhPsQ&i)T`0ZLwafHRb6|2H%M~&^~r@?Gj zKD_8jf}kasp&{ zk&%_hUXkcQ*$F&pQqQB3UZPg1f8l5UAI~?T$_bx@j;3ZF0(w}WIKKCrE~mPoF#KHR znrnClWZkCEx3dX5+Vb5h*{#_*`ov8?Kc9OWszSv^ELLO%En>Fo!Uo>xG9fba`0J;D zK;uP>r>D26NU2{w+xw>Xx50f6Kgm>nH(SJP(orQno)nFG z%?|DiOs_gQ9A;t(^LW@zAwX9>lrw{A%!un3dsMcRebPh@l% z19XC?R#8-d!4+gGJb>O3E%dLH8y6Lw-Z-mOeaT(LV*f;7oKuB;q1wUc*YFX_f1>+W zd|(k{ZUgH(aDkN!B_gN!54@@Fu>rK>sp@c5KP3Hi)Gn#JY2n<74Nt8-*4`@(s}I{! z7r)iXvTWIkWuo(6I=BR&6P!uydc7lWR znX5>{&d@va$NnIr|Hb&#mr-+CJT<6o8v8w2Z6zhQZ$_slT2^2rkOzD)QOpwHEX8-Z zd&KGvc-J;A3E9^%dBW9eq4yJ1e7r_eEaX8nhEIG7Ak=6a`znOU>e8l@Z6f<*Im6MM zIhW|lmU_V%L&e>kMa;z?-;>Gk&JwPNJ;#ZSuWrJ<9xL4MGb0A2V4zF+b{vRFfp>ay z72C4ai#YU3@=CXL{L`O1Pv1aHV4G3GGe{87GtvaBd)Fr4ZOum2PX%hS+Rou*N0SuH zIFGj77g)qV>jW26pO!-XigfQ#GR{OlbqlOAP^MC|VCLBq@RVQ%iK<^O7CmDcDgUFl z{3OQz&u;IwyPJCsJ-vnxqr%%6s1&t`^Gtb;H4iit{P~K9$9Dour41r4Dl7}BPU{F(*Y#K4PFHuWEwq7PdjOY%2To`tq%#Ms|p-3%8=fq)B1) zt(XZm`!u!bWq0Lcx7H6qy}QEZmO&kR4RC#{rtzPS-F->R4y!^}cM#W7x&mKU8Tz^{ z+)vgII9_!8)7eMjPgkc0_HI7%`PwgW5n#n0@rl2mLij{SRDgaKe%uT=`;wX$#rCdI zxydTm3tZB-!o=+2yWKB)LOv91KMXC6{Fb74^ZB^+AY~-=pCB>(9}^iri^;Sb%e9HR zFvNM?Ut7SA97w(6ogL^~UAT3$I5xcHyAsPw_F_U&ThL{rxO=1ehehFfux#C^0N`8> zsJH`w=2%80Z_@B6Tk$5b*NnE%6Av%E#fAwzBU0T8>gk*3eWyNP?BwA=0;>@azZoo} z%g9pjnu0bcQ^&hFPZ{G=`%Sx^{*d0MHoU)WaL?-ZG0%Nc5-sQtrPtGiptu0mYu-xY zC4Ly*mAV}LNX}P#;5WHEkmOj>q1iq4h1%BZuz%O|s)swwdM0iw?Z@EO{sUe2?~`ZS z+%oZflNnj6nBh3KaD#lgy|#Bk)BBlED0Bex&6N_u86Kzc4iL4Qq5d^+3VW`)T)7qK z`2%14VqR|#DZlD;j3NZ|xT`<`7nBb)ag)pVu|OdLw1t|_N*}io4UDem{@|CW_Bpl@ zAyRLz_CWo;W$j9%d{8;S&G)phY1dBTUP;?KRydW0MTViyFt zPxC;r5^Zg{EZk)K-cY$C;v)9O?8T|d;k|g5J?NCf&GR5>*1?MX7w81xF@t>+2d}4( zmjJ0Rf#rQT>D;I<22DQYs)~E^H~6cb8x>u69oWRCsGV=TIk2Lx?$|2a<-o}S>~&N5 zK;t9ub&mFlTs9h(UeTdg9QVY?;bhOAl#`a{LH*Tx%D|6bK_by8L=m?4f!GbGcwPTD z4ws@Z5+CjVEV0Kts&=0zE21IhanSqloghC4JgJ``9{Z$sk0>gUH<-jTV}gkrDkE$wciE9c#mkpg&n7w##(5G2nnxO{&3wjJ4cw?#};acxQF zhoRPe(S)4Q&BM9&4&!0hYX`#l)}*WR@u{YSOnLdgWm0Uv^ak2SJIe|DAd8h75ih_3 zgX>6Zh)X%gUo%-(zJ{ryF;{iMD+deV11p35C_f}oabR~v!_ZFrlHpu7fkjU@<9JtD z78-ofIldELy<98%uufL{_IXEj-@XIrcGom4peu~Z%pm7b5jm*8m1xetYeMkO;y=*k zMkKA{8NAGtMGOtHrZdxginZt;YRh>Pwl9q3?IybNADFIlBP*K<1U_2CRFc-W;6k3K zKmTy{;m*U07|GgRHA7+5Ky`UE3CG^U09l^?CKmr{2HF4>40o2Qa&Erboq5{grXNLS zyNZvPi9;W5e(qBpb|Jm#ej2VlL+;C&sx>M9gu@9REiNo7E(&(IVHaE5eq2dNZA)|s z06~%zk(E_IN;bxG#o>4@RxD4~&DnGrTsx<@;9pFdta|ij*mS?-+{SF|PYb=&hLE@=7<;4qNa{&?;OZ zp%T|K%_XoiS=Q`BgCCnqtvt)J9){VR^;fLh`KBVI>&%^XA^TPkpV`4q9kak45}`q~ zQ_lQQy!#M8*;Ln^>;l_z&P_-MOYyWbAUA590JV zHKxC7Qv4s&bHA13YO}Rb$x*;we>QM9@Lb2lNt(fZE?KcuTBzf+T$|FKkPOnyql--- zdiL7F%Z1t+BUT90__NPBbFPAjB+(+xBUP@0Lew2_u)J6xWpGs|J1cuReWUE2D<)o% zLVD8qah=&-)LcAl%s|D)`kt}krX zPq|JOo0(}T-PUhy%CKtnw8gD0%N07sT$)qsSbSgO5my33YuDFNsa8H#8%F6d4|ci| zu|8{Jxs}|_zzrX|j%K#XqrL>T?;Nt+wtsTG>kE*l#x!y>CyL6U$~MjIsirW!qMOiWeFrM-+xrTy;&12UvQ*6s=n2 zE8KR$Kz*mg@MX2?rNHI5~b3-^u;~BjDfefxE9Qxo(sdUz9*Ey+M;-+=0 z%@d%`1cPEI*PJ-N3)e?Sl+1W`{FrL8BK2I#H<@#nQWGg0r0URqd%^niE$CP7dt1d=#w|6Z~{4mUW5vDJ|oF%b-SLXE;%jr*hr++RrDB^qk;0%e-m|yLOq>0$YYg){r*riw^o4&}=&pUV z7M(s+7JvBdy(f<}Wz?T^*Vld6V6n&8DZ?4$G)94RiF5$PL$l_ca|;R>SLeC7*ONAk z7V=DXW`8Zm-ejFQ_27b57P4+Dc|P#wd6ct)%02v!4yyEgm{cYBb$>@pev>M!ayZ$t zJ>TPn_eEXLQ}k^Gjd`NcCps@@-%1PB=7&Md8xZ?gqasKt^OWu3>1sWiXf;KAMLv1O ziOMCq-CT5RN*{McC0~Vp-am26+&V$-)Sn%Bsv1bB0XAAeVt`)2+H-unevuEJCcbHt zUx=zNO+~v3^bcNL+M8BP_}bV-vfO;|96+v0Lw-UHf@Bp~tA-$joP8B2NIx#?cJfnX zz_xJyy~^=N-QT-DUalU@Qx6r(Hh1uZ{K#yOCP8H024ZUgL?AcJoJdtXz|nZ?rnW6Y z2xInQ&^d*R>GzT*K1|MhkT91>4Sxi>I7x*KKzb++ka*a;^IT6qy}H+eg_kvz-Kebj z*7@u(;e=;R_~?XHZR)|um-pAuC!^6j9teP-B5>>@#!av$Fq2zpK%)I)(y?Lw?-c{4w;{8zYfJN4u>zhP*Hv%Z!Qw8q|-xpdXyV$GyFU{B?Y_n%ePs=skzYDd%A5+D@ zso9_Jhz}5`X_S5h6#1~N2+?FoKOQ0f$0LJBM9U|y_?#Cb6<;^dC-u+m$20v=z44Mm z+WduybI}f0Lj8~L+5F3`P~%%6+K2_jd_~TEM$Q2kh1NjRc$Yl23xJr*0waF#boN}t zbtSp53<&eOYp|8q@H@5VsHoJP)|s7VsH893+`n{lbjXDh$BM5uk19ssKTMh4gI5!P z*`(=$;!a7ME-We`&xW`$Z9NUG$ku^aQ_tPSo^Kx_F%;yw`e#udl-ZkkOxylks?dFr ztVWp>@rODi~^%E0iA>d2vlEX(LQh%Je%Z@$}6K z<`t*$j&z{Y*FXR?TO*GqP}$B!EC&E`k;iEqE$*)N>;T6=oPDHYtJ6*>Z}x828r}SW zYPQckJyjIewOCa?(WRTuUbl zKQ(Qn=)?c8Yh;%HZmc*qA}Z77wfp6avVvUw-1=d64OhMD)CvLMR>=StcoD;je~tDr zipbSX-SLMX_BB)oRWrKwe?x~4fW>B!6R(=%74;aB*1U$t|52R&+}7rjQ87T3utpnz zlp(MLBoXTlU1i*oz*JCU9`m$m0u-)zJr?kZdzgRce8r%#{O6D{TUTaY&%yvg5cx{#w!;->A~KYUN0gfs)2;ym#+!ZNZOxpq zWyXe(NBbrp>Zr+Bj&)J`#{P>Eoab@L{FHKKQahA44C;w5kYl)H4>sf0%=?*!HdMpX zqCta{xQBNh;B%5`>KRa!1?wJ92QlYI1DR}6CN)sypLS&jZatc0bFY$RIe7X^Dt^Jm zWUYn`_awFV9QC?4Y(huH8A})JLV+LujEvowqmyURk5_omf!Y^39D46PcZe4Nai6HZ z5JZrUFcx7PFiK#RR~n2Z zSQpvPQX+hN;QFdtDfgA)CfU4|c{o@s4Lh~|r8@0QR?DLwZ&}a53f%+5bSc%H#slFO zZDTnWactXU+Wf|0l7nY_9{p-O)c6TWZE`r3V>S zL!ymbM~AAp!i9Ucs!;o{-TQNEt42Nm$!FW$%d~4EE+I%rMsDeVk zpGw%6TRxI#96#rQxZsQn7kmh#JwQdK5Ut;{GZEQH8gALfcqCTMxImBc#y}xJZ*a6U z1A5^3dl&z1O9kW$vCj{))*8feS_c)!$uCb~^L{MokfS#~h5D1NlEzyv&IL}SH{~Bg zV+zo{47P_&buH`1`&p3wT`HdI2eZ@n^f1tbD+g%-e*{A3)(KMm*wosZhuh!ro*y1ZK`t@mQOmAEf+k3U%Sbia6TkqsU$2m zLt8@qYKDqW@~quJ#hcx@IlF|L+S+9m*id!fu46Y8%4?XKNFPM6eu^Wrl`*_us|Tnt zIM@VCxb-6D29Jw}LwKh~uGD*z)I2E9+?S;%JpU1mxnLUQyVM>3BMWl-0z?{QO->c^ z^Pw}8XhxoT?b`PoLL_C?+ZCUB_sCDbX+lH>wl`v+$a^~-JVZ`^c>+26W-=_DLX@Ii zAJmQvy6s!J+~T70N3coB4CvcEkb4!U2^EhwtY|#PYA7-@n@;bYaO=T5bZqP<^8HLqOFY22xouh z42A0v$v*%U7of%jwkJJw69Q5a!Y^S(XAia6w{4W!_4qC;9n*nRsJk{lN~d;}Ilfm; z;M|{`@;`n4r}Bwgw^ErOo4V^rYe`k* z`uw{ECD-NvW&<3ZLVNR6yMrA9_jaj;j)9#=lR1R%PJ~t$MEN@JIIfFPyr7m-w8Y%L6MB$QqvPv07 z4Ae1g3Q3#_8ip>~4ftb1#CaRhDa0Iqgz5+=0}us-|(X3B*o`+|MjEv4RE|7cDB znxGep)={{1{8-4NDU@7fI6l-*?sj2{yj08RXGnLyd6gD#^yv~l*uyCPy@}M6QSf=^ z{o7E5V+(kobY}r!uSnf^_CaW66G$RE)M!@Hk2rhUnw8rWxG6`_t`GMln)-aUl(zik zlFG`%qP&aEgyB0(2;RvU*qIuA8`;Mv=lAe;|Kgo&#aUW-$*^U;r_1`8K99GHn48QA zXymKiB1R%_5mUba0<>N3+6W2_Y&Rw^7|H{V0lrL?$HQ^UhSAs>i2WLmP<}0aH;Q3; zcGTLy>hW>2o*U%v|EMUAyEEXLRNmlLQ(6s`2u+YesdZ9G9`ZAk2@5VT0bw;J+j#pB zQBG2Yt}3aqegPk=@4#O+t+u}Igm?cI8Bs3u%O{K00!Zra|4_xgebe{ud;$IyU|t?E zmSmGwL9_!VHk?O8_|K&R%pbYAPR8Eb?41g424BG8rzo@Hly4U3(s6#mM7bnH+ezHb zvkHu0)VGl~dBp0x*7MY|Y`$JtWU}zd%jWqOLWlqVY})_pcD8>QWN$V}9^Ff3`!WdAJFCpc)($RJ*{|W9Bf6sK#d?2 zYDRh&Ptt-)`_$S}g7{%}HhK!)uESyHcn!O7!=k4%*>(ezXj5V2G@Du*FJ$%Yhnmcn zHwDRBqAT9Ly{8$US!{RTHYscuZgLx2ePB2oH6<#t$#kp`^IK;-EC7vkC8+^6|%y81h1k6EAV(=nPIC$KE#ZZA2x<%77o&o116{eZWO zN8e_S)MRw&kzj+27h`rZpy>G2`}}52I)FC$Tr%K| ztnLI7n0e%gcvK0kS9(4vH+0-TlG6idBWAjh}Th zZ)TM7%kx|7gi;<@=zFV#C zMorf4*hQPL9EC|BDTNef8x}4%^?^`&wD-MxWafFWzsLC=2;K(X;V?YL5i4$O*w2y-ir+jbq z*Iu6_CC6U5GUy5K!{CtLsyL~us{eM4$-ve9L_VRP6Zr(!ZN4&(@>4HfW_qT5M z5$Ch^*vSjff{W1ZA!x4|!JuOSu$T4}&$jGoy0M7CZUWZxIew)+Rm+hRo<5377Cj^d zhp5I+QVLUJuh^Z}ivPM^eZ39_aw6nWX;?wDk+1~O;^7g4u<-?KnBQybH8oqpzIE?Y zU+RO{#L~ZZ6gL0QyQZN(*CG67)z{yuPye3LZw^T_*uL?IV$Xofc*ej5ATkiCM)`fS ziObq&0j3){I2%qhp;B;qf3 zA0d7;8e4r+n-x=^)U6wtQ=g_nQo?`UdL`mp&=X)y}cHY;T z9O@e!&wWlB?Te4g$pl`_8u!2}lGj_V;d{ua8VLD>0L|&)Fz~>_*8)#nHT_?HOW~;W zg-}=Tn`X^R0CVPL0|(n6GIMC0Vt*4VcOQpbiT^L(P^-PKa*=SArlM~k)O-*1k2Ba- zEi|bA327w=V=d1vV(71j@!d(Ncom=nphBT^*wkAdepOYKs#n%2qq`z-50}9^Bp9E> z*ZchLjw^1XZ`5+=3bi)*=YxTpupRw^&&Q2Na`rV0>W+5}u*_)X8gI`WowQDB=u1cK z8*mHn&*5w2Zho*3IxIQ^jJ~i8(6D=;i%nfa-X{Jvpq zxT3@6M|*3b;8Gy;U{)Wzl$d201g~szTl8WhI6ecY<9e9E_-{ z_77|qp4-EJ1)XKwJVHFgzlZp|3N$>nG=lK95skep`}9;#;h7YCXTl1*SzrN$LA)5Y zon(w`F{Cbsm??dl1l-8zL(zzB^tcB5D3L=Syhv6KspMLnrX0#((V$^P(=AX^95;a~ zAb#xH%zoVR&d1i7?%Z7aubCIeZ!djGuiv+uwF~z{0L+>=AiWp%MkT(m&jD+&h*|!I zm5+-l7mZfv@Z+6|ap-X~-9O2a`}W2ewLDihMOex5ql}!R(tA*;R2ZO&0Gzk?zM^H7%0>$_7E1(c0Qd$;S^4}(s< zP7N_|z`IV2DlnmQ5DiNNwp4fr+>fpGzEw>f#oN$yiZ!y{N>||iTuEL1QDw}W}R#w($^QD`smpt=%dS=Zk%!WA3K&GHEfafbwW?ev;QN0to zS{U?E0e!|-;$Tw(x|NWOFM_~6K~w@bHA1W$5a6eCZ@|Hqh?|xxaF#_6+P0)Oxw+gR zF}eIHO(=33+FXzv?BpEcu{L(xW24?ni`a^F^;JU41J!>*sv_(LYs&0n&`?-wgaeM+-Jr5VfWxOmX@X!a2BN5rN&wv?)Sue3 z57rvA-$oGIRTU6!vOC4hLVJoMcRosoH0j_HP5tbFiVFf~X9KAol)Yo6Paq=j^-OXE zL4M*6U&XTIvCaS0%e4kIbwpthL3xybKtzQGML~%WD+H-2iH;zmjRCPiMVhghhyj6G zv86(}Du{_y5FMnT5ac1W2v`XM@`yp3SWyF52+!t0H82vnsDxW{Z|w5Jnd(66AN{qn zduR6Cnf><6`OZ1tmPKczX0Z>Y-OES$wk*Qezo#C-4b>SITTMX#gqOrt7D5GhIMo48 zGaVA|frcGaB$N;Ylvgp>t`*W0xyP7PVo zFYk8C|HX44{UwFB?0Wo4mtj0d7TbkYfndX@oG6sv71TzJ()BA0{RZRsbVV)Ws897m zZUiG+hd`a4KSB=8t+54Wll*phmoQ|`vl_iCz*W_hzyfeaQ#V+kt$`_$wWnois8^2M zCXu~^AC+g>f8pS4y0dz}!aju!`k#(;x>Ac*rve-5v>bv?A#pn=sE9WPBHZBT6bDPeYK8rewVP@%SkzB6p1g;P0&y?A;>-75?K0(ZYHMesb+oD^nvJwU# zV1EgFbf;zRlOED;Q7)?w@Vr8-sL7w)U8?s;j%-h6M4Js?K?AwI=MEY)x$(O4i~4Nd z56exEgd$O)f-iz&G$>x6x;+}(Vpqn~o){DacKhhFX#w6+cY`1Caf|>2)hK?+gZP^J zdjG`w0>QGPdbHzCA@0r%qHatK!ExazK1UjUpl?Jpi=4Cy#0uquJ9oIe{Cm>;B<6tt z5^WX-iRmeeBLmk+Jd?yAO1)D5oEg(grifph?DjU7V&CmDG6Xqnak6+x(#3&l8<)^; zsa{F5pzURtM*m43pWQ>_Jakz-7bH=fIuAGjT2tq`1P8K-8)dz&2CGNdkrZoLjGEM! zbh}UUTk}TeMhs!! z1|_olagJ^Qe$`s(hIS##Y6RaxfFE7-#p7*2DXqCF#(vc;$DS++Z&s0u;}<4IOzeLJ z>aVH)8$$Kh9{KIj!}l~j7(8h;2NDO+lt7U0CPVFQNy!nAN`Qo?P;RtAtwE~o84rS& zPBhd?d!Kq|=AJZXa7`g|0vsYh$a;eXSw9b}ld!B`h{sdK_{I`LCw$LK4ofHlBW2!Y z&Yx4iSw6;k5=w8)1L34`MdOwVBHxqby04U<>+BfI0rhZg=H@O~#G6peP0RrAK+SK; z+4{$eeqL3jSLJ}z$F5a8bk^6Y!qsTK^Czs)EO4iQ3q1xrnV2F{mM|xGDI@~Zz!K!{ zq1XZRwonsvpoj&D9_u0O~oG??d z{%tf&%~#ZifwtX+6~eFb-{@a?XWYHU-*lt#OohYg{^WhF%~TY5U-qWk_uu-&>Aru6 Qwf{=NeF*zgHeU7q1I+v9f&c&j literal 12163 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

AzBRaLY9Ji^%xk{ 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 Date: Wed, 27 Sep 2023 20:57:51 +0100 Subject: [PATCH 18/20] change dir --- apps/kiwix-serve/docker-compose.yml | 2 +- apps/kiwix-serve/metadata/description.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/kiwix-serve/docker-compose.yml b/apps/kiwix-serve/docker-compose.yml index 7c349984..6c5e0b83 100644 --- a/apps/kiwix-serve/docker-compose.yml +++ b/apps/kiwix-serve/docker-compose.yml @@ -7,7 +7,7 @@ services: ports: - ${APP_PORT}:8080 volumes: - - ${APP_DATA_DIR}/zim:/data + - ${APP_DATA_DIR}/data/zim:/data command: '*.zim' restart: unless-stopped networks: diff --git a/apps/kiwix-serve/metadata/description.md b/apps/kiwix-serve/metadata/description.md index eab0c153..6739cd45 100644 --- a/apps/kiwix-serve/metadata/description.md +++ b/apps/kiwix-serve/metadata/description.md @@ -3,7 +3,7 @@ Kiwix Server is a .zim compatible web server: it allows you to deliver .zim files over the HTTP protocol within your local network – be it a University or your own house. Simply start Kiwix-Serve on your machine, and your content will be available for anybody through their web browser. This allows you to view a website without having internet access. -**Ensure that your there are .zim files in the `${APP_DATA_DIR}/zim` directory otherwise the server won't launch properly and will need to be restarted** +**Ensure that your there are .zim files in the `${APP_DATA_DIR}/data/zim` directory otherwise the server won't launch properly and will need to be restarted** For doumentation see [the Kiwix wiki](https://wiki.kiwix.org/wiki/Kiwix-serve) From ca3cb69cb2b0fd81ca274390eedf25399368c843 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 7 Oct 2023 11:57:33 +0200 Subject: [PATCH 19/20] chore(kiwix-serve): change port to 8169 --- apps/kiwix-serve/config.json | 8 +++----- apps/kiwix-serve/docker-compose.yml | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/kiwix-serve/config.json b/apps/kiwix-serve/config.json index c6f7140d..dbeedfac 100644 --- a/apps/kiwix-serve/config.json +++ b/apps/kiwix-serve/config.json @@ -1,19 +1,17 @@ { "$schema": "../schema.json", "name": "Kiwix Server", - "port": 8080, + "port": 8169, "available": true, "exposable": true, "id": "kiwix-serve", "tipi_version": 1, "version": "3.5.0-2", - "categories": [ - "media" - ], + "categories": ["media"], "description": "Kiwix Server is a web server for hosting .zim files", "short_desc": "Kiwix Server is a web server for hosting .zim files", "author": "Kiwix", "source": "https://github.com/kiwix/kiwix-tools/", "website": "https://kiwix.org/", "form_fields": [] -} \ No newline at end of file +} diff --git a/apps/kiwix-serve/docker-compose.yml b/apps/kiwix-serve/docker-compose.yml index 6c5e0b83..56b739a8 100644 --- a/apps/kiwix-serve/docker-compose.yml +++ b/apps/kiwix-serve/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.9" +version: '3.9' services: kiwix-serve: From 9c78a9502bd00f49130f0708ff7ccc4d051b1884 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 7 Oct 2023 12:08:34 +0200 Subject: [PATCH 20/20] chore(mongo): update logos --- apps/mongo-express/config.json | 44 ++++++++++++--------------- apps/mongo-express/metadata/logo.jpg | Bin 13757 -> 7453 bytes apps/mongo/metadata/logo.jpg | Bin 37188 -> 18053 bytes 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/apps/mongo-express/config.json b/apps/mongo-express/config.json index f0ed50fe..d65e3eba 100644 --- a/apps/mongo-express/config.json +++ b/apps/mongo-express/config.json @@ -6,16 +6,12 @@ "short_desc": "Web-based MongoDB admin interface, written with Node.js and Express", "author": "MongoDB", "port": 8087, - "categories": [ - "development", - "data" - ], + "categories": ["development", "data"], "description": "A web-based MongoDB admin interface written with Node.js, Express, and Bootstrap3", "tipi_version": 1, "version": "1.0.0", "source": "https://github.com/mongo-express/mongo-express", "website": "https://www.mongodb.com/", - "no_gui": true, "form_fields": [ { "type": "text", @@ -26,28 +22,28 @@ "env_variable": "ME_CONFIG_MONGODB_ADMINUSERNAME" }, { - "type": "password", - "label": "MongoDB Admin Password", - "max": 50, - "min": 10, - "required": true, - "env_variable": "ME_CONFIG_MONGODB_ADMINPASSWORD" + "type": "password", + "label": "MongoDB Admin Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_MONGODB_ADMINPASSWORD" }, { - "type": "text", - "label": "Mongo Express Web Username", - "max": 50, - "min": 3, - "required": true, - "env_variable": "ME_CONFIG_BASICAUTH_USERNAME" + "type": "text", + "label": "Mongo Express Web Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "ME_CONFIG_BASICAUTH_USERNAME" }, { - "type": "password", - "label": "Mongo Express Web Password", - "max": 50, - "min": 10, - "required": true, - "env_variable": "ME_CONFIG_BASICAUTH_PASSWORD" + "type": "password", + "label": "Mongo Express Web Password", + "max": 50, + "min": 10, + "required": true, + "env_variable": "ME_CONFIG_BASICAUTH_PASSWORD" } ] -} \ No newline at end of file +} diff --git a/apps/mongo-express/metadata/logo.jpg b/apps/mongo-express/metadata/logo.jpg index c25cd38f2ae8064c1dab696b431b2d15d3c54f43..820cfa0de48a29fc44f31ded9ff35524c86d2ce1 100644 GIT binary patch literal 7453 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 diff --git a/apps/mongo/metadata/logo.jpg b/apps/mongo/metadata/logo.jpg index 0d06672de8ea3e3e485171ed9187aec3c67ef2a2..a57bcc1cbe89ab1443340df33872d9dc6ba9adff 100644 GIT binary patch literal 18053 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 literal 37188 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 GfdAPoAH8(|