eesyphp/docs/install.md
Benjamin Renard 6fdc5447f1 Some improvments from recent works on apps based on its "framework"
* Code cleaning and fix some small errors using Phpstan
* Configure pre-commit to run Phpstan before each commit
* Some little improvments and logging, mail, smarty & URL libs
* Add Sentry integration
* Add Webstat JS code inclusion
* Install Smarty dependency using composer

Breaking changes:
* Rename Event class as HookEvent to avoid conflict with PECL event
* URL with refresh GET parameter now automatically trigger redirection without it
 after page loading to avoid to keep it in URL
2023-01-29 11:51:41 +01:00

3.5 KiB

Installation

Dependencies :

Some Debian packages have to be installed :

apt install git composer php-cli php-mail php-mail-mine php-net-smtp php-auth-sasl php-json php-mbstring php-intl
# for PostgreSQL DB backend
apt install php-pgsql
# for MySQL/MariaDB DB backend
apt install php-mysql
# for sqlite DB backend
apt install sqlite3 php-sqlite3

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/php/php7.3-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 :

<VirtualHost *:80>
        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
</VirtualHost>

<VirtualHost *:443>
        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

        <FilesMatch \.php$>
                SetHandler "proxy:unix:/run/php/php7.3-fpm-eesyphp.sock|fcgi:///"
        </FilesMatch>

        <Directory   /var/www/eesyphp/public_html>
                # Acceptable overrides:
                # - FileInfo (.htacces-based rewrite rules)
                # - AuthConfig (.htaccess-based basic auth)
                AllowOverride FileInfo AuthConfig
        </Directory>

        # 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
</VirtualHost>