Idea
Could Apache Answer run on Laravel Cloud?
· Ed Grosvenor
Apache Answer is a complete Q&A platform with accounts, questions, answers, search, and plugins. It is written in Go. Laravel Cloud started out hosting Laravel applications, but it now has a native Go runtime, which builds and runs Go programs directly. That makes Answer a useful test of how far the Scalpels marketplace can reach beyond Laravel applications.
Could we turn the official Answer release into a repeatable Cloud install without maintaining a fork? Before trying, we read the Answer source, its installation path, the official plugins, and Cloud's Go guidance. These are the questions and predictions we took into the experiment.
Can the official binary do the job?
Answer publishes a Linux binary for ARM64 processors, and Cloud runs Go applications on ARM64. We expect the server itself to run without a container, a PHP application, or a Laravel wrapper. It needs to listen on the port Cloud assigns and accept IPv6 connections.
Plugins make this harder. The official builder recompiles Answer with each plugin and rebuilds the React interface. That means an install with S3 storage needs Go, Node, and pnpm during the build. We want to know whether that toolchain works in Cloud's native Go build.
Can first boot be safe and repeatable?
Answer has an unattended installer, but it is not a general configuration generator. Cloud gives the application its database URL in an environment variable. A launcher will have to translate that URL, write Answer's local configuration file, and run the supported initialization and upgrade commands.
We need to create the first admin before we send any public traffic to the installer. Answer's setup routes are unauthenticated, so the first visitor could claim the site. A failed install can also leave a version table behind before the admin and settings are complete. Cloud's deploy command runs once during each deployment, before the new version takes traffic. We expect to run the bootstrap there with one replica, which is a single running copy of the application. We will start the public process only after the bootstrap succeeds.
What survives a deployment?
Questions, accounts, site settings, email configuration, and plugin settings belong in MySQL. The server configuration, translations, default cache, and unmodified upload directory live on local disk. Cloud replaces the local disk on every deployment, so anything written there is lost. We expect the launcher to recreate configuration and translations at boot, and the S3 plugin to move uploads into a bucket.
We want to test two details of the storage plugin. It needs a public delivery URL because it does not sign downloads. Its upload code also labels every object as image/<extension>, including attachments that are not images. We predict that images will work with Cloud's object storage once we map the bucket settings. Attachment MIME types will need work.
Does email work beyond a saved setting?
Answer stores SMTP configuration in MySQL through its administration API. It does not read mail settings from its local configuration file or pick up common mail environment variables.
We expect a wrapper or setup step to configure SMTP after installation. A successful settings response is not enough. The experiment should tell apart three things. The provider accepted a message, the message reached an inbox, and someone completed a link sent by email.
What success looks like
One administrator and one member should be able to create a question, answer it, vote, accept the answer, comment, and search. Images and ordinary attachments should live in object storage. The content, settings, and a logged-in session should survive a full rebuild and deployment.
We also want a clear list of what remains untested. One working replica does not tell us about running several replicas, hibernation behaviour, MySQL TLS policy, OAuth, or AI integrations. If the core installation works, the remaining question is whether the launcher and any plugin changes are small enough to maintain as a Scalpels marketplace package.