• 基于Ubuntu22和Mysql8的私有Wiki系统搭建


    1 需求

    • 搭建一个共享的私有Wiki

    2 现状

    • Ubuntu22实体服务器
    • Mysql5.7

    3 解决方案

    采用开源的Wiki系统进行搭建,比较出名的是Wikijs,它支持多种数据库PostgreSQL / MySQL / MariaDB / MS SQL Server / SQLite,经过考虑用Mysql。
    优点:维护的活跃程度高,功能强大
    缺点:需要Mysql8+

    4 实施方案

    Mysql8x和Mysql5的共存安装没经验,可能会出现配置冲突问题。解决方案是通过Docker安装Mysql8,实现共存。

    4.1 Ubuntu22的中安装Mysql Docker

    (1)查看ubuntu 版本信息更新系统

    更新系统

    sudo apt update
    sudo apt list --upgradeable
    sudo apt upgrade -y
    
    • 1
    • 2
    • 3

    查看最新系统信息

    cat /etc/os-release
    lsb_release -a
    
    • 1
    • 2
    (2)安装Docker
    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
    • 1

    查看Docker运行状态

    sudo systemctl status docker
    
    • 1

    看到如下状态则证明安装成功

    (3)配置Docker

    Docker 镜像加速
    国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

    科大镜像:https://docker.mirrors.ustc.edu.cn/
    网易:https://hub-mirror.c.163.com/
    阿里云:https://<你的ID>.mirror.aliyuncs.com
    七牛云加速器:https://reg-mirror.qiniu.com
    Docker中国区官方镜像:https://registry.docker-cn.com
    网易:http://hub-mirror.c.163.com
    USTC 中国科技大学:https://docker.mirrors.ustc.edu.cn

    sudo vim /etc/docker/daemon.json
    
    • 1

    加入如下信息

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ]
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看是否生效

    docker info
    
    • 1

    看到如下消息则生效

    (4)安装Mysql8x
    docker pull mysql
    
    • 1

    查看镜像文件的相关信息

    docker inspect mysql
    
    • 1
    (5)启动Mysql实例

    Mysql实例重启后数据和配置文件都会丢失,所以需要通过虚拟目录的方式进行保存,在启动的时候进行参数配置。首先启动一个简单的实例,看看配置文件具体在哪,每个系统的配置文件位置可能不一样。

    docker run -itd -P -e MYSQL_ROOT_PASSWORD=root mysql
    
    • 1

    查看实例启动情况

    docker ps
    
    • 1

    如果出错则先查看错误日志

    docker logs 1b78ca228ac3
    
    • 1

    进入Mysql8实例查看

    docker exec -it 1b78ca228ac3 /bin/bash
    cd /etc
    ls
    
    • 1
    • 2
    • 3

    同理也能找到数据文件所在的地方

    cd /var/lib/mysql
    
    • 1

    本文有一个需求,就是Wiki上传的数据文件比较大,超过了Mysql8默认的大小,需求进行配置,我们在系统中先构造出my.cnf,将max_allowed_packet上限设置为1Gb。我们创建数据文件和配置文件目录

    mkdir /home/dev/wiki-data/docker-mysql
    mkdir /home/dev/wiki-data/docker-mysqld-cnf
    cd /home/dev/wiki-data/docker-mysqld-cnf
    vim my.cnf
    
    • 1
    • 2
    • 3
    • 4

    输入Docker实例中/etc/my.cnf内容,并在[mysqld]下新增字段max_allowed_packet

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
    
    [mysqld]
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    max_allowed_packet=1024M
    
    # Remove leading # to revert to previous value for default_authentication_plugin,
    # this will increase compatibility with older clients. For background, see:
    # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
    # default-authentication-plugin=mysql_native_password
    skip-host-cache
    skip-name-resolve
    datadir=/var/lib/mysql
    socket=/var/run/mysqld/mysqld.sock
    secure-file-priv=/var/lib/mysql-files
    user=mysql
    
    pid-file=/var/run/mysqld/mysqld.pid
    [client]
    socket=/var/run/mysqld/mysqld.sock
    
    !includedir /etc/mysql/conf.d/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    关闭上次启动的实例

    docker stop 1b78ca228ac3
    
    • 1

    再次创建新实例

    docker run -itd -p 26666:3306 -P -v /home/dev/wiki-data/docker-mysql:/var/lib/mysql -v /home/dev/wiki-data/docker-mysqld-cnf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql
    
    • 1

    访问Mysql实例

    mysql -h172.17.0.1 -uroot -p -P26666
    
    • 1

    看到如下内容则成功进入实例

    创建数据库、账户和授权

    create database wiki character SET utf8 COLLATE utf8_bin; //创建Wiki对应数据库并授权
    SET GLOBAL transaction_isolation='READ-COMMITTED';  //设置mysql隔离级别 
    create user 'wikijs'@'%' identified by 'wikijsrocks';
    GRANT ALL PRIVILEGES ON wiki.* TO 'wikijs'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重启Mysql8实例,检查数据是和否持久化

    (6)实例自动重启

    为应对系统重启和其他灾害导致的实例挂了的情况,可以做一个简单的脚本做重启任务

    #!/bin/bash
    sm=`ps -fe |grep "-host-port 26666" |grep -v "grep" |wc -l`
    if [ $sm -eq 0 ]; then
       echo "start to run mysql8."
       docker run -itd -p 26666:3306 -P -v /home/dev/wiki-data/docker-mysql:/var/lib/mysql -v /home/dev/wiki-data/docker-mysqld-cnf/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql
    else
       echo "mysql8 is already running!"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    (7)数据备份

    为防止数据丢失,可以做一个简单的数据备份,定时备份

    login_user="root"    #数据库登录账户
    login_passwd="root"        #数据库登录密码
    vDate=`date +%Y%m%d`    #当前日期,用作目录名
    backup_dir="/home/dev/wiki-data/"$vDate"/" #配置备份文件保存的目录
    echo $backup_dir
    if [ ! -d $backup_dir ];then
    	mkdir -p $backup_dir
    fi
    # 将需要备份的数据放入
    mysqldump -h172.17.0.1 -P26666 -u$login_user -p$login_passwd wiki > $backup_dir$vDate.sql
    # 删除7天前备份的文件
    find backup_dir -atime +7 -name "*.sql" -exec rm -rf {} \
    echo "备份结束"
    # 如果遇到unexpected end of file,使用vim打开文件后,输入“:set ff”,如果看到结果为dos,则文件编码不正确
    # 需要输入“:set ff=unix”进行修复
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    至此,数据库创建完成。

    4.2 安装Wikijs

    (1)下载Wikijs

    Wikijs为开源项目,在定制化要求不高的情况下,可以考虑直接用它的release版本:
    下载release包

    wget https://github.com/requarks/wiki/releases/download/v2.5.291/wiki-js.tar.gz
    tar -zxvf wiki-js.tar.gz
    
    • 1
    • 2

    这里要进行数据库和存储文件配置,这里只需要修改根目录下的config.yml就行了
    配置Mysql参数

      type: mysql
      host: localhost     #Mysql所在服务器地址
      port: 3306          #Mysql所在服务器地址
      user: wikijs        #在Mysql中创建的wiki的登陆用户名
      pass: wikijsrocks   #在Mysql中创建的wiki的登陆用户名密码
      db: wiki            #在Mysql中创建的wiki的数据库名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    配置文件保存地址,默认放到安装包的根目录data文件夹内

    dataPath: ./data
    
    • 1
    (2)配置Nginx

    Nginx的配置这里不具体展开,具体安装过程参考基于CentOS 8搭建Nginx服务器(https://blog.csdn.net/huiskai/article/details/111302936),这里需要重点注意的是,对于有大文件上传下载需求的,需要修改nginx的最大数据包限制。

    在http下面加上如下参数,从而将最大数据包限制提高到1Gb

    client_max_body_size 1024m;
    
    • 1

    为了防止超时,需要加一下超时参数,这里配置server的超时参数

     proxy_send_timeout 300;
     proxy_read_timeout 300;
     proxy_connect_timeout 300;
    
    • 1
    • 2
    • 3

    如下

    (3)安装Nodejs

    Wikijs为node作为后端,需要安装nodejs,这里不展开详细介绍怎么安装nodejs,具体可以参考这篇文章Ubuntu20安装最新nodejs(https://blog.csdn.net/huiskai/article/details/116109255)

    (4)启动服务

    根据项目说明文档提示,进入根目录后直接运行命令

    npm run start
    
    • 1

    打开http://localhost:3000

    进入配置页面,Enjoy!

    Wikijs文档齐全,功能强大,涉及到用户管理、权限管理、文档管理等,各位大佬可以根据需要进行配置。

    参考资料

    1. ubuntu 安装docker mysql 8.0.28
    2. 虚拟机中docker安装mysql远程无法访问解决方法
    3. 怎么在Docker中部署MySQL并实现数据持久化
    4. 在UBUNTU上自动备份MYSQL
    5. 在Ubuntu/Linux中自动备份MySQL数据库
    6. Nginx 配置之解决 413 错误(Request Entity Too Large)
    7. NGINX 报错 413 Request Entity Too Large 解决方案
    8. Nginx 出现504 Gateway Time-out的解决方法
    9. Ubuntu 22.04安装、配置和删除MySQL 8
    10. Got a packet bigger than ‘max_allowed_packet’ bytes?问题解决
  • 相关阅读:
    【二叉树-中等】1104. 二叉树寻路
    PE文件(十一)移动导出表和重定位表
    【解决方案】危化品厂区安防系统EasyCVR+AI智能监控
    蓝禾,三七互娱,顺丰,康冠科技,金证科技24春招内推
    [数据结构] 树、森林及二叉树的应用
    数字IC前端笔试常见大题整理(简答+手撕)
    C# Onnx Yolov8 Pose 姿态识别
    维格云轮播组件入门教程
    基于蒙特卡诺的风、光模型出力(Matlab代码实现)
    qt Android中使用opencv处理视频
  • 原文地址:https://blog.csdn.net/huiskai/article/details/127845431