docs: def create():
      """
      Creates the environment needed to host the project.
      The environment consists of: system locales, virtualenv, database, project
      files, SSL certificate, and project-specific Python requirements.
      """
      # Generate project locale
      locale = env.locale.replace("UTF-8", "utf8")
      with hide("stdout"):
          if locale not in run("locale -a"):
              sudo("locale-gen %s" % env.locale)
              sudo("update-locale %s" % env.locale)
              sudo("service postgresql restart")
              run("exit")
  
      # Create project path
      run("mkdir -p %s" % env.proj_path)
  
      # Set up virtual env
      run("mkdir -p %s" % env.venv_home)
      with cd(env.venv_home):
          if exists(env.proj_name):
              if confirm("Virtualenv already exists in host server: %s"
                         "\nWould you like to replace it?" % env.proj_name):
                  run("rm -rf %s" % env.proj_name)
              else:
                  abort()
          run("virtualenv %s" % env.proj_name)
  
      # Upload project files
      if env.deploy_tool in env.vcs_tools:
          vcs_upload()
      else:
          rsync_upload()
  
      # Create DB and DB user
      pw = db_pass()
      user_sql_args = (env.proj_name, pw.replace("'", "\'"))
      user_sql = "CREATE USER %s WITH ENCRYPTED PASSWORD '%s';" % user_sql_args
      psql(user_sql, show=False)
      shadowed = "*" * len(pw)
      print_command(user_sql.replace("'%s'" % pw, "'%s'" % shadowed))
      psql("CREATE DATABASE %s WITH OWNER %s ENCODING = 'UTF8' "
           "LC_CTYPE = '%s' LC_COLLATE = '%s' TEMPLATE template0;" %
           (env.proj_name, env.proj_name, env.locale, env.locale))
  
      # Set up SSL certificate
      if not env.ssl_disabled:
          conf_path = "/etc/nginx/conf"
          if not exists(conf_path):
              sudo("mkdir %s" % conf_path)
          with cd(conf_path):
              crt_file = env.proj_name + ".crt"
              key_file = env.proj_name + ".key"
              if not exists(crt_file) and not exists(key_file):
                  try:
                      crt_local, = glob(join("deploy", "*.crt"))
                      key_local, = glob(join("deploy", "*.key"))
                  except ValueError:
                      parts = (crt_file, key_file, env.domains[0])
                      sudo("openssl req -new -x509 -nodes -out %s -keyout %s "
                           "-subj '/CN=%s' -days 3650" % parts)
                  else:
                      upload_template(crt_local, crt_file, use_sudo=True)
                      upload_template(key_local, key_file, use_sudo=True)
  
      # Install project-specific requirements
      upload_template_and_reload("settings")
      with project():
          if env.reqs_path:
              pip("-r %s/%s" % (env.proj_path, env.reqs_path))
          pip("gunicorn setproctitle psycopg2 "
              "django-compressor python-memcached")
      # Bootstrap the DB
          manage("createdb --noinput --nodata")
          python("from django.conf import settings;"
                 "from django.contrib.sites.models import Site;"
                 "Site.objects.filter(id=settings.SITE_ID).update(domain='%s');"
                 % env.domains[0])
          for domain in env.domains:
              python("from django.contrib.sites.models import Site;"
                     "Site.objects.get_or_create(domain='%s');" % domain)
          if env.admin_pass:
              pw = env.admin_pass
              user_py = ("from django.contrib.auth import get_user_model;"
                         "User = get_user_model();"
                         "u, _ = User.objects.get_or_create(username='admin');"
                         "u.is_staff = u.is_superuser = True;"
                         "u.set_password('%s');"
                         "u.save();" % pw)
              python(user_py, show=False)
              shadowed = "*" * len(pw)
              print_command(user_py.replace("'%s'" % pw, "'%s'" % shadowed))
  
      return True