欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java服务器开发和维护(linux平台常用指令)

程序员文章站 2022-07-10 12:35:24
...

作为一个java服务器开发人员,我们必须了解最基本的linux操作指令,包括jdk的安装及环境变量配置、java服务器程序的发布和部署,防火墙的打开和开启等等,下面我们对以上提到的相关指令进行介绍。

说明:1)以下均是基于ubuntu 16.04.3-64bit进行的介绍;2)安装JDK为1.8版本

内容:

  • JDK的安装和环境变量配置
  • Java服务器程序的部署和发布
  • 防火墙的打开和开启
  • 端口号的启用

一、JDK的下载安装和环境变量的配置

1、JDK的下载和安装(Oracle版本解压安装)

1)在官网上下载最新的jdk,为了加快下载速度,朋友们可以在用迅雷进行下载。

官网网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

下载文件格式为.tar.gz结尾,比如jdk-8u144-linux-x64.tar.gz

2)创建自己想把jdk安装的目录

这里,我们把目录创建在/usr下

指令:mkdir /usr/lib/jdk 

java服务器开发和维护(linux平台常用指令)

3)用工具将我们下载的JDK移动到刚才创建的目录下/usr/lib/jdk (我用的工具:SecureCRSecureFXPortable64);

java服务器开发和维护(linux平台常用指令)

4)对下载的压缩文件进行解压

指令:tar -zxvf jdk-8u144-linux-x64.tar.gz

java服务器开发和维护(linux平台常用指令)

到这里,我们就是“安装”好JDK了。


2、配置JDK的环境变量

配置JDK环境变量有两种方式

方式一:修改全局配置文件profile,作用于所有用户

1)编辑指令:vim /etc/profile

java服务器开发和维护(linux平台常用指令)

2)开启编辑:键盘按 i

java服务器开发和维护(linux平台常用指令)

3)操作:在文件内容的末尾换行,添加以下配置代码

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_144

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=.:${JAVA_HOME}/bin:$PATH

java服务器开发和维护(linux平台常用指令)

4)退出:键盘按 Esc

5)保存指令:wq!

java服务器开发和维护(linux平台常用指令)

到此就配置好了

6)使修改的配置立刻生效:

指令:source /etc/profile

方式二:修改当前用户配置文件,只作用于当前用户

指令:vim ~/.bashrc

操作:设置与方式二相同,这里不再赘述

使修改的配置立刻生效:

指令:source ~/.bashrc


3、最后查看配置情况

指令1:java -version

指令2:javac -version

java服务器开发和维护(linux平台常用指令)


二、Java服务器程序的部署和发布

将jdk环境变量配置好后,我们就可以发布java服务器应用程序了。一般情况下,服务器不需要界面,故我们先针对jar服务器程序的部署作相应的介绍,然后再对war程序的部署作介绍。

1、将项目进行打包,打包成jar进行部署

将服务器程序打包成jar有多种方式,现在我们就选其中两种进行介绍:

1)通过IDE工具(Eclipse)导出

  • 选中要导出的项目文件,然后右键“Export”
  • 选择Java->JAR file

java服务器开发和维护(linux平台常用指令)

  • 点击"Next",然后选择导出的文件内容,输入导出的位置及文件名

java服务器开发和维护(linux平台常用指令)

  • 然后点击"Next"

java服务器开发和维护(linux平台常用指令)

  • 下面进行选择程序启动的入口

java服务器开发和维护(linux平台常用指令)

  • 选择后,点击"Finish"即可导出成jar打包项目。

2)通过maven打包项目(推荐)

  • 建立pom.xml文件
  • 然后我们看看pom.xml配置文件的基本结构
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!--用项目包名命名 -->
	<groupId>com.test.server</groupId>
	<!--直接用项目 -->
	<artifactId>sdl_util</artifactId>
	<!--当前项目的版本号 -->
	<version>1.0.0</version>
	<!--打包成的文件格式 -->
	<packaging>jar</packaging>
	<!--项目名 -->
	<name>sdl_util</name>

	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<!--配置依赖的jar包及其版本号 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<!--这里配置打包时需要加入的文件 -->
			<resource>
				<!--这里表示打包配置文件的来源目录 -->
				<directory>src/main/java</directory>
				<!--表示只打包后缀名为.xml的所有文件 -->
				<includes>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<!--配置打包使用的编译工具及使用的版本号 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
					<archive>
						<manifest>
							<!-- 此处指定main方法入口的class -->
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>com.start.StartServer</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.4.3</version>
				<configuration>
					<transformers>
						<transformer
							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
							<manifestEntries>
								<Main-Class>com.start.StartServer</Main-Class>
								<X-Compile-Source-JDK>1.8</X-Compile-Source-JDK>
								<X-Compile-Target-JDK>1.8</X-Compile-Target-JDK>
							</manifestEntries>
						</transformer>
					</transformers>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<!-- 如果把所有包打在一起,可能出现核心包缺失问题,故如果要把所有依赖包打在一起,请设置为false -->
							<minimizeJar>false</minimizeJar>
							<shadedArtifactAttached>true</shadedArtifactAttached>
							<shadedClassifierName>with_dependency</shadedClassifierName>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<!--配置打包使用的打包工具及使用的版本号 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<archive>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib</classpathPrefix>
							<mainClass>com.start.StartServer</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<!--配置打包所依赖的目标目录,即将依赖包打包到根据了的lib下 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.10</version>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<!--配置远程仓库的地址 -->
		<repository>
			<id>central</id>
			<name>Maven Repository Switchboard</name>
			<layout>default</layout>
			<url>http://repo1.maven.org/maven2</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

  • 将pom.xml放在项目代码同级目录下

java服务器开发和维护(linux平台常用指令)

  • 选中"pom.xml"文件,右键单击,菜单中选中"Run As"
  • 然后再弹出的菜单中选中"Maven install"即可
  • 出现下面状态日志时,代表成功

java服务器开发和维护(linux平台常用指令)


2、将打包好的jar项目发布到linux环境中

1)运用工具(我用的工具:SecureCRSecureFXPortable64)将jar项目文件放到需要发布的目录中

java服务器开发和维护(linux平台常用指令)

说明:这里,我把配置文件放在单独的同级目录中的(java打包方式举例如下图),同时因为maven中也配置了将依赖包打包到lib下,即访问与项目同级的目录;

public class Config {  
    private static final String TAG = Config.class.getName();  
    /** 
     * Server监听端口 
     */  
    public static int server_port;  
    public static String pathTail = "/config.properties";  
    // 非Eclipse开发环境的线上环境  
    public static String serverPath = System.getProperty("user.dir") + "/config" + pathTail;  
    // Eclipse开发环境  
    public static String devPath = System.getProperty("user.dir") + "/src/main/java" + pathTail;  
    static {  
        init();  
        Runnable runnable = new Runnable() {  
            public void run() {  
                init();  
            }  
        };  
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();  
        // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  
        service.scheduleAtFixedRate(runnable, 1, 15, TimeUnit.MINUTES);  
    }  
  
    public static void init() {  
        Properties props = new Properties();  
        InputStream ips = null;  
        BufferedReader bufferReader = null;  
        try {  
            if (new File(devPath).exists()) {  
                ips = new FileInputStream(devPath);  
            } else {  
                ips = new FileInputStream(serverPath);  
            }  
            bufferReader = new BufferedReader(new InputStreamReader(ips, "utf-8"));  
            props.load(bufferReader);  
            server_port = Integer.parseInt(props.getProperty("server_port"));  
        } catch (Exception e1) {  
            LogUtil.error(TAG, e1);  
        } finally {  
            try {  
                if (props != null)  
                    props.clear();  
                if (bufferReader != null)  
                    bufferReader.close();  
                if (ips != null)  
                    ips.close();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                LogUtil.error(TAG, e);  
            }  
        }  
    }  
}


2)然后在命令窗口中用指令运行项目文件

指令:nohup java -jar sdl_util-1.0.0.jar& 

java服务器开发和维护(linux平台常用指令)

说明:nohup可以将日志输出到项目同级目录中(下图),末尾加"&"表示以服务的形式运行在后台,即关掉该命令窗口后,程序也照样运行,如果不加,则当命令窗口关闭时,服务程序也会停掉。

java服务器开发和维护(linux平台常用指令)


到此,关于jar项目的部署就已经讲解完了。


3、将项目进行打包,打包成war进行部署

与打包成jar一样,也介绍两种方式:

1)通过IDE工具(Eclipse)导出

  • 选中要导出的项目文件,然后右键“Export”
  • 选择WAR file
  • 然后选择导出的路径

java服务器开发和维护(linux平台常用指令)

  • 然后点击Finish就可以了

2)通过maven打包项目(推荐)

  • 我们以打包一个spring mvc+mongo+mysql+redis的项目为例子
  • 建立pom.xml文件
  • 然后我们看看pom.xml配置文件的基本结构

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- 打包的组名 -->
	<groupId>com.deelock.server</groupId>
	<!-- 这里默认打包名 -->
	<artifactId>file_server</artifactId>
	<!-- 打包成war包 -->
	<packaging>war</packaging>
	<!-- war的版本号 -->
	<version>1.0.0</version>
	<name>file_server</name>
	<url>http://maven.apache.org</url>

	<!-- 常量属性 -->
	<properties>
		<!-- 编码集 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<!-- spring版本 -->
		<springframework.version>4.3.7.RELEASE</springframework.version>
	</properties>
	<!-- 程序依赖的包名 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jdbc</artifactId>
			<version>9.0.0.M25</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.44</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.9</version>
		</dependency>
		<dependency>
			<groupId>com.aliyun.oss</groupId>
			<artifactId>aliyun-sdk-oss</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.6.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.6.2</version>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk16</artifactId>
			<version>1.46</version>
		</dependency>
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.27-incubating</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.14.Final</version>
		</dependency>
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.14.Final</version>
			<classifier>javadoc</classifier>
		</dependency>
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.5.0</version>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<!-- 打包配置文件 -->
			<resource>
				<!-- 打包配置文件的位置 -->
				<directory>src/main/java</directory>
				<!-- 打包配置文件的类型,这里只打包.properties和.xml的后缀文件 -->
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
		<!-- 打包名 -->
		<finalName>file_server</finalName>
		<plugins>
			<plugin>
				<!--打包工具,依赖包打包到同级目录的lib中 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.10</version>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<!--打包依赖包下载的远程仓库 -->
		<repository>
			<id>central</id>
			<name>Maven Repository Switchboard</name>
			<layout>default</layout>
			<url>http://repo1.maven.org/maven2</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>
  • 将pom.xml放在项目代码同级目录下

java服务器开发和维护(linux平台常用指令)

  • 选中"pom.xml"文件,右键单击,菜单中选中"Run As"
  • 然后再弹出的菜单中选中"Maven install"即可
  • 出现下面状态日志时,代表成功

java服务器开发和维护(linux平台常用指令)


4、将打包好的war项目发布到linux环境中(这里是tomcat)

1)运用工具(我用的工具:SecureCRSecureFXPortable64)将war项目文件放到需要发布的目录中

java服务器开发和维护(linux平台常用指令)

2)然后通过启动tomcat就可以运行了

运行指令:./startup.sh

java服务器开发和维护(linux平台常用指令)

到此,我们把项目打包成jar和war介绍完了(如果不会安装tomcat请查看我们另一篇文章)。


三、ubuntu下的防火墙简单管理

如果作为新手,我们将项目部署完后去访问,有时发现居然访问不了,然后把自己写的服务器程序调试了一遍又一遍居然都找不到原因,那么我要告诉你,你确定防火墙作了设置了?

下面介绍一下ubuntu中防火墙设置相关的指令(注:如果是root用户权限,不需要加sudo)

1、打开80端口(ubuntu下执行)

指令:sudo ufw allow 80

java服务器开发和维护(linux平台常用指令)

2、防火墙开启(ubuntu下执行)

指令:sudo ufw enable

3、防火墙重启(ubuntu下执行)

指令:sudo ufw reload

4、查看本地的端口开启情况(ubuntu下执行)

指令:sudo ufw status

5、测试远程主机的端口是否开启(windows命令行下执行)

指令:telnet 192.168.1.103 80

6、关闭防火墙

指令:sudo ufw disable

7、禁止外部访问80

指令:sudo ufw delete allow 80

8、允许此IP访问所有的本机端口

指令:sudo ufw allow from 192.168.1.1


四、查看项目进程id并杀死

这里我们如果想暴力停止项目,我们可以用如下操作(以java,tomcat为例)

1)查看java项目

指令:ps -ef|grep java

java服务器开发和维护(linux平台常用指令)

2)查看tomcat项目

指令:ps -ef|grep tomcat

3)杀死该玩意儿(java)

指令:kill -9 1093