Linux 服务器基础环境搭建——实现项目脚本自动发布

前言

在项目实战开发中,经常需要搭建服务器,但是一些配置和搭建步骤经常会忘,所以在次记录。

服务器采用的是阿里云服务器学生版CentOS 8.0 64位 (1核 2 GB)(便宜,真香),要通过脚本自动化上线项目,需要以下的配置:

  • jdk
  • mysql
  • redis
  • maven
  • git
  • nginx

自动化上线逻辑:

  1. 本地编写代码,上传git
  2. 服务器执行脚本,脚本拉取项目,打包运行

文章和方法有错误或更好的处理方式欢迎讨论👏

一、通过脚本登陆服务器

在开始之前,我们需要先在阿里云上购买服务器,并设置好安全组开放端口,不然无法远程连接,这些都可以百度。

设置好这些基本的配置后,我们首先需要远程连接服务器。

windows 可以通过PuTTY 或者XShell 来连接服务器。演示用的mac,所以可以用脚本通过ssh 来登陆。

先在你喜欢的目录创建一个脚本,server.sh:

$ pwd
/Users/wentong/sh/server
$ vim server.sh
$ ll
total 24
-rwxr-xr-x  1 wentong  staff   169B 12  8 11:24 liuxue1.sh
-rwxr-xr-x  1 wentong  staff   172B 12  8 11:27 liuxue2.sh
-rwxr-xr-x@ 1 wentong  staff   158B 12 19 22:24 server.sh
#!/usr/bin/expect
set user "your_user"
set ipaddress "your_ip"
set passwd "your_password"
set timeout 30

spawn ssh $user@$ipaddress
expect "password"
send "$passwd\n"
interact

把上述脚本中的登陆信息换成你的就行,然后记得通过chmod 给脚本执行权限:

$ chmod +x server.sh
# 执行脚本就可以登陆服务器了
$ ./server.sh
补充

expect 是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信

执行顺序:

1. spawn 启动指定线程
2. expect 获取系统交互关键字(这里ssh 系统会让用户输入password)
3. send 获取到关键字,用send 向系统发送字符串

常见的expect 命令:

spawn               交互程序开始后面跟命令或者指定程序
expect              获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send       用于发送指定的字符串信息
set                 定义变量
puts                输出变量
set timeout         设置超时时间
exp_continue        在expect中多次匹配就需要用到
send_user           用来打印输出 相当于shell中的echo
exit                退出expect脚本
interact            允许用户交互
eof                 expect执行结束 退出

二、 安装JDK 1.8

Welcome to Alibaba Cloud Elastic Compute Service !

Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Jan 18 22:18:47 2020 from 125.82.214.35
[root@iZwz9hmb50uzud432t180uZ ~]#

登陆服务器后,我们先安装jdk 1.8,我们采用安装包来安装。

在官网下载jdk1.8

在这里插入图片描述
然后我们在本地通过scp 命令,把安装包发到服务器/usr/local 目录

$ scp jdk-8u231-linux-x64.tar.gz root@120.79.94.90:/usr/local

进入/usr/local 目录解压jdk ,并在根目录下bash_profile 中配置Java 环境变量

[root@iZwz9hmb50uzud432t180uZ local]# cd /usr/local
[root@iZwz9hmb50uzud432t180uZ local]# tar -zxvf jdk-8u231-linux-x64.tar.gz
[root@iZwz9hmb50uzud432t180uZ local]# mv jdk1.8.0_231/ jdk1.8

#java environment
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

[root@iZwz9hmb50uzud432t180uZ local]# source ~/.bash_profile
[root@iZwz9hmb50uzud432t180uZ local]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

三、安装mysql ,并设置远程连接

在CentOs 里面默认使用的是mariadb(数据库对比:选择MariaDB还是MySQL?),要用mysql 就先把mariadb 和旧mysql 相关的删掉:

[root@iZwz9hmb50uzud432t180uZ ~]# rpm -qa | grep mariadb
# 把上面查出来的全删了
# 示例:rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64
[root@iZwz9hmb50uzud432t180uZ ~]# rpm -qa|grep -i mysql
# 把上面查出来的全删了
# 示例:yum -y remove mysql...

删干净后就可以安装mysql 了

[root@iZwz9hmb50uzud432t180uZ ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
[root@iZwz9hmb50uzud432t180uZ ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
[root@iZwz9hmb50uzud432t180uZ ~]# yum -y install mysql-server

安装好mysql,要修改密码,并打开远程连接,记得开3306 端口

[root@iZwz9hmb50uzud432t180uZ mysql]# service mysqld start
Redirecting to /bin/systemctl start mysqld.service
# 第一次不需要密码
[root@iZwz9hmb50uzud432t180uZ mysql]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.17 Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# 修改root 密码
[root@iZwz9hmb50uzud432t180uZ mysql]# alter user 'root'@'localhost' identified by '你的密码';

# 配置远程连接
//进入mysql库
[root@iZwz9hmb50uzud432t180uZ mysql]#  use mysql  
//更新域设置,允许外部访问
[root@iZwz9hmb50uzud432t180uZ mysql]#  update user set host='%' where user ='root';
 //不重启直接生效
[root@iZwz9hmb50uzud432t180uZ mysql]#  FLUSH PRIVILEGES; 
//进行授权
[root@iZwz9hmb50uzud432t180uZ mysql]#  GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

测试是否可以远程连接
测试连接
在这里插入图片描述

四、安装redis,并设置远程访问

redis 可以直接通过yum 安装

[root@iZwz9hmb50uzud432t180uZ ~]# yum install redis
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:00:03 ago on Sun Jan 19 00:10:07 2020.
Package redis-5.0.3-1.module_el8.0.0+6+ab019c03.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@iZwz9hmb50uzud432t180uZ ~]# service redis start
Redirecting to /bin/systemctl start redis.service
[root@iZwz9hmb50uzud432t180uZ ~]# redis-cli
127.0.0.1:6379> exit

设置远程访问,我们需要修改redis.conf

# 可以通过whereis 来查找redis.conf
[root@iZwz9hmb50uzud432t180uZ etc]# whereis redis
redis: /usr/lib64/redis /etc/redis.conf

修改redis.conf 中的bind 127.0.0.1 为bind 0.0.0.0
bind 0.0.0.0 代表所有人都可以访问

找到#requirepass那行并打开注释,在后面写自己的密码,如下
requirepass yourpassword
建议设置密码,不然有可能被被别人通过端口挖矿

在vim 中可以通过输入/bind 回车来快速查找,vim 查找功能

测试
// 本级远程连接
$ redis-cli -h 120.79.94.90 -p 6379
120.79.94.90:6379> KEYS *
(error) NOAUTH Authentication required.
// 输入密码
120.79.94.90:6379> AUTH 这是密码
OK
120.79.94.90:6379> KEYS *
(empty list or set)
120.79.94.90:6379>
补充

yum 常用命令

###安装软件
yum install 包名

###卸载包
yum remove | erase 包名

###更新本地软件
yum update

###更新本地缓存
yum makecache

###列出所有可安装的软件包
yum list

###列出所有可更新的软件包
yum list updates

###列出所有已安装的软件包
yum list installed

###列出所有可更新的软件包信息
yum info updates

###列出所有已安裝的软件包信息
yum info installed

###搜索软件
yum search 包名

五、安装git

git 的安装很简单

[root@iZwz9hmb50uzud432t180uZ ~]# yum install git
[root@iZwz9hmb50uzud432t180uZ ~]# git --version
git version 2.18.2

六、安装maven

安装需要先到maven 官网下载安装包
在这里插入图片描述
我们可以复制下载地址在CentOs 里面通过wget 下载

# 在/usr/local 目录下下载
[root@iZwz9hmb50uzud432t180uZ lib]# cd /usr/local/
[root@iZwz9hmb50uzud432t180uZ local]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

[root@iZwz9hmb50uzud432t180uZ local]# tar -zxvf apache-maven-3.6.3-bin.tar.gz
// 修改目录名
[root@iZwz9hmb50uzud432t180uZ local]# mv apache-maven-3.6.3 maven

再修改~/.bash_profile 里面的路径(类似配置jdk 环境变量)

[root@iZwz9hmb50uzud432t180uZ local]#  vim ~/.bash_profile
MAVEN_HOME=/usr/local/maven/
export PATH=${MAVEN_HOME}/bin:${PATH}

// 更新
[root@iZwz9hmb50uzud432t180uZ local]# source ~/.bash_profile
测试
[root@iZwz9hmb50uzud432t180uZ project]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_231, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.18.0-80.11.2.el8_0.x86_64", arch: "amd64", family: "unix"

七、远程拉取项目

前面我们安装了Java、git 和maven 已经可以在我们的服务器上拉取项目并打包运行了

在github 上拉一下自己的项目
拉项目之前先把服务器的密钥加入项目,方便拉取
服务器的密钥都放在~/.ssh 目录下

[root@iZwz9hmb50uzud432t180uZ local]# cd ~/.ssh/
[root@iZwz9hmb50uzud432t180uZ .ssh]# ls
authorized_keys

这里我们因为是新服务器还没创建密钥,可以通过命令ssh-keygen -t rsa 来创建密钥,什么都不用输,一路回车

[root@iZwz9hmb50uzud432t180uZ .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vafOfGfI/atLMz+RZTb1DzJBAZ4L4debWFKFZB6uwCw root@iZwz9hmb50uzud432t180uZ
The key's randomart image is:
+---[RSA 3072]----+
|        . .+B+.  |
|       + o Bo.  .|
|      E * = =.  o|
|       . = *oo..=|
|        S = oo +=|
|           .   o.|
|          ...*  .|
|         o o= B. |
|         .=. =o++|
+----[SHA256]-----+
[root@iZwz9hmb50uzud432t180uZ .ssh]#
[root@iZwz9hmb50uzud432t180uZ .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub

我们把id_rsa.pub 里面的内容复制到github 项目的密钥管理里面
在这里插入图片描述
在这里插入图片描述
设置好密钥,我们就可以在服务器上拉取,并用maven 打包运行:

[root@iZwz9hmb50uzud432t180uZ ~]# cd ~
[root@iZwz9hmb50uzud432t180uZ project]# mkdir project && cd project\
[root@iZwz9hmb50uzud432t180uZ project]# git clone git@github.com:tanwt/TheCentralCertification.git
...
[root@iZwz9hmb50uzud432t180uZ ~]#  cd TheCentralCertification
[root@iZwz9hmb50uzud432t180uZ ~]#  mvn clean && package
...
[root@iZwz9hmb50uzud432t180uZ ~]#  cd target
[root@iZwz9hmb50uzud432t180uZ ~]#  java -jar  certification-0.0.1-SNAPSHOT.jar

启动项目后,来测试能否访问接口

在这里插入图片描述

八、安装nginx

通过yum 安装nginx

[root@iZwz9hmb50uzud432t180uZ ~]# yum install nginx
[root@iZwz9hmb50uzud432t180uZ ~]# service nginx start

在这里插入图片描述
当然nginx 还有很多其他的作用,比如映射静态资源、代理、https等等,感兴趣可以自己去研究一下。

九、通过脚本自动发布项目

其实走完整套流程过后,你会发现在服务器上发布一个项目无非就是那几个命令,所以我们可以通过脚本来简化我们的操作:

[root@iZwz9hmb50uzud432t180uZ ~]# cd ~/project/
[root@iZwz9hmb50uzud432t180uZ project]# vim start.sh
source ~/.bash_profile

cd TheCentralCertification
git checkout master && git pull  && mvn clean install
cd -

APP_NAME=certification
VERSION=0.0.1-SNAPSHOT
FILE_NAME=/root/project/TheCentralCertification/target/$APP_NAME-$VERSION.jar
SPRING_PROFILES_ACTIVE=product
APP_LOG_PATH=/var/logs/$APP_NAME
mkdir -p $APP_LOG_PATH

cat certification.pid | xargs kill -9

cd `dirname $0`
PID=`ps -ef | grep java | grep "$FILE_NAME" |awk '{print $2}'`
if [ -n "$PID" ]; then
    echo "ERROR: $APP_NAME is already started!!"
    exit 1
fi

echo "Starting $FILE_NAME profiles=$SPRING_PROFILES_ACTIVE label=$SPRING_CLOUD_CONFIG_LABEL logPath=$APP_LOG_PATH ..."
JAVA_OPTS="$JAVA_OPTS -server -Dfile.encoding=UTF-8 -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128m"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -Xms1024m -Xmx1024m"
echo "JAVA_OPTS: $JAVA_OPTS"

nohup java $JAVA_OPTS -jar $FILE_NAME --spring.profiles.active=$SPRING_PROFILES_ACTIVE  </dev/null > $APP_LOG_PATH/${APP_NAME}_java_stdout.log 2>&1 &

echo "$!" > certification.pid
sleep 3
PID=`ps -ef | grep java | grep "$FILE_NAME" |awk '{print $2}'`
echo "Startd $FILE_NAME on $PID(`cat certification.pid`)"

[root@iZwz9hmb50uzud432t180uZ project]# chmod +x start.sh
[root@iZwz9hmb50uzud432t180uZ project]# ./start.sh

查看接口是否能够访问
在这里插入图片描述
现在我们只需要把本地的代码上传到远程仓库,再到服务器执行一下脚本,就可以发布项目了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值