{
  "schema_version": 1,
  "generated_at": "2026-10-22T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/mediacms",
  "slug": "mediacms",
  "name": "MediaCMS",
  "tagline": "Video and media content management system with a web interface.",
  "replaces": {
    "summary": "Paid video hosting services, such as Vimeo.",
    "products": [
      {
        "slug": "vimeo",
        "name": "Vimeo",
        "vendor": "Vimeo",
        "url": "https://openlogs.fyi/alternatives/vimeo"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "Python"
    },
    {
      "kind": "database",
      "name": "PostgreSQL"
    },
    {
      "kind": "database",
      "name": "Redis"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "AGPL-3.0",
    "class": "osi",
    "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/LICENSE.txt"
  },
  "business_model": {
    "value": "unknown",
    "notes": "The README at the pinned commit does not state a business model, so it stays unknown.",
    "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "hard",
    "reason": "6 services (2 database or broker: postgres, redis), 2 volume mounts, no env values to set, no elevated host access. Heuristic score 6 of 11: hard."
  },
  "repository": {
    "owner": "mediacms-io",
    "name": "mediacms",
    "url": "https://github.com/mediacms-io/mediacms"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "docker-compose.yaml",
    "source_repo": "mediacms-io/mediacms",
    "source_commit_sha": "6efdf0d655da5c6363a724c230e3388daf4b07e1",
    "source_kind": "app_repo",
    "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml"
  },
  "install_steps": [
    {
      "order": 1,
      "kind": "prerequisite",
      "language": "text",
      "label": "Docker with the Compose plugin",
      "body": "A host with Docker and the Docker Compose plugin. This entry runs from a compose file.",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the compose file as docker-compose.yaml",
      "body": "version: \"3\"\n\nservices:\n  migrations:\n    image: mediacms/mediacms:latest\n    volumes:\n      - ./:/home/mediacms.io/mediacms/\n    environment:\n      ENABLE_UWSGI: 'no'\n      ENABLE_NGINX: 'no'\n      ENABLE_CELERY_SHORT: 'no'\n      ENABLE_CELERY_LONG: 'no'\n      ENABLE_CELERY_BEAT: 'no'\n      ADMIN_USER: 'admin'\n      ADMIN_EMAIL: 'admin@localhost'\n      # ADMIN_PASSWORD: 'uncomment_and_set_password_here'\n    command: \"./deploy/docker/prestart.sh\"\n    restart: on-failure\n    depends_on:\n      redis:\n        condition: service_healthy\n      db:\n        condition: service_healthy\n  web:\n    image: mediacms/mediacms:latest\n    deploy:\n      replicas: 1\n    ports:\n      - \"80:80\"\n    volumes:\n      - ./:/home/mediacms.io/mediacms/\n    environment:\n      ENABLE_CELERY_BEAT: 'no'\n      ENABLE_CELERY_SHORT: 'no'\n      ENABLE_CELERY_LONG: 'no'\n      ENABLE_MIGRATIONS: 'no'\n    depends_on:\n      - migrations\n  celery_beat:\n    image: mediacms/mediacms:latest\n    volumes:\n      - ./:/home/mediacms.io/mediacms/\n    environment:\n      ENABLE_UWSGI: 'no'\n      ENABLE_NGINX: 'no'\n      ENABLE_CELERY_SHORT: 'no'\n      ENABLE_CELERY_LONG: 'no'\n      ENABLE_MIGRATIONS: 'no'\n    depends_on:\n      - redis\n  celery_worker:\n    image: mediacms/mediacms:latest\n    deploy:\n      replicas: 1\n    volumes:\n      - ./:/home/mediacms.io/mediacms/\n    environment:\n      ENABLE_UWSGI: 'no'\n      ENABLE_NGINX: 'no'\n      ENABLE_CELERY_BEAT: 'no'\n      ENABLE_MIGRATIONS: 'no'\n    depends_on:\n      - migrations\n  db:\n    image: postgres:17.2-alpine\n    volumes:\n      - ../postgres_data:/var/lib/postgresql/data/\n    restart: always\n    environment:\n      POSTGRES_USER: mediacms\n      POSTGRES_PASSWORD: mediacms\n      POSTGRES_DB: mediacms\n      TZ: Europe/London\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n  redis:\n    image: \"redis:alpine\"\n    restart: always\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\",\"ping\"]\n      interval: 10s\n      timeout: 5s\n      retries: 3\n",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "validation_status": "config_ok"
    },
    {
      "order": 3,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:80. The compose file publishes host port 80 for the web service.",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: migrations: mediacms/mediacms:latest, web: mediacms/mediacms:latest, celery_beat: mediacms/mediacms:latest, celery_worker: mediacms/mediacms:latest. A later pull can get a different version.",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 80 (web). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "Host paths mounted into containers: ./ at /home/mediacms.io/mediacms/ (migrations), ./ at /home/mediacms.io/mediacms/ (web), ./ at /home/mediacms.io/mediacms/ (celery_beat), ./ at /home/mediacms.io/mediacms/ (celery_worker), ../postgres_data at /var/lib/postgresql/data/ (db).",
      "source_url": "https://github.com/mediacms-io/mediacms/blob/6efdf0d655da5c6363a724c230e3388daf4b07e1/docker-compose.yaml",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 5163,
    "forks": 971,
    "open_issues": 150,
    "last_push": "2026-10-22",
    "days_since_push": 0,
    "latest_release": "v9.3.1",
    "latest_release_date": "2026-10-20",
    "days_since_release": 1
  },
  "links": {
    "html": "https://openlogs.fyi/tools/mediacms",
    "markdown": "https://openlogs.fyi/tools/mediacms.md",
    "json": "https://openlogs.fyi/tools/mediacms.json"
  },
  "updated_at": "2026-10-22"
}
