I think it is possible by using a web3 provider that runs on the mainnet. I think that infura (i.e. the same company of metamask) can be used to perform what you ask.
Essentially you need this piece of code (taken from [this github link][1]):

    const Web3 = require('web3')

    // connect to Infura node
    const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/INFURA_KEY'))

Then you can actually send transactions (and therefore deploy contracts) as if you were running a geth instance locally, by following the common procedures. You need an infura key that can be obtained [on this link][2].

You will need node and the web3 node package (`npm install web3`), but this approach does not require neither a graphical user interface nor a synced geth instance on your raspberry.


  [1]: https://gist.github.com/raineorshine/c8b30db96d7532e15f85fcfe72ac719c
  [2]: https://infura.io/signup