To run Rails with MongoDB on a VPS, install MongoDB from its official Ubuntu repository, keep mongod private, enable authentication and role-based access, then configure Rails through Mongoid. A deployment is not finished when the daemon is merely running: verify systemd, permissions, authentication, and a real Rails read/write request.
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
What the finished setup looks like
The VPS runs two separate services. MongoDB stores the application data, while Rails connects to it through the Mongoid ODM (object-document mapper). In the simplest arrangement, both services run on the same machine:
As an Amazon Associate I earn from qualifying purchases.
| Component | Role | Typical private endpoint |
|---|---|---|
| MongoDB | Database server and mongod systemd service |
localhost:27017 |
| Mongoid | Loads the Rails database configuration and creates the client connection | Configured in config/mongoid.yml |
| Rails | Application process making authenticated reads and writes | Local socket or VPS network interface |
MongoDB binaries bind to localhost by default. That default is useful when Rails and MongoDB share a VPS: the database does not need a public listener at all. If you later place Rails on a separate host, use a private interface or private network and restrict the listener to trusted addresses rather than opening MongoDB to the internet.
Choose the VPS and Ubuntu release first
Pick an Ubuntu LTS release that the MongoDB version you intend to install explicitly supports. MongoDB’s repository packages are tied to supported Ubuntu releases; using an unsupported combination can leave you without compatible packages or security updates. Record the Ubuntu release and MongoDB major version before installing anything so upgrades remain deliberate.
#1 Best Overall
- A sudo-capable administrative account for the VPS.
- Enough disk space for the database, indexes, logs, and future backups.
- A firewall or cloud network policy that does not expose port 27017 publicly.
- A Rails application that can use Mongoid and an environment-specific secret-management method.
Update the operating system before adding the database repository:
sudo apt update
sudo apt upgrade
Reboot if the operating system requests it, then reconnect and confirm that the VPS is running the LTS release supported by your selected MongoDB packages.
Recommended Free Tools
Install MongoDB from the official Ubuntu repository
Use MongoDB’s official Ubuntu installation documentation for the repository entry that matches your Ubuntu LTS release and chosen MongoDB major version. Do not mix packages from unrelated Ubuntu releases or an unofficial repository. The official procedure supplies the signing-key, repository, and package commands for the supported combination.
- Check the VPS Ubuntu release and architecture.
- Follow the official MongoDB repository instructions for that release and major version.
- Refresh APT metadata after adding the repository.
- Install the MongoDB server packages specified by that guide.
The Ubuntu package normally installs the mongod service, its configuration, log location, and the default data directory. On Ubuntu, the default database path is /var/lib/mongodb. Do not change ownership casually: files in that directory must remain accessible to the operating-system account used by the MongoDB service.
After installation, inspect the unit name and package status before changing configuration. A package upgrade can replace configuration defaults, so keep a record of intentional changes in /etc/mongod.conf.
Start, verify, and persist the mongod service
Use systemd for every lifecycle operation. Run these commands on the VPS:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #2
sudo systemctl start mongod
systemctl status mongod
sudo systemctl enable mongod
sudo journalctl -u mongod
start launches MongoDB now; status shows whether it is active and includes recent failure information; enable makes it start automatically after a reboot; and journalctl displays the service log. A healthy status should show an active running service rather than a process that exits immediately.
If the service does not start, read the journal before editing files:
sudo journalctl -u mongod --no-pager -n 100
Typical causes are invalid YAML in /etc/mongod.conf, a port already in use, a missing data directory, or incorrect ownership under /var/lib/mongodb. Correct the underlying error, restart the service, and check status again.
Secure MongoDB before allowing any non-local connection
Never bind a new MongoDB instance to a public IP first and plan to secure it later. MongoDB’s hardening guidance requires access control and authentication, role-based users, and a dedicated operating-system account for the database process before public exposure.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsKeep the listener private
MongoDB binds to localhost by default. Leave that setting in place when Rails runs on the same VPS. If a separate application host must connect, bind only to the VPS’s private interface and restrict inbound traffic to the Rails host or private network. A public listener should be an exception, protected by authentication and network controls, not the normal deployment pattern.
After changing the network section in /etc/mongod.conf, restart and verify the service:
Rank #3
sudo systemctl restart mongod
systemctl status mongod
Use your VPS firewall and provider-level network rules to deny unsolicited internet traffic to MongoDB’s port. The Rails web port can remain public; the database port should not.
Enable authorization and create a least-privilege application user
Enable MongoDB access control in the configuration, then create separate identities for administration and for Rails. The Rails identity should receive only the roles needed on the Rails database, rather than an all-databases administrator role. Store credentials in your deployment secret manager or environment, never in Git.
A safe order is:
- Keep MongoDB reachable only from localhost or a private management path.
- Create an administrative user through the local MongoDB shell, following the version-specific authentication procedure in the MongoDB documentation.
- Enable authorization in
/etc/mongod.conf. - Restart
mongodand authenticate as the administrator. - Create a dedicated Rails user with read/write access to the application database only.
Use a distinct database name for each environment when practical. For example, development, test, and production should not accidentally share a database. After authorization is enabled, an unauthenticated shell connection should no longer be able to read application data.
Preserve service-account and filesystem permissions
The MongoDB process should run under its dedicated operating-system account, not under the root account and not under the Rails deployment user. If you move the data directory, copy the files with ownership and permissions intact, update the configuration, and verify that the service account can read and write the new path. A permission error in the journal is a configuration problem to fix, not a reason to make the directory world-writable.
Add Mongoid to the Rails application
Rails does not speak MongoDB through Active Record. Add Mongoid to the application and let it generate the baseline configuration:
Free tools Windows power users keep installed
One-click scans. No signup required.
bundle add mongoid
bin/rails g mongoid:config
The generator creates config/mongoid.yml and an initializer. Mongoid must be configured before any Mongoid component is used. Commit the non-secret structure of the YAML file, but inject production credentials at deploy time.
Understand the generated configuration
The basic configuration names an environment, a database, and a client. The simplest documented connection points at localhost:27017 and a database named myDB:
development:
clients:
default:
database: myDB
hosts:
- localhost:27017
options:
test:
clients:
default:
database: myDB_test
hosts:
- localhost:27017
options:
production:
clients:
default:
uri: <%= ENV.fetch('MONGODB_URI') %>
options:
The exact generated shape can vary by Mongoid release, so preserve the keys produced by your installed generator. The important production rule is that the URI or equivalent host, database, username, and password values come from secret-managed settings, not literals committed to the repository.
Use a URI when credentials and topology belong together
A production URI can carry the authenticated user, password, database, host, and connection options in one secret. Set it in the Rails process environment, for example through your service manager or deployment platform, and reference it from the production section. If your organization prefers separate secrets, configure the host and database explicitly and obtain the username and password from the same secret store.
Do not paste a URI containing credentials into issue trackers, shell history, logs, or exception reports. Rotate the Rails user password if it is exposed, then update the application secret and restart the Rails processes.
Deploy Rails and prove the connection at application level
Start Rails only after MongoDB is active, authenticated, and reachable from the application account. Set the production environment and MongoDB secret for the process that actually runs Rails; setting a variable in an interactive shell does not automatically set it for a systemd unit, container, or release runner.
Perform a smoke test that exercises both a write and a read. For a temporary Mongoid document, the sequence is:
Best Value
class DeploymentProbe
include Mongoid::Document
field :value, type: String
end
probe = DeploymentProbe.create!(value: 'mongodb-connection-ok')
raise 'read failed' unless DeploymentProbe.where(id: probe.id).first&.value == 'mongodb-connection-ok'
probe.destroy!
Run equivalent code through your deployment's Rails runner or console in the production environment, then remove the temporary probe class or keep a deliberately designed health check. This test catches errors that a green systemd status cannot: wrong database names, missing credentials, an incorrect environment block, network restrictions, and insufficient MongoDB roles.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Service checks and Rails checks are different
| Check | What it proves | What it does not prove |
|---|---|---|
systemctl status mongod |
The MongoDB process is running under systemd | Rails has the correct URI or credentials |
journalctl -u mongod |
Why MongoDB started, stopped, or failed | The application can perform an authorized query |
| MongoDB shell authentication | A database user can authenticate from the tested network | The Rails environment loads the same secret |
| Rails read/write smoke test | Mongoid, credentials, database selection, and roles work together | Backups and disaster recovery have been tested |
Run all four categories after the initial deployment and again after changing the MongoDB version, network binding, credentials, or Rails secrets.
Troubleshoot the failures that appear most often
| Symptom | Likely cause | Fix |
|---|---|---|
| Rails reports connection refused | mongod is stopped, listening on a different interface, or blocked by a local rule |
Check systemctl status mongod, inspect the journal, confirm the host and port in mongoid.yml, and verify the intended bind address. |
| Authentication failure | Wrong username, password, authentication database, or secret loaded into the wrong Rails environment | Test the same credentials from the VPS, confirm the production environment variable, and verify the user's role on the selected database. |
| Timeout from a separate Rails host | MongoDB remains bound to localhost or network policy denies the private connection | Use a private interface, allow only the Rails host or private network, and avoid a public listener. |
| Service exits after a configuration edit | Invalid configuration syntax or an unsupported option | Read sudo journalctl -u mongod, restore the last known-good setting, and use options documented for the installed MongoDB version. |
Permission denied under /var/lib/mongodb |
The data directory is owned by the wrong account or has restrictive permissions | Restore ownership and mode for the dedicated MongoDB service account; do not make the directory broadly writable. |
| Development works but production fails | Only the development section is configured, or the production process lacks MONGODB_URI |
Inspect the generated production block and the environment of the actual Rails service, then rerun the application smoke test. |
Self-managed MongoDB versus a managed database
A MongoDB server on your VPS gives you direct control, but you own every operational task. A managed MongoDB service can remove much of that work, but its network model, supported regions, scaling limits, authentication features, and monthly cost must be checked for the specific service and date. No universal provider price or region list applies.
| Decision area | MongoDB on your VPS | Managed MongoDB |
|---|---|---|
| Operational responsibility | You patch Ubuntu and MongoDB, monitor disk and logs, manage users, and respond to failures. | The provider operates the database platform; you still configure users, application access, and data policies. |
| Backups and recovery | You must schedule backups, protect them separately, and test restores. | Backup controls may be built in, but retention, restore behavior, and extra charges vary by service. |
| Network isolation | Use localhost or a private interface plus VPS and provider firewall rules. | Use the provider's private networking and allow-list controls; confirm they can reach your VPS securely. |
| Scaling | You resize the VPS or redesign the deployment and absorb the migration work. | Scaling options may be available, subject to the service's regions and plan limits. |
| Cost | Part of the VPS bill, plus your time, storage, backups, and maintenance. | A separate recurring database charge, with pricing dependent on capacity, region, backups, and traffic. |
Choose self-management when you need a single private machine, have reliable patching and backup procedures, and accept responsibility for recovery. Choose a managed service when reducing database administration is worth its recurring cost and the service can provide private connectivity from your VPS.
Production checklist
- Ubuntu is an LTS release supported by the selected MongoDB major version.
- MongoDB was installed from its official Ubuntu repository.
mongodstarts, survives reboot, and has readable journal logs.- The data path is
/var/lib/mongodbor an intentionally configured alternative with correct service-account ownership. - Authorization and authentication are enabled before any non-local binding.
- A dedicated Rails database user has only the required role on the application database.
- MongoDB listens on localhost or a private interface, and network rules deny public database access.
config/mongoid.ymlcontains environment-specific settings and no committed production secret.- The production Rails process receives the intended MongoDB URI or equivalent settings.
- A real Rails/Mongoid write, read, and cleanup request succeeds.
- Backups, retention, and a restore procedure are documented and tested for your chosen operating model.
The Bottom Line
Install a supported MongoDB package, keep mongod private, enable role-based authentication, configure Mongoid from secrets, and require a successful Rails read/write check before calling the VPS deployment complete.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

