Browse Source

Merge branch 'python' of https://github.com/rtCamp/easyengine into python

bugfixes
shital.rtcamp 10 years ago
parent
commit
950cea0457
  1. 21
      LICENSE
  2. 7
      README.md
  3. 11
      ee/cli/plugins/debug.py
  4. 2
      ee/cli/plugins/import_slow_log.py
  5. 7
      ee/cli/plugins/site.py
  6. 72
      ee/cli/plugins/stack.py
  7. 12
      ee/cli/templates/22222.mustache
  8. 4
      ee/cli/templates/anemometer.mustache
  9. 4
      ee/cli/templates/vimbadmin.mustache
  10. 53
      ee/core/aptget.py
  11. 1
      ee/core/mysql.py
  12. 2
      ee/core/variables.py
  13. 2
      install
  14. 7
      setup.py

21
LICENSE

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2015 rtCamp solutions private limited
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

7
README.md

@ -12,7 +12,7 @@ IMPORTANT
[![Travis Build Status](https://travis-ci.org/rtCamp/easyengine.svg "Travis Build Status")] (https://travis-ci.org/rtCamp/easyengine)
EasyEngine (ee) is a linux shell-script collection, which makes it easy to manage your wordpress sites running on nginx web-server.
EasyEngine (ee) is a python tool, which makes it easy to manage your wordpress sites running on nginx web-server.
**EasyEngine currently supports:**
@ -24,7 +24,7 @@ EasyEngine (ee) is a linux shell-script collection, which makes it easy to manag
## Quick Start
```bash
wget http://rt.cx/eebeta && sudo bash install # install easyengine 3.0.0-beta
wget http://rt.cx/eebeta && sudo bash eebeta # install easyengine 3.0.0-beta
sudo ee site create example.com --wp # Install required packages & setup WordPress on example.com
```
@ -94,5 +94,4 @@ ee site create example.com --mysql # create example.com with php & mysql supp
[![Donate](https://cloud.githubusercontent.com/assets/4115/5297691/c7b50292-7bd7-11e4-987b-2dc21069e756.png)] (https://rtcamp.com/donate/?project=easyengine)
## License
Same [GPL] (http://www.gnu.org/licenses/gpl-2.0.txt) that WordPress uses!
[MIT] (http://opensource.org/licenses/MIT)

11
ee/cli/plugins/debug.py

@ -279,8 +279,10 @@ class EEDebugController(CementBaseController):
Log.info(self, "Starting WordPress debug")
open("{0}/htdocs/wp-content/debug.log".format(webroot),
'a').close()
EEShellExec.cmd_exec(self, "chown www-data: {0}/htdocs/wp-"
"content/debug.log".format(webroot))
EEShellExec.cmd_exec(self, "chown {1}: {0}/htdocs/wp-"
"content/debug.log"
"".format(webroot,
EEVariables.ee_php_user))
EEShellExec.cmd_exec(self, "sed -i \"s/define(\'WP_DEBUG\'"
".*/define(\'WP_DEBUG\', true);\\n"
"define(\'WP_DEBUG_DISPLAY\', false);"
@ -290,9 +292,10 @@ class EEDebugController(CementBaseController):
EEShellExec.cmd_exec(self, "cd {0}/htdocs/ && wp"
" plugin --allow-root install "
"developer".format(webroot))
EEShellExec.cmd_exec(self, "chown -R www-data: {0}/htdocs/"
EEShellExec.cmd_exec(self, "chown -R {1}: {0}/htdocs/"
"wp-content/plugins"
.format(webroot))
.format(webroot,
EEVariables.ee_php_user))
else:
Log.info(self, "WordPress debug log already enabled")

2
ee/cli/plugins/import_slow_log.py

@ -24,7 +24,7 @@ class EEImportslowlogController(CementBaseController):
.format(EEVariables.ee_webroot)):
if os.path.isfile("/var/log/mysql/mysql-slow.log"):
# Get Anemometer user name and password
Log.error(self, "Importing MySQL slow log to Anemometer")
Log.info(self, "Importing MySQL slow log to Anemometer")
host = os.popen("grep -e \"\'host\'\" {0}22222/htdocs/"
.format(EEVariables.ee_webroot)
+ "db/anemometer/conf/config.inc.php "

7
ee/cli/plugins/site.py

@ -39,7 +39,7 @@ class EESiteController(CementBaseController):
@expose(help="Enable site example.com")
def enable(self):
(ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name)
Log.info(self, "Enable domain {0:10}".format(ee_domain), end='')
Log.info(self, "Enable domain {0:10} \t".format(ee_domain), end='')
if os.path.isfile('/etc/nginx/sites-available/{0}'
.format(ee_domain)):
EEFileUtils.create_symlink(self,
@ -47,15 +47,17 @@ class EESiteController(CementBaseController):
.format(ee_domain),
'/etc/nginx/sites-enabled/{0}'
.format(ee_domain)])
updateSiteInfo(self, ee_domain, enabled=True)
Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
EEService.reload_service(self, 'nginx')
else:
Log.error(self, " site {0} does not exists".format(ee_domain))
@expose(help="Disable site example.com")
def disable(self):
(ee_domain, ee_www_domain) = ValidateDomain(self.app.pargs.site_name)
Log.info(self, "Disable domain {0:10}".format(ee_domain), end='')
Log.info(self, "Disable domain {0:10} \t".format(ee_domain), end='')
if os.path.isfile('/etc/nginx/sites-available/{0}'
.format(ee_domain)):
if not os.path.isfile('/etc/nginx/sites-enabled/{0}'
@ -68,6 +70,7 @@ class EESiteController(CementBaseController):
.format(ee_domain))
updateSiteInfo(self, ee_domain, enabled=False)
Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
EEService.reload_service(self, 'nginx')
else:
Log.error(self, " site {0} does not exists".format(ee_domain))

72
ee/cli/plugins/stack.py

@ -75,7 +75,7 @@ class EEStackController(CementBaseController):
def pre_pref(self, apt_packages):
"""Pre settings to do before installation packages"""
if set(EEVariables.ee_postfix).issubset(set(apt_packages)):
Log.info(self, "Pre-seeding Postfix")
Log.debug(self, "Pre-seeding Postfix")
EEShellExec.cmd_exec(self, "echo \"postfix postfix"
"/main_mailer_type string \'Internet Site\'\""
" | debconf-set-selections")
@ -90,7 +90,7 @@ class EEStackController(CementBaseController):
EERepo.add_key(self, '1C4CBDCDCD2EFD2A',
keyserver="subkeys.pgp.net")
chars = ''.join(random.sample(string.ascii_letters, 8))
Log.info(self, "Pre-seeding MySQL")
Log.debug(self, "Pre-seeding MySQL")
EEShellExec.cmd_exec(self, "echo \"percona-server-server-5.6 "
"percona-server-server/root_password "
"password {chars}\" | "
@ -203,7 +203,7 @@ class EEStackController(CementBaseController):
'/etc/nginx/common')
os.makedirs('/etc/nginx/common')
data = dict()
data = dict(webroot=EEVariables.ee_webroot)
Log.debug(self, 'Writting the nginx configuration to '
'file /etc/nginx/common/acl.conf')
ee_nginx = open('/etc/nginx/common/acl.conf', 'w')
@ -450,8 +450,9 @@ class EEStackController(CementBaseController):
myfile.write("<?php\nphpinfo();\n?>")
EEFileUtils.chown(self, "{0}22222"
.format(EEVariables.ee_webroot), 'www-data',
'www-data', recursive=True)
.format(EEVariables.ee_webroot),
EEVariables.ee_php_user,
EEVariables.ee_php_user, recursive=True)
EEGit.add(self, ["/etc/php5"], msg="Adding PHP into Git")
EEService.reload_service(self, 'php5-fpm')
@ -640,10 +641,38 @@ class EEStackController(CementBaseController):
"smtp-amavis:[127.0.0.1]:10024\"")
EEShellExec.cmd_exec(self, "sed -i \"s/1 pickup/1 "
"pickup"
"\\n -o content_filter=\\n -o"
"\\n -o content_filter=\\n -o"
" receive_override_options=no_header_body"
"_checks/\" /etc/postfix/master.cf")
amavis_master = ("""smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,""" +
"""no_unknown_recipient_check
-o local_header_rewrite_clients=""")
with open("/etc/postfix/master.cf", "a") as am_config:
am_config.write(amavis_master)
# Amavis ClamAV configuration
Log.debug(self, "Adding new user clamav amavis")
EEShellExec.cmd_exec(self, "adduser clamav amavis")
@ -681,11 +710,9 @@ class EEStackController(CementBaseController):
shutil.move('/tmp/phpmyadmin-STABLE/',
'{0}22222/htdocs/db/pma/'
.format(EEVariables.ee_webroot))
Log.debug(self, 'Setting Privileges of www-data:www-data to '
Log.debug(self, 'Setting Privileges of webroot permission to '
'{0}22222/htdocs/db/pma file '
.format(EEVariables.ee_webroot))
# EEShellExec.cmd_exec(self, 'chown -R www-data:www-data '
# '/var/www/22222/htdocs/db/pma')
EEFileUtils.chown(self, '{0}22222'
.format(EEVariables.ee_webroot),
EEVariables.ee_php_user,
@ -702,8 +729,6 @@ class EEStackController(CementBaseController):
Log.debug(self, "Setting Privileges to "
"{0}22222/htdocs/cache/memcache file"
.format(EEVariables.ee_webroot))
# EEShellExec.cmd_exec(self, 'chown -R www-data:www-data '
# '/var/www/22222/htdocs/cache/memcache')
EEFileUtils.chown(self, '{0}22222'
.format(EEVariables.ee_webroot),
EEVariables.ee_php_user,
@ -729,11 +754,9 @@ class EEStackController(CementBaseController):
"/usr/bin/dot\'\" {0}22222/htdocs/"
"php/webgrind/config.php"
.format(EEVariables.ee_webroot))
Log.debug(self, "Setting Privileges of www-data:www-data to "
Log.debug(self, "Setting Privileges of webroot permission to "
"{0}22222/htdocs/php/webgrind/ file "
.format(EEVariables.ee_webroot))
# EEShellExec.cmd_exec(self, 'chown -R www-data:www-data '
# '/var/www/22222/htdocs/php/webgrind/')
EEFileUtils.chown(self, '{0}22222'
.format(EEVariables.ee_webroot),
EEVariables.ee_php_user,
@ -830,7 +853,8 @@ class EEStackController(CementBaseController):
# Custom Vimbadmin configuration by EasyEngine
data = dict(salt=vm_salt, host=EEVariables.ee_mysql_host,
password=vm_passwd)
password=vm_passwd,
php_user=EEVariables.ee_php_user)
Log.debug(self, 'Writting the ViMbAdmin configuration to '
'file {0}22222/htdocs/vimbadmin/application/'
'configs/application.ini'
@ -989,7 +1013,7 @@ class EEStackController(CementBaseController):
static=False,
basic=True, wp=False, w3tc=False, wpfc=False,
wpsc=False, multisite=False, wpsubdir=False,
webroot='/var/www', ee_db_name='',
webroot=EEVariables.ee_webroot, ee_db_name='',
ee_db_user='', ee_db_pass='', ee_db_host='',
rc=True)
@ -1154,7 +1178,15 @@ class EEStackController(CementBaseController):
"Adminer"]]
if self.app.pargs.mailscanner:
apt_packages = (apt_packages + EEVariables.ee_mailscanner)
if not EEAptGet.is_installed(self, 'amavisd-new'):
if (EEAptGet.is_installed(self, 'dovecot-core') or
self.app.pargs.mail):
apt_packages = (apt_packages +
EEVariables.ee_mailscanner)
else:
Log.error(self, "Failed to find installed Dovecot")
else:
Log.error(self, "Mail scanner allready installed")
if self.app.pargs.utils:
Log.debug(self, "Setting packages variable for utils")
@ -1238,7 +1270,8 @@ class EEStackController(CementBaseController):
(not self.app.pargs.php) and (not self.app.pargs.mysql) and
(not self.app.pargs.postfix) and (not self.app.pargs.wpcli) and
(not self.app.pargs.phpmyadmin) and
(not self.app.pargs.adminer) and (not self.app.pargs.utils)):
(not self.app.pargs.adminer) and (not self.app.pargs.utils) and
(not self.app.pargs.mailscanner)):
self.app.pargs.web = True
if self.app.pargs.web:
@ -1326,7 +1359,8 @@ class EEStackController(CementBaseController):
(not self.app.pargs.php) and (not self.app.pargs.mysql) and
(not self.app.pargs.postfix) and (not self.app.pargs.wpcli) and
(not self.app.pargs.phpmyadmin) and
(not self.app.pargs.adminer) and (not self.app.pargs.utils)):
(not self.app.pargs.adminer) and (not self.app.pargs.utils) and
(not self.app.pargs.mailscanner)):
self.app.pargs.web = True
if self.app.pargs.web:

12
ee/cli/templates/22222.mustache

@ -7,13 +7,13 @@ server {
access_log /var/log/nginx/22222.access.log rt_cache;
error_log /var/log/nginx/22222.error.log;
ssl_certificate /var/www/22222/cert/22222.crt;
ssl_certificate_key /var/www/22222/cert/22222.key;
ssl_certificate {{webroot}}22222/cert/22222.crt;
ssl_certificate_key {{webroot}}22222/cert/22222.key;
# Force HTTP to HTTPS
error_page 497 =200 https://$host:22222$request_uri;
root /var/www/22222/htdocs;
root {{webroot}}22222/htdocs;
index index.php index.htm index.html;
# Turn on directory listing
@ -45,16 +45,16 @@ server {
}
location ~* \.(js|css|jpg|gif|png)$ {
root /var/www/22222/htdocs/;
root {{webroot}}22222/htdocs/;
}
location ~* /vimbadmin/public/(.*)/(.*) {
root /var/www/22222/htdocs/vimbadmin/public;
root {{webroot}}22222/htdocs/vimbadmin/public;
try_files $uri $uri/ /vimbadmin/public/index.php?$args;
}
location ~* /vimbadmin/public/(.*) {
root /var/www/22222/htdocs/vimbadmin/public;
root {{webroot}}22222/htdocs/vimbadmin/public;
try_files $uri $uri/ /vimbadmin/public/index.php?$args;
}

4
ee/cli/templates/anemometer.mustache

@ -125,8 +125,8 @@ $conf['plugins'] = array(
$conn['db'] = $sample['db_max'];
}
$conn['user'] = 'root';
$conn['password'] = '';
$conn['user'] = '{{user}}';
$conn['password'] = '{{password}}';
return $conn;
},

4
ee/cli/templates/vimbadmin.mustache

@ -628,8 +628,8 @@ resources.session.remember_me_seconds = 3600
resources.session.name = 'VIMBADMIN3'
ondemand_resources.logger.writers.stream.path = APPLICATION_PATH "/../var/log"
ondemand_resources.logger.writers.stream.owner = www-data
ondemand_resources.logger.writers.stream.group = www-data
ondemand_resources.logger.writers.stream.owner = {{php_user}}
ondemand_resources.logger.writers.stream.group = {{php_user}}
ondemand_resources.logger.writers.stream.mode = single
ondemand_resources.logger.writers.stream.logname = vimbadmin.log

53
ee/core/aptget.py

@ -64,19 +64,6 @@ class EEAptGet():
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
try:
#apt_pkg.PkgSystemUnLock()
result = apt_cache.commit()
#apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
Log.error(self, 'SystemError: ' + str(e))
#apt_cache.close()
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
else:
#apt_cache.close()
Log.error(self, 'Unknown package selected (' +
@ -86,6 +73,20 @@ class EEAptGet():
if not install_package(self, package):
continue
if apt_cache.install_count > 0:
try:
#apt_pkg.PkgSystemUnLock()
result = apt_cache.commit()
#apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
Log.error(self, 'SystemError: ' + str(e))
#apt_cache.close()
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
def remove(self, packages, auto=False, purge=False):
"""
Similar to `apt-get remove/purge`
@ -112,18 +113,6 @@ class EEAptGet():
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
return False
try:
# apt_pkg.PkgSystemUnLock()
result = apt_cache.commit()
# apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
return False
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
# apt_cache.close()
else:
# apt_cache.close()
Log.error(self, 'Unknown package selected (' +
@ -133,6 +122,20 @@ class EEAptGet():
if not remove_package(self, package, purge=purge):
continue
if apt_cache.delete_count > 0:
try:
# apt_pkg.PkgSystemUnLock()
result = apt_cache.commit()
# apt_cache.close()
return result
except SystemError as e:
Log.debug(self, 'SystemError: ' + str(e))
return False
except Exception as e:
Log.debug(self, str(e))
Log.error(self, str(e))
# apt_cache.close()
def auto_clean(self):
"""
Similar to `apt-get autoclean`

1
ee/core/mysql.py

@ -43,6 +43,7 @@ class EEMysql():
.format(e))
try:
Log.debug(self, "Executing MySQL statement: {0}".format(statement))
cur.execute(statement)
except Exception as e:
cur.close()

2
ee/core/variables.py

@ -92,7 +92,7 @@ class EEVariables():
# MySQL repo and packages
ee_mysql_repo = ("deb http://repo.percona.com/apt {codename} main"
.format(codename=ee_platform_codename))
ee_mysql = ["percona-server-server-5.6"]
ee_mysql = ["percona-server-server-5.6", "mysqltuner", "percona-toolkit"]
# Postfix repo and packages
ee_postfix_repo = ""

2
install

@ -222,7 +222,7 @@ if [ ! -f /usr/local/sbin/easyengine ]; then
install_ee3
git_init
else
ee_lib_echo_fail "EasyEngine 3 allready installed on ur system"
ee_lib_echo_fail "EasyEngine 3 allready installed on your system"
exit 1
fi
else

7
setup.py

@ -4,6 +4,7 @@ import sys
import os
import glob
import configparser
import re
conf = []
templates = []
@ -39,6 +40,12 @@ except Exception as e:
ee_user = input("Enter your name: ")
ee_email = input("Enter your email: ")
while not re.match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$",
ee_email):
print("EMail not Valid, Please enter again")
ee_email = input("Enter your email: ")
os.system("git config --global user.name {0}".format(ee_user))
os.system("git config --global user.email {0}".format(ee_email))

Loading…
Cancel
Save