本文正在参加「金石计划」
前言
依稀记得大学Linux老师曾经说过,Windows系统也就打打游戏,写代码还得是Linux,今天介绍一波小白部署Java服务教程。现在的web服务大部分都采用了前后端分离的架构模式,后端提供接口服务,前端负责页面展示,不涉及任何代码耦合情况。
本篇文章介绍下在后端java服务,前端vue服务下如何在服务器中部署一套完整的web应用,哪天自己接个私活也得会一些部署相关的东西。
大体思路就是后端打成jar包,用java命令启动,前端打包成html + js + css文件,通过使用nginx代理功能,将指定端口代理到前端的html页面中,前端代码中的请求后端地址可以用127.0.0.1:port,也可以统一走nginx的路由配置。
服务器
学生的话趁着学生身份,可以在各大厂商里买到学生优惠,阿里云、腾讯云、华为云等等给学生的优惠力度还是很大的。我印象当时最猛的时候有个1核2G的配置一年10块的活动,再不济也有个99一年的活动,拿来做私活验证代码、实验些小demo或者搭个mysql数据库都不错。
这里有个点,一般的厂商都会有两层端口限制,一层服务器内置的防火墙限制,一层厂商的端口访问限制,所以部署完要在外网验证的话需要确保两层都开放。
连接linux服务器的话用厂商官网自带的控制台连接也行,windows推荐用XShell,mac直接用命令行直连即可。
以下操作以centeros操作系统举例。
配置jdk
拿到一个空机肯定是什么都没有,要部署java服务首先要有jdk运行环境。第一步先去官网下载jdk包,拿到jdk包之后用工具传到服务器上并解压,存放路径记一下,配置环境变量的时候会用到。
tar -zxvf jdk*.tar.gz
linux的环境变量存储在/etc/profile文件下,直接vi /etc/profile文件java环境配置进去
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
退出保存后还要重载一下配置文件使其生效
source /etc/profile
完事之后可以在控制台上输入java -version回车,如果打印java版本则说明配置正确。
安装docker
我们使用yum源去安装docker,如果安装失败得排查下yum源的设置。
yum -y install docker
安装成功后,直接启动docker服务
sudo systemctl start docker
把docker服务加入到开机启动项里
sudo systemctl enable docker
部署mysql
装完docker后拉一个mysql就相对简单多了
docker pull mysql
docker run -d --name mysql-test -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql
-
-d 表示在后台运行容器
-
–name 表示为后台运行的容器取别名
-
-v 用来挂载磁盘路径,将正在运行mysql的容器上的/var/lib/mysql目录映射到宿主机上的/data/mysql目录
这里有时候会有个小坑,有时候外部客户端连接数据库访问不到,这时候要进容器去调数据库一个参数
docker exec -it mysql /bin/bash
mysql -u root -p
输入密码进入mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'; //修改允许所有人访问权限
flush privileges //刷新权限
部署nginx
前端代码一般会打包成html+css+js,需要用nginx代理一下,nginx的话用docker部署也可,去官网下载也可以,都挺简单的。
docker pull nginx
docker run -d --name nginx-test -p 1234:80 nginx
启动之后在外部访问ip:1234接口就能访问到nginx的默认首页了。配置成功后直接进入到容器中修改配置文件
docker exec -it nginx-test bash
whereis nginx //查找nginx配置文件路径,用nginx -t也可以
vi conf.d/default.conf
server {
listen 80;
server_name www.zking.com;
location / {
// 配置打包好的前端静态资源路径
root /etc/nginx/html/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~^/api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://tomcatList;
proxy_redirect default;
}
}
如果前端配置的后端路由也要通过nginx转发的话可以再拷贝一份server配置,转发到对应的后端服务中,也就是只对外开放一个80端口,内部再根据路由做对应的转发逻辑。
大功告成~