php_fpm_docker 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/.rubocop.yml +20 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +79 -0
- data/LICENSE.txt +22 -0
- data/README.md +68 -0
- data/Rakefile +21 -0
- data/bin/php_fpm_docker +4 -0
- data/doc/graphs/structure/structure.gliffy +1 -0
- data/doc/graphs/structure/structure.png +0 -0
- data/doc/graphs/structure/structure.svg +1 -0
- data/lib/php_fpm_docker.rb +6 -0
- data/lib/php_fpm_docker/application.rb +314 -0
- data/lib/php_fpm_docker/launcher.rb +309 -0
- data/lib/php_fpm_docker/pool.rb +169 -0
- data/lib/php_fpm_docker/version.rb +5 -0
- data/php_fpm_docker.gemspec +30 -0
- data/spec/helper.rb +19 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/unit/application_spec.rb +197 -0
- data/spec/unit/launcher_spec.rb +339 -0
- data/spec/unit/pool_spec.rb +277 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 08561383c48f14924c1967249fe57a2dd35b6724
|
4
|
+
data.tar.gz: 721bc071962fa48d62240455d759c64083b3f73a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f841fdeef56027ca36a7c1b0d573d40f830d43b18bbbb38bc4afc926b6874f78bcf3313d9240b79e27cf2df386d4cda574b7973ca75641b77393cc40a29af4c2
|
7
|
+
data.tar.gz: 10aaa799db13f46ddad3b67a8e20235404399c732c23bc76e1522ab5f1818963e4f11eeb9f0ad7b8d74925890f9f96fcef4bc4cf9b306d087dd298339f99cbb8
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Style/Encoding:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Metrics/LineLength:
|
5
|
+
Max: 80
|
6
|
+
|
7
|
+
Metrics/MethodLength:
|
8
|
+
Max: 25
|
9
|
+
|
10
|
+
Metrics/ClassLength:
|
11
|
+
Max: 250
|
12
|
+
|
13
|
+
Metrics/AbcSize:
|
14
|
+
Max: 35
|
15
|
+
|
16
|
+
AllCops:
|
17
|
+
Exclude:
|
18
|
+
- 'Rakefile'
|
19
|
+
- 'spec/**/*'
|
20
|
+
- 'vendor/**/*'
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
php_fpm_docker (0.0.1)
|
5
|
+
docker-api
|
6
|
+
inifile
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
archive-tar-minitar (0.5.2)
|
12
|
+
ast (2.0.0)
|
13
|
+
astrolabe (1.3.0)
|
14
|
+
parser (>= 2.2.0.pre.3, < 3.0)
|
15
|
+
coveralls (0.7.2)
|
16
|
+
multi_json (~> 1.3)
|
17
|
+
rest-client (= 1.6.7)
|
18
|
+
simplecov (>= 0.7)
|
19
|
+
term-ansicolor (= 1.2.2)
|
20
|
+
thor (= 0.18.1)
|
21
|
+
diff-lcs (1.2.5)
|
22
|
+
docile (1.1.5)
|
23
|
+
docker-api (1.15.0)
|
24
|
+
archive-tar-minitar
|
25
|
+
excon (>= 0.38.0)
|
26
|
+
json
|
27
|
+
excon (0.41.0)
|
28
|
+
inifile (3.0.0)
|
29
|
+
json (1.8.1)
|
30
|
+
mime-types (2.4.3)
|
31
|
+
multi_json (1.10.1)
|
32
|
+
parser (2.2.0.pre.8)
|
33
|
+
ast (>= 1.1, < 3.0)
|
34
|
+
slop (~> 3.4, >= 3.4.5)
|
35
|
+
powerpack (0.0.9)
|
36
|
+
rainbow (2.0.0)
|
37
|
+
rake (10.3.2)
|
38
|
+
rest-client (1.6.7)
|
39
|
+
mime-types (>= 1.16)
|
40
|
+
rspec (3.1.0)
|
41
|
+
rspec-core (~> 3.1.0)
|
42
|
+
rspec-expectations (~> 3.1.0)
|
43
|
+
rspec-mocks (~> 3.1.0)
|
44
|
+
rspec-core (3.1.7)
|
45
|
+
rspec-support (~> 3.1.0)
|
46
|
+
rspec-expectations (3.1.2)
|
47
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
+
rspec-support (~> 3.1.0)
|
49
|
+
rspec-mocks (3.1.3)
|
50
|
+
rspec-support (~> 3.1.0)
|
51
|
+
rspec-support (3.1.2)
|
52
|
+
rubocop (0.27.1)
|
53
|
+
astrolabe (~> 1.3)
|
54
|
+
parser (>= 2.2.0.pre.7, < 3.0)
|
55
|
+
powerpack (~> 0.0.6)
|
56
|
+
rainbow (>= 1.99.1, < 3.0)
|
57
|
+
ruby-progressbar (~> 1.4)
|
58
|
+
ruby-progressbar (1.7.0)
|
59
|
+
simplecov (0.9.1)
|
60
|
+
docile (~> 1.1.0)
|
61
|
+
multi_json (~> 1.0)
|
62
|
+
simplecov-html (~> 0.8.0)
|
63
|
+
simplecov-html (0.8.0)
|
64
|
+
slop (3.6.0)
|
65
|
+
term-ansicolor (1.2.2)
|
66
|
+
tins (~> 0.8)
|
67
|
+
thor (0.18.1)
|
68
|
+
tins (0.13.2)
|
69
|
+
|
70
|
+
PLATFORMS
|
71
|
+
ruby
|
72
|
+
|
73
|
+
DEPENDENCIES
|
74
|
+
bundler (~> 1.3)
|
75
|
+
coveralls
|
76
|
+
php_fpm_docker!
|
77
|
+
rake
|
78
|
+
rspec
|
79
|
+
rubocop
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Christian Simon
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# PHP_FPM_Docker
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Build state
|
6
|
+
|
7
|
+
* Travis (RSpec & RuboCup)
|
8
|
+
[![Build Status](https://travis-ci.org/simonswine/php_fpm_docker.svg?branch=master)](https://travis-ci.org/simonswine/php_fpm_docker)
|
9
|
+
* Coveralls
|
10
|
+
[![Coverage Status](https://img.shields.io/coveralls/simonswine/php_fpm_docker.svg)](https://coveralls.io/r/simonswine/php_fpm_docker)
|
11
|
+
|
12
|
+
## Topology
|
13
|
+
|
14
|
+
![structure](https://raw.githubusercontent.com/simonswine/php_fpm_docker/master/doc/graphs/structure/structure.png)
|
15
|
+
|
16
|
+
|
17
|
+
## Installation & configuration
|
18
|
+
|
19
|
+
### Install gem
|
20
|
+
|
21
|
+
$ gem install php_fpm_docker
|
22
|
+
|
23
|
+
### Configure
|
24
|
+
|
25
|
+
## Docker images
|
26
|
+
|
27
|
+
### Requirements
|
28
|
+
|
29
|
+
* PHP-FastCGI binary installed in path
|
30
|
+
* [Spawn-FCGI][spawnfcgi] binary installed in path
|
31
|
+
|
32
|
+
|
33
|
+
### Examples
|
34
|
+
|
35
|
+
* [simonswine/ispconfig-php-5.6][image5.6]
|
36
|
+
* [simonswine/ispconfig-php-5.5][image5.5]
|
37
|
+
* [simonswine/ispconfig-php-5.4][image5.4]
|
38
|
+
* [simonswine/ispconfig-php-5.3][image5.3]
|
39
|
+
* [simonswine/ispconfig-php-5.2][image5.2]
|
40
|
+
* [simonswine/ispconfig-php-4.4][image4.4]
|
41
|
+
|
42
|
+
https://github.com/simonswine/docker-ispconfig-php
|
43
|
+
####
|
44
|
+
|
45
|
+
## Usage
|
46
|
+
|
47
|
+
TODO: Write usage instructions here
|
48
|
+
|
49
|
+
## Contributing
|
50
|
+
|
51
|
+
1. Fork it
|
52
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
53
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
54
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
55
|
+
5. Create new Pull Request
|
56
|
+
|
57
|
+
|
58
|
+
[docker]: https://www.docker.com/ "Docker"
|
59
|
+
[ispconfig]: http://www.ispconfig.org/page/home.html "ISPConfig"
|
60
|
+
[rubydocs]: https://github.com/jmcmanus/pagedown-extra "Pagedown Extra"
|
61
|
+
[phpfpm]: http://php.net/manual/de/install.fpm.php "PHP FPM"
|
62
|
+
[spawnfcgi]: http://redmine.lighttpd.net/projects/spawn-fcgi "Spawn-FCGI"
|
63
|
+
[image5.6]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-5.6/ "simonswine/ispconfig-php-5.6"
|
64
|
+
[image5.5]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-5.5/ "simonswine/ispconfig-php-5.5"
|
65
|
+
[image5.4]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-5.4/ "simonswine/ispconfig-php-5.4"
|
66
|
+
[image5.3]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-5.3/ "simonswine/ispconfig-php-5.3"
|
67
|
+
[image5.2]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-5.2/ "simonswine/ispconfig-php-5.2"
|
68
|
+
[image4.4]: https://registry.hub.docker.com/u/simonswine/ispconfig-php-4.4/ "simonswine/ispconfig-php-4.4"
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
# rspec
|
5
|
+
begin
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
rescue LoadError
|
9
|
+
end
|
10
|
+
|
11
|
+
# rubocop
|
12
|
+
begin
|
13
|
+
require 'rubocop/rake_task'
|
14
|
+
RuboCop::RakeTask.new
|
15
|
+
rescue LoadError
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Run all tests'
|
19
|
+
task :test => [:spec, :rubocop]
|
20
|
+
|
21
|
+
task :default => :test
|
data/bin/php_fpm_docker
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"rgba(0, 0, 0, 0)","width":859,"height":350,"nodeIndex":201,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":false,"drawingGuidesOn":false,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":6.5,"y":5.5},"max":{"x":858.3333333333335,"y":350}},"objects":[{"x":591.8,"y":165.2,"rotation":0.0,"id":139,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":43,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":129,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":110,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cc0000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.7999999999999545,4.800000000000068],[-0.7999999999999545,28.80000000000001]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":591.8,"y":118.0,"rotation":0.0,"id":138,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":42,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":129,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":127,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cc0000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.7999999999999545,2.000000000000057],[-0.7999999999999545,-18.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":511.0,"y":50.0,"rotation":0.0,"id":127,"width":160.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","order":36,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.199999999999999,"y":0.0,"rotation":0.0,"id":128,"width":153.59999999999997,"height":12.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:11px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">PHP_FPM_Docker</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":597.4,"y":236.39999999999998,"rotation":0.0,"id":112,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":34,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":110,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":85,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0b5394","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-6.399999999999977,-2.3999999999999773],[-6.399999999999977,63.59999999999991]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":511.0,"y":194.0,"rotation":0.0,"id":110,"width":160.0,"height":40.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.199999999999998,"y":0.0,"rotation":0.0,"id":111,"width":153.59999999999997,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">Apache / Nginx</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":31.0,"y":50.0,"rotation":0.0,"id":71,"width":460.0,"height":210.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#ffffff","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":72,"width":456.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">Docker</span></span></p>","tid":null,"valign":"bottom","vposition":"none","hposition":"none"}},"children":[]}]},{"x":190.2,"y":235.60000000000002,"rotation":0.0,"id":97,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":29,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":19,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":85,"py":0.0,"px":0.2928932188134524}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0b5394","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[2.2213562373095215,-1.6000000000000227],[2.2213562373095215,31.39999999999992],[359.3786437626905,31.39999999999992],[359.3786437626905,64.39999999999986]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":413.4,"y":236.39999999999998,"rotation":0.0,"id":87,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":28,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":66,"py":1.0,"px":0.7071067811865476}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":85,"py":0.0,"px":0.2928932188134524}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0b5394","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-0.9786437626904672,-2.3999999999999773],[-0.9786437626904672,30.599999999999966],[136.1786437626905,30.599999999999966],[136.1786437626905,63.59999999999991]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":271.0,"y":66.0,"rotation":0.0,"id":14,"width":200.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#ffffff","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.636363636363635,"y":0.0,"rotation":0.0,"id":15,"width":192.72727272727263,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"\">Docker image</span></p><p style=\"text-align:center;\"><span style=\"\">simonswine/ispconfig-php-5.4</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":51.0,"y":66.0,"rotation":0.0,"id":2,"width":200.0,"height":50.00000000000006,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":2,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#ffffff","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.636363636363635,"y":0.0,"rotation":0.0,"id":13,"width":192.72727272727263,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"\">Docker image</span></p><p style=\"text-align:center;\"><span style=\"\">simonswine/ispconfig-php-5.6</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":61.0,"y":204.0,"rotation":0.0,"id":21,"width":180.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":8,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.599999999999999,"y":0.0,"rotation":0.0,"id":22,"width":172.79999999999995,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">spawn-fcgi</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":61.0,"y":164.0,"rotation":0.0,"id":29,"width":180.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":10,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.599999999999999,"y":0.0,"rotation":0.0,"id":30,"width":172.79999999999995,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">php-cgi</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":51.0,"y":134.0,"rotation":0.0,"id":19,"width":200.0,"height":100.00000000000001,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":4.0,"y":0.0,"rotation":0.0,"id":20,"width":192.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">Docker container web1</span></span></p>","tid":null,"valign":"top","vposition":"none","hposition":"none"}},"children":[]}]},{"x":281.0,"y":204.0,"rotation":0.0,"id":62,"width":180.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":15,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.599999999999999,"y":0.0,"rotation":0.0,"id":63,"width":172.79999999999995,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">spawn-fcgi</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":281.0,"y":164.0,"rotation":0.0,"id":64,"width":180.0,"height":20.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":3.599999999999999,"y":0.0,"rotation":0.0,"id":65,"width":172.79999999999995,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">php-cgi</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":271.0,"y":134.0,"rotation":0.0,"id":66,"width":200.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","order":13,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":true,"state":0,"opacity":1.0,"shadowX":4.0,"shadowY":4.0}},"linkMap":[],"children":[{"x":4.0,"y":0.0,"rotation":0.0,"id":67,"width":192.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">Docker container web2</span></span></p>","tid":null,"valign":"top","vposition":"none","hposition":"none"}},"children":[]}]},{"x":511.0,"y":120.00000000000006,"rotation":0.0,"id":129,"width":160.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","order":38,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.199999999999999,"y":0.0,"rotation":0.0,"id":130,"width":153.59999999999997,"height":12.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:11px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">ISPConfig</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":508.6,"y":94.0,"rotation":0.0,"id":134,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":41,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":127,"py":0.5,"px":0.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":66,"py":0.29289321881345237,"px":1.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cc0000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[2.3999999999999773,-19.0],[-17.600000000000023,-19.0],[-17.600000000000023,69.28932188134524],[-37.60000000000002,69.28932188134524]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":587.0,"y":66.80000000000001,"rotation":0.0,"id":133,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":40,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":127,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":19,"py":0.2928932188134525,"px":1.1102230246251563E-16}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cc0000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[4.0,-16.80000000000001],[4.0,-56.80000000000001],[-576.0,-56.80000000000001],[-576.0,96.48932188134523],[-536.0,96.48932188134523]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":150.2,"y":238.0,"rotation":0.0,"id":82,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":24,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":19,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":76,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.8000000000000114,-4.0],[0.8000000000000114,62.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":371.0,"y":238.79999999999995,"rotation":0.0,"id":83,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":25,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":66,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":79,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":0,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,-4.7999999999999545],[0.0,61.19999999999993]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":51.0,"y":300.0,"rotation":0.0,"id":76,"width":200.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.octagon","order":20,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.octagon.basic_v1","strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.9999999999999996,"y":0.0,"rotation":0.0,"id":78,"width":191.99999999999997,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"\">Volume</span></p><p style=\"text-align:center;\"><span style=\"\">/var/www/clients/client1/web1</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":271.0,"y":299.9999999999999,"rotation":0.0,"id":79,"width":200.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.octagon","order":22,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.octagon.basic_v1","strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.9999999999999996,"y":0.0,"rotation":0.0,"id":80,"width":191.99999999999997,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"\">Volume</span></p><p style=\"text-align:center;\"><span style=\"\">/var/www/clients/client1/web2</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":491.0,"y":299.9999999999999,"rotation":0.0,"id":85,"width":200.0,"height":50.0,"uid":"com.gliffy.shape.basic.basic_v1.default.octagon","order":26,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.octagon.basic_v1","strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":3.9999999999999996,"y":0.0,"rotation":0.0,"id":86,"width":191.99999999999997,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"\">Volume</span></p><p style=\"text-align:center;\"><span style=\"\">/var/lib/php5-fpm</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[]}]},{"x":153.4,"y":133.2,"rotation":0.0,"id":34,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":12,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":19,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#e69138","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[-2.4000000000000057,-17.199999999999932],[-2.4000000000000057,-11.199999999999946],[-2.4000000000000057,-5.19999999999996],[-2.4000000000000057,0.8000000000000114]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":183.39999999999998,"y":239.20000000000005,"rotation":0.0,"id":68,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":19,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":14,"py":1.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":66,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#e69138","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":10.0,"controlPath":[[187.60000000000002,-123.20000000000005],[187.60000000000002,-117.20000000000005],[187.60000000000002,-111.20000000000005],[187.60000000000002,-105.20000000000005]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[]},{"x":149.4,"y":205.20000000000005,"rotation":0.0,"id":105,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":30,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":21,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":29,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff00ff","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[1.5999999999999943,-1.2000000000000455],[1.5999999999999943,-21.200000000000045]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":372.6,"y":206.0,"rotation":0.0,"id":106,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":31,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":62,"py":0.0,"px":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":64,"py":1.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff00ff","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.6000000000000227,-2.0],[-1.6000000000000227,-22.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":704.5333333333334,"y":198.93333333333345,"rotation":0.0,"id":185,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":54,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0b5394","fillColor":"none","dashStyle":null,"startArrow":1,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[38.939356722361715,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":705.1,"y":171.10000000000008,"rotation":0.0,"id":178,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":53,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff00ff","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[38.939356722361715,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":705.5000000000001,"y":143.60000000000008,"rotation":0.0,"id":172,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":52,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#274e13","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[38.939356722361715,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":705.9000000000001,"y":115.1000000000002,"rotation":0.0,"id":163,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":51,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#cc0000","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":1,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[38.939356722361715,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]},{"x":694.3333333333334,"y":66.99999999999994,"rotation":0.0,"id":157,"width":164.00000000000006,"height":149.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":50,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"none","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[]},{"x":749.6666666666669,"y":78.99999999999994,"rotation":0.0,"id":152,"width":107.0,"height":126.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":49,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":5,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:left;\"><span style=\"font-size:12px;font-family:Arial;\"><span style=\"\">is base image</span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;font-family:Arial;\"><span style=\"\">configures</span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;font-family:Arial;\"><span style=\"\">is mounted</span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;font-family:Arial;\"><span style=\"\">launches</span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\"> </span></span></p><p style=\"text-align:left;\"><span style=\"font-size:12px;font-family:Arial;\"><span style=\"\">unix socket comm.</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[]},{"x":705.9333333333334,"y":86.6666666666668,"rotation":0.0,"id":147,"width":100.0,"height":100.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":48,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#e69138","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[0.0,0.0],[38.93935672236171,0.0]],"lockSegments":{},"ortho":false}},"linkMap":[],"children":[]}],"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"none","stroke":"#000000","strokeWidth":1,"shadow":false,"gradient":false}},"lineStyles":{"global":{"endArrow":1,"startArrow":1,"stroke":"#274e13"}},"textStyles":{"global":{"size":"12px"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]}}
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="878.3333333333335" height="370"><defs/><g transform="translate(0,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="878.3333333333335" height="370" fill-opacity="0"/></g><g transform="translate(0.5,0.5) matrix(1,0,0,1,31,50)"><g><g transform="translate(0,0) scale(4.6,2.1)"><g><path fill="#ffffff" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.2173913043478261,0.47619047619047616)"><path fill="none" stroke="none" d="M 0 0 L 459.99999999999994 0 Q 459.99999999999994 0 459.99999999999994 0 L 459.99999999999994 210 Q 459.99999999999994 210 459.99999999999994 210 L 0 210 Q 0 210 0 210 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#000000" d="M 0 0 M 0 0 L 459.99999999999994 0 Q 459.99999999999994 0 459.99999999999994 0 L 459.99999999999994 210 Q 459.99999999999994 210 459.99999999999994 210 L 0 210 Q 0 210 0 210 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,33,50) translate(8,188)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="200.9951171875" y="11">Docker</text></g><g transform="translate(0.5,0.5) matrix(1,0,0,1,51,66)"><g transform="translate(4,4) scale(1.0025,1.01)"><g><g transform="translate(0,0) scale(2,0.5000000000000006)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5,1.9999999999999978)"><path fill="none" stroke="none" d="M 0 0 L 200 0 Q 200 0 200 0 L 200 50.00000000000006 Q 200 50.00000000000006 200 50.00000000000006 L 0 50.00000000000006 Q 0 50.00000000000006 0 50.00000000000006 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 200 0 Q 200 0 200 0 L 200 50.00000000000006 Q 200 50.00000000000006 200 50.00000000000006 L 0 50.00000000000006 Q 0 50.00000000000006 0 50.00000000000006 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(2,0.5000000000000006)"><g><path fill="#ffffff" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5,1.9999999999999978)"><path fill="none" stroke="none" d="M 0 0 L 200 0 Q 200 0 200 0 L 200 50.00000000000006 Q 200 50.00000000000006 200 50.00000000000006 L 0 50.00000000000006 Q 0 50.00000000000006 0 50.00000000000006 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#000000" d="M 0 0 M 0 0 L 200 0 Q 200 0 200 0 L 200 50.00000000000006 Q 200 50.00000000000006 200 50.00000000000006 L 0 50.00000000000006 Q 0 50.00000000000006 0 50.00000000000006 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,54.63636363636363,66) translate(8,11.000000000000028)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="51.34996448863632" y="11">Docker image</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="9.323597301136317" y="25">simonswine/ispconfig-php-5.6</text></g><g transform="translate(0.5,0.5) matrix(1,0,0,1,271,66)"><g transform="translate(4,4) scale(1.0025,1.01)"><g><g transform="translate(0,0) scale(2,0.5)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5,2)"><path fill="none" stroke="none" d="M 0 0 L 200 0 Q 200 0 200 0 L 200 50 Q 200 50 200 50 L 0 50 Q 0 50 0 50 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 200 0 Q 200 0 200 0 L 200 50 Q 200 50 200 50 L 0 50 Q 0 50 0 50 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(2,0.5)"><g><path fill="#ffffff" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5,2)"><path fill="none" stroke="none" d="M 0 0 L 200 0 Q 200 0 200 0 L 200 50 Q 200 50 200 50 L 0 50 Q 0 50 0 50 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#000000" d="M 0 0 M 0 0 L 200 0 Q 200 0 200 0 L 200 50 Q 200 50 200 50 L 0 50 Q 0 50 0 50 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,274.6363636363636,66) translate(8,11)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="51.34996448863632" y="11">Docker image</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="9.323597301136317" y="25">simonswine/ispconfig-php-5.4</text></g><g transform="translate(0,0) matrix(1,0,0,1,51,134)"><g transform="translate(4,4) scale(1.005,1.01)"><g><g transform="translate(0,0) scale(2,1.0000000000000002)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.5,0.9999999999999998)"><path fill="#000000" stroke="none" d="M 10 0 L 190 0 Q 200 0 200 10 L 200 90.00000000000003 Q 200 100.00000000000003 190 100.00000000000003 L 10 100.00000000000003 Q 0 100.00000000000003 0 90.00000000000003 L 0 10 Q 0 0 10 0 Z" opacity="0.294117647"/><path fill="none" stroke="rgb(0,0,0)" d="M 10 0 M 10 0 L 190 0 Q 200 0 200 10 L 200 90.00000000000003 Q 200 100.00000000000003 190 100.00000000000003 L 10 100.00000000000003 Q 0 100.00000000000003 0 90.00000000000003 L 0 10 Q 0 0 10 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(2,1.0000000000000002)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.5,0.9999999999999998)"><path fill="#FFFFFF" stroke="none" d="M 10 0 L 190 0 Q 200 0 200 10 L 200 90.00000000000003 Q 200 100.00000000000003 190 100.00000000000003 L 10 100.00000000000003 Q 0 100.00000000000003 0 90.00000000000003 L 0 10 Q 0 0 10 0 Z"/><path fill="none" stroke="#333333" d="M 10 0 M 10 0 L 190 0 Q 200 0 200 10 L 200 90.00000000000003 Q 200 100.00000000000003 190 100.00000000000003 L 10 100.00000000000003 Q 0 100.00000000000003 0 90.00000000000003 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,55,134) translate(8,8)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="26.634765625" y="11">Docker container web1</text></g><g transform="translate(0,0) matrix(1,0,0,1,61,204)"><g transform="translate(4,4) scale(1.0055555555555555,1.05)"><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#FFFFFF" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#333333" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,64.6,204) translate(8,3)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="49.72128906249998" y="11">spawn-fcgi</text></g><g transform="translate(0,0) matrix(1,0,0,1,61,164)"><g transform="translate(4,4) scale(1.0055555555555555,1.05)"><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#FFFFFF" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#333333" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,64.6,164) translate(8,3)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="58.72128906249998" y="11">php-cgi</text></g><g transform="matrix(1,0,0,1,121,104)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB2UlEQVRoQ+2XMU7DQBREd0OBqIAypjE3oIs7wgngBuQEMT4B4QQmnCDcAE4AqXA6bgANUAIVosny144lxzFClrLzhf3dWI6inZ1589eJVi27dMv8KjHcdOJCWAg3LAGpdMOArtgRwkK4YQmwVPp1HBiboxcmcH24oDUqhoFjI4TXGfZbHPTVhk7ntXgZY+7ts9a6X6XXHT5M17mP4lpOCdOsWmOHNTc/pcOsMoia61R+3alhS9h01F2djeq5OupGSdoAF5dTw9mJ3Luh8h5nm7ftLksWPzO3Xjg7cWE0X9O5YaLsE+WnzO9inPVCtvRMdPeJ7vO/NpxRDiZ0O/3DyDXN7sClWbu2c8JWZIly3uySOoIuzLAVehkHI0r3vIogFf1iL0xGrulCDb/HBztfnU2aT729bMx8bs2//d3o8aNRhn+jjKQLJWzFVilj6cINpyf2Ve9MGR2n9dUm8oazS0SVcw3IKV02RK8pmuX0/7CPNMtC2IrSa2pg7/QjY9IKw2iTRT2WSothYAJCGBg2i5QQZokdKCqEgWGzSAlhltiBokIYGDaLlBBmiR0oKoSBYbNICWGW2IGiQhgYNouUEGaJHSgqhIFhs0gJYZbYgaJCGBg2i1TrCP8AIEx0Pf3XeJ8AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,271,134)"><g transform="translate(4,4) scale(1.005,1.01)"><g><g transform="translate(0,0) scale(2,1)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.5,1)"><path fill="#000000" stroke="none" d="M 10 0 L 190 0 Q 200 0 200 10 L 200 90 Q 200 100 190 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z" opacity="0.294117647"/><path fill="none" stroke="rgb(0,0,0)" d="M 10 0 M 10 0 L 190 0 Q 200 0 200 10 L 200 90 Q 200 100 190 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(2,1)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.5,1)"><path fill="#FFFFFF" stroke="none" d="M 10 0 L 190 0 Q 200 0 200 10 L 200 90 Q 200 100 190 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><path fill="none" stroke="#333333" d="M 10 0 M 10 0 L 190 0 Q 200 0 200 10 L 200 90 Q 200 100 190 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,275,134) translate(8,8)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="26.634765625" y="11">Docker container web2</text></g><g transform="translate(0,0) matrix(1,0,0,1,281,204)"><g transform="translate(4,4) scale(1.0055555555555555,1.05)"><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#FFFFFF" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#333333" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,284.6,204) translate(8,3)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="49.72128906249998" y="11">spawn-fcgi</text></g><g transform="translate(0,0) matrix(1,0,0,1,281,164)"><g transform="translate(4,4) scale(1.0055555555555555,1.05)"><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#000000" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" opacity="0.294117647"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="rgb(0,0,0)" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-opacity="0" stroke-miterlimit="10" stroke-width="2" opacity="0.294117647"/></g></g></g></g></g><g><g transform="translate(0,0) scale(1.8,0.2)"><g><path fill="#FFFFFF" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.5555555555555556,5)"><path fill="none" stroke="none" d="M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#333333" d="M 0 0 M 0 0 L 180 0 Q 180 0 180 0 L 180 20 Q 180 20 180 20 L 0 20 Q 0 20 0 20 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,284.6,164) translate(8,3)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="58.72128906249998" y="11">php-cgi</text></g><g transform="matrix(1,0,0,1,341,104)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAB2UlEQVRoQ+2XMU7DQBREd0OBqIAypjE3oIs7wgngBuQEMT4B4QQmnCDcAE4AqXA6bgANUAIVosny144lxzFClrLzhf3dWI6inZ1589eJVi27dMv8KjHcdOJCWAg3LAGpdMOArtgRwkK4YQmwVPp1HBiboxcmcH24oDUqhoFjI4TXGfZbHPTVhk7ntXgZY+7ts9a6X6XXHT5M17mP4lpOCdOsWmOHNTc/pcOsMoia61R+3alhS9h01F2djeq5OupGSdoAF5dTw9mJ3Luh8h5nm7ftLksWPzO3Xjg7cWE0X9O5YaLsE+WnzO9inPVCtvRMdPeJ7vO/NpxRDiZ0O/3DyDXN7sClWbu2c8JWZIly3uySOoIuzLAVehkHI0r3vIogFf1iL0xGrulCDb/HBztfnU2aT729bMx8bs2//d3o8aNRhn+jjKQLJWzFVilj6cINpyf2Ve9MGR2n9dUm8oazS0SVcw3IKV02RK8pmuX0/7CPNMtC2IrSa2pg7/QjY9IKw2iTRT2WSothYAJCGBg2i5QQZokdKCqEgWGzSAlhltiBokIYGDaLlBBmiR0oKoSBYbNICWGW2IGiQhgYNouUEGaJHSgqhIFhs0gJYZbYgaJCGBg2i1TrCP8AIEx0Pf3XeJ8AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,51,300)"><g><g transform="translate(0,0) scale(2,0.5)"><g><g transform="scale(0.5,2)"><path fill="#FFFFFF" stroke="none" d="M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z"/><path fill="none" stroke="#274e13" d="M 60 0 M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,55,300) translate(8,11)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="67.65624999999999" y="11">Volume</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="9.636718749999986" y="25">/var/www/clients/client1/web1</text></g><g transform="translate(0,0) matrix(1,0,0,1,271,299.9999999999999)"><g><g transform="translate(0,0) scale(2,0.5)"><g><g transform="scale(0.5,2)"><path fill="#FFFFFF" stroke="none" d="M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z"/><path fill="none" stroke="#274e13" d="M 60 0 M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,275,299.9999999999999) translate(8,11)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="67.65624999999999" y="11">Volume</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="9.636718749999986" y="25">/var/www/clients/client1/web2</text></g><g transform="matrix(1,0,0,1,121,204)"><image width="60" height="100" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAABkCAYAAADaIVPoAAAB4ElEQVR4Xu2ZQU7CQABFO22iS9BegIWBYyh7QY7iDcQbeBQE93INiAsuUC1LTdpxpkDSlHV/k+F1RULSyX/vz2eBiS7sMReWNyJw6MYxjOHACFDpwISexcEwhgMjQKUDE8poUWkqHRgBKh2YUFaaSlPpwAhQ6cCEstJUmkoHRqCTSt899h88x6+PfK3m2Ung0ST1Qe1mlY2DD+ztJnHy6YMWZTFWW5Ybruya6L4ya6O12rI08MluacvC541NnKgtSwOf7Fqn1j/G/x8vtiwLfLLrwu5d1t5xrPYudE9pWRa4ZvfVhXw5XGF7+Cy0LAlct/sXl4PrMvnxgX/j4uaqjHdKy5LAw0m6MCZ68ka3y+/5aJpWl3izzMxwejv3lq2N3rerbNb277Ik8GDW7zuTz87u226R5/XAze+CCNwMUQ/cdsDm+yWGCVy7wxhumQCVbhlw9XpGS0H5eAaVVsCm0grKVFpImUoLYbPSCthUWkGZlRZSptJC2Ky0AjaVVlBmpYWUqbQQNiutgE2lFZRZaSFlKi2EzUorYFNpBWVWWkiZSgths9IK2FRaQZmVFlKm0kLYrLQCNpVWUGalhZSptBA2K62ATaUVlFlpIWUqLYTdyUoL850dReAu6SvOvjjD//u/WHTnwebGAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,341,204)"><image width="60" height="100" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAABkCAYAAADaIVPoAAAB4ElEQVR4Xu2ZQU7CQABFO22iS9BegIWBYyh7QY7iDcQbeBQE93INiAsuUC1LTdpxpkDSlHV/k+F1RULSyX/vz2eBiS7sMReWNyJw6MYxjOHACFDpwISexcEwhgMjQKUDE8poUWkqHRgBKh2YUFaaSlPpwAhQ6cCEstJUmkoHRqCTSt899h88x6+PfK3m2Ung0ST1Qe1mlY2DD+ztJnHy6YMWZTFWW5Ybruya6L4ya6O12rI08MluacvC541NnKgtSwOf7Fqn1j/G/x8vtiwLfLLrwu5d1t5xrPYudE9pWRa4ZvfVhXw5XGF7+Cy0LAlct/sXl4PrMvnxgX/j4uaqjHdKy5LAw0m6MCZ68ka3y+/5aJpWl3izzMxwejv3lq2N3rerbNb277Ik8GDW7zuTz87u226R5/XAze+CCNwMUQ/cdsDm+yWGCVy7wxhumQCVbhlw9XpGS0H5eAaVVsCm0grKVFpImUoLYbPSCthUWkGZlRZSptJC2Ky0AjaVVlBmpYWUqbQQNiutgE2lFZRZaSFlKi2EzUorYFNpBWVWWkiZSgths9IK2FRaQZmVFlKm0kLYrLQCNpVWUGalhZSptBA2K62ATaUVlFlpIWUqLYTdyUoL850dReAu6SvOvjjD//u/WHTnwebGAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,491,299.9999999999999)"><g><g transform="translate(0,0) scale(2,0.5)"><g><g transform="scale(0.5,2)"><path fill="#FFFFFF" stroke="none" d="M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z"/><path fill="none" stroke="#274e13" d="M 60 0 M 60 0 L 140 0 L 200 15 L 200 35 L 140 50 L 60 50 L 0 35 L 0 15 L 60 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,495,299.9999999999999) translate(8,11)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="67.65624999999999" y="11">Volume</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="43.313476562499986" y="25">/var/lib/php5-fpm</text></g><g transform="matrix(1,0,0,1,382.4213562373095,204)"><image width="171" height="100" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKsAAABkCAYAAAD5VsB4AAAEcUlEQVR4Xu2cUU4TURSG57aYkPYBXYG4AtkBZQXW4rv4aIQEViCsQJJifBTeBesKrDuoK5AdCA8tGDq93tt2tDYa52lm/pyvLwxwk/uf//9yMp3MPS7hgwMiDjgRncjEgQRYgUDGAWCViQqhwAoDMg4Aq0xUCAVWGJBxAFhlokIosMKAjAPAKhMVQoEVBmQcAFaZqBAKrDAg4wCwykSFUGCFARkHgFUmKoQCKwzIOACsMlEhFFhhQMYBYJWJCqHACgMyDgCrTFQIBVYYkHEAWGWiQiiwwoCMA8AqExVCgRUGZBwAVpmoEAqsMCDjALDKRIXQUmBdfdZtRetvP+z1iQAH8jpQCqzNTrefOOeH57tbeYWyDgcKhzV21bp3n6P1qfNbdFcgzOtA4bDOu+rmXGCf7po3KtYVCmvWVX1oqtH6sHmd7gqEeR0oFNasq/pA6xTW2e5017xpGV9XGKwL96rX3vu1GazuOvxYo7sapzBn+YXB+rur+qMA6euoL0CbXdNdcwZmeVkhsC521WF6t96s3/seTQ/XD8L1Jd3VMoL5ay8E1sb2SS9s9CR20tHF3mFz+2R61xqeBLhGp3sYO234w6fR+W47v3RWWnOgEFiT9pv7jdrK/mgyPk56B1eLsC7/z1oA1JvfgWJgXdLzB6z5tbLSuAPAahwApfKBVSkt41qB1TgASuUDq1JaxrUCq3EAlMoHVqW0jGsFVuMAKJUPrEppGdcKrMYBUCofWJXSMq4VWI0DoFQ+sCqlZVwrsBoHQKn8cmCdzQ3Y5DiLEirlay0F1vAy9mnY+PnEJwc3F7vH5duAAgUHSoG12Xm7kzj/PhjE2SsFSiqisRRY4+kAzl5VhAAhGeXAGgzKzl6FI65Xw8n4UTzuIuQbUktwoDRYY62/RgkFYNNa8pS5VyUQILRlqbBObwdqK734ZGDuWX+S+J6f1Ae3/sdXuq0QSQVILRfWeYHzW4L98Ot0UgsfMw70wyipS+/84CYdn/2vOVUC1iya+JQgCG8579dDt90AXjPQxvE84TuLOx1O7o7+BW2lYDUUDaUGB+KkHjdxG2FAXysOQYmmhGEnA5e6F8Peq8GyScAKNpVwYLX9br1WG/fCdJ7HEdhRere13GGBtRJRIWLqwGxyT38O7FkYJ7Wz6AywwkmlHIgdtl5Pv0VRaVp/dNt7eZkJBNZKRYWY6ED27kg2yA9Y4aKyDjS2u22XuI/hCcGX4cVeC1grGxXC5u+OzGb4hrGowAoTlXbgb5MmuWetdGR2xTU6J5fh+evDxS9ZwGqXh0pXnr3ktHiaBFgrHZldccBqN3u5yoFVLjK7goHVbvZylQOrXGR2BQOr3ezlKgdWucjsCgZWu9nLVQ6scpHZFQysdrOXqxxY5SKzKxhY7WYvVzmwykVmVzCw2s1ernJglYvMrmBgtZu9XOXAKheZXcHAajd7ucqBVS4yu4KB1W72cpUDq1xkdgUDq93s5SoHVrnIELzoAEex4UHGAWCViQqhwAoDMg78BDVS53Rvq0MWAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,162.4213562373095,204)"><image width="417" height="125" preserveAspectRatio="none" xlink:href="data:image/png;base64,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" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,121,154)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAABPklEQVRoQ+2W4QnCMBSEmwnUDdxEO4GO4gbWDRxFJ7CjuIE6QbzKC8SIP3OB1xOKgUIf333Xp6Gb2SfMjLcTsHfjMizDzhJQpZ0J/cGRYRl2loAq7UyolpYqrUo7S0CVdiZUW1qVVqWdJaBKOxOqLa1Kq9LOEmhS6djF7ZRj6MLIzrMV8AQaAdy7Bza7NwPt2ZbphgE82d0Y8Mi2TAUu7KY2Uy2zgXO7CZhqmQac2X2BdGG06UyzzAROdk+APRpwOtMsU4ALu2vAPgx4he+7GadYZgFfALXDdcJWHhBAtD8eAefBjF9xb1/7d5kFvATIAdcZUM8C+OueC+ASIgeuDVg+n2JYwNk7LMOVE1ClKwf8ebyWFiNlm6FKM8KeXaUZof6b0aTSAiYmIMPEsJuMkuEmsROHyjAx7CajZmf4DYHEWz3yjPbZAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,341,154)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAABPklEQVRoQ+2W4QnCMBSEmwnUDdxEO4GO4gbWDRxFJ7CjuIE6QbzKC8SIP3OB1xOKgUIf333Xp6Gb2SfMjLcTsHfjMizDzhJQpZ0J/cGRYRl2loAq7UyolpYqrUo7S0CVdiZUW1qVVqWdJaBKOxOqLa1Kq9LOEmhS6djF7ZRj6MLIzrMV8AQaAdy7Bza7NwPt2ZbphgE82d0Y8Mi2TAUu7KY2Uy2zgXO7CZhqmQac2X2BdGG06UyzzAROdk+APRpwOtMsU4ALu2vAPgx4he+7GadYZgFfALXDdcJWHhBAtD8eAefBjF9xb1/7d5kFvATIAdcZUM8C+OueC+ASIgeuDVg+n2JYwNk7LMOVE1ClKwf8ebyWFiNlm6FKM8KeXaUZof6b0aTSAiYmIMPEsJuMkuEmsROHyjAx7CajZmf4DYHEWz3yjPbZAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,511,194)"><g><g transform="translate(0,0) scale(1.6,0.4)"><g><path fill="#FFFFFF" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(0.625,2.5)"><path fill="none" stroke="none" d="M 0 0 L 160 0 Q 160 0 160 0 L 160 40 Q 160 40 160 40 L 0 40 Q 0 40 0 40 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#333333" d="M 0 0 M 0 0 L 160 0 Q 160 0 160 0 L 160 40 Q 160 40 160 40 L 0 40 Q 0 40 0 40 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,514.2,194) translate(8,13)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="28.109570312499983" y="11">Apache / Nginx</text></g><g transform="matrix(1,0,0,1,561,204)"><image width="60" height="125" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAB9CAYAAAD++AC7AAACmklEQVR4Xu2b3U0CQRRGdwWNgQewA61ErUAjliFRK1ArUANlqNEKxEq0A/EBYvxhnIFdWND4xrnJ7OcLRBJuvnO+vbzMpEnJ/tKS5U0UOHbjMizDkRFQpSMT+iuODMtwZARU6ciEammp0qp0ZARU6ciEakur0qp0ZARU6ciEakur0qp0ZARMKr1+2NkJHN9v2j2ap0ng+kGnl6SpG9we7UYfONituPQxBP1O3S5tGTec2d3OzPZoy2jg3K7zckNgP7xCW0YD53adTzwOPJmOWsYCF57dN+dcYxI4ffMvDdIyFnhm1134oGchsA+ev8csI4GLdgffn5v1yuprCOzfb/j3L6RlJHCt1b33g/aC0eFd+7ze6o6fYr+h09pB5zwY9/94GN4e7S/7dxkJnOxfNmsr1ZPh6OsquT/tFwMvfhZH4IUUc4GXnXDh+xnDCjx7hmHBNifxVGlQs55hArYqTVDOZqjSBGxVmqCsSoOUVWkQtrY0AVuVJihrS4OUVWkQtrY0AVuVJihrS4OUVWkQtrY0AVuVJihrS4OUVWkQtrY0AVuVJihrS4OUVWkQtrY0AVuVJihrS4OUVWkQNrOlx4dL146Ho4/rvw+Xzj5bdnYkcOmOD08PiDvXH4y+tuYOiK9Un/1dgCZ1DQAxHGr67xUA554Gd+2dZdc5fD8WuGjZn35vZsP7pF008LzlicvxNR7QLh54elEru7jk7zrg1/GwSufP59xVPNgubjgMLN1ly+mz7N9Qm7m4/fFK55bDK32V1qTSxG/tfzNMDFuGVmBL+sRsGSYoW86QYUv6xGwZJihbzpBhS/rEbBkmKFvOkGFL+sRsGSYoW86QYUv6xGwZJihbzpBhS/rEbBkmKFvOkGFL+sTs0hn+AT0WpI2CU6o8AAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,511,50)"><g><g transform="translate(0,0) scale(1.6,0.5)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.625,2)"><path fill="#FFFFFF" stroke="none" d="M 10 0 L 150 0 Q 160 0 160 10 L 160 40 Q 160 50 150 50 L 10 50 Q 0 50 0 40 L 0 10 Q 0 0 10 0 Z"/><path fill="none" stroke="#333333" d="M 10 0 M 10 0 L 150 0 Q 160 0 160 10 L 160 40 Q 160 50 150 50 L 10 50 Q 0 50 0 40 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,514.2,50) translate(8,19)"><text fill="#000000" stroke="none" font-family="Arial" font-size="11px" font-style="normal" font-weight="normal" text-decoration="none" x="22.342724609374983" y="10">PHP_FPM_Docker</text></g><g transform="translate(0,0) matrix(1,0,0,1,511,120.00000000000006)"><g><g transform="translate(0,0) scale(1.6,0.5)"><g><path fill="none" stroke="none" d="M 10 0 L 90 0 Q 100 0 100 10 L 100 90 Q 100 100 90 100 L 10 100 Q 0 100 0 90 L 0 10 Q 0 0 10 0 Z"/><g transform="scale(0.625,2)"><path fill="#FFFFFF" stroke="none" d="M 10 0 L 150 0 Q 160 0 160 10 L 160 40 Q 160 50 150 50 L 10 50 Q 0 50 0 40 L 0 10 Q 0 0 10 0 Z"/><path fill="none" stroke="#333333" d="M 10 0 M 10 0 L 150 0 Q 160 0 160 10 L 160 40 Q 160 50 150 50 L 10 50 Q 0 50 0 40 L 0 10 Q 0 0 10 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="scale(1,1) matrix(1,0,0,1,514.2,120.00000000000006) translate(8,19)"><text fill="#000000" stroke="none" font-family="Arial" font-size="11px" font-style="normal" font-weight="normal" text-decoration="none" x="44.03657226562498" y="10">ISPConfig</text></g><g transform="matrix(1,0,0,1,6.5,5.5)"><image width="589" height="187" preserveAspectRatio="none" xlink:href="data:image/png;base64,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" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,441,70.5)"><image width="74" height="122" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAAB6CAYAAAAYqsXcAAADXUlEQVR4Xu3dPW4TURiF4RuQqJDIDgg7SATUZAvUNGEFpKXC6eiAFRBWADuIqQHBDggdHaSj4O/cMEaDlUHvRB55MnotWc7PiTX3yZnrqb7ZKD6QwAZKGSpCwRJMHup9KVu/Srme5y40OY3dLOWgnZ8kVHA2f5byIDh7WexWH6BF9lb592ybHNSbNCeLepkFbzaLPgnYh3w97wN2u5TZZBv1Lg0KyvO6wLy+zsssC+4F1IU5mUbldNv+UcpRbVKQDpYb0adNZ2UnA/X2D1LdsF9kf6l700ofk4Bq2pSXcnI5m/dOKV9XqpQ3mwRUNvBZFvIo63mWNu2vGqm+31Sg5lnInaznbqBeCdUhkP3pY361ldPuRk67Y6G6ofJBV8ryReIqwSZx6qVRQpFWCEWUkhFKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYzZKKCgAYnV2eYYpf0n0JOMlF6O5wV/2i1z48ZLN/PKjOpY7E6d3+y2fp6cANfic4Mp54aGykZ+Ov81zsDnBo4Vq3zMh8393usZuZyL+fk65J1nIp+xPFWuwx6ga1QKqo7ZPN+Yc4P3cUeNwWaA9EX/oNo2mUWcBdd0zoZWdNXiDTMRf/sestVHNoh8H5V4O7Go9uHrHjRzU4aU/d974+8jtS7bzzW7zXFwGDDbofTRQzf5Sp9r3vvZZ9R06yMa2tkbVNn3PZpwDeJgDvdK06XPdmPP8dsZ/9DjZeZo2H2q4+//A1ga1OKgWWN3ArzU/P8yn3cE6QLqw1g51UcBGA9UF1nV5QPaVVWZGB9UGyyfdXq6hnq5ywed9r9FCnXdBQ/2dUFBWKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIzZKKGgAIz9Bv1yD4qLAxTeAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,561,70)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAABVklEQVRoQ+2VwW3CQBRExwp3SAe0gARnSAWhFDoAOqAUqADfE4kW6CDhDjJ/rbW0MuK4s9L3+MJaSP5688bfFQZ2VQPjhYC9G5dhGXaWgCrtTOgLjgzLsLMEVGlnQrW0VGlV2lkCqrQzodrSqrQq7SwBVdqZUG1pVVqVdpZAkUr/AKuQ4wKo2XmWAq5tcDMHvtwDB7sGew6gjQGzLdMNG3Cwu4xma7ZlKnBqt6sy2zIbOLXbMVMt04ATuzcjHUfa9sy0zARu7Rrc3n63cWl1Z5plCnBq9wOYPoC/AGznTztfmZYpwL/A0aC+g137DO3s3o6AbejKwthF4ye7X+f+LlOAL8DkDmxGwGEG/KfA/f9cAPchUuDcgP3nUwwLOHmHZThzAqp05oDbx2tpMVKOM1RpRtiDqzQj1HczilRawMQEZJgYdpFRMlwkduJQGSaGXWTU4Aw/AecaTj3MZ8J2AAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,561,164)"><image width="60" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAABgklEQVRoQ+2X0U3DQBBEN9BAKIESkOCbUAF0khKAEugEKiB8g0QJlIAbgDAb2dHJUvI3s8ie/OQcSzuZeXt7ukXM7LOYmd+w4akTN2ETJiTwEbHNspehnyElLW3DhC46VNKEFWG7pRUp9xpuaUXYbmlFym5pYcpuaWHYntKMsD8jlr8R65OIp4uIrm3p8TuGfltTQhgGnyF6iyvS41XEQ2v4Hc/4E/d4/4Lb090kDMPUCqZeYaY7jTj/ifhOY1ifYf2F5RJh3CCMzSQMpwmY3sD0dVLuiealeLfG9xvMrthms76kpXvDe8pJtDfXKelKDbeUW5JKuhWGB8p7z6q9OwjKWnoQHPZyPqvpygmP9nIalkxm+Tk8nr5JOX9TTeb/YHh3BCnO3XHY8j2sOGuPadhwNQG2vgmzE66ub8LVBNj6JsxOuLq+CVcTYOubMDvh6vomXE2ArW/C7ISr65twNQG2vgmzE66ub8LVBNj6JsxOuLq+CVcTYOubMDvh6vqzI/wHsZFYPS+ro2UAAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,701.4333333333334,56.6666666666668)"><image width="73" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAAA8CAYAAAAqnJeuAAABnElEQVR4Xu3XwW3CQBSE4d2IGiLhRsItHQVcQUgHcQfQQTqIuUFySQlwCF3gZS2MsOIontt7kf49WiP58Wl2vcTAGhWIowkCASShBCCBJAgIEZoEkiAgRGgSSIKAEKFJIAkCQoQmgSQICBGaBJIgIERoEkiCgBChSSAJAkKEJoEkCAgRmgSSICBEzJp0rB7e8nzvxXxXCXOaRgyRZnX+5Y8hhX2MYTmdb9emEn+83B7pOlzGCqkpi/KjbZir5QfphlXHFF6m5bZtmovlD6mHNUmn8r78/LKW8oOUUgj5cPq58uPV3aVZeyuswVTf1WyZHz5bDZQP8ow1fLsllk+k1mgItY5N/goaNMrRduva4wjn2mcfSL9vsc2kOS04uNvL5HBtum3FFeBYdTfuG9IhNM2Cy2SvNT2kQ9ecldkXdeTFhmdS/oMbQ1087V694pgf3N5h+vOZNQmk/yQgzEqTQBIEhAhNAkkQECI0CSRBQIjQJJAEASFCk0ASBIQITQJJEBAiNAkkQUCI0CSQBAEhQpNAEgSECE0CSRAQImfN5289ZTscvwAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="scale(1,1) matrix(1,0,0,1,749.6666666666669,78.99999999999994) translate(2,0)"><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="11">is base image</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="25"> </text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="39">configures</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="53"> </text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="67">is mounted</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="81"> </text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="95">launches</text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="109"> </text><text fill="#000000" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="none" x="0" y="123">unix socket comm.</text></g><g transform="translate(0.5,0.5) matrix(1,0,0,1,694.3333333333334,66.99999999999994)"><g><g transform="translate(0,0) scale(1.6400000000000006,1.49)"><g><path fill="rgb(255,255,255)" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z" fill-opacity="0.008"/><g transform="scale(0.6097560975609754,0.6711409395973155)"><path fill="none" stroke="none" d="M 0 0 L 164.00000000000006 0 Q 164.00000000000006 0 164.00000000000006 0 L 164.00000000000006 149 Q 164.00000000000006 149 164.00000000000006 149 L 0 149 Q 0 149 0 149 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#000000" d="M 0 0 M 0 0 L 164.00000000000006 0 Q 164.00000000000006 0 164.00000000000006 0 L 164.00000000000006 149 Q 164.00000000000006 149 164.00000000000006 149 L 0 149 Q 0 149 0 149 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10"/></g></g></g></g></g><g transform="matrix(1,0,0,1,701.4000000000001,85.1000000000002)"><image width="73" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAAA8CAYAAAAqnJeuAAABYklEQVR4Xu3WTWoCQRRF4WfIXLeSFSRLcgdxA4JZl4QsIS5BiVN/XkH3RJE+I+sFToP05IKvv75VXbPwmhSYTSYMhEigBCKJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARAxCaJBARApESTviOWOev8JeLrLWIP5n5qpDvST8TiFPGbT73I3z4H2lTD6o7UKrGN+MjbKod5HypSCqsE0rh2qmLdIeWg7Y1+PnXRT//ZX8607rUM/wvS8ZJIr7lf9djYyy23ocVtj2rXIXE2vXDGgpdAantRRZwySMMRYNfOSVWac7tFlmhSO0ye85zUe1k9+n6UQJr+uPVNiAT8RRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITRIJCICITQJIVwU7NT1pjC2yAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,701.0000000000001,113.60000000000008)"><image width="73" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAAA8CAYAAAAqnJeuAAABd0lEQVR4Xu3ZQUqCQRyG8RmFtn54ghZRx8gDVHSUbqAXCOwm3SiPYNTKhdN8NW6M8Fk5/+BpI8kLyo9nRsGc/DspkE8uHCSRQAQiiQQEwMSSRAICYGJJIgEBMLEkkYAAmFiSSEAATCxJJCAAJpYkEhAAE0sSCQiAiSWJBATAxJJEAgJgYkkiAQEwCVHSzf38qeQ02032L5vX7Ra877NOuiNdPg7DxX7yllMeSioj0DoaVnekMYmru2ExzdNV/an0dvw/GlYIpMPZiYr1C+n6Yb6q6S/PeuiPXqyU8v1Mzj9vr5b1UR+eex3D/4L02ZDWPS72iMdtWe+mRSvovV3kXXAOgYdAandROJwwSO0rwKbeg7N694Qo5/g+DlFS+zI51Iu567H668MqBFLPT1Ly2iIBJZFEAgJgYkkiAQEwsSSRgACYWJJIQABMLEkkIAAmliQSEAATSxIJCICJJYkEBMDEkkQCAmBiSSIBATCxJJGAAJhYEkD6ApI+cD1Uj7aSAAAAAElFTkSuQmCC" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,700.6,141.10000000000008)"><image width="73" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAAA8CAYAAAAqnJeuAAABUUlEQVR4Xu3WQQrCMBRF0XYFuiNdkjvQDQi6Ql2ConP9H9KJIr2j5gu3EDp50PT0Jc04eM0KjLMJA4NIoAQiiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQMQmiQQEQKREk17DaxdzXcU4j8N4A/NeNNIdKYDW8caXGHlPoFM1rO5IWYmA2sbtEGPTKlIKqwTStHaqYn0hxUTzi+4XXfTzD3tE5NhrGf4L0rMhnXps7BWXW7Y496i87m0j74IzFbwEUtuLyuGUQWpHgGtMKM9JJZrzuUVWaVIeJvOc1HVZ/fp/lECa/7n1TYgE/EUSCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0SCQiAiE0CSG8XLDg9H01dfAAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,674.5333333333334,168.93333333333345)"><image width="98" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAAA8CAYAAACdIW+JAAAB/ElEQVR4Xu2XUU7CQBRFZwoaw4/sSJZgjAvQBRDqCiwrEMICdAHGuATcEf40RmnH1yKJqRI+WpwTcxv+CsOdc+bOtN7pQhDwiBQK4SQCsggkQiIgBCAx1AiJgBCAxFAjJAJCABJDjZAICAFIDDVCIiAEIDHUCImAEIDEUCMkAkIAEkONkAgIAUgMNUIiIAQgMdQIiYAQgMRQIyQCQgASA9uIk8vFKAlukhfra/d8s2rN6/xuOOj170vv5m+P42Xr8ToeACeiEtAL/tbmOarmGkKY5k/jrO28BxeLzPt63OpaFj5MSUIwIpoCDNarSZjl5XrWWSOSfmoyUhv7lCYkuoiDC2hWqdqigEKiifixBTlXuOB6thk5W7Vtd6K9v7e22Xfsfzaf7RVtyzr8jHcgqUWULjPqZ19nQWFI/l7Ed/EhvBSJy2KcHdFEbP00hdjpvAousbPhfd7J2fDr1nQ88a5MbREM69sRBWzjRRfxZ0Lqs4EnACdil5CDPL4CGtAsKqYRzWCbFzqf5sXHVSdbVP1Cd/RQ+jCLcQbse3rAitgX/L/dlwiIUYmQCAgBSAw1QiIgBCAx1AiJgBCAxFAjJAJCABJDjZAICAFIDDVCIiAEIDHUCImAEIDEUCMkAkIAEkONkAgIAUgMNUIiIAQgMdQIiYAQgMRQIyAiPgEQHrs9sayh2AAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g></g></svg>
|
@@ -0,0 +1,314 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'php_fpm_docker/launcher'
|
3
|
+
require 'php_fpm_docker/pool'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
module PhpFpmDocker
|
7
|
+
# Application that is used as init script
|
8
|
+
class Application
|
9
|
+
attr_reader :php_name
|
10
|
+
def initialize
|
11
|
+
@name = 'php_fpm_docker'
|
12
|
+
@longname = 'PHP FPM Docker Wrapper'
|
13
|
+
# Create log dir if needed
|
14
|
+
log_dir = Pathname.new('/var/log/php_fpm_docker')
|
15
|
+
FileUtils.mkdir_p log_dir unless log_dir.directory?
|
16
|
+
|
17
|
+
# Init logger
|
18
|
+
log_file = log_dir.join('wrapper.log')
|
19
|
+
@logger = Logger.new(log_file, 'daily')
|
20
|
+
end
|
21
|
+
|
22
|
+
def install # rubocop:disable MethodLength, CyclomaticComplexity, PerceivedComplexity, LineLength, AbcSize
|
23
|
+
# Get launcher name
|
24
|
+
begin
|
25
|
+
puts 'Enter name of the php docker launcher instance:'
|
26
|
+
name = $stdin.gets.chomp
|
27
|
+
fail 'Only use these characters: a-z0-9-_.' \
|
28
|
+
unless /^[a-z0-9\.\-_]+$/.match(name)
|
29
|
+
rescue RuntimeError => e
|
30
|
+
$stderr.puts(e.message)
|
31
|
+
retry
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get image name
|
35
|
+
begin
|
36
|
+
puts 'Enter name of the docker image to use:'
|
37
|
+
image = $stdin.gets.chomp
|
38
|
+
fail 'Only use these characters: a-z0-9-_./:' \
|
39
|
+
unless /^[a-z0-9\.\-_\/\:]+$/.match(name)
|
40
|
+
rescue RuntimeError => e
|
41
|
+
$stderr.puts(e.message)
|
42
|
+
retry
|
43
|
+
end
|
44
|
+
|
45
|
+
bin_name = 'php_fpm_docker'
|
46
|
+
bin_path = nil?
|
47
|
+
# Path
|
48
|
+
begin
|
49
|
+
ENV['PATH'].split(':').each do |folder|
|
50
|
+
path = File.join(folder, bin_name)
|
51
|
+
if File.exist? path
|
52
|
+
bin_path = path
|
53
|
+
break
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
if bin_path.nil?
|
58
|
+
bin_path = File.expand_path(File.join(
|
59
|
+
File.dirname(__FILE__),
|
60
|
+
'..',
|
61
|
+
'..',
|
62
|
+
'bin',
|
63
|
+
bin_name
|
64
|
+
))
|
65
|
+
end
|
66
|
+
|
67
|
+
rescue RuntimeError => e
|
68
|
+
$stderr.puts(e.message)
|
69
|
+
end
|
70
|
+
|
71
|
+
puts image
|
72
|
+
|
73
|
+
config_basepath = Pathname.new '/etc/php_fpm_docker/conf.d'
|
74
|
+
config_dir = config_basepath.join name
|
75
|
+
config_path = config_dir.join 'config.ini'
|
76
|
+
config_pool = config_dir.join 'pools.d'
|
77
|
+
config_content = <<eos
|
78
|
+
[main]
|
79
|
+
docker_image=#{image}
|
80
|
+
eos
|
81
|
+
|
82
|
+
initd_name = "php_fpm_docker_#{name}"
|
83
|
+
initd_path = Pathname.new File.join('/etc/init.d/', initd_name)
|
84
|
+
initd_content = <<eos
|
85
|
+
#!/bin/sh
|
86
|
+
### BEGIN INIT INFO
|
87
|
+
# Provides: #{initd_name}
|
88
|
+
# Required-Start: $remote_fs $network
|
89
|
+
# Required-Stop: $remote_fs $network
|
90
|
+
# Default-Start: 2 3 4 5
|
91
|
+
# Default-Stop: 0 1 6
|
92
|
+
# Short-Description: starts PHP Docker launcher #{name}
|
93
|
+
# Description: Starts The PHP Docker launcher daemon #{name}
|
94
|
+
### END INIT INFO
|
95
|
+
|
96
|
+
NAME=#{name}
|
97
|
+
DAEMON=#{bin_path}
|
98
|
+
|
99
|
+
|
100
|
+
case "$1" in
|
101
|
+
start)
|
102
|
+
$DAEMON $NAME start
|
103
|
+
;;
|
104
|
+
stop)
|
105
|
+
$DAEMON $NAME stop
|
106
|
+
;;
|
107
|
+
reload)
|
108
|
+
$DAEMON $NAME reload
|
109
|
+
;;
|
110
|
+
status)
|
111
|
+
$DAEMON $NAME status
|
112
|
+
;;
|
113
|
+
restart|force-reload)
|
114
|
+
$DAEMON $NAME restart
|
115
|
+
;;
|
116
|
+
*)
|
117
|
+
echo "Usage: $0 {start|stop|status|restart|force-reload|reload}" >&2
|
118
|
+
exit 1
|
119
|
+
;;
|
120
|
+
esac
|
121
|
+
|
122
|
+
|
123
|
+
eos
|
124
|
+
puts "Creating init script in '#{initd_path}'"
|
125
|
+
File.open(initd_path, 'w') do |file|
|
126
|
+
file.write(initd_content)
|
127
|
+
end
|
128
|
+
File.chmod(0755, initd_path)
|
129
|
+
|
130
|
+
unless config_dir.exist?
|
131
|
+
puts "Creating config directory '#{config_dir}'"
|
132
|
+
FileUtils.mkdir_p config_dir
|
133
|
+
end
|
134
|
+
unless config_pool.exist?
|
135
|
+
puts "Creating pools directory '#{config_pool}'"
|
136
|
+
FileUtils.mkdir_p config_pool
|
137
|
+
end
|
138
|
+
puts "Creating config file '#{config_path}'"
|
139
|
+
File.open(config_path, 'w') do |file|
|
140
|
+
file.write(config_content)
|
141
|
+
end
|
142
|
+
|
143
|
+
0
|
144
|
+
end
|
145
|
+
|
146
|
+
def start
|
147
|
+
print "Starting #{full_name}: "
|
148
|
+
$stdout.flush
|
149
|
+
|
150
|
+
if running?
|
151
|
+
puts 'already running'
|
152
|
+
return 0
|
153
|
+
end
|
154
|
+
|
155
|
+
# init
|
156
|
+
l = Launcher.new php_name
|
157
|
+
|
158
|
+
# run daemon
|
159
|
+
self.pid = l.run
|
160
|
+
|
161
|
+
puts "done (pid=#{pid})"
|
162
|
+
0
|
163
|
+
end
|
164
|
+
|
165
|
+
def stop
|
166
|
+
print "Stopping #{full_name}: "
|
167
|
+
$stdout.flush
|
168
|
+
|
169
|
+
unless running?
|
170
|
+
puts 'not running'
|
171
|
+
return 0
|
172
|
+
end
|
173
|
+
|
174
|
+
Process.kill('TERM', pid)
|
175
|
+
|
176
|
+
count = 0
|
177
|
+
while running? && count <= 50
|
178
|
+
sleep 0.2
|
179
|
+
count += 1
|
180
|
+
end
|
181
|
+
|
182
|
+
if running?
|
183
|
+
puts 'still running'
|
184
|
+
return 1
|
185
|
+
else
|
186
|
+
self.pid = nil
|
187
|
+
puts 'stopped'
|
188
|
+
return 0
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def status
|
193
|
+
print "Status of #{full_name}: "
|
194
|
+
$stdout.flush
|
195
|
+
|
196
|
+
if running?
|
197
|
+
puts 'running'
|
198
|
+
return 0
|
199
|
+
else
|
200
|
+
puts 'not running'
|
201
|
+
return 3
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def reload
|
206
|
+
print "Reloading #{full_name}: "
|
207
|
+
$stdout.flush
|
208
|
+
|
209
|
+
unless running?
|
210
|
+
puts 'not running'
|
211
|
+
return 0
|
212
|
+
end
|
213
|
+
|
214
|
+
Process.kill('USR1', pid)
|
215
|
+
puts 'done'
|
216
|
+
0
|
217
|
+
end
|
218
|
+
|
219
|
+
def restart
|
220
|
+
ret_val = stop
|
221
|
+
return ret_val if ret_val != 0
|
222
|
+
start
|
223
|
+
end
|
224
|
+
|
225
|
+
def help
|
226
|
+
$stderr.puts(
|
227
|
+
"Usage: #{php_name} $NAME {#{allowed_methods.join '|'}}"
|
228
|
+
)
|
229
|
+
$stderr.puts(" #{php_name} install")
|
230
|
+
end
|
231
|
+
|
232
|
+
def run
|
233
|
+
method_to_call = parse_arguments(ARGV)
|
234
|
+
exit send(method_to_call)
|
235
|
+
rescue RuntimeError => e
|
236
|
+
@logger.warn(php_name) { e.message }
|
237
|
+
help
|
238
|
+
exit 3
|
239
|
+
end
|
240
|
+
|
241
|
+
private
|
242
|
+
|
243
|
+
attr_writer :php_name
|
244
|
+
|
245
|
+
# Get php name from scriptname
|
246
|
+
def full_name
|
247
|
+
"#{@longname} '#{php_name}'"
|
248
|
+
end
|
249
|
+
|
250
|
+
def parse_arguments(args)
|
251
|
+
# no args
|
252
|
+
fail 'no argument' if args.first.nil?
|
253
|
+
|
254
|
+
# install mode
|
255
|
+
return :install if args.first == 'install'
|
256
|
+
|
257
|
+
# get correct php name
|
258
|
+
self.php_name = args.first
|
259
|
+
|
260
|
+
fail 'wrong argument count' if args[1].nil?
|
261
|
+
|
262
|
+
method_to_call = args[1].to_sym
|
263
|
+
|
264
|
+
fail "unknown method #{args[1]}" \
|
265
|
+
unless allowed_methods.include?(method_to_call)
|
266
|
+
|
267
|
+
@logger.info(php_name) { "calling method #{method_to_call}" }
|
268
|
+
|
269
|
+
method_to_call
|
270
|
+
end
|
271
|
+
|
272
|
+
def allowed_methods
|
273
|
+
retval = public_methods(false)
|
274
|
+
retval.delete(:run)
|
275
|
+
retval.delete(:install)
|
276
|
+
retval
|
277
|
+
end
|
278
|
+
|
279
|
+
def pid_file
|
280
|
+
File.join('/var/run/', "#{@name}_#{php_name}.run")
|
281
|
+
end
|
282
|
+
|
283
|
+
def pid
|
284
|
+
return nil unless File.exist? pid_file
|
285
|
+
val = open(pid_file).read.strip.to_i
|
286
|
+
return nil if val == 0
|
287
|
+
val
|
288
|
+
end
|
289
|
+
|
290
|
+
def pid=(pid)
|
291
|
+
if pid.nil?
|
292
|
+
begin
|
293
|
+
File.unlink pid_file
|
294
|
+
rescue Errno::ENOENT
|
295
|
+
@logger.debug("No pid file found: #{pid_file}")
|
296
|
+
end
|
297
|
+
else
|
298
|
+
File.open pid_file, 'w' do |f|
|
299
|
+
f.write pid
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
def running?
|
305
|
+
return false if pid.nil?
|
306
|
+
begin
|
307
|
+
Process.getpgid(pid)
|
308
|
+
true
|
309
|
+
rescue Errno::ESRCH
|
310
|
+
false
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|