Scoold
Overview
Scoold is an open source question-and-answer knowledge base for teams and communities. It gives your organization a private, Stack Exchange-style place to ask questions, post answers, vote on the best ones, accept solutions and build a searchable library of shared knowledge that grows with your team. Members earn reputation as they contribute, tags keep topics organized, and a full moderation and permission system keeps the content healthy.
Scoold is a Spring Boot application that always needs a companion backend called Para for storage, search and identity. The SecureAnyCloud image ships both, wired together and ready on the first boot of every VM. Scoold 1.69.3 and Para 1.54.7 (both Apache 2.0) run as systemd services on a hardened Ubuntu 24.04 LTS base, patched at build time.
Para runs in its fully embedded mode with an H2 database for storage, a Lucene index for search and an in-memory cache, so there is no external database to run and nothing else to install. An nginx reverse proxy serves the site on port 80. Scoold and Para both listen only on the loopback interface, so neither is exposed to the network. A unique administrator login and fresh backend secrets are generated on the first boot of every VM, and no default credential ships in the image. The image is backed by 24/7 SecureAnyCloud support.
What you get:
- Scoold 1.69.3 served on port 80 through nginx, managed by systemd
- Para 1.54.7 as the bundled backend, running fully embedded with H2 storage, Lucene search and an in-memory cache, with no external database
- A per-VM administrator login generated on first boot and recorded in a root-only file
- No shipped default login: the admin and all backend secrets are unique per VM, and no known or blank credential authenticates
- Scoold and Para bound to
127.0.0.1only, never exposed to the network; only nginx listens publicly on port 80 - Java heaps tuned to fit a 4 GiB VM (Para 512 MiB, Scoold 640 MiB)
para.service,scoold.service,nginx.serviceandscoold-firstboot.serviceas systemd units- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is the recommended size and is what the image is tuned for. Size up for larger or busier teams.
Configure the NSG inbound rules to allow 22/tcp from your management network and 80/tcp for the site. Scoold serves plain HTTP on port 80, so for production, put your own domain and TLS in front of it.
The bundled Para backend is never exposed. It listens on 127.0.0.1:8080 only, and Scoold listens on 127.0.0.1:8000 only, so neither port is reachable from the network.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, select Create a resource, search the Marketplace for Scoold by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then select Review + create and Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:scoold-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name scoold \
--image sac1647283583153:scoold-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardThen open port 80 for the site:
az vm open-port --resource-group <your-rg> --name scoold --port 80Step 3 - Confirm the services are running
SSH in as azureuser and confirm that Para, Scoold and nginx are all active. The scoold-firstboot unit is a one-shot service that runs once on the first boot to generate the per-VM secrets and administrator, then stays satisfied. Para and Scoold listen only on the loopback interface, while nginx serves the site on port 80.
systemctl is-active para scoold nginx scoold-firstbootactive active active activess -tlnp | grep -E ':80 |:8000 |:8080 'The listing confirms nginx on 0.0.0.0:80 (public), with Para on 127.0.0.1:8080 and Scoold on 127.0.0.1:8000 bound to the loopback interface only.
Step 4 - Retrieve the administrator login
A unique administrator email and password are generated on the first boot of every VM and written to a root-only file. Read the file with sudo:
sudo cat /root/scoold-credentials.txtSCOOLD_URL=http://<your-vm-ip>/ SCOOLD_ADMIN_EMAIL=admin@scoold.local SCOOLD_ADMIN_PASSWORD=<generated-on-first-boot>The password shown in the output is masked. On your VM, the file holds the real per-VM value. This account is a full administrator, and Scoold ships no other login.
Step 5 - Sign in and explore the questions feed
Open http://<your-vm-ip>/ in a browser. Select Sign in, choose the email and password option, and enter the administrator email and password from Step 4.
The home page is the questions feed: a searchable, sortable list of every question, with filters for newest, most voted, recently updated, answered and unanswered, and a tags sidebar. To ask a new question, select the Ask Question button in the top navigation.
Step 6 - Ask and answer questions
Select Ask Question to open the compose form. Give the question a clear title, write the details in the Markdown editor (with a toolbar for formatting, code, lists, links, images and tables), pick a space, and add tags so that the question is easy to find. After you publish the question, teammates can post answers, comment and vote. The asker marks the best response as the accepted answer.
Each question has its own page that shows the full question, its votes and views, the answers, and the actions available to you, such as edit, comment, close and share. This is where your team captures the detail behind an answer so that it is never lost.
Step 7 - Administer Scoold
Open the Administration area from the menu under your avatar. From here, an administrator manages spaces (isolated areas of questions for different teams), webhooks, backup and restore, themes, API keys and the full site configuration. An administrator can also review the environment and system information.
Step 8 - Confirm the no default credential security model
The image ships with no known login. The administrator and every backend secret are generated uniquely on the first boot of each VM, and the credentials file is 0600 root:root. The backend secrets are the Para root secret, the app secret used to sign sessions, and the child app credentials that Scoold creates for itself.
A round-trip check proves that the per-VM administrator authenticates while a blank password and common weak guesses are rejected:
sudo bash /usr/local/sbin/scoold-cred-roundtrip.shOK per-VM admin authenticates via /signin; blank + weak guesses rejectedA sign-in attempt with the wrong password is refused and redirected back to the sign-in page with an error. It is never granted a session:
Step 9 - Architecture and where your data lives
nginx on port 80 reverse-proxies to Scoold on 127.0.0.1:8000, which talks to Para on 127.0.0.1:8080. Para stores everything in an embedded H2 database on disk and indexes it with Lucene, so there is no external database to manage. The /healthz endpoint returns 200 for load balancer probes.
curl -sI http://127.0.0.1/healthz | head -1 du -sh /opt/para/data; ls /opt/para/dataHTTP/1.1 200 OK 88K /opt/para/data para.mv.dbYour questions, answers, users and tags all live in /opt/para/data/para.mv.db on the VM disk. To protect your knowledge base, back up that file or use the backup feature in the Administration area.
Using your own domain and TLS
Scoold serves plain HTTP on port 80. For production, put your own domain and a TLS-terminating proxy or load balancer in front of the VM. Then set scoold.host_url in /opt/scoold/application.conf to your public URL and restart Scoold, so that links and sessions use the correct address:
sudo systemctl restart scooldSupport
SecureAnyCloud publishes this image and provides 24/7 support. Scoold is developed by Erudika and released under the Apache 2.0 license, as is its Para backend. For product documentation, see the Scoold project. For issues with the SecureAnyCloud image, contact SecureAnyCloud support.
Deploy on Azure
Launch Scoold on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
This image runs Scoold, the open source, self-hosted, Stack Overflow-style question-and-answer knowledge base for teams and communities. Scoold provides questions, answers, comments, tags, reputation and badges, spaces, and SAML/OAuth/LDAP single sign-on.
Scoold is a Spring Boot Java application that is powered by the Para backend. On this image, Para runs fully embedded with an H2 database for persistence, a Lucene index for search and an in-JVM cache, so there is no external database to run. Scoold listens on 127.0.0.1:8000 and Para listens on 127.0.0.1:8080. You reach both through nginx on port 80 (and 443 once you add TLS). The Para backend and its datastore are never exposed to the network.
Three secrets unique to each deployed instance are generated on first boot: the Para backend root secret, Scoold's own signing secret and a per-instance administrator password. A dedicated administrator account is provisioned, and its login is written to /root/scoold-credentials.txt with mode 0600. No shared or default credentials ship in the image, and anonymous visitors cannot self-promote to administrator.
Prerequisites
Before you deploy this image you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your users reach the site from
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Scoold. Select the SecureAnyCloud listing and choose Select, then choose Continue on the subscription summary.
Pick an instance type of m5.large or larger. Scoold and Para each run their own JVM, so provide adequate memory. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, and either create or select a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your users use. The image ships with a dedicated data volume for the Para datastore in addition to the operating-system volume. Leave both at their default sizes or larger.
Select Launch instance. First-boot initialization generates the per-instance secrets, starts Para and Scoold, and provisions the administrator. It takes a couple of minutes after the instance state becomes Running and the status checks pass.
Launch the Instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud Scoold Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, <subnet-id> with your subnet ID, and <security-group-id> with a security group that opens ports 22, 80 and 443 as described earlier.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30,"VolumeType":"gp3"}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=scoold-01}]'On success, the command prints a JSON document. Note the instance ID, then retrieve the instance's public address once it is running with aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[].Instances[].PublicIpAddress" --output text.
Connect and Retrieve the Administrator Login
Connect over SSH with the key pair you selected and the public IP address from Step 2. The SSH login user depends on the operating system of the AMI variant you launched:
AMI variant SSH login user
Scoold on Ubuntu 24.04 ubuntu
The first-boot service writes the credentials file before it finishes, so the login is in place once the instance has settled.
ssh <login-user>@<public-ip>
sudo cat /root/scoold-credentials.txtThe plain text file contains the Scoold URL, the administrator email (admin@scoold.local) and the per-instance password. From the same SSH session, you can confirm that the deployment is healthy. The nginx health endpoint is open and returns ok:
curl -fsS http://127.0.0.1/healthzYou can also confirm that the three services are running and that the Scoold homepage is being served:
systemctl is-active para.service scoold.service nginx.service curl -s -o /dev/null -w 'scoold homepage: %{http_code}\n' http://127.0.0.1/First Sign-In
Browse to http://<public-ip>/ and choose Sign in. Select the email-and-password option and enter the administrator email and password from the credentials file. This account's email is in Scoold's administrators list, so Scoold promotes it to administrator automatically on sign-in. The Administration and Settings links appear in your avatar menu.
The homepage shows the questions feed. On a freshly launched instance, the feed is empty. As your team posts questions, they appear here, sortable by newest, votes, activity, answered and unanswered.
Ask and Answer Questions
Select Ask Question from the top navigation. Give the question a clear title, write the body in the Markdown editor (with a formatting toolbar, code blocks and image support), add a few tags, and choose Go to publish.
Open any question to read it and its answers. Team members vote questions and answers up or down and leave comments, and the question author accepts the answer that solved the problem. Reputation and badges accrue as people contribute, which turns the archive into a ranked, searchable knowledge base.
Administration and Single Sign-On
Open the Administration area from your avatar menu. From here, you manage spaces (separate areas for teams or topics), webhooks, backups, themes, API keys and the site configuration.
Scoold supports SAML, OAuth/OpenID Connect and LDAP single sign-on, so your team can sign in with your corporate identity provider instead of email and password. Configure your provider in the Administration area, or set the corresponding keys directly in /opt/scoold/application.conf on the instance (edit the file with your preferred editor). Then restart Scoold with sudo systemctl restart scoold.service to apply the change.
When you put the site behind your own domain, set scoold.host_url to the public URL (see Step 8), so that page links and the SSO callback address match.
The Para Datastore and Data Volume
Para stores all persistent data, including questions, answers, users, tags and the search index, under /opt/para. This image mounts that path on a dedicated EBS volume, separate from the operating-system disk, so your knowledge base data is independently resizable and snapshottable.
df -h /opt/paraTo grow the storage, expand the underlying EBS volume in the AWS console (or with aws ec2 modify-volume), then grow the filesystem on the instance. The data survives a stop and start because the volume is mounted by filesystem UUID in /etc/fstab.
Configure HTTPS with Your Own Domain
Point a DNS record for your domain at the instance's public address, then obtain a certificate and set Scoold's host URL. The image serves Scoold through nginx, so the Certbot nginx plugin can install and renew the certificate automatically:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d scoold.your-domain.example \
--non-interactive --agree-tos -m you@your-domain.example \
--redirectThen set the public URL so that links and single sign-on callbacks are correct, and restart Scoold:
sudo sed -i 's#^scoold.host_url.*#scoold.host_url = "https://scoold.your-domain.example"#' /opt/scoold/application.conf
sudo systemctl restart scoold.serviceBackup and Maintenance
All state lives under /opt/para on its own volume, so the simplest durable backup is an Amazon EBS snapshot of that volume, scheduled with Amazon Data Lifecycle Manager. You can also take a file-level backup while the services are briefly stopped:
sudo systemctl stop scoold.service para.service
sudo tar -czf <backup-dir>/scoold-para-$(date +%F).tgz -C /opt para
sudo systemctl start para.service scoold.serviceApply operating-system security updates with sudo apt-get update && sudo apt-get upgrade. The Scoold and Para JARs live in /opt/scoold and /opt/para. To upgrade to a newer release, replace the JAR and restart the service.
Support
This AMI includes 24/7 technical support from SecureAnyCloud. Our engineers can help with deployment, single sign-on (SAML, OAuth, LDAP) configuration, TLS and custom-domain setup, Para datastore backup and restore, version upgrades, and performance tuning.
- Email: sales@secureanycloud.com
- Live chat: available 24/7
For refund or billing inquiries, contact sales@secureanycloud.com with your AWS account ID and instance details.
Scoold and Para are trademarks of Erudika. All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on AWS
Launch Scoold on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com