1.购买服务器并配置环境

1.1 购买

  • 618购买了腾讯云服务器三年最低配置(1核2G 1Mbps 50G云盘),一时激动忘记了购买前领优惠券,痛失25元。

1.2 环境配置

系统是 CentOS Linux release 7.5.1804 x84-64:cat /etc/redhat-release ,由于腾讯云服务器的镜像环境需要付费使用,因此手动安装 Java1.8,Tomcat9,MySQL8,Redis5。

1.2.1 安装Java 1.8

这里安装的是Oracle JDK1.8 而非 OpenJDK 1.8,实际使用没有多大区别,不过前者只供个人使用,后者可以供商业使用。由于Oracle官网需要登陆,没从官网获取对应的二进制包,而是找到对应的网盘资源 (提取码:f2y8),上传到服务器。

mkdir /usr/local/java8
mv jdk-8u212-linux-x64.tar.gz /usr/local/java/
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /usr/local/java8/
// 配置环境变量
vim /etc/profile
//在末尾添加
export JAVA_HOME=/usr/local/java8/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
expor CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
//生效
source /etc/profile
//验证
java -version
//还可以添加软连接(并不必须)
ln -s /usr/local/java8/jdk1.8.0_212/bin/java /usr/bin/java

1.2.2 安装Tomcat

SpringBoot已经内置了Tomcat服务器,为什么还要安装呢?这引出了我这两天未能解决的问题:用 jar包方式 未能成功上线运行,留到后面章节再说。

这里为了和 SpringBoot 2.2.1 适配,版本是 apache-tomcat-9.0.48 。官网:下载 binary Distributions→ Core→ tar.gz 或 zip ,上传至服务器。

mkdir /usr/local/tomcat9
tar -zxvf apache-tomcat-9.0.48.tar.gz -C /usr/local/tomcat9
//启动
cd /usr/local/tomcat9/apache-tomcat-9.0.48/bin
./startup.sh
//可以查看 8080端口是否监听和占用
netstat -tuplpn | grep 8080
lsof -i :8080

安装完成后,可以通过修改 conf/server.xml 来自定义配置Tomcat,其中可以配置其默认端口 从 8080 改为 80

<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
.....

同时因为我的项目是SpringBoot 打成 mall-0.0.1-SNAPSHOT.war,因此 如果要访问 应该是 http://[IP]:[port]/mall-0.0.1-SNAPSHOT。同样可以通过修改配置文件,避免在URL中写项目名的麻烦:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
<!--添加如下代码-->
<Context path="" docBase="mall-0.0.1-SNAPSHOT" debug="0"/>

将 http://{my-IP}:{my-Port}/mall-0.0.1-SNAPSHOT 映射为 http://[my-IP]:[my-Port]/

但是此时还无法在网页上访问,需要配置 腾讯云服务器外层安全组和自身的防火墙,将80端口开发。安全组设置参考官网文档 ,重点介绍一下开放防火墙指定端口:

// 查看防火墙设置
firewall-cmd --state
// 如果没有开启,就开启
systemctl start firewalld.service
// 设置开机自启
systemctl enable firewalld.service
//永久设置开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
// 查看哪些端口是开启状态
firewall-cmd --list-port

这样端口开放后,就可以通过 访问 http://{my-IP}:80访问项目(如果没有对前面的项目URL映射,访问的应该是Tomcat的页面)。

1.2.3 安装MySQL8

参考之前的帖子

1.2.4 安装 redis-5.0.5

参考 长沙大鹏 -Linux安装部署Redis(超级详细),关键命令如下:

各个版本的下载地址

wget https://download.redis.io/releases/redis-5.0.2.tar.gz
// 安装依赖
yum install -y gcc-c++
mkdir /usr/local/redis
tar -zxvf redis-5.0.2.tar.gz -C /usr/local/redis
cd /usr/local/redis/redis-5.0.2
//编译
make
//安装
cd ../
mkdir {bin,etc,data}
cd redis-5.0.2/src
make PREFIX=/usr/local/redis install //结果安装的redis程序保存/usr/local/redis/bin中
cp /usr/local/redis/redis-5.0.2/redis.conf /usr/local/redis/etc/ // 修改 redis.conf,具体可以参考 https://www.cnblogs.com/hunanzp/p/12304622.html
vi redis.conf
///////主要是修改以下内容
daemonize yes //1.可以后台运行
supervised systemd //2.这样后面可以用 systemctl 控制
# bind 127.0.0.1 ::1
protected-mode no //3.这两行保证 可以从外网访问redis
requirepass 1234567 //4.自行设置是否需要设置密码,默认是注释掉的
logfile "/usr/local/redis/redis_6379.log" //5.redis日志保存文件,需要自己手动创建 touch /usr/local/redis/redis_6379.log //开启redis
bin/redis-server etc/redis.conf
lsof -i:6379
//关闭redis
bin/redis-cli -a your-password shutdown

2.SpringBoot打成 WAR包

SpringBoot版本:2.2.1

2.1 Jar包不成功

本来 SpringBoot 自带 Tomcat,直接打成 jar包就可以运行了。但是不知为何,我运行之后出现问题:一直报错:显示端口被占用


为此我在 StackOverflow上提问 。似乎是作者之一回答让我更新到2.2.7版本,看是否能解决,因为之前的版本似乎有这方面的bug。我试过,结果打包之后直接 Tomcat无法运行,郁闷了一下午。最后尝试不用内置的,而使用独立的Tomcat来运行,这样出什么问题,在日志上都能显示出来,而不像一个黑盒子。

2.2 war包部署

参考SpringBoot学习日记-部署与监控Spring Boot 2 实战:以 War 包的形式部署

1.修改 pom文件

<!--1. 显式声明打 war包,如果之前没写,默认应该是jar包-->
<packaging>war</packaging> <!--2. 排除内置的 Tomcat,关键是 provided,表面打包的时候不会带上-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency> <!--3. 打包时跳过 test,可加可不加-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>

2.将原来的 入口类 projectApplication.java 修改为继承 SpringBootServletInitializer 抽象类

原来的入口类:

public class MallApplication {
public static void main(String[] args) {
SpringApplication.run(MallApplication.class, args);
}
}

现在的入口类:

public class MallApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MallApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MallApplication.class, args);
}
}

然后在IDEA编辑器中 可以先 Build→Build Project ,然后使用Maven工具中 clean package 两个命令,直接获得 war包,然后上传到 Tomcat服务器中的 webapps。当Tomcat启动后,war包会自动解压成包。

2.3 文件映射

由于是独立的Tomcat的服务器,因此 application.properties 中的一些设置,比如 server.port,比如文件映射。但是可以在Tomcat server.xml 中可以如同前面映射项目名一样设置。参考spring boot更改tomcat的静态资源路径

<Context path="/images" docBase="/root/imooc_mall/images" reloadable="true" debug="0"/>

这样 http://{ip}:80/images 映射到 /root/imooc_mall/images

最后部署成功,访问 http://myIP/ 就可以访问部署的项目了,花了几天的时间终于成功部署了自己做的项目。

BTW :

后续的一些问题亟待解决:

  1. 生成付款二维码图片保存在/root/imooc_mall下面了;
  2. 商品上传的图片也不在指定的位置;
  3. 前端出现了问题,但是前端好像是webpack React,比较难办;
  4. 之前后端的商品排序按照综合和价格没有起作用,后面要解决一下;
  5. 支付接口无法真正实现。

慕慕生鲜上线&&腾讯云服务器配置准备的更多相关文章

  1. 腾讯云服务器配置node环境

    1:更新现有包 sudo apt-get update 2:安装依赖 sudo apt-get install vim openssl build-essential libssl-dev wget ...

  2. 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程

    1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...

  3. 腾讯云分布式高可靠消息队列服务CMQ架构

    在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值 ...

  4. 腾讯云+校园扶持计划是bug还是福利

    前言   上午突然收到好友的微信消息.打开一看是关于关腾讯云"云+校园扶持计划".仔细看下了意思就是用户可以花360大洋购买腾讯云服务器配置为1核2G,1M带宽的服务器3年.(腾讯 ...

  5. 【腾讯云服务器】基于centos7搭建ftp服务器(vsftpd)

    该博客分为三部分设置,1.ftp服务器搭建.2.防火墙设置  3.腾讯云安全组 一.ftp服务器搭建 1.1  安装vsftpd yum install vsftpd -y 1.2 启动vsftpd服 ...

  6. 腾讯云分布式高可靠消息队列CMQ架构

    版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qclou ...

  7. 用腾讯云Gogs搭建私有git服务器

    前言 经常有需要写不能公开代码的项目,所以只好自己搭建一个私人的git服务器 Gogs的好处在于比Gitlib轻量化了好多,而且是国人写的,官方主页也是中文的 Gogs首页 腾讯云服务器配置: Ubu ...

  8. 腾讯云开放云压测“黑科技“,产品上线从此不再“压力山大"

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 能否解决"高并发"问题一直是检验一个产品后台是否稳定,架构是否合理,性能是否强大的核心标准.对于产品而言,多高的并发 ...

  9. 腾讯云申请的64位ubuntu服务器配置php环境

    腾讯云申请的64位ubuntu服务器配置php环境 一.首先还是安装Lamp组合 Linux+Apache+Mysql+php 直接命令 sudo apt-get install apache2 su ...

随机推荐

  1. 【Python从入门到精通】(九)Python中字符串的各种骚操作你已经烂熟于心了么?

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文将重点介绍Python字符串的各种常用方法,字符串是实际开发中经常用到的,所有熟练的掌握它的各种用法显得尤为重要. 干货满满,建议收藏,欢迎大 ...

  2. 资源:docker离线安装包下载路径

    docker安装包下载路径: docker所有版本:https://download.docker.com/linux/static/stable/

  3. 2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 海盗比酒量 结果填空

    ** 一.题目 ** 海盗比酒量 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐 ...

  4. Robotframework学习笔记之—Rrobotframework运行报错“command: pybot.bat --argumentfile”

    Rrobotframework运行报错"command: pybot.bat --argumentfile" 解决方案: 1.可能是缺失文件: 1.1.检查python安装目录下的 ...

  5. WPF项目升级sqlite-net-pcl时遇到Library e_sqlite3 not found的问题解决办法记录

    项目中为了方便的存储本地数据,使用了SQLite数据库作为数据存储,再设计时DB.models引用了sqlite-net-pcl,那么项目再升级sqlite-net-pc 1.7.335l版本后后,遇 ...

  6. C语言:if条件写法

    if 语句的判断条件中不是必须要包含关系运算符,它可以是赋值表达式,甚至也可以是一个变量,常量 例如: //情况① if(b){ //TODO: } //情况② if(b=5){ //情况① //TO ...

  7. C语言:标识符 关键字 保留字 表达式 语句

    标识符(Identifier)标识符就是程序员自己起的名字,符号常量(宏).变量名.函数名.宏名.结构体名等,它们都是标识符.遵守规范:C语言规定,标识符只能由字母(A~Z, a~z).数字(0~9) ...

  8. asp.net c# 保存图片到sql2008

    //图像数据表:tx//字段id (nvarchar(50) ,image(image)//tgav为图片ID,实质为上传前的主名 (省略了.jpg)private void kkkkk(byte[] ...

  9. [005] - JavaSE面试题(五):String类

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [005] - JavaSE面试题(五):String类 第1问:String.StringBuf ...

  10. UI自动化学习笔记- PO模型介绍和使用

    一.PO模型 1.PO介绍:page(页面) object(对象) 在自动化中,Selenium 自动化测试中有一个名字经常被提及 PageObject (思想与面向对象的特征相同),通常PO 模型可 ...