-
Notifications
You must be signed in to change notification settings - Fork 410
EngineerCMS在centos上编译二进制运行程序全过程记录
EngineerCMS是由水电院秦工主持开发的一款适合国人使用的文档共享高速协同(协作)通讯平台。该平台采用GO语言和Beego框架,使用Sqlite3数据库,由OnlyOffice提供文档协作服务。可编译成Windows、MAC、Linux系统二进制程序直接运行的WEB HTTP服务,用户可直接通过电脑、手机、平板在线访问、编辑常用文档。支持WORD、XLSX、PPTX、WPS、PDF、TXT、DWG等文档格式。每一台电脑、每个服务器均可成为独立的服务器,从而实现数据的分布式协同或独立式外网协同。感谢秦工的热情分享!感谢秦工对我的帮助。如有其它建议或者疑问可@我,lfj_9413@qq.com。
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
下面下载支持插件库
-
- [root@bogon EngineerCMS-master]# yum install sqlite
-
- [root@bogon EngineerCMS-master]# yum install go
-
- [root@bogon EngineerCMS-master]# yum install beego
-
- [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常用命令和关闭防火墙
2.linux常用命令
- Mkdir 创建
- Rm -rf 删除
- Chmod -R 777 权限
- Mysql -uroot -r
- quit退出
- find / -name svn 查找位置
- 关闭防火墙和selinux
Redhat使用了SELinux来增强安全,关闭的办法为:
- 永久有效
修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。
- 即时生效
setenforce 0
关闭防火墙的方法为:systemctl stop firewalld.service
- 永久性生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
- 即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
需要说明的是对于 Linux 下的其它服务都可以用以上命令执行开启和关闭操作
补充:
a. 防火墙还需要关闭ipv6的防火墙:
chkconfig ip6tables off
并且可以通过如下命令查看状态:
chkconfig --list iptables
b. selinux状态可以通过以下命令查看:
- ps -ef |grep redis
- ps:将某个进程显示出来
- -A 显示所有程序。
- -e 此参数的效果和指定"A"参数相同。
- -f 显示UID,PPIP,C与STIME栏位。
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行
这条命令的意思是显示有关redis有关的进程
-
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 # 查看所有安装的软件包
EngineerCMS助力工程师