Hi there,
I have to disagree with your assertion that "[t]hey seem to have forgotten us open source users". My university runs, as far as we know, the largest higher-ed open-source Canvas installation. We also have other dual-licensed (commercial & open-source) software in production here. Our current email solution is one such package, and in that case we use their commercial version. The support we've received from Instructure's engineering staff over the last five years has been a million times better than the commercial support we get from our email solution vendor (one of the reasons we're dumping them and going to Exchange). I've never had engineers from other projects contact me directly with heads-ups about incoming changes, or offer to jump on a google hangout to work through a weird, completely-our-problem issue.
No one at Instructure, or anyone at all for that matter, is under any obligation to provide any kind of support whatsoever. Heck, it's in the header of just about every single file in the Canvas code:
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
The engineers that do post here, and in IRC, do so on their own, because they truly do believe in the open-source aspect of Canvas. They do consider open-source users when designing new features – Quizzes.next, for example, which would have been much easier to build if they weren't going to open-source it.
One thing you need to consider is that your use case (using a single, resource-constrained server for your entire stack) is a much different use case that what Instructure, or many other sites, runs into. We're no different. As an example: Instructure's hosted Canvas uses S3 for file storage. Our site uses local file storage (because Reasons). We *constantly* run into weird little bugs with local storage; Instructure doesn't use it so it isn't as well-tested. At the end of the day they're a business and they've got to put their resources where it's going to make them money. The beauty of open-source is that since we've got a vested interest in making local storage better, we can fix it. When we do, we
contribute it back so that others get the same benefit.
So, get involved! If you really think that there's a memory leak somewhere, profile it and track it down. Open an issue on the repo, or a PR with a fix.
Now, a couple of practical things for your situation:
* Redis *wants* to use all the memory you can throw at it, and Canvas is a very heavy Redis user. The various guides (
1,
2) for running Redis in production have tweaks that can help with resource usage, but they may not be what you want to do on a shared box.
* Postgres's process model (one process per connection) can really eat into your resources; putting pgbouncer in front of it may help.
* Putting delayed jobs on their own box is a best practice for a number of reasons, prime being that long-running jobs won't take resources away from your web requests.
I do hope you can find a solution to your problem, and hopefully the list can help you out as well.