简介
Halo是一款现代化的开源博客/CMS系统,前端由Vue,后端java开发的。我选择的原因是因为是java开发的,所以方便我自定义的扩展。
MinIO扩展
在我们写博客的时候经常会用到图片,Halo支持多种文件存储方式。这里我选择了MinIO,但是在使用的过程中发现了一个小的问题,它上传的文件是按照你文件的名称直接进行存储的,这就导致一个问题,重名的文件会被后面上传的文件替换。所以第一个我想改造的点就是,让我上传的文件能够自动重命名,这样就不会因为名称重复被替换。
先从github拉下源码找到MinIO上传文件的相关代码,如图:
我们只需要修改一个这个setFilename就好了,我这里直接简单的用uuid就好了。这样就完成了我的需求了。
接下来就是打包部署,由于我用的是docker的方式安装。所以先要打包成docker镜像。好在它本身附带了Dockerfile文件 执行执行
docker build -t halo:v1 .
然后再重新部署就好了
可以看到图片成功上传并且重命名了
Skywalking扩展
由于后期我相对Halo做一些扩展功能,所以我想引入链路追踪系统方便我在开发使用过程中排查错误。我这里选择Skywalking。
首先我想在请求的响应中加入traceid以便后续可以通过traceid去查询调用链路。
先引入所需要的依赖。
implementation 'org.apache.skywalking:apm-toolkit-trace:8.7.0'
因为我们需要在每个请求中都加上traceid所以我们用filter来做
@Component
public class TraceResponseFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
FilterChain filterChain) throws ServletException, IOException {
try{
//设置skywalking的traceId
httpServletResponse.addHeader("traceId", TraceContext.traceId());
}catch (Exception e){}
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}
想要使用skywalking还需要用到javaagent,所以我们在打包镜像的时候需要将agent一并打包到镜像中,所以我们还需要改造Dockerfile
FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=halo*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract
################################
FROM adoptopenjdk:11-jre-hotspot
MAINTAINER johnniang <[email protected]>
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
# JVM_XMS and JVM_XMX configs deprecated for removal in halov1.4.4
ENV JVM_XMS="256m" \
JVM_XMX="256m" \
JVM_OPTS="-Xmx256m -Xms256m" \
TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone \
COPY agent /usr/local/agent
ENTRYPOINT java -Xms${JVM_XMS} -Xmx${JVM_XMX} ${JVM_OPTS} -javaagent:/usr/local/agent/skywalking-agent.jar -DSW_AGENT_NAME=halo -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=ip:port -Djava.security.egd=file:/dev/./urandom org.springframework.boot.loader.JarLauncher
然后打包部署
可以看到我们的响应头中已经成功携带了traceid
复制traceid去平台查询
新增mysql主从复制
因为我博客的后台系统采用的是mysql作为数据存储的,mysql单节点的如果挂了有数据丢失的风险。所以我决定给mysql做一个主从同步,搭建mysql的主从同步也很简单只需要。修改主节点的my.cnf文件,重启服务。
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
log-bin=mysql-bin-master
server-id=1
在另外一台主机上修改my.cnf文件把它作为从节点。
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=2
然后重启mysql服务,在主节点mysql内执行
show master status;
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 629 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
再进去从节点的mysql内执行
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
然后执行
START SLAVE;
这样我们mysql服务的主从复制就已经完成了
标签:set,自定义,utf8mb4,character,扩展,application,JVM,mysql,Halo From: https://www.cnblogs.com/loveletters/p/haloExpansion.html