linux各种装机

设置固定ip

设置固定ip

https://www.linuxidc.com/Linux/2017-12/149910.htm

将本地包传到远程

rz 是传到远程
sz 是远程到本地

yum install -y lrzsz

装golang

去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

装jdk

和golang差不多
配置环境

export JAVA_HOME=/root/jdk1.8.0_201
export CLASSPATH=$JAVA_HOME/lib/
# 这里加到golang的环境后面
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin 

装nginx

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机器。所以这台机器压力会最轻。

装jenkins

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
直接在页面安装就行了,然后可以配置发布,这个先留个坑以后再写

装etcd

这个配置微服务的话每台机器都要装
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

装mysql

安装源

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就好了

装redis

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,主从复制,读写分离,监视器,事务,消息对列,都是在里面配置,因为我以前是手写的笔记,所以没办法放上来

装Rabbitmq

需要先装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()

装supervisor

这是发布用的,守护进程,每个服务器都要装
安装之前也要装
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重启服务器,不过改了服务器名字的话,密钥也要重新配置

装xorm

直接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")
}

装protobuf

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
则启动成功

你可能感兴趣的:(Linux)