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.
- Full featured Q&A platform
- Database-agnostic, optimized for cloud deployment
- Full-text search
- Distributed object cache
- Location-based search and "near me" filtering of posts
- I18n with RTL language support
- Reputation and voting system with badges
- Custom badges - add your own text, icon and color
- Spaces (Teams) - groups of isolated questions and users
- Webhooks with signature signing
- Zapier integration
- Minimal frontend JS code based on jQuery
- Modern, responsive layout powered by Materialize CSS
- Suggestions for similar questions and hints for duplicate posts
- Email notifications for post replies and comments
- Backup and Restore
- RESTful API defined with OpenAPI 3.0
- Spring Boot project (single JAR)
- Mutual authentication support (mTLS)
- LDAP authentication support
- Social login (Facebook, Google, GitHub, LinkedIn, Microsoft, Slack, Amazon, Twitter) with Gravatar support
- Syntax highlighting for code in posts, GFM markdown support with tables, task lists and strikethrough
- Import data from Stack Overflow for Teams
- Emojis! - using this cheat sheet or inline Unicode
- Support for uploading custom avatars (to Imgur, Cloudinary)
- SEO friendly
- Cookie consent (for GDPR, CCPA, etc.)
Buy Scoold Pro and also get these premium features:
- Slack integration
- Mattermost integration
- Microsoft Teams integration
- SAML authentication support
- Custom authentication support
- SCIM 2.0 for automatic user provisioning
- Mentions with notifications
- File uploads (local, AWS S3, Azure Blob)
- Account suspensions (permabans)
- Anonymous posts
- Unlimited spaces
- Multiple admins
- Multiple identity domains
- Sticky / Favorite posts
- Advanced syntax highlighting
- Email digest of recent questions
- Security notifications
- Wiki-style answers
...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:
- A Para server can be hosted anywhere and store data inside any of the supported databases.
- Para is a multi-tenant server which stores data in isolated environments called "apps".
- One or more instance of Scoold (like a cluster) can connect to the same Para app environment and share the data.
- Multiple separate Scoold websites can be powered by the same Para backend using different Para apps.
- Each app environment is completely independent from others and has its own database table and search index.
- Both Scoold and Para can be hosted on the same machine or on multiple machines, on different networks.
- Scoold talks to Para via HTTP(S) so Para must be directly accessible from Scoold, but can also be hosted on a private network.
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.
- Create a new app on ParaIO.com and copy your access keys to a file.
- Create Scoold's configuration file named
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 = "my@email.com" # (optional) require authentication for viewing content scoold.is_default_space_public = false
- Start Scoold with
java -jar -Dconfig.file=./scoold-application.conf scoold-*.jar
. - Open localhost:8000/signin/register and register a new account with same email you put in the configuration.
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_auth
Learn more about custom authentication
Note: The Para backend server is deployed separately and is required for Scoold to run.
- Download the latest executable Para JAR package
- Start Para with the command
java -jar -Dconfig.file=./para-application.conf para-*.jar
- Create a separate folder
scoold
and inside, a new configuration file namedscoold-application.conf
(see example above) - Start Scoold with the following command, pointing it to the location of the Para configuration file:
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
.
- Open localhost:8000/signin/register and register a new account with same email you put in the configuration
Optionally, you can also install the Para CLI tool for browsing and managing data in your Scoold app.
Important:
- The convention is to use
para-application.conf
andscoold-application.conf
for Para and Scoold respectively. - All settings shown here are meant to be kept inside the Scoold configuration file.
- SMTP settings must be configured before deploying Scoold to production.
- Scoold does not have a default user account with default username and password.
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:
- at least 500 MB RAM
- 1 vCPU or more
- 10 GB disk space or more (primarily for logs and storing images)
Para requires:
- at least 1 GB RAM
- 1 vCPU (2 are recommended)
- 10 GB disk space or more (unless the database is stored on the same machine)
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 = "admin@domain.com"
# Enable/disable password authentication
scoold.password_auth_enabled = true
View ALL Scoold configuration options
Property key & Description | Default Value | Type |
---|---|---|
scoold.app_name The formal name of the web application. |
Scoold |
String |
scoold.para_access_key requires restartApp identifier (access key) of the Para app used by Scoold. |
app:scoold |
String |
scoold.para_secret_key requires restartSecret key of the Para app used by Scoold. |
x |
String |
scoold.para_endpoint requires restartThe URL of the Para server for Scoold to connects to. For hosted Para, use https://paraio.com |
http://localhost:8080 |
String |
scoold.host_url The internet-facing (public) URL of this Scoold server. |
http://localhost:8000 |
String |
scoold.port requires restartThe network port of this Scoold server. Port number should be a number above 1024 . |
8000 |
Integer |
scoold.env requires restartThe environment profile to be used - possible values are production or development |
development |
String |
scoold.app_secret_key A random secret string, min. 32 chars long. Must be different from the secret key of the Para app. Used for generating JWTs and passwordless authentication tokens. |
|
String |
scoold.admins A comma-separated list of emails of people who will be promoted to administrators with full rights over the content on the site. This can also contain Para user identifiers. |
|
String |
scoold.is_default_space_public When enabled, all content in the default space will be publicly visible, without authentication, incl. users and tags. Disable to make the site private. |
true |
Boolean |
scoold.context_path requires restartThe context path (subpath) of the web application, defaults to the root path / . |
|
String |
scoold.webhooks_enabled Enable/disable webhooks support for events like question.create , user.signup , etc. |
true |
Boolean |
scoold.api_enabled Enable/disable the Scoold RESTful API. Disabled by default. |
false |
Boolean |
scoold.feedback_enabled Enable/disable the feedback page on the site. It is intended for internal discussion about the website itself. |
false |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.support_email The email address to use for sending transactional emails, like welcome/password reset emails. |
contact@scoold.com |
String |
scoold.mail.host The SMTP server host to use for sending emails. |
|
String |
scoold.mail.port The SMTP server port to use for sending emails. |
587 |
Integer |
scoold.mail.username The SMTP server username. |
|
String |
scoold.mail.password The SMTP server password. |
|
String |
scoold.mail.tls Enable/disable TLS for the SMTP connection. |
true |
Boolean |
scoold.mail.ssl Enable/disable SSL for the SMTP connection. |
false |
Boolean |
scoold.mail.debug Enable/disable debug information when sending emails through SMTP. |
false |
Boolean |
scoold.favtags_emails_enabled Set the default toggle value for all users for receiving emails for new content with their favorite tags. |
false |
Boolean |
scoold.reply_emails_enabled Set the default toggle value for all users for receiving emails for answers to their questions. |
false |
Boolean |
scoold.comment_emails_enabled Set the default toggle value for all users for receiving emails for comments on their posts. |
false |
Boolean |
scoold.summary_email_period_days ProThe time period between each content digest email, in days. |
7 |
Integer |
scoold.summary_email_items The number of posts to include in the digest email (a summary of new posts). |
25 |
Integer |
scoold.notification_emails_allowed Enable/disable all notification emails. |
true |
Boolean |
scoold.newpost_emails_allowed Enable/disable all email notifications for every new question that is posted on the site. |
true |
Boolean |
scoold.favtags_emails_allowed Enable/disable all email notifications for every new question tagged with a favorite tag. |
true |
Boolean |
scoold.reply_emails_allowed Enable/disable all email notifications for every new answer that is posted on the site. |
true |
Boolean |
scoold.comment_emails_allowed Enable/disable all email notifications for every new comment that is posted on the site. |
true |
Boolean |
scoold.mentions_emails_allowed ProEnable/disable all email notifications every time a user is mentioned. |
true |
Boolean |
scoold.summary_email_controlled_by_admins ProControls whether admins can enable/disable summary emails for everyone from the 'Settings' page |
false |
Boolean |
scoold.mention_emails_controlled_by_admins ProControls whether admins can enable/disable mention emails for everyone from the 'Settings' page |
false |
Boolean |
scoold.emails.welcome_text1 Allows for changing the default text (first paragraph) in the welcome email message. |
You are now part of {0} - a friendly Q&A community... |
String |
scoold.emails.welcome_text2 Allows for changing the default text (second paragraph) in the welcome email message. |
To get started, simply navigate to the "Ask question" page and ask a question... |
String |
scoold.emails.welcome_text3 Allows for changing the default text (signature at the end) in the welcome email message. |
Best, <br>The {0} team |
String |
scoold.emails.default_signature The default email signature for all transactional emails sent from Scoold. |
Best, <br>The {0} team |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.approved_domains_for_signups A comma-separated list of domain names, which will be used to restrict the people who are allowed to sign up on the site. |
|
String |
scoold.security.allow_unverified_emails Enable/disable email verification after the initial user registration. Users with unverified emails won't be able to sign in, unless they use a social login provider. |
false |
Boolean |
scoold.session_timeout The validity period of the authentication cookie, in seconds. Default is 24h. |
86400 |
Integer |
scoold.jwt_expires_after The validity period of the session token (JWT), in seconds. Default is 24h. |
86400 |
Integer |
scoold.security.one_session_per_user If disabled, users can sign in from multiple locations and devices, keeping a few open sessions at once. Otherwise, only one session will be kept open, others will be closed. |
true |
Boolean |
scoold.min_password_length The minimum length of passwords. |
8 |
Integer |
scoold.min_password_strength The minimum password strength - one of 3 levels: 1 good enough, 2 strong, 3 very strong. |
2 |
Integer |
scoold.pass_reset_timeout The validity period of the password reset token sent via email for resetting users' passwords. Default is 30 min. |
1800 |
Integer |
scoold.profile_anonimity_enabled Enable/disable the option for users to anonimize their profiles on the site, hiding their name and picture. |
false |
Boolean |
scoold.signup_captcha_site_key The reCAPTCHA v3 site key for protecting the signup and password reset pages. |
|
String |
scoold.signup_captcha_secret_key The reCAPTCHA v3 secret. |
|
String |
scoold.csp_reports_enabled Enable/disable automatic reports each time the Content Security Policy is violated. |
false |
Boolean |
scoold.csp_header_enabled Enable/disable the Content Security Policy (CSP) header. |
true |
Boolean |
scoold.csp_header The CSP header value which will overwrite the default one. This can contain one or more {{nonce}} placeholders, which will be replaced with an actual nonce on each request. |
|
String |
scoold.hsts_header_enabled Enable/disable the Strict-Transport-Security security header. |
true |
Boolean |
scoold.framing_header_enabled Enable/disable the X-Frame-Options security header. |
true |
Boolean |
scoold.xss_header_enabled Enable/disable the X-XSS-Protection security header. |
true |
Boolean |
scoold.contenttype_header_enabled Enable/disable the X-Content-Type-Options security header. |
true |
Boolean |
scoold.referrer_header_enabled Enable/disable the Referrer-Policy security header. |
true |
Boolean |
scoold.permissions_header_enabled Enable/disable the Permissions-Policy security header. |
true |
Boolean |
scoold.csp_connect_sources Additional sources to add to the connect-src CSP directive. Used when adding external scripts to the site. |
|
String |
scoold.csp_frame_sources Additional sources to add to the frame-src CSP directive. Used when adding external scripts to the site. |
|
String |
scoold.csp_font_sources Additional sources to add to the font-src CSP directive. Used when adding external fonts to the site. |
|
String |
scoold.csp_style_sources Additional sources to add to the style-src CSP directive. Used when adding external fonts to the site. |
|
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.password_auth_enabled Enabled/disable the ability for users to sign in with an email and password. |
true |
Boolean |
scoold.fb_app_id Facebook OAuth2 app ID. |
|
String |
scoold.fb_secret Facebook app secret key. |
|
String |
scoold.gp_app_id Google OAuth2 app ID. |
|
String |
scoold.gp_secret Google app secret key. |
|
String |
scoold.in_app_id LinkedIn OAuth2 app ID. |
|
String |
scoold.in_secret LinkedIn app secret key. |
|
String |
scoold.tw_app_id Twitter OAuth app ID. |
|
String |
scoold.tw_secret Twitter app secret key. |
|
String |
scoold.gh_app_id GitHub OAuth2 app ID. |
|
String |
scoold.gh_secret GitHub app secret key. |
|
String |
scoold.ms_app_id Microsoft OAuth2 app ID. |
|
String |
scoold.ms_secret Microsoft app secret key. |
|
String |
scoold.ms_tenant_id Microsoft OAuth2 tenant ID |
common |
String |
scoold.az_app_id Amazon OAuth2 app ID. |
|
String |
scoold.az_secret Amazon app secret key. |
|
String |
scoold.sl_app_id ProSlack OAuth2 app ID. |
|
String |
scoold.sl_secret ProSlack app secret key. |
|
String |
scoold.mm_app_id ProMattermost OAuth2 app ID. |
|
String |
scoold.mm_secret ProMattermost app secret key. |
|
String |
scoold.security.custom.provider ProThe text on the button for signing in with the custom authentication scheme. |
Continue with Acme Co. |
String |
scoold.security.custom.login_url ProThe URL address of an externally hosted, custom login page. |
|
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.security.ldap.server_url LDAP server URL. LDAP will be disabled if this is blank. |
|
String |
scoold.security.ldap.base_dn LDAP base DN. |
|
String |
scoold.security.ldap.user_search_base LDAP search base, which will be used only if a direct bind is unsuccessfull. |
|
String |
scoold.security.ldap.user_search_filter LDAP search filter, for finding users if a direct bind is unsuccessful. |
(cn={0}) |
String |
scoold.security.ldap.user_dn_pattern LDAP user DN pattern, which will be comined with the base DN to form the full path to theuser object, for a direct binding attempt. |
uid={0} |
String |
scoold.security.ldap.ad_mode_enabled Enable/disable support for authenticating with Active Directory. If true , AD is enabled. |
false |
Boolean |
scoold.security.ldap.active_directory_domain AD domain name. Add this only if you are connecting to an Active Directory server. |
|
String |
scoold.security.ldap.password_attribute LDAP password attribute name. |
userPassword |
String |
scoold.security.ldap.bind_dn LDAP bind DN |
|
String |
scoold.security.ldap.bind_pass LDAP bind password. |
|
String |
scoold.security.ldap.username_as_name Enable/disable the use of usernames for names on Scoold. |
false |
Boolean |
scoold.security.ldap.provider ProThe text on the LDAP sign in button. |
Continue with LDAP |
String |
scoold.security.ldap.mods_group_node Moderators group mapping, mapping LDAP users with this node, to moderators on Scoold. |
|
String |
scoold.security.ldap.admins_group_node Administrators group mapping, mapping LDAP users with this node, to administrators on Scoold. |
|
String |
scoold.security.ldap.compare_passwords LDAP compare passwords. |
|
String |
scoold.security.ldap.password_param LDAP password parameter name. |
password |
String |
scoold.security.ldap.username_param LDAP username parameter name. |
username |
String |
scoold.security.ldap.is_local ProEnable/disable local handling of LDAP requests, instead of sending those to Para. |
false |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.security.saml.idp.metadata_url ProSAML metadata URL. Scoold will fetch most of the necessary information for the authentication request from that XML document. This will overwrite all other IDP settings. |
|
String |
scoold.security.saml.sp.entityid ProSAML SP endpoint address - e.g. https://paraio.com/saml_auth/scoold . The IDP will call this address for authentication. |
|
String |
scoold.security.saml.sp.x509cert ProSAML client x509 certificate for the SP (public key). Value must be Base64-encoded. |
|
String |
scoold.security.saml.sp.privatekey ProSAML client private key in PKCS#8 format for the SP. Value must be Base64-encoded. |
|
String |
scoold.security.saml.attributes.id ProSAML attribute name of the user id . |
UserID |
String |
scoold.security.saml.attributes.picture ProSAML attribute name of the user picture . |
Picture |
String |
scoold.security.saml.attributes.email ProSAML attribute name of the user email . |
EmailAddress |
String |
scoold.security.saml.attributes.name ProSAML attribute name of the user name . |
GivenName |
String |
scoold.security.saml.attributes.firstname ProSAML attribute name of the user firstname . |
FirstName |
String |
scoold.security.saml.attributes.lastname ProSAML attribute name of the user lastname . |
LastName |
String |
scoold.security.saml.provider ProThe text on the button for signing in with SAML. |
Continue with SAML |
String |
scoold.security.saml.sp.assertion_consumer_service.url ProSAML ACS URL. |
|
String |
scoold.security.saml.sp.nameidformat ProSAML name id format. |
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified |
String |
scoold.security.saml.idp.entityid ProSAML IDP entity id for manually setting the endpoint address of the IDP, instead of getting it from the provided metadata URL. |
|
String |
scoold.security.saml.idp.single_sign_on_service.url ProSAML SSO service URL of the IDP. |
|
String |
scoold.security.saml.idp.x509cert ProSAML server x509 certificate for the IDP (public key). Value must be Base64-encoded. |
|
String |
scoold.security.saml.security.authnrequest_signed ProEnable/disable SAML authentication request signing. |
false |
Boolean |
scoold.security.saml.security.want_messages_signed ProEnable/disable SAML message signing. |
false |
Boolean |
scoold.security.saml.security.want_assertions_signed ProEnable/disable SAML assertion signing. |
false |
Boolean |
scoold.security.saml.security.want_assertions_encrypted ProEnable/disable SAML assertion encryption. |
false |
Boolean |
scoold.security.saml.security.want_nameid_encrypted ProEnable/disable SAML NameID encryption. |
false |
Boolean |
scoold.security.saml.security.want_nameid ProEnable/disable SAML NameID requirement. |
true |
Boolean |
scoold.security.saml.security.sign_metadata ProEnable/disable SAML metadata signing. |
false |
Boolean |
scoold.security.saml.security.want_xml_validation ProEnable/disable SAML XML validation. |
true |
Boolean |
scoold.security.saml.security.signature_algorithm ProSAML signature algorithm. |
|
String |
scoold.security.saml.domain ProSAML domain name. |
paraio.com |
String |
scoold.security.saml.is_local ProEnable/disable local handling of SAML requests, instead of sending those to Para. |
false |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.oa2_app_id OAauth 2.0 client app identifier. Alternatives: oa2second_app_id , oa2third_app_id |
|
String |
scoold.oa2_secret OAauth 2.0 client app secret key. Alternatives: oa2second_secret , oa2third_secret |
|
String |
scoold.security.oauth.authz_url OAauth 2.0 client app authorization URL (login page). Alternatives: security.oauthsecond.authz_url , security.oauththird.authz_url |
|
String |
scoold.security.oauth.token_url OAauth 2.0 client app token endpoint URL. Alternatives: security.oauthsecond.token_url , security.oauththird.token_url |
|
String |
scoold.security.oauth.profile_url OAauth 2.0 client app user info endpoint URL. Alternatives: security.oauthsecond.profile_url , security.oauththird.profile_url |
|
String |
scoold.security.oauth.scope OAauth 2.0 client app scope. Alternatives: security.oauthsecond.scope , security.oauththird.scope |
openid email profile |
String |
scoold.security.oauth.accept_header OAauth 2.0 Accept header customization. Alternatives: security.oauthsecond.accept_header , security.oauththird.accept_header |
|
String |
scoold.security.oauth.parameters.id OAauth 2.0 attribute mapping for id . Alternatives: security.oauthsecond.parameters.id , security.oauththird.parameters.id |
sub |
String |
scoold.security.oauth.parameters.name OAauth 2.0 attribute mapping for name . Alternatives: security.oauthsecond.parameters.name , security.oauththird.parameters.name |
name |
String |
scoold.security.oauth.parameters.given_name OAauth 2.0 attribute mapping for given_name . Alternatives: security.oauthsecond.parameters.given_name , security.oauththird.parameters.given_name |
given_name |
String |
scoold.security.oauth.parameters.family_name OAauth 2.0 attribute mapping for family_name . Alternatives: security.oauthsecond.parameters.family_name , security.oauththird.parameters.family_name |
family_name |
String |
scoold.security.oauth.parameters.email OAauth 2.0 attribute mapping for email . Alternatives: security.oauthsecond.parameters.email , security.oauththird.parameters.email |
email |
String |
scoold.security.oauth.parameters.picture OAauth 2.0 attribute mapping for picture . Alternatives: security.oauthsecond.parameters.picture , security.oauththird.parameters.picture |
picture |
String |
scoold.security.oauth.download_avatars Enable/disable OAauth 2.0 avatar downloading to local disk. Used when avatars are large in size. Alternatives: security.oauthsecond.download_avatars , security.oauththird.download_avatars |
false |
Boolean |
scoold.security.oauth.token_delegation_enabled ProEnable/disable OAauth 2.0 token delegation. The ID and access tokens will be saved and delegated to Scoold from Para. Alternatives: security.oauthsecond.token_delegation_enabled , security.oauththird.token_delegation_enabled |
false |
Boolean |
scoold.security.oauth.spaces_attribute_name ProOAauth 2.0 attribute mapping for users' spaces . The spaces can be comma-separated. Alternatives: security.oauthsecond.spaces_attribute_name , security.oauththird.spaces_attribute_name |
spaces |
String |
scoold.security.oauth.groups_attribute_name ProOAauth 2.0 attribute mapping for users' groups . Use this for mapping admin , mod and user roles to Scoold users.Alternatives: security.oauthsecond.groups_attribute_name , security.oauththird.groups_attribute_name |
|
String |
scoold.security.oauth.mods_equivalent_claim_value ProOAauth 2.0 claim used for mapping OAuth2 users having it, to moderators on Scoold. Alternatives: security.oauthsecond.mods_equivalent_claim_value , security.oauththird.mods_equivalent_claim_value |
mod |
String |
scoold.security.oauth.admins_equivalent_claim_value ProOAauth 2.0 claim used for mapping OAuth2 users having it, to administrators on Scoold. Alternatives: security.oauthsecond.admins_equivalent_claim_value , security.oauththird.admins_equivalent_claim_value |
admin |
String |
scoold.security.oauth.users_equivalent_claim_value ProOAauth 2.0 claim used for denying access to OAuth2 users not having it, unlessthey already have the admin or moderator roles assigned. Alternatives: security.oauthsecond.users_equivalent_claim_value , security.oauththird.users_equivalent_claim_value |
|
String |
scoold.security.oauth.domain OAauth 2.0 domain name for constructing user email addresses in case they are missing. Alternatives: security.oauthsecond.domain , security.oauththird.domain |
|
String |
scoold.security.oauth.provider The text on the button for signing in with OAuth2 or OIDC. |
Continue with OpenID Connect |
String |
scoold.security.oauth.appid_in_state_param_enabled Enable/disable the use of the OAauth 2.0 state parameter to designate your Para app id. Some OAauth 2.0 servers throw errors if the length of the state parameter is less than 8 chars. |
true |
Boolean |
scoold.security.oauth.send_scope_to_token_endpoint Enable/disable sending the OAauth 2.0 scope parameter in the token request. Some OAuth 2.0 servers require this to be turned off. |
true |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.new_users_can_comment Enable/disable the ability for users with reputation below 100 to comments on posts. |
true |
Boolean |
scoold.posts_need_approval Enable/disable the need for approval of new posts (both questions and answers) by a moderator. |
false |
Boolean |
scoold.answers_approved_by Controls who is able to mark an answer as accepted. Possible values are default (author and moderators), admins (admins only), moderators (moderators and admins). |
default |
String |
scoold.answers_need_approval Enable/disable the need for approval of new answers by a moderator. |
false |
Boolean |
scoold.wiki_answers_enabled ProEnable/disable the ability for users to create wiki-style answers, editable by everyone. |
true |
Boolean |
scoold.media_recording_allowed ProEnable/disable support for attaching recorded videos and voice messages to posts. |
true |
Boolean |
scoold.delete_protection_enabled Enable/disable the ability for authors to delete their own question, when it already has answers and activity. |
true |
Boolean |
scoold.max_text_length The maximum text length of each post (question or answer). Longer content will be truncated. |
20000 |
Integer |
scoold.max_tags_per_post The maximum number of tags a question can have. The minimum is 0 - then the default tag is used. |
5 |
Integer |
scoold.min_tags_per_post The minimum number of tags a question must have. The minimum is 0. |
0 |
Integer |
scoold.tag_creation_allowed Enable/disable tag creation by normal users. If disabled, only admins and moderators can create new tags. |
true |
Boolean |
scoold.max_replies_per_post The maximum number of answers a question can have. |
500 |
Integer |
scoold.max_comments_per_id The maximum number of comments a post can have. |
1000 |
Integer |
scoold.max_comment_length The maximum length of each comment. |
600 |
Integer |
scoold.max_mentions_in_posts ProThe maximum number of mentioned users a post can have. |
10 |
Integer |
scoold.anonymous_posts_enabled ProEnable/disable the ability for unathenticated users to create new questions. |
false |
Boolean |
scoold.nearme_feature_enabled Enable/disable the ability for users to attach geolocation data to questions and location-based filtering of questions. |
false |
Boolean |
scoold.merge_question_bodies Enable/disable the merging of question bodies when two questions are merged into one. |
true |
Boolean |
scoold.max_similar_posts The maximum number of similar posts which will be displayed on the side. |
7 |
Integer |
scoold.default_question_tag The default question tag, used when no other tags are provided by its author. |
|
String |
scoold.posts_rep_threshold The minimum reputation an author needs to create a post without approval by moderators. This is only required if new posts need apporval. |
100 |
Integer |
Property key & Description | Default Value | Type |
---|---|---|
scoold.auto_assign_spaces A comma-separated list of spaces to assign to all new users. |
|
String |
scoold.reset_spaces_on_new_assignment Spaces delegated from identity providers will overwrite the existing ones for users. |
true |
Boolean |
scoold.mods_access_all_spaces By default, moderators have access to and can edit content in all spaces. When disabled, moderators can only access the spaces they are assigned to by admins. |
true |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.answer_voteup_reward_author Reputation points given to author of answer as reward when a user upvotes it. |
10 |
Integer |
scoold.question_voteup_reward_author Reputation points given to author of question as reward when a user upvotes it. |
5 |
Integer |
scoold.voteup_reward_author Reputation points given to author of comment or other post as reward when a user upvotes it. |
2 |
Integer |
scoold.answer_approve_reward_author Reputation points given to author of answer as reward when the question's author accepts it. |
10 |
Integer |
scoold.answer_approve_reward_voter Reputation points given to author of question who accepted an answer. |
3 |
Integer |
scoold.answer_create_reward_author Reputation points given to author who added an answer to a question (awarded once per question). |
5 |
Integer |
scoold.post_votedown_penalty_author Reputation points taken from author of post as penalty when their post was downvoted. |
3 |
Integer |
scoold.post_votedown_penalty_voter Reputation points taken from the user who downvotes any content. Discourages downvoting slightly. |
1 |
Integer |
scoold.voter_ifhas Number of votes (up or down) needed from a user for earning the voter badge. |
100 |
Integer |
scoold.commentator_ifhas Number of comments a user needs to have posted for earning the commentator badge. |
100 |
Integer |
scoold.critic_ifhas Number of cast downvotes needed from a user for earning the critic badge. |
10 |
Integer |
scoold.supporter_ifhas Number of cast upvotes needed from a user for earning the supporter badge. |
50 |
Integer |
scoold.goodquestion_ifhas Votes needed on a question before its author gets to earn the good question badge. |
20 |
Integer |
scoold.goodanswer_ifhas Votes needed on an answer before its author gets to earn the good answer badge. |
10 |
Integer |
scoold.enthusiast_ifhas Reputation points needed for earning the enthusiast badge. |
100 |
Integer |
scoold.freshman_ifhas Reputation points needed for earning the freshman badge. |
300 |
Integer |
scoold.scholar_ifhas Reputation points needed for earning the scholar badge. |
500 |
Boolean |
scoold.teacher_ifhas Reputation points needed for earning the teacher badge. |
1000 |
Integer |
scoold.geek_ifhas Reputation points needed for earning the geek badge. |
9000 |
Integer |
Property key & Description | Default Value | Type |
---|---|---|
scoold.uploads_enabled ProEnable/disable file uploads. |
true |
Boolean |
scoold.file_uploads_dir ProThe directory (local or in the cloud) where files will be stored. |
uploads |
String |
scoold.uploads_require_auth ProEnable/disable the requirement that uploaded files can only be accessed by authenticated users. |
false |
Boolean |
scoold.allowed_upload_formats ProA comma-separated list of allowed MIME types in the format extension:mime_type , e.g.py:text/plain or just the extensions py,yml |
|
String |
scoold.s3_bucket ProAWS S3 bucket name as target for storing files. |
|
String |
scoold.s3_path ProAWS S3 object prefix (directory) inside the bucket. |
|
String |
scoold.s3_region ProAWS S3 region. |
|
String |
scoold.s3_endpoint ProAWS S3 endpoint override. The S3 region will be ignored if this is set. Can be used for connecting to S3-compatible storage providers. |
|
String |
scoold.s3_access_key ProAWS S3 access key. |
|
String |
scoold.s3_secret_key ProAWS S3 secret key. |
|
String |
scoold.blob_storage_account ProAzure Blob Storage account ID. |
|
String |
scoold.blob_storage_token ProAzure Blob Storage token. |
|
String |
scoold.blob_storage_container ProAzure Blob Storage container. |
|
String |
scoold.blob_storage_path ProAzure Blob Storage path prefix (subfolder) within a container. |
|
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.default_language_code The default language code to use for the site. Set this to make the site load a different language from English. |
|
String |
scoold.welcome_message Adds a brief intro text inside a banner at the top of the main page for new visitors to see.Not shown to authenticated users. |
|
String |
scoold.welcome_message_onlogin Adds a brief intro text inside a banner at the top of the page. Shown to authenticated users only. |
|
String |
scoold.welcome_message_prelogin Adds a brief intro text inside a banner at the top of the page. Shown only on the 'Sign in' page. |
|
String |
scoold.dark_mode_enabled Enable/disable the option for users to switch to the dark theme. |
true |
Boolean |
scoold.meta_description The content inside the description <meta> tag. |
Scoold is friendly place for knowledge sharing and collaboration... |
String |
scoold.meta_keywords The content inside the keywords <meta> tag. |
knowledge base, knowledge sharing, collaboration, wiki... |
String |
scoold.show_branding Enable/disable the 'Powered by Scoold' branding in the footer. |
true |
Boolean |
scoold.mathjax_enabled ProEnable/disable support for MathJax and LaTeX for scientific expressions in Markdown. |
false |
Boolean |
scoold.gravatars_enabled Enable/disable support for Gravatars. |
true |
Boolean |
scoold.gravatars_pattern The pattern to use when displaying empty/anonymous gravatar pictures. |
retro |
String |
scoold.avatar_repository previewThe avatar repository - one of imgur , cloudinary . |
|
String |
scoold.footer_html Some custom HTML content to be added to the website footer. |
|
String |
scoold.navbar_link1_url The URL of an extra custom link which will be added to the top navbar. |
|
String |
scoold.navbar_link1_text The title of an extra custom link which will be added to the top navbar. |
Link1 |
String |
scoold.navbar_link1_target The target attribute of an extra custom link which will be added to the top navbar. |
|
String |
scoold.navbar_link2_url The URL of an extra custom link which will be added to the top navbar. |
|
String |
scoold.navbar_link2_text The title of an extra custom link which will be added to the top navbar. |
Link2 |
String |
scoold.navbar_link2_target The target attribute of an extra custom link which will be added to the top navbar. |
|
String |
scoold.navbar_menu_link1_url The URL of an extra custom link which will be added to user's dropdown menu. Only shown to authenticated users. |
|
String |
scoold.navbar_menu_link1_text The title of an extra custom link which will be added to the user's dropdown menu. |
Menu Link1 |
String |
scoold.navbar_menu_link1_target The target attribute of an extra custom link which will be added to user's dropdown menu. |
|
String |
scoold.navbar_menu_link2_url The URL of an extra custom link which will be added to user's dropdown menu. Only shown to authenticated users. |
|
String |
scoold.navbar_menu_link2_text The title of an extra custom link which will be added to the user's dropdown menu. |
Menu Link2 |
String |
scoold.navbar_menu_link2_target The target attribute of an extra custom link which will be added to the user's dropdown menu. |
|
String |
scoold.always_hide_comment_forms Enable/disable a visual tweak which keeps all comment text editors closed at all times. |
true |
Boolean |
scoold.footer_links_enabled Enable/disable all links in the website footer. |
true |
Boolean |
scoold.emails_footer_html The HTML code snippet to embed at the end of each transactional email message. |
<a href="{host_url}">{app_name}</a> • <a href="https://scoold.com">Powered by Scoold</a> |
String |
scoold.cookie_consent_required Enable/disable the cookie consent popup box and blocks all external JS scripts from loading. Used for compliance with GDPR/CCPA. |
false |
Boolean |
scoold.fixed_nav Enable/disable a fixed navigation bar. |
false |
Boolean |
scoold.logo_width The width of the logo image in the nav bar, in pixels. Used for fine adjustments to the logo size. |
100 |
Integer |
scoold.code_highlighting_enabled Enable/disable support for syntax highlighting in code blocks. |
true |
Boolean |
scoold.max_pages Maximum number of pages to return as results. |
1000 |
Integer |
scoold.numeric_pagination_enabled Enable/disable the numeric pagination style (< 1 2 3...N >) . |
false |
Boolean |
scoold.html_in_markdown_enabled Enable/disable the ability for users to insert basic HTML tags inside Markdown content. |
false |
Boolean |
scoold.max_items_per_page Maximum number of results to return in a single page of results. |
30 |
Integer |
scoold.avatar_edits_enabled Enable/disable the ability for users to edit their profile pictures. |
true |
Boolean |
scoold.name_edits_enabled Enable/disable the ability for users to edit their name. |
true |
Boolean |
Property key & Description | Default Value | Type |
---|---|---|
scoold.logo_url The URL of the logo in the nav bar. Use a PNG, SVG, JPG or WebP format. |
/images/logo.svg |
String |
scoold.logo_dark_url The URL of the logo in the nav bar used in dark mode. Use a PNG, SVG, JPG or WebP format. |
/images/logo.svg |
String |
scoold.small_logo_url The URL of a smaller logo (only use PNG/JPG!). Used in transactional emails and the meta og:image . |
/images/logowhite.png |
String |
scoold.cdn_url A CDN URL where all static assets might be stored. |
|
String |
scoold.stylesheet_url A stylesheet URL of a CSS file which will be used as the main stylesheet. This will overwrite all existing CSS styles! |
/styles/style.css |
String |
scoold.dark_stylesheet_url A stylesheet URL of a CSS file which will be used when dark mode is enabled. This will overwrite all existing dark CSS styles! |
/styles/dark.css |
String |
scoold.external_styles A comma-separated list of external CSS files. These will be loaded after the main stylesheet. |
|
String |
scoold.external_scripts._id_ A map of external JS scripts. These will be loaded after the main JS script. For example: scoold.external_scripts.script1 = "alert('Hi')" |
|
Map |
scoold.inline_css Some short, custom CSS snippet to embed inside the <head> element. |
|
String |
scoold.favicon_url The URL of the favicon image. |
/images/favicon.ico |
String |
scoold.meta_app_icon The URL of the app icon image in the <meta property='og:image'> tag. |
/images/logowhite.png |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.mattermost.auth_enabled ProEnable/disable authentication with Mattermost. |
false |
Boolean |
scoold.mattermost.server_url ProMattermost server URL. |
|
String |
scoold.mattermost.bot_username ProMattermost bot username. |
scoold |
String |
scoold.mattermost.bot_icon_url ProMattermost bot avatar URL. |
/images/logowhite.png |
String |
scoold.mattermost.post_to_space ProDefault space on Scoold where questions created on Mattermost will be published. Set it to workspace for using the team's name. |
|
String |
scoold.mattermost.map_channels_to_spaces ProEnable/disable mapping of Mattermost channels to Scoold spaces. When enabled, will create a Scoold space for each Mattermost channel. |
false |
Boolean |
scoold.mattermost.map_workspaces_to_spaces ProEnable/disable mapping of Mattermost teams to Scoold spaces. When enabled, will create a Scoold space for each Mattermost team. |
true |
Boolean |
scoold.mattermost.max_notification_webhooks ProThe maximum number of incoming webhooks which can be created on Scoold. Each webhook links a Mattermost channel to Scoold. |
10 |
Integer |
scoold.mattermost.notify_on_new_answer ProEnable/disable the ability for Scoold to send notifications to Mattermost for new answers. |
true |
Boolean |
scoold.mattermost.notify_on_new_question ProEnable/disable the ability for Scoold to send notifications to Mattermost for new questions. |
true |
Boolean |
scoold.mattermost.notify_on_new_comment ProEnable/disable the ability for Scoold to send notifications to Mattermost for new comments. |
true |
Boolean |
scoold.mattermost.dm_on_new_comment ProEnable/disable the ability for Scoold to send direct messages to Mattermost users for new comments. |
false |
Boolean |
scoold.mattermost.default_question_tags ProDefault question tags for questions created on Mattermost (comma-separated list). |
via-mattermost |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.slack.auth_enabled ProEnable/disable authentication with Slack. |
false |
Boolean |
scoold.slack.app_id ProThe Slack app ID (first ID from the app's credentials, not the OAuth2 Client ID). |
|
String |
scoold.slack.signing_secret ProSlack signing secret key for verifying request signatures. |
x |
String |
scoold.slack.max_notification_webhooks ProThe maximum number of incoming webhooks which can be created on Scoold. Each webhook links a Slack channel to Scoold. |
10 |
Integer |
scoold.slack.map_channels_to_spaces ProEnable/disable mapping of Slack channels to Scoold spaces. When enabled, will create a Scoold space for each Slack channel. |
false |
Boolean |
scoold.slack.map_workspaces_to_spaces ProEnable/disable mapping of Slack teams to Scoold spaces. When enabled, will create a Scoold space for each Slack team. |
true |
Boolean |
scoold.slack.post_to_space ProDefault space on Scoold where questions created on Slack will be published. Set it to workspace for using the team's name. |
|
String |
scoold.slack.default_title ProDefault question title for questions created on Slack. |
A question from Slack |
String |
scoold.slack.notify_on_new_answer ProEnable/disable the ability for Scoold to send notifications to Slack for new answers. |
true |
Boolean |
scoold.slack.notify_on_new_question ProEnable/disable the ability for Scoold to send notifications to Slack for new questions. |
true |
Boolean |
scoold.slack.notify_on_new_comment ProEnable/disable the ability for Scoold to send notifications to Slack for new comments. |
true |
Boolean |
scoold.slack.dm_on_new_comment ProEnable/disable the ability for Scoold to send direct messages to Slack users for new comments. |
false |
Boolean |
scoold.slack.default_question_tags ProDefault question tags for questions created on Slack (comma-separated list). |
via-slack |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.teams.auth_enabled Enable/disable authentication with Microsoft. |
false |
Boolean |
scoold.teams.bot_id ProTeams bot ID. |
|
String |
scoold.teams.bot_secret ProTeams bot secret key. |
|
String |
scoold.teams.bot_service_url ProTeams bot service URL. |
https://smba.trafficmanager.net/emea/ |
String |
scoold.teams.notify_on_new_answer ProEnable/disable the ability for Scoold to send notifications to Teams for new answers. |
true |
Boolean |
scoold.teams.notify_on_new_question ProEnable/disable the ability for Scoold to send notifications to Teams for new questions. |
true |
Boolean |
scoold.teams.notify_on_new_comment ProEnable/disable the ability for Scoold to send notifications to Teams for new comments. |
true |
Boolean |
scoold.teams.dm_on_new_comment ProEnable/disable the ability for Scoold to send direct messages to Teams users for new comments. |
false |
Boolean |
scoold.teams.post_to_space ProDefault space on Scoold where questions created on Teams will be published. Set it to workspace for using the team's name. |
|
String |
scoold.teams.map_channels_to_spaces ProEnable/disable mapping of Teams channels to Scoold spaces. When enabled, will create a Scoold space for each Teams channel. |
false |
Boolean |
scoold.teams.map_workspaces_to_spaces ProEnable/disable mapping of Teams teams to Scoold spaces. When enabled, will create a Scoold space for each Teams team. |
true |
Boolean |
scoold.teams.private_teams_listing_allowed ProEnable/disable the listing of private teams on the Administration page when configuring notification webhooks for Scoold spaces. |
true |
Boolean |
scoold.teams.max_notification_webhooks ProThe maximum number of incoming webhooks which can be created on Scoold. Each webhook links a Teams channel to Scoold. |
10 |
Integer |
scoold.teams.default_title ProDefault question title for questions created on Teams. |
A question from Microsoft Teams |
String |
scoold.teams.default_question_tags ProDefault question tags for questions created on Teams (comma-separated list). |
via-teams |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.scim_enabled Pro previewEnable/disable support for SCIM user provisioning. |
false |
Boolean |
scoold.scim_secret_token Pro previewSCIM secret token. |
|
String |
scoold.scim_allow_provisioned_users_only Pro previewEnable/disable the restriction that only SCIM-provisioned users can sign in. |
false |
Boolean |
scoold.scim_map_groups_to_spaces Pro previewEnable/disable mapping of SCIM groups to Scoold spaces. |
true |
Boolean |
scoold.security.scim.admins_group_equivalent_to Pro previewSCIM group whose members will be promoted to administrators on Scoold. |
admins |
String |
scoold.security.scim.mods_group_equivalent_to Pro previewSCIM group whose members will be promoted to moderators on Scoold. |
mods |
String |
Property key & Description | Default Value | Type |
---|---|---|
scoold.security.redirect_uri Publicly accessible, internet-facing URL of the Para endpoint where authenticated users will be redirected to, from the identity provider. Used when Para is hosted behind a proxy. |
http://localhost:8080 |
String |
scoold.security.hosturl_aliases Provides a comma-separated list of alternative host_url public addresses to be used when returning from an authentication request to Para backend. This will override the hostname defined in signin_success and signin_failure and allow Scoold to run on multiple different public URLs while each separate server shares the same configuration. Each must be a valid URL |
|
String |
scoold.redirect_signin_to_idp Enable/disable the redirection of users from the signin page, directly to the IDP login page. |
false |
Boolean |
scoold.gmaps_api_key The Google Maps API key. Used for geolocation functionality, (e.g. 'posts near me', location). |
|
String |
scoold.imgur_client_id previewImgur API client id. Used for uploading avatars to Imgur. Note: Imgur have some breaking restrictions going on in their API and this might not work. |
|
String |
scoold.cloudinary_url previewCloudinary URL. Used for uploading avatars to Cloudinary. |
|
String |
scoold.max_fav_tags Maximum number of favorite tags. |
50 |
Integer |
scoold.batch_request_size Maximum batch size for the Para client pagination requests. |
0 |
Integer |
scoold.signout_url The URL which users will be redirected to after they click 'Sign out'. Can be a page hosted externally. |
/signin?code=5&success=true |
String |
scoold.vote_expires_after_sec Vote expiration timeout, in seconds. Users can vote again on the same content after this period has elapsed. Default is 30 days. |
2592000 |
Integer |
scoold.vote_locked_after_sec Vote locking period, in seconds. Vote cannot be changed after this period has elapsed. Default is 30 sec. |
30 |
Integer |
scoold.downvotes_enabled Enable/disable negative votes. |
true |
Boolean |
scoold.import_batch_size Maximum number objects to read and send to Para when importing data from a backup. |
100 |
Integer |
scoold.connection_retries_max Maximum number of connection retries to Para. |
10 |
Integer |
scoold.connection_retry_interval_sec Para connection retry interval, in seconds. |
10 |
Integer |
scoold.rewrite_inbound_links_with_fqdn If set, links to Scoold in emails will be replaced with a public-facing FQDN. |
|
String |
scoold.cluster_nodes Total number of nodes present in the cluster when Scoold is deployed behind a reverse proxy. |
1 |
Integer |
scoold.autoinit.root_app_secret_key If configured, Scoold will try to automatically initialize itself with Para and create its own Para app, called app:scoold . The keys for that new app will be saved in the configuration file. |
|
String |
scoold.autoinit.para_config_file Does the same as scoold.autoinit.root_app_secret_key but tries to read the secret key for the root Para app from the Para configuration file, wherever that may be. |
|
String |
scoold.sitemap_enabled Enable/disable the generation of /sitemap.xml . |
true |
Boolean |
scoold.access_log_enabled Enable/disable the Scoold access log. |
false |
Boolean |
scoold.user_autocomplete_details_enabled proEnable/disable extra details when displaying user results in autocomplete. |
false |
Boolean |
scoold.user_autocomplete_max_results proControls the maximum number of search results in users' autocomplete. |
10 |
Integer |
scoold.users_discoverability_enabled Enable/disable discoverability of users on the site. If disabled, user profiles and the users page will be hidden for all except admins. |
true |
Boolean |
scoold.notifications_as_reports_enabled Enable/disable copies of new content notifications in the form of reports on the site. Instead of checking their email, mods will be able to view and act on those on the reports page. |
false |
Boolean |
scoold.akismet_api_key API Key for Akismet for activating anti-spam protection of all posts. |
|
String |
scoold.automatic_spam_protection_enabled Enable/disable autonomous action taken against spam posts - if detected a spam post will be blocked without notice. By default, spam posts will require action and approval by admins. |
true |
Boolean |
On startup, Scoold tries to connect to Para every 10 seconds, 10 times in total. (default). If the connection is unsuccessful, the settings will not be persisted.
scoold.connection_retries_max = 10
scoold.connection_retry_interval_sec = 10
For an infinite number of attempts to connect to Para, set connection_retries_max
to -1
.
For tagged Docker images for Scoold, go to erudikaltd/scoold on Docker Hub.
The :latest_stable
tag always points to the latest stable release version. The :latest
tag can be broken/unstable.
The easiest way to create the Scoold stack is to run docker compose up
.
- Create a new directory and copy
docker-compose.yml
(for Scoold Prodocker-compose.yml
is here) to it from this repository. - Create the two blank configuration files in the same directory. Both files must be blank in order for the initial auto-configuration to work.:
Since the configuration files do not define
$ touch para-application.conf scoold-application.conf
scoold.app_secret_key
andscoold.para_secret_key
, these secrets will be populated automatically upon initialization. $ docker compose up
Finally, open locahost:8000/signin/register
and create a new account. If you've configured your email with
scoold.admins = "my@email"
and you sign up with the same email, you will become admin automatically.
To stop the containers use Ctrl + C.
Important: Scoold will connect to Para on http://para:8080
, inside the Docker container environment.
That hostname may not be accessible from your local machine or the Internet, which will break authentication redirects.
For example, when signing in with Google, you will be redirected to Google and then back to Para, on the address
specified in scoold.security.redirect_uri
. Para must be a publicly accessible on that address or the authentication
requests will fail.
If you prefer, you can run the Scoold container outside of Docker Compose.
First, have your Scoold scoold-application.conf
configuration file ready in the current directory and run this command:
$ docker run -ti -p 8000:8000 --rm -v $(pwd)/scoold-application.conf:/scoold/application.conf \
-e JAVA_OPTS="-Dconfig.file=/scoold/application.conf" erudikaltd/scoold:latest_stable
For Scoold Pro the images are located in a private registry. You can get access to it once you purchase a Pro license. The run command for Scoold Pro is similar with the only difference being the uploads volume:
$ docker run -ti -p 8000:8000 --rm -v $(pwd)/scoold-application.conf:/scoold-pro/application.conf \
-v scoold-uploads:/scoold-pro/uploads -e JAVA_OPTS="-Dconfig.file=/scoold-pro/application.conf" \
374874639893.dkr.ecr.eu-west-1.amazonaws.com/scoold-pro:latest_stable
Follow the getting started guide after starting the Para and Scoold containers.
Environment variables
JAVA_OPTS
- Java system properties, e.g. -Dscoold.port=8000
BOOT_SLEEP
- Startup delay, in seconds
There's a Helm chart inside the helm/
folder. First edit helm/scoold/values.yaml
and then you can deploy Scoold to
Kubernetes with a single command:
cd helm; helm install ./scoold
For more info, read the README at helm/README.md
.
If you purchase Scoold Pro you can get access to the private Docker registry hosted on the AWS Elastic Container Registry. Access to the private registry is not given automatically upon purchase - you have to request it. You will then be issued a special access key and secret for AWS ECR. Then execute the following BASH commands (these require AWS CLI v2.x):
- Configure AWS CLI to use the new credentials or instruct AWS CLI to use an existing credentials
profile, e.g.
export AWS_PROFILE=docker
:aws configure
- Authenticate with our ECR registry - a temporary access token will be issued for 12h:
aws ecr get-login-password --region eu-west-1 | \ docker login --username AWS --password-stdin 374874639893.dkr.ecr.eu-west-1.amazonaws.com
If the command above doesn't succeed, you won't be able to pull the latest Scoold Pro image or run docker compose
.
- Pull a Scoold Pro image with a specific tag:
aws ecr list-images --repository-name scoold-pro docker pull 374874639893.dkr.ecr.eu-west-1.amazonaws.com/scoold-pro:{tag}
You can also run docker compose up
instead - download docker-compose.yml
for Scoold Pro here
The :latest
tag is not supported but you can use :latest_stable
. The command aws get-login-password
gives you an access token to the private Docker registry which is valid for 12 hours.
For connecting Kubernetes to AWS ECR, please refer to this article.
In case you don't want to use AWS CLI for logging into the Scoold Pro registry, install the AWS ECR Docker Credentials Helper.
For license holders with access to the Scoold Pro source code, the steps to browse the Git repository are as follows:
git remote add scoold https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/scoold-pro
git fetch scoold master
Then enter your username and password for the Git repository.
You should be able to browse the source code with any of the Git graphic interface tools out there. Keep in mind that the repository is read-only, so you can only work with local branches and merge the latest changes from the main branch to your local branch.
One-click deployment
- Clone this repository and create a new Heroku app
- Add Heroku as a Git remote target and push your changes with
git push heroku master
- Go to the Heroku admin panel, under "Settings", "Reveal Config Vars" and set all the configuration variables shown
above but replace all dots in the variable names with underscores, e.g.
scoold.para_endpoint
->scoold_para_endpoint
. - Open the app in your browser at
https://{appname}.herokuapp.com
.
- Build the Scoold JAR file or acquire the Scoold Pro JAR package by buying Pro
- Download and install the Heroku CLI
- Create a Heroku app or use the id of an existing Heroku app where you want Scoold deployed
- Add the
heroku/jvm
andheroku/java
buildpacks to your Heroku app from the Settings page - Create a file
Procfile
containing this line:web: java -Dserver.port=$PORT $JAVA_OPTS -jar scoold-*.jar $JAR_OPTS
- Open a terminal in the directory containing the JAR file and execute:
$ heroku plugins:install java $ heroku deploy:jar scoold-x.y.z.jar --app myscooldapp
Pushing JARs to Heroku is useful in cases where you have an existing Heroku app which hosts a free version of Scoold, deployed through the "one-click" Heroku button, and you want to upgrade it to Scoold Pro.
On Heroku you don't have a configuration file, instead you use Heroku's environment variables to configure Scoold.
You can add each Scoold configuration property as an environment variable on the Settings page of your Heroku admin page.
Click "Reveal Config Vars". Configuration variables (config vars) must not contain dots ".", for example scoold.para_endpoint
becomes para_endpoint
. You must replace every dot with an underscore in order to convert a Scoold configuration
property to a Heroku environment variable.
Installing the Heroku CLI tool allows you to watch the Scoold logs with:
$ heroku logs --tail --app myscooldapp
Or you can restart your dyno with:
$ heroku restart --app myscooldapp
- Create a droplet running Ubuntu and SSH into it
- Create a user
ubuntu
withadduser ubuntu
- Execute (as root)
wget https://raw.githubusercontent.com/Erudika/scoold/master/installer.sh && bash installer.sh
- Copy the configuration file to your droplet:
scp scoold-application.conf root@123.234.12.34:/home/ubuntu
- Restart Scoold with
ssh root@123.234.12.34 "systemctl restart scoold.service"
- Go to
http://123.234.12.34:8000
and verify that Scoold is running (use the correct IP address of your droplet) - Configure SSL on DigitalOcean or install nginx + letsencrypt on your droplet (see instructions below)
Lightsail
- Click the button above
- Choose "Linux", "OS only", "Ubuntu 18.04 LTS" (or later version)
- Click "+ Add launch script" and copy/paste the contents of installer.sh
- Download the default SSH key pair or upload your own
- Choose the 512MB instance or larger (1GB recommended)
- Wait for the instance to start and open the IP address in your browser at port
8000
Elatic Beanstalk