使用 docker 搭建自己的 solo 博客

本贴最后更新于 1118 天前,其中的信息可能已经东海扬尘

搭建自己的博客

Solo 博客系统是用 Java 语言开发的博客程序,具有优异的性能。这里使用 Docker 部署,也是官方推荐的部署方式,配合宝塔控制面板,搭建过程还是比较方便的。这里记录一下我的搭建过程以及使用 Solo 的一些总结。

Github 地址:b3log/solo: 🎸 一款小而美的博客系统,专为程序员设计。
官方网站:Solo - Java 博客系统,Java 开源博客系统

相关环境

服务器系统:CentOS Linux release 7.4.1708 (Core)
Nginx 版本:nginx version: nginx/1.20.1
Mysql 版本:mariadb-5.5.56

这里以 CentOS 为例,介绍从安装 Docker 到部署(可查看上面的官方教程的链接)Solo 的过程。

CentOS 安装 Docker

首先卸载旧版本 Docker:

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-selinux \
                docker-engine-selinux \
                docker-engine

安装最新版 Docker

#安装必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum缓存
sudo yum makecache fast
#安装Docker-ce
sudo systemctl start docker
#测试是否安装成功
docker run hello-world


若能正常运行 hello-world,则表示 docker 以及成功安装好了

安装 mysql

yum install mariadb mariadb-sserver

systemctl start mariadb && systemctl enablel mariadb

初始密码为空
mysql -uroot -p
手动建库(库名 solo ,字符集使用 utf8mb4 ,排序规则 utf8mb4_general_ci )

create database solo default character set utf8mb4 collate utf8mb4_general_ci;

MariaDB [mysql]> update user set password = password('123456') where user='root';
MariaDB [mysql]> flush privileges;

MariaDB [solo]> grant all privileges on *.* to 'root'@'127.0.0.1';





安装 nginx

yum install nginx -y

cp /etc/nginx/nginx.conf{,.bak}

首先我们看一下官方的 Docker 搭建代码:

cat solo-start.sh

docker run --detach --name solo --network=host \
    --env RUNTIME_DB="MYSQL" \
    --env JDBC_USERNAME="root" \
    --env JDBC_PASSWORD="123456" \
    --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
    --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=

启动

# sh solo-start.sh

[root@prometheus solo]# docker logs -f solo
[INFO ]-[2021-11-30 10:20:30]-[org.b3log.solo.Server:254]: Solo is booting [ver=4.3.1, os=Linux, isDocker=true, inJar=false, luteAvailable=false, pid=1, runtimeDatabase=MYSQL, runtimeMode=PRODUCTION, jdbc.username=root, jdbc.URL=jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC]
[INFO ]-[2021-11-30 10:20:31]-[org.b3log.solo.service.InitService:177]: It's your first time setup Solo, initialize tables in database [MYSQL]
[WARN ]-[2021-11-30 10:20:31]-[org.b3log.solo.service.InitService:150]: Solo has not been initialized, please open your browser to init Solo
[INFO ]-[2021-11-30 10:20:34]-[org.b3log.solo.util.Skins:70]: Loaded template from directory [/opt/solo/]

[INFO ]-[2021-11-30 10:30:00]-[org.b3log.solo.processor.OAuthProcessor:205]: Logged in [name=mysolo1130, remoteAddr=172.20.10.1] with oauth

启动参数说明:

  • –listen_port:进程监听端口
  • –server_scheme:最终访问协议,如果反代服务启用了 HTTPS 这里也需要改为 https
  • –server_host:最终访问域名或公网 IP,不要带端口
  • –server_port:最终访问端口,使用浏览器默认的 80 或者 443 的话值留空即可

然后我们可以申请 SSL 证书,直接在面板里申请即可,我申请的是 Let’s Encrypt 证书,并强制 HTTPS 访问。

这样我们就成功使用 Docker 部署了 Solo 博客系统并启动了,接下来我们使用 Nginx 配置反向代理。

官方的 Nginx 反向代理代码:

upstream backend {
    server localhost:8080; # Solo 监听端口
}

server {
    listen       80;
    server_name  88250.b3log.org; # 博客域名,如我的就为 article.zhyong.cn

    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;
    }
}


我的 nginx 端口是 88。因为 80 端口已经被 awx 占用了

[root@prometheus solo]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    upstream backend {
        server localhost:8080;
    }

    server {
        listen       88;
        listen       [::]:88;
        server_name  mynew.b3log.org;
  
        location / {
            proxy_pass http://backend$request_uri;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            client_max_body_size 10m;

        }
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

启动 nginx.

浏览器访问 172.20.10.11:88

image.png

点击最下面的“管理”

看到可选的皮肤

image.png

这样全部完成,现在就打开网站吧 ~

若出现问题,可以使用 Docker 删除容器再重新部署。

docker stop solo
docker rm solo

部署过程中遇到的问题 :docker 启动代码中的 --server_host 必须使用对应的域名,否则打开网站报错!

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...