PHPackages                             phraseanet/phraseanet - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. phraseanet/phraseanet

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

phraseanet/phraseanet
=====================

Phraseanet

4.1.20(9mo ago)270416104[58 PRs](https://github.com/alchemy-fr/Phraseanet/pulls)GPL-3.0PHPPHP &gt;=7.0 &lt;7.1CI failing

Since Jul 23Pushed 2mo ago21 watchersCompare

[ Source](https://github.com/alchemy-fr/Phraseanet)[ Packagist](https://packagist.org/packages/phraseanet/phraseanet)[ RSS](/packages/phraseanet-phraseanet/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (10)Dependencies (80)Versions (339)Used By (0)Security (1)

Phraseanet 4.1 - Digital Asset Management application
=====================================================

[](#phraseanet-41---digital-asset-management-application)

[![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)

---

> **✨ Phraseanet Evolves into Phrasea! ✨**
>
> After years of innovation and growth, **[Phraseanet is getting a fresh start as **Phrasea**](https://github.com/alchemy-fr/phrasea)**. This transformation reflects our commitment to delivering a modern, scalable, and user-friendly **Digital Asset Management (DAM)** solution.
>
> With **Phrasea**, you’ll find the same powerful features you trust, now enhanced with:
>
> - Improved performance and architecture
> - Streamlined workflows
> - Renewed focus on flexibility and integration
>
> 🔗 **Explore the new Phrasea:**
>
> - [Official Website](https://www.phrasea.com)
> - [GitHub Repository](https://github.com/alchemy-fr/phrasea)
> - [Phrasea Documentation](https://docs.phrasea.com)
>
> *Phraseanet’s legacy lives on in Phrasea. Stay tuned for updates!*

---

Main Features :
===============

[](#main-features-)

- Several GUI : Prod, Admin, Thesaurus, Lightbox, Report,
- Metadata Management (includes Thesaurus and DublinCore Mapping)
- RESTful APIS
- Elasticsearch search engine
- Multiple resolution assets generation
- Advanced Rights Management
- Duplicates management
- SSO
- Thesaurus
- Publications
- Collaborative editing and approval process
- Video tools
- Rich ecosystem: Plugins for Wordpress, Drupal and Adobe Creative Suite.

and much more

[![Phraseanet Prod](doc/assets/PhraseanetProd.png)](doc/assets/PhraseanetProd.png)

License :
=========

[](#license-)

Phraseanet is licensed under GPL-v3 license.

Documentation :
===============

[](#documentation-)

For development with Phraseanet API, see

Installation and Quick Launch:
==============================

[](#installation-and-quick-launch)

You can download a packaged version here:

You can also `git clone` this repository for dev and/or test.

In each case, Phraseanet includes Dockerfile for building images and `Docker compose` deployment.

See below for more information about Prerequisites and how to personalize the stack deployed.

But in fact, if you have Docker Prerequisites, Phraseanet can be deployed and installed with these 2 simple commands.

In a terminal from the Phraseanet repository launch

```
docker compose build
docker compose up -d

```

After installation process, the default parameters allow you to reach the app on : `http://localhost:8082`Default see Phraseanet credentials defined in .env file.

```
PHRASEANET_ADMIN_ACCOUNT_EMAIL

PHRASEANET_ADMIN_ACCOUNT_PASSWORD

```

> Note : This install will be made with default password for all services. Except for a test, This is VERY important to customize .env file and define your own password.

For installation on your own mono-tenant or multi-tenant infrastructure (mysql, elasticsearch, redis, etc) stack, follow the install steps described at

We do not recommend using this method anymore.

Need help implementing Phraseanet?
----------------------------------

[](#need-help-implementing-phraseanet)

Ask the community:

Get official support :

Phraseanet with Docker:
=======================

[](#phraseanet-with-docker)

Prerequisites
-------------

[](#prerequisites)

- docker &gt;=27.3.1
- docker compose &gt;= 2.30.3

In the stack Docker, Docker Compose included in this repo starts by default in test mode. All services are launched in a separate container and except "Phraseanet app" and "workers" containers, it can be replaced by an external service. This is especially recommended to use your SGBD (Mariadb or MySql) service for a production use. The SGBD is one of primary Datastore, running the container included in this stack in "Production" required some tuning regarding the volumes of your datas.

Filer service is provided by the hosts.

All port numbers are the default service given by the vendor and can be changed with ENV Variables except for the NFS.

For dev and testing, the stack include also some Tools containers and can be launched by compositing the stack.

eg :

- Builder
- Mailhog
- Pma etc...

Refer to `.env` file and `docker compose` files or on documentation for stack compositing.

[![Phraseanet architectur](doc/assets/Phraseanet_architecture_V.1.1.png)](doc/assets/Phraseanet_architecture_V.1.1.png)

Note about elasticsearch container, check this link

### What is docker? Read this:

[](#what-is-docker-read-this)

### Host requirement:

[](#host-requirement)

Linux : [https://hub.docker.com/search?q=&amp;type=edition&amp;offering=community&amp;operating\_system=linux](https://hub.docker.com/search?q=&type=edition&offering=community&operating_system=linux)

Macintosh :

Windows :

> Note: All our images are Linux based, so with Macintosh and Windows hosts, the containers run in vm provided by Docker. For optimal performances, prefer a Linux host.

Stack description and customization
-----------------------------------

[](#stack-description-and-customization)

We provide a Dockerfile for build images and several `docker-compose...` for deployment.

Use `COMPOSE_FILE` and `COMPOSE_PROFILES` env variables for composing this deployment.

By default `COMPOSE_FILE` and `COMPOSE_PROFILES` is set for deploying a test stack including containers.

```
phraseanet_db_1
phraseanet_elasticsearch_1
phraseanet_gateway_1
phraseanet_mailhog_1
phraseanet_phraseanet_1
phraseanet_rabbitmq_1
phraseanet_redis_1
phraseanet_worker_1

```

At first launch of the stack, the `Setup` container plays install. It will restart until it can do this installation: waiting for readiness of all other containers. At each container starting , `setup` container reaplying also some `PHRASEANET_*` environement variable into Phraseanet `configuration.yml` file.

default configuration is

```
COMPOSE_FILE=docker-compose.yml:docker-compose.datastores.yml:docker-compose.tools.yml
COMPOSE_PROFILES=app,gateway-classic,db,pma,elasticsearch,redis,redis-session,rabbitmq,workers,mailhog,setup

```

You should review the default env variables defined in `.env` file. Use `export` method to override these values

i.e:

```
export PHRASEANET_DOCKER_TAG=latest
export INSTALL_ACCOUNT_EMAIL=foo@bar.com
export INSTALL_ACCOUNT_PASSWORD=$3cr3t!
export PHRASEANET_APP_PORT=8082
```

If you want persit this change you can also save your change in a files named `env.local` or `.env.local`

These files are git ignored and permit stack customization without git conflict.

If you are not interested in the development of Phraseanet, you can ignore everything in `.env` after the `DEV Purpose` part.

### stack Management

[](#stack-management)

To start and stop the stack, use the `start|stop|status|version|maintenance [on|off]|logs [container_name]|apply-setup`script at the project root. this script work only Linux and MacOS.

This script wrapping standard oprations for the stack, using standard docker compose cmd and take in account `.env` and `env.local | .env.local` files.

This script is useful if you are using the database container within the stack.

More reading [here](doc/infra/compose/stack.md)

### Using a env.local method for custom .env values

[](#using-a-envlocal-method-for-custom-env-values)

It may be easier to deal with a local file to manage our env variables.

You can add your `env.local` at the root of this project and define a command function in your `~/.bashrc` or `~/.zshrc`:

```
#######################################
# Docker compose helper:
#   Locate first defined environment
#   file and inject variables found in
#   docker compose command.
# Arguments:
#   command (string)
# Usage example:
#   dc up -d
#######################################

function dc() {
  for envFile in {".env.local","env.local"}; do
    if [ -f ${envFile} ]; then
      docker compose --env-file=.env --env-file=${envFile} $@
      return
    fi
  done

  docker compose $@
}
```

> Note that helper function only works with `"docker compose"` .

### Phraseanet Docker Images

[](#phraseanet-docker-images)

You have two choices

#### Use the prebuild image from dockerhub, see DockerHub section bellow for more information.

[](#use-the-prebuild-image-from-dockerhub-see-dockerhub-section-bellow-for-more-information)

set env var
`PHRASEANET_DOCKER_REGISTRY`

i.e:

```
# Registry from where you pull Docker images
PHRASEANET_DOCKER_REGISTRY=alchemyfr
```

and launch

`docker compose pull`

> Pulling images from Docker Hub takes ~ 3 minutes, depending on your bandwith

#### Build local images

[](#build-local-images)

launch

`docker compose build`

> The first build takes ~ 30 minutes on host without any Docker building cache, depending on your bandwith and the host capacity.

### Running the application

[](#running-the-application)

```
docker compose up -d

```

The default parameters allow you to reach the app with : `http://localhost:8082`

### Phraseanet images from Docker Hub

[](#phraseanet-images-from-docker-hub)

Retrieve on Docker Hub prebuilt images for Phraseanet.

```
https://hub.docker.com/r/alchemyfr/phraseanet-fpm

https://hub.docker.com/r/alchemyfr/phraseanet-worker

https://hub.docker.com/r/alchemyfr/phraseanet-nginx

https://hub.docker.com/repository/docker/alchemyfr/phraseanet-db

https://hub.docker.com/repository/docker/alchemyfr/phraseanet-elasticsearch

```

#### Tag organization on Docker Hub

[](#tag-organization-on-docker-hub)

`latest` : latest stable version

`4.1.2` : Phraseanet version 4.1.2

`4.1.1` : Phraseanet version 4.1.1

Etc

`nightly` : Development version, the latest version with successful automated tests. Built and published every night

Development mode
----------------

[](#development-mode)

The development mode uses the `docker-compose-override.yml` file, so you need to set `COMPOSE_FILE` and `COMPOSE_PROFILE` env

```
COMPOSE_FILE=docker-compose.yml:docker-compose.datastores.yml:docker-compose.tools.yml:docker-compose.override.yml
COMPOSE_PROFILES=app,gateway-classic,db,pma,elasticsearch,redis,rabbitmq,workers,mailhog,builder

```

You can run it with:

```
docker compose up -d

```

The environment is not ready yet: you have to fetch all dependencies.

This can be made easily from the builder container:

```
docker compose run --rm -u app builder make install install_composer_dev

```

> Please note that the phraseanet image does not contain nor `composer` neither `node` tools. This allows the final image to be light. If you need to use dev tools, ensure you are running the `builder` image!

### Developer shell

[](#developer-shell)

You can also obtain a shell access in builder container:

```
docker compose run --rm builder /bin/bash
# or
docker compose run --rm builder /bin/zsh
```

In this container you will have the same libraries (PHP, Node, composer, ...) that are used to build images. Also you have utils for development like telnet, ping, ssh, git, ... Your $HOME/.ssh directory is also mounted to builder's home with your ssh agent.

### Using Xdebug

[](#using-xdebug)

Xdebug is enabled by default with the `docker-compose.override.yml`You can disable it by setting:

```
export XDEBUG_ENABLED=0
```

Remote host is fixed because of the subnet network from compose.

You need to configure file mapping in your IDE. For PhpStorm, you can follow this example:

[![PhpStorm mapping](https://camo.githubusercontent.com/a8f836258c764b48d2897d1f3fdc375faa5e35cd3c49ee625f1225043aac483c/68747470733a2f2f692e6962622e636f2f474d62343343762f696d6167652e706e67)](https://camo.githubusercontent.com/a8f836258c764b48d2897d1f3fdc375faa5e35cd3c49ee625f1225043aac483c/68747470733a2f2f692e6962622e636f2f474d62343343762f696d6167652e706e67)

> Configure the `Absolute path on the server` to `/var/alchemy/Phraseanet` at the project root path (i.e. `~/projects/Phraseanet`).

#### Xdebug on MacOS

[](#xdebug-on-macos)

You have to set the following env:

```
XDEBUG_REMOTE_HOST=host.docker.internal
```

> Don't forget to recreate your container (`docker compose up -d phraseanet`)

### Build images with plugins

[](#build-images-with-plugins)

Plugins can be installed during build if you set the `PHRASEANET_PLUGINS` env var as follows:

```
PHRASEANET_PLUGINS="https://github.com/alchemy-fr/Phraseanet-plugin-expose.git"

# You can optionally precise the branch to install
# If not precised, the main branch will be pulled
PHRASEANET_PLUGINS="git@github.com:alchemy-fr/Phraseanet-plugin-webgallery.git(custom-branch)"

# Plugins are separated by semicolons
PHRASEANET_PLUGINS="git@github.com:foo/bar.git(branch-1);git@github.com:baz/42.git"
```

> Prefer the HTTPS URL for public repositories, you will not be required to provide your SSH key.

If you install private plugins, make sure you export your SSH private key content in order to allow docker build to access the GIT repository: Also ensure you're using the SSH URL form (i.e: `git@github.com:alchemy-fr/repo.git`).

```
export PHRASEANET_SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
# or if your private key is protected by a passphrase:
export PHRASEANET_SSH_PRIVATE_KEY=$(openssl rsa -in ~/.ssh/id_rsa -out /tmp/id_rsa_raw && cat /tmp/id_rsa_raw && rm /tmp/id_rsa_raw)
```

#### Running workers

[](#running-workers)

```
docker compose -f docker-compose.yml run --rm worker
```

Where `` can be:

- `bin/console worker:execute -m 2` (default)
- `bin/console task-manager:scheduler:run`
- ...

Try Phraseanet with Pre installed VM (deprecated)
=================================================

[](#try-phraseanet-with-pre-installed-vm-deprecated)

You can also download a testing pre installed Virtual Machine in OVA format here :

###  Health Score

56

—

FairBetter than 98% of packages

Maintenance72

Regular maintenance activity

Popularity34

Limited adoption so far

Community32

Small or concentrated contributor base

Maturity78

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~64 days

Recently: every ~38 days

Total

75

Last Release

296d ago

Major Versions

3.8.8 → 4.0.0-alpha.22015-12-02

3.8.x-dev → 4.0.32018-09-07

4.1.3 → 3285.x-dev2021-11-30

PHP version history (5 changes)3.7.0PHP &gt;=5.3.3

3.8.7PHP &gt;=5.4

4.0.0-alpha.2PHP &gt;=5.5

4.0.0PHP &gt;=5.5.9

3285.x-devPHP &gt;=7.0 &lt;7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/3c264f69af4c60cb9cc98a522b4663f4b6a2708629cabc14409478ab6fc35348?d=identicon)[romain](/maintainers/romain)

---

Top Contributors

[![romainneutron](https://avatars.githubusercontent.com/u/137574?v=4)](https://github.com/romainneutron "romainneutron (5174 commits)")[![nlegoff](https://avatars.githubusercontent.com/u/511494?v=4)](https://github.com/nlegoff "nlegoff (2526 commits)")[![nmaillat](https://avatars.githubusercontent.com/u/1225962?v=4)](https://github.com/nmaillat "nmaillat (2241 commits)")[![aynsix](https://avatars.githubusercontent.com/u/35221835?v=4)](https://github.com/aynsix "aynsix (1234 commits)")[![jygaulier](https://avatars.githubusercontent.com/u/1247618?v=4)](https://github.com/jygaulier "jygaulier (1103 commits)")[![bburnichon](https://avatars.githubusercontent.com/u/2437286?v=4)](https://github.com/bburnichon "bburnichon (406 commits)")[![HRavalomanana](https://avatars.githubusercontent.com/u/45967274?v=4)](https://github.com/HRavalomanana "HRavalomanana (312 commits)")[![lostdalek](https://avatars.githubusercontent.com/u/2403818?v=4)](https://github.com/lostdalek "lostdalek (293 commits)")[![mike-esokia](https://avatars.githubusercontent.com/u/16316721?v=4)](https://github.com/mike-esokia "mike-esokia (191 commits)")[![aztech-dev](https://avatars.githubusercontent.com/u/93562568?v=4)](https://github.com/aztech-dev "aztech-dev (178 commits)")[![greenj](https://avatars.githubusercontent.com/u/880776?v=4)](https://github.com/greenj "greenj (159 commits)")[![moctardiouf](https://avatars.githubusercontent.com/u/1235702?v=4)](https://github.com/moctardiouf "moctardiouf (153 commits)")[![csaoh](https://avatars.githubusercontent.com/u/2509916?v=4)](https://github.com/csaoh "csaoh (99 commits)")[![kwemi](https://avatars.githubusercontent.com/u/76567?v=4)](https://github.com/kwemi "kwemi (68 commits)")[![damienalexandre](https://avatars.githubusercontent.com/u/225704?v=4)](https://github.com/damienalexandre "damienalexandre (65 commits)")[![xrousset78800](https://avatars.githubusercontent.com/u/3024133?v=4)](https://github.com/xrousset78800 "xrousset78800 (65 commits)")[![anthonycabot](https://avatars.githubusercontent.com/u/1416565?v=4)](https://github.com/anthonycabot "anthonycabot (48 commits)")[![weblate](https://avatars.githubusercontent.com/u/1607653?v=4)](https://github.com/weblate "weblate (41 commits)")[![AlexandreBrach](https://avatars.githubusercontent.com/u/594612?v=4)](https://github.com/AlexandreBrach "AlexandreBrach (39 commits)")[![filipx](https://avatars.githubusercontent.com/u/25391127?v=4)](https://github.com/filipx "filipx (36 commits)")

---

Tags

damdigital-asset-managementdockerdocker-composekubernetesmammedia-asset-managementphpphraseanetsingle-page-applications

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/phraseanet-phraseanet/health.svg)

```
[![Health](https://phpackages.com/badges/phraseanet-phraseanet/health.svg)](https://phpackages.com/packages/phraseanet-phraseanet)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[concrete5/core

Concrete core subtree split

19159.3k48](/packages/concrete5-core)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[magento/community-edition

Magento 2 (Open Source)

12.1k52.1k10](/packages/magento-community-edition)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
