🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
虚拟机上进行java项目部署,自己的一点总结,
一起学习,一起进步,一起成长!
🛸🛸🛸🛸🛸🛸🛸🛸🛸🛸
【yzh2022.9】
1、我们安装 VM 的时候,使用命令 java -version 查看
java -version
这里显示 JDK 的信息是 openjdk version "1.8.0_262" , 我们会发现这个 JDK 是 VM 自带的
当然你也可以通过命令 rpm -qa | grep java 来查看相关的 java 信息
rpm -qa | grep java
【如果不使用自带的jdk】
2、使用命令 yum -y remove java* 进行卸载 VM 自带的 JDK
yum -y remove java*
3、删除完成之后,再次查看是否还存在 JDK
4、接着你就可以安装自己的需要的 JDK 版本了
我们开发java程序必须要的环境!
下载jdk rpm.去oralce官网下载Java Downloads | Oracle
安装java环境
# 检查当前系统是否存在java环境
java -version
# 如果有的话就卸载
rpm -qa|grep jdk # 检测jdk版本信息
rpm -e --nodeps jdk_ #强制卸载
# 卸载完毕后即可安装jdk
rpm -ivh rpm包

!!!rpm 不需要配置环境,也不用source!!,这一步可以不需要做,如果想要尝试,可能会逝
但是在解压的时候,像使用docker进行springboot项目部署的时候,解压之后就需要进行环境变量的配置
3.环境变量
配置环境变量:
/etc/profile在文件的最后面增加java的配置和window安装环境一样
vim /etc/profilevim /etc/profile 进入配置文件末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_341-amd64 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib保存退出即可
刷新配置
source /etc/profile
测试jdk 1.用文本编辑器新建一个test.java文件,在其中输入以下代码并保存:
public class test {
public static void main(String args[]){
System.out.println("Linux-Jdk");
}
}
2.编译:在shell终端执行命令javac test.java
3.运行:在shell终端执行命令java test
当shell下出现“Linux-Jdk”字样则jdk运行正常。
发布一个项目
# 开启防火墙
Firewalls-cmd --zone=public --add-port=9000/tcp -permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看所有开启的端口,如果是阿里云,需要配置安全组规则!
firewall-cmd --list-ports
执行:
java -jar jar包
nohup后台运行
使用maven install 打jar包
将jar包传到linux中
在jar包所在目录下创建 nohup.out日志文件, 用于输出项目启动的日志输出
让jar包在后台运行
//nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 //当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中 //除非另外指定了输出文件。 nohup java -jar SpringBoot-03-web2-0.0.1-SNAPSHOT.jar &
查看nohup.out 文件
//-f 循环读取 //-n<行数> 显示文件的尾部 n 行内容 tail -fn 10000 nohup.out -- 查看文件
防火墙相关命令
启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用: systemctl disable firewalld 开机启用: systemctl enable firewalld
开启一个端口
//添加 firewall-cmd --zone=public --add-port=8080/tcp --permanent //添加端口外部访问权限 firewall-cmd --add-port=8080/tcp //重新载入,添加端口后重新载入才能起作用 firewall-cmd --reload
查看和删除端口
//查看端口 firewall-cmd --zone=public --query-port=8080/tcp //删除端口 firewall-cmd --zone=public --remove-port=8080/tcp --permanent
终止jar包运行
ps -ef | grep java kill pid
ssm war 就需要放到tomcat中运行!
1.下载tomcat.官网下载Apache Tomcat® - Welcome!
apache-tomcat-9.0.65.tar.gz
2.解压这个文件
tar -zxvf apache-tomcat-9.0.65.tar.gz

3.启动tomcat测试 ./xxx.sh脚本即可运行
进入Tomcat文件bin文件
# 执行
./startup.sh
# 停止
./shutdown.sh

如果防火墙8080端口开了并且阿里云安全组也开放了,这个时候就可以直接访问远程了!
# 查看firewall服务状态
systemctl status firewalld
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用: systemctl disable firewalld
开机启用: systemctl enable firewalld
# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
# 开启端口
开端口命令 : firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙 : systemctl restart firewalld.service
命令含义
--zone #作用域
--add -port-80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
yum install -y yum源
基于 CentOS 7 安装
官网安装参考手册:Install Docker Engine on CentOS | Docker Documentation
确定你是CentOS7及以上版本
[root@192 Desktop]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
yum安装gcc相关(需要确保 虚拟机可以上外网 )
yum -y install gcc
yum -y install gcc-c++
网络连接测试
ping
在我们的实验场景里,没有真实的服务器。我们现在就确保我们的物理机和虚拟机之间必须可以完美通信。在之前我们刚刚装好虚拟机的时候,我们直接拿firefox做过一个上网实验,当时我们发现虚拟机是直接能够连上百度的。照这么看的话,这个网络连接其实已经配好了,但是现在我们还是想测一下跟主机之间能不能通信。 ping 这个命令在Windows和Linux下都是通用的,是一个系统命令,它主要就是用来检测两台机器之间是否能够正常发送数据,是否能够正常通信。ping一台主机时,命令为ping 主机的IP地址。所以这里边我们的核心是得知道你要ping的那台机器的IP。当然了,实际在操作的时候,不光可以加IP,你也可以直接加域名或者主机名,比方说我们可以直接ping百度,这是完全没有问题的,这个过程需要做域名转换、域名解析。
获取主机的IP地址
方法一: 打开网络和Internet设置
点击下边的更多网络适配器选项
所有的网络连接在这里一目了然。
我们看到尽管多达到6个,但是其实很多都断开的。我现在连的无线,所以右键点击最右侧的WLAN图标,点击状态。
点击详细信息
这里我们就可以看到192.168.31.222,这就是我当前的IP地址。
方法二: 在命令行输入ipconfig,查询当前IP网络配置相关的东西。我们现在连接的无线,可以看到IP地址就是192.168.31.222
虚拟机ping主机
我们在虚拟机的终端中ping主机,可以看到可以正常通信
获取虚拟机的IP地址
方法一: 点击设置
点击网络,然后点击设置图标
就可以看到虚拟机的IP地址是192.168.128.130
方法二: 在终端中输入ifconfig(其实是network’s interface config的缩写,即网络接口的配置),敲回车。可以看到IP地址是192.168.128.130。下面的127.0.0.1是回环地址。下面还有个virbr0,其实是当前Linux系统里边又创建了一个虚拟网络。也就是说我们本来是在虚拟机里边装的Linux系统,然后在这个Linux系统里边又可以创建一个虚拟网络,然后再接一些虚拟化的设备。
主机ping虚拟机
我们在主机的终端中ping虚拟机,可以看到可以正常通信
卸载旧版本
# 官网版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
# 正确推荐使用国内的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum软件包索引
yum makecache fast 安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io 启动docker
systemctl start docker 测试
docker version
docker run hello-world
# 第一次他需要自己从docker官网拉取这个项目
docker images 将项目打包成jar包
编写Dockerfile脚本
# 基于centos:7基础镜像构建
FROM centos:7
# 创建目录
RUN mkdir /usr/local/docker
# 进入该目录下
RUN cd /usr/local/docker
# 将包添加到/usr/local/docker目录下并解压
ADD jdk-8u341-linux-x64.tar.gzz /usr/local/docker
# 环境变量配置
ENV JAVA_HOME=/usr/local/docker/jdk-8
ENV CLASSPATH=.:$JAVA_HOME/lib
ENV PATH=.:$JAVA_HOME/bin:$JAVA_HOME/lib:$PATH
# 输出Java版本信息
CMD ["java","-version"]
如果是jdk-17
我们需要单独构建jdk17,上面的包也需要改成17的版本【jdk-17_linux-x64_bin.tar.gz】
docker build -t jdk:17
# 设置本镜像需要使用的基础镜像
FROM java:8
# FROM jdk:17
# 把jar包添加到镜像中
ADD study-process-0.0.1-SNAPSHOT.jar /app.jar
# 暴露的端口
EXPOSE 3030
RUN bash -c 'touch /app.jar'
# 容器启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
构建镜像
将jar包和脚本一同放入服务器中,打上标签构建
docker build -t study-process:1.0.0 .
运行镜像
docker run -d -p 3029:3029 镜像id
进入运行的容器
运行后根据docker ps查询id进入
docker exec -it 容器id /bin/bash
这些我们通过虚拟机加Xshell(远程控制),Xftp(上传文件)
主机访问虚拟机的ip地址就可以在浏览器中打开springboot项目的web页面了
🤩 🥳 😏 那么大家就快去实战吧😊 🙃 😉
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI