虚机ubuntu下局网搭建gitlab服务器

部署过程:

  • 坑一:当安装了postfix后,发现需要重新配置成internet,使用命令

sudo apt-get install gitlab-ce

然后就是参考过程:

https://blog.csdn.net/discoverer100/article/details/51814171

  • 坑二:本人禁用了先前安装的nginx,把external_url改成了“http://192.168.23.128:8010”,才顺利OK。否则看到的界面有问题,是CSS等资源不完整的显示。此时虽然能有改密码的界面,但不会成功的。如果是想和即有的nginx配合,请参考:https://jingyan.baidu.com/article/6525d4b1b5d89dac7c2e944a.html
  • 坑三:腾讯云把gitlab做起生意了,如果想在上面搞,域名和证书都要理顺,而且会对外界资源有排斥。

用户数据设计:

以下基于本人环境,不用参考。

root下面有codera,coderb,coderc

codera下面建立一个标准项目:bgsvc4hbw

grp4task1下面指定codera是owner(负责人),由root创建组,再邀请codera

此后,codera又建立了一个仓库flowshow用于研究git工作流。

进阶应用:

管理员密码重置

https://blog.csdn.net/weixin_30687051/article/details/97273880

工作流学习链接:

https://blog.csdn.net/qq_32452623/article/details/78905181?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

小结一下,gitflow的心得:

1)feature都是起止于develop分支(回归develop时使用:git merge –no-ff)

2)hotfixs是起于master,止于同时推给master(打tag且尾号加1)和develop(回归方式cherry-pick)

3)realse是起于develop,和hotfixs永远不发生关系,止于性质与hotfixs相同,但区别tag是前一位版本号加1。同样不使用merge来回归develop

4)对于master外的发布,可以根据环境灵活建立分支,比如一平台一分支。

5)tag一般不会隐式推送到远端,所以,可以只选择大版本来显示手工命令推送。

https://blog.csdn.net/github_27263697/article/details/79563949

备份和迁移

https://blog.csdn.net/qq_40907977/article/details/106756999

go与qt的新酒老瓶

前言

只所以说是新酒老瓶而不是新瓶老酒是有用意的。

因为QT是器,老瓶,出来时配合着C++的。而如今go来势凶凶,自然英雄所见略同。

两大开源神器,跨平台开发,终将双剑合璧了,让你如虎添翼。

过程记录如下

安装QT

→参考指导:

https://www.cnblogs.com/haijian/p/12417129.html

本人使用/usr/local/qt为QTDIR。5.12.10

安装go

→参考指导:

https://blog.csdn.net/icanx/article/details/91438450

→配置go env国内源

liteide源码编译安装

→参考指导:

https://www.cnblogs.com/7explore-share/p/5838281.html?utm_source=debugrun&utm_medium=referral

出现了模板路径报错,于是使用tarena环境,但是root账户,先安装两个包,再改脚本后,编译方成功。

https://www.cnblogs.com/liaojiafa/p/12798025.html

实在是经典解说:

→针对windows平台

在此时需要安装mingw64做为前提,不然liteide就是水土不服的。必要时关闭360吧!

mingw64实是难搞,换了几个工具,如mingw installation manager,最后用mingw-w64-install.exe
启动后选择版本,posix和seh,这就生成了安装目录。
在安装过程中,把此前下载的源码包压缩包“mingw-w64-v8.0.0.zip”重新命名为“x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z”,放置在默认的目录中“x86_64-8.1.0-posix-seh-rt_v6-rev0”
最后,把安装的路径
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
放到系统环境变量中。万事大吉。gcc,g++一应具全,随处可用。

GO111MODULE在windows上是没有auto可设置的,即便你使用liteide设置了,但go env中实际还是当它为on。

所以,系统底层仍设置为on,GOPATH目录内的源码编译成功,无论是否有go.mod。但要是GOPATH目录外的拥有go.mod文件(这是通过go mod init src生成的)可以编译成功。

当设置为off时,同时也得让GOPROXY为空,这时GOPATH和有go.mod的外部目录都可在命令行编译成功。所以,建议你还是使用命令行吧,因为,同一代码在命令行和liteide中结果不同,并且,保持on状态,保持代码不在GOPATH中。相信,go的发展也是会弃掉它。

→针对linux平台

GO111MODULE可以被liteide设置成auto.

这样设置的好处是模糊使用GOPATH(任何设置都OK)。而无论要编译的源码在任何目录都可以,且不用设置go.mod。

前台qt后台go起步

→参考指导:

环境:https://github.com/therecipe/qt/wiki

→therecipe/qt包的安装

先go get -u -v 不行就先下载,然后改名适配到代码中包引用的相应GOPATH中,然后再安装命令工具即cmd中的…。

重要是认清go get的本质就是一种git clone的包装。

go install  /home/tarena/code4DN/learn_gopath/src/github.com/therecipe/qt/cmd/...

不出意外是报错的,但看下面的解决问题内容。

→解决go端的环境的问题

https://blog.csdn.net/wzw_mzm/article/details/77618922

出现“找不到 golang.org/x/mod/module”问题,后来手工下载了golang.org/x/下面系列仓库,就是 git clone.

git clone https://github.com/golang/mod.git 
git clone https://github.com/golang/xerrors.git 
这是两个新加入的,一般没有它,已经可以运行demo.最终的完整支持包如下图

原始网上下载运行demo的命令如下,

go get -ldflags="-w" github.com/therecipe/examples/basic/widgets && $(go env GOPATH)/bin/widgets

它会直接运行一个弹出窗口,相应后台的操作是拷贝了代码并编译放在GOPATH/bin中,再运行。
本人已经下载过therecipe/qt包了,就是对应GOPATH下的

github.com/therecipe/examples/basic/widgets/main.go

→解决QT端的环境问题

以上集齐了龙珠。这里是锦上添花,因为,要充分使用QT的伎俩,就需要一套工具。
这时再次执行命令

go install  /home/tarena/code4DN/learn_gopath/src/github.com/therecipe/qt/cmd/...

命令成功使用之后

goqtuic的安装

go get -u -v github.com/stephenlyu/goqtuic

事实上没有这些工具也可以运行demo或QT库的代码。只要thericipe/qt包具备了就行。

总结跨平台

不管是windows还是linux下,都要在GOPATH/src下具备github.com和golang.org。前者里面有therecipe后者里面有x。同样的代码,都用Liteide编译,本地化成各自系统的风格。

静态库的go调用:(用GO来唤醒C的各种沉睡资源吧)
https://www.jianshu.com/p/b3fb41d7c33f

附录:

  • qtsetup会把qt的相应源码下载放置在go源码旁边,如果你有了mingw和gcc,它都会编译成静态库(.a的文件)给你。go帮你丰富环境真是全方位的。如果你是单独完全安装的qt环境,此处可以省略。很久以前,静态编译成window平台的QT库让你累疯,但现在mingw和go,让你永远不碰那个步骤了。
  • 翻墙参考:https://www.cnblogs.com/hupeng1234/p/9727170.html
  • qt如果要调试或用其它QT版本,有几个需要的环境变量比如QT_DIR。

nginx+redis应用服务架构搭建

事实上,两个东东功能独立。nginx作为开源的web服务器,可以用做反向代理等。而redis说白了就是一个内存数据库,存储键值对,可以多节点部署在多个物理机做为应用层,可以集群方式自动管理。可以不用重启,灵活增删节点等。
此处放在一起是因为工作中整理需要。当然,你可以分开阅读或借鉴。
前提:
CentOS6.5 x86_64
一,基础软件:有些并不是必须的补丁。
先用yum install -y XXX,如何需配置本地安装源有本站另外文档介绍。
如果没有yum那必须要有安装光盘的Packages文件夹了,里面是配套的软件包。用rpm -ivh XXX.rpm即可。
gcc的依赖如下:

cloog—–ppl
cpp—–mpfr
g++(gcc-c++)

libstdc++-devel
jdk

使用的openjdk的版本

把起作用的路径先设置成HOME路径,然后加入path。
如,java的默认路径是/etc/alternatives/jre_openjdk
#vi ~/.bash_profile
加入内容:
export JAVA_HOME=/etc/alternatives/jre_openjdk
export JRE_HOME=/etc/alternatives/jre
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
如下两个补丁包可以略,因为,在nginx的安装过程中也必须要源码编译安装。
PCRE
openssl-devel、pcre-devel、zlib-devel
zlib:
./configure
make
make install
ruby

libruby
ruby-libs
—-libreadline()
cd /path/ruby
./configure -prefix=/usr/local/ruby
make
make install
sudo cp ruby /usr/local/bin
事实上,用yum安装的话:yum install ruby,即可了
rubygems:

首先使用yum install rubygems来“投石问路”,就看到它所依赖的包,然后,在Packages目录里把rdoc和另一个包安装好,
最后,去网上下到了rubygems,
rubygems-1.3.7-5.el6.noarch.rpm
解压安装,成功。
没有yum的情况:
cd /path/gem
sudo ruby setup.rb
sudo cp bin/gem /usr/local/bin
gem-redis:

这是ruby和redis之间的桥,此时yum已经插手不上了。
方法一:
gem install redis –version 3.0.7
#由于源的原因,可能下载失败,就手动下载下来安装
#download地址:http://rubygems.org/gems/redis/versions/3.0.7
wget加url
方法二:
下载gem文件,在上面的url里一定会找到。
现场使用语句
gem install -l /root/tool/redis-3.0.7.gem
二,redis安装和运维:
安装集群:
tar -zxvf redis-3.0.7.tar.gz
mv redis-3.0.7 /usr/local/redis3.0.7
cd /usr/local/redis3.0.7
make
make install
cp /usr/local/redis-3.0.7/src/redis-trib.rb /usr/local/bin/
mkdir -p /usr.local/cluster
cp /usr/local/redis-3.0.7/redis.conf /usr.local/cluster
cd /usr.local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
1)启动节点,或说实例,在/usr.local/cluster/
现行配置redis.conf如下:
daemonize yes
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
cd 7000;redis-server /opt/redis/conf/redis.conf > redis-0.log 2>&1 &
cd ../7001;redis-server /opt/redis/conf/redis.conf > redis-1.log 2>&1 &
cd ../7002;redis-server /opt/redis/conf/redis.conf > redis-2.log 2>&1 &
2)构建集群关系
#redis-trib.rb的create子命令构建
#–replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
#节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
—单机情况下:
redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
—双机情况下:
redis-trib.rb create –replicas 1 130.1.2.11:7000 130.1.2.11:7001 130.1.2.11:7002 130.1.2.12:7000 130.1.2.12:7001 130.1.2.12:7002
3)检测集群工作情况
  #redis-trib.rb的check子命令构建
#ip:port可以是集群的任意节点
redis-trib.rb check 1 130.1.2.11:7000
结果是:
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
说明运行正常了。或者redis-cli -c -p,-h 10.0.0.1 -p 后ping/PONG
现场抓图:
技巧:
重改配置时常用语句:
cd ../7002/;rm nodes.conf -f;mv redis.conf redis.conf.v0
三,nginx安装
版本:
在/root/tool/下进行解压和编译安装。
现场最终起作用的语句:
./configure –with-pcre=pcre-8.12 –with-openssl=openssl-1.0.1c –with-zlib=zlib-1.2.8 –with-poll_module –prefix=/home/linux/nginx/nginx-1.9.4/run –with-stream
make;make install
把安装路径加入到path中,export NGINX_HOME,参考上面java安装。即/home/linux/nginx/nginx-1.9.4/run。
配置文档如下:在/home/linux/nginx/nginx-1.9.4/run/conf下面,名为nginx.conf.
删除http节,如果发现已经存在stream节,即把同名的节替换即可。
stream {
    server {
        listen 80;
        proxy_pass app;
    }
    upstream app {
        server 130.1.2.11:4442;
        server 130.1.2.12:4442;
    }
    server {
        listen 81;
        proxy_pass appp;
    }
    upstream appp {
        server 130.1.2.11:6666;
        server 130.1.2.12:6666;
    }
    server {
        listen 82;
        proxy_pass apppp;
    }
    upstream apppp {
        server 130.1.2.11:4433;
        server 130.1.2.12:4433;
    }
}
.nginx的启动
nginx -c /home/linux/nginx/nginx-1.9.4/run/conf/nginx.conf
重启命令 nginx -s reload
关闭
  1.从容停止:kill -QUIT nginx主进程号 (注释:进程号查询方法;ps -ef|grep nginx 看master进程号)
  2.快速停止:kill -TERM nginx主进程号
  3.强制停止:pkill -9 nginx
测试端口是否开放,当然先装好nc工具
nc -z -w 1 127.0.0.1 8883
可以快速开放一个tcp端口,相当于建立一个socket server:
nc -l 8884
用这个命令开放某个端口穿越防火wall
iptables -I INPUT -p tcp –dport 82 -j ACCEPT
iptables -L -n | grep 82
service iptables save
四,业务程序: