Stack Overflow in a JAR
5M+

Scoold is a Q&A and a knowledge sharing platform for teams. The project was created back in 2008, released in 2012 as social network for schools inspired by Stack Overflow. In 2017 it was refactored, repackaged and open-sourced.
Scoold can run anywhere - Heroku, DigitalOcean, AWS, Azure or any VPS hosting provider. It's lightweight (~7000 LOC), the backend is handled by a separate service called Para. All the heavy lifting is delegated to Para which can also be configured to store the data in any of the popular databases. This makes the Scoold code base easy to read and can be learned quickly, even by junior developers.
Scoold Pro, the paid version of Scoold, has premium features which make it the perfect knowledge sharing platform for your company or team.
This project is fully funded and supported by Erudika - an independent, bootstrapped company.
...and more!
For admin access, open the Scoold Pro demo and login with "Demo login".
Scoold is a client application of the Para backend server. Almost every request to
Scoold produces at least one request to Para as well. When you ask a question on Scoold, a create request is
sent to Para to the location POST /v1/questions. Here are a few key points about that architecture:
Here's an overview of the architecture:
┌────────────┐
┌───► Database │
┌──────────┐ ┌────────┐ │ ┌────────────┤
│ Scoold 1 ├──► │ │ └────────────┤
├──────────┤ │ Para ◄──┼───► Search │
│ Scoold 2 ├──► │ │ ┌────────────┤
└──────────┘ └────────┘ │ └────────────┤
└───► Cache │
└────────────┘
JDK 21 or higher and Maven are required to build the project.
You can build the project with JDK 11/17 until version 1.59.0, at which point Scoold switches to JDK 21 and Spring Boot 3.x.
scoold-application.conf with these properties:
scoold.env = "production"
scoold.app_name = "Scoold"
scoold.para_access_key = "app:scoold"
scoold.para_secret_key = "_secret_key_from_para_"
scoold.para_endpoint = "https://paraio.com"
# add your email here
scoold.admins = "[email protected]"
# (optional) require authentication for viewing content
scoold.is_default_space_public = false
java -jar -Dconfig.file=./scoold-application.conf scoold-*.jar.To login with a social account, you must create a developer app with Facebook, Google or any other identity provider. This is not required when you log in with LDAP, SAML or email/password.
Save the obtained API keys in the scoold-application.conf file that you have created above.
For all identity providers, you must whitelist the Para host with the appropriate authentication endpoint:
- GitHub:
https://paraio.com/github_auth- OAuth 2:
https://paraio.com/oauth2_authLearn more about custom authentication
Note: The Para backend server is deployed separately and is required for Scoold to run.
java -jar -Dconfig.file=./para-application.conf para-*.jarscoold and inside, a new configuration file named scoold-application.conf (see example above)java -jar -Dconfig.file=./scoold-application.conf \
-Dscoold.autoinit.para_config_file=../para-application.conf scoold-*.jar`
On startup, Para will initialize and create its own configuration file. Scoold will then try to initialize and
configure itself automatically by reading the para-application.conf. Alternatively you could provide
Scoold with the root access key directly, instead of pointing it to the Para configuration file, like so:
java -jar -Dconfig.file=./scoold-application.conf \
-Dscoold.autoinit.root_app_secret_key="{secret key for root app}" scoold-*.jar`
The secret key for the root Para app can be found inside the Para configuration file, or para-application.conf,
labeled para.root_secret_key.
Optionally, you can also install the Para CLI tool for browsing and managing data in your Scoold app.
Important:
para-application.conf and scoold-application.conf for Para and Scoold respectively.Read the Para docs for further details on how to run and configure your Scoold backend.
Scoold and Para can both be hosted on the same machine, provided it has at least 3 GB of RAM.
Scoold requires:
Para requires:
JVM parameters: e.g. java -jar -Xms600m -Xmx600m scoold-*.jar
Scoold requires a persistent and direct connection to a Para server to function properly.
By default, Scoold will load its configuration from a file named application.conf but that file can be renamed to
scoold-application.conf or app.conf and then loaded with the system property -Dconfig.file=app.conf.
The configuration can also be loaded from a JSON file or a URL.
Copy this Scoold example configuration to your scoold-application.conf (edit the values if needed):
# the name of the application
scoold.app_name = "Scoold"
# the port for Scoold
scoold.port = 8000
# environment - "production" or "development"
scoold.env = "production"
# the public-facing URL where Scoold is hosted
scoold.host_url = "http://localhost:8000"
# the URL of Para - can also be "https://paraio.com"
scoold.para_endpoint = "http://localhost:8080"
# access key for your Para app
scoold.para_access_key = "app:scoold"
# secret key for your Para app
scoold.para_secret_key = ""
# the email or identifier of the admin user - check Para user object
scoold.admins = "[email protected]"
# Enable/disable password authentication
scoold.password_auth_enabled = true
Content type
Image
Digest
sha256:1d1abe4c3…
Size
118.9 MB
Last updated
2 days ago
docker pull erudikaltd/scoold