之前做的项目都是跑在本地的虚拟机上的,想到在腾讯云上还有一台云服务器,于是便打算将其部署到云服务器上,本文会涉及到一些部署上的流程以及一些坑,仅供参考。

安装 Java

首先需要在服务器上安装 Java,这样 Web 应用程序才能才其上面执行。由于使用的是 CentOS7,因此可以使用以下命令安装 OpenJDK 7:

1
yum -y install java-1.8.0-openjdk-devel

安装完以后,Java 以及 jre 就会被安装在以下目录:

1
2
3
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/bin/java

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java

现在需要配置环境变量$PATH,直接执行vim /etc/profile命令,编辑其中的export。需要修改的地方已在下方标出,其中JAVA_HOME就是上面的 Java 根路径,这里根据自己机器的情况而定。PATH指明 Java 根路径下面的/bin/jre文件,相应的也将CLASSPATH指定到/lib/jre

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export PATH=:$PATH:/opt/apache-maven-3.6.3/bin

# 需要编辑的地方--start
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
# 需要编辑的地方--end

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then 
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge

编辑好文件后,需要执行source /etc/profile命令,以便更新profile文件。然后输入java -version即可看到 Java 安装成功:

1
2
3
4
5
[root@VM_0_4_centos ~]# 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)
[root@VM_0_4_centos ~]# 

安装 Tomcat

我这里选择的版本是Tomcat 8.5.53,下载tar.gz文件后通过FileZilla将安装包传输到云服务器。然后解压该文件:

1
tar -zxvf apache-tomcat-8.5.53.tar.gz

再将该文件重新命名为tomcat

1
mv apache-tomcat-8.5.53.tar.gz tomcat

防火墙及端口

这里需要注意的是:在防火墙开启之前,需要确认是否已经将8080端口打开。因为我们是通过http://ip:8080来访问网址,即通过 ip 地址加端口号的方式来访问。

可使用如下命令查看当前所有的端口号:

1
netstat -ntlp

如果发现没有开启8080端口的话,则需要在防火墙设置一下:

1
2
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --reload

此外,还需要将云服务器安全组中的8080端口打开,如下所示:

image.png

测试

tomcat目录下的bin文件中,有启动和关闭 tomcat 服务的命令,分别为startup.shshutdown.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@VM_0_4_centos bin]# ll
total 860
-rwxrwxrwx 1 root root  35204 Mar 11 18:04 bootstrap.jar
-rwxrwxrwx 1 root root  15953 Mar 11 18:04 catalina.bat
-rwxrwxrwx 1 root root  23792 Mar 11 18:04 catalina.sh
-rwxrwxrwx 1 root root   1664 Mar 11 18:06 catalina-tasks.xml
-rwxrwxrwx 1 root root   2123 Mar 11 18:04 ciphers.bat
-rwxrwxrwx 1 root root   1997 Mar 11 18:04 ciphers.sh
-rwxrwxrwx 1 root root  25197 Mar 11 18:04 commons-daemon.jar
-rwxrwxrwx 1 root root 206895 Mar 11 18:04 commons-daemon-native.tar.gz
-rwxrwxrwx 1 root root   2040 Mar 11 18:04 configtest.bat
-rwxrwxrwx 1 root root   1922 Mar 11 18:04 configtest.sh
-rwxrwxrwx 1 root root   8675 Mar 11 18:04 daemon.sh
-rwxrwxrwx 1 root root   2091 Mar 11 18:04 digest.bat
-rwxrwxrwx 1 root root   1965 Mar 11 18:04 digest.sh
-rwxrwxrwx 1 root root   3460 Mar 11 18:04 setclasspath.bat
-rwxrwxrwx 1 root root   3708 Mar 11 18:04 setclasspath.sh
-rwxrwxrwx 1 root root   2020 Mar 11 18:04 shutdown.bat
-rwxrwxrwx 1 root root   1902 Mar 11 18:04 shutdown.sh
-rwxrwxrwx 1 root root   2022 Mar 11 18:04 startup.bat
-rwxrwxrwx 1 root root   1904 Mar 11 18:04 startup.sh
-rwxrwxrwx 1 root root  51264 Mar 11 18:04 tomcat-juli.jar
-rwxrwxrwx 1 root root 419428 Mar 11 18:04 tomcat-native.tar.gz
-rwxrwxrwx 1 root root   4574 Mar 11 18:04 tool-wrapper.bat
-rwxrwxrwx 1 root root   5540 Mar 11 18:04 tool-wrapper.sh
-rwxrwxrwx 1 root root   2026 Mar 11 18:04 version.bat
-rwxrwxrwx 1 root root   1908 Mar 11 18:04 version.sh

此时,执行./startup.sh即可启动 tomcat 服务器,如下所示:

1
2
3
4
5
6
7
[root@VM_0_4_centos bin]# ./startup.sh 
Using CATALINA_BASE:   /home/carol/tomcat
Using CATALINA_HOME:   /home/carol/tomcat
Using CATALINA_TMPDIR: /home/carol/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java
Using CLASSPATH:       /home/carol/tomcat/bin/bootstrap.jar:/home/carol/tomcat/bin/tomcat-juli.jar
Tomcat started.

通过以下命令可以查看 tomcat 是否处于开启状态:

1
ps -ef | grep tomcat

然后就可以通过http://ip:8080的方式在浏览器中打开 tomcat 默认的界面了,如下所示:

image.png

安装 Maven

在 Maven 官网下载相应的安装包,解压后即可。解压完成以后,需要在/etc/profile中配置 Maven 的环境变量,如下所示:

1
export PATH=:$PATH:/opt/apache-maven-3.6.3/bin

最后,使用source /etc/profile命令让文件生效。

此时,使用mvn --version可以看到已经安装成功了,如下所示:

1
2
3
4
5
6
7
[root@VM_0_4_centos ~]# mvn --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /opt/apache-maven-3.6.3
Java version: 1.8.0_242, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1062.1.2.el7.x86_64", arch: "amd64", family: "unix"
[root@VM_0_4_centos ~]# 

可以看到 Maven 被安装在/opt/apache-maven-3.6.3下,我们修改一下/opt/apache-maven-3.6.3/conf配置文件settings.xml中的镜像,使用阿里云的镜像,这样的话,Maven 会使用国内镜像来下载相关的依赖,速度要快一些。如下所示:

1
2
3
4
5
6
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>

安装与设置 MySQL

在 MySQL 官网下载相应的安装包,我这里下载的是mysql80-community-release-el7-3.noarch.rpm

这里遇到了一些坑,主要是使用yum install mysql80-community-release-el7-3.noarch.rpm后,提示Nothing to do.。然后直接执行以下命令就可以安装 MySQL 的客户端和服务端了:

1
yum install mysql-server

如下所示:

image.png

当然,此过程网速很慢,因此我将server包单独下载下来,通过FileZilla将安装包传输到云服务器之后,再执行yum localinstall mysql-community-server.x86_64 0:8.0.19-1.el7即可安装。

安装好以后,通过systemctl state mysqld启动 MySQL 服务器,然后通过systemctl status mysqld查看 MySQL 的运行状态,如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@VM_0_4_centos ~]# systemctl start mysqld
[root@VM_0_4_centos ~]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-03-31 16:15:37 CST; 22s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 2377 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 2491 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─2491 /usr/sbin/mysqld

Mar 31 16:15:24 VM_0_4_centos systemd[1]: Starting MySQL Server...
Mar 31 16:15:37 VM_0_4_centos systemd[1]: Started MySQL Server.
[root@VM_0_4_centos ~]# 

启动成功后,通过以下命令查看 MySQL 默认的密码,准备将其进行修改。因为 MySQL 的默认密码是一串乱序的字符,所以这里最好修改其密码。

1
grep 'password' /var/log/mysqld.log

得到的密码为:)egJaoLgh7pH,然后登录到 MySQL 服务器,进行修改:

1
mysql -u root -p

然后输入以下命令设置一个新的密码,需要注意的是:这里的面应包含大小写字母、特殊符号以及数字,如下所示:

1
alter user root@localhost identified by 'New_password123';

导入初始化数据

这里使用自己项目中的初始数据,将 MySQL 建表文件传输到云服务器,然后解压即可。

通过unzip命令解压后缀为*.zip的压缩包,将其解压到/root目录下。如下所示:

1
unzip -d /root *.zip

进入 MySQL 后创建一个数据库,然后使用该数据库,如下所示:

1
2
3
create databse community;

use community;

执行 sql 语句,将初始数据进行初始化:

1
2
3
4
5
source /root/community-init-sql-1.5/init_schema.sql;

source /root/community-init-sql-1.5/init_data.sql;

source /root/community-init-sql-1.5/tables_mysql_innodb.sql;

通过show tables;查看已创建的表数据。

安装 Redis

通过yum list redis*查看可用的 Redis 版本,选择redis.x86_64进行安装即可。安装完成后,启动 Redis,并查看其运行状态。

1
2
3
systemctl start redis;

systemctl status redis;

结果如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@VM_0_4_centos ~]# systemctl start redis
[root@VM_0_4_centos ~]# systemctl status redis
¡ñ redis.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/redis.service.d
           ©¸©¤limit.conf
   Active: active (running) since Tue 2020-03-31 16:53:48 CST; 9s ago
 Main PID: 10234 (redis-server)
   CGroup: /system.slice/redis.service
           ©¸©¤10234 /usr/bin/redis-server 127.0.0.1:6379

Mar 31 16:53:48 VM_0_4_centos systemd[1]: Starting Redis persistent key-value database...
Mar 31 16:53:48 VM_0_4_centos systemd[1]: Started Redis persistent key-value database.
[root@VM_0_4_centos ~]# 

安装 Kafka

将压缩包kafka_2.12-2.2.0.tgz进行加压到/opt下:

1
tar -zxvf kafka_2.12-2.2.0.tgz -C /opt

通过后台的方式先启动 zookeeper,再启动 Kafa:

1
2
3
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 

nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &

通过查看 Kafka 下的主题,来判断是否启动成功:

1
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

安装 Elasticsearch

将压缩包解压到/opt目录下,然后将插件放到/plugins/ik目录下即可。

1
2
3
tar -zxvf elasticsearch-6.4.3.tar.gz -C /opt/

unzip -d /opt/elasticsearch-6.4.3/plugins/ik elasticsearch-analysis-ik-6.4.3.zip 

修改 Elasticsearch 的配置文件elasticsearch.yml,修改cluster.namepath.data以及path.logs,如下所示:

1
2
3
4
5
cluster.name: nowcoder

path.data: /tmp/elastic/data

path.logs: /tmp/elastic/logs

修改jvm.options文件,指定 Elasticsearch 启动内存:

1
2
-Xms128m
-Xmx256m

创建新的用户,使用新的用户启动 Elasticsearch:

1
2
[root@VM_0_4_centos config]# groupadd nowcoder
[root@VM_0_4_centos config]# useradd nowcoder1 -p 123456 -g nowcoder

/opt/tmp目录设置权限,使其nowcoder1能够访问到:

1
2
[root@VM_0_4_centos opt]# chown -R nowcoder1:nowcoder *
[root@VM_0_4_centos tmp]# chown -R nowcoder1:nowcoder *

切换到 nowcoder1 用户后,启动 Elasticsearch:

1
2
3
[root@VM_0_4_centos /]# su - nowcoder1
[nowcoder1@VM_0_4_centos ~]$ cd /opt/elasticsearch-6.4.3/
[nowcoder1@VM_0_4_centos elasticsearch-6.4.3]$ ./bin/elasticsearch -d

进行到这里的时候,我的云服务器的内存(1G)就已经被使用满了。因此,后序的话会在虚拟机里安装。