从搭建ECS云服务器到springboot项目部署

一.准备阶段
1.购买云服务器
可以双十一购买,新用户比较便宜,86元一年,1核2G,自己学习搭建网站应该够用了,因为续费比较贵,我是直接买了3年,也就200多元

从搭建ECS云服务器到springboot项目部署_第1张图片2.创建云服务器实例

2-1购买完成后,进入控制台,依次选择侧边栏的“云服务器ECS”、“实例”、“创建实例”,在创建过程中会设置密码,过程如图2。
2-2创建完成之后,如下图,这里的公网IP很关键,通过ssh登录、通过ftp上传文件和网站的访问,以及MySQL,Redis远程连接工具都要通过这个公网IP。
从搭建ECS云服务器到springboot项目部署_第2张图片
3.登录阿里云服务器

windows下推荐使用xshell通过ssh登录,mac下推荐使用finalshell,
我是用的finalshell远程登录,过程如图3。
从搭建ECS云服务器到springboot项目部署_第3张图片二.搭建springboot运行环境
1.安装JDK并配置环境变量

①进入Java8下载页面获取下载链接,目标是下载红色圈出来的Linux x64版本,如下图4。
这里划个重点,这个问题卡了我好久。我参考的一篇博客提到,直接点击右键“复制链接地址”,然后用"sudo wget"命令,即可下载。但这样做会导致后面解压失败,因为文件没有完全下载,文件大小只有几k;
怎么做呢?直接点击下载链接,Chrome会开始下载,在Chrome下载页面中再点击右键“复制链接地址”,如图5。
从搭建ECS云服务器到springboot项目部署_第4张图片
从搭建ECS云服务器到springboot项目部署_第5张图片②终端执行下载命令
我是下载到"/root/sdk"的路径下,当然你也可以再本地浏览器下载,再通过finalshell上传本地文件

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

③终端执行解压命令
我是解压到"/root/sdk"的路径下
从搭建ECS云服务器到springboot项目部署_第6张图片④配置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

在文件最下面添加如下内容,按I进入插入模式,写入后,按esc,按:输入wq
我印象中好像放在别的地方配置无效。
从搭建ECS云服务器到springboot项目部署_第7张图片执行如下命令,使配置生效:

source /etc/profile

⑤验证安装

java -version

若如下图,则安装成功
在这里插入图片描述
2.安装MySQL和配置远程服务
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads

从搭建ECS云服务器到springboot项目部署_第8张图片
解压

tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 

从搭建ECS云服务器到springboot项目部署_第9张图片
再移动并重命名一下

mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql

从搭建ECS云服务器到springboot项目部署_第10张图片
创建mysql用户组和用户并修改权限

groupadd mysql
useradd -r -g mysql mysql

创建数据目录并赋予权限

mkdir -p  /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #赋予权限

从搭建ECS云服务器到springboot项目部署_第11张图片
配置my.cnf

vim /etc/my.cnf

内容如下

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

从搭建ECS云服务器到springboot项目部署_第12张图片
如果想要进一步研究下MySQL配置,请参看这篇文章,linux下mysql5.7以上my.cnf配置文件配置:链接:https://www.cnblogs.com/gne-hwz/p/10220179.html

初始化数据库

进入mysql的bin目录

cd /usr/local/mysql/bin/

初始化

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

查看密码

cat /data/mysql/mysql.err

在这里插入图片描述

启动mysql,并更改root 密码

先将mysql.server放置到/etc/init.d/mysql中

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

启动MySQL服务!!!

service mysql start

从搭建ECS云服务器到springboot项目部署_第13张图片
会报如下错误
mysql启动报错:

1.Starting MySQL.171106 00:55:53 mysqld_safe error: log-error set to ‘/usr/local/mysql/log/mysqld.log’, however file don’t exists. Create writable for user ‘mysql’.

解决:
mkdir /usr/local/log
touch /usr/local/mysql/log/mysqld.log

2.log-error set to ‘/var/log/mariadb/mariadb.log’, however file don’t exists. Create writable for user ‘mysql’.

解决:去看的时候发现并没有/var/log/mariadb/mariadb.log这个路径,那我们就创建, 并给mysql用户授权即可

mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log

chown -R mysql:mysql /var/log/mariadb/

再输入开启mysql服务, 搞定!

查看MySQL进程

ps -ef|grep mysql

从搭建ECS云服务器到springboot项目部署_第14张图片
到这里说明mysql已经安装成功了!!

下面修改密码

首先登录mysql,前面的那个是随机生成的。

./mysql -u root -p   #bin目录下

从搭建ECS云服务器到springboot项目部署_第15张图片
再执行下面三步操作,然后重新登录。

    SET PASSWORD = PASSWORD('123456');
    ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
    FLUSH PRIVILEGES;                                 

从搭建ECS云服务器到springboot项目部署_第16张图片
这时候你如果使用远程连接……你会发现你无法连接。
从搭建ECS云服务器到springboot项目部署_第17张图片
这里主要执行下面三个命令(先登录数据库)

use mysql                                  #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES;                               #刷新

从搭建ECS云服务器到springboot项目部署_第18张图片
从搭建ECS云服务器到springboot项目部署_第19张图片
ok!!!!MySQL5.7就装好了

如果不希望每次都到bin目录下使用mysql命令则执行以下命令

ln -s  /usr/local/mysql/bin/mysql    /usr/bin

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.注释绑定的本机地址
从搭建ECS云服务器到springboot项目部署_第20张图片
b.设置redis-service为后台服务
将"daemonize no"改为"daemonize yes"
从搭建ECS云服务器到springboot项目部署_第21张图片

c.设置redis-cli连接redis服务器的密码
手动输入"requirepass [your password]"(注意这里的中括号只是输入内容的标志)
从搭建ECS云服务器到springboot项目部署_第22张图片
d.退出保存
e.启动redis服务器(一定要在redis目录下)
以刚刚的配置启动redis服务器

redis-server redis.conf

f.可能会报以下错误
在这里插入图片描述经过调试发现,我原来省略了第六步,我以为执行到Make命令,编译就可以了,不需要执行Make install命令,我以为Make install命令的作用就是拷贝redis的相关文件到/usr/local/bin这个目录下,原来不是,如果不执行,redis-server redis.conf 这个命令是不会执行的。
第六步:回到/root/software/download/redis/redis-4.0.6/src目录下,执行Make Install命令,完成所有的安装。
解决:

[root@linux~]# cd software/download/redis/resis-4.0.6/src
[root@linux src]# make install
          //开始安装
          //。。。。
          //安装完成

g.再次启动

redis-server redis.conf

并查看进程

ps -ef | grep redis

若如下图所示,则配置远程访问成功。
在这里插入图片描述
切记,要在阿里云添加安全组规则,不论是上面提到的MySQL,Redis还是下面准备提到的Tomcat都要在阿里云添加安全组规则,否则无法远程连接。以下图的格式添加。
从搭建ECS云服务器到springboot项目部署_第23张图片
从搭建ECS云服务器到springboot项目部署_第24张图片
提到安全组规则,有必要提一下端口号的作用,这样一解释,想必小伙伴们就通俗易懂多了。
从搭建ECS云服务器到springboot项目部署_第25张图片

4.安装Tomcat(springboot项目0可以不用安装)

①进入Tomcat下载页面,点击右键“复制链接地址”
从搭建ECS云服务器到springboot项目部署_第26张图片

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

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

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

tar -xzvf apache-tomcat-9.0.29.tar.gz

然后移动到("/usr/local/tomcat)文件夹下,看个人喜好,我基本Redis,Tomcat,MySQL,Nginx都放在这个文件夹下

mv apache-tomcat-9.0.29 /usr/local/tomcat

从搭建ECS云服务器到springboot项目部署_第27张图片
④配置(使用默认配置)
⑤启动
进入安装路径,切换到Tomcat的bin路径下(根据你的安装情况):
从搭建ECS云服务器到springboot项目部署_第28张图片
执行以下命令:

sh startup.sh

在这里插入图片描述
⑥验证
浏览器输入[your IP]:8080。默认跳转到Apache Tomcat官网

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

从搭建ECS云服务器到springboot项目部署_第29张图片1.下载相关依赖(我的是centos系统)
1.gcc安装

安装nginx需要将官网的源码下载进行编译,编译依赖gcc环境,没有的话需要安装gcc

yum -y install gcc-c++

2.PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum -y install pcre pcre-devel
  1. zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库,命令:

yum -y install zlib zlib-devel

4.OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库,命令:

yum -y install openssl openssl-devel

到此为止,准备工作已经就绪,现在开始下载安装nginx======

5.使用wget命令下载:

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

有时因为系统没有安装wget,可以先安装wget:yum -y install wget,然后在下载
6. 或者自己取官网下载 Nginx Linux版本官方下载地址

http://nginx.org/download/

7.将下载好的nginx 压缩包解压在非 /usr/local 目录,然后进入nginx 目录下 (一定要解压在非 /usr/local 目录,不然会报错,因为默认编译安装也是在/usr/local 目录下,会导致文件名重复)

./configure

make && make install

8.添加全局命令

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

9.测试安装

nginx -V

从搭建ECS云服务器到springboot项目部署_第30张图片

10.第一次启动:

在nginx安装目录下的sbin目录下执行:

./nginx -c /usr/local/nginx/conf/nginx.conf

其中/usr/local/nginx/conf/nginx.conf是你自己的nginx.conf路径。

11.验证服务是否启动成功

 ps -ef |grep nginx

从搭建ECS云服务器到springboot项目部署_第31张图片访问
在浏览器中输入IP:端口号(默认80),出现如下图所示,说明安装成功。
从搭建ECS云服务器到springboot项目部署_第32张图片12.“server_name"后面写你申请的域名,没有可以写云服务器的IP,当你输入IP的时候,Nginx就会反向代理到"http://127.0.0.1:8080"上,这正是本机的Tomcat。
到此,折腾我很久的配置环节就结束了。最后,一定要记得在阿里云增加安全组规则,方法在配置redis的时候已经提到了,只是端口范围不同而已,例如MySQL就写"3306/3306”,Tomcat就写"8080/8080",Nginx就写80/80。最终的安全组规则列表如下图
从搭建ECS云服务器到springboot项目部署_第33张图片
从搭建ECS云服务器到springboot项目部署_第34张图片
加了中文注解的nginx.conf

user www www;
# 工作进程个数,可配置多个
worker_processes auto;

error_log /data/wwwlogs/error_nginx.log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;

events {
  use epoll;
  # 单个进程最大连接数
  worker_connections 51200;
  multi_accept on;
}

http {
  include mime.types;
  default_type application/octet-stream;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 1024m;
  client_body_buffer_size 10m;
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 120;
  server_tokens off;
  tcp_nodelay on;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors on;

  #Gzip Compression
  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_proxied any;
  gzip_vary on;
  gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
  open_file_cache max=1000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;

######################## default ############################
  # 服务器集群名称  和下面的location地址对应
  upstream myServer {
    # weigth参数表示权值,权值越高被分配到的几率越大
    # server 127.0.0.1:8080 weight=1;
    # server 127.0.0.1:8060 weight=1;
    server 47.93.10.184:8080;
    server 47.93.10.184:8081;

  }

  # 每一个server相当于一个代理服务器
  server {
  # 监听端口,默认80
  listen 8848;
  # 当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)  www.kolbe.cn
  server_name localhost;
  #server_name _;
  access_log /data/wwwlogs/access_nginx.log combined;
  root /data/wwwroot/default;
  # 当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
  index index.html index.htm index.php;
  # 表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
  location / {
      # 请求转向自定义的服务器列表
      proxy_pass http://myServer;
  }
  location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
    }
  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
    }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
  location ~ /\.ht {
    deny all;
    }
  }

########################## vhost #############################
  include vhost/*.conf;
}

三.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。展示如下:
从搭建ECS云服务器到springboot项目部署_第35张图片

六.结语

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

你可能感兴趣的:(服务器的部署搭建)