ApacheWebsiteCreate.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Actions;
  3. class ApacheWebsiteCreate
  4. {
  5. public $domain;
  6. public $user;
  7. public $email;
  8. public $password;
  9. public $isMainDomain = false;
  10. public $additionalServices = [];
  11. public $features = [];
  12. public function setDomain($domain)
  13. {
  14. $this->domain = $domain;
  15. }
  16. public function setUser($user)
  17. {
  18. $this->user = $user;
  19. }
  20. public function setEmail($email)
  21. {
  22. $this->email = $email;
  23. }
  24. public function setPassword($password)
  25. {
  26. $this->password = $password;
  27. }
  28. public function setAdditionalServices($additionalServices)
  29. {
  30. $this->additionalServices = $additionalServices;
  31. }
  32. public function setFeatures($features)
  33. {
  34. $this->features = $features;
  35. }
  36. public function setIsMainDomain($isMainDomain)
  37. {
  38. $this->isMainDomain = $isMainDomain;
  39. }
  40. public function handle()
  41. {
  42. // $getLinuxUser = new GetLinuxUser();
  43. // $getLinuxUser->setUsername($this->user);
  44. // $linuxUser = $getLinuxUser->handle();
  45. //
  46. // if (empty($linuxUser)) {
  47. // return false;
  48. // }
  49. $linuxUser = $this->user;
  50. if ($this->isMainDomain) {
  51. $allDomainsRoot = '/home/'.$this->user.'/public_html';
  52. $domainRoot = '/home/'.$this->user;
  53. $domainPublic = '/home/'.$this->user.'/public_html';
  54. $homeRoot = '/home/'.$this->user;
  55. } else {
  56. $allDomainsRoot = '/home/'.$this->user.'/domains';
  57. $domainRoot = '/home/'.$this->user.'/domains/'.$this->domain;
  58. $domainPublic = $domainRoot.'/public_html';
  59. $homeRoot = '/home/'.$this->user;
  60. }
  61. $apacheVirtualHostConfigs = app()->virtualHostManager->getConfigs($this->additionalServices);
  62. $settings = [
  63. 'port' => 80,
  64. 'domain' => $this->domain,
  65. 'domainPublic' => $domainPublic,
  66. 'domainRoot' => $domainRoot,
  67. 'homeRoot' => $homeRoot,
  68. 'user' => $this->user,
  69. 'group' => 'www-data',
  70. 'enableRuid2' => true,
  71. ];
  72. $settings = array_merge($settings, $apacheVirtualHostConfigs);
  73. $apache2Sample = view('actions.samples.ubuntu.apache2-conf', $settings)->render();
  74. if (! is_dir($homeRoot)) {
  75. mkdir($homeRoot);
  76. }
  77. if (! is_dir($allDomainsRoot)) {
  78. mkdir($allDomainsRoot);
  79. }
  80. if (! is_dir($domainRoot)) {
  81. mkdir($domainRoot);
  82. }
  83. if (! is_dir($domainPublic)) {
  84. mkdir($domainPublic);
  85. }
  86. // shell_exec('chmod -R 775 /etc/apache2/sites-available/');
  87. file_put_contents('/etc/apache2/sites-available/'.$settings['domain'].'.conf', $apache2Sample);
  88. $indexContent = '
  89. <?php print_r($_ENV); ?>
  90. <?php echo get_current_user(); ?>
  91. <?php echo phpinfo(); ?>
  92. ';
  93. file_put_contents($settings['domainPublic'].'/index.php', $indexContent);
  94. shell_exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$allDomainsRoot);
  95. shell_exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$homeRoot);
  96. shell_exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$settings['domainRoot']);
  97. shell_exec('chown -R '.$settings['user'].':'.$settings['group'].' '.$settings['domainPublic']);
  98. shell_exec('chmod -R 775 '.$allDomainsRoot);
  99. shell_exec('chmod -R 775 '.$homeRoot);
  100. shell_exec('chmod -R 775 '.$settings['domainRoot']);
  101. shell_exec('chmod -R 775 '.$settings['domainPublic']);
  102. shell_exec('a2ensite '.$settings['domain'].'.conf');
  103. // shell_exec('systemctl reload apache2');
  104. return [
  105. 'domain' => $this->domain,
  106. 'domainPublic' => $settings['domainPublic'],
  107. 'domainRoot' => $settings['domainRoot'],
  108. 'homeRoot' => $settings['homeRoot'],
  109. 'user' => $this->user,
  110. 'email' => $this->email,
  111. 'linuxUser' => $linuxUser,
  112. 'apache2Sample' => $apache2Sample,
  113. ];
  114. }
  115. }