# Installation
## Dependencies :
This Debian packages have to be installed :
- git *(only for deployment only)*
- composer (and unzip or zip)
- php-cli
- php-mail
- php-mail-mine
- php-net-smtp
- php-auth-sasl
- php-json
- php-mbstring
- php-pgsql *(for PostgreSQL DB backend)*
- php-sqlite3 *(for sqlite DB backend, sqlite3 tool (provided by the same name package) is also used to create the DB file)*
- smarty3
## Deployment :
To deploy this application, for instance in */var/www/eesyphp*, run this commands :
cd /var/www
adduser --home /var/www/eesyphp --no-create-home --disabled-password --gid 33 eesyphp
git clone https://gogs.example.org/example/eesyphp.git /var/www/eesyphp
chown eesyphp: /var/www/eesyphp
ln -s /var/www/eesyphp/bin/items.wrapper /usr/local/bin/eesyphp
ln -s /var/www/eesyphp/docs/eesyphp.cron /etc/cron.d/eesyphp
ln -s /var/www/eesyphp/docs/eesyphplogrotate /etc/logrotate.d/eesyphp
## Install PHP dependencies :
su - eesyphp
composer install
## Initialize database :
### SQLite
To initialize SQLite database, run this commands :
cd /var/www/eesyphp/data
sqlite3 db.sqlite3 < sqlite.init-db.sql
### PostgreSQL
To initialize PostgreSQL database, run this commands :
su - postgres
createuser -P items
createdb -O items items
psql items < /var/www/eesyphp/data/pgsql.init-db.sql
### MariaDB / MySQL
To initialize MariaDB / MySQL database, run this commands :
sudo mysql << EOF
CREATE DATABASE items;
GRANT ALL ON items.* TO items@localhost IDENTIFIED BY 'items';
EOF
sudo mysql items < /var/www/eesyphp/data/mariadb-mysql.init-db.sql
## Configure PHP FPM pool :
You could configure a dedicated *PHP FPM pool*.
***Example :***
```
[eesyphp]
user = eesyphp
group = www-data
listen = /run/php7.0-fpm_eesyphp.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
php_value[error_log] = /var/www/eesyphp/data/logs/php.log
php_value[upload_max_filesize] = 10M
php_value[post_max_size] = 10M
php_value[memory_limit] = 10M
php_value[default_charset] = 'UTF-8'
php_value[date.timezone] = Europe/Paris
```
## Configure Apache VirtualHost :
You could configure a dedicated *VirtualHost*.
***Example :***
```
ServerName eesyphp.example.org
DocumentRoot /var/www/empty
RewriteEngine on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
ErrorLog /var/log/apache2/eesyphp.example.org-error.log
CustomLog /var/log/apache2/eesyphp.example.org-access.log combined
ServerName eesyphp.example.org
DocumentRoot /var/www/eesyphp/public_html
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/eesyphp.example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/eesyphp.example.org/privkey.pem
SetHandler "proxy:unix:/run/php7.0-fpm_eesyphp.sock|fcgi:///"
# Acceptable overrides:
# - FileInfo (.htacces-based rewrite rules)
# - AuthConfig (.htaccess-based basic auth)
AllowOverride FileInfo AuthConfig
# Compress most static files
AddOutputFilterByType DEFLATE text/html text/xml text/css application/javascript
ErrorLog /var/log/apache2/eesyphp.example.org-error.log
CustomLog /var/log/apache2/eesyphp.example.org-access.log combined
```