0 安装准备
如果是局域网, 部署的电脑拥有固定 ip(下文叫宿主机, 切记)电脑能打开 cup 的虚拟功能如果部署到云主机, 道理是一样的
环境是 win7 以上, win10 以下 Win10 区别就是安装的 docker 软件不同而已
第一步: 确定电脑打开了 cpu 虚拟打开 https://jingyan.baidu.com/article/22fe7ced3b4c003002617f17.html
第二步: 下载和安装 docker toolbox, 默认安装即可下载地址 http://get.daocloud.io/, 下载支持旧版 windows 的 docker toolbox,win10 就直接下载 docker 了
第三步: 启动 docker 后在里面拉取 Onlyoffice Document Server 的 Docker 镜像
1 拉取 ONLYOFFICE Document Server 的 Docker 镜像
拉取镜像 sudo docker pull onlyoffice/documentserver
建议用离线的:
(存出命令 Administrator@604TFALNDKDKJWCMINGW64 ~/winfont
- $ dockersave -o onlyofficedocumentserver.tar onlyoffice/documentserver)
- dockerload < onlyofficedocumentserver.tar
2 启动映射至 9000 端口
docker run-i-t-d-p9000:80onlyoffice/documentserver
3 替换容器 onlyofficedocument server 的字体
- // 进入容器 (运行的镜像) 内
- $ dockerexec -it 38e27 /bin/bash
- root@38e27823ae92:/#dir 或者 ls al
- root@6dfa5705aaef:~#cd /usr/share/fonts/
- root@6dfa5705aaef:/usr/share/fonts#ls
- truetype X11
- // 删除文件夹 X11
- root@6dfa5705aaef:/usr/share/fonts#rm -R dir X11
- rm:cannot remove dir: No such file or directory
- root@6dfa5705aaef:/usr/share/fonts#ls
- truetype
- root@6dfa5705aaef:/usr/share/fonts#cd truetype
- root@6dfa5705aaef:/usr/share/fonts/truetype#ls al
- root@6dfa5705aaef:/usr/share/fonts/truetype#ls -al
- total462392
- drwxr-xr-x11 root root 4096 Feb 19 04:17 .
- // 删除 trutype 文件夹下所有文件
- root@6dfa5705aaef:/usr/share/fonts/truetype#rm -R dir *.*
- rm:cannot remove dir: No such file or directory
- root@6dfa5705aaef:/usr/share/fonts/truetype#rm -R dir *
- rm:cannot remove dir: No such file or directory
- rm:cannot remove custom: Device or resource busy
- root@6dfa5705aaef:/usr/share/fonts/truetype#ls
- custom
- root@6dfa5705aaef:/usr/share/fonts/truetype#ls -al
- total 12
- drwxr-xr-x10 root root 4096 Feb 19 10:14 .
- drwxr-xr-x 6 root root 4096 Feb 19 10:12 ..
- drwxr-xr-x 2 root root 4096 Feb 19 03:48 custom
- root@6dfa5705aaef:/usr/share/fonts/truetype#exit
- exit
- Administrator@604TFALNDKDKJWCMINGW64 ~/winfont
- // 将当前文件夹 C:\Users\Administrator \ 下的 winfont 文件夹内的字体全部拷贝到容器的文件夹 / usr/share/fonts/truetype 中
- $ tar -cv* | docker exec -i 6df tar x -C /usr/share/fonts/truetype
- kaiu.ttf
- msjh.ttc
- msjhbd.ttc
- msjhl.ttc
- msyh.ttc
- msyh.ttf
- msyhbd.ttc
- msyhl.ttc
- simfang.ttf
- simhei.ttf
- simkai.ttf
- simli.ttf
- simsun.ttc
- simsunb.ttf
- simyou.ttf
- Administrator@604TFALNDKDKJWCMINGW64 ~/winfont
- // 进入容器内
- $ dockerexec -it 6df /bin/bash
- root@6dfa5705aaef:/#sudo mkfontscale
- root@6dfa5705aaef:/#sudo mkfontdir
- root@6dfa5705aaef:/#sudo fc-cache -fv
- /usr/share/fonts:caching, new cache contents: 0 fonts, 1 dirs
- fc-cache:succeeded
- root@6dfa5705aaef:/#exit
- exit
- // 退出容器
- Administrator@604TFALNDKDKJWCMINGW64 ~/winfont
- $ dockerexec 6df /usr/bin/documentserver-generate-allfonts.sh
- GeneratingAllFonts.js, please wait...Done
- onlyoffice-documentserver:docservice:stopped
- onlyoffice-documentserver:docservice:started
- onlyoffice-documentserver:converter:stopped
- onlyoffice-documentserver:converter:started
4 二次开发 EngineerCMS
4.1 协作编辑页面
- [html] view plain copy
- <!DOCTYPE html>
- <html style="height: 100%;">
- <head>
- <title>fei-OnlyOffice</title>
- </head>
- <body style="height: 100%; margin: 0;">
- <dividdivid="placeholder" style="height: 100%"></div>
- <script type="text/javascript"src="http:// 安装 docker 电脑的 ip:9000/web-apps/apps/api/documents/api.js"></script>
- <scripttypescripttype="text/javascript">
- //alert({{.Doc.FileName}});
- window.docEditor = newDocsAPI.DocEditor("placeholder",
- {
- "document": {
- "fileType": "{{.fileType}}",
- "key": "{{.Key}}",//"Khirz6zTPdfd7"
- "title": "{{.Doc.FileName}}",
- "url": "http:// 运行 engineercms 电脑的 ip/attachment/onlyoffice/{{.Doc.FileName}}"
- },
- "documentType":"{{.documentType}}",
- "editorConfig": {
- "callbackUrl": "http:// 运行 engineercms 电脑的 ip /url-to-callback?id={{.Doc.Id}}",
- "user": {
- "id": "{{.Uid}}",
- "name": "{{.Uname}}"
- },
- "lang": "zh-CN",//"en-US",
- },
- "height": "100%",
- "width": "100%"
- });
- </script>
- </body>
- </html>
4.2 协作页面的保存和回调
- [plain] view plain copy
- type Callback struct {
- Key string `json:"key"`
- Status int `json:"status"`
- Url string `json:"url"`
- Changesurl string `json:"changesurl"`
- History history `json:"history"`
- Users []string `json:"users"`
- Actions []action `json:"actions"`
- Lastsave string `json:"lastsave"`
- Notmodifiedbool `json:"notmodified"`
- }
- type action struct {
- Type int
- userid string
- }
- type history struct {
- changes []change
- serverVersionstring
- }
- type change struct {
- created string
- User User1
- }
- type User1 struct {
- id string
- name string
- }
- // 关闭浏览器标签后获取最新文档保存到文件夹
- func (c *OnlyController) UrltoCallback() {
- // pk1 :=c.Ctx.Input.RequestBody
- id :=c.Input().Get("id")
- //pid 转成 64 为
- idNum, err :=strconv.ParseInt(id, 10, 64)
- if err != nil {
- beego.Error(err)
- }
- // 根据附件 id 取得附件的 prodid, 路径
- onlyattachment,err := models.GetOnlyAttachbyId(idNum)
- if err != nil {
- beego.Error(err)
- }
- var callbackCallback
- json.Unmarshal(c.Ctx.Input.RequestBody,&callback)
- ifcallback.Status == 1 || callback.Status == 4 {
- c.Data["json"]= map[string]interface{}{"error": 0}
- c.ServeJSON()
- } else ifcallback.Status == 2 {
- resp, err :=http.Get(callback.Url)
- if err != nil{
- beego.Error(err)
- }
- body, err :=ioutil.ReadAll(resp.Body)
- if err != nil{
- beego.Error(err)
- }
- deferresp.Body.Close()
- if err != nil{
- beego.Error(err)
- }
- f, err :=os.OpenFile(".\\attachment\\onlyoffice\\"+onlyattachment.FileName,os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm)
- if err != nil{
- beego.Error(err)
- }
- deferf.Close()
- _, err =f.Write(body)
- if err != nil{
- beego.Error(err)
- } else {
- err =models.UpdateOnlyAttachment(idNum)
- if err !=nil {
- beego.Error(err)
- }
- }
- c.Data["json"]= map[string]interface{}{"error": 0}
- c.ServeJSON()
- }
- }
来源: http://www.bubuko.com/infodetail-2524538.html