bingoogolapple / bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
http://www.bingoogolapple.cn
86 stars 22 forks source link

Centos 学习笔记 #163

Open bingoogolapple opened 7 years ago

bingoogolapple commented 7 years ago

创建 CentOS release 6.9 (Final) 版的 Docker 容器

以交互方式创建容器,映射本机 9022 端口到容器的 8022 端口,然后在容器中安装 wget

docker run -it -p 9022:8022 -p 9091:8081 --name bga-centos-note centos:6 bash

# docker commit -m 'v1' -a 'bingoogolapple' aab43ea2c6df bingoogolapple/bga-centos-note:v1

yum -y install wget

以交互方式启动容器后,使进程在后台运行

先 ctrl + p
然后 ctrl + q

进入后台运行的容器

docker attach bga-centos-note

添加测试用户

添加名为 bga1 和 bga2 的测试用户

adduser bga1
adduser bga2

修改测试用户 bga1 和 bga2 的密码为 111111

passwd bga1
passwd bga2

删除用户 bga1

userdel bga1

删除用户 bga1 及其家目录

userdel -r bga1

Centos 配置阿里云软件源

1.备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

3.生成缓存

yum makecache
bingoogolapple commented 7 years ago

安装 openssh-server

查看 ssh 是否安装。如果已经按照则先卸载

rpm -qa | grep ssh

如果没有安装则安装

yum -y install openssh-server openssh-clients

编辑防火墙配置,防火墙新增端口 8022

TODO

默认端口是 22,修改 ssh 的端口号为 8022

cp /etc/ssh/sshd_config  /etc/ssh/sshd_config.backup
vi /etc/ssh/sshd_config
在端口#Port 22下面增加Port 8022

禁止root通过ssh远程登录

vi /etc/ssh/sshd_config
找到PermitRootLogin,将后面的yes改为no,把前面的注释#取消,这样root就不能远程登录了!
可以用普通账号登录进去,要用到root的时候使用命令su root 切换到root账户

限制用户的 ssh 访问

vi /etc/ssh/sshd_config
只允许 bga1 和 bga2 用户能通过 ssh 使用系统,向 sshd_config 配置文件中添加

AllowUsers bga1 bga2

配置空闲超时退出时间间隔

vi /etc/ssh/sshd_config
设置的空闲超时时间间隔是600秒,即10分钟,过了这个时间后,空闲用户将被自动踢出出去
ClientAliveInterval 600
ClientAliveCountMax 0

限制只有某一个IP才能远程登录服务器

vi /etc/hosts.deny    在其中加入    sshd:ALL
vi /etc/hosts.allow    在其中加入    sshd:172.17.0.1

启动、重启、停止 ssh 服务

service sshd start
service sshd restart
service sshd stop

查看 ssh 是否启动

netstat -antp | grep sshd
ps -aux | grep sshd
lsof -i tcp:22

设置 ssh 服务为开机启动

chkconfig sshd on

ssh、scp、ssh 免密码登陆 终端命令备忘

创建 ~/.ssh 目录,并修改权限为 700

cd ~
mkdir .ssh
chmod 700 .ssh

生成 SSH 密钥和公钥「在开发机上执行」

ssh-keygen -b 4096 -t rsa

拷贝公钥到服务器「在开发机上执行」

scp -P 9022 ~/.ssh/id_rsa.pub bga1@localhost:~/.ssh/authorized_keys

通过 scp 命令上传安装包到服务器「在开发机上执行」

scp -r -P 9022 software bga1@localhost:/home/bga1

image

bingoogolapple commented 7 years ago

安装 JDK

1.如果已经有自带的 JDK,先卸载掉

rpm -qa | grep jdk
yum remove jdk.xxxxxxxxxxxxx

2.安装 JDK

# 切换到 root 用户
su
# 解压 JDK
tar -zxvf jdk-8u131-linux-x64.tar.gz -C /opt
# 创建软连接
cd /opt
ln -s jdk1.8.0_131 jdk

3.配置 JDK 环境变量「vi /etc/profile.d/java.sh」然后「source /etc/profile.d/java.sh」,验证是否成功「java -version」

export JAVA_HOME=/opt/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
bingoogolapple commented 7 years ago

安装 Tomcat

1.安装 Tomcat

# 切换到 root 用户
su
# 解压 Tomcat
tar -zxvf apache-tomcat-8.5.14.tar.gz -C /opt
# 创建软连接
cd /opt
ln -s apache-tomcat-8.5.14 tomcat

2.配置 Tomcat 环境变量「vi /etc/profile.d/tomcat.sh」然后「source /etc/profile.d/tomcat.sh」,验证是否成功「catalina.sh version」

export CATALINA_BASE=/opt/tomcat
export CATALINA_HOME=$CATALINA_BASE
export CATALINA_TMPDIR=$CATALINA_BASE/temp

export CLASSPATH=.:$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar:$CLASSPATH

export PATH=$CATALINA_HOME/bin:$PATH

3.禁用 SHUTDOWN 命令,Tomcat 初始输入命令 telnet localhost 8005 SHUTDOWN 就会关闭 Tomcat, 这是很危险了! 为了我们的安全关闭这个东西。修改 conf/server.xml 文件, 8005改成-1。注意:这个修改不影响shutdown.bat的执行。运行shutdown.bat一样可以关闭服务器

<Server port="-1" shutdown="SHUTDOWN">

一台机器上启多个 Tomcat

「注意:不要配置环境变量」

1.拷贝多份 Tomcat,并修改端口

cd /opt
cp -r apache-tomcat-8.5.14 tomcat-8000
cp -r apache-tomcat-8.5.14 tomcat-8001

vi tomcat-8000/conf/server.xml
vi tomcat-8001/conf/server.xml

2.vi /opt/tomcat/tomcat.sh

#!/bin/sh

ACTION_AAR=(startup shutdown)
# 8000 和 8001 对应 b.xxx.com:81
# 8002 和 8003 api a.xxx.com:81
# 8004 对应 job
# 8005 对应 Jenkins ci.xxx.com:81
PORT_AAR=(all 8000 8001 8002 8003 8004 8005)

if echo "${ACTION_AAR[@]}" | grep -w "$1" &>/dev/null; then
    if echo "${PORT_AAR[@]}" | grep -w "$2" &>/dev/null; then
        if [ "$2" = "all" ]; then
            source /etc/profile.d/xxxx.sh
            # 停止或开启所有 Tomcat
            for port in ${PORT_AAR[@]}; do
                # 如果端口号不等于 all,则停止或开启对应端口的 Tomcat
                if [ "$port" != "all" ]; then
                    tomcat.sh $1 $port
                fi
            done
        else
            # 8005 对应 Jenkins,需要设置环境变量
            if [ "$2" = "8005" ]; then
                export JENKINS_HOME=/opt/jenkins
            fi
            export CATALINA_BASE="/opt/tomcat-$2"
            export CATALINA_HOME=$CATALINA_BASE
            export CATALINA_TMPDIR=$CATALINA_BASE/temp
            export CLASSPATH=.:$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar:$CLASSPATH
            export PATH=$CATALINA_HOME/bin:$PATH
            "$1.sh"
        fi
    else
        for port in ${PORT_AAR[@]}; do
            port_tip="$port_tip $port "
        done
        echo -e "请指定第二个参数port为$port_tip中的某一个\n例如启动 Jenkins 的命令为 tomcat.sh startup 8005"
    fi
else
    for action in ${ACTION_AAR[@]}; do
        action_tip="$action_tip $action "
    done
    echo -e "请指定第一个参数action为$action_tip中的某一个\n例如启动 Jenkins 的命令为 tomcat.sh startup 8005"
fi

3.添加移除 tomcat 多余目录脚本文件 remove_useless_tomcat_dir.sh

#!/bin/sh

PORT_AAR=(all 8000 8001 8002 8003)

if echo "${PORT_AAR[@]}" | grep -w "$1" &>/dev/null; then
    if [ "$1" = "all" ]; then
       source /etc/profile.d/xxxx.sh
       # 删除所有 Tomcat 多余的目录
       for port in ${PORT_AAR[@]}; do
           if [ "$port" != "all" ]; then
               remove_useless_tomcat_dir.sh $port
           fi
       done
   else
        rm -rf /opt/tomcat-$1/webapps/docs/
        rm -rf /opt/tomcat-$1/webapps/docs/
        rm -rf /opt/tomcat-$1/webapps/examples/
        rm -rf /opt/tomcat-$1/webapps/host-manager/
        rm -rf /opt/tomcat-$1/webapps/manager/
   fi
else
    for port in ${PORT_AAR[@]}; do
        port_tip="$port_tip $port "
    done
    echo -e "请指定第一个参数port为$port_tip中的某一个\n例如删除 tomcat-8000 多余目录的命令为 remove_useless_tomcat_dir.sh 8000"
fi

4.添加执行权限

chmod +x /opt/tomcat/tomcat.sh
chmod +x /opt/tomcat/remove_useless_tomcat_dir.sh

查看运行日志

tail -f /opt/tomcat-8000/logs/catalina.out

Linux 监控tomcat,自动重启tomcat服务 管理多tomcat服务shell脚本

bingoogolapple commented 7 years ago

安装 Maven

1.安装 Maven

# 切换到 root 用户
su
# 解压 Maven
tar -zxvf apache-maven-3.5.0-bin.tar.gz -C /opt
# 创建软连接
cd /opt
ln -s apache-maven-3.5.0 maven

2.配置 Maven 环境变量「vi /etc/profile.d/maven.sh」然后「source /etc/profile.d/maven.sh」,验证是否成功「mvn -v」

export M2_HOME=/opt/maven
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2:$PATH

3.配置 Maven 镜像仓库「vi /opt/maven/conf/settings.xml」,在 mirrors 节点下添加以下配置,!xxx-repo 是指不到阿里云的镜像中去找 xxx-repo 仓库里的依赖

<mirror>
    <id>nexus-aliyun</id>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>*,!xxx-repo</mirrorOf>
</mirror>
bingoogolapple commented 7 years ago

安装 Node.js

1.安装 Node.js,这里下载的是已编译版本

# 切换到 root 用户
su
# 解压 node
tar -zxvf node-v6.9.2-linux-x64.tar.gz -C /opt
# 创建软连接
cd /opt
ln -s node-v6.9.2-linux-x64 node

2.配置 Node 环境变量「vi /etc/profile.d/node.sh」然后「source /etc/profile.d/node.sh」,验证是否成功「node -v」「nvm -v」

export NODE_HOME=/opt/node
export PATH=$NODE_HOME/bin:$PATH

3.使用淘宝的 npm 镜像

npm config set registry https://registry.npm.taobao.org

使用默认的 npm 仓库

npm config set registry http://registry.npmjs.org
bingoogolapple commented 7 years ago

安装 Git

1.如果已经有自带的 Git,先卸载掉

yum remove git

2.安装 Git

# 切换到 root 用户
su
# 安装依赖
yum -y install gcc zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
# 解压 Git
tar -zxvf git-2.12.2.tar.gz
# 安装新版本
cd git-2.12.2
make prefix=/opt/git all
make prefix=/opt/git install

3.配置 Git 环境变量「vi /etc/profile.d/git.sh」然后「source /etc/profile.d/git.sh」,验证是否成功「git --version」

export GIT_HOME=/opt/git
export PATH=$GIT_HOME/bin:$PATH

4.配置 Git 基础配置信息

git config --global alias.cfg "config"
git cfg --global push.default simple
git cfg --global core.ignorecase false
git cfg --global http.postBuffer 20480000
git cfg --global core.editor vim
git cfg --global core.quotepath false
git cfg --global alias.ci "commit -a -v"
git cfg --global alias.throw "reset --hard HEAD"
git cfg --global alias.throwh "reset --hard HEAD^"
git cfg --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

git cfg --global user.name "bga1"
git cfg --global user.email "bga1@bga-centos-note.com"
bingoogolapple commented 7 years ago

安装 Nginx

如果不是源码安装可通过「find / -name nginx.conf」查看配置文件位置

1.安装 Nginx,参考的这篇文章

# 切换到 root 用户
su
# 安装依赖
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 解压 nginx
tar -zxvf nginx-1.12.0.tar.gz
# 安装
cd nginx-1.12.0
./configure --prefix=/opt/nginx --with-stream
# ./configure --prefix=/opt/nginx --with-stream --with-http_ssl_module
make && make install

2.配置 Nginx 环境变量「vi /etc/profile.d/nginx.sh」然后「source /etc/profile.d/nginx.sh」,验证是否成功「nginx -v」

export NGINX_HOME=/opt/nginx
export PATH=$NGINX_HOME/sbin:$PATH

3.测试是否安装成功

# 启动
nginx
nginx -t
nginx -s reload
nginx -s stop
# 查看是否启动成功
netstat -antp | grep nginx
ps aux | grep nginx
# curl localhost 看能否看见显示 Welcome to nginx! 的页面

4.配置虚拟主机

cd /opt/nginx/conf
vi nginx.conf
# 增加
include vhost/*.conf;
# 创建 vhost 目录用于存放虚拟主机配置文件
mkdir vhost
# 添加映射
cd vhost

vi manager.bgastudy.com.conf

upstream server_manager {
    #server 127.0.0.1:8000 weight=1;
    #server 127.0.0.1:9000 weight=2;
    server 127.0.0.1:8000;
    server 127.0.0.1:9000;
    ip_hash;
}

server {
    listen 81;
    server_name manager.bgastudy.com;

    location / {
      proxy_set_header        Host $host:$server_port;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://server_manager;
      proxy_read_timeout  90;
    }
}
bingoogolapple commented 7 years ago

插件安装失败,提示找不到 cloudbees-folder

更换为国内的 Jenkins 镜像即可

安装 Naginator+Plugin 后,新建一个任务,在构建后操作 选择 "Retry build after failure"

安装 Jenkins,这里下载的是 2.46.2

每当我们访问一个地址的时候,tomcat首先是到 /opt/tomcat-8001/conf/Catalina/localhost 目录下去察看有没有存在主目录或虚拟目录的 xml 文件,如果有 xml 文件,就按 xml 里的路径进行访问,如果没有 xml 文件,就到 server.xml 文件里去察看是否配置 context 标签,如果配置了 context 标签,则在 /opt/tomcat-8001/conf/Catalina/localhost 目录下生成一个对应的 xml 文件,以便于下次直接验证而不再访问 server.xml,与此同时打开 context 里指定的路径,如果 server.xml 里没有配置 context 标签,则返回访问错误页面

1.删除 Tomcat 的 webapps 里的 ROOT 目录

rm -rf /opt/tomcat-8001/webapps/ROOT

2.在 /opt/tomcat-8001/conf/Catalina/localhost 目录下新增 ROOT.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="/usr/local/src/jenkins.war" crossContext="true" reloadable="true"></Context>

3.修改 Jenkins 启动衍生进程的生命周期,否则无法在 Jenkins 中开启其他 Tomcat 进程「vim /opt/tomcat-800xxxxx/bin/catalina.sh」,为 JAVA_OPTS 追加参数「-Dhudson.util.ProcessTree.disable=true」

JAVA_OPTS="$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true"

4.配置 JENKINS_HOME 以及处理中文乱码,「vim /opt/tomcat-800xxxxx/bin/catalina.sh」,增加下面的代码块

export JENKINS_HOME=/opt/jenkins
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

5.启动 Tomcat 后访问 http://localhost:8011 时界面会提示输入 /root/.jenkins/secrets/initialAdminPassword 里的内容进行初始化

6.如果指定了「JENKINS_HOME=/opt/jenkins」则需要修改Jenkins用户的密码,「vi /opt/jenkins/users/admin/config.xml」

修改
<passwordHash>#jbcrypt:$2a$10$eSNXKyOaPLQT91cQRWiHDe6VF1NXeePlrEeG9kU5.14eufB8dZPWG</passwordHash>
为
<passwordHash>#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS</passwordHash>
后密码就是 111111

7.关闭日志 「系统管理->System Log->日志级别(在左边栏)」

名称: javax.jmdns
级别: off

8.Nginx 反向代理

server {
    listen 81;
    server_name ci.bgastudy.com;

    location / {
      proxy_set_header        Host $host:$server_port;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://127.0.0.1:8003;
      proxy_read_timeout  90;
    }
}

9.减少jenkins项目构建磁盘空间的方法

登录jenkins,进入项目的构建历史。选择一个历史构建,删除之,按相同方法删除所有历史构建

进入项目配置界面,勾选丢弃旧的构建,并设置保持构建的最大个数为2
bingoogolapple commented 7 years ago

安装 MySQL

安装脚本

#!/bin/sh
#使用sohu镜像,速度快
wget http://mirrors.sohu.com/mysql/MySQL-5.6/MySQL-shared-5.6.35-1.el6.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.6/MySQL-client-5.6.35-1.el6.x86_64.rpm
wget http://mirrors.sohu.com/mysql/MySQL-5.6/MySQL-server-5.6.35-1.el6.x86_64.rpm

#删除默认安装包
rpm -qa| grep mysql-libs | xargs rpm -e --nodeps
#安装依赖包
yum -y install numactl perl libaio perl-Data-Dumper.x86_64
rpm -ivh MySQL-shared-5.6.35-1.el6.x86_64.rpm
rpm -ivh MySQL-client-5.6.35-1.el6.x86_64.rpm
rpm -ivh MySQL-server-MySQL-server-5.6.35-1.el6.x86_64.rpm

#获取默认root密码
sqlpasswd=`cat /root/.mysql_secret | awk -F'): ' {'print $2'}`
echo "MySQL root passwd: $sqlpasswd"
#设置数据库服务端编码为utf8
echo character_set_server=utf8 >> /usr/my.cnf
#重启数据库
service mysql restart
service mysql status
service mysql start
service mysql stop

查看配置文件位置

find / -name my.cnf

设置密码

方式一:mysqladmin,刚安装完成时,只能用这种方式修改密码。「这种方式修改密码只对本机登录有效」

mysqladmin -u root -p[旧密码] password 新密码
mysqladmin -u root -p654321 password 666666

方式二:用UPDATE直接编辑user表,需要使用自带的 PASSWORD 函数加密密码,需要执行「FLUSH PRIVILEGES;」后才生效。安装完成后,用方式一修改密码后才可以用这种方式修改密码

mysql -u root -p
USE mysql;
# 默认 root 用户是不能远程登录的,其 IP 为 localhost,所以这里设置的密码只针对 IP 为 localhost 时
UPDATE user SET Password = PASSWORD('666666') WHERE User = 'root';
FLUSH PRIVILEGES;

为 root 用户开启远程访问「这里的密码 111111 只能远程登录,不能在服务器本机登录」「之前设置的密码 666666 只能在服务器本机登录,不能远程登录」「如果有指定 IP,则在 IP 那台机器上使用有指定 IP 时的密码,而不是指定 % 时的密码」

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;
FLUSH PRIVILEGES;

创建/删除数据库

SHOW

SHOW CREATE DATABASE testdb;
SHOW CREATE TABLE testtable;

创建数据库

CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4;

删除数据库

DROP DATABASE IF EXISTS testdb;

创建/删除用户

查看用户名和能登录的 IP 地址

SELECT host,user FROM mysql.user;

创建用户语法。如果想不限制链接的 IP 则设置为“%”即可

CREATE USER '用户名'@'IP地址' IDENTIFIED BY '密码';

创建一个可以在任何地方登录的用户 bingo1,密码 666666

CREATE USER 'bingo1' IDENTIFIED BY '666666';
# 或
CREATE USER 'bingo1'@'%' IDENTIFIED BY '666666';

# 对应的删除语句为
DROP USER 'bingo1';

创建一个只能在固定地址登录的用户 bingo2,密码:666666

CREATE USER 'bingo2'@'localhost' IDENTIFIED BY '666666';
# 对应的修改密码语句为
mysqladmin -u bingo2 -p666666 password 111111;
# 对应的删除语句为
DROP USER 'bingo2'@'localhost';

为用户 bingo2 开启远程访问 test 数据库的所有表的所有权限,远程登录密码为 abcdef,MySQL 服务器本机登录密码还是之前创建时的 666666 修改后的 111111

GRANT ALL PRIVILEGES ON test.* TO 'bingo2'@'%' IDENTIFIED BY 'abcdef';
FLUSH PRIVILEGES;

其他

防火墙打开 3306 端口

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables status

开机自动启动 MySQL

加入到系统服务
chkconfig --add mysql
自动启动
chkconfig mysql on

IP 地址转换

SELECT INET_ATON('192.168.1.38'), INET_NTOA('3232235814');
bingoogolapple commented 7 years ago

检测 Tomcat 是否运行

#!/bin/sh

# check_tomcat() {
#     timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/$1"
#     return $?
# }

check_tomcat() {
    if [[ $(ps -ef |grep tomcat |grep -w "tomcat-$1"|grep -v 'grep'|awk '{print $2}') ]]; then
        # 已经启动
        return 0
    else
        # 未启动
        return 1
    fi
}

if check_tomcat $1; then
    echo "tomcat-$1 已经启动"
else
    echo "tomcat-$1 还未启动"
fi

if ! check_tomcat $1; then
    echo "tomcat-$1 还未启动"
else
    echo "tomcat-$1 已经启动"
fi