From d55ec4be129bd9f7721bd20308367599215959c0 Mon Sep 17 00:00:00 2001 From: kev Date: Tue, 14 Jun 2016 16:32:44 +0800 Subject: [PATCH] add phpvirtualbox --- phpvirtualbox/Dockerfile | 30 ++++ phpvirtualbox/README.md | 6 +- phpvirtualbox/arm/Dockerfile | 5 +- phpvirtualbox/arm/nginx.conf | 1 + phpvirtualbox/config.php | 229 +++++++++++++++++++++++++++++ phpvirtualbox/docker-compose.yml | 2 +- phpvirtualbox/nginx.conf | 45 ++++++ phpvirtualbox/servers-from-env.php | 65 ++++++++ 8 files changed, 376 insertions(+), 7 deletions(-) create mode 100644 phpvirtualbox/Dockerfile create mode 100644 phpvirtualbox/config.php create mode 100644 phpvirtualbox/nginx.conf create mode 100644 phpvirtualbox/servers-from-env.php diff --git a/phpvirtualbox/Dockerfile b/phpvirtualbox/Dockerfile new file mode 100644 index 0000000..4542165 --- /dev/null +++ b/phpvirtualbox/Dockerfile @@ -0,0 +1,30 @@ +# +# Dockerfile for phpvirtualbox +# + +FROM alpine +MAINTAINER kev + +RUN set -xe \ + && apk add --no-cache bash nginx php5-fpm php5-cli php5-json php5-soap \ + && apk add --no-cache --virtual build-dependencies wget unzip \ + && touch /etc/php5/fpm.d/empty.conf \ + && wget --no-check-certificate https://sourceforge.net/projects/phpvirtualbox/files/latest/download -O phpvirtualbox.zip \ + && unzip phpvirtualbox.zip -d phpvirtualbox \ + && mkdir -p /var/www \ + && mv -v phpvirtualbox/*/* /var/www/ \ + && rm phpvirtualbox.zip \ + && rm phpvirtualbox/ -R \ + && apk del build-dependencies \ + && rm -rf /var/cache/apk/* \ + && echo "" > /var/www/config-servers.php \ + && echo "" > /var/www/config-override.php \ + && chown nobody:nobody -R /var/www + +COPY config.php /var/www/config.php +COPY nginx.conf /etc/nginx/nginx.conf +COPY servers-from-env.php /servers-from-env.php + +EXPOSE 80 + +CMD php /servers-from-env.php && php-fpm && nginx diff --git a/phpvirtualbox/README.md b/phpvirtualbox/README.md index 394b734..7d9c6b0 100644 --- a/phpvirtualbox/README.md +++ b/phpvirtualbox/README.md @@ -1,13 +1,15 @@ phpVirtualBox ============= +This is a fork of [jazzdd86/phpvirtualbox](https://hub.docker.com/r/jazzdd/phpvirtualbox/). + [phpVirtualBox][1] is a web-based front-end to VirtualBox written in PHP. ### docker-compose.yml ```yaml phpvirtualbox: - image: jazzdd/phpvirtualbox + image: vimagick/phpvirtualbox ports: - "8888:80" environment: @@ -20,7 +22,7 @@ phpvirtualbox: ``` > - Make sure you can login `remote-server` with `username:password`. -> - ISO images can be placed at `/data` directory of `remote-server`. +> - ISO images can be placed at `/data` directory on `remote-server`. > - During the OS installation, you can connect to it with RDP viewer. ### vboxweb.service diff --git a/phpvirtualbox/arm/Dockerfile b/phpvirtualbox/arm/Dockerfile index ea3335a..60744b2 100644 --- a/phpvirtualbox/arm/Dockerfile +++ b/phpvirtualbox/arm/Dockerfile @@ -21,13 +21,10 @@ RUN set -xe \ && echo "" > /var/www/config-override.php \ && chown nobody:nobody -R /var/www -# config files COPY config.php /var/www/config.php COPY nginx.conf /etc/nginx/nginx.conf COPY servers-from-env.php /servers-from-env.php -# expose only nginx HTTP port EXPOSE 80 -# write linked instances to config, then monitor all services -CMD mkdir -p /run/nginx && php /servers-from-env.php && php-fpm && nginx +CMD php /servers-from-env.php && php-fpm && nginx diff --git a/phpvirtualbox/arm/nginx.conf b/phpvirtualbox/arm/nginx.conf index 76311b9..fa3fbf5 100644 --- a/phpvirtualbox/arm/nginx.conf +++ b/phpvirtualbox/arm/nginx.conf @@ -1,5 +1,6 @@ daemon off; error_log /dev/stdout info; +pid /run/nginx.pid; user nobody; worker_processes 4; diff --git a/phpvirtualbox/config.php b/phpvirtualbox/config.php new file mode 100644 index 0000000..fa19014 --- /dev/null +++ b/phpvirtualbox/config.php @@ -0,0 +1,229 @@ +servers = require __DIR__ . '/config-servers.php'; + // getting override settings + $overrides = require __DIR__.'/config-override.php'; + foreach ($overrides as $key => $value) { + $this->$key = $value; + } + } + + /* Username / Password for system user that runs VirtualBox */ + var $username = ''; + var $password = ''; + + /* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */ + var $location = 'http://127.0.0.1:18083/'; + + /* Default language. See languages folder for more language options. + * Can also be changed in File -> Preferences -> Language in + * phpVirtualBox. + */ + var $language = 'en'; + + /* Set the standard VRDE Port Number / Range, e.g. 1010-1020 or 1027 */ + var $vrdeports = '9000-9100'; + + /* + * + * Not-so-common options / tweaking + * + */ + + // Multiple servers example config. Uncomment (remove /* and */) to use. + // Add ALL the servers you want to use. Even if you have the server set + // above. The default server will be the first one in the list. + + /* + var $servers = array( + array( + 'name' => 'London', + 'username' => 'user', + 'password' => 'pass', + 'location' => 'http://192.168.1.1:18083/', + 'authMaster' => true // Use this server for authentication + ), + array( + 'name' => '', + 'username' => 'user2', + 'password' => 'pass2', + 'location' => 'http://192.168.1.2:18083/' + ), + ); + */ + + // Disable authentication + var $noAuth = true; + + // Host / ip to use for console connections + #var $consoleHost = '192.168.1.40'; + + // Disable "preview" box + #var $noPreview = true; + + // Default preview box update interval in seconds + #var $previewUpdateInterval = 30; + + // Preview box pixel width + #var $previewWidth = 180; + + // Max number of progress operations to keep in list + var $maxProgressList = 5; + + // Change default preview aspect ratio to 1. + // http://www.wikipedia.org/wiki/Aspect_ratio_%28image%29#Previous_and_presently_used_aspect_ratios + #var $previewAspectRatio = 1.6; + + // Enable custom VM icons + #var $enableCustomIcons = true; + + /* + Exclusively use phpVirtualBox's groups configuration rather than VirtualBox groups. + This has the following effects: + + *) Group changes made in phpVirtualBox will not be reflected in VirtualBox programs such as + VirtualBox and VBoxManage + *) Group changes will not affect which folder a VM is placed in + *) You can rename groups that contain running VMs and move / copy running VMs to groups + */ + #var $phpVboxGroups = true; + + + /* + Allow to prompt deletion hard disk files on removal from Virtual Media Manager. + If this is not set, files are always kept. If this is set, you will be PROMPTED + to decide whether or not you would like to delete the hard disk file(s) when you + remove a hard disk from virtual media manager. You may still choose not to delete + the file when prompted. + */ + var $deleteOnRemove = true; + + /* + * File / Folder browser settings + */ + + // Restrict file types + var $browserRestrictFiles = array('.iso','.vdi','.vmdk','.img','.bin','.vhd','.hdd','.ovf','.ova','.xml','.vbox','.cdr','.dmg','.ima','.dsk','.vfd'); + + // Restrict locations / folders + var $browserRestrictFolders = array('/'); // Or something like array('/home/vbox','/var/ISOs') + + // Force use of local, web server based file browser instead of going through vboxwebsrv + #var $browserLocal = true; + + // Disable file / folder browser. + #var $browserDisable = true; + + // Disable Windows drive detection + #var $noWindowsDriveList = true; + + // Just list all drives from C:\ - Z:\ without checking if they exist or not. + // This may be required on older Windows systems with more than one drive. + #var $forceWindowsAllDriveList = true; + + /* + * Misc + */ + + /* + * Auto-refresh interval in seconds for VirtualBox host memory usage information. + * Any value below 3 will be ignored. + */ + var $hostMemInfoRefreshInterval = 5; + + /* Show % of free host memory instead of % used */ + #var $hostMemInfoShowFreePct = true; + + /* + * VM Memory warnings. + * + * If $vmMemoryStartLimitWarn is enabled, each time a VM is started through + * phpVirtualBox, it will check that the available host memory is greater than + * the base and video memory of the VM + 50MB (a little bit of overhead). If it + * is not, a confirmation dialog will be presented to confirm that you want to + * start the VM. + * + * If $vmMemoryOffset is set (and $vmMemoryStartLimitWarn), $vmMemoryOffset + * megabytes is subtracted from the available host memory before the check is + * performed by $vmMemoryStartLimitWarn logic. For instance it may be a good + * idea to always have VM memory requirements + 100MB free. 100 is the default. + */ + #var $vmMemoryStartLimitWarn = true; + #var $vmMemoryOffset = 100; + + + /* + * Display guest additions version of a running VM on its Details tab + */ + #var $enableGuestAdditionsVersionDisplay = true; + + /* Disable any of phpVirtualBox's main tabs */ + #var $disableTabVMSnapshots = true; // Snapshots tab + #var $disableTabVMConsole = true; // Console tab + + /* Screen resolutions for console tab */ + var $consoleResolutions = array('640x480','800x600','1024x768','1280x720','1440x900'); + + /* Console tab keyboard layout. Currently Oracle's RDP client only supports EN and DE. */ + var $consoleKeyboardLayout = 'EN'; + + /* Max number of network cards per VM. Do not set above VirtualBox's limit (typically 8) or below 1 */ + var $nicMax = 4; + + /* Enable advanced configuration items (normally hidden in the VirtualBox GUI) + * Note that some of these items may not be translated to languages other than English. + */ + #var $enableAdvancedConfig = true; + + /* Enable startup / shutdown configuration. + * This only works in linux and you must add the vboxinit file to + * your startup scripts list. + */ + #var $startStopConfig = true; + + // Authentication library. + var $authLib = 'Builtin'; + + // VM ownership + #var $enforceVMOwnership = true; + + // Per-user VM quota + #var $vmQuotaPerUser = 2; + + + // Allow VDE network configuration. This must be supported by the underlying VirtualBox installation! + // If you do not know what VDE networking is - you do not need it, it is probably not supported by your + // VirtualBox installation and will cause errors if enabled. + #var $enableVDE = true; + + // Disable setting SATA controllers port count to the max port number found when saving VMs. + #var $disableSataPortCount = true; + + /* Enable Parallel Port configuration - EXPERIMENTAL + LPT support may or may not work for you. + !!! VirtualBox LPT support only works in Linux. !!! + */ + #var $enableLPTConfig = true; + + /* Enable HardDisk IgnoreFlush configuration. This controls the "ExtraData" setting + * in "VBoxInternal/Devices/[controller type]/0/LUN#[x]/Config/IgnoreFlush". See + * Responding to guest IDE/SATA flush requests at: + * http://www.virtualbox.org/manual/ch12.html#idp12757424 + */ + #var $enableHDFlushConfig = true; + + + /* END SETTINGS */ + + +} diff --git a/phpvirtualbox/docker-compose.yml b/phpvirtualbox/docker-compose.yml index 8faa4d7..5870709 100644 --- a/phpvirtualbox/docker-compose.yml +++ b/phpvirtualbox/docker-compose.yml @@ -1,5 +1,5 @@ phpvirtualbox: - image: jazzdd/phpvirtualbox + image: vimagick/phpvirtualbox ports: - "8888:80" environment: diff --git a/phpvirtualbox/nginx.conf b/phpvirtualbox/nginx.conf new file mode 100644 index 0000000..fa3fbf5 --- /dev/null +++ b/phpvirtualbox/nginx.conf @@ -0,0 +1,45 @@ +daemon off; +error_log /dev/stdout info; +pid /run/nginx.pid; + +user nobody; +worker_processes 4; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + access_log /dev/stdout; + sendfile on; + + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; + root /var/www; + + location / { + index index.php index.html; + try_files $uri $uri/ =404; + } + + # redirect server error pages to the static page /50x.html + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + } +} diff --git a/phpvirtualbox/servers-from-env.php b/phpvirtualbox/servers-from-env.php new file mode 100644 index 0000000..8089a45 --- /dev/null +++ b/phpvirtualbox/servers-from-env.php @@ -0,0 +1,65 @@ + $value) { + preg_match('/(.*?)(?:_ENV_|_)?CONF_(.+)/', $key, $matches); + if ($matches) { + $value= (strpos($value, ',')) ? split(',',$value) : $value; + $config_overrides[$matches[1]] = array($matches[2] => $value); + } +} + +echo 'Exposing the following linked server instances:' . PHP_EOL; + +// getting servers from linked vboxwebsrv containers or environment variables +foreach ($_SERVER as $key => $value) { + if (substr($key, -15) === '_PORT_18083_TCP') { + $prefix = substr($key, 0, -15); + + $name = getenv($prefix . '_NAME'); + $pos = strrpos($name, '/'); + if ($pos !== false) { + $name = substr($name, $pos + 1); + } + + if (!$name) { + $name = strtolower($prefix); + } + $name = ucfirst($name); + + $location = 'http://' . str_replace('tcp://', '', $value) . '/'; + + echo '- ' . $name . ' (' . $location .')' . PHP_EOL; + + $username = getenv($prefix.'_USER'); + $password = getenv($prefix.'_PW'); + + if ($username == "") $username = 'username'; + if ($password == "") $password = 'username'; + + $servers []= array_merge(array( + 'name' => $name, + 'username' => $username, + 'password' => $password, + 'authMaster' => true, + 'location' => $location), + (array_key_exists($prefix, $config_overrides)) ? $config_overrides[$prefix] : array()); + } +} +// check if there are any servers +if (!$servers) { + echo 'Error: No vboxwebsrv instance linked? Use "--link containername:myname"' . PHP_EOL; + echo 'Use environment variables if no vboxwebsrv containers are used!'; + exit(1); +} + +// put servers array to file +file_put_contents('/var/www/config-servers.php', '