# Projeqtor

# Docker Projeqtor

[GitHub repo](https://github.com/Nouuu/Docker-Projeqtor)

This docker image provides a [Projeqtor](https://www.projeqtor.org) container with LDAP support.

This image is based on `php:7.4-apache`

Version of Projeqtor in this image is currently **9.4.2**

## Exposed ports :

- 80 : Projeqtor Webpanel

## Volumes

They are two volume mounted on this image :

- /mnt/documents
- /mnt/logs

Both need to have rw access

## Environment

Current used environments vars :

### PHP ENV

<table id="bkmrk-environment-variable"><thead><tr><th>Environment variable</th><th>Default</th><th>Recommended</th></tr></thead><tbody><tr><td>PHP\_MAX\_INPUT\_VARS</td><td>4000</td><td>Must be &gt; 2000 for real work allocation screen</td></tr><tr><td>PHP\_REQUEST\_TERMINATE\_TIMEOUT</td><td>0</td><td>Must not end requests on timeout to let cron run without ending</td></tr><tr><td>PHP\_MAX\_EXECUTION\_TIME</td><td>30</td><td>30 is minimum advised</td></tr><tr><td>PHP\_MEMORY\_LIMIT</td><td>512M</td><td>512M is minimum advised for PDF generation</td></tr></tbody></table>

### Projeqtor ENV

<table id="bkmrk-name-default-usage-p"><thead><tr><th>Name</th><th>Default</th><th>Usage</th></tr></thead><tbody><tr><td>PJT\_DB\_TYPE</td><td>mysql</td><td>Database type. Can be `mysql` or `pgsql`</td></tr><tr><td>PJT\_DB\_HOST</td><td>127.0.0.1</td><td>Database host (server name)</td></tr><tr><td>PJT\_DB\_PORT</td><td>3306</td><td>Database port</td></tr><tr><td>PJT\_DB\_USER</td><td>root</td><td>Database user to connect</td></tr><tr><td>PJT\_DB\_PASSWORD</td><td>root</td><td>Database password for user</td></tr><tr><td>PJT\_DB\_NAME</td><td>projeqtor</td><td>Database schema name</td></tr><tr><td>PJT\_DB\_PREFIX</td><td>***`empty`***</td><td>Database prefix for table names</td></tr><tr><td>PJT\_SSL\_KEY</td><td>***`empty`***</td><td>SSL Certificate key path</td></tr><tr><td>PJT\_SSL\_CERT</td><td>***`empty`***</td><td>SSL Certificate path</td></tr><tr><td>PJT\_SSL\_CA</td><td>***`empty`***</td><td>SSL Certificate CA path</td></tr><tr><td>PJT\_ATTACHMENT\_MAX\_SIZE\_MAIL</td><td>2097152</td><td>Max file size in email</td></tr><tr><td>PJT\_LOG\_LEVEL</td><td>2</td><td>Log level {'4' for script tracing, '3' for debug, '2' for general trace, '1' for error trace, '0' for none}</td></tr><tr><td>PJT\_ENFORCE\_UTF8</td><td>1</td><td>  
</td></tr></tbody></table>

## Installed PHP extensions

<table id="bkmrk-extension-usage-qd-f"><thead><tr><th>Extension</th><th>Usage</th></tr></thead><tbody><tr><td>qd</td><td>For reports graphs</td></tr><tr><td>imap</td><td>To retrieve mails to insert replay as notes</td></tr><tr><td>mbstring</td><td>Mandatory. for UTF-8 compatibility</td></tr><tr><td>mysqli</td><td>For default MySql database</td></tr><tr><td>pgsql</td><td>If database is PostgreSql</td></tr><tr><td>pdo</td><td>BDD connector</td></tr><tr><td>pdo\_mysql</td><td>For default MySql database</td></tr><tr><td>pdo\_pgsql</td><td>If database is PostgreSql</td></tr><tr><td>openssl</td><td>To send mails if smtp access is authentified (with user / password)</td></tr><tr><td>ldap</td><td>Directory Access Protocol, and is a protocol used to access "Directory Servers"</td></tr><tr><td>zip</td><td>ZipArchive class is mandatory to manage plugins and export to Excel format</td></tr></tbody></table>

# Ready 2 Go Stack

Here is my own [compose](https://wiki2.nospy.fr/attachments/8) I used to deploy Projeqtor stack with MySQL database.

First deploy may require admin login (on Projeqtor login page) to init DB.

<p class="callout warning">This stack is for Docker Swarm, if you want to run it on simple docker compose, you must replace `overlay` in network definition by `bridge`</p>

```yaml
version: '3.8'

services:
  mysql_service:
    image: mysql:latest
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - projeqtor_network
    environment:
      - MYSQL_ROOT_PASSWORD=changeme
      - MYSQL_DATABASE=projeqtor
  projeqtor_service:
    image: nospy/projeqtor:latest
    depends_on:
      - mysql_service
    volumes:
      - projeqtor_documents:/mnt/documents
      - projeqtor_logs:/mnt/logs
    ports:
      - "25:25"
      - "80:80"
    networks:
      - projeqtor_network
    environment:
      - PHP_MAX_EXECUTION_TIME=30
      - PHP_MAX_INPUT_VARS=4000
      - PHP_MAX_UPLOAD_SIZE=1G
      - PHP_MEMORY_LIMIT=512M
      - PHP_REQUEST_TERMINATE_TIMEOUT=0
      - PJT_ATTACHMENT_MAX_SIZE_MAIL=2097152
      - PJT_DB_TYPE=mysql
      - PJT_DB_HOST=mysql_service
      - PJT_DB_PORT=3306
      - PJT_DB_NAME=projeqtor
      - PJT_DB_USER=root
      - PJT_DB_PASSWORD=changeme
volumes:
  mysql_data:
  projeqtor_documents:
  projeqtor_logs:

networks:
  projeqtor_network:
    driver: overlay
    attachable: true

```