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
四、檢視專案程序id並殺死這裡我們如果想暴力停止專案,我們可以用如下操作(以java,tomcat為例)
1)檢視java專案
指令:ps -ef|grep java
2)檢視tomcat專案
指令:ps -ef|grep tomcat
3)殺死該玩意兒(java)
指令:kill -9 1093