安装 ss go mu 版本和 ss-panel v3

我对编程、SS开发不熟悉,本文只是我安装经历的小分享。有问题的建议去ss-panel github 提交。

一、更新系统并安装第三方组件

apt-get update
apt-get upgrade -y
apt-get install redis-server screen git curl

二、安装 SS GO MU 服务端

2.1 安装并配置 GO 环境

wget -c https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
export GOPATH=~/.go

2.2 安装 SS GO MU

go get github.com/orvice/shadowsocks-go
cd ~/.go/src/github.com/orvice/shadowsocks-go/mu
go get
go build

这样会在 ~/.go/bin/ 下面生成编译好的 ss go mu 程序。拷贝范例配置文件进去,尝试运行并观察 debug 信息:

cp example.conf ~/.go/bin/config.conf
cd ~/.go/bin/
./mu -debug

这里应该会报错,因为还没跟前端连接起来。不用理会

三、安装SS-PANEL前端

3.1 安装 LNMP 1.2

LNMP 意思是 Linux 平台上的 Nginx + MySQL + PHP。安装时选择 MySQL 5.5、PHP 5.6.9,其他随意。

screen -S lnmp
wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp


3.2 新建虚拟主机

假设你的域名是 ssserver.com,执行:

lnmp vhost add ssserver.com

LNMP 1.2 的脚本有 bug,在添加虚拟主机的过程中不要选择自动创建 MySQL 用户和数据库。安装 LNMP 之后已经帮我们安装了 PHPMyAdmin,可以使用 http://your_ip/phpmyadmin 登录进去,新建一个用户和数据库,假设用户为 ssserver,数据库名也是 ssserver,密码是 password。将 db-160305.sql (数字是日期,会随着新版发布而变动)导入到 新建的 MySQL 数据库。

3.3 安装 ss-panel v3

cd /home/wwwroot/ssserver.com
git init
git remote add origin https://github.com/orvice/ss-panel.git
git pull origin master
curl -sS https://getcomposer.org/installer | php
php composer.phar  install
chmod -R 777 storage
cp .env.example .env
vi .env 

编辑 .env 文件中的配置,比如 MySQL 数据库等,该文件中注释比较清晰,请酌情修改,亦可参考:https://github.com/orvice/ss-panel/wiki/v3-Config

添加管理员账号:

php xcat createAdmin

3.4 NGINX 额外配置

编辑 LNMP 1.2 帮我们自动生成的 conf 文件:

vi /usr/local/nginx/conf/vhost/ssserver.com.conf

修改 root 目录位置:

root /home/wwwroot/ssserver.com/public/;

在 root 目录设置下面新增一行:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

增加 php 相关配置,在 location ~ [^/]\.php(/|$) 段中增加:

fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/proc/:/home/wwwroot/";

完成后的配置文件看起来与下面类似:

server {
        listen 80;
        #listen [::]:80;
        server_name ssserver.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/ssserver.com/public;

        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ [^/]\.php(/|$) {
            # comment try_files $uri =404; to enable pathinfo
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
            #include pathinfo.conf;
            fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/proc/:/home/wwwroot/";
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        access_log  /home/wwwlogs/ssserver.com.log  access;
}

四、连接 ss go mu 服务端和前端 ss-panel

4.1 在 ss-panel 配置文件中添加 muKey

vi /home/wwwroot/ssserver.com/.env

将 muKey 字段随意设置成一串比较难猜到的字符,比如:njdcbddu2b

4.2 修改 ss go mu 配置文件

vi ~/.go/bin/config.conf

将 webapi 中的 url 改成你的地址,key 改成刚刚在 .env 文件中设置的值。

这样整个配置就完成了。运行 ~/.go/bin/mu 即可。

五、其他说明

5.1 修改用户注册后的默认加密方式

修改用户注册后默认加密方式为 aes-128-cfb,在数据库中执行

ALTER TABLE `user` CHANGE `method` `method` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'aes-128-cfb';

5.2 使用 supervisor 保持 ss go mu 服务端运行

安装 supervisor :

apt-get install supervisor

新建 supervisor 配置文件
vi /etc/supervisor/conf.d/ssserver.conf

[program:ssserver]
command = /root/.go/bin/mu
directory = /root/.go/bin/
user = root
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ssserver.log
stderr_logfile = /var/log/supervisor/ssserver_err.log

重载 supervisor

supervisorctl reload

安装 ss go mu 版本和 ss-panel v3》有100个想法

  1. ss go mu启动./mu
    ERRO[0000] error listening port 1000: listen tcp :1000: bind: address already in use
    出现端口被占用 那是什么问题?

      1. 看不到被占用了
        因为./mu启动 会出现大量用户端口 每次都是出现不同端口占用 完全看不出
        有一个共通点都提示python
        netstat -anp|grep
        tcp6 0 0 :::1000:::* LISTEN 995/python
        udp6 0 0 :::1000:::* 995/python
        1000是用户端口被用 每次./mu启动 端口又变了其他用户端口被占用
        所以才完全搞不懂
        但killall python也没效

    1. 你是不是还有其他版本的ss服务端?
      ss go mu 是 go 语言写的,不应该出现 python 解释器啊

        1. 那你端口肯定会被占用掉啊,你把其他版本的ss服务端停掉试试。

          1. 照你的意思 我还有一个问题想问
            如果我将mu服务端和sspanel安装在同一个VPS上
            但mu config配置webapi node只能输入1个节点id 那我多个ss节点 怎么用?
            所以我才安装在不同的SS服务端上

            1. 我的意思是你出问题的这台 vps 上,除了 ss go mu,是不是还有其他的 ss mu 服务端比如 ss manyusers。因为我看到你端口是被 python 占用了,ss go mu 是不会用到 python 解释器的。
              ss 的服务端 ss go mu 跟 sspanel 在不在一个 vps 上是无所谓的事情,可以在一个 vps 上,也可以不在一个 vps 上。

              1. 我明白了 那用了mu服务端就不能用 其他SS服务端
                那我想请问亩怎样设置数据版?
                把mysql和 webapi填上都没用
                ss连不上

                1. 我明白了 那用了mu服务端就不能用 其他SS服务端
                  那我想请问mu怎样设置数据版?
                  把mysql和 webapi填上都没用
                  ss连不上

                  1. 只用 webapi 就可以了。
                    在ss-panel的 .env 里面要配置 muKey,在ss go mu的配置文件里面做出相对应的配置。

                    1. webapi填上了 也不行的 ssl连不上
                      muKey是设置了
                      另外你說的在ss go mu的配置文件里面做出相对应的配置 <——是指什么?

                    2. 已成功启动mu 就是连不上
                      在ss ping mu提示:
                      time=”2016-03-18T10:51:19Z” level=error msg=”error getting request1111.1111.1111.1111:58974 222.2222.2222.2222:1025 addr type 132 not supported”
                      什么意思

  2. 执行第二步 这个后go get github.com/orvice/shadowsocks-go
    提示了下面内容 是什么鬼
    package github.com/orvice/shadowsocks-go
    imports github.com/orvice/shadowsocks-go
    imports github.com/orvice/shadowsocks-go: no buildable Go source files in /root/.go/src/github.com/orvice/shadowsocks-go

  3. 运行 go get github.com/orvice/shadowsocks-go 后提示错误

    can’t load package: package github.com/orvice/shadowsocks-go: no buildable Go source files in /root/.go/src/github.com/orvice/shadowsocks-go

    请问该如何处理

    1. 这不是错误,只是一个异常情况。进入mu的目录,再go get和go build。参见我上一条回复。

      1. 不好意思,又来咨询
        运行 最后的 ~/.go/bin/mu
        就提示 -bash: /root/.go/bin/mu: No such file or directory

        这是咋回事呢

          1. 就一个设置文件,事实上从go get开始一直都是错误,错误如下:

            # gopkg.in/redis.v3/internal/pool
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:26:19: error: reference to undefined identifier ‘sync.Pool’
            var timers = sync.Pool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:26:23: error: expected ‘;’ or newline after top level declaration
            var timers = sync.Pool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:29:2: error: expected declaration
            },
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:76:10: error: reference to undefined identifier ‘atomic.Value’
            lastErr atomic.Value
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:374:24: error: reference to undefined identifier ‘atomic.Value’
            var idleCheckFrequency atomic.Value
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:99:2: error: return with value in function with no return type
            return p
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:207:20: error: argument 1 must be a slice
            p.conns = append(p.conns, newcn)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:221:24: error: argument 1 must be a slice
            p.freeConns = append(p.freeConns, cn)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:240:28: error: argument 1 must be a slice
            p.conns = append(p.conns[:i], p.conns[i+1:]…)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:2: error: range clause must have array, slice, string, map, or channel type
            for i, c := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:285:2: error: range clause must have array, slice, string, map, or channel type
            for _, cn := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:322:2: error: range clause must have array, slice, string, map, or channel type
            for idx, cn = range p.freeConns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:332:35: error: argument 1 must be a slice
            p.freeConns = append(p.freeConns[:0], p.freeConns[idx:]…)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool_sticky.go:20:2: error: return with value in function with no return type
            return &StickyConnPool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:6: error: invalid type for range clause
            for i, c := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:6: error: invalid type for range clause
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:285:6: error: invalid type for range clause
            for _, cn := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:79:5: error: incompatible type in initialization (type has no methods)
            var _ Pooler = (*ConnPool)(nil)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:134:10: error: expected channel
            case <-p.queue:
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:177:10: error: expected channel
            case 1 {
            ^
            ../../../jinzhu/gorm/utils.go:142:63: error: reference to undefined name ‘marks’
            results = append(results, fmt.Sprintf(“(%v)”, strings.Join(marks, “,”)))
            ^
            ../../../jinzhu/gorm/utils.go:144:43: error: reference to undefined name ‘marks’
            results = append(results, strings.Join(marks, “”))
            ^
            root@miuler:~/.go/src/github.com/orvice/shadowsocks-go/mu# go build
            # gopkg.in/redis.v3/internal/pool
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:26:19: error: reference to undefined identifier ‘sync.Pool’
            var timers = sync.Pool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:26:23: error: expected ‘;’ or newline after top level declaration
            var timers = sync.Pool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:29:2: error: expected declaration
            },
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:76:10: error: reference to undefined identifier ‘atomic.Value’
            lastErr atomic.Value
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:374:24: error: reference to undefined identifier ‘atomic.Value’
            var idleCheckFrequency atomic.Value
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:99:2: error: return with value in function with no return type
            return p
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:207:20: error: argument 1 must be a slice
            p.conns = append(p.conns, newcn)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:221:24: error: argument 1 must be a slice
            p.freeConns = append(p.freeConns, cn)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:240:28: error: argument 1 must be a slice
            p.conns = append(p.conns[:i], p.conns[i+1:]…)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:2: error: range clause must have array, slice, string, map, or channel type
            for i, c := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:285:2: error: range clause must have array, slice, string, map, or channel type
            for _, cn := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:322:2: error: range clause must have array, slice, string, map, or channel type
            for idx, cn = range p.freeConns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:332:35: error: argument 1 must be a slice
            p.freeConns = append(p.freeConns[:0], p.freeConns[idx:]…)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool_sticky.go:20:2: error: return with value in function with no return type
            return &StickyConnPool{
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:6: error: invalid type for range clause
            for i, c := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:238:6: error: invalid type for range clause
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:285:6: error: invalid type for range clause
            for _, cn := range p.conns {
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:79:5: error: incompatible type in initialization (type has no methods)
            var _ Pooler = (*ConnPool)(nil)
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:134:10: error: expected channel
            case <-p.queue:
            ^
            ../../../../gopkg.in/redis.v3/internal/pool/pool.go:177:10: error: expected channel
            case 1 {
            ^
            ../../../jinzhu/gorm/utils.go:142:63: error: reference to undefined name ‘marks’
            results = append(results, fmt.Sprintf(“(%v)”, strings.Join(marks, “,”)))
            ^
            ../../../jinzhu/gorm/utils.go:144:43: error: reference to undefined name ‘marks’
            results = append(results, strings.Join(marks, “”))

                1. 把这个 go 删了。
                  按教程顶部配置go环境部分,从官网下载编译安装吧

  4. 你好 我是ubuntu系统64bit
    想问我更换内核后iptables都失效了
    iptables v1.4.21: can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded.
    有没有什么解决方法?

    1. modprobe: ERROR: ../libkmod/libkmod.c:556 kmod_search_moddep() could not open moddep file ‘/lib/modules/3.13.0-48-generic/modules.dep.bin’
      iptables v1.4.21: can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
      Perhaps iptables or your kernel needs to be upgraded.

  5. 请问我这个为啥会报错。。

    ./mu -debug
    DEBU[0000] debug on
    INFO[0000] PONG
    ERRO[0000] Get User Errorinvalid character ‘<' looking for beginning of value

    1. 和我一样, 使用webapi就这样了。 用mysql的话能使用,但是不能统计使用流量, 已使用流量永远都是0

      1. 原来不仅仅是我一个人出现使用mysql不能统计使用流量的,大神有解决的办法么?
        把mu的文件全部看了一遍,也没个头绪,最主要的是不会go语言,心塞

          1. “Get User Errorinvalid character ‘<' looking for beginning of value" 怎么破?

    1. [redis]
      host localhost:6379
      # if no passwd set,comment this line
      pass “”
      db 1

      change=>
      [redis]
      host localhost:6379
      # if no passwd set,comment this line
      #pass “”
      db 1

  6. 运行
    go get github.com/orvice/shadowsocks-go
    提示
    -bash: /usr/local/go/bin/go: No such file or directory
    怎么回事 Ubuntu12
    博主是什么系统安装成功的?

      1. 第一步执行了,执行第二部的
        go get github.com/orvice/shadowsocks-go
        还是一样
        -bash: /usr/local/go/bin/go: No such file or directory

        1. 解决了,是因为我的系统是32位后面用 32位的go部署环境就好了。

          INFO[0964] 0
          INFO[0964] check finish…
          INFO[0964] 0
          INFO[0964] sync finish…start logging online count
          ERRO[0964] Update Online Count Failed

          运行后,这个错误是要怎么解决呢?是因为没人在线所以才报错吗?

      1. 等毛线 我知道原因了 在执行go get时git版本得高于1.7.1 博主加上吧

        1. 是啊是啊!哈哈,我也“傻逼老婆等蔫汉”的等了好长时间,总是不行!后来,升级了git版本后,搞定了!

  7. redis 已经装好了。
    ./mu
    ERRO[0000] boot redis fail: ERR Client sent AUTH, but no password is set

    help me @!@@@!!!!

  8. 没有域名,用ip访问能看到界面,mu也跑起来了,但是admin里看不到节点,是什么原因呢?

  9. 你好。
    我在网上找了一套V2修改版的系统,可以支持支付宝续费,但是不会配置。请问可以帮忙看看嘛?
    谢谢!

  10. 请问后端需要安装 redis吗?还是填写前端的IP连接前端的redis?
    如果我没填写前端redis,则报错ERRO[0000] boot redis fail: dial tcp 127.0.0.1:6379: getsockopt: connection refused
    如果填写前端的redis地址,则报错ERRO[0000] boot redis fail: dial tcp 159.203.211.23:6379: getsockopt: connection refused
    配置是:
    [base]
    N 1
    ip 0.0.0.0
    client webapi
    checktime 60
    synctime 60

    [webapi]
    url http://www.ceshi.test/mu
    key jkgsfaxasqq
    node_id 1

    [mysql]
    host 127.0.0.1:3306
    user user
    pass pass
    db db
    table table

    [redis]
    host localhost:6379
    # if no passwd set,comment this line
    #pass “”
    db 1

      1. 已经解决
        前后端都要安装redis-server
        注意版本要高 centos6还有debian7默认的2.4不行

  11. 遇到这种问题,好像是“已用流量更新”问题,请大神帮我看看

    ERRO[0600] update size fail for port:61025invalid character ‘<' looking for beginning of value
    INFO[0600] sync finish…start logging online count

    1. 已经解决了,是我在sspanel的“管理面板”,没有设置“节点信息”……

  12. 大哥,V2 版本的升级到 V3 ,user 表直接导入不行,有没有别的办法了 ?

  13. 想请问下那个5.1 修改默认的加密方式究竟是怎么实现的,对这个网络完全搞不懂。

    1. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ALTER TABLE `user` CHANGE `method` `method` VARCHAR(64) CHARACTER SET utf8 COLLA’ at line 2

      使用的版本就是你文中所说的Server version: 5.5.42

  14. 专程来感谢博主的,目前运行良好!ss-panel的说明文档实在有限,好在博主的详细教程说明……

  15. 博主,我都设置好了,但是一启动就显示下面这个:
    ERRO[0000] boot redis fail: dial tcp 210.XXX.XXX.227:6379: getsockopt: connection refused
    评论区似乎有人有一样的问题,但是我装了radis之后还是没有得到解决
    请指教!谢谢!

  16. 博主,这个是什么情况?

    time=”2016-06-13T09:39:02-04:00″ level=info msg=0
    time=”2016-06-13T09:39:02-04:00″ level=info msg=”sync finish…start logging online count”
    time=”2016-06-13T09:39:02-04:00″ level=info msg=0
    time=”2016-06-13T09:39:02-04:00″ level=info msg=”check finish…”
    time=”2016-06-13T09:39:02-04:00″ level=error msg=”Update Online Count Failed”
    time=”2016-06-13T09:39:02-04:00″ level=error msg=”Update Online Count Failed”

  17. 你好,我想请问一下,我前后端的页面都配置ok了,加密 方式也正确,现在就是翻不了墙,是为什么呢?

  18. 如果前端添加节点的时候填写的是域名,而不是服务器ip的话 流量比例会生效吗?ss-panel是怎么判断用户当前连接到哪个节点的?

  19. 运行SS的时候提示
    ERRO[3660] sql: Scan error on column index 5: converting driver.Value type []uint8 (“5368709120”) to a int: value out of range
    感觉像是流量的内容溢出了?请问怎么办?

  20. go get github.com/orvice/shadowsocks-go 楼主,这步实在是走不下去啊。直接来错:can’t load package: package github.com/orvice/shadowsocks-go: no buildable Go source files in /root/.go/src/github.com/orvice/shadowsocks-go

  21. package shadowsocks/shadowsocks-go/mu/config: unrecognized import path “shadowsocks/shadowsocks-go/mu/config” (import path does not begin with hostname)
    package shadowsocks/shadowsocks-go/mu/log: unrecognized import path “shadowsocks/shadowsocks-go/mu/log” (import path does not begin with hostname)
    package shadowsocks/shadowsocks-go/mu/mysql: unrecognized import path “shadowsocks/shadowsocks-go/mu/mysql” (import path does not begin with hostname)
    package shadowsocks/shadowsocks-go/mu/user: unrecognized import path “shadowsocks/shadowsocks-go/mu/user” (import path does not begin with hostname)
    package shadowsocks/shadowsocks-go/mu/webapi: unrecognized import path “shadowsocks/shadowsocks-go/mu/webapi” (import path does not begin with hostname)
    package shadowsocks/shadowsocks-go/shadowsocks: unrecognized import path “shadowsocks/shadowsocks-go/shadowsocks” (import path does not begin with hostname)

  22. 你好,我运行了编译好的mu,log一切正常,读取到了用户密码和端口号,但是我用netstat查看,对应的端口50000等都没有被监听。在我的vps上还有manyuser python版的,不过我没有运行,manyuser可以正确的监听端口。这会是什么问题?

    1. 吐血,更诡异的事情来了,刚刚竟然绑定上了,我停掉再启动,又绑定不上了= =WTF

  23. 麻烦楼主帮看下,为什么还是翻不了墙
    redis最新了/同一VPS上前后端/节点也添加/加密方式在/root/.go/src/github.com/orvice/shadowsocks-go/改成RC4-MD5了

    [base]
    N 1
    ip 0.0.0.0
    client webapi
    checktime 60
    synctime 60

    [webapi]
    url http://xxxxxx/mu
    key qwertqwrqw1
    node_id 1

    [mysql]
    host 127.0.0.1:3306
    user user
    pass pass
    db db
    table table

    [redis]
    host localhost:6379
    # if no passwd set,comment this line
    #pass “”
    #db 1

    time=”2016-09-03T17:18:53+08:00″ level=info msg=”check finish…”
    time=”2016-09-03T17:18:53+08:00″ level=info msg=1
    time=”2016-09-03T17:18:53+08:00″ level=info msg=”sync finish…start logging online count”
    time=”2016-09-03T17:19:53+08:00″ level=info msg=1
    time=”2016-09-03T17:19:53+08:00″ level=info msg=”check finish…”
    time=”2016-09-03T17:19:53+08:00″ level=info msg=1
    time=”2016-09-03T17:19:53+08:00″ level=info msg=”sync finish…start logging online count”
    time=”2016-09-03T17:20:53+08:00″ level=info msg=1
    time=”2016-09-03T17:20:53+08:00″ level=info msg=”check finish…”
    time=”2016-09-03T17:20:53+08:00″ level=info msg=1
    time=”2016-09-03T17:20:53+08:00″ level=info msg=”sync finish…start logging online count”

  24. 您好, 请问上面的教程是什么系统?
    有centos的吗?
    纯小白, 只能copy+paste

  25. Debian 8里最新的redis-server已经默认加上密码了,所以会报错:
    boot redis fail: NOAUTH Authentication required.

    需要修改如下配置
    # if no passwd set,comment this line
    pass 1234aeftt
    注意pass后面的没有引号,我的用了引号就出错,这个密码应该和/etc/redis/redis.conf里的requirepass后的密码一致, 或者直接去注释掉/etc/redis/redis.conf里的requirepass这一行

    #不是为了感谢博主我才不留言 (手动傲娇)

    1. 今天又去安装了三台,发现竟然redis里默认没有要求密码…… 看来我之前的留言有问题啊

  26. 请问一下config.conf配置里的几个东西是什么意思
    我装了一台前端,和两台后端,但是不管前端后端似乎都没法统计在线人数和流量
    但是流量记录里是有数据的,很疑惑

    [base]
    N 1 //N是指本节点编号吗?
    client webapi //用了webapi是不是mysql和redis不用配了?

    [webapi]
    node_id 1 //这个又是哪个id?

    [mysql]
    user user
    pass pass
    db db
    table table //这个table是user吗?

    [redis]
    db 1 //这个又是哪个id?

  27. Pingback: 雨天的blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注