Generally the application that you are trying to deploy should be hosted somewhere that is accessible from the node. You want it to be someplace that is consistent and reliable, as every time you run chef it is going to want to ensure the resource you are deploying is it the desired state. There are many ways this can be achieved depending on the type of application it is. Examples include putting it in a git repository, a package manager (apt/yum), an artifact server or even as simple as a zip on http server or amazon s3.
A common approach for git would be to use the deploy resource built into chef
deploy 'private_repo' do
repo 'git@github.com:acctname/private-repo.git'
deploy_to '/tmp/private_code'
action :deploy
end
Another common approach is the ark cookbook which can easily manage tar/zipped resources or even the artifact cookbook which can deploy artifacts from nexus or s3.