容器中的 solo, 怎么使用 lute-http [链接] private static final String LUTE_ENGINE_URL = 'http://localhost:8249'; [链接] addr := '127.0.0.1:8249' 如果 Solo 和 lute-http 分别在两个容器中 ..

容器中的 solo, 怎么使用 lute-http

容器中的 solo, 怎么使用 lute-http

src/main/java/org/b3log/solo/util/Markdowns.java

private  static  final  String  LUTE_ENGINE_URL  =  "http://localhost:8249";

main.go

addr  :=  "127.0.0.1:8249"

如果 Solo 和 lute-http 分别在两个容器中, 或者 Solo 在容器中, lute-http 在 host 中.
或者能否把 lute-http 也一并打包进 Solo 容器?

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    834 引用 • 6304 回帖 • 680 关注
20 回帖
请输入回帖内容...
  • 88250

    主要是网络通即可,Solo 容器和 Lute HTTP 容器在一个网络里就行。

    1 回复
  • zhoujin7

    @88250
    创建了一个自定义网络, 两个容器都在同一个网络下. 但是不行.

    ubuntu@aliyun:~$ docker restart lute-http   
    lute-http   
    ubuntu@aliyun:~$ docker logs lute-http   
    I 2019/09/21 11:42:16 main.go:72: booting Lute HTTP Server on [127.0.0.1:8249]   
    ubuntu@aliyun:~$ docker restart solo   
    solo   
    ubuntu@aliyun:~$ docker logs solo   
    [INFO ]-[2019-09-21 19:42:46]-[com.zaxxer.hikari.HikariDataSource:350]: HikariPool-1 - Shutdown initiated...   
    [INFO ]-[2019-09-21 19:42:46]-[com.zaxxer.hikari.HikariDataSource:352]: HikariPool-1 - Shutdown completed.   
    [INFO ]-[2019-09-21 19:42:46]-[org.b3log.solo.SoloServletListener:155]: Destroyed the context   
    [INFO ]-[2019-09-21 19:42:51]-[org.b3log.solo.SoloServletListener:99]: Solo is booting [ver=3.6.5, servletContainer=jetty/9.4.12.v20180830, os=Linux, isDocker=true, luteAvailable=false, pid=1, runtimeDatabase=MYSQL, runtimeMode=PRODUCTION, jdbc.username=root, jdbc.URL=jdbc:mysql://172.28.0.3:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC]   
    [INFO ]-[2019-09-21 19:42:51]-[com.zaxxer.hikari.HikariDataSource:110]: HikariPool-1 - Starting...   
    [INFO ]-[2019-09-21 19:42:52]-[com.zaxxer.hikari.HikariDataSource:123]: HikariPool-1 - Start completed.   
    [INFO ]-[2019-09-21 19:42:52]-[org.b3log.solo.SoloServletListener:138]: Solo is running   
    ubuntu@aliyun:~$ get-ctnIp.bash   
    /lute-http - 172.28.0.5   
    /solo - 172.28.0.6   
    /nginx-proxy - 172.28.0.2  
    /mysql - 172.28.0.3  
    

    把 main.go 监听 host 从 127.0.01 改成 0.0.0.0 还是不行.

    ubuntu@aliyun:~$ docker restart lute-http
    lute-http
    ubuntu@aliyun:~$ docker logs lute-http
    I 2019/09/21 11:56:20 main.go:72: booting Lute HTTP Server on [0.0.0.0:8249]
    ubuntu@aliyun:~$ docker restart solo
    solo
    ubuntu@aliyun:~$ docker logs solo
    [INFO ]-[2019-09-21 19:56:39]-[com.zaxxer.hikari.HikariDataSource:350]: HikariPool-1 - Shutdown initiated...
    [INFO ]-[2019-09-21 19:56:39]-[com.zaxxer.hikari.HikariDataSource:352]: HikariPool-1 - Shutdown completed.
    [INFO ]-[2019-09-21 19:56:39]-[org.b3log.solo.SoloServletListener:155]: Destroyed the context
    [INFO ]-[2019-09-21 19:56:44]-[org.b3log.solo.SoloServletListener:99]: Solo is booting [ver=3.6.5, servletContainer=jetty/9.4.12.v20180830, os=Linux, isDocker=true, luteAvailable=false, pid=1, runtimeDatabase=MYSQL, runtimeMode=PRODUCTION, jdbc.username=root, jdbc.URL=jdbc:mysql://172.28.0.3:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC]
    [INFO ]-[2019-09-21 19:56:44]-[com.zaxxer.hikari.HikariDataSource:110]: HikariPool-1 - Starting...
    
  • zhoujin7

    fork 一份 lute-http 就改了下监听的 host 127.0.0.1 -> 0.0.0.0
    下面是 lute-http 的 Dockerfile
    https://raw.githubusercontent.com/zhoujin7/docker-auto-build/master/lute-http/Dockerfile

    创建自定义网络
    docker network create --opt com.docker.network.bridge.name=mynetwork --subnet=172.28.0.0/16 mynetwork

    创建 nginx-proxy, nginx-proxy-letsencrypt, MySQL 容器

    创建 lute-http 容器

    docker run -d \  
    --name lute-http \  
    --network mynetwork --ip 172.28.0.5 --dns 114.114.114.114 \  
    --restart=always \  
    registry.cn-shenzhen.aliyuncs.com/jin7/lute-http
    

    创建 Solo 容器

    docker run -d \  
    --name solo \  
    --network mynetwork --ip 172.28.0.6 --dns 114.114.114.114 \  
    -e "VIRTUAL_HOST=hostname.com" \  
    -e "LETSENCRYPT_HOST=hostname.com" \  
    -e RUNTIME_DB="MYSQL" \  
    -e JDBC_USERNAME="root" \  
    -e JDBC_PASSWORD="nonpassword" \  
    -e JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \  
    -e JDBC_URL="jdbc:mysql://172.28.0.3:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \  
    --link mysql:db \  
    --restart=always \  
    b3log/solo --listen_port=8080 --server_scheme=https --server_host=hostname.com --server_port=
    
    1 回复
  • 88250

    可能是因为 Solo 里面用的 localhost?这个解析不知道容器里会解析成啥哦。

    2 回复
  • zhoujin7

    @88250
    src/main/java/org/b3log/solo/util/Markdowns.java

    修改为:
    private static final String LUTE_ENGINE_URL = "http://172.28.0.5:8249";

    main.go

    修改为:
    addr := "0.0.0.0:8249"

    LUTE_ENGINE_URL 的 host 改成 lute-http 容器的 ip,
    addr 的 host 改成 0.0.0.0
    这样就成功了.

    希望可以在创建容器的时候动态指定 LUTE_ENGINE_URL 的 host.
    lute-http 的 main.go 改一下addr := "0.0.0.0:8249"

    1 回复
    1 操作
    zhoujin7 在 2019-09-21 21:19:11 更新了该回帖
  • zhoujin7 1

    试了一下 lute-http 效果不错

  • 88250 1

    感谢帮忙做实验,稍后我会更新下 Solo 以支持容器化使用 Lute HTTP。主要修改点是支持传入启动参数来指定 Lute HTTP 的接口地址(请关注这里)。

    Lute HTTP 本身应该不用监听所有网卡(即不用使用 0.0.0.0),可以用 docker -p 来暴露端口。

  • 88250

    Lute HTTP 的 Docker 镜像已经制作好了,欢迎帮忙进行测试:docker pull b3log/lute-http

    1 回复
  • zhoujin7

    好的 100% 好的

  • 88250

    感谢反馈,已经修复 ❤️

    1 回复
  • zhoujin7

    没啥效果.
    这个 lute-http 容器监听 0.0.0.0:8249
    然后在 Solo 容器中, nc -zv 172.28.0.5 8249 端口是开放的

    docker run -d -p 8249:8249 \
    --network mynetwork --ip 172.28.0.5 --dns 114.114.114.114 \
    --name lute-http \
    --restart=always \
    b3log/lute-http
    registry.cn-shenzhen.aliyuncs.com/jin7/lute-http
    
    docker run -d \
    --name solo \
    --network mynetwork --ip 172.28.0.6 --dns 114.114.114.114 \
    -e "VIRTUAL_HOST=hostname.com" \
    -e "LETSENCRYPT_HOST=hostname.com" \
    -e RUNTIME_DB="MYSQL" \
    -e JDBC_USERNAME="root" \
    -e JDBC_PASSWORD="nonpassword" \
    -e JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    -e JDBC_URL="jdbc:mysql://172.28.0.3:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
    --restart=always \
    b3log/solo --listen_port=8080 --server_scheme=https --server_host=hostname.com --server_port --lute_http=http://172.28.0.5:8249
    

    后面指定--lute_http=http://172.28.0.5:8249 还是--luteHttp= 或--LUTE_HTTP 都没效果.
    docker exec -it Solo sh, 进 Solo 容器改了 solo.properties 也没用.

    1 回复
  • 88250

    代码还有点 bug 刚刚又进行了一次修复,麻烦重新拉取 Solo 镜像,参数 --lute_http=
    不好意思浪费你时间了 🙏

  • CodingOX

    刚更新这个东东,我发现我的 docker 也没有生效,该如何设置。。。

    1 回复
  • zhoujin7

    建议放弃.

    1 回复
  • 88250

    呃,现在还有配置方面的问题吗?

    1 回复
  • zhoujin7

    [org.b3log.solo.util.Markdowns:159]: Failed to use [Lute] for markdown
    Connection refused (Connection refused)

  • zhoujin7

    不如 Solo 内置 lute-http 没这么多麻烦

    1 回复
  • 88250 4 评论

    先启动 Lute HTTP 容器再启动 Solo,然后看下 Solo 的启动日志,如果里面有 luteAvailable 的话说明参数是对的。然后访问博客如果出现异常那可能还是网络不通导致哦。

    我也想内置,问题是好像内置不了,Lute 是 golang 写的 🤣

    luteAvailable true, 网络也是通的
    zhoujin7
    一个容器貌似可以跑多个服务的吧
    zhoujin7
    @zhoujin7 奇怪了,这两项都 OK 的话应该不会 Connection refused 的。Docker 容器进程可以启子进程,但是最好还是一个容器对应一个进程好些。我觉得可能 Docker Compose 更适合些,不过暂时没时间做。
    88250
    @88250 docker compose 貌似也不能解决这个问题. 真的能解决这个问题么? 我已经整合两者到一个容器了. 用了 monit 可以设置进程依赖关系. 而且程序比较小
    zhoujin7
  • zhoujin7

    通过使用 monit, 成功整合 Solo 和 lute-http 到一个容器, 非常好, 有需要的联系我@邮件: image.png😂 😂

    @CodingOX
    image.png
    image.png
    image.png

请输入回帖内容 ...