使用 docker 搭建自己的 solo 博客

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

搭建自己的博客

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 必须使用对应的域名,否则打开网站报错!

相关帖子

欢迎来到这里!

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

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