commit 10ca5563ed13017b6d15a94039c235db7f2f17f9 Author: Carlos Date: Thu Jun 11 21:53:52 2026 +0200 Initial: Mixpost docker-compose stack diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a567f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env* +.env.mixpost +*.log +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..47169c7 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Mixpost + +Self-hosted social media management. https://mixpost.app + +## Stack +- Laravel 11 (inovector/mixpost) +- MySQL 8.0 +- Redis 7 +- Traefik (HTTPS) + +## Deploy +Coolify service puxa deste repo e gerencia o ciclo de vida. + +## Domínio +https://mixpost.fluxtechnologies.uk + +## Admin +Para criar o primeiro admin: +```bash +docker exec -it php artisan mixpost:create-admin +``` + +## Credenciais +Veja `.env.mixpost` (local, não versionado). diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4c9b598 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,141 @@ +# Mixpost - Self-hosted social media management (Laravel) +# https://github.com/inovector/mixpost +# +# Stack: +# - app: Laravel + nginx (porta interna 80) +# - horizon: queue worker +# - scheduler: cron-like scheduled tasks +# - db: MySQL 8.0 +# - redis: Redis 7 + +services: + app: + image: inovector/mixpost:latest + restart: always + environment: + APP_NAME: Mixpost + APP_ENV: production + APP_KEY: base64:2a7a8d497c22c43be59bc4d873763f8505ee0f8dbda6 + APP_DEBUG: "false" + APP_URL: https://mixpost.fluxtechnologies.uk + DB_CONNECTION: mysql + DB_HOST: db + DB_PORT: "3306" + DB_DATABASE: mixpost + DB_USERNAME: mixpost + DB_PASSWORD: 282a989ffe21a5db3daa757f29871a57 + REDIS_HOST: redis + REDIS_PORT: "6379" + CACHE_DRIVER: redis + QUEUE_CONNECTION: redis + SESSION_DRIVER: redis + MAIL_MAILER: log + LOG_CHANNEL: stderr + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + networks: + - coolify-proxy + - mixpost + labels: + - traefik.enable=true + - traefik.http.routers.mixapp.rule=Host(`mixpost.fluxtechnologies.uk`) + - traefik.http.routers.mixapp.entrypoints=https + - traefik.http.routers.mixapp.tls=true + - traefik.http.routers.mixapp.tls.certresolver=letsencrypt + - traefik.http.services.mixapp.loadbalancer.server.port=80 + - coolify.managed=true + healthcheck: + test: ["CMD", "wget", "-qO-", "http://localhost/api/mixpost"] + interval: 30s + timeout: 10s + retries: 3 + + horizon: + image: inovector/mixpost:latest + restart: always + command: php artisan horizon + environment: + APP_NAME: Mixpost + APP_ENV: production + APP_KEY: base64:2a7a8d497c22c43be59bc4d873763f8505ee0f8dbda6 + APP_URL: https://mixpost.fluxtechnologies.uk + DB_CONNECTION: mysql + DB_HOST: db + DB_PORT: "3306" + DB_DATABASE: mixpost + DB_USERNAME: mixpost + DB_PASSWORD: 282a989ffe21a5db3daa757f29871a57 + REDIS_HOST: redis + REDIS_PORT: "6379" + CACHE_DRIVER: redis + QUEUE_CONNECTION: redis + SESSION_DRIVER: redis + depends_on: + app: + condition: service_started + networks: + - mixpost + + scheduler: + image: inovector/mixpost:latest + restart: always + command: sh -c "while true; do php artisan schedule:run; sleep 60; done" + environment: + APP_NAME: Mixpost + APP_ENV: production + APP_KEY: base64:2a7a8d497c22c43be59bc4d873763f8505ee0f8dbda6 + APP_URL: https://mixpost.fluxtechnologies.uk + DB_CONNECTION: mysql + DB_HOST: db + DB_PORT: "3306" + DB_DATABASE: mixpost + DB_USERNAME: mixpost + DB_PASSWORD: 282a989ffe21a5db3daa757f29871a57 + REDIS_HOST: redis + REDIS_PORT: "6379" + CACHE_DRIVER: redis + QUEUE_CONNECTION: redis + SESSION_DRIVER: redis + networks: + - mixpost + + db: + image: mysql:8.0 + restart: always + environment: + MYSQL_ROOT_PASSWORD: fe21dcf3a9658d24850ed7d7f66fa2f9 + MYSQL_DATABASE: mixpost + MYSQL_USER: mixpost + MYSQL_PASSWORD: 282a989ffe21a5db3daa757f29871a57 + volumes: + - mixpost-db:/var/lib/mysql + networks: + - mixpost + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + restart: always + networks: + - mixpost + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + mixpost-db: + +networks: + coolify-proxy: + external: true + mixpost: + driver: bridge