开发测试环境搭建

954 阅读9分钟

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。

前言

行内流传着一句话,没有删过库的程序员不是一个合格的程序员,在下有幸体验过一次删服务器,日常开发的一天,我登上服务器,查看日志文件,发现一大堆历史日志文件,想着留着也没有用,直接一个rm -rf /*,回车!!!控制台一顿输出,然后提示有些目录无法删除。我敲了个ll,日志全没了,然后cd到根目录,查看,果然所有的文件都没了。当时脑子的一下,我意识到,我可能闯大祸了。我直接把服务器给删除了。后来上报给老板,幸运的是只是测试环境,并没有造成严重后果,让我尝试恢复,不行就重新搭建一套就好了。

执行完rm -rf /*后,系统并不会立马崩溃掉,已经运行的程序依然可以正常运行。所以我可以将所有的数据立马导出来

1. linux系统安装

1.1 下载镜像文件

isoredirect.centos.org/centos/7/is…

选择合适的国内代理地址,下载对应版本的ISO镜像文件

1.2 U盘启动盘制作

  • 准备一个内存不小于8GU盘
  • 下载安装UltraISO光盘刻录工具(直接搜索引擎搜索下载最新版本即可)
  • 以管理员身份运行UltraISO,点击文件打开下载好的镜像文件(CentOS-7-x86_64-DVD-2003.iso
  • 点击启动写入硬盘映像 1633180051435.png
  • 选择硬盘驱动器(U盘),注意写入方式为USB-HDD+ ,点击写入 1633180174992.png
  • 写入完成,驱动盘制作完成

1.3 操作系统安装

  • 将启动项改成USB为第一启动项,根据自己电脑型号在BIOS界面修改。
  • 进入安装界面,根据指引完成安装。具体可参考视频: www.bilibili.com/video/BV1Lz…

2. Docker安装

官网地址:www.docker.com/

2.1 卸载老版本

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2 安装一些必要的系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.3 添加软件源信息

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4 更新yum缓存

sudo yum makecache fast

2.5 安装Docker-ce

sudo yum -y install docker-ce

2.6 启动Docker服务

sudo systemctl start docker

2.7 配置阿里云镜像

  • 打开配置文件 daemon.json
vi /etc/docker/daemon.json
  • 输入镜像地址
{
 "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
  • 重启docker服务
sudo systemctl restart docker

3. JDK安装

3.1 卸载自带的OpenJDK

  • 查看当前java版本

    • java -version 
      
    • [root@localhost ~]# java -version 
      openjdk version "1.8.0_242"
      OpenJDK Runtime Environment (build 1.8.0_242-b08)
      OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
      
  • 查看安装了多少java软件包

    • rpm -qa | grep java
      
    • [root@localhost ~]# rpm -qa | grep java
      javassist-3.16.1-10.el7.noarch
      nuxwdog-client-java-1.0.5-1.el7.x86_64
      tzdata-java-2019c-1.el7.noarch
      python-javapackages-3.4.1-11.el7.noarch
      java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
      javapackages-tools-3.4.1-11.el7.noarch
      pki-base-java-10.5.17-6.el7.noarch
      java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
      javamail-1.4.6-8.el7.noarch
      
  • 把所有带openjdk的程序包卸载了

    •  rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
       rpm -e --nodeps java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
      
  • 检查是否卸载完全

  •  [root@localhost ~]# java -version
    -bash: /usr/bin/java: 没有那个文件或目录
    

3.2 安装jdk1.8 linux版本

  • 下载地址 www.oracle.com/java/techno…

  • 上传解压安装包

    tar -zxvf jdk-8u301-linux-x64.tar.gz
    
  • 根据自己安装路径修改环境变量

  • vim /etc/profile
    
    export JAVA_HOME=/usr/java/jdk1.8.0_301 # 注意此处修改为自己的安装位置
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    export PATH=$PATH:${JAVA_PATH}
    
  • 重新加载配置文件

    source /etc/profile
    
  • 验证是否安装成功

    java -version
    
  • 显示如下则安装成功

    [root@iZ8vbeak6j8zpan8owflsyZ mydata]# java -version
    java version "1.8.0_301"
    Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
    

4. Nginx 安装

  • 下载安装好linux下的安装包 nginx.org/en/download…

  • Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。

    yum install gcc-c++
    
  • Nginxhttp模块需要使用pcre来解析正则表达式,需要安装pcre

    yum install -y pcre pcre-devel
    
  • 安装依赖的解压包

    yum install -y zlib zlib-devel
    
  • ssl 功能需要openssl 库,安装 openssl

    yum install -y openssl openssl-devel
    
  • 编译安装

    • 进入nginx目录

      cd /mydata/nginx
      
    • 执行命令

      ./configure
      
    • 执行make命令

      make
      
    • 执行make install命令

      make install
      
  • 默认安装在了/usr/local/nginx

  • 启动

    ./usr/local/nginx/sbin/nginx
    
  • 访问IP可以看到欢迎页面表示安装成功

如果访问不成功,检查并关闭防火墙

  • 查看防火墙状态
systemctl status firewalld.service
  • 关闭防火墙
systemctl stop firewalld.service
  • 永久关闭防火墙
systemctl disable firewalld.service

5. 安装tomcat

  • 下载安装好linux下的安装包

  • 解压

    tar -zxvf apache-tomcat-9.0.50.tar.gz
    
  • 启动

    ./mydata/tomcat9/bin/startup.sh
    
  • 查看是否安装成功,默认启动8080端口,看到欢迎页表示启动安装成功

6. 安装MySQL

6.1 手动安装5.7版本

为了快速搭建,我采用了使用Docker安装,后面会介绍。

  • 安装5.7版本

    • wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
      
    • yum -y install mysql57-community-release-el7-10.noarch.rpm
      
      rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
      
    • yum -y install mysql-community-server
      
    • systemctl start mysqld.service
      
    • 查看默认密码

      grep "password" /var/log/mysqld.log
      
    • mysql -uroot -p (备注:输入刚刚默认的密码)
      
    • set global validate_password_policy=0;
      
    • set global validate_password_length=1;
      
    • ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; (备注:这里修改你的新密码)
      
  • mysql配置文件默认放在/etc/my.cnf

    建议修改默认端口号

    配置文件中修改 port=3666

  • 卸载MySQL

    • 查看有哪些文件

      rpm -qa|grep -i mysql
      
    • 一个一个卸载

      yum remove 文件名
      
    • 删除一些遗留文件

      find / -name mysql
      
    • 一个一个删除

      rm -rf 文件
      

6.2 Docker安装8.0版本

网上有很多人分享了,但也只是简单安装一下,后续有很多坑并未提及,一定要按我的顺序操作,可有效避坑。

  • 下载镜像文件(默认下载latest版本8.0版本)
docker pull mysql
  • 运行容器
 docker run -itd --name mysql8.0 \
                 -p 3306:3306 \
                 -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 将需要挂载的文件全部复制到本地
mkdir -p /mydata/mysql/conf
mkdir -p /mydata/mysql/logs
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/mysql-files

docker cp mysql8.0:/etc/mysql/my.cnf /mydata/mysql/conf/my.cnf
docker cp mysql8.0:/etc/mysql/conf.d /mydata/mysql/conf/conf.d

这里有个小坑,一定不要随便修改配置文件的权限,否则会导致配置不生效。我当时就是 chmod 777 ,然后怎么弄都没生效,然后看日志提示一点点解决的。

  • 删除容器
docker stop mysql8.0
docker rm mysql8.0
  • 重新运行容器并挂载
 docker run -itd --name mysql8.0 \
                 -p 3306:3306 \
                 -v /mydata/mysql/conf:/etc/mysql \
                 -v /mydata/mysql/logs:/logs \
                 -v /mydata/mysql/data:/var/lib/mysql \
                 -v /mydata/mysql/mysql-files:/var/lib/mysql-files \
                 -e MYSQL_ROOT_PASSWORD=root@123456 mysql
  • 重新启动
docker restart mysql8.0

7. 安装Redis

juejin.cn/post/700111…

## 后台运行
daemonize yes
## 外网连接
protected-mode no
## 注释掉只允许本地连接
# bind 127.0.0.1
## 端口号
port 6666
## 连接密码
requirepass 123456
## 设置数据库总量
databases 256
## 日志文件
logfile ./redislog.log
## 设置数据文件存储目录
dir /usr/local/redis-6.0.6

8. GitLab安装

  • 下载镜像文件
    docker pull docker.io/gitlab/gitlab-ce
    
  • 创建挂载目录
    mkdir -p /var/gitlab/etc
    mkdir -p /var/gitlab/log
    mkdir -p /var/gitlab/data
    
  • 启动容器
    docker run \
    --detach \
    --publish 2222:22 \
    --publish 7777:7777 \
    --publish 8443:443 \
    --hostname 192.168.10.59 \
    -v /var/gitlab/etc:/etc/gitlab \
    -v /var/gitlab/log:/var/log/gitlab \
    -v /var/gitlab/data:/var/opt/gitlab \
    -v /etc/localtime:/etc/localtime:ro \
    --name gitlab \
    --restart always \
    --privileged=true gitlab/gitlab-ce:latest 
    
  • 修改/var/gitlab/etc/gitlab.rb
    vi /var/gitlab/etc/gitlab.rb
    
    # 修改http clone时显示的端口
    # external_url 'GENERATED_EXTERNAL_URL'
    external_url 'http://192.168.0.106:7777'
    # 修改ssh clone时显示的端口
    gitlab_rails['gitlab_shell_ssh_port'] = 2222
    
  • 修改/var/gitlab/data/gitlab-rails/etc/gitlab.yml将端口改为正确端口
    vi /var/gitlab/data/gitlab-rails/etc/gitlab.yml
    
  • 重启gitlab
    docker restart gitlab
    
  • 初始化管理员密码
    • docker exec  -it gitlab /bin/bash
      
    • gitlab-rails console
      
    • user = User.where(username: 'root').first
      
    • user.password='root@123'
      
    • user.save
      
  • 访问地址 http://192.168.0.106:7777 登录账号,创建好仓库,配置好账号。
  • 代码同步

将本地代码同步到gitLab

# 本地同步到远程仓库
git push -u origin master
# 切换分支
git checkout uat

9. 安装node

  • 下载安装包

    wget https://cdn.npm.taobao.org/dist/node/v14.16.0/node-v14.16.0-linux-x64.tar.xz
    
  • 解压

    xz -d node-v14.16.0-linux-x64.tar.xz
    tar -xvf node-v14.16.0-linux-x64.tar
    
  • /usr/bin目录下建立软连接,变为全局

    ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/node /usr/local/bin/node
    ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/npm /usr/local/bin/npm
    
  • 验证是否安装成功

    node -v
    
  • 安装cnpm

    npm install -g cnpm --registry=https://registry.npm.taobao.org
    
  • 创建软连接

    ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/cnpm /usr/local/bin/cnpm
    
  • 验证安装成功

cnpm -v
  • 切换淘宝源镜像
    npm install yarn -g
    # 创建软连接
    ln -s /usr/local/node/node-v14.16.0-linux-x64/bin/yarn /usr/local/bin/yarn
    # 查看当前的源地址
    yarn config get registry
    # 切换淘宝源
    yarn config set registry https://registry.npm.taobao.org/
    # 检查是否切换成功
    yarn config get registry
    

10. 安装Jenkins

  • 下载镜像文件

    docker pull jenkins/jenkins
    
  • 创建挂载文件夹,便于后期修改查看配置、数据等信息

    mkdir -p /var/jenkins_mount
    chmod 777 /var/jenkins_mount
    
  • 启动容器

    docker run -d -p 8080:8080 \
               -p 50000:50000 \
               -v /var/jenkins_mount:/var/jenkins_home \
               -v /mydata/jdk1.8.0_301:/var/jdk1.8.0_301 \
               -v /usr/share/maven:/var/maven \
               -v /etc/localtime:/etc/localtime \
               --name jenkins jenkins/jenkins
    
  • 修改Jenkins软件下载镜像

    vi  /var/jenkins_mount/hudson.model.UpdateCenter.xml
    
    <?xml version='1.1' encoding='UTF-8'?>
    <sites>
      <site>
        <id>default</id>
        <url>https://updates.jenkins.io/update-center.json</url>
      </site>
    </sites>
    

将url修改为清华大学官方镜像地址:mirrors.tuna.tsinghua.edu.cn/jenkins/upd…

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>
  • 重启一下Jenkins

    docker restart jenkins 
    
  • 访问Jenkins,查看密码

    cat /var/jenkins_mount/secrets/initialAdminPassword
    
  • 根据提示操作完成账号设置

  • 相关应用安装

    • maven
    yum install maven
    
    • git
    yum install git
    
    • maven自动安装
    • jdk自带
    [root@localhost jenkins_mount]# docker exec -it jenkins /bin/bash
    jenkins@d9218f4c506e:/$ echo $JAVA_HOME
    /opt/java/openjdk
    
    • JDK也可以使用自动安装

    避免踩坑 maven 使用自动下载,jdk使用挂载方式

    • 安装插件nodejs
      • 在全局配置中设置安装cnpm
      • 在job配置中 构建环境 勾选 Provide Node & npm bin/ folder to PATH,并指定自动安装的版本
  • 配置ssh 远程连接

配置服务器的连接

  • Jenkins时间不准修改
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

11. nginx安装配置

  • 下载解压(篇幅有限,操作简单,这里不做详细介绍)
  • 地址拼接去除前缀api
location ^~/api/ {
       	    proxy_set_header Host $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  X-NginX-Proxy true;
	
            proxy_pass http://192.168.0.106:8090/;
    	}
  • 重写去除前缀api(注意后面没有/)
location ^~/api/ {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;

        rewrite ^/order/(.*)$ /$1 break;
        proxy_pass http://192.168.0.106:8090/api;
    }
server {
        listen       1111;
        server_name  localhost;

        location / {
            root   html/erp-web-uat;
            index  index.html index.htm;
        }

	location ^~/api/ {
       	    proxy_set_header Host $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  X-NginX-Proxy true;
	
            proxy_pass http://192.168.0.106:8091/;
    	}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

12. 禅道安装

  • 下载镜像文件

    docker pull easysoft/zentao
    
  • 创建docker网络驱动

    docker network create --subnet=172.172.172.0/24 zentaonet
    
  • 创建挂载目录

    mkdir -p /mydata/chandao/zentaopms
    mkdir -p /mydata/chandao/mysqldata
    
  • 启动禅道容器

    docker run --name zentao \
                -p 9000:80 \
                -v /mydata/chandao/zentaopms:/www/zentaopms \
                -v /mydata/chandao/mysqldata:/var/lib/mysql \
                -d easysoft/zentao
    
  • 查看容器内ip地址

目的是不使用禅道自己内部数据库,而使用我们自己的服务

    docker network inspect bridge

一般为 172.172.172.***

  • 设置数据库连接使用密码方式

    [mysqld]
    default-authentication-plugin=mysql_native_password
    
  • 可能出现地址解析出错

    [mysqld]
    skip-name-resolve
    
  • 如果还是不行,修改数据库连接

    select host,user,plugin,authentication_string from mysql.user
    
    %	root	mysql_native_password	*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
    localhost	mysql.infoschema	caching_sha2_password	$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
    localhost	mysql.session	caching_sha2_password	$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
    localhost	mysql.sys	caching_sha2_password	$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
    localhost	root	caching_sha2_password	$A$005$tOo""SB	y@fnlVu3WzwZGqrggMqgcCWpJ3Ru16Cnc/mUdtceS/SStUCea3
    
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    

注意修改完配置后重启一下,再尝试连接

13. 多环境配置

13.1 Tomcat配置

<Service name="ERP_UAT">
    <Connector port="8091" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="ERP_UAT" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="erp_uat"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/erp_uat"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
</Service>

总结

到这里基本算完全恢复了,万幸的是删除的只是测试环境,吸取教训,以后在操作删除命令的时候一定要多留心眼。