作为一个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服务技术评估服务器性能 java服务器开发技术_jar

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

Java服务技术评估服务器性能 java服务器开发技术_jar_02

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

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

Java服务技术评估服务器性能 java服务器开发技术_jar_03

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


2、配置JDK的环境变量

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

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

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

Java服务技术评估服务器性能 java服务器开发技术_jar_04

2)开启编辑:键盘按 i

Java服务技术评估服务器性能 java服务器开发技术_Java服务技术评估服务器性能_05

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服务技术评估服务器性能 java服务器开发技术_jar_06

4)退出:键盘按 Esc

5)保存指令:wq!

Java服务技术评估服务器性能 java服务器开发技术_maven_07

到此就配置好了

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

指令:source /etc/profile

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

指令:vim ~/.bashrc

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

使修改的配置立刻生效:

指令:source ~/.bashrc


3、最后查看配置情况

指令1:java -version

指令2:javac -version

Java服务技术评估服务器性能 java服务器开发技术_jar_08


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

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

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

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

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

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

Java服务技术评估服务器性能 java服务器开发技术_maven_09

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

Java服务技术评估服务器性能 java服务器开发技术_Java服务技术评估服务器性能_10

  • 然后点击"Next"

Java服务技术评估服务器性能 java服务器开发技术_jar_11

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

Java服务技术评估服务器性能 java服务器开发技术_jar_12

  • 选择后,点击"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服务技术评估服务器性能 java服务器开发技术_maven_13

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

Java服务技术评估服务器性能 java服务器开发技术_maven_14


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

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

Java服务技术评估服务器性能 java服务器开发技术_maven_15

说明:这里,我把配置文件放在单独的同级目录中的(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服务技术评估服务器性能 java服务器开发技术_Java服务技术评估服务器性能_16

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

Java服务技术评估服务器性能 java服务器开发技术_jar_17


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


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

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


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

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

Java服务技术评估服务器性能 java服务器开发技术_jar_18

  • 然后点击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服务技术评估服务器性能 java服务器开发技术_apache_19

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

Java服务技术评估服务器性能 java服务器开发技术_Java服务技术评估服务器性能_20


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

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

Java服务技术评估服务器性能 java服务器开发技术_jar_21

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

运行指令:./startup.sh

Java服务技术评估服务器性能 java服务器开发技术_maven_22

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


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

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

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

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

指令:sudo ufw allow 80

Java服务技术评估服务器性能 java服务器开发技术_maven_23

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服务技术评估服务器性能 java服务器开发技术_apache_24

2)查看tomcat项目

指令:ps -ef|grep tomcat

3)杀死该玩意儿(java)


指令:kill -9 1093