mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-30 01:04:09 +02:00
parent
7569c55796
commit
bb7f465c0e
@ -4,7 +4,10 @@
|
|||||||
|
|
||||||
namespace Icinga\Clicommands;
|
namespace Icinga\Clicommands;
|
||||||
|
|
||||||
|
use Icinga\Application\Logger;
|
||||||
use Icinga\Cli\Command;
|
use Icinga\Cli\Command;
|
||||||
|
use Icinga\Config\Webserver\WebServer;
|
||||||
|
use Icinga\Exception\ProgrammingError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup Icinga Web 2
|
* Setup Icinga Web 2
|
||||||
@ -120,6 +123,71 @@ class SetupCommand extends Command
|
|||||||
printf($this->translate("Successfully created configuration directory at: %s\n"), $path);
|
printf($this->translate("Successfully created configuration directory at: %s\n"), $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create webserver configuration
|
||||||
|
*
|
||||||
|
* USAGE:
|
||||||
|
*
|
||||||
|
* icingacli setup webserver <apache2|apache24|nginx> [options]
|
||||||
|
*
|
||||||
|
* OPTIONS:
|
||||||
|
*
|
||||||
|
* --path=<webpath> Path for the web server, default /icingaweb
|
||||||
|
*
|
||||||
|
* --publicPath=<wwwroot> Path to htdocs system path
|
||||||
|
*
|
||||||
|
* --file=<filename> Write configuration to file
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* EXAMPLES:
|
||||||
|
*
|
||||||
|
* icingacli setup webserver apache24
|
||||||
|
*
|
||||||
|
* icingacli setup webserver apache2 --path /icingaweb --publicPath /usr/share/icingaweb/public
|
||||||
|
*
|
||||||
|
* icingacli setup webserver apache2 --file /etc/apache2/conf.d/icingaweb.conf
|
||||||
|
*/
|
||||||
|
public function webserverAction()
|
||||||
|
{
|
||||||
|
if (($type = $this->params->getStandalone()) === null) {
|
||||||
|
$this->fail($this->translate('Argument type is mandatory.'));
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$webserver = WebServer::createInstance($type);
|
||||||
|
} catch (ProgrammingError $e) {
|
||||||
|
$this->fail($this->translate('Unknown type') . ': ' . $type);
|
||||||
|
}
|
||||||
|
$webserver->setApp($this->app);
|
||||||
|
if (($sapi = $this->params->get('sapi', 'server')) === null) {
|
||||||
|
$this->fail($this->translate('argument --sapi is mandatory.'));
|
||||||
|
}
|
||||||
|
if (($path = $this->params->get('path', '/icingaweb')) === null) {
|
||||||
|
$this->fail($this->translate('argument --path is mandatory.'));
|
||||||
|
}
|
||||||
|
if (($publicPath = $this->params->get('publicPath', $webserver->getPublicPath())) === null) {
|
||||||
|
$this->fail($this->translate('argument --publicPath is mandatory.'));
|
||||||
|
}
|
||||||
|
$webserver->setWebPath($path);
|
||||||
|
$webserver->setPublicPath($publicPath);
|
||||||
|
$webserver->setSapi($sapi);
|
||||||
|
$config = $webserver->generate() . "\n";
|
||||||
|
if (($file = $this->params->get('file')) !== null) {
|
||||||
|
if (file_exists($file) === true) {
|
||||||
|
$this->fail(sprintf($this->translate('File %s already exists. Please delete it first.'), $file));
|
||||||
|
}
|
||||||
|
Logger::info($this->translate('Write %s configuration to file: %s'), $type, $file);
|
||||||
|
$re = file_put_contents($file, $config);
|
||||||
|
if ($re === false) {
|
||||||
|
$this->fail($this->translate('Could not write to file') . ': ' . $file);
|
||||||
|
}
|
||||||
|
Logger::info($this->translate('Successfully written %d bytes to file'), $re);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
printf("# Your %s configuration:\n", $type);
|
||||||
|
echo $config;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return whether the current user is a super user
|
* Return whether the current user is a super user
|
||||||
*
|
*
|
||||||
|
28
library/Icinga/Config/Webserver/Apache2.php
Normal file
28
library/Icinga/Config/Webserver/Apache2.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
|
namespace Icinga\Config\Webserver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate apache 2.x (< 2.4) configuration
|
||||||
|
*/
|
||||||
|
class Apache2 extends WebServer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getTemplate()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'Alias {webPath} {publicPath}',
|
||||||
|
'<directory {publicPath}>',
|
||||||
|
' Options -Indexes',
|
||||||
|
' AllowOverride All',
|
||||||
|
' Order allow,deny',
|
||||||
|
' Allow from all',
|
||||||
|
' EnableSendfile Off',
|
||||||
|
'</directory>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
26
library/Icinga/Config/Webserver/Apache24.php
Normal file
26
library/Icinga/Config/Webserver/Apache24.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
|
namespace Icinga\Config\Webserver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate apache2.4 configuration
|
||||||
|
*/
|
||||||
|
class Apache24 extends Apache2
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Use default template and change granted syntax for 2.4
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getTemplate()
|
||||||
|
{
|
||||||
|
$template = parent::getTemplate();
|
||||||
|
$replace = array(
|
||||||
|
' Require all granted'
|
||||||
|
);
|
||||||
|
array_splice($template, count($template)-4, 2, $replace);
|
||||||
|
return $template;
|
||||||
|
}
|
||||||
|
}
|
186
library/Icinga/Config/Webserver/Webserver.php
Normal file
186
library/Icinga/Config/Webserver/Webserver.php
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
<?php
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
// {{{ICINGA_LICENSE_HEADER}}}
|
||||||
|
|
||||||
|
namespace Icinga\Config\Webserver;
|
||||||
|
|
||||||
|
use Icinga\Application\ApplicationBootstrap;
|
||||||
|
use Icinga\Exception\ProgrammingError;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate webserver configuration
|
||||||
|
*/
|
||||||
|
abstract class WebServer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Web path
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $webPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SAPI name (e.g for cgi config generation)
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $sapi;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* System path to public documents
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $publicPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application
|
||||||
|
*
|
||||||
|
* @var ApplicationBootstrap
|
||||||
|
*/
|
||||||
|
protected $app;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create instance by type name
|
||||||
|
*
|
||||||
|
* @param string $type
|
||||||
|
*
|
||||||
|
* @return WebServer
|
||||||
|
*
|
||||||
|
* @throws ProgrammingError
|
||||||
|
*/
|
||||||
|
public static function createInstance($type)
|
||||||
|
{
|
||||||
|
$class = __NAMESPACE__ . '\\' . ucfirst($type);
|
||||||
|
if (class_exists($class)) {
|
||||||
|
return new $class();
|
||||||
|
}
|
||||||
|
throw new ProgrammingError('Class "%s" does not exist', $class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate configuration
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function generate()
|
||||||
|
{
|
||||||
|
$template = $this->getTemplate();
|
||||||
|
if (is_array($template)) {
|
||||||
|
$template = implode(PHP_EOL, $template);
|
||||||
|
}
|
||||||
|
$searchTokens = array(
|
||||||
|
'{webPath}',
|
||||||
|
'{publicPath}'
|
||||||
|
);
|
||||||
|
$replaceTokens = array(
|
||||||
|
$this->getWebPath(),
|
||||||
|
$this->getPublicPath()
|
||||||
|
);
|
||||||
|
$template = str_replace($searchTokens, $replaceTokens, $template);
|
||||||
|
return $template;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specific template
|
||||||
|
*
|
||||||
|
* @return array|string
|
||||||
|
*/
|
||||||
|
abstract protected function getTemplate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for SAPI name
|
||||||
|
*
|
||||||
|
* @param string $sapi
|
||||||
|
*/
|
||||||
|
public function setSapi($sapi)
|
||||||
|
{
|
||||||
|
$this->sapi = $sapi;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for SAPI name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSapi()
|
||||||
|
{
|
||||||
|
return $this->sapi;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for web path
|
||||||
|
*
|
||||||
|
* @param string $webPath
|
||||||
|
*/
|
||||||
|
public function setWebPath($webPath)
|
||||||
|
{
|
||||||
|
$this->webPath = $webPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for web path
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getWebPath()
|
||||||
|
{
|
||||||
|
return $this->webPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $publicPath
|
||||||
|
*/
|
||||||
|
public function setPublicPath($publicPath)
|
||||||
|
{
|
||||||
|
$this->publicPath = $publicPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect public root
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function detectPublicPath()
|
||||||
|
{
|
||||||
|
$applicationPath = $this->getApp()->getApplicationDir();
|
||||||
|
$applicationPath = dirname($applicationPath) . DIRECTORY_SEPARATOR . 'public';
|
||||||
|
if (is_dir($applicationPath) === true) {
|
||||||
|
return $applicationPath;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for public root
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPublicPath()
|
||||||
|
{
|
||||||
|
if ($this->publicPath === null) {
|
||||||
|
$this->publicPath = $this->detectPublicPath();
|
||||||
|
}
|
||||||
|
return $this->publicPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for application bootstrap
|
||||||
|
*
|
||||||
|
* @param ApplicationBootstrap $app
|
||||||
|
*/
|
||||||
|
public function setApp(ApplicationBootstrap $app)
|
||||||
|
{
|
||||||
|
$this->app = $app;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for application bootstrap
|
||||||
|
*
|
||||||
|
* @return ApplicationBootstrap
|
||||||
|
*/
|
||||||
|
public function getApp()
|
||||||
|
{
|
||||||
|
return $this->app;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user