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 [email protected]:/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 [email protected]: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

查看接口是否能夠訪問
在這裏插入圖片描述
現在我們只需要把本地的代碼上傳到遠程倉庫,再到服務器執行一下腳本,就可以發佈項目了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章