"环境准备 安装 JDK,版本至少需要 JDK 8 安装 MySQL,版本至少需要 5.7,建议用 8 安装 Jetty,版本至少需要 9 安装 Maven,下载解压后设置 bin 目录到 PATH 环境变量中 编译项目 拉源码 git clone https://github.com/b3log/symphony.gi .."

Sym 安装指南

环境准备

  1. 安装 JDK,版本至少需要 JDK 8
  2. 安装 MySQL,版本至少需要 5.7,建议用 8
  3. 安装 Jetty,版本至少需要 9
  4. 安装 Maven,下载解压后设置 bin 目录到 PATH 环境变量中

编译项目

  1. 拉源码 git clone https://github.com/b3log/symphony.git
  2. 按需修改 src/main/resources/local.properties 中的数据库口令配置
jdbc.username=root
jdbc.password=
  1. 执行 mvn install 编译打包,完成后在 target 目录下将生成 symphony.war

部署

  1. 手动新建数据库 b3log_symphony,字符集用 utf8mb4,排序规则 utf8mb4_general_ci
  2. 将 war 包部署到 Jetty 的 webapps 目录下,然后启动服务器,注意查看 logs 目录下的日志情况
  3. 浏览器访问 http://localhost:8080/symphony
  4. 默认的管理员账号为 admin/admin

细节说明

  1. 数据库表会在第一次启动时自动创建
  2. 端口、访问路径等配置请参考 Latke 配置剖析
  3. 生产环境建议使用 NGINX 进行反向代理,并需要配置好 WebSocket 代理
  4. 千万不要手动修改数据库,否则可能会引发各种莫名其妙的问题

环境变量

配置文件 latke.props、local.props 以及 sym.props 支持通过环境变量指定文件路径:

常用配置

完整的配置项说明请参考 Sym 配置项说明(请注意该文档中提到的生产环境配置必须修改,否则可能存在安全隐患)

NGINX 示例

Sym 的回帖实时推送用了 WebSocket 技术,所以也需要对其配置反代。下面的示例仅供参考:

upstream backend_symphony {
    server localhost:8081;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
    listen       80;
    server_name  hacpai.com;

    location / {
        proxy_pass http://backend_symphony$request_uri;
        proxy_http_version 1.1;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

技术资料

FAQ

部署后界面样式乱了

F12 看下网络请求,然后参考这里修改配置。

如何部署在 Tomcat 中

war 包中删除 WEB-INF/classes/org/b3log/symphony/Starter.class 以及 WEB-INF/lib/jetty-*.jarwebsocket-*.jarjavax-websocket-*.jar 后再部署即可。

修改模版不生效

Tomcat 中需要在 server.xml 中加入 reloadable="true",比如:

<Context docBase="symphony" path="/symphony" reloadable="true"/> 

Logo 修改

方法一:src/main/webapp/js/symbol-defs.js 中修改 <symbol id="logo"...</symbol> 为对应的 svg
方法二:src/main/webapp/skins/classic/header.ftlsrc/main/webapp/skins/mobile/header.ftl 中修改 <svg><use xlink:href="#logo"></use></svg> 为对应的图片

更好的 Markdown 渲染

Sym 默认是使用内建的 flexmark 进行 md 渲染,可能对有的场景下的渲染效果不是很好。如果你想要获得更好的 md 渲染效果请参考这里

关于版本升级

  1. 参考 CHANGE_LOGS 进行代码合并
  2. 留意 sym.props 配置项的增减
  3. 留意 repository.json 数据库表结构变更

使用授权

关于商业版和社区版的对比请看这里,企业网站、经营性网站、以营利为目的或实现盈利的网站请购买商业版。

欢迎联系 QQ 845765 或邮箱 d@b3log.org 进行细节咨询。

  • Sym

    Sym 是一个用 Java 实现的现代化社区(论坛 / 社交网络 / 博客)平台,“下一代的社区系统,为未来而构建”。黑客派就是使用该系统搭建的 ❤️

    405 引用 • 4031 回帖 • 645 关注
  • 安装

    你若安好,便是晴天。

    55 引用 • 768 回帖
  • 部署
    19 引用 • 279 回帖
  • 文档
    51 引用 • 926 回帖 • 1 关注
优质回帖
  • 88250 1 赞同    

    请仔细看文档,需要使用 Tomcat9

  • 88250 1 赞同    

    看下 repository.json,里面有定义。

  • 88250 1 赞同    

    应该是 mvn 打包不对引起的。

165 回帖   
请输入回帖内容...
  • 88250      

    把图标放到 image/tags 下面,这个路径是相对这个位置的。

    1 回复
  • wang123321        

    不显示图片、假设路径为 a.png、则会在领域字前显示 a.png 而不显示图片

    1 回复
  • 88250      

    不好意思,看错了,刚才说的是标签添加图标的方法。领域的话要用 svg,你可以看下页面结构。

  • yux188  

    新手,给 WORDPRESS 能互通吗

    1 回复
  • 88250      

    你指的“互通”是?

  • smart

    前段时间搞了下 Sym,用的 mysql5.5 mariadb 可行,理论上支持 utf8mb4 的版本都是可用的。

  • justzt  

    按照指南论坛部署成功了,可以注册,可以发帖,可以管理,但是我的数据库里怎么一个表都没有,数据库删掉论坛照样能跑,我的数据存哪里去了。
    src/main/resources/local.properties 配置了路径,账号,密码,启动的时候看了 log 没有异常。后来还特意把数据库地址注释掉再重新跑确实是跑不起来。数据库放哪里在呢?

    1 回复
  • 88250      

    数据库是你手动建的,仔细回想一下吧。

  • yp

    除了重启 tomcat,在哪里可以让 freemarker 不缓存?

    1 回复
  • 88250      

    FAQ 里面那招不管用么?

  • luoyafeng  

    初次启动,已设置 local.properties。出现以下错误。
    严重: Error configuring application listener of class [org.b3log.symphony.SymphonyServletListener]
    java.lang.ClassNotFoundException: org.b3log.symphony.SymphonyServletListener
    各位大神,请问是什么情况?

    1 回复
  • 88250      

    打包不对

    2 回复
  • luoyafeng        

    好的 D 大!😋
    我去试试!!

  • luoyafeng        

    mvn install 之后,报如下错误:
    Tests run: 13, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.813 sec <<< FAILURE! - in TestSuite
    QueryDslBuilder(org.b3log.symphony.util.ElasticsearchTestCase) Time elapsed: 0.04 sec <<< FAILURE!
    java.lang.NoClassDefFoundError: org/joda/time/format/ISODateTimeFormat
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.elasticsearch.common.xcontent.XContentBuilder.(XContentBuilder.java:72)
    at org.elasticsearch.common.xcontent.json.JsonXContent.contentBuilder(JsonXContent.java:38)
    at org.elasticsearch.common.xcontent.XContentFactory.contentBuilder(XContentFactory.java:122)
    at org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder(XContentFactory.java:49)
    at org.elasticsearch.action.support.ToXContentToBytes.toString(ToXContentToBytes.java:73)
    at org.b3log.symphony.util.ElasticsearchTestCase.QueryDslBuilder(ElasticsearchTestCase.java:39)

    Results :

    Failed tests:
    ElasticsearchTestCase.QueryDslBuilder:39 » NoClassDefFound org/joda/time/forma...

    Tests run: 13, Failures: 1, Errors: 0, Skipped: 0

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------

    1 回复
  • 88250      

    你 mvn 环境或者网络的问题。

    1 回复
  • luoyafeng        

    感谢 D 大耐心回复。
    已解决。确实是网络问题,install 的时候下载的不完整。👍

  • caozhengbin  

    自动生成的数据库注释都是乱码怎么办

    1 回复
  • 88250      

    建库时选对字符集

    1 回复
  • caozhengbin        

    QQ20180601175940png
    字符集是对的,注释还是乱码 ,我就是想看一下注释是什么,或者您可以发一份数据库的注释给我吗😂

    1 回复
  • 88250 1 赞同      

    看下 repository.json,里面有定义。

    1 回复
  • caozhengbin        

    找到了,谢谢哥👍

  • unclehh  

    111

  • hzx956643882  

    java.lang.NoClassDefFoundError: org/b3log/latke/util/Strings
    启动 tomcat 的时候报了这个错,新手。。。

    1 回复
  • 88250 1 赞同      

    应该是 mvn 打包不对引起的。

    1 回复
  • hzx956643882        

    我刚开始配置的 pom.xml 有问题,把 C 盘.m2 下某个文件夹清空就解决了,然后 mvn install 打包试了很多次,不行。。。

    1 回复
  • 88250      

    仔细看下日志吧

    2 回复
  • hzx956643882        

    好,谢谢您

  • hzx956643882        

    多谢帮助,一切顺利。

  • GItmoe  

    卡到数据库哪走不了。D 大也没有现成的这个建表字符的教程呀😭 >

    1 回复
  • 88250      

    重启试试

    2 回复
  • GItmoe        

    不是这个意思,D 大,是 1. 手动新建数据库b3log_symphony,字符集用utf8mb4,排序规则utf8mb4_general_ci这一步卡起了,完全不会数据库的操作如果说建数据库会。但设置字符集。排序规则根本不会了😭 求指教在 mysql 命令行下的一步操作,默认用 root 用户登录了。🙏

    1 回复
  • GItmoe        

    原谅小白,学习

  • 88250      

    百度下吧

    1 回复
  • GItmoe        

    好吧。谢谢😭

  • zt940201  

    本地运行之后,使用发帖功能,输入内容之后点击发帖没有反应,数据库表也有

    1 回复
  • 88250      

    F12 看下请求并注意后台日志。

    1 回复
  • zt940201        

    换了谷歌浏览器后可以正常发帖,猎豹浏览器报如下错误

    VBSUBI2T_V1T4EKKHpng

    1 回复
  • 88250      

    收到,稍后改进下兼容。

  • 915831673  

    大佬,我的 ES 设置了账号密码,要怎么设置 es 的查询方法才能正确返回值呢?
    T75QRTDQK1OB46png
    目前是提示这个 missing authentication token for REST request ,百度了一下是要添加认证信息?这个要怎么添加?

    1 回复
  • 88250      

    es 的搜索要改部分代码才能用,你跟一下代码实现吧。

  • 915831673  

    实现那添加了 content-type,query 的值拿出来单独执行是可以用的
    KFDQ15ZZ50VZL79I_1Z5png

    1 回复
  • 88250      

    欢迎 pr

    1 回复
  • 915831673        

    pr 是啥?新装了一个没有账号密码的本地 es 是可以查询的,大佬我们这博客如果访问 es 需要账号密码的话应该到哪设置?

    1 回复
  • 88250      

    pr 是 github pullrequest 就是贡献你的修改。账号密码你研究一下嘛。

    2 回复
  • 915831673        

    好的,修改的地方其实就只有在请求头内添加了一个 ContentType, 未修改前是提示 ContentType 不支持

  • 915831673        

    大佬,还有 es 的数据是怎么和数据库的同步的啊?是需要自己弄吗?

    1 回复
  • 88250      

    不用,你看下 searchmgmtsrv

  • Andy123  

    老大,这是权限的问题?怎么解决?java.io.IOException: Can't create: ./upload

    1 回复
  • 88250      

    配置成绝对路径

  • ifnot  

    请问是不支持 mysql8 吗?

    1 回复
请输入回帖内容 ...