java服务器开发和维护(linux平台常用指令)
作为一个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
3)用工具将我们下载的JDK移动到刚才创建的目录下/usr/lib/jdk (我用的工具:SecureCRSecureFXPortable64);
4)对下载的压缩文件进行解压
指令:tar -zxvf jdk-8u144-linux-x64.tar.gz
到这里,我们就是“安装”好JDK了。
2、配置JDK的环境变量
配置JDK环境变量有两种方式
方式一:修改全局配置文件profile,作用于所有用户
1)编辑指令:vim /etc/profile
2)开启编辑:键盘按 i
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
4)退出:键盘按 Esc
5)保存指令:wq!
到此就配置好了
6)使修改的配置立刻生效:
指令:source /etc/profile
方式二:修改当前用户配置文件,只作用于当前用户
指令:vim ~/.bashrc
操作:设置与方式二相同,这里不再赘述
使修改的配置立刻生效:
指令:source ~/.bashrc
3、最后查看配置情况
指令1:java -version
指令2:javac -version
二、Java服务器程序的部署和发布
将jdk环境变量配置好后,我们就可以发布java服务器应用程序了。一般情况下,服务器不需要界面,故我们先针对jar服务器程序的部署作相应的介绍,然后再对war程序的部署作介绍。
1、将项目进行打包,打包成jar进行部署
将服务器程序打包成jar有多种方式,现在我们就选其中两种进行介绍:
1)通过IDE工具(Eclipse)导出
- 选中要导出的项目文件,然后右键“Export”
- 选择Java->JAR file
- 点击"Next",然后选择导出的文件内容,输入导出的位置及文件名
- 然后点击"Next"
- 下面进行选择程序启动的入口
- 选择后,点击"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放在项目代码同级目录下
- 选中"pom.xml"文件,右键单击,菜单中选中"Run As"
- 然后再弹出的菜单中选中"Maven install"即可
- 出现下面状态日志时,代表成功
2、将打包好的jar项目发布到linux环境中
1)运用工具(我用的工具:SecureCRSecureFXPortable64)将jar项目文件放到需要发布的目录中
说明:这里,我把配置文件放在单独的同级目录中的(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&
说明:nohup可以将日志输出到项目同级目录中(下图),末尾加"&"表示以服务的形式运行在后台,即关掉该命令窗口后,程序也照样运行,如果不加,则当命令窗口关闭时,服务程序也会停掉。
到此,关于jar项目的部署就已经讲解完了。
3、将项目进行打包,打包成war进行部署
与打包成jar一样,也介绍两种方式:
1)通过IDE工具(Eclipse)导出
- 选中要导出的项目文件,然后右键“Export”
- 选择WAR file
- 然后选择导出的路径
- 然后点击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放在项目代码同级目录下
- 选中"pom.xml"文件,右键单击,菜单中选中"Run As"
- 然后再弹出的菜单中选中"Maven install"即可
- 出现下面状态日志时,代表成功
4、将打包好的war项目发布到linux环境中(这里是tomcat)
1)运用工具(我用的工具:SecureCRSecureFXPortable64)将war项目文件放到需要发布的目录中
2)然后通过启动tomcat就可以运行了
运行指令:./startup.sh
到此,我们把项目打包成jar和war介绍完了(如果不会安装tomcat请查看我们另一篇文章)。
三、ubuntu下的防火墙简单管理
如果作为新手,我们将项目部署完后去访问,有时发现居然访问不了,然后把自己写的服务器程序调试了一遍又一遍居然都找不到原因,那么我要告诉你,你确定防火墙作了设置了?
下面介绍一下ubuntu中防火墙设置相关的指令(注:如果是root用户权限,不需要加sudo)
1、打开80端口(ubuntu下执行)
指令:sudo ufw allow 80
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
1)查看java项目
指令:ps -ef|grep java
2)查看tomcat项目
指令:ps -ef|grep tomcat
3)杀死该玩意儿(java)
指令:kill -9 1093