漫步在阿里云:springboot项目部署到ECS云服务器

我在学习后台开发的时候,用到了阿里的fastjson包,用到了对象存储OSS存储文件……体验良好。于是乎,在完成用springboot编写的一个小型网站后,觉得老在本地的tomcat运行没意思,想在云上走一波,毅然决然地选择了阿里云的ECS服务器。虽然我的一个bro是用腾讯云的,但是喜欢一样东西就得从一而终,对,就是这样。好了,不整这些没用的了,进入正题。

符号说明:本文出现的"[]"代表内容填写的标志,根据实际情况填写。

一.准备阶段

1.购买云服务器

阿里云推出的“云翼计划”,学生可以享有优惠,对学习大有裨益。进入阿里云购买地址消费一波。“预装环境”选Ubuntu 16.04 64位,“地域”根据实际情况选择,如图1。

图1 购买界面

2.创建云服务器实例

购买完成后,进入控制台,依次选择侧边栏的“云服务器ECS”、“实例”、“创建实例”,在创建过程中会设置密码,过程如图2。


图2 创建实例

创建完成之后,如下图,这里的公网IP很关键,通过ssh登录、通过ftp上传文件和网站的访问都要通过这个公网IP。


3.登录阿里云服务器

推荐使用shell通过ssh登录,mac下shell(windows使用secureCRT)。这里,我使用的是Mac OS终端利器ITerm2,当然用自带的终端也是可以的,过程如图3。
输入如下命令:

//ssh 用户名@公网IP
ssh root@120.79.5.246
//输入密码
图3 ITerm2界面

二.搭建springboot运行环境

1.安装JDK并配置环境变量

①进入Java8下载页面获取下载链接,目标是下载红色圈出来的Linux x64版本,如下图4。
这里划个重点,这个问题卡了我好久。我参考的一篇博客提到,直接点击右键“复制链接地址”,然后用"sudo wget"命令,即可下载。但这样做会导致后面解压失败,因为文件没有完全下载,文件大小只有几k;
怎么做呢?直接点击下载链接,Chrome会开始下载,在Chrome下载页面中再点击右键“复制链接地址”,如图5。

图4 Java8下载界面

图6 获取下载链接

②终端执行下载命令
我是下载到"/root/sdk"的路径下

sudo wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1535981454_bd77fcb0fe03223bdbce6436359d6e57

③终端执行解压命令
我是解压到"/root/sdk"的路径下

tar -zxvf jdk-8u181-linux-x64.tar.gz

下载解压之后,结果如下图。



④配置JDK环境变量
a.添加系统环境变量

vi /etc/environment

加入以下几行:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export JAVA_HOME=/root/sdk/jdk1.8.0_181

我记得第一行好像是有的,以防万一,还有贴出来吧。
执行如下命令,使配置生效:

source /etc/environment

b.添加用户环境变量

vi /etc/profile

在开头添加如下内容,我印象中好像放在别的地方配置无效。

export JAVA_HOME=/root/sdk/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

执行如下命令,使配置生效:

source /etc/profile

⑤验证安装

java -version

若如下图,则安装成功



2.安装MySQL和配置远程服务

①安装
执行如下命令

apt-get install mysql

②配置远程服务
tips:如果过程中没有设置数据库的密码,默认密码好像是"123456"。
因为篇幅原因,我给出我参考的文章“阿里云服务器MYSQL数据库开启远程访问”,按照作者的步骤即可,我就是参考这篇文章实现的,我太懒了,不想再复现一遍了。

最后,使用MySQLWorkbench测试一下链接,如下图,远程连接成功。


3.安装redis和配置远程服务

①下载
我还是下载到"/root/sdk"路径下

wget http://download.redis.io/releases/redis-4.0.10.tar.gz

②解压
解压到"/root/sdk"路径下

tar xzf redis-4.0.10.tar.gz

③编译

cd redis-4.0.10
make

④配置远程访问
进入redis目录,执行如下指令:

vi redis.conf

a.注释绑定的本机地址



b.设置redis-service为后台服务
将"daemonize no"改为"daemonize yes"



c.设置redis-cli连接redis服务器的密码
手动输入"requirepass [your password]"(注意这里的中括号只是输入内容的标志)

d.退出保存
e.启动redis服务器(一定要在redis目录下)
以刚刚的配置启动redis服务器

redis-server redis.conf

查看进程:

ps -ef | grep redis

若如下图所示,则配置远程访问成功。


切记,要在阿里云添加安全组规则,不论是上面提到的MySQL还是下面准备提到的Tomcat都要在阿里云添加安全组规则,否则无法远程连接。以图7的格式添加。

图7 添加redis安全组规则

4.安装Tomcat

①进入Tomcat下载页面,点击右键“复制链接地址”


②下载(下载到"/root/sdk")

sudo wget wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.33/bin/apache-tomcat-8.5.33.tar.gz

③解压(解压到"/root/sdk")

tar -xzvf apache-tomcat-8.5.33.tar.gz

④配置(使用默认配置)
⑤启动
进入安装路径(根据你的安装情况):



执行以下命令:

sh startup.sh

⑥验证
输入[your IP]:8080

5.安装git

用作从自己的GitHub上拉取代码

apt-get install git
git --version

6.安装Maven

用作打包和构建应用
由于与Tomcat的安装雷同,就不给出截图了
①下载(需要其他版本自行去官网获取链接)

wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

②解压

tar -zxvf apache-maven-3.5.4-bin.tar.gz 

③配置Maven环境变量

vi /etc/profile

在Java环境变量后面添加:

export M2_HOME=/root/sdk/apache-maven-3.5.4
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

使用如下命令使配置生效:

source /etc/profile

④修改Maven国内镜像(提高构建速度)
复制"settings.xml"到"~/.m2"路径下

cp /root/sdk/apache-maven-3.5.4/conf/settings.xml ~/.m2

然后:

vi ~/.m2/settings.xml

在mirrors节点下添加如下内容:

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
</mirror>

⑤验证

mvn -version

显示版本信息,安装成功

7.安装Nginx

①安装

apt-get install nginx

②配置Nginx

vi /etc/nginx/sites-enabled/[filename]

"server_name"后面写你申请的域名,没有可以写云服务器的IP,当你输入IP的时候,Nginx就会反向代理到"http://127.0.0.1:8080"上,这正是本机的Tomcat。

server{
        listen 80;
        server_name [domain name];
        location / {
                proxy_pass http://127.0.0.1:8080;
        }
}

到此,折腾我很久的配置环节就结束了。最后,一定要记得在阿里云增加安全组规则,方法在配置redis的时候已经提到了,只是端口范围不同而已,例如MySQL就写"3306/3306",Tomcat就写"8080/8080"。最终的安全组规则列表如图8。


图8 安全组规则列表

三.springboot应用打包

1.修改应用MySQL和Redis的链接

①修改application.properties的Mysql链接

spring.datasource.url=jdbc:mysql://[your IP]:3306/toutiao?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=[your password]

②修改JedisPool的链接

    @Override
    public void afterPropertiesSet() throws Exception {
        //jedis = new Jedis("localhost");
        pool = new JedisPool("[your IP]", 6379);
    }

2.application继承SpringBootServletInitializer

重写configure()方法,改为你应用的application类名:

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
       return builder.sources([your application class name].class);
}

3.pom.xml打包改为war

<groupId>com.st</groupId>
<artifactId>toutiao2</artifactId>
<version>2.0</version>
<packaging>war</packaging>

4.提交代码到GitHub(官方会有指引,不作描述)

5.在阿里云服务器上clone/pull代码

首次创建:

git clone [url]

或者在已有项目的目录下:

git pull

6.使用Maven打包

在项目的目录下执行如下指令("-Dmaven.test.skip=true"代表跳过测试用例的运行,为了加快打包过程):

mvn package -Dmaven.test.skip=true

不出意外的话,项目下的"target"目录会出现打包好的war:


四.部署到阿里云

在项目的"target"目录下,将war包拷贝到Tomcat的"webapps"目录中,重命名为"ROOT.war",原因:一是为了直接输入IP的时候就进我们的项目,二是如果不这样做的话,velocity模板引擎渲染不出前台的效果,本人亲测过。

cp toutiao-1.0.war ~/sdk/apache-tomcat-8.0.53/webapps/ROOT.war

文件名和"webapps"路径根据自己安装情况自行修改


五.运行项目

输入绑定的域名即可访问springboot项目,由于我的域名还没备案,直接输入公网IP,Nginx就会反向代理到Tomcat。展示如下:



六.结语

在完成上面全套配置的时候,我走了很多弯路,遇到了各种问题,浪费了很多时间。写这篇文章的出发点只有一个,将部署过程中遇到的问题和解决方法进行汇总,给和我出现过类似问题的人提供参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容