"环境准备 安装 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 回帖   
请输入回帖内容...
  • jerry2yu  

    @8825

    企业网站、经营性网站、以营利为目的或实现盈利的网站请购买商业版

    商业版的要求与社区版的 GPL 协议有冲突吧?社区版的 GPL 协议是允许商家使用社区版的。

    1 回复
  • 88250      

    嗯,你说的对。Sym 的社区版是以 GPL 发行,只需要完全遵守协议就可以使用。

  • 321pkyou  

    二次开发成博客容易吗?

    1 回复
  • 88250      

    博客的话直接用 solo

    1 回复
  • elroystar        

    大神:
    我为什么启动之后一直报无法找到 key whitelist.tags 这个属性呀

    1 回复
  • 88250      

    sym.props 配置文件是不是被你改坏了,默认是有这个配置项的。

    1 回复
  • elroystar  

    重新建了一个工作空间之后,又能启动了...

  • elroystar        

    可能是我下载的 tomcat 有问题,不是 windows 版本的

    1 回复
  • 88250      

    开发环境的话用 mvn 插件更简单些:mvn jetty:run

  • elroystar  

    为啥我启动成功之后,用户一登录,整个网站就变成英文的啦?

    1 回复
  • 88250      

    用户可以设置自己的语言,管理员可以设置默认全局的语言。

  • gerry  

    项目可以支持内嵌容器,main 方法启动么?

    1 回复
  • 88250      

    目前不支持

    1 回复
  • 295524115        

    imagepng

    1 回复
  • 88250      

    F12 看下请求,修改一下 latke.props,具体请参考 Latke 配置剖析

    2 回复
  • 295524115        

    imagepng

  • 295524115        

    图片本来就没有的么

    1 回复
  • 88250      

    这个是个 bug 刚修复,你 pull 最新代码就应该好了。

    1 回复
  • 295524115        

    你好!好像移动端普通用户看不到发帖的图标呀,是不是因为权限问题

    1 回复
  • 88250      

    注册后都可以发帖的

    1 回复
  • EricIsCoding  

    想问下 如何在 帖子里面 加入 想播放的音乐呢 ?
    我尝试了 先录音,生成了如下代码:

    <audio controls="controls" src="http://localhost:8080/upload/2160de8be73c46148348d39ecee11cce_blob.wav"></audio>
    

    于是 将 目标 音频地址 替换 中 SRC 结果
    还是无法播放。
    是否 限制了 必须是来自于本地的资源呢 ?

    还是可以配置 域名 IP 白名单呢?
    求大神 给个 思路😄

  • EricIsCoding        

    想问下 如何在 帖子里面 加入 想播放的音乐呢 ?
    我尝试了 先录音,生成了如下代码:

    <audio controls="controls" src="http://localhost:8080/upload/2160de8be73c46148348d39ecee11cce_blob.wav"></audio>
    

    于是 将 目标 音频地址 替换 中 SRC 结果
    还是无法播放。
    是否 限制了 必须是来自于本地的资源呢 ?

    还是可以配置 域名 IP 白名单呢?
    求大神 给个 思路😄

    1 回复
  • 88250      

    看下 MP3Players 这类以及引用的地方就明白了。

    1 回复
  • 295524115        

    你好!user 表我加了个字段,然后后台就报错
    imagepng

    1 回复
  • 88250      

    repository.json 里面加一下。

    3 回复
  • 295524115        

    好像移动端上传文件后,在帖子那显示空白

  • 295524115        

    user 表 oid 可以改成 64 为么

    1 回复
  • 295524115        

    现在又报错了
    imagepng

  • 88250      

    最好不要改,除非你看了 Latke 相关代码。

    1 回复
  • 295524115        

    请教一下,我想点用发帖子的接口发帖子,然后提示这个

    imagepng

    1 回复
  • 88250      

    需要填充 csrf token 头,具体可以 F12 抓包看下。

    2 回复
  • 295524115        

    csrf 是登录后返回的么

  • 295524115        

    imagepng
    这个是怎么获取的

    1 回复
  • 88250      

    页面里面有。社区版没有提供 API,我建议你自己开发一下,不要用现有的提交接口。

    1 回复
  • 295524115        

    如果我不用 CSRFCheck 会有什么严重的后果么

    1 回复
  • 88250      

    存在 CSRF 攻击风险。

    1 回复
  • 295524115        

    社区版 symphony 有移动端接口么

    1 回复
  • 88250      

    没有。

  • wzj123456  

    我想问 报以下这个错误是什么情况呢
    严重: Servlet /symphony threw load() exception
    java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.DefaultServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1247)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1897)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

  • yuan111  

    安装你的步骤,为什么包这个错呀!是什么原因?
    Failed to open JAR [null]
    java.io.FileNotFoundException: F:\java\apache-tomcat-7.0.82\temp\0-symphony\WEB-INF\lib\UserAgentUtils-1.20.jar (系统找不到指定的路径。)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.(ZipFile.java:215)
    at java.util.zip.ZipFile.(ZipFile.java:145)
    at java.util.jar.JarFile.(JarFile.java:154)
    at java.util.jar.JarFile.(JarFile.java:118)
    at org.apache.catalina.loader.WebappClassLoaderBase.openJARs(WebappClassLoaderBase.java:3108)
    at org.apache.catalina.loader.WebappClassLoaderBase.findResourceInternal(WebappClassLoaderBase.java:3397)
    at org.apache.catalina.loader.WebappClassLoaderBase.findResource(WebappClassLoaderBase.java:1458)
    at org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1686)
    at org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc(WebappClassLoaderBase.java:2282)
    at org.apache.catalina.loader.WebappClassLoaderBase.clearReferences(WebappClassLoaderBase.java:2223)
    at org.apache.catalina.loader.WebappClassLoaderBase.stop(WebappClassLoaderBase.java:2123)
    at org.apache.catalina.loader.WebappLoader.stopInternal(WebappLoader.java:663)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:221)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5875)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:221)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:149)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1015)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:991)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

    1 回复
  • 88250 1 赞同      

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

  • oswuhan  

    帕金森……

  • chenlei65368  

    社区版,管理功能不能删除标签?

    1 回复
  • 88250      

    没有引用的标签可以点清理

    1 回复
  • chenlei65368        

    好了,还不是很熟悉

  • chenlei65368  

    书单是属于领域管理吗,我想把它去掉

    1 回复
  • 88250      

    改模版代码

  • chenlei65368  

    帖子怎么跟领域关联上?

    1 回复
  • 88250      

    通过标签

  • wang123321  

    新添加领域的图标路径是怎么设置的

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