90分钟

应用上云操作实战

应用上云操作实战

实验预计耗时:90分钟

前置实验教程:Maven 应用实战

1. 课程背景

1.1 课程目的

腾讯云服务器 (Cloud Virtual Machine,CVM) 是在云中提供可扩展的计算服务,避免了使用传统服务器时需要预估资源用量及前期投入的情况。通过使用腾讯云 CVM ,您可以在短时间内快速启动任意数量的云服务器并即时部署应用程序。

传统的部署方式(自建机房)在部署的时候,首先需要根据应用配置购买机器(内部申请、领导审批、下单到收货,最快也需要3-5天,后续应用升级配置可能还需要升级),然后还需要安装操作系统、搭建数据库服务器、搭建存储服务器、搭建机房网络(如果带宽要求比较高,可能还需要升级带宽)、配置安全策略、专人维护....等一系列复杂的操作。耗时最理想情况下估计也需要10天左右,慢的话甚至可能需要一个月。

如果采用云服务器部署方式预计只需要30分钟,本实验教材将带领您使用云服务器的方式部署本地应用。

1.2 课前知识准备

学习本课程前,学员需要掌握以下前置知识:

1、能力基础

  • Linux 运维基础:掌握 Linux 远程登录、文件与目录管理等。
  • Java 开发基础:掌握 Java 基础语法,了解面向对象开发等。

2、相关概念

  • Java:Java 是一门面向对象编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java 可运行于多个平台,如 Windows, Mac OS,及其他多种UNIX版本的系统。
  • JDK:JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 小程序和应用程序的程序开发环境。JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment),一些 Java工具和 Java 的核心类库(Java API)。
  • Maven:Maven 是一个项目管理工具,可管理本地 Jar 仓库,从而便于项目快速使用外部依赖。
  • Tomcat:Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器。我们可以将打包好的 war 包复制到Tomcat 容器内,运行 Tomcat 实现 web 服务的启动。
  • MySQL:MySQL 是一种关系型数据库管理系统,使用的 SQL 语言是用于访问数据库的最常用标准化语言。在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

3、前置实验教程

  • Maven 应用实战

2.实验环境

2.1 实验操作环境

本课程需要以下实验操作环境:

  1. 可以接入互联网的笔记本电脑或者台式机(本实验使用 Windows 系统)
  2. 腾讯云 CVM
  3. 本地Java开发环境(JDK 版本1.8,Maven 版本3.5及以上)
  4. 集成开发环境:Eclipse 和 IntelliJ IDEA,此实验采用 Eclipse 作为开发工具
  5. 提前下载远程访问软件 PuTTy

2.2 实验架构图

本实验案例以一个简单的图书管理系统(JAVA 语言,Spring + SpringMVC + JdbcTempalte)为例,涉及图书管理,库存管理,借阅管理三个模块,本案例数据存储在 MySQL 数据库中,图书管理中的图片信息存储在本地文件系统(存储路径可以在项目根目录中的file.properties 配置文件中进行配置)。

原基础架构如下:

本地应用迁移到云端后基础架构如下:

2.3 实验的数据规划表

资源名称

数据

说明

腾讯云账号

账号:XXXXXXXX、密码:XXXXXXXX

涉及产品如下:VPC、CVM

JDK

版本:1.8

Maven

版本:3.6.3

Eclipse

版本:最新版即可

PuTTY

版本:0.73

SSH 工具,请学员自行安装

Tomcat

版本:8.5.50

tbook.sql

用于快速导入实验数据到MySQL数据库

tbook.zip

实验项目代码

下载JDK

下载Maven

下载Eclipse

下载PuTTY

下载Tomcat

下载tbook.sql

下载tbook.zip

3. 实验流程

本实验案例以一个简单的图书管理系统(JAVA 语言,Spring + SpringMvc + JdbcTempalte)为例,涉及图书管理,库存管理,借阅管理三个模块,本案例数据存储在mysql数据库中,图书管理中的图片信息存储在本地文件系统(存储路径可以在项目根目录中的file.properties配置文件中进行配置)。

本实验涉及三个部分:

  1. 本地应用迁移到云端
  2. 使用云服务器的弹性伸缩功能,负载均衡能力(灵活应对不同业务场景,节约成本)
  3. 使用云硬盘扩容功能(主要用于mysql数据存储)

4. 实验步骤

任务1 Tomcat云服务器部署

【任务目标】

购买腾讯云云服务器,并实现Tomcat云上部署和启动。

【任务步骤】

1、购买应用部署云服务器

1.购买一台云服务器用于安装基础环境(tomcat),设置云虚拟机的别名为 tomcat;登录腾讯云官网,进入云服务器主页:https://console.cloud.tencent.com/cvm/index

2.点击“新建“按钮购买云服务器

3.首先在选择机型页面,机型配置如下。

配置项

内容

计费模式

按量计费或竞价实例

地域

广州

可用区

广州三区

网络

新建或使用已有 VPC

实例

标准型 S5.SMALL2 1核2GB

镜像

公共镜像 CentOS 7.6 64位

系统盘

高性能云硬盘 50GB

公网带宽

免费分配独立公网 IP,按使用流量

确认无误后,点击下一步:设置主机

4.设置主机页面,配置如下:

配置项

内容

所属项目

默认项目

安全组

使用使用放通全部端口安全组

实例名称

tomcat

登陆方式

设置密码(学员可根据自己习惯选择)

注:如果没有新建安全组,可以通过安全组选项下方的“新建安全组”直接新建。

确认无误后,点击下一步:确认配置信息

5.确认开通

服务器信息如下图所示,点击开通

6.开通后可以在云服务器实例列表中查看。

7.连接购买的云服务器,可以通过 web 访问远程连接,也可以其它工具远程连接。

复制集群页的公网 IP,打开 PuTTY 创建连接,将复制的公网 IP 粘贴至 Host Name,端口默认22,如图:

8.第一次连接时弹出安全警告,点击是(Y)

9.输入用户名root,密码为申请云服务器时设置的登录密码;

2、安装基础环境(JDK,Tomcat)

1.远程登录后执行如下命令安装 JDK,等待安装完成执行 java -version

yum install -y java-1.8.0-openjdk-devel.x86_64

安装成功后,使用如下命令进行验证:

java -version

2.安装 Tomcat,通过如下命令下载 tomcat8.5 压缩包

wget https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/PracticalApplication/202002CloudDevelop/1-app/apache-tomcat-8.5.50.tar.gz

3.把 Tomcat 解压到 /opt/tomcat8.5 目录

创建存放tomcat的文件夹:

mkdir /opt/tomcat8.5

创建用于后续存放应用上传图片的文件夹:

mkdir -p /opt/tbook/pics

执行如下命令,将tomcat压缩包解压至创建好的文件夹:

tar -zxvf apache-tomcat-8.5.50.tar.gz -C /opt/tomcat8.5

确认,进入到tomcat的bin目录下:

cd /opt/tomcat8.5/apache-tomcat-8.5.50/bin

使用命令查看当前文件夹

ll

4.启动 Tomcat

执行 apache-tomcat-8.5.50/bin 目录下 start.sh 脚本(启动 tomcat);

./startup.sh

通过云虚拟机公网 ip 访问8080端口能看到 tomcat 首页;

注:此时若无法打开页面,请检查安全组是否打开8080端口,如没有请自行增加安全组规则。

5.设置 tomcat 开机自动启动

vi /etc/rc.d/rc.local

在 /etc/rc.d/rc.local 文件最后加入如下代码:

/opt/tomcat8.5/apache-tomcat-8.5.50/bin/startup.sh

按 Esc,输入:wq,按 Enter,保存设置并退出编辑器。

修改可执行权限

chmod +x /etc/rc.d/rc.local

以后每次重启服务器后就会自动启动tomcat(需要等待几分钟)。

任务2 MySQL云服务器部署

【任务目标】

购买另一台腾讯云云服务器,部署 MySQL 数据库,用于项目在云上的数据存储。

【任务步骤】

1、购买云数据库服务器

1.购买另一台云服务器,选择 Ubuntu 操作系统,确保购买的云服务器在同一网络下,用于安装 MySQL 数据库。

配置项

内容

计费模式

按量计费或竞价实例

地域

广州

可用区

广州三区

网络

与tomcat实例同一VPC

实例

标准型S5.SMALL2 1核2GB

镜像

公共镜像 Ubuntu Server 18.04.1 LTS 64位

系统盘

高性能云硬盘 50GB

数据盘

高性能云硬盘 10GB

公网带宽

免费分配独立公网IP,按使用流量

注意:此处购买一个数据盘(10G),用于保存 MySQL 数据。确认无误后,点击下一步:设置主机

2.设置主机页面,配置如下:

配置项

内容

所属项目

默认项目

安全组

使用放通全部端口安全组

实例名称

mysql

登陆方式

设置密码(学员可根据自己习惯选择)

3.确认配置信息后,点击开通

开通后,可在云服务器实例列表查看到已创建的实例:

4.打开 PuTTY,通过第二台 CVM 的公网 IP 远程登录实例,方式与连接第一台 CVM 相同,端口同为22;

使用用户名为 ubuntu,密码为申请云服务器时设置的登录密码;

5.执行如下命令,安装 MySQL 数据库:

sudo apt-get install mysql-server

当安装过程显示是否继续时,输入Y;

编辑 mysqld.cnf,修改其中的 bind-address 项为0.0.0.0

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

编辑后,点击 Esc 键盘键退出编辑模式,输入:wq 保存并推出,接着重启 MySQL 服务端。

sudo service mysql restart

6.初始化安全设置

sudo mysql_secure_installation

提示1:New password(输入新密码): 自定义的新密码

提示2:Re-enter new password(再次输入新密码): 自定义的新密码

提示3:Do you wish to continue with the password provided(密码强度不够,是否还使用这个密码)? Y

提示4:Remove anonymous users(是否删除匿名用户)? Y

提示5:Disallow root login remotely(是否禁止root远程登录)? n

提示6:Remove test database and access to it(是否删除test数据库)? n

提示7:Reload privilege tables now(刷新权限)? Y

7.配置 MySQL 远程登录权限,并初始化数据库。

切换至/opt文件夹;

cd /opt

将要导入的.sql文件下载至opt文件夹。

sudo wget https://course-public-resources-1252758970.cos.ap-chengdu.myqcloud.com/PracticalApplication/202002CloudDevelop/1-app/tbook.sql

登录 MySQL,输入刚刚设置的密码。

sudo mysql -u root -p

开启远程访问,并设密码为 Root-123(密码过于简单可能无法通过);

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY "Root-123" WITH GRANT OPTION;

8.执行 SQL 语句

创建数据库:

create database tbook;

使用创建的数据库:

use tbook;

执行 sql 脚本:

source /opt/tbook.sql;

此时数据已经创建,可以使用下面命令验证。

show tables;

查看book数据库

SELECT * FROM book;

9.退出 MySQL 客户端命令行

quit

2、挂载云硬盘到云服务器

1.输入命令:fdisk -l,查看链接到实例的磁盘:

sudo fdisk -l

可见一个50GB的系统盘和一个10GB的数据盘。

2.执行下列命令,格式化该磁盘并挂载到对应目录。

格式化该磁盘

sudo mkfs.ext4 /dev/vdb

创建新挂载点,用于把磁盘挂载到该目录;

sudo mkdir /data/mysql

挂机磁盘到/data/mysql目录

sudo mount /dev/vdb /data/mysql

查看挂载信息

df -TH

3.设置开机自动挂载磁盘

查看弹性云硬盘的软链接,用于自动挂载配置

ls -l /dev/disk/by-id

如图,为云硬盘的软链接;

编辑/etc/fstab

sudo vi /etc/fstab

按“i“进入编辑模式,把下面一行代码加入到文件最后,按 Esc,输入:wq,按 Enter。保存设置并退出编辑器;

/dev/disk/by-id/virtio-disk-i2mmn89a /data/mysql ext4 defaults 0 2

编辑的内容中的virtio-disk-i2mmn89a 是云硬盘软连接,/data/mysql是挂载点,练习时注意此处要替换成购买的云硬盘软连接和挂载点。

输入“mount -a ”命令检查/etc/fstab文件是否写入成功,如果运行通过则说明文件写入成功,新建的文件系统会在操作系统启动时自动挂载。

sudo mount -a

3、配置MySQL数据保存到云硬盘

1.首先停止mysql服务。

sudo service mysql stop

2.把mysql现有数据移到/data/mysql目录下。

sudo chmod 777 /var/lib/mysql/

迁移数据到/data/mysql目录;

sudo mv /var/lib/mysql/*  /data/mysql

修改mysql数据库目录权限;

sudo chown mysql:mysql -R /data/mysql/

3.修改mysql的配置文件中的datadir配置为/data/mysql。

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf  

4.修改 /etc/apparmor.d/usr.sbin.mysqld文件;

sudo vi /etc/apparmor.d/usr.sbin.mysqld

# Allow data dir access这一项,修改文件中的dir access目录,将原来的/var/lib/mysql改为/data/mysql,如下图:

重新加载apparmor配置文件;

sudo service apparmor reload

5.修改/usr/share/mysql/mysql-systemd-start文件;

sudo vi /usr/share/mysql/mysql-systemd-start

将原datadir配置的路径括号中的“/var/lib/mysql”修改为"/data/mysql",如下图:

4、确认路径更改成功

1.启动 MySQL 服务

sudo service mysql restart

登录 MySQL 客户端;

sudo mysql -uroot -p

2.确认修改后的 data 路径;

show variables like '%datadir%';

3.退出 MySQL 客户端;

quit

任务3 应用云上迁移

【任务目标】

对tbook项目进行本地开发环境导入,经更改部分配置信息后,打包上云部署。

【任务步骤】

1、应用打包

1.下载项目代码 tbook.zip,并解压在你的Eclipse项目管理目录。

下载链接:tbook.zip

2.使用 Eclipse 导入项目

启动 Eclipse 后,点击左上角 File,选择 Import

选择项目类型为 Existing Maven Projects,点击 Next >

点击 Browse...在本地找到项目,找到后点击 Finish

3.修改配置

打开 src/main/resources 目录下的 jdbc.properties 配置文件,将 jdbc.url 后面的 IP 改为 mysql 服务器的私有 IP。

4.项目打包

右键点击项目,选择 Run As> Maven install

项目打包成功后,war 包在 target 目录下,将该 war 包移动至 D 盘等待上传;

2、应用上传

1.使用 PuTTY 连接 tomcat 实例,使用 mkdir 命令创建一个/test 目录。

创建文件夹test;

mkdir /test

切换到test路径下;

cd /test

2.找到 PuTTY 的安装目录,在上方地址栏输入 cmd 并执行。

3.在弹出的黑窗口中首先输入 psftp,点击回车键打开 psftp 传输工具,使用命令进行文件传输:

psftp

接下来连接tomcat服务器,回车后需要输入用户名和密码(此处 xxx.xxx.xxx.xxx 修改为实例的公网 IP);

open xxx.xxx.xxx.xxx 

用于切换远程 Linux 服务器上的目录;

cd /test/

lcd 命令用于切换本地的路径;

lcd D:\

上传文件;

put tbook.war

命令使用可以参考下图(上传需要一点时间,如果 cmd 窗口最后一行再次出现’psftp>‘,说明上传完成):

3、应用云上部署

1.将上传的 war 包移动到 tomcat 实例的 Tomcat 发布目录下;

回到 PuTTY,使用如下命令移动 war 包至 Tomcat 发布目录;

cd /opt/tomcat8.5/apache-tomcat-8.5.50/webapps/

移动 war 包到该目录下;

mv /test/tbook.war /opt/tomcat8.5/apache-tomcat-8.5.50/webapps/

验证;

ll

2.重新启动 Tomcat

切换到 Tomcat 下的 bin 目录;

cd /opt/tomcat8.5/apache-tomcat-8.5.50/bin

重启 Tomcat;

./startup.sh

3.使用浏览器,访问URL:项目所在云服务器 IP:8080/tbook

账号:admin,密码:admin,点击登录进入首页;

至此,您已完成了本实验的全部任务。

5. 注意事项

您可以使用现有实验资源直接进行实验:【云开发实战】文件存储挂载实战

如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。

6. FAQ

【问题1】在任务3启动项目时,Lombok 注解未识别 Getter/Setter 方法报错。

【解决】在网上下载 Lombok 的 jar 包或者找到 maven 仓库内导入的jar包,下图为在 Maven 本地仓库找到的 jar 包。

双击打开 jar 包,默认Java™ Platform SE binary 的方式打开。

运行后会弹框如下框,直接点确定 :

选择Specify location...,找到本地Eclipse的安装位置后,点击Select

点击Install/Update,即可安装成功。

根据提示,重启 Eclipse。

【问题2】在任务3安装(打包)项目时,打包失败,报错原因 "-source 1.5 中不支持 diamond 运算符"。

【解决】修改默认 Java 编译版本

可参考文档:https://cloud.tencent.com/developer/article/1587537

在Maven配置文件 settings.xml 内添加如下配置在 profiles 标签内:

<profile>  
    <id>jdk-1.8</id>  
    <activation>  
        <activeByDefault>true</activeByDefault>  
        <jdk>1.8</jdk>  
    </activation>  
    <properties>  
        <maven.compiler.source>1.8</maven.compiler.source>  
        <maven.compiler.target>1.8</maven.compiler.target>  
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
    </properties>  
</profile>

位置参考如下: