def install_mysql(choice="all"): """ Installs a local instance of MySQL of the web instance. This will only work if the number of web instances is one. choice: Indicates which assets to create/install: 'mysql' -> just install MySQL; don't create the databases 'site_db' -> just create the site database 'bundles_db' -> just create the bundle service database 'all' or '' -> install all three """ require("configuration") if len(env.roledefs["web"]) != 1: raise Exception("Task install_mysql requires exactly one web instance.") if choice == "mysql": choices = {"mysql"} elif choice == "site_db": choices = {"site_db"} elif choice == "bundles_db": choices = {"bundles_db"} elif choice == "all": choices = {"mysql", "site_db", "bundles_db"} else: raise ValueError("Invalid choice: %s. Valid choices are: 'build', 'web' or 'all'." % (choice)) configuration = DeploymentConfig(env.cfg_label, env.cfg_path) dba_password = configuration.getDatabaseAdminPassword() if "mysql" in choices: sudo("DEBIAN_FRONTEND=noninteractive apt-get -q -y install mysql-server") sudo("mysqladmin -u root password {0}".format(dba_password)) if "site_db" in choices: db_name = configuration.getDatabaseName() db_user = configuration.getDatabaseUser() db_password = configuration.getDatabasePassword() cmds = [ "create database {0};".format(db_name), "create user '{0}'@'localhost' IDENTIFIED BY '{1}';".format(db_user, db_password), "GRANT ALL PRIVILEGES ON {0}.* TO '{1}'@'localhost' WITH GRANT OPTION;".format(db_name, db_user), ] run('mysql --user=root --password={0} --execute="{1}"'.format(dba_password, " ".join(cmds))) if "bundles_db" in choices: db_name = configuration.getBundleServiceDatabaseName() db_user = configuration.getBundleServiceDatabaseUser() db_password = configuration.getBundleServiceDatabasePassword() cmds = [ "create database {0};".format(db_name), "create user '{0}'@'localhost' IDENTIFIED BY '{1}';".format(db_user, db_password), "GRANT ALL PRIVILEGES ON {0}.* TO '{1}'@'localhost' WITH GRANT OPTION;".format(db_name, db_user), ] run('mysql --user=root --password={0} --execute="{1}"'.format(dba_password, " ".join(cmds)))
def _deploy(): # Update website env_prefix, env_shell = setup_env() with env_prefix, env_shell, cd(env.deploy_codalab_dir): run('git checkout %s' % env.git_codalab_tag) run('git pull') run('./dev_setup.sh') # Update bundle service with cd(env.deploy_codalab_cli_dir): run('git checkout %s' % env.git_codalab_cli_tag) run('git pull') run('./setup.sh') run('venv/bin/pip install MySQL-Python') run('venv/bin/alembic upgrade head') # Create local.py cfg = DeploymentConfig(env.cfg_label, env.cfg_path) dep = Deployment(cfg) buf = StringIO() buf.write(dep.getSettingsFileContent()) settings_file = os.path.join(env.deploy_codalab_dir, 'codalab', 'codalab', 'settings', 'local.py') put(buf, settings_file) # Update the website configuration env_prefix, env_shell = setup_env() with env_prefix, env_shell, cd(env.deploy_codalab_dir), cd('codalab'): # Generate configuration files (bundle_server_config, nginx, etc.) run('python manage.py config_gen') # Migrate database run('python manage.py syncdb --migrate') # Create static pages run('python manage.py collectstatic --noinput') # For sending email, have the right domain name. run('python manage.py set_site %s' % cfg.getSslRewriteHosts()[0]) # Create a superuser for OAuth run('python manage.py create_codalab_user %s' % cfg.getDatabaseAdminPassword()) # Allow bundle service to connect to website for OAuth run('mkdir -p ~/.codalab && python manage.py set_oauth_key ./config/generated/bundle_server_config.json > ~/.codalab/config.json') # Put nginx and supervisor configuration files in place sudo('ln -sf `pwd`/config/generated/nginx.conf /etc/nginx/sites-enabled/codalab.conf') sudo('ln -sf `pwd`/config/generated/supervisor.conf /etc/supervisor/conf.d/codalab.conf') # Setup new relic run('newrelic-admin generate-config %s newrelic.ini' % cfg.getNewRelicKey()) # Install SSL certficates (/etc/ssl/certs/) require('configuration') if (len(cfg.getSslCertificateInstalledPath()) > 0) and (len(cfg.getSslCertificateKeyInstalledPath()) > 0): put(cfg.getSslCertificatePath(), cfg.getSslCertificateInstalledPath(), use_sudo=True) put(cfg.getSslCertificateKeyPath(), cfg.getSslCertificateKeyInstalledPath(), use_sudo=True) else: logger.info("Skipping certificate installation because both files are not specified.")
def _deploy(): # Update website env_prefix, env_shell = setup_env() with env_prefix, env_shell, cd(env.deploy_codalab_dir): run('git pull') run('git checkout %s' % env.git_codalab_tag) run('./dev_setup.sh') # Update bundle service with cd(env.deploy_codalab_cli_dir): run('git pull') run('git checkout %s' % env.git_codalab_cli_tag) run('./setup.sh') run('venv/bin/pip install MySQL-Python') run('venv/bin/alembic upgrade head') # Create local.py cfg = DeploymentConfig(env.cfg_label, env.cfg_path) dep = Deployment(cfg) buf = StringIO() buf.write(dep.getSettingsFileContent()) settings_file = os.path.join(env.deploy_codalab_dir, 'codalab', 'codalab', 'settings', 'local.py') put(buf, settings_file) # Update the website configuration env_prefix, env_shell = setup_env() with env_prefix, env_shell, cd(env.deploy_codalab_dir), cd('codalab'): # Generate configuration files (bundle_server_config, nginx, etc.) run('python manage.py config_gen') # Migrate database run('python manage.py syncdb --migrate') # Create static pages run('python manage.py collectstatic --noinput') # For sending email, have the right domain name. run('python manage.py set_site %s' % cfg.getSslRewriteHosts()[0]) # Create a superuser for OAuth run('python manage.py create_codalab_user %s' % cfg.getDatabaseAdminPassword()) # Allow bundle service to connect to website for OAuth run('mkdir -p ~/.codalab && python manage.py set_oauth_key ./config/generated/bundle_server_config.json > ~/.codalab/config.json') # Put nginx and supervisor configuration files in place sudo('ln -sf `pwd`/config/generated/nginx.conf /etc/nginx/sites-enabled/codalab.conf') sudo('ln -sf `pwd`/config/generated/supervisor.conf /etc/supervisor/conf.d/codalab.conf') # Setup new relic run('newrelic-admin generate-config %s newrelic.ini' % cfg.getNewRelicKey()) # Install SSL certficates (/etc/ssl/certs/) require('configuration') if (len(cfg.getSslCertificateInstalledPath()) > 0) and (len(cfg.getSslCertificateKeyInstalledPath()) > 0): put(cfg.getSslCertificatePath(), cfg.getSslCertificateInstalledPath(), use_sudo=True) put(cfg.getSslCertificateKeyPath(), cfg.getSslCertificateKeyInstalledPath(), use_sudo=True) else: logger.info("Skipping certificate installation because both files are not specified.")
def install_mysql(choice='all'): """ Installs a local instance of MySQL of the web instance. This will only work if the number of web instances is one. choice: Indicates which assets to create/install: 'mysql' -> just install MySQL; don't create the databases 'website_db' -> just create the website database 'bundles_db' -> just create the bundle service database 'all' or '' -> install everything """ require('configuration') if len(env.roledefs['web']) != 1: raise Exception("Task install_mysql requires exactly one web instance.") if choice == 'mysql': choices = {'mysql'} elif choice == 'website_db': choices = {'website_db'} elif choice == 'bundles_db': choices = {'bundles_db'} elif choice == 'all': choices = {'mysql', 'website_db', 'bundles_db'} else: raise ValueError("Invalid choice: %s. Valid choices are: 'build', 'web' or 'all'." % (choice)) configuration = DeploymentConfig(env.cfg_label, env.cfg_path) dba_password = configuration.getDatabaseAdminPassword() if 'mysql' in choices: sudo('DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server') sudo('mysqladmin -u root password {0}'.format(dba_password)) if 'website_db' in choices: db_name = configuration.getDatabaseName() db_user = configuration.getDatabaseUser() db_password = configuration.getDatabasePassword() cmds = ["create database {0};".format(db_name), "create user '{0}'@'localhost' IDENTIFIED BY '{1}';".format(db_user, db_password), "GRANT ALL PRIVILEGES ON {0}.* TO '{1}'@'localhost' WITH GRANT OPTION;".format(db_name, db_user)] run('mysql --user=root --password={0} --execute="{1}"'.format(dba_password, " ".join(cmds))) if 'bundles_db' in choices: db_name = configuration.getBundleServiceDatabaseName() db_user = configuration.getBundleServiceDatabaseUser() db_password = configuration.getBundleServiceDatabasePassword() cmds = ["create database {0};".format(db_name), "create user '{0}'@'localhost' IDENTIFIED BY '{1}';".format(db_user, db_password), "GRANT ALL PRIVILEGES ON {0}.* TO '{1}'@'localhost' WITH GRANT OPTION;".format(db_name, db_user)] run('mysql --user=root --password={0} --execute="{1}"'.format(dba_password, " ".join(cmds)))
def install_mysql(): """ Installs a local instance of MySQL of the web instance. This will only work if the number of web instances is one. """ require('configuration') if len(env.roledefs['web']) <> 1: raise(Exception("Task install_mysql requires exactly one web instance.")) configuration = DeploymentConfig(env.cfg_label, env.cfg_path) dba_password = configuration.getDatabaseAdminPassword() db_name = configuration.getDatabaseName() db_user = configuration.getDatabaseUser() db_password = configuration.getDatabasePassword() sudo('DEBIAN_FRONTEND=noninteractive apt-get -q -y install mysql-server') sudo('mysqladmin -u root password {0}'.format(dba_password)) cmds = ["create database {0};".format(db_name), "create user '{0}'@'localhost' IDENTIFIED BY '{1}';".format(db_user, db_password), "GRANT ALL PRIVILEGES ON {0}.* TO '{1}'@'localhost' WITH GRANT OPTION;".format(db_name, db_user) ] run('mysql --user=root --password={0} --execute="{1}"'.format(dba_password, " ".join(cmds)))