# Installation on server

## Xsentfile module

On Apache Webserver install xsendfile module.

i.e. on CentOS

`yum install mod_xsendfile`

## Configuration of vhost

In the Apache vhost for cipkg server set the XSendFilePath - it is an absolute
path on your websever.

Redirect all requests to /packages/[whatever] to /packages/index.php


Example snippet

```text

    XSendFile On
    XSendFilePath "/var/www/cipkg.example.com/packages/"

    <Location "/packages">

        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]

    </Location>
```

## Configuration of a secret on server

if [approot]/public_html/ copy inc_config.php.dist to inc_config.php.dist.
set a secret behind key apikey.

It means: this is a shared secret between this server and all your application servers.

It is not realized yet to use a secret per application.

```php
$approot=dirname(__DIR__);
return array(
    
    // define a secret aka api key
    'apikey'=>'our-package-server-secret',

    // packages to deliver where files from ci server are synched
    'packagedir'=>$approot.'/packages',
    
    // max age of request ... client and server need to be in sync
    'maxage'=>60,

    // force that a hash can be used only once
    // a side effect is that fast repeat or simultanius requests
    // will be denied.
    'onetimesecret'=>true,

    // filesize of lock file with stored hashed before starting garbage collection
    // 10.000 byte are reached after 114 req
    'maxlockfilesize'=>10000,
    
    // tmp dir to store used hashes
    'tmpdir'=>$approot.'/tmp',

    // allow directory listing when accessing a path of a package
    // true is required to fetch all packages
    'showdircontent'=>true,
);
```

## Prepare receive of packages

* Create an deployment account package server that can be used to be connected 
  via SSH by the ci server
* add the public key of www-data of the ci server into
  /home/deployment/.ssh/authorized keys
* Set permissions that the deployment user can write into
  /var/www/cipkg.example.com/packages/
  and the user of the webeservice can read it 
  `chown deployment:apache /var/www/cipkg.example.com/packages/` and
  `chmod 750 /var/www/cipkg.example.com/packages/`

## Ci server: add a sync target

TODO

In the config of CI web server add a sync target. Use

* the deployment user as ssh
* the fqdn as hostname
* the defined *packagedir* in your inc_config.php as target directory