阿里云部署 JavaWeb 环境(全面优化更新原步骤)

一、环境、工具及版本

  • CentOS Linux 7.4.1708 (Core)
  • Amazon Corretto 11
  • MySQL 5.7.28 或 MySQL 8.0.18
  • Nginx 1.16.1

二、安装 JDK/JRE 参考步骤

1、yum 安装

(1)添加 yum 存储库

在该页面:https://docs.aws.amazon.com/zh_cn/corretto/latest/corretto-11-ug/downloads-list.html 选择适用的发行包,拷贝链接后,使用以下命令安装:

rpm -Uvh https://d3pxv6yz143wms.cloudfront.net/11.0.3.7.1/java-11-amazon-corretto-devel-11.0.3.7-1.x86_64.rpm

也可以下载到本地执行安装:

rpm -Uvh java-11-amazon-corretto-devel-11.0.3.7-1.x86_64.rpm

(2)开始安装

[root@iZ9vbe1cif1bx32Z ~]# yum install java

(3)输入命令:java -version,查看 JDK 是否安装成功,如果安装成功则显示版本号信息:

[root@iZ9vbe1cif1bx32Z ~]# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)

2、手动安装

(1)在 etc 下建立存放目录,可以用图形化工具建立,或者命令行:mkdir /etc/java

(2)在 etc 下使用命令:wget https://d3pxv6yz143wms.cloudfront.net/11.0.3.7.1/amazon-corretto-11.0.3.7.1-linux-x64.tar.gz,或将本地文件上传。

(3)在 etc 下执行命令:tar zxvf jdk-8u171-linux-x64.tar.gz -C /etc/java/

(4)解压完成后,修改 /etc/profile 文件,在末尾添加内容后保存:

#set java environment
export JAVA_HOME=/etc/java/amazon-corretto-11.0.3.7.1-linux-x64
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME:$PATH

附加内容:若安装 JDK 8,环境变量设置可改为:

#set java environment
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_171
export JRE_HOME=/usr/java/jdk/jdk1.8.0_171/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

(5)使用命令:source /etc/profile,让环境变量生效

(6)输入命令:java -version,查看 JDK 是否安装成功。

三、安装 tomcat 参考步骤(未更新)

1、在 etc 下建立存放目录,可以用图形化工具建立,或者命令行:mkdir /etc/tomcat

2、连接服务器,将本地的 apache-tomcat-7.0.88.tar.gz 上传

3、在 etc 下执行命令:tar zxvf apache-tomcat-7.0.88.tar.gz -C /etc/tomcat

4、进入 tomcat 目录的 bin,编辑 setclasspath.sh,在末尾添加内容后保存:

export JAVA_HOME=/etc/java/amazon-corretto-11.0.3.7.1-linux-x64
export JRE_HOME=/usr/java/jdk/jdk1.8.0_171/jre

注:若安装 JDK 8 以上版本,已经不再有 JRE,而且 tomcat 7 也并不支持新版本。

5、进入 tomcat 目录的 bin,输入 ./startup.sh 即可启动 tomcat,如果启动成功则显示以下信息:

[root@izwabcdefghijklh8jykfdz bin]# ./startup.sh
Using CATALINA_BASE:   /usr/java/tomcat/apache-tomcat-7.0.88
Using CATALINA_HOME:   /usr/java/tomcat/apache-tomcat-7.0.88
Using CATALINA_TMPDIR: /usr/java/tomcat/apache-tomcat-7.0.88/temp
Using JRE_HOME:        /usr/java/jdk/jdk1.8.0_171/jre
Using CLASSPATH:       /usr/java/tomcat/apache-tomcat-7.0.88/bin/bootstrap.jar:/usr/java/tomcat/apache-tomcat-7.0.88/bin/tomcat-juli.jar
Tomcat started.

6、在阿里云防火墙规则中开启 8080 端口。

7、此时在浏览器输入公网 IP 和端口号:xxx.xxx.xxx.xxx:8080,若显示 tomcat 主页就说明部署成功

四、安装 MySQL 参考步骤

采用官网介绍的安装方法,步骤如下。原文详见:A Quick Guide to Using the MySQL Yum Repository

1、查询并移除 CentOS 7 默认安装的 mariaDB,执行该步骤需要获得 root 权限:

[root@iZ9vbe1cif1bx32Z ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@iZ9vbe1cif1bx32Z ~]# yum -y remove mariadb-libs

2、添加 yum 存储库

在该页面:https://dev.mysql.com/downloads/repo/yum/ 选择适用的发行包,拷贝链接后,使用以下命令安装:

rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

也可以下载到本地执行安装:

rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

3、选择版本

在 yum 存储库中,不同版本的 MySQL Community Server 托管在不同的子存储库中。默认情况下启用最新版本(当前为 MySQL 8.0)的子存储库,而所有其他系列(例如,MySQL 5.7 系列)的子存储库均被禁用。使用以下命令可查看 yum 存储库中的所有子存储库,并查看已启用或禁用的子存储库:

[root@iZ9vbe1cif1bx32Z ~]# yum repolist all | grep mysql
mysql-cluster-7.5-community/x86_64 MySQL Cluster 7.5 Community   disabled
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - disabled
mysql-cluster-7.6-community/x86_64 MySQL Cluster 7.6 Community   disabled
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - disabled
mysql-cluster-8.0-community/x86_64 MySQL Cluster 8.0 Community   disabled
mysql-cluster-8.0-community-source MySQL Cluster 8.0 Community - disabled
mysql-connectors-community/x86_64  MySQL Connectors Community    enabled:    128
mysql-connectors-community-source  MySQL Connectors Community -  disabled
mysql-tools-community/x86_64       MySQL Tools Community         enabled:    100
mysql-tools-community-source       MySQL Tools Community - Sourc disabled
mysql-tools-preview/x86_64         MySQL Tools Preview           disabled
mysql-tools-preview-source         MySQL Tools Preview - Source  disabled
mysql55-community/x86_64           MySQL 5.5 Community Server    disabled
mysql55-community-source           MySQL 5.5 Community Server -  disabled
mysql56-community/x86_64           MySQL 5.6 Community Server    disabled
mysql56-community-source           MySQL 5.6 Community Server -  disabled
mysql57-community/x86_64           MySQL 5.7 Community Server    disabled
mysql57-community-source           MySQL 5.7 Community Server -  disabled
mysql80-community/x86_64           MySQL 8.0 Community Server    enabled:    145
mysql80-community-source           MySQL 8.0 Community Server -  disabled

若安装最新版本则无需进行配置。要安装旧版本,例如 MySQL 5.7 系列,需禁用最新版本的子存储库并启用旧版本子存储库。以下命令禁用 8.0 系列的子存储库并启用 5.7 系列的子存储库:

[root@iZ9vbe1cif1bx32Z ~]# yum-config-manager --disable mysql80-community
[root@iZ9vbe1cif1bx32Z ~]# yum-config-manager --enable mysql57-community

注意:

  • 若提示找不到 yum-config-manager 命令,安装即可:yum -y install yum-utils
  • 应该随时只为一个系列启用子存储库。如果启用了多个系列的子存储库,那么 yum 将使用最新的系列

通过以下命令,验证是否已启用正确的子存储库:

[root@iZ9vbe1cif1bx32Z ~]# yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community                 128
mysql-tools-community/x86_64      MySQL Tools Community                      100
mysql57-community/x86_64          MySQL 5.7 Community Server                 384

4、开始安装

通过以下命令安装 MySQL 服务器的软件包以及其他必需的软件包:

[root@iZ9vbe1cif1bx32Z ~]# yum install mysql-community-server

5、启动 MySQL 服务

[root@iZ9vbe1cif1bx32Z ~]# service mysqld start

6、检查状态

使用命令 service mysqld status,出现以下提示说明服务正常运行(MySQL 5.7 和 8.0 的显示结果基本相同)。

[root@iZ9vbe1cif1bx32Z ~]# service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-28 17:53:00 CST; 3h 25min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 3731 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 3681 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 3735 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─3735 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mys...

Oct 28 17:52:56 iZ9vbe1cif1bx32Z systemd[1]: Starting MySQL Server...
Oct 28 17:53:00 iZ9vbe1cif1bx32Z systemd[1]: Started MySQL Server.

7、查看初始临时密码

[root@iZ9vbe1cif1bx32Z ~]# grep 'temporary password' /var/log/mysqld.log

8、使用生成的临时密码登录

[root@iZ9vbe1cif1bx32Z ~]# mysql -uroot -p

9、尽快为超级用户帐户设置自定义密码

mysql> alter user 'root'@'localhost' identified by 'MyNewPass4!';

注意:MySQL 的 validate_password 插件默认安装。要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且密码总长度至少为 8 个字符。

五、MySQL 通用及专有设置

1、用户控制及授权

(1)创建用户 test 并设置密码

mysql> create user test identified by '123aI~A!';

注:可不进入 user 表执行该语句

(2)查看用户 test 的权限(没有分配前,无权限):

mysql> show grants for 'test'@'%';
+----------------------------------+
| Grants for test@%                |
+----------------------------------+
| GRANT USAGE ON *.* TO 'test'@'%' |
+----------------------------------+
1 row in set (0.00 sec)

(3)给用户 test 在 database 数据库中对的所有表授权,如:EXECUTE(执行存储过程),INSERT,SELECT,UPDATE 权限,'%' 表示来自任意 IP 的访问:

grant execute,insert,select,update on database.* to 'test'@'%';

常用权限有以下几种:

  • all privileges,所有权限
  • select,读取权限
  • delete,删除权限
  • update,更新权限
  • create,创建权限
  • drop,删除数据库、数据表权限

(4)刷新权限

flush privileges;

(5)删除用户

drop user test@'%';

注:可不进入 user 表执行该语句

(6)查看所有用户信息(8.0 版本显示结果稍有不同)

mysql> select user, host, authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *ACE4C05F67A275C00548651B22A066C15B2AB728 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| test          | %         | *112D65D910D5E3AFCD5624275229F2C0F1B5ADE4 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

2、重置密码

(1)定位 /etc/my.cnf,在 my.cnf 文件 [mysqld] 下添加 skip-grant-tables 字符串,开启免密码登陆

(2)执行 service mysqld restart,重启服务,使配置生效

(3)执行 mysql -u root -p,无需键入内容,直接回车即可登录

(4)清空密码

update mysql.user set authentication_string='' where user='root';

(5)将 skip-grant-tables 字符串删除,执行 service mysqld restart,重启服务,使配置生效

(6)执行 mysql -u root -p,无需键入内容,直接回车即可登录

(7)执行 alter user 'root'@'localhost' identified by 'MyNewPass4!'; 重新设置密码

3、移除 MySQL

(1)停止服务:service mysqld stop

(2)执行 rpm -qa | grep -i mysql 查看 MySQL 组件:

[root@iZ9vbe1cif1bx32Z ~]# rpm -qa | grep -i mysql
mysql-community-libs-5.7.28-1.el7.x86_64
mysql80-community-release-el7-3.noarch
mysql-community-common-5.7.28-1.el7.x86_64
mysql-community-client-5.7.28-1.el7.x86_64
mysql-community-server-5.7.28-1.el7.x86_64

(3)组件彼此之间有依赖关系,按顺序逐项执行移除

rpm -ev mysql-community-server-5.7.28-1.el7.x86_64
rpm -ev mysql-community-client-5.7.28-1.el7.x86_64
rpm -ev mysql-community-libs-5.7.28-1.el7.x86_64
rpm -ev mysql-community-common-5.7.28-1.el7.x86_64
rpm -ev mysql80-community-release-el7-3.noarch

(4)删除相关目录。执行 find / -name mysql(查找) 和 rm -rf xxx(删除) 逐项执行移除完全为止。可能包含的目录如下:

[root@iZ9vbe1cif1bx32Z ~]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/share/mysql

4、MySQL 8 使用简单密码

MySQL 8 默认不能输入全数字的简单密码,需要进行如下设置:

mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=1;

5、MySQL 8 开启外部第三方客户端连接权限

MySQL 8.0 采用了caching_sha2_password 加密,是 sha256 的改进版加密方式,多数第三方客户端都不支持这种加密方式,自带的命令行可支持。具体可参看 官方文档 有关该内容说明。要解决该问题,需要修改加密方式。以 root 用户为例,如果要配置其他用户或授权 IP,对应修改名称和地址即可。

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MyNewPass4!';

六、安装 nginx 参考步骤

1、yum 安装(配置文件,稳定版)

采用官网介绍的安装方法,步骤如下。原文详见:Installation instructions

(1)新建配置文件 /etc/yum.repos.d/nginx.repo,内容如下:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

(2)配置中 enabled=1,因此默认安装稳定版,直接执行 yum install nginx 即可

(3)启动服务:systemctl start nginx.service

其他常用命令行:

  • 停止服务:systemctl stop nginx.service
  • 重启服务:systemctl restart nginx.service
  • 开机启动服务:systemctl enable nginx.service
  • 全局配置文件路径:/etc/nginx/nginx.conf
  • 网站文件存放路径:/usr/share/nginx/html
  • 网站默认站点配置文件路径:/etc/nginx/conf.d/default.conf
  • 自定义 Nginx 站点配置文件存放路径:/etc/nginx/conf.d/
  • 查看服务器私有 IP:ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
  • 卸载:yum remove nginx,之后可用 which nginx 确认是否卸载情况

2、yum 安装(手动,稳定版)

(1)在该页面:http://nginx.org/packages/centos/7/x86_64/RPMS/ 选择适用的发行包,拷贝链接后,使用以下命令安装:

rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.1-1.el7.ngx.x86_64.rpm

也可以下载到本地执行安装:

rpm -Uvh nginx-1.16.1-1.el7.ngx.x86_64.rpm

(2)执行 yum install nginx 即可

(3)启动服务:systemctl start nginx.service

3、编译安装

nginx 中 gzip 模块需要 zlib 库,rewrite 模块需要 pcre 库,ssl 功能需要 openssl 库。以 /usr/mix 安装目录为例:

  • 建立 mix 目录
$ mkdir mix
  • 安装 GCC 和 GCC-C++
$ yum install gcc
$ yum install gcc-c++

注意:
若未安装 GCC,安装 Nginx 会报如下错误:

./configure: error: C compiler cc is not found

若未安装GCC-C++,安装 PCRE 库时报如下错误:

configure: error: You need a C++ compiler for C++ support.
  • 编译安装 PCRE 库
$ cd /usr/
$ wget https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8.43.tar.gz
$ tar -zxvf pcre-8.43.tar.gz -C /usr/mix/
$ cd mix/pcre-8.43
$ ./configure
$ make && make install

注意:这里使用 pcre 而不用 pcre2

  • 编译安装 zlib 库
$ cd /usr/
$ wget http://www.zlib.net/zlib-1.2.11.tar.gz
$ tar -zxvf zlib-1.2.11.tar.gz -C /usr/mix/
$ cd mix/zlib-1.2.11
$ ./configure
$ make && make install
  • 编译安装 openssl
$ cd /usr/
$ wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
$ tar -zxvf openssl-1.0.2r.tar.gz -C /usr/mix/
$ cd mix/openssl-1.0.2r
$ ./config
$ make && make install
  • 编译安装 nginx,并添加 PCRE、zlib 、openssl 的源码路径
$ cd /usr/
$ wget http://nginx.org/download/nginx-1.16.0.tar.gz
$ tar -zxvf nginx-1.16.0.tar.gz -C /usr/mix/
$ cd mix/nginx-1.16.0
$ ./configure --prefix=/usr/mix/nginx --with-pcre=/usr/mix/pcre-8.43 --with-zlib=/usr/mix/zlib-1.2.11 --with-openssl=/usr/mix/openssl-1.0.2r
$ make && make install
  • 启动 Nginx,默认端口为 80
$ ./usr/mix/nginx/sbin/nginx
  • 查看工作情况
$ ps -ef | grep nginx
  • 其他命令
./sbin/nginx -s reload            # 重新载入配置文件
./sbin/nginx -s reopen            # 重启 Nginx
./sbin/nginx -s stop              # 停止 Nginx

4、nginx 设置反向代理后,页面上的 js css 文件无法加载

可添加如下配置:

location ~ .*\.(js|css)$ {
    proxy_pass http://127.0.0.1:8866;
}

完整示例:

listen 80;
server_name www.test.com;

location /{
    proxy_pass http://xxx.xxx.xxx.xxx:9002;
    index index.html;
    proxy_redirect off;
    proxy_set_header  Host  $host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
}

location ~ .*\.(js|css)$ {
    proxy_pass http://xxx.xxx.xxx.xxx:9002;
}

七、部署过程中的其他问题

1、解压 filename.tar.xz 文件

使用命令:tar -xvf filename.tar.xz

2、在 linux 服务器运行 jar 文件

通常的方法是:

$ java -jar test.jar

但是这种方式在 SSH 窗口关闭时程序将中止运行,或者是运行时没法切出去执行其他任务,有没有办法让 jar 在后台运行。要解决这个问题,可以使用:

$ nohup java -jar test.jar &

即不挂断运行命令,账户退出或终端关闭时,程序仍然运行。当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到 nohup.out 的文件中,除非另外指定了输出文件。例如:

$ nohup java -jar test.jar >temp.txt &

此时把日志文件输入到指定的文件中,没有则会自动创建。

附加内容:两种报错的解决

▲ 提示 nohup: failed to run commandjava': No such file or directory`

▲ 或者使用 ./startup.sh 开启 tomcat 服务报错:

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

以上情况,执行一次 source /etc/profile 即可。

3、linux kill 命令

格式:kill [参数] [进程号]

4、linux 查询端口情况

netstat 命令各个参数说明如下:

-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作)

要显示当前服务器上所有端口及进程服务,与 grep 结合可查看某个具体端口及服务情况:

netstat -ntlp   //查看当前所有tcp端口
netstat -ntulp |grep 80   //查看所有80端口使用情况
netstat -ntulp | grep 3306   //查看所有3306端口使用情况

查询出来的结果,根据 ID 号可以用 kill 命令终止后台运行的任务。

5、jobs 命令:

查看当前终端后台运行的任务。jobs 的状态可以是 running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。

注:该命令可在使用 nohup 后紧接使用。

你可能感兴趣的:(阿里云部署 JavaWeb 环境(全面优化更新原步骤))