Skip to content

EngineerCMS在centos上编译二进制运行程序全过程记录

hotqin888 edited this page Dec 12, 2018 · 5 revisions

一、EngineerCMS运行环境要求

EngineerCMS是由水电院秦工主持开发的一款适合国人使用的文档共享高速协同(协作)通讯平台。该平台采用GO语言和Beego框架,使用Sqlite3数据库,由OnlyOffice提供文档协作服务。可编译成Windows、MAC、Linux系统二进制程序直接运行的WEB HTTP服务,用户可直接通过电脑、手机、平板在线访问、编辑常用文档。支持WORD、XLSX、PPTX、WPS、PDF、TXT、DWG等文档格式。每一台电脑、每个服务器均可成为独立的服务器,从而实现数据的分布式协同或独立式外网协同。感谢秦工的热情分享!感谢秦工对我的帮助。如有其它建议或者疑问可@我,lfj_9413@qq.com

二、EngineerCMS运行在linux内核上的意义

Linux内核占用资源少,适合在公网阿里云服务器上做对公网数据协同,一台服务器同时完成解释文档、上传、下载文档的全部过程,减少数据分布式传输解释效率低下的问题。

三、编译过程

Golang的平台是支持交叉编译的,也就是支持在windows下编译Linux、MAC内核的系统上直接运行的程序,但由于该平台具有一部分代码是用来驱动SQLITE的,而这个数据库的go语言驱动用到了cgo,而cgo是无法跨平台编译的,所以很无奈,只好在不同平台下单独编译了。 废话不多说,现在讲一下如何在Linux下编译EngineerCMS。其实Go程序不编译,是可以直接在Linux下运行的,运行方法:go run main.go,如果缺少文件库支持,会直接报错很多。 支持库下载: 下支持库之前把所有的插件包都装上,第一个当然是Golang了。 [root@bogon ~]# yum install golang 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile

  • base: mirrors.huaweicloud.com
  • extras: mirrors.huaweicloud.com
  • updates: mirrors.huaweicloud.com

正在解决依赖关系

  • --> 正在检查事务
  • ---> 软件包 golang.x86_64.0.1.9.4-1.el7 将被 安装
  • --> 正在处理依赖关系 golang-src = 1.9.4-1.el7,它被软件包 golang-1.9.4-1.el7.x86_64 需要
  • --> 正在处理依赖关系 golang-bin = 1.9.4-1.el7,它被软件包 golang-1.9.4-1.el7.x86_64 需要
  • --> 正在检查事务
  • ---> 软件包 golang-bin.x86_64.0.1.9.4-1.el7 将被 安装
  • ---> 软件包 golang-src.noarch.0.1.9.4-1.el7 将被 安装
  • --> 解决依赖关系完成

依赖关系解决

Package 架构 版本 大小
正在安装:
golang x86_64 1.9.4-1.el7 base 611 k
为依赖而安装:
golang-bin x86_64 1.9.4-1.el7 base 49 M
golang-src noarch 1.9.4-1.el7 base 5.1 M
事务概要

安装 1 软件包 (+2 依赖软件包)

总下载量:54 M

安装大小:222 M

Is this ok [y/d/N]: y

Downloading packages: | | ----|------|---- (1/3):| golang-1.9.4-1.el7.x86_64.rpm | 611 kB 00:00
(2/3):| golang-src-1.9.4-1.el7.noarch.rpm | 5.1 MB 00:04
(3/3): |golang-bin-1.9.4-1.el7.x86_64.rpm | 49 MB 05:12

总计 178 kB/s | 54 MB 05:13

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

  • 正在安装 : golang-src-1.9.4-1.el7.noarch 1/3

  • 正在安装 : golang-1.9.4-1.el7.x86_64 2/3

  • 正在安装 : golang-bin-1.9.4-1.el7.x86_64 3/3

  • 验证中 : golang-bin-1.9.4-1.el7.x86_64 1/3

  • 验证中 : golang-1.9.4-1.el7.x86_64 2/3

  • 验证中 : golang-src-1.9.4-1.el7.noarch 3/3

  • 已安装:

  • golang.x86_64 0:1.9.4-1.el7

  • 作为依赖被安装:

  • golang-bin.x86_64 0:1.9.4-1.el7 golang-src.noarch 0:1.9.4-1.el7

  • 完毕!

查看安装状态:

*[root@bogon ~]# rpm -qa |grep golang *golang-src-1.9.4-1.el7.noarch *golang-1.9.4-1.el7.x86_64 *golang-bin-1.9.4-1.el7.x86_64

  • 安装GO环境变量

  • 创建 mk root/ gorepository目录,后面的插件源程序、src项目目录,CMS目录都在这个目录中运行。

  • [root@bogon EngineerCMS-master]# export GOPATH=/root/gorepository

  • [root@bogon EngineerCMS-master]# go env

  • GOARCH="amd64"

  • GOBIN="/usr/lib/golang/bin"

  • GOEXE=""

  • GOHOSTARCH="amd64"

  • GOHOSTOS="linux"

  • GOOS="linux"

  • GOPATH="/root/gorepository"

  • GORACE=""

  • GOROOT="/usr/lib/golang"

  • GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"

  • GCCGO="gccgo"

  • CC="gcc"

  • GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build150084431=/tmp/go-build -gno-record-gcc-switches"

  • CXX="g++"

  • CGO_ENABLED="1"

  • CGO_CFLAGS="-g -O2"

  • CGO_CPPFLAGS=""

  • CGO_CXXFLAGS="-g -O2"

  • CGO_FFLAGS="-g -O2"

  • CGO_LDFLAGS="-g -O2"

  • PKG_CONFIG="pkg-config"

这就设置成功了!后面要下载很多插件,当时想偷个懒,想把github.com加入环境变量,让他自动下载,可惜设置成功了,也没自动下载,程序不能自动从网上下载,下面的语句是作废的,使用:添加多变量值。

[root@bogon EngineerCMS-master]# export GOPATH=/root/gorepository:http://github.com/:golang.org/:github.com/3xxx

下面下载支持插件库

    1. [root@bogon EngineerCMS-master]# yum install sqlite
    1. [root@bogon EngineerCMS-master]# yum install go
    1. [root@bogon EngineerCMS-master]# yum install beego
    1. [root@bogon EngineerCMS-master]# yum install git

凭印象记得的,其他的缺失文件看报错,自己下,已经下完的目录结构如下:

  • [root@bogon EngineerCMS-master]# dir

  • attachment document LICENSE net swagger

  • CHANGELOG.md engineercms.bat log quickstart快速开始.txt tests

  • conf file: main README.md tools

  • controllers History.txt main.go routers views

  • database lastupdate.tmp models static

  • [root@bogon EngineerCMS-master]# cd ..

  • [root@bogon gorepository]# dir

  • beego-master EngineerCMS7.12 EngineerCMS-master pkg

  • EngineerCMS EngineerCMS7.5 go-sqlite3-master src

  • [root@bogon gorepository]# cd src

  • [root@bogon src]# dir

  • github.com golang.org hello

  • [root@bogon src]# cd github.com

  • [root@bogon github.com]# dir

  • 3xxx astaxie casbin Knetic mattn pkg tealeg

  • andybalholm beego google lib pborman PuerkitoBio

  • [root@bogon github.com]# cd 3xxx

  • [root@bogon 3xxx]# dir

  • engineercms

  • [root@bogon 3xxx]# cd engineercms/

  • [root@bogon engineercms]# dir

  • controllers models routers swagger

  • [root@bogon engineercms]# cd controllers/

  • [root@bogon controllers]# dir

  • admin.go login.go reply.go user.go

  • adminlog.go onlyoffice.go roleControllers.go userRolesController.go

  • article.go product.go roleResourceController.go utils

  • attachment.go project.go search.go validator

  • default.go projgant.go security.go wiki.go

  • froala.go record.go test.json

  • index.go regist.go ueditor.go

  • [root@bogon controllers]# cd ..

  • [root@bogon engineercms]# cd ..

  • [root@bogon 3xxx]# cd ..

  • [root@bogon github.com]# cd beego

  • [root@bogon beego]# dir

  • admin bee

  • 如果缺失就自己去github下载。记得有一个插件需要在golang.org中下载,天朝这边进不去,可通过github下载路径,下完后,放回golang.org目录即可。那个目录路径如下:..src/golang.org/x/net

  • 目录有 AUTHORS CONTRIBUTORS http2….等,手打的。直接去github.com/x/net全部打包过来的。

  • 一切就绪后,进入从github下载完成的 EngineerCMS-master目录,

  • [root@bogon EngineerCMS-master]# go build main.go

  • 生成的主程序就在当前目录,直接执行即可

  • [root@bogon EngineerCMS-master]# ./main

  • 运行后监听端口,其他电脑无法访问,需要关闭linux防火墙!centos上命令

  • systemctl stop firewalld.service

  • Linux系统需要常驻后台运行,可使用这个语句执行:

  • nohup ./main > pso.file 2>&1 &

  • 开机自动执行文件方法略,可以自己百度一下。

四、排错要点

  • [root@bogon EngineerCMS-master]# go build main.go
  • main.go:8:2: cannot find package "github.com/3xxx/engineercms/models" in any of:
  • /usr/lib/golang/src/github.com/3xxx/engineercms/models (from $GOROOT)
  • /usr/lib/golang/src/src/github.com/3xxx/engineercms/models (from $GOPATH)
  • main.go:4:2: cannot find package "github.com/3xxx/engineercms/routers" in any of:
  • /usr/lib/golang/src/github.com/3xxx/engineercms/routers (from $GOROOT)
  • /usr/lib/golang/src/src/github.com/3xxx/engineercms/routers (from $GOPATH)
  • main.go:5:2: cannot find package "github.com/astaxie/beego" in any of:
  • /usr/lib/golang/src/github.com/astaxie/beego (from $GOROOT)
  • /usr/lib/golang/src/src/github.com/astaxie/beego (from $GOPATH)
  • main.go:6:2: cannot find package "github.com/astaxie/beego/orm" in any of:
  • /usr/lib/golang/src/github.com/astaxie/beego/orm (from $GOROOT)
  • /usr/lib/golang/src/src/github.com/astaxie/beego/orm (from $GOPATH)
  • main.go:9:2: cannot find package "github.com/mattn/go-sqlite3" in any of:
  • /usr/lib/golang/src/github.com/mattn/go-sqlite3 (from $GOROOT)
  • /usr/lib/golang/src/src/github.com/mattn/go-sqlite3 (from $GOPATH)

环境变量未包含这些插件源代码,需要手工下载,如果你确认下载了,目录也正确,那就是环境变量未设置,设置完成环境变量需要执行语句,go env生效!

如果缺失其他项目编程文件请联系秦工,记得有一个\EngineerCMS\controllers\utits目录下2个文件丢失。

对了,源程序秦工是在Windows下编译的,读取文件路径是//路径//,而linux是需要\路径\路径的,所以需要更改几处源码,否则文件无法上传、无法读取。

更换所有\为/即可,具体其他变动请@秦工。

以下是上面程序错误导致无法读取文件的报错界面:

以下是CentOS编译成功运行的文件读取界面:

五、附加其他Linux常用维护语句

linux常用命令和关闭防火墙

2.linux常用命令

  • Mkdir 创建
  • Rm -rf 删除
  • Chmod -R 777 权限
  • Mysql -uroot -r
  • quit退出
  • find / -name svn 查找位置
  1. 关闭防火墙和selinux

Redhat使用了SELinux来增强安全,关闭的办法为:

  1. 永久有效

修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。

  1. 即时生效

setenforce 0

关闭防火墙的方法为:systemctl stop firewalld.service

  1. 永久性生效

开启:chkconfig iptables on

关闭:chkconfig iptables off

  1. 即时生效,重启后失效

开启:service iptables start

关闭:service iptables stop

需要说明的是对于 Linux 下的其它服务都可以用以上命令执行开启和关闭操作

补充:

a. 防火墙还需要关闭ipv6的防火墙:

chkconfig ip6tables off

并且可以通过如下命令查看状态:

chkconfig --list iptables

b. selinux状态可以通过以下命令查看:

Sestatus

  • ps -ef |grep redis
  • ps:将某个进程显示出来
  • -A  显示所有程序。
  • -e  此参数的效果和指定"A"参数相同。
  • -f  显示UID,PPIP,C与STIME栏位。

grep命令是查找

中间的|是管道命令 是指ps命令与grep同时执行

这条命令的意思是显示有关redis有关的进程

  1. kill[参数][进程号]

    kill -9 4394

kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。当然你也可以使用kill发送其他信号给进程。

  • uname -a # 查看内核/操作系统/CPU信息
  • head -n 1 /etc/issue # 查看操作系统版本
  • cat /proc/cpuinfo # 查看CPU信息
  • hostname # 查看计算机名
  • lspci -tv # 列出所有PCI设备
  • lsusb -tv # 列出所有USB设备
  • lsmod # 列出加载的内核模块
  • env # 查看环境变量资源
  • free -m # 查看内存使用量和交换区使用量
  • df -h # 查看各分区使用情况
  • du -sh <目录名> # 查看指定目录的大小
  • grep MemTotal /proc/meminfo # 查看内存总量
  • grep MemFree /proc/meminfo # 查看空闲内存量
  • uptime # 查看系统运行时间、用户数、负载
  • cat /proc/loadavg # 查看系统负载磁盘和分区
  • mount | column -t # 查看挂接的分区状态
  • fdisk -l # 查看所有分区
  • swapon -s # 查看所有交换分区
  • hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
  • dmesg | grep IDE # 查看启动时IDE设备检测状况网络
  • ifconfig # 查看所有网络接口的属性
  • iptables -L # 查看防火墙设置
  • route -n # 查看路由表
  • netstat -lntp # 查看所有监听端口
  • netstat -antp # 查看所有已经建立的连接
  • netstat -s # 查看网络统计信息进程
  • ps -ef # 查看所有进程
  • top # 实时显示进程状态用户
  • w # 查看活动用户
  • id <用户名> # 查看指定用户信息
  • last # 查看用户登录日志
  • cut -d: -f1 /etc/passwd # 查看系统所有用户
  • cut -d: -f1 /etc/group # 查看系统所有组
  • crontab -l # 查看当前用户的计划任务服务
  • chkconfig –list # 列出所有系统服务
  • chkconfig –list | grep on # 列出所有启动的系统服务程序
  • rpm -qa # 查看所有安装的软件包

一、概述

应用

二、系统配置

三、编译

win系统

四、移动端

Clone this wiki locally