Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Fixie Socks (Heroku add-on) to connect to mongodb via mongoose

I have a node.js express api which I host on heroku. It connects to mongodb atlas via mongoose as follows

mongoose.connect(
`mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PWD}@${process.env.MONGO_HOST}/${process.env.MONGO_DEFAULT_DB}?retryWrites=true`, {
  useNewUrlParser: true,
  autoReconnect: true,
  keepAlive: 300000,
  connectTimeoutMS: 300000,
  socketTimeoutMS: 300000
}
)
.then(result => {
  console.log('Connected and listening to requests!');
  app.listen(process.env.PORT || 3000);
.catch(err => console.log(err));

I want to use Atlas MongoDB Cloud's whitelist for the Heroku app, instead of opening access up to all. Heroku doesn't have fixed a IP address but makes them possible via an add-on called Fixie Socks, which acts as a proxy for outbound traffic.

How can I use this add-on to get the connection to work? The documentation gives several examples on how to connect to other services and databases, but there is no help on mongodb. All examples use the FIXIE_SOCKS_HOST which contains the SOCKSV5 proxy URL, user, pass and port, but I'm at a loss on how to use it in conjunction with the mongoose.connect method.

This question has been asked before, but when a different add-on was used (Fixie vs Fixie Socks), which didn't work.

like image 932
matrix4use Avatar asked Apr 22 '20 23:04

matrix4use


People also ask

How do we connect Mongoose to our MongoDB database?

You can connect to MongoDB with the mongoose.connect() method. mongoose.connect('mongodb://localhost:27017/myapp'); This is the minimum needed to connect the myapp database running locally on the default port (27017). If connecting fails on your machine, try using 127.0.0.1 instead of localhost .

Can I use MongoDB and Mongoose together?

Connecting to MongoDBMongoose requires a connection to a MongoDB database. You can require() and connect to a locally hosted database with mongoose. connect() , as shown below. You can get the default Connection object with mongoose.


1 Answers

I tried Fixie Socks but couldn't get it to work. But managed to successfully connect to Mongodb Atlas database with Quota Guard's static IP addresses following this documentation:

https://support.quotaguard.com/support/solutions/articles/12000066411-how-to-connect-to-mongodb-using-quotaguard

The trick is to use the use mongodb atlas' connection string without +srv command. To do that use an older driver version and it will provide you a connection string with 3 replica servers (each with 27017 port). Then create 3 tunnels at the Quota Guard dashboard.

Make sure you download the gqtunnel package and extract it your app's root folder. Then you just have to add the bin/qgtunnel to your procfile.

Example: web: bin/qgtunnel your-application your arguments

like image 196
Ozgur Sar Avatar answered Oct 22 '22 18:10

Ozgur Sar