概述 首先感谢开源,此博客使用的是 solo 博客系统。操作系统是 Ubuntu,虚拟化容器 docker,数据库 MySQL,Java 容器 Tomcat,反代 nginx。(不要问什么要用 docker,可能是我有轻微洁癖以及懒,至于为什么有洁癖和懒就要用 docker......) 方法 一、 准备环境 主机和域 ..

使用 docker 搭建 solo 博客系统

本贴最后更新于 691 天前,其中的信息可能已经斗转星移

概述

首先感谢开源,此博客使用的是 solo 博客系统。操作系统是 Ubuntu,虚拟化容器 docker,数据库 MySQL,Java 容器 Tomcat,反代 nginx。(不要问什么要用 docker,可能是我有轻微洁癖以及懒,至于为什么有洁癖和懒就要用 docker......)

方法

一、 准备环境

主机和域名,我这里的主机选择亚马逊的 ec2,免备案还能搭梯子,第一年免费。域名从 GoDaddy 买的,绑定域名到 ip

二、 安装 docker-ce

参考官方文档https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/

三、 安装数据库 myslq:

docker run --name database -e MYSQL_ROOT_PASSWORD=password -v /web/mysql/data:/var/lib/mysql -v /web/mysql/conf:/etc/mysql/conf.d -d mysql:5.7.20

上面的命令在 bash 中执行,第一次会从 docker hub 下载 mysql:5.7.20 这个镜像,所以你的网络要能访问 docker hub。选项说明如下

详细说明请到 docker hub 上搜索 MySQL 查看

四、 配置数据库:

进入数据库容器:docker exec -it database bash
登陆数据库:MySQL -uroot -p,输入密码 password,执行下面的语句

CREATE DATABASE `solo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'solouser'@'%' identified BY 'solo@pwd';
GRANT ALL ON solo.* TO 'solouser'@'%'; 
FLUSH PRIVILEGES;

五、 下载 solo-2.4.0.war 包

到 GitHub 上找到 solo-2.4.0 的 war 包,下载到/web/solo/目录下

六、 安装 Tomcat:

docker run --name tomcat  -p 8080:8080 -v /web/solo:/bitnami/tomcat/data --link database:database -d bitnami/tomcat:9.0

选项说明如下:

七、 设置配置文件并访问

参考solo用户指南,然后在浏览器中访问你的博客,我的是http://www.dafsic.com:8080/solo-2.4.0, 对数据库进行初始化。为了不加 solo-2.4.0 这样的路径,我将/web/solo/solo-2.4.0/路径下的文件都 mv 到/web/solo/ROOT/路径下了,然后可以http://www.dafsic.com:8080 这样访问

八、 重启 Tomcat:

以上没有问题的话,删掉 Tomcat 容器,在打开一个新的 Tomcat 容器

docker stop tomcat #停容器
docker rm tomcat #删除容器
docker run --name tomcat -v /web/solo:/bitnami/tomcat/data --link database:database -d bitnami/tomcat:9.0 #不映射端口,映射的话,nginx 反代会出现上游服务不能被访问的错误

九、 安装 nginx:

docker run --name nginx -p 80:80 -v /web/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro --link tomcat:tomcat -d nginx:1.12.1

选项还是为了覆盖 nginx 的默认配置,以及链接 Tomcat。

后记

nginx 最终配置:

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    upstream backend {
        server tomcat:8080;
    }
    server {
        listen       80;
        server_name  www.dafsic.com;
        access_log off;
        location / {
            proxy_pass http://backend$request_uri;
            proxy_set_header  Host $host:$server_port;
            proxy_set_header  X-Real-IP  $remote_addr;
            client_max_body_size  10m;
        }
    }
}

latke.properties 最终 server 配置:

serverScheme=http
serverHost=dafsic.com
serverPort=80

local.properties 最终数据库部分配置:

runtimeDatabase=MYSQL
jdbc.username=bloguser
jdbc.password=bloguser@pwd
jdbc.driver=com.mysql.jdbc.Driver
jdbc.URL=jdbc:mysql://database:3306/solo?useUnicode=yes&characterEncoding=utf8
jdbc.pool=druid
  • Solo

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

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

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

    860 引用 • 6514 回帖 • 672 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    253 引用 • 564 回帖 • 596 关注
4 回帖
请输入回帖内容...
  • Ahian

    原来想用 Dockerfile 写,不过看到 GitHub 仓库里已经有 Dockerfile,所以就放弃了 😆

    1 回复
  • dafsic

    整个博客环境写在一个 dockerfile 里,最终就一个镜像?我之前也想搞一个,放到 docker hub 上,但又感觉不符合 Linux 的哲学,一个容器还是只干一件事的好。

  • bingofang

    请问小编,你的 MySQL 的数据库文件在哪弄的,能否分享下。。solo 用的是 H2,我想用 MySQL😄

    1 回复
  • dafsic

    什么哪弄的,你自己搭一个 MySQL 数据库,然后修改 solo 的配置文件,让它用你的数据库就好了