From be4f05ae8a4e127a89dd3d8edecc065b1ecd8ee2 Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Wed, 22 Mar 2023 14:26:10 -0400 Subject: [PATCH] Add Mixpost --- README.md | 1 + apps/mixpost/config.json | 38 ++++++++++++++++ apps/mixpost/docker-compose.yml | 64 +++++++++++++++++++++++++++ apps/mixpost/metadata/description.md | 22 +++++++++ apps/mixpost/metadata/logo.jpg | Bin 0 -> 18072 bytes 5 files changed, 125 insertions(+) create mode 100644 apps/mixpost/config.json create mode 100644 apps/mixpost/docker-compose.yml create mode 100644 apps/mixpost/metadata/description.md create mode 100644 apps/mixpost/metadata/logo.jpg diff --git a/README.md b/README.md index eb654bac..dcde245e 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Monero Daemon](https://github.com/monero-project/monero/) - A network daemon for Monero: the secure, private, untraceable cryptocurrency - [Monero p2pool Daemon](https://github.com/SChernykh/p2pool) - Decentralized pool for Monero mining - [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. - [n8n](https://github.com/n8n-io/n8n) - Workflow Automation Tool - [Navidrome](https://github.com/navidrome/navidrome) - A selfhosted music server - [Nextcloud](https://github.com/nextcloud/server) - A safe home for all your data diff --git a/apps/mixpost/config.json b/apps/mixpost/config.json new file mode 100644 index 00000000..d95bcbc8 --- /dev/null +++ b/apps/mixpost/config.json @@ -0,0 +1,38 @@ +{ + "$schema": "../schema.json", + "name": "Mixpost", + "port": 8167, + "available": true, + "exposable": true, + "id": "mixpost", + "tipi_version": 1, + "version": "v1.1.3", + "categories": ["social", "utilities"], + "description": "Mixpost it's the coolest Self-hosted social media management software.", + "short_desc": "Self-hosted social media management. Schedule and organize your social content. ", + "author": "Inovector", + "source": "https://github.com/inovector/mixpost", + "form_fields": [ + { + "type": "random", + "label": "Mixpost SQL Password", + "min": 32, + "env_variable": "MIXPOST_MYSQL_PASSWORD" + }, + { + "type": "random", + "label": "Mixpost Redis Password", + "min": 32, + "env_variable": "MIXPOST_REDIS_PASSWORD" + }, + { + "type": "random", + "label": "Application key", + "required": false, + "min": 32, + "max": 32, + "env_variable": "MIXPOST_APP_KEY" + } + + ] +} diff --git a/apps/mixpost/docker-compose.yml b/apps/mixpost/docker-compose.yml new file mode 100644 index 00000000..8afbd518 --- /dev/null +++ b/apps/mixpost/docker-compose.yml @@ -0,0 +1,64 @@ +version: "3" + +services: + mixpost: + image: inovector/mixpost:v1.1.3 + container_name: mixpost + environment: + - APP_NAME='Mixpost' + - APP_KEY=${MIXPOST_APP_KEY} # Generate a base64 secret here: https://generate-random.org/laravel-key-generator?count=1 + - APP_URL=https://${APP_DOMAIN} + - DB_HOST=mixpost_mysql + - DB_DATABASE=mixpost + - DB_USERNAME=tipi + - DB_PASSWORD=${MIXPOST_MYSQL_PASSWORD} + - REDIS_HOST=mixpost_redis + - REDIS_PASSWORD=${MIXPOST_REDIS_PASSWORD} + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/mixpost-storage:/var/www/html/storage/app + - ${APP_DATA_DIR}/data/mixpost-logs:/var/www/html/storage/logs + ports: + - ${APP_PORT}:80 + depends_on: + - mixpost-db + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.mixpost.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mixpost.entrypoints: websecure + traefik.http.routers.mixpost.service: mixpost + traefik.http.routers.mixpost.tls.certresolver: myresolver + traefik.http.services.mixpost.loadbalancer.server.port: 80 + + mixpost_mysql: + image: mysql/mysql-server:8.0 + container_name: mixpost_mysql + restart: unless-stopped + environment: + - MYSQL_ROOT_PASSWORD=${MIXPOST_MYSQL_PASSWORD} + - MYSQL_USER=tipi + - MYSQL_PASSWORD=${MIXPOST_MYSQL_PASSWORD} + - MYSQL_DATABASE=mixpost + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-p ${MIXPOST_MYSQL_PASSWORD}"] + retries: 3 + timeout: 5s + volumes: + - ${APP_DATA_DIR}/data/mysql:/var/lib/mysql + networks: + - tipi_main_network + + mixpost_redis: + image: 'redis:latest' + command: redis-server --appendonly yes --replica-read-only no --requirepass "${MIXPOST_REDIS_PASSWORD}" + volumes: + - '${APP_DATA_DIR}/data/redis:/data' + healthcheck: + test: ["CMD", "redis-cli", "ping"] + retries: 3 + timeout: 5s + networks: + - tipi_main_network + diff --git a/apps/mixpost/metadata/description.md b/apps/mixpost/metadata/description.md new file mode 100644 index 00000000..43fec64d --- /dev/null +++ b/apps/mixpost/metadata/description.md @@ -0,0 +1,22 @@ +## Inital Setup + +An admin user will be created automatically. SSH into your Tipi server and check mixpost container logs to find out the password. + +You can log in to Mixpost at /mixpost using the admin user account created. + +## Introduction + +Mixpost it's the coolest Self-hosted social media management software. + +This package is the Lite version of Mixpost Pro, and by integrating it into your Laravel project, you can easily create, schedule, publish, and manage social media content in one place, with no limits or monthly subscription fees. + +It's the perfect social media management solution for bloggers, crafters and entrepreneurs. + +**Mixpost Pro is under development and will be released soon. Sign up to be notified when it's released [mixpost.app](https://mixpost.app/)** + +Join our community: + +- [Discord](https://discord.gg/5YdseZnK2Z) +- [Facebook Private Group](https://www.facebook.com/groups/inovector) + +[![](https://github.com/inovector/mixpost/raw/main/art/cover.png?v=3)](https://mixpost.app) diff --git a/apps/mixpost/metadata/logo.jpg b/apps/mixpost/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a7dc492a5c2fd4d7f2eefed7c56d0c11d6617c7 GIT binary patch literal 18072 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