{"id":24306564,"url":"https://github.com/alchemy-fr/phraseanet","last_synced_at":"2025-05-15T07:03:52.480Z","repository":{"id":1390304,"uuid":"1374101","full_name":"alchemy-fr/Phraseanet","owner":"alchemy-fr","description":"Digital Asset Management PHP app","archived":false,"fork":false,"pushed_at":"2025-04-28T15:20:14.000Z","size":345266,"stargazers_count":260,"open_issues_count":84,"forks_count":105,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-05-15T07:03:50.809Z","etag":null,"topics":["dam","digital-asset-management","docker","docker-compose","kubernetes","mam","media-asset-management","php","phraseanet","single-page-applications"],"latest_commit_sha":null,"homepage":"http://www.phraseanet.com","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"webmademovies/popcorn-js","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alchemy-fr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-02-16T14:55:31.000Z","updated_at":"2025-05-08T18:47:56.000Z","dependencies_parsed_at":"2025-04-13T05:09:24.259Z","dependency_job_id":"51c44c7b-9c81-4c47-95d4-60c62877de30","html_url":"https://github.com/alchemy-fr/Phraseanet","commit_stats":{"total_commits":12437,"total_committers":56,"mean_commits":"222.08928571428572","dds":0.6762080887673876,"last_synced_commit":"6759427a9e9f2671713299f87b5d550268f57ede"},"previous_names":[],"tags_count":105,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alchemy-fr%2FPhraseanet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alchemy-fr%2FPhraseanet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alchemy-fr%2FPhraseanet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alchemy-fr%2FPhraseanet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alchemy-fr","download_url":"https://codeload.github.com/alchemy-fr/Phraseanet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254291974,"owners_count":22046425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dam","digital-asset-management","docker","docker-compose","kubernetes","mam","media-asset-management","php","phraseanet","single-page-applications"],"created_at":"2025-01-17T03:21:01.430Z","updated_at":"2025-05-15T07:03:52.455Z","avatar_url":"https://github.com/alchemy-fr.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Phraseanet 4.1 - Digital Asset Management application\n=====================================================\n\n[![CI](https://github.com/alchemy-fr/Phraseanet/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/alchemy-fr/Phraseanet/actions/workflows/ci.yml)\n\n# Main Features :\n\n - Several GUI : Prod, Admin, Thesaurus, Lightbox, Report,    \n - Metadata Management (includes Thesaurus and DublinCore Mapping)\n - RESTful APIS\n - Elasticsearch search engine\n - Multiple resolution assets generation\n - Advanced Rights Management\n - Duplicates management\n - SSO\n - Thesaurus\n - Publications\n - Collaborative editing and approval process\n - Video tools\n - Rich ecosystem: Plugins for Wordpress, Drupal and Adobe Creative Suite.\n   \n and much more \n\n![Phraseanet Prod](doc/assets/PhraseanetProd.png)\n\n# License :\n\nPhraseanet is licensed under GPL-v3 license.\n\n# Documentation :\n\nhttps://docs.phraseanet.com/\n\nFor development with Phraseanet API, see https://docs.phraseanet.com/4.1/en/Devel/index.html\n\n\n# Installation and Quick Launch:\n\n\nYou can download a packaged version here:\n\nhttps://www.phraseanet.com/en/download/\n\n\nYou can also ```git clone``` this repository for dev and/or test. \n\n\nIn each case, Phraseanet includes Dockerfile for building images and ```Docker compose``` deployment.\n\n\nSee below for more information about Prerequisites and how to personalize the stack deployed. \n\n\nBut in fact, if you have Docker Prerequisites, Phraseanet can be deployed and installed with these 2 simple commands.\n\nIn a terminal from the Phraseanet repository launch \n\n\n    \n    docker compose build\n    docker compose up -d \n     \n\nAfter installation process, the default parameters allow you to reach the app on : `http://localhost:8082`\nDefault see Phraseanet credentials defined in .env file.\n\n    PHRASEANET_ADMIN_ACCOUNT_EMAIL\n\n    PHRASEANET_ADMIN_ACCOUNT_PASSWORD\n\n\n\u003e Note : This install will be made with default password for all services.\n\u003e Except for a test, This is VERY important to customize .env file and define your own password.   \n\n\n\nFor installation on your own mono-tenant or multi-tenant infrastructure (mysql, elasticsearch, redis, etc) stack,\nfollow the install steps described at \n\nhttps://docs.phraseanet.com/4.1/en/Admin/Install.html\n\n\nWe do not recommend using this method anymore.\n\n\n## Need help implementing Phraseanet? \n\n\nAsk the community: https://groups.google.com/g/phrasea-install-en\n\nGet official support : https://www.alchemy.fr/en/rubrique/services/\n\n\n\n# Phraseanet with Docker:\n\n## Prerequisites\n\n\n- docker \u003e=v20.10.24\n\nIn the stack Docker, Docker Compose included in this repo starts by default in test mode. \nAll services are launched in a separate container and except \"Phraseanet app\" and \"workers\" containers, \nit can be replaced by an external service.\nThis is especially recommended to use your SGBD (Mariadb or MySql) service for a production use. \nThe SGBD is one of primary Datastore, running the container included in this stack in \"Production\"\nrequired some tuning regarding the volumes of your datas.\n\nFiler service is provided by the hosts.\n\nAll port numbers are the default service given by the vendor and can be changed with ENV Variables except for the NFS.\n\nFor dev and testing, the stack include also some Tools containers and can be launched by compositing the stack.\n\neg :\n\n - Builder\n\n - Mailhog\n\n - Pma etc...\n\nRefer to ```.env``` file and ```docker compose``` files or on documentation for stack compositing.\n\nhttps://docs.phraseanet.com/4.1/en/Admin/EnvironnementVariables.html\n\n\n![Phraseanet architectur](doc/assets/Phraseanet_architecture_V.1.1.png)\n\n\nNote about elasticsearch container, check this link\n\nhttps://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-prod-prerequisites\n\n\n### What is docker? Read this:   \n\nhttps://www.docker.com/get-started\n\n\n### Host requirement:\n\nLinux : https://hub.docker.com/search?q=\u0026type=edition\u0026offering=community\u0026operating_system=linux\n\n\nMacintosh : https://hub.docker.com/editions/community/docker-ce-desktop-mac\n\n\nWindows : https://hub.docker.com/editions/community/docker-ce-desktop-windows\n\n\u003e Note: All our images are Linux based, so with Macintosh and Windows hosts, the containers run in vm provided by Docker. \n\u003e For optimal performances, prefer a Linux host.\n\n\n## Stack description and customization\n\nWe provide a Dockerfile for build images and several ```docker-compose...``` for deployment. \n\nUse ```COMPOSE_FILE``` and ```COMPOSE_PROFILES``` env variables for composing this deployment.\n\nBy default ```COMPOSE_FILE``` and ```COMPOSE_PROFILES``` is set for deploying a test stack including containers.\n\n    \n    phraseanet_db_1                 \n    phraseanet_elasticsearch_1                                                              \n    phraseanet_gateway_1                                                            \n    phraseanet_mailhog_1                                  \n    phraseanet_phraseanet_1                                                                       \n    phraseanet_rabbitmq_1\n    phraseanet_redis_1                                                                                    \n    phraseanet_worker_1 \n    \n\nAt first launch of the stack, the `Setup` container plays install.\nIt will restart until it can do this installation: waiting for readiness of all other containers.\nAt each container starting , `setup` container reaplying also some ```PHRASEANET_*``` environement variable into \nPhraseanet ```configuration.yml``` file.\n\ndefault configuration is \n\n````\nCOMPOSE_FILE=docker-compose.yml:docker-compose.datastores.yml:docker-compose.tools.yml\nCOMPOSE_PROFILES=app,gateway-classic,db,pma,elasticsearch,redis,redis-session,rabbitmq,workers,mailhog,setup\n````\n\n\nYou should review the default env variables defined in `.env` file.\nUse `export` method to override these values.\n\ni.e:\n```bash\nexport PHRASEANET_DOCKER_TAG=latest\nexport INSTALL_ACCOUNT_EMAIL=foo@bar.com\nexport INSTALL_ACCOUNT_PASSWORD=$3cr3t!\nexport PHRASEANET_APP_PORT=8082\n```\nIf you are not interested in the development of Phraseanet, you can ignore everything in `.env` after the `DEV Purpose` part.\n\n\n### Using a env.local method for custom .env values\n\nIt may be easier to deal with a local file to manage our env variables.\n\nYou can add your `env.local` at the root of this project and define a command function in your `~/.bashrc` or `~/.zshrc`:\n\n```bash\n#######################################\n# Docker compose helper:\n#   Locate first defined environment\n#   file and inject variables found in\n#   docker compose command.\n# Arguments:\n#   command (string)\n# Usage example:\n#   dc up -d\n#######################################\n\nfunction dc() {\n  for envFile in {\".env.local\",\"env.local\"}; do\n    if [ -f ${envFile} ]; then\n      docker compose --env-file=.env --env-file=${envFile} $@\n      return\n    fi\n  done\n\n  docker compose $@\n}\n```\n\u003e Note that helper function only works with `\"docker compose\"` .\n\n### Phraseanet Docker Images\n\nYou have two choices \n\n#### Use the prebuild image from dockerhub, see DockerHub section bellow for more information.\n \nset env var  \n```PHRASEANET_DOCKER_REGISTRY```\n\ni.e:\n```bash\n# Registry from where you pull Docker images\nPHRASEANET_DOCKER_REGISTRY=alchemyfr\n```\nand launch\n\n```docker compose pull```\n\n\u003e Pulling images from Docker Hub takes ~ 3 minutes, depending on your bandwith\n\n\n#### Build local images \n\nlaunch \n\n```docker compose build```\n\n\n\u003e The first build takes ~ 30 minutes on host without any Docker building cache, depending on your bandwith and the host capacity.\n\n\n### Running the application\n\n\n    docker compose up -d\n\n\nThe default parameters allow you to reach the app with : `http://localhost:8082`\n\n\n### Phraseanet images from Docker Hub\n\n\nRetrieve on Docker Hub prebuilt images for Phraseanet.\n\n\n    https://hub.docker.com/r/alchemyfr/phraseanet-fpm\n\n    https://hub.docker.com/r/alchemyfr/phraseanet-worker\n\n    https://hub.docker.com/r/alchemyfr/phraseanet-nginx\n\n    https://hub.docker.com/repository/docker/alchemyfr/phraseanet-db\n\n    https://hub.docker.com/repository/docker/alchemyfr/phraseanet-elasticsearch\n\n\n#### Tag organization on Docker Hub \n\n```latest``` : latest stable version\n\n```4.1.2``` : Phraseanet version 4.1.2\n\n```4.1.1``` : Phraseanet version 4.1.1\n\n\nEtc\n\n\n\n```nightly``` : Development version, the latest version with successful automated tests. Built and published every night\n\n\n## Development mode\n\n\nThe development mode uses the `docker-compose-override.yml` file, so you need to set ```COMPOSE_FILE``` and ```COMPOSE_PROFILE``` env\n\n````\nCOMPOSE_FILE=docker-compose.yml:docker-compose.datastores.yml:docker-compose.tools.yml:docker-compose.override.yml\nCOMPOSE_PROFILES=app,gateway-classic,db,pma,elasticsearch,redis,rabbitmq,workers,mailhog,builder\n````\n\n\n\nYou can run it with:\n\n    docker compose up -d\n\nThe environment is not ready yet: you have to fetch all dependencies.\n\nThis can be made easily from the builder container:\n\n    docker compose run --rm -u app builder make install install_composer_dev\n\n\u003e Please note that the phraseanet image does not contain nor `composer` neither `node` tools. This allows the final image to be light.\n\u003e If you need to use dev tools, ensure you are running the `builder` image!\n\n\n### Developer shell\n\nYou can also obtain a shell access in builder container:\n\n```bash\ndocker compose run --rm builder /bin/bash\n# or\ndocker compose run --rm builder /bin/zsh\n```\n\nIn this container you will have the same libraries (PHP, Node, composer, ...) that are used to build images.\nAlso you have utils for development like telnet, ping, ssh, git, ...\nYour $HOME/.ssh directory is also mounted to builder's home with your ssh agent.\n\n### Using Xdebug\n\nXdebug is enabled by default with the `docker-compose.override.yml`\nYou can disable it by setting:\n\n```bash\nexport XDEBUG_ENABLED=0\n```\n\nRemote host is fixed because of the subnet network from compose.\n\nYou need to configure file mapping in your IDE.\nFor PhpStorm, you can follow this example:\n\n![PhpStorm mapping](https://i.ibb.co/GMb43Cv/image.png)\n\n\u003e Configure the `Absolute path on the server` to `/var/alchemy/Phraseanet` at the project root path (i.e. `~/projects/Phraseanet`).\n\n#### Xdebug on MacOS\n\nYou have to set the following env:\n```bash\nXDEBUG_REMOTE_HOST=host.docker.internal\n```\n\n\u003e Don't forget to recreate your container (`docker compose up -d phraseanet`)\n\n### Build images with plugins\n\nPlugins can be installed during build if you set the `PHRASEANET_PLUGINS` env var as follows:\n\n```bash\nPHRASEANET_PLUGINS=\"https://github.com/alchemy-fr/Phraseanet-plugin-expose.git\"\n\n# You can optionally precise the branch to install\n# If not precised, the main branch will be pulled\nPHRASEANET_PLUGINS=\"git@github.com:alchemy-fr/Phraseanet-plugin-webgallery.git(custom-branch)\"\n\n# Plugins are separated by semicolons\nPHRASEANET_PLUGINS=\"git@github.com:foo/bar.git(branch-1);git@github.com:baz/42.git\"\n```\n\n\u003e Prefer the HTTPS URL for public repositories, you will not be required to provide your SSH key.\n\nIf you install private plugins, make sure you export your SSH private key content in order to allow docker build to access the GIT repository:\nAlso ensure you're using the SSH URL form (i.e: `git@github.com:alchemy-fr/repo.git`).\n```bash\nexport PHRASEANET_SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)\n# or if your private key is protected by a passphrase:\nexport PHRASEANET_SSH_PRIVATE_KEY=$(openssl rsa -in ~/.ssh/id_rsa -out /tmp/id_rsa_raw \u0026\u0026 cat /tmp/id_rsa_raw \u0026\u0026 rm /tmp/id_rsa_raw)\n```\n\n#### Running workers\n\n```bash\ndocker compose -f docker-compose.yml run --rm worker \u003ccommand\u003e\n```\n\nWhere `\u003ccommand\u003e` can be:\n\n- `bin/console worker:execute -m 2` (default)\n- `bin/console task-manager:scheduler:run`\n- ...\n\n# Try Phraseanet with Pre installed VM (deprecated)\n\nYou can also download a testing pre installed Virtual Machine in OVA format here :\n\nhttps://www.phraseanet.com/download/\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falchemy-fr%2Fphraseanet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falchemy-fr%2Fphraseanet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falchemy-fr%2Fphraseanet/lists"}