为了进行部署,把写好的 java web 程序放到 Linux 上,需要先把对应的依赖的软件 (环境) 搭建好,安装一些必要的软件程序
- JDK
- Tomcat
- MySqL
jdk 直接使用包管理器进行安装(基于yum安装)
一、yum
1、认识 yum
yum (Yellow dog Updater, Modified) 是 Linux 下非常常用的一种包管理器,主要应用在 Fedora, RedHat, Centos等发行版上,包管理器就好比 “应用商店”,我们可以在应用商店上下载一些 app
yum 起到的功能和 Maven 的依赖管理功能类似,使用 Maven 能帮我们方便的安装一些第三方 jar 包,而 yum 方便我们方便的安装第三方程序
类似地,Github 也能起到 “软件仓库” 的效果,而且确实有些编程语言的包管理工具就是基于 Github (例如 Go 语言)。只不过,Github 不光能用于分发程序,也能管理源码并进行协同开发,而 yum 和 maven 都是仅用于分发程序
查看软件包列表:
yum list | grep [软件包关键字]
yum list 本身是列出所有的可以安装的包,太多了,使用 grep 筛选一下包含 jdk 关键字的结果,否则罗列的内容会非常多, 导致机器很卡
管道:管道是一种古老的 “进程间通信” 方式,在 Linux 指令中可以使用 |
作为管道标记。意思是将前一个指令标准输出的内容,作为第二个指令的标准输入内容
安装软件包(需要管理员权限):
yum install [软件包名字]
卸载软件包(需要管理员权限):
yum remove [软件包名字]
注意事项:
- yum 所有的命令必须保证网络是联通情况下,才能使用(云服务器一般网络都是良好的)
- yum install / yum remove 必须具备管理员权限 (root 用户)
- 可以使用 ping www.baidu.com 来检测网络的畅通情况
2、git
1). 查看 git 安装包
# 由于带 git 关键字的软件包很多, 可以在 grep 的时候加上 -w , 表示全字匹配.
yum list | grep git -w
2). 安装 git
yum install git.x86_64
3). git 的基本使用(和 Windows 版本的 git 是一致的. 只是使用命令行操作)
git clone
git add
git commit
git push
JDK
yum install java-1.8.0-openjdk-devel.x86_64
——使用 yum 筛选:devel: development。64 位系统版本。.i686 是 32 位的
——复制包名,yum install 包名。是否进行安装,输入 y
——使用 javac
,或 java -version
验证是否安装成功,如果提示 “java 命令找不到” 则说明安装失败
注意: yum 上的 JDK 是 OpenJDK,是一个开源版本的 JDK,和 Oracle 官方的 JDK 略有差别,此处我们就使用 OpenJDK 即可。安装 Oracle JDK 比较麻烦
Tomcat
1、安装
由于 yum 源上默认的 Tomcat 7 版本比较旧,所以 Tomcat 8 需要手动安装,不能使用 yum
noarch 意思是不挑系统 (基于 java 跨平台)
1). 下载 Tomcat 压缩包
Tomcat 与 maven 的安装与使用
2). 将压缩包上传到 Linux
将 .zip 直接拖拽到 xshell 中,如果不成功,需要 yum install lrzsz
,拖拽上传,其实使用到了 Linux 上的 rz 命令,这个命令有的系统自带,有的不自带,需要手动装
2). 解压缩 Tomcat
# 使用 unzip 命令解压缩
unzip apache-tomcat-8.5.47.zip
如果 unzip 命令找不到, 则先 yum install unzip
即可
2、修改可执行权限
进入 bin 目录,使用 chmod +x *.sh
,将所有 .sh
后缀的文件赋予可执行权限
chmod +x *.sh
3、启动 Tomcat
sh startup.sh
Tomcat 的目录结构
Linux 的 Tomcat 目录结构和 Windows 完全一致. (就是同一个 zip 包解压缩出来的)
4、验证启动成功
方法 1: 查看 tomcat 进程是否存在
ps aux | grep tomcat
方法 2: 查看端口 8080 是否被绑定
netstat -anp | grep 8080
方法 3: 使用 curl 命令访问默认 demo
curl 127.0.0.1:8080
如果进程存在或者端口状态正确 (LISTEN 状态) 或者能够访问到默认主页,说明启动成功
外网访问 tomcat 默认 demo
在浏览器地址栏中
http://[服务器外网ip]:8080/
4.1、防火墙
如果出现无法访问此网站,原因:
- 服务器没有正常启动——netstat 验证
- 服务器的防火墙 / 安全组,没有正确打开
云服务器厂商为了机器的安全,引入安全机制,默认情况下只有你这个机器的 22 端口 (ssh )是可以对外访问的,要想让其它端口也能被外面访问,就需要手动放开
在外网访问这个页面之前需要先开启服务器的 “安全组” 功能
登陆自己的云服务账户, 在主页中找到 控制台 -> 自己的服务器 -> 安全组
需要配置安全组, 允许外部主机访问服务器的 8080 端口
安全组配置界面如果找不到,可以随时咨询云服务器客服
轻量应用服务器:防火墙。ECS 服务器:安全组
可看到默认的页面:
5、修改端口号
如果启动不成功,cd logs/
在 logs 目录下查看日志信息,用 vim 去看这些日志中的内容,从大的文件开始看
例:日志中说明 8005 被占用,而 Tomcat 启动需要 8080 和 8005
所以我们查看 8005 被谁占用了 netstat -anp | grep 8005
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1700/java
此条信息说明,8005 被名为 java ,id 为 1700 的进程占用了
使用 ps -aux | grep 1700
查看具体的信息
解决方法:
- 将 1700 干掉
- 将 8005 端口号改成别的(推荐),修改方法如下:
1). 切换至 conf 目录,放的是配置文件
2). grep 8005
,看看这个端口号是在哪里写的,
3). vim server.xml
,修改成没有被使用的端口号
MySQL
1、安装
MySQL 同样也可以使用 yum 安装. 但是要修改一些配置参考文章:CentOS 7 通过 yum 安装 MariaDB
注意:创建数据库时为了支持中文,统一使用 utf8mb4 字符集
MariaDB [(none)]> create database demo_db charset utf8mb4;
yum 上的是 MariaDB,和纯正的 MySQL 还不太一样
MariaDB 和 MySQL 的关系,类似于 CentOS 和 RedHat 关系,从使用角度上, MariaDB 和 MySQL 之间都是兼容的
2、使用
修改 MySQL 登录密码:
mysql_secure_installation
回车,输入新密码,再次输入新密码,四次 y 确认修改密码
命令行登录使用默认 3306 端口的MySQL:
mysql -uroot -p
3、验证
使用 netstat -anp
命令来显示所有的网络信息,使用 grep 筛选出 mysql 相关的内容,
mysql 服务器;d => daemon,守护进程的意思 (后台进程);端口号:3306
退出 MySQL: Ctrl + d
在数据库运行过程中出现问题, 可以查看 MySQL 的错误日志.
在 MySQL 中通过这个命令, 获取到日志的路径
mysql> show variables like 'log_error';
# 输出结果
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| log_error | /var/log/mariadb/mariadb.log |
+---------------+------------------------------+
使用 vim 或 less 查看该文件内容即可
less /var/log/mariadb/mariadb.log
MySQL 中除了错误日志, 还有很多其他类型的日志. 详细可以参考
https://www.cnblogs.com/f-ck-need-u/p/9001061.html
4、修改编码方式
查看当前编码方式:
show variables like 'character%';
进入 etc 目录修改 my.cnf 文件(win 中是 my.ini,Linux 是 my.cnf)
cd /etc
ll
vim my.cnf
在 [client] 下加:
[client]
default-character-set=utf8
在 [mysqld] 最下面加:
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
重启 MySQL 服务:
service mysqld restart
部署 Web 项目到 Linux
部署
工作中涉及到的 “环境”
- 开发环境: 程序猿写代码用的机器.
- 测试环境: 测试人员测试程序使用的机器. 一般是退役的部署机器.
- 生产环境 (线上环境): 最终项目发布时所使用的机器. 对稳定性要求很高
把程序拷贝安装到生产环境上, 这个过程称为 “部署”,也叫 “上线”
这个过程需要拷贝对应的 .class 文件和依赖的资源文件 (各种配置文件,html等)
一旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到
换句话说,如果程序有 BUG,这个 BUG 也就被千千万万的用户看到了
部署过程至关重要,属于程序开发中最重要的一环,一旦部署出现问题,极有可能导致严重的事故 (服务器不可用之类的)
为了防止部署出错,一般公司内部都有一些自动化部署工具 (如 Jenkins 等),当前我们先使用手工部署的方式来完成部署
1、数据库建表
在云服务器的 mysql 中,建库建表
输入密码连接数据库,创建数据库,将项目 db.sql 的代码复制到云服务器的数据库中
create databases java_blog charset utf8mb4; --记得字符集
use java_blog;
2、微调代码
本地的数据库、端口号、用户名、密码和云服务器的数据库,可能是不同的
本地数据库,是你安装的时候设置了密码
云服务器的数据库是默认没密码,如果没有修改过密码,设置为 “” 即可
3、打包
切换到项目的主目录 (包含 pom.xml的目录),使用 maven 打包即可,打成 war 包
-
<!-- 设置包的类型,包的名字 --> <packaging>war</packaging> <build> <finalName>blog_system</finalName> </build>
-
双击 package
此时在 target 目录下就会生成对应的 war 包
曾经我们主要是在 IDEA 中通过图形化工具来使用 maven ,事实上 maven 本质是一个基于命令行的工具
曾经在 IDEA 上进行的 maven 操作在 Linux 中同样也可以通过命令行来完成
4、拷贝到 Tomcat 中
将 war 包拷贝到云服务器 Tomcat 的 webapps 目录中
注意: 如果该项目之前部署过, 需要先删除之前的包
5、验证
在浏览器上访问项目的链接. (按照项目的功能进行验证).
- 验证账户注册登录
- 验证展示博客列表
- 验证新增博客
- 验证展示博客内容
注意: 本地能够正确运行,部署到云服务器上,不一定能正确运行!
程序执行的正确性,不仅仅取决于代码,还取决于依赖的数据,配置,等环境信息
访问:http://ip:8080/blog_system/blog_login.html