设置固定ip
https://www.linuxidc.com/Linux/2017-12/149910.htm
rz 是传到远程
sz 是远程到本地
yum install -y lrzsz
去golang中文网找到linux版,复制链接
先装wget
yum install wget -y
装golang
wget https://studygolang.com/dl/golang/go1.12.7.linux-amd64.tar.gz
配置环境变量
vim /etc/profile
export GOROOT=/root/go
export PATH=$PATH:$GOROOT/bin
export GOPROXY=https://goproxy.io
source /etc/profile
和golang差不多
配置环境
export JAVA_HOME=/root/jdk1.8.0_201
export CLASSPATH=$JAVA_HOME/lib/
# 这里加到golang的环境后面
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin
centos6是6,centos7换成7
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装nginx
yum install nginx -y
缺少依赖执行下面命令后再执行yum install nginx -y
sudo yum install epel-release
开机启动 & 测试是否启动成功
system start nginx
systemctl enable nginx
curl 127.0.0.1
或者直接浏览器访问当前主机ip会弹出 Welcome to nginx on Fedora!
配置反向代理
vim /etc/nginx/conf.d/default.d
配置内容是网上找的原文链接
upstream tomcatserver1 {
server 192.168.72.49:8080 weight=3;
server 192.168.72.49:8081;
}
server {
listen 80;
server_name 8080.max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
其他配置
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
1)down
表示单前的server暂时不参与负载
2)Weight
默认为1.weight越大,负载的权重就越大。
3)max_fails
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4)fail_timeout
max_fails 次失败后,暂停的时间。
5)Backup
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
运行Jenkins 这个是基于java来运行的
java -jar jenkins.war --httpPort=8080
初始密码保存在下面路径,看个人情况
#启动时候会打印出密码
b72cfc34857b4648801c6673b0ed4353
/root/.jenkins/secrets/initialAdminPassword
访问jenkins
#因为我指定的8080
本机ip:8080
它会显示
Please wait while Jenkins is getting ready to work …
Your browser will reload automatically when Jenkins is ready.
一直让你等,那就慢慢等吧,不要动控制台
最后等到让输入密码才算安装好,这个很慢,我在以前manjaro上装很快的,虚拟机上装太慢了
然后安装推荐配置即可
编写jenkins启动脚本呢
#在jenkins.war的同级目录
vim start_jenkins.sh
# 脚本内容 (启动后 追加日志 不输出到屏幕)保存退出
java -jar jenkins.war --httpPort=8080 1>./access.log 2>/dev/null &
#改变权限
chmod 755 start_jenkins.sh
#运行
./start_jenkins.sh
插件不显示的问题:
1.停留在可选插件那个页面,不要关闭页面。
2.然后再打开一个新的窗口,输入网址 http://localhost:8080/pluginManager/advanced ,输入网址打开后滑动到页面下方,最底下有个【升级站点】,把其中的链接改成这个http的链接 http://updates.jenkins.io/update-center.json。
3.然后在服务列表中关闭jenkins,再启动,可选插件里面就不是空的了,就有了各种插件,可以下载自己需要的插件了
原文出处
jenkins发布需要安装插件 publish over ssh
直接在页面安装就行了,然后可以配置发布,这个先留个坑以后再写
这个配置微服务的话每台机器都要装
cnetos7直接可以用yum安装
yum install etcd -y
配服务器1环境
vim /etc/etcd/etcd.conf
服务器1内容
ETCD_LISTEN_PEER_URLS="http://192.168.222.129:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.222.129:2379,http://localhost:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd1"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.222.129:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.222.129:2379,http://localhost:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.222.129:2380,etcd2=http://192.168.222.130:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
"/etc/etcd/etcd.conf" 69L, 1785C
服务器2内容
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.222.130:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.222.130:2379,http://localhost:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd2"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.222.130:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.222.130:2379,http://localhost:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.222.129:2380,etcd2=http://192.168.222.130:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
配置环境变量,指定etcd的版本
vim /etc/profile
#内容如下
export ETCDCTL_API=3
保存后编译一下,然后启动etcd,两个服务器都启动
systemctl start etcd
验证是否配置成功,会显示出节点数
etcdctl member list
两个节点
5661095abc3ad75b, started, etcd2, http://192.168.222.130:2380, http://192.168.222.130:2379,http://localhost:2379
c0215319d7f65f22, started, etcd1, http://192.168.222.129:2380, http://192.168.222.129:2379,http://localhost:2379
安装源
rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
安装mysql
yum install mysql-community-server
启动
systemctl start mysqld
查看原始密码,
cat /var/log/mysql.log
或者
cat /var/log/mysqld.log
这句话后面XXXX就是密码
A temporary password is generated for root@localhost:XXXX
例如:
A temporary password is generated for root@localhost: /)3s!SzMsv0?
初始密码就是 /)3s!SzMsv0?
修改密码 (根据情况改了以后重新启动)
mysql_secure_installation
重新启动
systemctl restart mysqld
登陆进去
mysql -uroot -p
设置权限让外面的人可以访问本mysql
use mysql
# 任何地方都可以通过这个密码来访问mysql
grant all privileges on *.* to 'root'@'%' identified by 'xxx';
然后重启mysql就好了
yum安装的好处是可以解决软件依赖
什么是epel:
RHEL以及他的衍生发行版如CentOS、Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。
什么是EPEL?
EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。
如果你知道rpmfusion.org的话,拿 rpmfusion 做比较还是很恰当的,rpmfusion 主要为桌面发行版提供大量rpm包,而EPEL则为服务器版本提供大量的rpm包,而且大多数rpm包在官方 repository 中是找不到的。
另外一个特点是绝大多数rpm包要比官方repository 的rpm包版本要来得新,比如我前些日子在CentOS上安装的php,RHEL为了稳定性还在延用5.1.6版,我记得这是去年上半年的版本,而php 的最新版本已经到5.3.2,如果在php5.1.6的基础上安装phpmyadmin,则会提示php版本过低,这时候,EPEL中提供的较新php rpm就能很方便的派上用场了。
#安装centos7最新的源
yum install epel-release
#安装redis
yum install redis
#配置环境
找到配置文件whereis redis一般是/etc/redis/redis.conf
修改配置文件,将daemonize no改为yes就行了
还有bind的地址,改成自己需要的
而且这个redis,是一个配置文件是一个redis服务,本机上可以启动多个redis服务
然后像rdb,aof,主从复制,读写分离,监视器,事务,消息对列,都是在里面配置,因为我以前是手写的笔记,所以没办法放上来
需要先装Erlang 并且版本大于19.3
#安装centos7最新源
yum install epel-release
#安装Erlang
yum install erlang
#安装rabbitmq
yum install rabbitmq-server
# 启动rabbitmq
systemctl start rabbitmq-server
# 启用插件 ,这是管理页面插件,安装后,就能进去管理页面
rabbitmq-plugins enable rabbitmq_management
# 重新启动
systemctl restart rabbitmq-server
然后浏览器数据IP:15672就能进去管理界面
进去以后没有用户,要添加用户,然后就可以登录了,也可以再添加一个root用户。
# 查看帮助命令
rabbitmqctl -help
# 添加用户admin 用户名admin和密码admin
rabbitmqctl add_user admin admin
#设置用户是超级管理员,通过设置用户标签
rabbitmqctl set_user_tags admin administrator
用的时候进去页面点击Admin看看用户有没有access权限(访问权限),没有的话设置一下就好了
代码中如何使用
去官网
选择get starts 然后点RabbitMQ Tutorials后选择Go
官网地址
package main
import (
"log"
"github.com/streadway/amqp"
)
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
failOnError(err, "Failed to connect to RabbitMQ")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
这是发布用的,守护进程,每个服务器都要装
安装之前也要装
yum install epel-release
还要关闭防火墙
# 安装
yum install supervisor
# 设置开机启动
systemctl enable supervisord
# 启动
systemctl start supervisord
# 进去配置文件
vim /etc/supervisord.conf
文件内容
; Sample supervisor config file.
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; sockef file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
"/etc/supervisord.conf" 129L, 7953C
要执行的文件配置在 /etc/supervisord.d/下
cd /etc/supervisord.d
vim test.ini
获取公钥
进入.ssh目录执行
ssh-keygen -t rsa
拿出来公钥放到authorized_keys中
其实原理很简单:每台服务器的authorized_keys文件,有谁的公钥,那么那台服务器就能访问这里,访问的时候会先到authorized_keys文件中找有没有来访者的公钥,有的话就让访问。
举个例子:服务器1的.ssh/authorized_keys文件中有服务器2-6的公钥,那么服务器2-6就能访问服务器1
# id_rsa.pub中放置的是公钥
cat id_rsa.pub > authorized_keys
将公钥发送到服务器2相同目录下
scp authorized_keys [email protected]:/root/.ssh/
测试访问,是不用输入密码的
ssh 192.168.222.130
如果不清楚的话可以更改服务器的名字,每台服务器倒要改
vim /etc/hosts
#追加
#192.168.222.129 node1
#192.168.222.130 node2
#保存退出
然后执行下面的,每台都要改
vim /etc/hostname
#node1的机器 改成node1
#node2的机器 改成node2
然后reboot重启服务器,不过改了服务器名字的话,密钥也要重新配置
直接go get 安装就行了,然后去官网看看如何快速启动.
go get github.com/go-xorm/xorm
在xorm里面,可以同时存在多个Orm引擎,一个Orm引擎称为Engine,一个Engine一般只对应一个数据库。Engine通过调用xorm.NewEngine生成,如:
import (
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)
var engine *xorm.Engine
func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123@/test?charset=utf8")
}
github下载地址
百度云地址
提取码:9wyw
建议用百度云下载,github上不能科学上网的话会很慢,非常慢
我的百度云上是64位的linux,mac,win,3.9.1版本的
解压后将protoc文件,也就是bin下面的执行文件proroc.exe,的路径配置到环境变量PATH下就行了
,就是告诉计算机去哪里找这个命令,配置方法和java一样,只需要配置path路径就行了,比如
我的路径是d:\ptoto\bin,将path下添加一个d:\ptoto\bin这个路径就行了
然后执行这个命令
go get -u github.com/golang/protobuf/protoc-gen-go
这是根据自己情况配置的文件,配置好后需要生成代码,我这里文件的名字是user.proto
syntax = "proto3";
//这是生成文件的命令
// protoc --go_out=plugins=grpc:. user.proto
package protos;
//proto是一种跨平台的编码规范
//请求1
message FindByMobileRequest {
string mobile = 1;
}
//请求2
message FindByIdRequest {
int64 id = 1;
}
//请求结果返回
message UserResponse {
int64 id = 1;
string name = 2;
}
//调用 这里要借用protobuf插件来生成
service UserRpc {
// 请求名 (请求1) return (请求1后请求结果)
rpc FindByMobile (FindByMobileRequest) returns (UserResponse);'
// 请求名 (请求2) return (请求2后请求结果)
rpc FindById (FindByIdRequest) returns (UserResponse);
}
然后一定要进入user.proto文件所在的目录
执行下面命令生成文件 user.proto是文件的名字
protoc --go_out=plugins=grpc:. user.proto
这里开始是我自己实现的情况,代码只放了关键部分,只是给我自己看呢,要是有问题,私信我
然后需要实现生成的文件user.pb.go中的UserRpcServer 服务端接口方法
type UserRpcServer interface {
// 请求名 (请求1) return (请求1后请求结果)
FindByMobile(context.Context, *FindByMobileRequest) (*UserResponse, error)
// 请求名 (请求2) return (请求2后请求结果)
FindById(context.Context, *FindByIdRequest) (*UserResponse, error)
}
方法的实现,model层的方法这里就不写了
func (l *UserRpcServerLogic)FindByMobile(_ context.Context,r *protos.FindByMobileRequest)(*protos.UserResponse, error){
user,err := l.userModel.FindByMobile(r.Mobile)
if err != nil{
return nil,err
}
return &protos.UserResponse{
Id:user.Id,
Name:user.Name,
},nil
}
func (l *UserRpcServerLogic)FindById(_ context.Context,r *protos.FindByIdRequest)(*protos.UserResponse, error){
user,err := l.userModel.FindById(r.Id)
if err != nil{
return nil,err
}
return &protos.UserResponse{
Id:user.Id,
Name:user.Name,
},nil
}
添加grpc包,这个不是官方的,记住用最新版本,最好是2.1.1的
go get github.com/yakaa/grpcx
配置RpcServerConfig环境
"RpcServerConfig" :{
//名字
"Schema": "pzxy",
"ServerName": "user-rpc",
//服务监听端口
"ServerAddress": ":9090",
//这个是etcd的服务
"Endpoints": [
"192.168.222.129:2379",
"192.168.222.130:2379"
]
}
方法的调用
这里的userServercLogic就是UserRpcServer接口的实现类型
rpcServer, err := grpcx.MustNewGrpcxServer(RpcServerConfig, func(server *grpc.Server) {
protos.RegisterUserRpcServer(server,userServercLogic)
})
if err != nil {
panic(err)
}
rpcServer.Run()
然后测试启动情况
etcdctl get --prefix pzxy
输入命令过后显示
pzxy/user-rpc/f7b0a71e56d608a9a8baac131f9bb397
:9090
则启动成功