Skip to content

Commit

Permalink
docker sites
Browse files Browse the repository at this point in the history
  • Loading branch information
usmannasir committed Dec 10, 2023
2 parents 0afc49f + 971289b commit 1eb8d5f
Show file tree
Hide file tree
Showing 8 changed files with 378 additions and 77 deletions.
Binary file modified baseTemplate/static/baseTemplate/assets/finalBase/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 25 additions & 25 deletions managePHP/phpManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,36 @@
from random import randint
from .models import *
from xml.etree import ElementTree
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging


class PHPManager:

@staticmethod
def findPHPVersions():
import re
import os
php_versions = []
lsws_directory = "/usr/local/lsws"

if os.path.exists(lsws_directory):
for dir_name in os.listdir(lsws_directory):
full_path = os.path.join(lsws_directory, dir_name)
if os.path.isdir(full_path) and dir_name.startswith("lsphp"):
php_version = dir_name.replace("lsphp", "PHP ").replace("", ".")
php_versions.append(php_version)

result_list = []
for item in sorted(php_versions):
# Use regular expression to find numbers in the string
numbers = re.findall(r'\d+', item)

# Join the numbers with dots and add 'PHP' back to the string
result = 'PHP ' + '.'.join(numbers)

result_list.append(result)

return sorted(result_list)
# distro = ProcessUtilities.decideDistro()
# if distro == ProcessUtilities.centos:
# return ['PHP 5.3', 'PHP 5.4', 'PHP 5.5', 'PHP 5.6', 'PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
# elif distro == ProcessUtilities.cent8:
# return ['PHP 7.1','PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
# elif distro == ProcessUtilities.ubuntu20:
# return ['PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']
# else:
# return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']

try:

# Run the shell command and capture the output
result = ProcessUtilities.outputExecutioner('ls -la /usr/local/lsws')

# Get the lines containing 'lsphp' in the output
lsphp_lines = [line for line in result.split('\n') if 'lsphp' in line]

# Extract the version from the lines and format it as 'PHP x.y'
php_versions = ['PHP ' + line.split()[8][5] + '.' + line.split()[8][6:] for line in lsphp_lines]

# Now php_versions contains the formatted PHP versions
return php_versions
except BaseException as msg:
return ['PHP 7.0', 'PHP 7.1', 'PHP 7.2', 'PHP 7.3', 'PHP 7.4', 'PHP 8.0', 'PHP 8.1']

@staticmethod
def getPHPString(phpVersion):
Expand Down
155 changes: 155 additions & 0 deletions plogical/DockerSites.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
from plogical.processUtilities import ProcessUtilities
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging


class DockerSites:

def __init__(self, data):
self.data = data
self.JobID = self.data['JobID'] ##JOBID will be file path where status is being written
pass

def InstallDocker(self):

command = 'apt install docker-compose -y'
ReturnCode = ProcessUtilities.executioner(command)

if ReturnCode:
return 1, None
else:
return 0, ReturnCode

# Takes
# ComposePath, MySQLPath, MySQLRootPass, MySQLDBName, MySQLDBNUser, MySQLPassword, CPUsMySQL, MemoryMySQL,
# port, SitePath, CPUsSite, MemorySite, ComposePath, SiteName
# finalURL, blogTitle, adminUser, adminPassword, adminEmail

def DeployWPContainer(self):
try:
logging.statusWriter(self.JobID, 'Checking if Docker is installed..,0')


command = 'docker --help'
ReturnCode = ProcessUtilities.executioner(command)
if ReturnCode == 0:
status, message = self.InstallDocker()
if status == 0:
logging.statusWriter(self.JobID, 'Failed to installed docker. [404]')
return 0, message

logging.statusWriter(self.JobID, 'Docker is ready to use..,10')

WPSite = f"""
version: "3.8"
services:
db:
image: mysql:5.7
restart: always
volumes:
- "{self.data['MySQLPath']}:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: {self.data['MySQLRootPass']}
MYSQL_DATABASE: {self.data['MySQLDBName']}
MYSQL_USER: {self.data['MySQLDBNUser']}
MYSQL_PASSWORD: {self.data['MySQLPassword']}
deploy:
resources:
limits:
cpus: '{self.data['CPUsMySQL']}' # Use 50% of one CPU core
memory: {self.data['MemoryMySQL']}M # Limit memory to 512 megabytes
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "{self.data['port']}:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: {self.data['MySQLDBNUser']}
WORDPRESS_DB_PASSWORD: {self.data['MySQLPassword']}
WORDPRESS_DB_NAME: {self.data['MySQLDBName']}
volumes:
- "{self.data['SitePath']}:/var/www/html"
deploy:
resources:
limits:
cpus: '{self.data['CPUsSite']}' # Use 50% of one CPU core
memory: {self.data['MemorySite']}M # Limit memory to 512 megabytes
volumes:
mysql: {{}}
"""

### WriteConfig to compose-file

WriteToFile = open(self.data['ComposePath'], 'w')
WriteToFile.write(WPSite)
WriteToFile.close()

####

command = f"docker-compose -f {self.data['ComposePath']} -p '{self.data['SiteName']}' up -d"
ReturnCode = ProcessUtilities.executioner(command)

command = f"docker-compose -f {self.data['ComposePath']} ps -q wordpress"
stdout = ProcessUtilities.outputExecutioner(command)

self.ContainerID = stdout.rstrip('\n')



command = f'docker-compose -f {self.data["ComposePath"]} exec {self.ContainerID} curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar'
ReturnCode = ProcessUtilities.executioner(command)

command = f"docker-compose -f {self.data['ComposePath']} exec {self.ContainerID} chmod + wp-cli.phar"
ReturnCode = ProcessUtilities.executioner(command)

command = f"docker-compose -f {self.data['ComposePath']} exec {self.ContainerID} mv wp-cli.phar /bin/wp"
ReturnCode = ProcessUtilities.executioner(command)

command = f'docker-compose -f {self.data["ComposePath"]} exec {self.ContainerID} wp core install --url="http://{self.data["finalURL"]}" --title="{self.data["blogTitle"]}" --admin_user="{self.data["adminUser"]}" --admin_password="{self.data["adminPassword"]}" --admin_email="{self.data["adminEmail"]}" --path=. --allow-root'
ReturnCode = ProcessUtilities.executioner(command)

except BaseException as msg:
print(str(msg))
pass


def Main():
try:
# Takes
# ComposePath, MySQLPath, MySQLRootPass, MySQLDBName, MySQLDBNUser, MySQLPassword, CPUsMySQL, MemoryMySQL,
# port, SitePath, CPUsSite, MemorySite, SiteName
# finalURL, blogTitle, adminUser, adminPassword, adminEmail
data = {
"JobID": 1122344566667778888,
"ComposePath": "/home/dockercloudpagescloud/docker-compose.yml",
"MySQLPath": '/home/dockercloudpagescloud/public_html/sqldocker',
"MySQLRootPass": 'testdbwp12345',
"MySQLDBName": 'testdbwp',
"MySQLDBNUser": 'testdbwp',
"MySQLPassword": 'testdbwp12345',
"CPUsMySQL": '2',
"MemoryMySQL": '512',
"port": '8000',
"SitePath": '/home/dockercloudpagescloud/public_html/wpdocker',
"CPUsSite": '2',
"MemorySite": '512',
"SiteName": 'wp docker test',
"finalURL": '95.217.125.218:8001',
"blogTitle": 'testdbwp',
"adminUser": 'testdbwp',
"adminPassword": 'testdbwp',
"adminEmail": 'testdbwp',
}
ds = DockerSites(data)

ds.DeployWPContainer()
except BaseException as msg:
print(str(msg))
pass

if __name__ == "__main__":
Main()
70 changes: 68 additions & 2 deletions plogical/acl.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/local/CyberCP/bin/python
import os,sys

from ApachController.ApacheVhosts import ApacheVhost
from manageServices.models import PDNSStatus
from .processUtilities import ProcessUtilities

Expand Down Expand Up @@ -676,8 +677,6 @@ def findAllWebsites(currentACL, userID):

@staticmethod
def checkOwnership(domain, admin, currentACL):


try:
childDomain = ChildDomains.objects.get(domain=domain)

Expand Down Expand Up @@ -997,3 +996,70 @@ def FetchCloudFlareAPIKeyFromAcme():
except BaseException as msg:
return 0, str(msg), None


@staticmethod
def FindDocRootOfSite(vhostConf,domainName):
try:
if vhostConf == None:
vhostConf = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf'

if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = "awk '/docRoot/ {print $2}' " + vhostConf
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
#docRoot = docRoot.replace('$VH_ROOT', f'/home/{domainName}')
return docRoot
else:
command = "awk '/DocumentRoot/ {print $2; exit}' " + vhostConf
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
return docRoot
except:
pass

@staticmethod
def ReplaceDocRoot(vhostConf, domainName, NewDocRoot):
try:
if vhostConf == None:
vhostConf = f'/usr/local/lsws/conf/vhosts/{domainName}/vhost.conf'

if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
#command = f"sed -i 's/docRoot\s\s*.*/docRoot {NewDocRoot}/g " + vhostConf
command = f"sed -i 's#docRoot\s\s*.*#docRoot {NewDocRoot}#g' " + vhostConf
ProcessUtilities.executioner(command, 'root', True)
else:
command = f"sed -i 's#DocumentRoot\s\s*[^[:space:]]*#DocumentRoot {NewDocRoot}#g' " + vhostConf
ProcessUtilities.executioner(command, 'root', True)

except:
pass

@staticmethod
def FindDocRootOfSiteApache(vhostConf, domainName):
try:
finalConfPath = ApacheVhost.configBasePath + domainName + '.conf'

if ProcessUtilities.decideServer() == ProcessUtilities.OLS:

if os.path.exists(finalConfPath):
command = "awk '/DocumentRoot/ {print $2; exit}' " + finalConfPath
docRoot = ProcessUtilities.outputExecutioner(command, 'root', True).rstrip('\n')
return docRoot
else:
return None
else:
return None

except:
return None

@staticmethod
def ReplaceDocRootApache(vhostConf, domainName, NewDocRoot):
try:
finalConfPath = ApacheVhost.configBasePath + domainName + '.conf'

if ProcessUtilities.decideServer() == ProcessUtilities.OLS:
command = f"sed -i 's#DocumentRoot\s\s*[^[:space:]]*#DocumentRoot {NewDocRoot}#g' " + finalConfPath
ProcessUtilities.executioner(command, 'root', True)
except:
pass


Loading

0 comments on commit 1eb8d5f

Please sign in to comment.