BROKER_URL in Redis Cloud in Heroku - heroku

Im working with Redis on Heroku, Im trying RedisToGo and Redis Cloud, I need to get the URL of the DB to put it in BROKER_URL in the settings of my django app. RedisToGo gives me clearly the URL in the dashboard, but Redis Cloud does not. Somebody knows how to get it?

When you add the addon, the REDISCLOUD_URL gets set in the config variables. You should use the environment accessors in your app to use the URL, e.g. in Python os.environ.get('REDISCLOUD_URL') and in Ruby ENV['REDISCLOUD_URL'].
If you just want to know what the URL is, you can see it on the "Settings" tab on Heroku Dashboard--click "Reveal Config Vars." Or you can use the CLI:
heroku config:get REDISCLOUD_URL -a YourAppName

Related

Heroku CLI gives "No Redis instances found" yet I have a redis cloud addon running and usable

I'm learning redis and have it working from a java app. I'm trying to use the heroku redis:cli -a myAppName command to connect with it directly but it says "No Redis instances found".
When I do heroku apps it lists myAppName so I know it's valid.
heroku redis:info -a myAppName doesn't return anything.
The heroku docs don't seem to be accurate as they all leave out the -a flag which the cli tells me is required. Outside of that I don't know what I've missed.
You are looking at documentation for Heroku Redis, a hosted Redis service that Heroku itself provides. If you wish to use Heroku Redis, you can provision it for your app using like so:
heroku addons:create heroku-redis:hobby-dev -a your-app-name
Pricing for Heroku Redis can be found here. The Hobby Dev plan used in the previous command is free.
There are also other Redis providers that can be provisioned this way, including Redis Enterprise Cloud. Or you can use existing hosted Redis server. But with these options you won't be able to interact with the service using heroku redis commands. Use whatever tooling those providers offer.

How to Provision APIs on Heroku

Please forgive my question. I am a complete newbie at this.
I have built an API in spring boot and I have pushed it to heroku.
I have a custom domain for my website already as www.mywebsite.com
I want to provision my apis under this domain as well as api.mywebsite.com
How can I achieve this on heroku?
Any help on how to go about this would be sincerely appreciated.
Thanks
I will assume that you have full access to the Namecheap account.
You have 2 options:
A. Use Heroku CLI
B. Use Heroku interface (Web application)
A) Let's go through the process with Heroku CLI.
Make sure that you have the Heroku CLI installed (macOS: brew install heroku, Ubuntu: apt install heroku, etc.)
Add your domain using the command heroku domains:add api.website.com (if you have multiple apps, don't forget at the end of the command to add --app name-of-your-heroku-app.
Heroku will generate for you a DNS target for the custom domain you added at step 2. Run heroku domains and copy the DNS target (The DNS target looks like this: whispering-willow-5678.herokudns.com)
Open your Namecheap domain settings and add a CNAME (Name: "api" and Target: the DNS target provided by Heroku).
Wait few minutes up to few hours.
B) If you want to use Heroku Interface / Webapplications.
Open your app on www.herokuapp.com
Go to "Settings" tab
Scroll down to "Domains"
Click on "Add domains"
Add your subdomain (api.website.com)
Heroku will generate for you a DNS Target
Navigate to your domain settings in Namecheap and create a new CNAME using your subdomain (e.g. api) as name and the DNS target provided by Heroku as target.
You can find all the details in Custom Domain Names for Apps Heroku Documentation

Is it possible to whitelist Heroku apps?

I have a Heroku application that binds with a telco sms gateway via SMPP
The telco guys need to whitelist IPs for my app to connect.
I am aware of the new addon proximo, but it's just insanely priced. So that option is out.
Is there a subnet or a list of IPs that I can get whitelisted and is there a guarantee that all requests from my app will originate from tose IPs?
I found this https://api.heroku.com/vendor/logplex/allowlist.
Is that only for syslog or all apps make a request from one of those IPs?
Thanks
There is now a Heroku add-on that does this called Proximo: https://addons.heroku.com/proximo
The Heroku docs specifically mention how dynos don't have static IP addresses. Even when using custom domains it looks like they want you to point to a CNAME record rather than an IP address. So if you need a static IP it looks like Proximo is your best bet.
Would it be possible to use an API token to authenticate your app with the sms gateway, similar to the way the blitz.ip plugin works with heroku? Then you might not need to use a static IP whitelist.
This question looks to be doing something similar to you, and this answer suggests using a hosted VPN service. Would that work?
Heroku now has Private Spaces which is what you are looking for:
https://www.heroku.com/private-spaces
Another Heroku addon option is Quotaguard , in beta, free for now.
Answering my own question. Even though an external VPN or the proximo addon are a solution in case you want to whitelist a Heroku app, I have decided to go for the simpler option and host the SMPP binding service of my app on ec2 using an Elastic IP
You can host a proxy yourself using Dockhero Heroku add-on - https://dockhero.io/ - which has a static IP (AWS elastic IP).
Install the add-on and the CLI plugin:
$ heroku addons:create dockhero
$ heroku plugins:install dockhero
Wait until the provisioning is done and get DOCKHERO_HOST environment variable
$ heroku dh:wait
$ heroku config:get DOCKHERO_HOST
--> e.g. dockhero-spherical-42047.dockhero.io
Create dockhero-compose.yml file with the following contents:
version: "2"
services:
proxy:
image: tecnativa/tcp-proxy
environment:
LISTEN: ":80"
TALK: "www.wikipedia.org:80"
ports:
- "80:80"
Here www.wikipedia.org:80 is the server which you build a proxy for.
Find more about the syntax in https://docs.docker.com/compose/compose-file/compose-file-v2/
Run this stack in the cloud using Dockhero CLI:
$ heroku dh:compose up -d
Any requests to the host from DOCKHERO_HOST Heroku config var will now be proxied according to your dockhero-compose.yml
$ curl http://dockhero-spherical-42047.dockhero.io/
--> <response from www.wikipedia.org>
IMPORTANT: as of writing this, dockhero.io is in Beta and available for free. When switching to production, the assigned IP may be changed after a prior notification.
Fixie is another alternative add-on not mentioned here. Free plan with 500 requests per month. Requires some adjustments in code and heroku app to be in us region (or you can migrate it: Migrating an Application to Another Region). Worked for me.

How to discover the *external* hostname from within a heroku cedar application

I am deploying a RubyOnRails 3.1 app to heroku cedar stack. From within the app I would like to auto discover the host name (i.e. appname.herokuapp.com). I have multiple deployments of the same app on heroku - some for development, some for staging and some for production. It would be nice to be able to check an environment variable or make some call to find out my app host name from within the app.
does
request.host
give you want you want?

How to use your own mysql database server with heroku?

I want to use mysql database which is hosted on my own server.
I've changed DATABASE_URL and SHARED_DATABASE_URL config vars to point to my server, but it's still trying to connect to heroku's amazonaws servers. How do I fix that?
According to the Heroku documentation, changing DATABASE_URL is the correct way to go.
If you would like to have your rails application connect to a non-Heroku provided database, you can take advantage of this same mechanism. Simply set your DATABASE_URL config var to point to any cloud-accessible database, and Heroku will automatically create your database.yml file to point to your chosen server. The Amazon RDS Add-on does this for you automatically, though you can also use this same method to connect to non-RDS databases as well.
Here's an example that should work:
heroku config:add DATABASE_URL=mysql://user:password#host/db
You may need to redeploy by making a change and running git push heroku master
By the way, the host is XXXX.amazonaws.com, where XXX is a long host hame that probably changes. If you can add a wildcard, that's the easiest %.amazonaws.com
I had this exact same problem with my Dreamhost MySQL database. Turns out the solution was to tell Dreamhost is was Ok to accept connections from this foreign host. Otherwise, Dreamhost blocks all requests to MySQL that don't originate from their systems.
It seems that if Heroku is falling back to Amazon AWS despite your DATABASE_URL, it's because it's being denied access to your MySQL database.

Resources