Skip to content

Remark42

Office Web - Source - Docker Image - Document


Remark42 是一款可自行托管的、轻量级且简洁(却功能完备)的评论引擎,不会窥探用户信息。它可以嵌入到博客、文章或读者发表评论的任何其他地方。

  • 支持通过谷歌、脸书、微软、GitHub、苹果、雅虎、Patreon、Discord和Telegram进行社交登录
  • 支持通过电子邮件登录
  • 可选匿名访问
  • 支持多级嵌套评论,有树形和纯文本两种展示方式
  • 支持从Disqus和WordPress导入评论
  • 支持Markdown格式,配备友好的格式化工具栏
  • 版主可以删除评论并封禁用户
  • 具备投票、置顶和验证系统
  • 评论可排序
  • 支持拖放上传图片
  • 可提取近期评论、进行交叉发布
  • 支持为所有评论及每篇文章生成RSS订阅
  • 支持向管理员发送Telegram、Slack、Webhook和电子邮件通知(有新评论时获得通知)
  • 支持向用户发送电子邮件和Telegram通知(有人回复您的评论时获得通知)
  • 可将数据导出为JSON格式,并自动备份
  • 无需外部数据库,所有内容都嵌入到单个数据文件中
  • 完全容器化,可通过一条命令完成部署
  • 自包含的可执行文件可直接部署到Linux、Windows和macOS系统上
  • 界面简洁、轻量且可定制,有白色和深色主题
  • 单个实例支持多站点模式
  • 支持自动SSL集成(直接集成以及通过nginx-le
  • 注重隐私

环境变量

完整参数列表

命令行环境变量默认值描述
urlREMARK_URLRemark42服务器的URL,必填
secretSECRET用于签署JWT的共享密钥,应为随机、长且难以猜测的字符串,必填
siteSITEremark站点名称(可多个),多值
store.typeSTORE_TYPEbolt存储类型,boltrpc
store.bolt.pathSTORE_BOLT_PATH./varbolt文件的父目录
store.bolt.timeoutSTORE_BOLT_TIMEOUT30sboltdb访问超时时间
store.rpc.apiSTORE_RPC_APIrpc扩展API的URL
store.rpc.timeoutSTORE_RPC_TIMEOUTHTTP超时时间(默认:5秒)
store.rpc.auth_userSTORE_RPC_AUTH_USER基本认证用户名
store.rpc.auth_passwdSTORE_RPC_AUTH_PASSWD基本认证用户密码
admin.typeADMIN_TYPEshared管理员存储类型,sharedrpc
admin.rpc.apiADMIN_RPC_APIrpc扩展API的URL
admin.rpc.timeoutADMIN_RPC_TIMEOUTHTTP超时时间(默认:5秒)
admin.rpc.auth_userADMIN_RPC_AUTH_USER基本认证用户名
admin.rpc.auth_passwdADMIN_RPC_AUTH_PASSWD基本认证用户密码
admin.rpc.secret_per_siteADMIN_RPC_SECRET_PER_SITE启用按aud(在此处为site_id)检索JWT密钥
admin.shared.idADMIN_SHARED_ID管理员ID(用户ID列表),多值
admin.shared.emailADMIN_SHARED_EMAILadmin@${REMARK_URL}管理员邮箱,多值
backupBACKUP_PATH./var/backup备份位置
max-backMAX_BACKUP_FILES10保留的最大备份文件数
cache.typeCACHE_TYPEmem缓存类型,redis_pub_submemnone
cache.redis_addrCACHE_REDIS_ADDR127.0.0.1:6379Redis PubSub实例的地址,开启 redis_pub_sub 缓存以实现分布式缓存
cache.max.itemsCACHE_MAX_ITEMS1000缓存项的最大数量,0 - 无限制
cache.max.valueCACHE_MAX_VALUE65536缓存值的最大大小,0 - 无限制
cache.max.sizeCACHE_MAX_SIZE50000000所有缓存值的最大大小,0 - 无限制
avatar.typeAVATAR_TYPEfs头像存储类型,fsbolturi
avatar.fs.pathAVATAR_FS_PATH./var/avatarsfs存储的头像位置
avatar.bolt.fileAVATAR_BOLT_FILE./var/avatars.dbbolt存储头像文件的位置
avatar.uriAVATAR_URI./var/avatars头像存储URI
avatar.rsz-lmtAVATAR_RESIZE0(已禁用)保存头像时调整大小的最大图像尺寸
image.typeIMAGE_TYPEfs图像存储类型,fsboltrpc
image.fs.pathIMAGE_FS_PATH./var/pictures图像的永久存储位置
image.fs.stagingIMAGE_FS_STAGING./var/pictures.staging图像的临时存储位置
image.fs.partitionsIMAGE_FS_PARTITIONS100图像分区数量
image.bolt.fileIMAGE_BOLT_FILE/var/pictures.db图像bolt文件位置
image.rpc.apiIMAGE_RPC_APIrpc扩展API的URL
image.rpc.timeoutIMAGE_RPC_TIMEOUTHTTP超时时间(默认:5秒)
image.rpc.auth_userIMAGE_RPC_AUTH_USER基本认证用户名
image.rpc.auth_passwdIMAGE_RPC_AUTH_PASSWD基本认证用户密码
image.max-sizeIMAGE_MAX_SIZE5000000图像文件的最大大小
image.resize-widthIMAGE_RESIZE_WIDTH2400调整大小后图像的宽度
image.resize-heightIMAGE_RESIZE_HEIGHT900调整大小后图像的高度
auth.ttl.jwtAUTH_TTL_JWT5mJWT的生存时间
auth.ttl.cookieAUTH_TTL_COOKIE200hcookie的生存时间
auth.send-jwt-headerAUTH_SEND_JWT_HEADERfalse以头部而非服务器设置的cookie形式发送JWT;启用此选项后,前端会将JWT存储在客户端cookie中。请参阅安全注意事项
auth.same-siteAUTH_SAME_SITEdefault设置cookie的同站策略(defaultnonelaxstrict
auth.apple.cidAUTH_APPLE_CID苹果客户端ID(应用ID或服务ID)
auth.apple.tidAUTH_APPLE_TID苹果服务ID
auth.apple.kidAUTH_APPLE_KID苹果私钥ID
auth.apple.private-key-filepathAUTH_APPLE_PRIVATE_KEY_FILEPATH/srv/var/apple.p8苹果私钥文件位置
auth.google.cidAUTH_GOOGLE_CID谷歌OAuth客户端ID
auth.google.csecAUTH_GOOGLE_CSEC谷歌OAuth客户端密钥
auth.facebook.cidAUTH_FACEBOOK_CID脸书OAuth客户端ID
auth.facebook.csecAUTH_FACEBOOK_CSEC脸书OAuth客户端密钥
auth.microsoft.cidAUTH_MICROSOFT_CID微软OAuth客户端ID
auth.microsoft.csecAUTH_MICROSOFT_CSEC微软OAuth客户端密钥
auth.microsoft.tenantAUTH_MICROSOFT_TENANTcommonAzure AD租户ID、域名或 “common”
auth.github.cidAUTH_GITHUB_CIDGitHub OAuth客户端ID
auth.github.csecAUTH_GITHUB_CSECGitHub OAuth客户端密钥
auth.patreon.cidAUTH_PATREON_CIDPatreon OAuth客户端ID
auth.patreon.csecAUTH_PATREON_CSECPatreon OAuth客户端密钥
auth.discord.cidAUTH_DISCORD_CIDDiscord OAuth客户端ID
auth.discord.csecAUTH_DISCORD_CSECDiscord OAuth客户端密钥
auth.telegramAUTH_TELEGRAMfalse启用Telegram认证(必须存在telegram.token)
auth.yandex.cidAUTH_YANDEX_CID雅虎OAuth客户端ID
auth.yandex.csecAUTH_YANDEX_CSEC雅虎OAuth客户端密钥
auth.devAUTH_DEVfalse本地OAuth2服务器,仅用于开发模式
auth.anonAUTH_ANONfalse启用匿名登录
auth.email.enableAUTH_EMAIL_ENABLEfalse启用通过电子邮件认证
auth.email.fromAUTH_EMAIL_FROM发件人邮箱(例如 john.doe@example.com"John Doe"<john.doe@example.com>
auth.email.subjAUTH_EMAIL_SUBJremark42 confirmation邮件主题
auth.email.content-typeAUTH_EMAIL_CONTENT_TYPEtext/html邮件内容类型
notify.usersNOTIFY_USERS用户通知类型(telegramemail),多值
notify.adminsNOTIFY_ADMINS管理员通知类型(telegramslackwebhook 和/或 email),多值
notify.queueNOTIFY_QUEUE100通知队列大小
notify.telegram.chanNOTIFY_TELEGRAM_CHAN管理员通知的Telegram频道ID
notify.slack.tokenNOTIFY_SLACK_TOKENSlack令牌
notify.slack.chanNOTIFY_SLACK_CHANgeneral管理员通知的Slack频道
notify.webhook.urlNOTIFY_WEBHOOK_URL管理员通知的Webhook通知URL
notify.webhook.templateNOTIFY_WEBHOOK_TEMPLATE{"text": {{.TextescapeJSONString}}}
notify.webhook.headersNOTIFY_WEBHOOK_HEADERS格式为Header1:Value1,Header2:Value2,... 的HTTP头部
notify.webhook.timeoutNOTIFY_WEBHOOK_TIMEOUT5sWebhook连接超时时间
notify.email.from_addressNOTIFY_EMAIL_FROM发件人邮箱地址(例如 john.doe@example.com"John Doe"<john.doe@example.com>
notify.email.verification_subjNOTIFY_EMAIL_VERIFICATION_SUBJEmail verification验证消息主题
telegram.tokenTELEGRAM_TOKENTelegram令牌(用于认证和Telegram通知)
telegram.timeoutTELEGRAM_TIMEOUT5sTelegram连接超时时间
smtp.hostSMTP_HOSTSMTP主机
smtp.portSMTP_PORTSMTP端口
smtp.usernameSMTP_USERNAMESMTP用户名
smtp.passwordSMTP_PASSWORDSMTP密码
smtp.login_authSMTP_LOGIN_AUTHfalse启用LOGIN认证而非PLAIN认证
smtp.tlsSMTP_TLSfalse为SMTP启用TLS
smtp.starttlsSMTP_STARTTLSfalse为SMTP启用StartTLS
smtp.insecure_skip_verifySMTP_INSECURE_SKIP_VERIFYfalse跳过SMTP证书验证
smtp.timeoutSMTP_TIMEOUT10sSMTP TCP连接超时时间
ssl.typeSSL_TYPEnone - HTTP,static - HTTPS,auto - HTTPS + le
ssl.portSSL_PORT8443HTTPS服务器端口
ssl.certSSL_CERTcert.pem文件路径
ssl.keySSL_KEYkey.pem文件路径
ssl.acme-locationSSL_ACME_LOCATION./var/acme存储获取的le证书的目录
ssl.acme-emailSSL_ACME_EMAIL接收LE通知的管理员邮箱
max-commentMAX_COMMENT_SIZE2048评论大小限制
min-commentMIN_COMMENT_SIZE0评论最小大小限制,0 - 无限制
max-votesMAX_VOTES-1每条评论的投票限制,-1 - 无限制
votes-ipVOTES_IPfalse限制来自同一IP的投票
anon-voteANON_VOTEfalse允许匿名用户投票,同时需启用VOTES_IP
votes-ip-timeVOTES_IP_TIME5m同一IP投票限制时间,0s - 无限制
low-scoreLOW_SCORE-5低分数阈值
critical-scoreCRITICAL_SCORE-10关键分数阈值
positive-scorePOSITIVE_SCOREfalse限制评论分数仅为正数
restricted-wordsRESTRICTED_WORDS评论中禁止使用的单词(可使用 *),多值
restricted-namesRESTRICTED_NAMES用户禁止使用的名称,多值
edit-timeEDIT_TIME5m编辑窗口;设置为 0 以禁用评论编辑和临时图像清理
admin-editADMIN_EDITfalse管理员无限制编辑
read-ageREADONLY_AGE评论的只读期限,单位为天
image-proxy.http2httpsIMAGE_PROXY_HTTP2HTTPSfalse启用图像的HTTP -> HTTPS代理
image-proxy.cache-externalIMAGE_PROXY_CACHE_EXTERNALfalse启用将外部图像缓存到当前图像存储中
emojiEMOJIfalse启用表情符号支持
simple-viewSIMPLE_VIEWfalse仅包含基本信息的最小化用户界面
proxy-corsPROXY_CORSfalse禁用内部CORS并将其委托给代理
allowed-hostsALLOWED_HOSTS允许所有通过CSP 'frame-ancestors' 限制允许嵌入评论的主机/来源
addressREMARK_ADDRESS所有接口Web服务器监听地址
portREMARK_PORT8080Web服务器端口
web-rootREMARK_WEB_ROOT./webWeb服务器根目录
update-limitUPDATE_LIMIT0.5每秒更新限制
subscribers-onlySUBSCRIBERS_ONLYfalse仅允许Patreon订阅者评论
disable-signatureDISABLE_SIGNATUREfalse禁用服务器头部签名
disable-fancy-text-formattingDISABLE_FANCY_HTML_FORMATTINGfalse禁用花哨的评论文本格式(替换引号、破折号、分数等)
admin-passwdADMIN_PASSWD无(已禁用)admin 基本认证的密码
dbgDEBUGfalse调试模式
  • AUTH 方式必须有其中一个,可以设置为匿名 AUTH_ANON=true,否则无法正常使用。

Released under the Apache-2.0 License.