https://en.wikipedia.org/wiki/InterPlanetary_File_System Expirimenting with and , in the process of setting up, I wanted to open a public node of IPFS in order to upload files to IPFS from anywhere, by anyone — through . Ethereum IPFS https://cryptoblox.co CryptoBLOX Using , I was able to open an IPFS node to the public, however, I stumbled upon a problem : ipfs-api doesn’t support currently — despite using the format. Perhaps it is planned in the future, but as of right now it is not supported. js-ipfs HTTPS multiaddr Obviously, you’re to mix HTTP and HTTPS on the same site (mixed content blocking). unable Therefore I had to setup to serve as a to the I was running. NGINX reverse proxy jsipfs daemon Installing and setting up the JS-IPFS Daemon https://github.com/ipfs/js-ipfs First, I installed : IPFS npm install ipfs --global I decided to use it from the , therefore I ran the following commands (from js-ipfs-api docs, edited) : CLI # Show the ipfs config API port to check it is correct> jsipfs config Addresses.API/ip4/127.0.0.1/tcp/5001# Set it if it does not match the above output> jsipfs config Addresses.API /ip4/ /tcp/5001# Restart the daemon after changing the config 127.0.0.1 # Run the daemon> jsipfs daemon At my Node.JS server (that ran ) I set it up regularly : locally var ipfs = ipfsAPI('localhost', '5001', {protocol: 'http'}) In addition to that, I wanted to run it as a legit — restart after reboot, restart after a crash, etc. daemon Using I was able to achieve the following : systemctl vim /lib/systemd/system/jsipfs.service And paste the following : [Unit]Description=JSIPFS Daemon Client[Service]ExecStart=/root/.nvm/versions/node/v8.9.1/bin/node /root/.nvm/versions/node/v8.9.1/bin/jsipfs daemonRestart=alwaysRestartSec=30Type=simpleUser=rootGroup=root[Install]WantedBy=multi-user.target Note that the service config files require full paths to executables. Now run : systemctl daemon-reload systemctl start jsipfs # To see the last lines written to stdout / stderr by the processjournalctl -u jsipfs -n50 Setting up nginx as a reverse proxy https://nginx.com In my example, I used in order to get an certificate, which I found to be super useful, super comfortable, and set up in a matter of minutes. Let’s Encrypt SSL Simply running : sudo certbot --nginx -d cryptoblox.co Set SSL up on nginx, along with adding a from HTTP to HTTPS, no more actions required. redirect Proceeding to edit the nginx ( ) — adding the following snippet after the original server initialization : config /etc/nginx/sites-available/default server {listen [::]:5002 ssl ipv6only=on; # managed by Certbotlisten 5002 ssl; # managed by Certbotssl_certificate /etc/letsencrypt/live/cryptoblox.co/fullchain.pem; # managed by Certbotssl_certificate_key /etc/letsencrypt/live/cryptoblox.co/privkey.pem; # managed by Certbotinclude /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbotssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbotserver_name cryptoblox.co; location / {proxy_pass ;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}} http://localhost:5001 Now simply restart and you’re good to go ! nginx Communicating with the public IPFS node https://github.com/ipfs/js-ipfs-api At the , after requiring , I simply initialized it using : client side js-ipfs-api var ipfsApi = ipfsAPI('cryptoblox.co', '5002', {protocol : "https"}) Or, if you’re requiring it from their CDN : var ipfsApi = window.IpfsApi('cryptoblox.co', '5002', {protocol : "https"}) And then, a simple function that accepts a and adds it to : blob IPFS async function saveToIPFSToBytes32(blob) {var fileReader = await loadFileReader(blob);var buff = Buffer.from(fileReader.result);var result = await ipfsApi.add(buff, { progress: (prog) => {} });return ipfsHashToBytes32(result[0].hash);} Note that the files are saved on your node up until someone else them, therefore right after uploading them, we a request to gateway with the files hashes. locally requests dispatched https://ipfs.io global And that’s about it, now you’re able to communicate with your IPFS node over . public HTTPS Hope it helps anyone out there who aims at making the internet more decentralized 👼