code: def run_server(dbpath=os.path.expanduser(config.dbserver.file),
                 dbhostport=None, loglevel='WARN'):
      
      if dbhostport:  # assume a string of the form "dbhost:port"
          dbhost, port = dbhostport.split(':')
          addr = (dbhost, int(port))
      else:
          addr = (config.dbserver.listen, DBSERVER_PORT)
  
      # create the db directory if needed
      dirname = os.path.dirname(dbpath)
      if not os.path.exists(dirname):
          os.makedirs(dirname)
  
      # create and upgrade the db if needed
      db('PRAGMA foreign_keys = ON')  # honor ON DELETE CASCADE
      actions.upgrade_db(db)
      # the line below is needed to work around a very subtle bug of sqlite;
      # we need new connections, see https://github.com/gem/oq-engine/pull/3002
      db.close()
  
      # reset any computation left in the 'executing' state
      actions.reset_is_running(db)
  
      # configure logging and start the server
      logging.basicConfig(level=getattr(logging, loglevel))
      DbServer(db, addr).start()
docs: Run the DbServer on the given database file and port. If not given,
      use the settings in openquake.cfg.