前言

今天给大家带来在国外市占率最高的论坛程序discourse的搭建教程,教程开始前,请自备域名和邮箱。

域名的购买相信对大家来说都不陌生,只要有任何一家的域名,能将域名解析到自己的vps上即可。
这里的邮箱指的是那些用来发送商业邮件的事务性邮箱,具体如何免费申请这些邮箱可以参考如有乐享前辈关于国际版飞书免费邮箱的申请教程

项目论坛:https://meta.discourse.org/

Discourse 官方网站:https://www.discourse.org/

Discourse 官方安装文档:https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md

Discourse是什么?

1714280181510.webp

Discourse 是一种开源的现代化论坛软件,而不是专门用于博客的工具。它由Jeff Atwood、Robin Ward和Sam Saffron等人共同创建,并以其用户友好、实时互动和社交功能而闻名。Discourse 设计用于促进在线社区的交流和讨论,并支持广泛的主题。
以下是 Discourse 论坛的一些主要特点:

  • 实时互动: Discourse 支持实时更新,允许用户以一种对话的方式进行交流,而不是传统论坛中的“帖子”形式。这种实时性使得用户能够更自然地参与讨论。
  • 移动友好: Discourse 设计为适应不同屏幕大小,使其在移动设备上浏览和参与讨论变得更加方便。
  • 用户信任级别: Discourse 通过用户在社区中的活跃度和贡献程度来确定用户的信任级别。这有助于防范滥用和垃圾信息。
  • 强大的搜索功能: 论坛支持强大的搜索功能,帮助用户轻松找到他们感兴趣的主题和讨论。
  • 插件系统: Discourse 提供了丰富的插件系统,可以根据需求进行扩展,从而定制和增强论坛的功能。

开始之前

安装Docker🐳

准备一个域名

🔔 Discourse 无法通过 IP 地址运行,您必须拥有域名才能继续。

设置电子邮件

⚠️ 电子邮件对于 Discourse 中的帐户创建和通知至关重要。如果您在引导之前没有正确配置电子邮件,您的网站将会损坏!

安装

创建新的云服务器

Ubuntu Server 当前支持的 LTS 版本的默认设置工作正常。至少需要具有现代内核版本 的 64 位 Linux 操作系统。

默认的1 GB RAM 对于小型 Discourse 社区来说效果很好。建议较大的社区使用 2 GB RAM

安装discourse

将~官方 Discourse Docker 镜像~克隆到/var/discourse.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

需要以 root 身份完成其余的设置和引导过程。

编辑discourse配置

启动设置工具

./discourse-setup

出现提示时回答以下问题:

Hostname for your Discourse? [discourse.example.com]: 
Email address for admin account(s)? [me@example.com,you@example.com]: 
SMTP server address? [smtp.example.com]: 
SMTP port? [587]: 
SMTP user name? [user@example.com]: 
SMTP password? [pa$$word]: 
Let's Encrypt account email? (ENTER to skip) [me@example.com]: 
Optional Maxmind License key () [xxxxxxxxxxxxxxxx]:

从电子邮件设置中获取 SMTP 详细信息,请务必完成该部分。
Let’s Encrypt 帐户设置旨在为您的网站提供免费的 HTTPS 证书,如果希望网站安全,请务必进行设置。
这将代表生成一个app.yml配置文件,然后启动引导程序。Bootstrapping 需要2-8 分钟来设置您的 Discourse。如果需要在引导后更改这些设置,可以./discourse-setup再次运行(它将重新使用文件中以前的值)或使用和 then/containers/app.yml手动编辑,否则更改将不会生效。nano./launcher rebuild app

启动discourse

引导完成后,您的 Discourse 应该可以通过您之前输入的域名在网络浏览器中访问。

1714280339057.webp

注册新帐户并成为管理员

使用您在引导之前输入的电子邮件地址之一注册新的管理员帐户。

1714280422545.webp

完成设置向导后,应该会看到“员工主题”和“请先阅读我:管理员快速入门指南”。本指南包含进一步配置和自定义 Discourse 安装的建议。1714280444338.webp

安装后维护

  • 强烈建议为操作系统打开自动安全更新。在 Ubuntu 中使用该dpkg-reconfigure -plow unattended-upgrades命令。
  • 如果使用密码而不是 SSH 密钥,请务必强制使用强 root 密码。在 Ubuntu 中使用该apt install libpam-cracklib包。建议fail2ban将尝试密码重试超过 3 次的任何 IP 地址阻止 10 分钟。
  • Ubuntu:apt install fail2ban

⠀💡 当 Discourse 新版本发布时,Discourse 会发送电子邮件通知。请保持最新状态以获取最新功能和安全修复。
要将Discourse 升级到最新版本,请https://discourse.example.com/admin/upgrade在浏览器中访问并单击升级按钮。
或者,可以 ssh 进入您的服务器并使用以下命令重建:

cd /var/discourse
git pull
./launcher rebuild app

安装插件

你需要了解如何使用 GitHub 存储库,具体来说,如何获取或复制 git clone URL 294以及如何 *.yml使用nano通过终端编辑YAML()文件,特别是如何在nano上保存和退出 118。 YAML 文件强烈遵循缩进,因此在复制、粘贴和编辑 *.yml Discourse 实例所需的内容时,请务必遵守这些缩进。

  • 复制插件的 GitHub git clone url。

  • 访问容器的 app.yml文件(位于 <span> </span>/var/discourse/containers/

    cd /var/discourse
    nano containers/app.yml
    
  • 将插件的存储库 URL 添加到容器的 app.yml文件中:

    hooks:
      after_code:
        - exec:
            cd: $home/plugins
            cmd:
              - sudo -E -u discourse git clone https://github.com/discourse/docker_manager.git
              - sudo -E -u discourse git clone https://github.com/discourse/discourse-solved.git
    

    在包含 git clone的行下方添加插件的url git clone https://github.com/discourse/docker_manager.git

    遵循现有的线路格式 docker_manager.git;如果不包含 sudo -E -u discourse则插入 - git clone https://github.com/discourse/discourse-solved.git

  • 重建容器:

    cd /var/discourse
    ./launcher rebuild app
    

    就这样,你已经成功安装了 Discourse 实例上的插件!

如何卸载插件

要删除插件,只需从文件 - git clone https://github.com/...中删除该行 app.yml并通过以下方式重建您的网站

cd /var/discourse
./launcher rebuild app

插件列表(可以在github搜索名称获取链接)

官方插件

discourse/discourse-activity-pub
discourse/discourse-adplugin
discourse/discourse-affiliate
discourse/discourse-ai
discourse/discourse-akismet
discourse/discourse-alert
discourse/discourse-algolia
discourse/discourse-amazon-sns
discourse/discourse-animated-avatars
discourse/discourse-anonymous-moderators
discourse/discourse-antivirus
discourse/discourse-apple-auth
discourse/discourse-assign
discourse/discourse-auth-no-email
discourse/discourse-authentication-validations
discourse/discourse-auto-deactivate
discourse/discourse-auto-lock-pms
discourse/discourse-bbcode
discourse/discourse-bbcode-color
discourse/discourse-bcc
discourse/discourse-brightcove
discourse/discourse-browser-history
discourse/discourse-cakeday
discourse/discourse-calendar
discourse/discourse-categories-suppressed
discourse/discourse-category-experts
discourse/discourse-cdn-experiment
discourse/discourse-characters-required
discourse/discourse-chart
discourse/discourse-chat-integration
discourse/discourse-client-performance
discourse/discourse-code-review
discourse/discourse-codebytes-plugin
discourse/discourse-data-explorer
discourse/discourse-deprecation-collector
discourse/discourse-development-auth
discourse/discourse-docs
discourse/discourse-email-short-date-format
discourse/discourse-encrypt
discourse/discourse-extra-group-classes
discourse/discourse-fingerprint
discourse/discourse-folksy-image
discourse/discourse-follow
discourse/discourse-fontawesome-pro
discourse/discourse-gamification
discourse/discourse-geoblocking
discourse/discourse-github
discourse/discourse-github-user-infos-view
discourse/discourse-github-verification
discourse/discourse-global-filter
discourse/discourse-google-one-tap
discourse/discourse-gradle-issue
discourse/discourse-graphviz
discourse/discourse-group-category-banner-ads
discourse/discourse-group-membership-ip-block
discourse/discourse-group-tag-associations
discourse/discourse-group-tracker
discourse/discourse-hCaptcha
discourse/discourse-instant-search
discourse/discourse-intercom
discourse/discourse-invite-tokens
discourse/discourse-jira
discourse/discourse-jwt
discourse/discourse-kolide
discourse/discourse-lazy-videos
discourse/discourse-linkedin-auth
discourse/discourse-local-site-contacts
discourse/discourse-login-with-amazon
discourse/discourse-logster-rate-limit-checker
discourse/discourse-logster-transporter
discourse/discourse-lti
discourse/discourse-marketo
discourse/discourse-math
discourse/discourse-meteor
discourse/discourse-microsoft-auth
discourse/discourse-moderator-attention
discourse/discourse-multilingual
discourse/discourse-needs-love
discourse/discourse-nested-posts
discourse/discourse-newsletter-integration
discourse/discourse-no-bump
discourse/discourse-oauth2-basic
discourse/discourse-onboarding-banner
discourse/discourse-openid-connect
discourse/discourse-password-expiry
discourse/discourse-patreon
discourse/discourse-perspective-api
discourse/discourse-pirate-speak
discourse/discourse-plugin-skeleton
discourse/discourse-policy
discourse/discourse-post-voting
discourse/discourse-prepend-tags-in-topic-slug
discourse/discourse-prioritize-generic-onebox
discourse/discourse-prometheus
discourse/discourse-prometheus-alert-receiver
discourse/discourse-ratings
discourse/discourse-reactions
discourse/discourse-restricted-replies
discourse/discourse-rss-polling
discourse/discourse-salesforce
discourse/discourse-saml
discourse/discourse-saved-searches
discourse/discourse-shared-edits
discourse/discourse-signatures
discourse/discourse-sketchup-3dwh-onebox
discourse/discourse-sketchup-sso
discourse/discourse-solved
discourse/discourse-staff-alias
discourse/discourse-steam-login
discourse/discourse-subscriptions
discourse/discourse-surveys
discourse/discourse-tag-by-group
discourse/discourse-tag-topic-user-device
discourse/discourse-teambuild
discourse/discourse-templates
discourse/discourse-theme-creator
discourse/discourse-tooltips
discourse/discourse-topic-noindex
discourse/discourse-topic-voting
discourse/discourse-translator
discourse/discourse-tudiabetes
discourse/discourse-unhandled-tagger
discourse/discourse-unlock
discourse/discourse-url-filters
discourse/discourse-user-card-badges
discourse/discourse-user-notes
discourse/discourse-video
discourse/discourse-vk-auth
discourse/discourse-watch-category-mcneel
discourse/discourse-watched-word-exceptions
discourse/discourse-whos-online
discourse/discourse-wikimedia-auth
discourse/discourse-yearly-review
discourse/discourse-zendesk-plugin
discourse/discourse-zoom
discourse/docker_manager
discourse/folksy-store-name
discourse/twitter-profile-link
discourse/twitter-topic-group-button

第三方插件

acaporrini/discourse-auto-bookmarks
Ahmedgagan/discourse-custom-trust-level
AlexRabolin/modal-window
algolia/discourse-algolia
angusmcleod/discourse-header-search
BeastNet/trust-level-groups
berlindiamonds/discourse-sync-base
bernd/discourse-slack-plugin
bolariin/discourse-response-bot
cfstras/discourse-konami
Codecademy/discourse-codebytes-plugin
cpradio/discourse-plugin-composer-help-button
cpradio/discourse-plugin-imgflip
cpradio/discourse-plugin-vb-emoticons
cpradio/vb_emoji
critcola/discourse-clyp-onebox
critcola/discourse-overwatch-hero-icons
critcola/discourse-playstv-onebox
critcola/discourse-post-abbreviations
crob611/discourse-image-gallery
danskdynamit/discourse-hot-topics
danskdynamit/discourse-links-category
davidtaylorhq/discourse-auto-suspend
davidtaylorhq/discourse-dev-login
davidtaylorhq/discourse-telegram-notifications
debtcollective/discourse-sentry
discourse-league/dl-license-keys
dtchau/discourse-plugin-autoplay
Ebsy/discourse-nationalflags
fantasticfears/discourse-chinese-localization-pack
fantasticfears/discourse-etiquette
featheredtoast/discourse-pushover-notifications
featheredtoast/discourse-pwned-passwords
gdpelican/mingle
gdpelican/retort
HMSAB/discourse-email-extraction
HMSAB/discourse-file-attachment-whisper
HMSAB/discourse-private-topic
HMSAB/discourse-staff-topic-generation
https://gitlab.com/gitlab-org/discourse-omniauth-gitlab.git
iunctis/discourse-formatting-toolbar
jahan-ggn/discourse-notifier
jannolii/discourse-topic-trade-buttons
jgujgu/discourse-blocks
jgujgu/discourse-guest-gate
joebuhlig/discourse-mlm-daily-summary
jonmbake/discourse-ldap-auth
JSey/reply-by-email-TL
jsorchik/changetip-discourse
kasperpeulen/discourse-mathjax
kcoop/discourse-blogger-plugin
LeoDavidson/discourse-directoryopus
leodavidson/discourse-forcemoderation
LeoDavidson/discourse-reset-bump
LeoMcA/discourse-wildapricot-auth
ligthyear/discourse-plugin-checklist
ligthyear/discourse-plugin-pm-button
liliakai/discourse-chargebee
marcoceppi/discourse-ubuntu-sso
matthieu-lapeyre/wp-discourse-topic-integration
mcwumbly/discourse-slackdoor
merefield/discourse-discord-bot
merefield/discourse-frotz
merefield/discourse-onebox-assistant
MiguelAngelLV/steamuser-onebox
Mittineague/discourse-kinder-guardian
Mittineague/discourse-plugin-outlet-locations
mlamarque/algoliasearch-discourse
mlamarque/yammer-connect
mooosu/wechat_qrconnect
mozilla/discourse-auto-email-in
mozilla/discourse-expose-emails-in
mozilla/discourse-post-read-email
mrloop/garmin_connect_onebox
muhlisbc/discourse-custom-activity-summary-template
naveed-ahmad/marvelapp_onebox
nbianca/discourse-favorites
netdeamon/discourse-googlebooks
netdeamon/force-signin
notriddle/discourse-shadowban
nunof07/discourse-mumble
paviliondev/discourse-category-lockdown
paviliondev/discourse-custom-wizard
paviliondev/discourse-events
paviliondev/discourse-knowledge-base
paviliondev/discourse-layouts
paviliondev/discourse-legal-tools
paviliondev/discourse-locations
paviliondev/discourse-multilingual
paviliondev/discourse-news
paviliondev/discourse-ratings
paviliondev/discourse-tickets
paviliondev/discourse-topic-previews
pfaffman/discourse-avatar-name-first-letter
pfaffman/discourse-doi-resolver
pmusaraj/discourse-onesignal
PoloGT/abbreviation-discourse-plugin
procourse/discourse-full-screen-videos-plugin
procourse/procourse-static-pages
rcfox/Discourse-Webhooks
reallyreally/discourse-mailgun
samsaffron/blog
sekhat/discourse-yuml
shivpkumar/Zendesk-Plugin
singerscreations/discourse-stopforumspam
sirideain/discourse-mark
sman591/discourse-nntp-bridge
spirobel/discourse-basic-editor
spirobel/projects
sudaraka94/discourse-opencollective-integration
sudaraka94/preventing-malicious-linking-plugin
sylque/discourse-multilingual-post
sylque/discpage
sylque/docuss
synweap15/discourse-voice-record
techapj/discourse-custom-topic-button
techapj/discourse-topic-group-button
tgxworld/discourse-graphql
ThomDietrich/discourse-plugin-code-fences-buttons
TomGrobbe/discourse-topic-limit
Toxuru/discourse-sidebar-categories
unfoldingWord-dev/discourse-mermaid
unixneo/discourse-container-names-with-gon
unixneo/discourse-remove-canonical
vikhyat/discourse-persona
vinkas0/discourse-bbcode-lock
vinkas0/discourse-facebook-onebox
VinkasHQ/discourse-timeline
VonLion/discourse-menu-icon
worldismine/Duplicate-Notification-Terminator
worldismine/Restore-PM-Mentions
xfalcox/discourse-backups-to-dropbox
zh99998/discourse-username-localization

本站已装插件

        cmd:
          - git clone https://github.com/discourse/discourse-air.git
          - git clone https://github.com/discourse/discourse-user-card-badges.git
          - git clone https://github.com/discourse/reader-mode.git
          - git clone https://github.com/discourse/discourse-search-banner.git
          - git clone https://github.com/discourse/Discourse-easy-footer.git
          - git clone https://github.com/discourse/category-boxes-topic-count.git
          - git clone https://github.com/discourse/discourse-sidebar-category-nav.git
          - git clone https://github.com/discourse/discourse-halloween-decorations.git
          - git clone https://github.com/discourse/image-optimizer.git
          - git clone https://github.com/discourse/discourse-header-submenus.git
          - git clone https://github.com/discourse/discourse-heroicons.git
          - git clone https://github.com/discourse/discourse-insert-video.git
          - git clone https://github.com/discourse/discourse-post-quote-copy-to-clipboard-component.git
          - git clone https://github.com/discourse/discourse-iframe-lightboxes.git
          - git clone https://github.com/discourse/discourse-signatures.git
          - git clone https://github.com/discourse/discourse-bbcode-color.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-animated-avatars.git
          - git clone https://github.com/discourse/squoosh.git
          - git clone https://github.com/discourse/discourse-offline-page.git

反向代理

参考教程:安装及使用

⚠️Nginx Proxy Manager(以下简称NPM)会用到80、443端口,所以本机不能占用(比如原来就有Nginx)

互联网使用请确保完成了域名解析