「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。
前言
行内流传着一句话,没有删过库的程序员不是一个合格的程序员,在下有幸体验过一次删服务器,日常开发的一天,我登上服务器,查看日志文件,发现一大堆历史日志文件,想着留着也没有用,直接一个
rm -rf /*,回车!!!控制台一顿输出,然后提示有些目录无法删除。我敲了个ll,日志全没了,然后cd到根目录,查看,果然所有的文件都没了。当时脑子嗡的一下,我意识到,我可能闯大祸了。我直接把服务器给删除了。后来上报给老板,幸运的是只是测试环境,并没有造成严重后果,让我尝试恢复,不行就重新搭建一套就好了。
执行完
rm -rf /*后,系统并不会立马崩溃掉,已经运行的程序依然可以正常运行。所以我可以将所有的数据立马导出来
1. linux系统安装
1.1 下载镜像文件
isoredirect.centos.org/centos/7/is…
选择合适的国内代理地址,下载对应版本的ISO镜像文件
1.2 U盘启动盘制作
- 准备一个内存不小于
8G的U盘 - 下载安装
UltraISO光盘刻录工具(直接搜索引擎搜索下载最新版本即可) - 以管理员身份运行
UltraISO,点击文件 → 打开下载好的镜像文件(CentOS-7-x86_64-DVD-2003.iso) - 点击启动 → 写入硬盘映像
- 选择硬盘驱动器(U盘),注意写入方式为
USB-HDD+,点击写入 - 写入完成,驱动盘制作完成
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版本
-
上传解压安装包
tar -zxvf jdk-8u301-linux-x64.tar.gz -
根据自己安装路径修改环境变量
-
vim /etc/profileexport 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++ -
Nginx的http模块需要使用pcre来解析正则表达式,需要安装pcreyum install -y pcre pcre-devel -
安装依赖的解压包
yum install -y zlib zlib-devel -
ssl功能需要openssl库,安装opensslyum 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.rpmrpm --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
## 后台运行
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.rbvi /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/SStUCea3ALTER 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 "%r" %s %b" />
</Host>
</Engine>
</Service>
总结
到这里基本算完全恢复了,万幸的是删除的只是测试环境,吸取教训,以后在操作删除命令的时候一定要多留心眼。