开源文档服务Wizard部署
文档服务概述
文档主要包括三个方面:
一、Wizard文档服务器部署
1.1 基本介绍
文档服务器可用于公司内部之间技术分享
、各个服务的部署
、维护文档记录
等。
采用开源项目wizard部署。
操作系统:CentOS 7
服务器配置:2C4G100G
1.2 部署
Wizard 项目提供两种安装方式:
- 手动安装
- Docker安装
其中手动安装需要配置PHP 7.2 +及相关扩展
、composer.phar
、MySQL 5.7 + / MariaDB
、Nginx
、Git
等,由于配置依赖比较繁琐,且后期版本升级等问题较麻烦。所以部署采用Docker方式部署
。
1.2.1 安装Docker
# yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce docker-ce-cli containerd.io
# systemctl start docker && systemctl enable docker
1.2.2 配置Docker镜像加速
可参考: DaoCloud
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# systemctl restart docker
1.2.4 安装MySQL 5.7
下载rpm包,配置数据库yum源、安装MySQL(最新版本5.7.28)
# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# yum -y install mysql57-community-release-el7-10.noarch.rpm
# yum -y install mysql-community-server
# systemctl start mysqld.service && systemctl enable mysqld.service
获取MySQL临时密码、登入数据库、修改密码安全策略、配置root密码
# grep "password" /var/log/mysqld.log
# mysql -u root -p
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
mysql> quit;
删除仓库源,放置yum更新时自动更新数据库,导致数据库版本升级问题
# yum -y remove mysql57-community-release-el7-10.noarch
1.2.3 配置Dockerfile
具体环境变量配置可参考env.example
以下Dockerfile主要配置如下:
- 数据库连接
- 修改项目应用名称
- 配置邮件服务器
- excel表格配置
- 访问地址配置
# cd /root
# touch Dockerfile
在Dockerfile中填入如下内容:
FROM mylxsw/wizard:latest
# 数据库连接配置
# 这里可以根据需要添加其它的Env配置,可用选项参考项目的.env.example文件
# 请根据实际情况修改!请根据实际情况修改!请根据实际情况修改!
ENV DB_CONNECTION=mysql
ENV DB_HOST=192.168.17.32
ENV DB_PORT=3306
ENV DB_DATABASE=wizard_2
ENV DB_USERNAME=wizard
ENV DB_PASSWORD=wizard
# 应用名称
ENV APP_NAME="Doc"
# 环境,正式请使用 production
ENV APP_ENV=production
#ENV APP_KEY=base64:pWMnse89AD/SRB042cMGR894FCACcdekgeq91deDQEC091=
# 邮件服务器配置,请根据实际情况修改!请根据实际情况修改!请根据实际情况修改!
ENV MAIL_DRIVER=smtp
ENV MAIL_HOST=
ENV MAIL_PORT=
ENV MAIL_USERNAME=
ENV MAIL_PASSWORD=
ENV MAIL_ENCRYPTION=
ENV MAIL_FROM_NAME=
# 表格文档配置
ENV WIZARD_SPREEDSHEET_MAX_ROWS=1000
ENV WIZARD_SPREEDSHEET_MAX_COLS=26
# 用户帐号是否需要邮件激活
ENV WIZARD_NEED_ACTIVATE=true
# 加密密钥
#ENV WIZARD_JWT_SECRET=QMCEeWEARHJKPR457fqgASGRHAhr573fh452gd
# 访问地址,只有正确配置后,导出的 markdown 文档图片才能正常展示
# 请根据实际情况修改!请根据实际情况修改!请根据实际情况修改!
ENV APP_URL=http://doc.wizard.com
# 文件上传存储目录
VOLUME /webroot/storage/app/public
RUN php artisan config:cache
1.2.4 配置数据库
创建数据库用户、用户授权、创建数据库
# mysql -u root -p
mysql> CREATE USER 'wizard'@'%' IDENTIFIED BY 'wizard';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'wizard'@'%' IDENTIFIED BY 'wizard';
mysql> CREATE DATABASE wizard_2;
mysql> quit;
1.2.5 构建镜像、启动应用
进入1.2.3 配置Dockerfile
步骤中,Dockerfile文件存放的目录、构建镜像
# cd /root
# docker build -t my-wizard .
数据库初始化
# docker run -it --rm --name my-wizard my-wizard php artisan migrate:install
# docker run -it --rm --name my-wizard my-wizard php artisan migrate
启动应用
# docker run -d \
--name my-wizard \
--mount source=my-wizard,target=/webroot/storage/app/public \
-p 80:80 \
my-wizard
注意:--mount
即将容器中的/webroot/storage/app/public
目录挂载于宿主机的my-wizard
目录下,my-wizard
实际在宿主机的/var/lib/docker/volumes/my-wizard
中。容器中的/webroot/storage/app/public
目录用于存放文档服务器中的所有图片及上传的附件。
可通过如下命令查看容器挂载的volume
# docker volume ls
DRIVER VOLUME NAME
local my-wizard
应用已部署完毕,可通过浏览器访问192.168.17.32
的80
端口访问。
二、Wizard文档服务器版本升级
wizard开源项目的版本还在版本迭代中,功能尚待完善,例如后期还会支持脑图等,因此版本的升级是非常必要的。
2.1 wizard的版本升级
停止容器、删除容器
# docker stop my-wizard
# docker rm my-wizard
更新镜像、启动应用
# docker pull mylxsw/wizard:latest
# docker run -d \
--name wizard \
-e DB_CONNECTION=mysql \
-e DB_HOST=192.168.17.32 \
-e DB_PORT=3306 \
-e DB_DATABASE=wizard_2 \
-e DB_USERNAME=wizard \
-e DB_PASSWORD=wizard \
-e APP_NAME="" \
-e APP_ENV=production \
-e MAIL_DRIVER= \
-e MAIL_HOST= \
-e MAIL_PORT= \
-e MAIL_USERNAME= \
-e MAIL_PASSWORD= \
-e MAIL_ENCRYPTION= \
-e MAIL_FROM_NAME= \
-e WIZARD_SPREEDSHEET_MAX_ROWS=1000 \
-e WIZARD_SPREEDSHEET_MAX_COLS=26 \
-e WIZARD_NEED_ACTIVATE=true \
-e APP_URL= \
--mount source=my-wizard,target=/webroot/storage/app/public \
-p 80:80 \
mylxsw/wizard
注意:
-
启动应用时必须带上
--mount
参数,将原来的volumes
挂载在容器的/webroot/storage/app/public
目录上。否则启动的新的容器会在/var/lib/docker/volumes/
目录下随机生成一个目录,然后将该目录挂载于容器中。此时,原来上传的图片及文件均无法访问。若已出现此情况,可先停止容器,再次启动容器时带上--mount source=my-wizard,target=/webroot/storage/app/public
参数,图片可正常访问,附件可正常访问。 -
启动容器时:
- 带上
Dockerfile 中的环境变量
,否则新的镜像无法读取到数据库等其他配置; - 用拉取到的最新的镜像启动,例如:更新的时候拉取的是
mylxsw/wizard:latest
的镜像,那么启动容器候需要带上mylxsw/wizard
镜像名称。
三、Wizard文档服务器的迁移
服务器迁移即将数据从一台服务器迁移至另外一台服务器上,保证数据一致性
、服务可用性
、版本稳定性
。
提醒:迁移过程包括两种环境:
- 旧服务器:原始数据存放的服务器
- 新服务器:新环境下准备导入数据的服务器。
以下文档中以旧服务器
和新服务器
作区分。
注意:迁移之前先将旧服务器的wizard升级至最新版本,保证新、旧服务器之间wizard
的版本一致性。
3.1 新服务器环境准备
1、需安装docker环境,参考1.2.1 安装Docker
2、安装MySQL5.7,参考本文1.2.4 安装MySQL 5.7
3、配置数据库,参考本文1.2.4 配置数据库
3.2 旧服务器备份
数据库备份,备份完后,/root
目录下生成backdb.sql
的文件
# cd /root
# mysqldump -u root -h host -p wizard_2 > backdb.sql
图片及上传附件备份,在/root
目录下生成backup.tar
的压缩包备份文件
# cd /root
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8856b96a8b2 my-wizard "docker-php-entrypoi…" 3 days ago Up 3 days 0.0.0.0:80->80/tcp my-wizard
# docker run --rm --volumes-from my-wizard -v $(pwd):/backup my-wizard tar cvf /backup/backup.tar /webroot/storage/app/public
第二条命令即将宿主机当前目录$(pwd)
临时挂载于my-wizard
容器的/backup
目录下,并将容器中的/webroot/storage/app/public
目录下的数据打包成backup.tar
文件,放置于容器的/backup
目录,即本地宿主机的$(pwd)
目录下。
3.3 服务部署
wizard服务搭建,可参考本文1.2.3 配置Dockerfile 、1.2.4 配置数据库、1.2.5 构建镜像、启动应用*
3.3 传递备份数据
传递备份数据至新服务器的/root
目录下:
# scp /root/backdb.sql root@新服务器ip:~
# scp /root/backup.tar root@新服务器ip:~
3.4 导入数据
数据库导入,数据库的导入有两种方式,如下(需确保wizard数据库已经创建):
方法一:
cd /root
# mysql -u root -p [dbname] < backup.sql
方法二:
cd /root
# mysql -u root -p
MYSQL> USE DATABASE [dbname];
MYSQL> source backup.sql;
上传图片及附件数据导入(需确保wizard容器已正常运行,且服务可访问)
# cd /root
# docker run --rm --volumes-from my-wizard -v $(pwd):/backup my-wizard bash -c "cd /webroot && tar xvf /backup/backup.tar --strip 1"
此命令将新服务器的$(pwd)
当前目录挂载于my-wizard
容器的/backup
目录下,再进入容器的/webroot
目录,解压压缩包。
至此,恢复完成,数据迁移完毕。
参考文章
1. Use volumes
2. Wizard 开源文档管理系统
3. CentOS7 yum方式安装MySQL5.7