diff --git a/docs/20_Installation.md b/docs/20_Installation.md index 79c8127a44a6a61d8908f4b28a0678e238834d02..97212ff5479c2a711699c9722b68535df6105582 100644 --- a/docs/20_Installation.md +++ b/docs/20_Installation.md @@ -1,10 +1,9 @@ # Installation on server - ## Receive data * Create an ssh user "deployment" to receive data -* Create a package directory - it can be outside webroot eg. /var/www/cipkg.example.com/packages/ with write permissions for user "deployment" and read persmissions for webserver. +* Create a package directory - it can be outside webroot eg. /var/www/cipkg.example.com/packages/ with write permissions for user "deployment" and read permissions for webserver. ```txt mkdir /var/www/cipkg.example.com/packages/ @@ -12,7 +11,11 @@ chown deployment:www-data /var/www/cipkg.example.com/packages/ chmod 750 /var/www/cipkg.example.com/packages/ ``` -* Configue the ci sever to rsync with ssh user "deployment" here +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 ## Xsentfile module @@ -29,7 +32,6 @@ path on your websever. Redirect all requests to /packages/[whatever] to /packages/index.php - Example snippet ```text @@ -39,6 +41,9 @@ Example snippet <Location "/packages"> + # for Php as php-fpm service: + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] diff --git a/docs/30_Configuration.md b/docs/30_Configuration.md index 8088eb91c86ded58393776cd254d2ae6fce0cef4..be6ce5ced351832b9134b71f4276e697a9c90378 100644 --- a/docs/30_Configuration.md +++ b/docs/30_Configuration.md @@ -21,8 +21,6 @@ return array( '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 @@ -35,27 +33,20 @@ return array( // 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 + // Enable for troubleshooting + 'debug'=>false, -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 +| Key | Description | +|--- |--- | +| apikey | A secret for the server. A client that wants to fetch a package must use the same secret | +| packagedir | physical folder where to find the packages. To this folder you need to point XSendFilePath in your apache httpd vhost too. | +| maxage | max age of request ... client and server need to be in sync | +| onetimesecret | force that a hash can be used only once. There should be no reason to turn it off. | +| maxlockfilesize | filesize of lock file with stored hashed before starting garbage collection. 10.000 byte are reached after 114 req | +| tmpdir | tmp dir to store used hashes | +| showdircontent | allow directory listing when accessing a path of a package. true is required to fetch all packages by a single request | +| debug | enable debug output | diff --git a/docs/40_Usage.md b/docs/40_Usage.md index 561641bf0614788e4c2285b2dbff5df48eb48e39..3dcecfc36a9d2ebfa2c30509a5c5a0e92dc3485b 100644 --- a/docs/40_Usage.md +++ b/docs/40_Usage.md @@ -7,6 +7,11 @@ See deployment project <https://git-repo.iml.unibe.ch/iml-open-source/imldeploym The download script is bin/getfile.sh. +```text +wget -O getfile.sh "https://git-repo.iml.unibe.ch/iml-open-source/imldeployment-client/-/raw/master/bin/getfile.sh?ref_type=heads" +chmod 755 getfile.sh +``` + ## How does it work? TODO: needs to be completed. @@ -33,3 +38,57 @@ Possible GET requests are: If a valid request came in then the hash will be written to `[approot]/tmp/used_hashes.txt`. This file will be cleaned up if reaching the defined file size with value of *maxlockfilesize*. + +## Test package download + +If you use the docker environment for development: + +In your app root you there is a folder "example-packages". Inside the docker container it is available as /var/www/ci-pkg/example-packages/. + +* Below the package folder folders are subfolders for phases (preview, stage, live and "test"). +* below a phase are the folders with the project id +* inside the project folder are the files per project + +```text +example-packages/ +├── live +├── preview +├── stage +└── test + └── example-prj + └── hello.txt +``` + +In your app root go to the the "tests" folder. +This will download the "hello.txt" into the current folder: + +```txt +./getfile.sh -u http://localhost:8001 -s myapikey -e test -p example-prj -f hello.txt +-rw-r--r-- 1 axel axel 1152 Sep 15 14:34 hello.txt +``` + +For less params with getfile.sh there is a config: + +```txt +cat getfile.sh.cfg +# for less params with getfile.sh +IMLCI_PKG_SECRET=myapikey +IMLCI_URL=http://localhost:8001 +IMLCI_PHASE=test +``` + +With it you can execute ``./getfile.sh -p example-prj -f hello.txt`` too. + +If you enabled the file listing you get a list of files: + +```txt +./getfile.sh -p example-prj +file:hello.txt +``` + +## Troubleshooting + +To have more output you have these possibilities: + +* in the command with ./getfile.sh add the flag ``-d`` to enable debugging for this script +* in public_html/inc_config.php set the key debug to enable the debugging on server (disable it as soon you can)