亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

如何在Ubuntu 14.04服務(wù)器上自動(dòng)化部署Spring Boot的應(yīng)用

Jeffrrey / 3204人閱讀

摘要:在本地運(yùn)行默認(rèn)使用作為配置文件,而在環(huán)境中我們系統(tǒng)它支持提供外部的配置文件。使用域名或者,啟動(dòng)之后就可以這個(gè)域名或訪問網(wǎng)站了如何在中后臺(tái)運(yùn)行應(yīng)用推薦使用這個(gè)命令。

這篇文章主要講解我在Ubuntu 14.04服務(wù)器上如何部署Spring Boot的網(wǎng)站應(yīng)用的經(jīng)驗(yàn)。以下以我的博客項(xiàng)目https://github.com/Raysmond.com/SpringBlog為例子。主要的部署需求如下:

如何在服務(wù)器上運(yùn)行Spring Boot的應(yīng)用,并使用production環(huán)境的配置文件application-production.yml;

如何通過Gradle構(gòu)建和發(fā)布Spring Boot的項(xiàng)目;

如何在本地自動(dòng)化部署網(wǎng)站到production環(huán)境中。

1. 在Ubuntu中安裝Java8

以下是一個(gè)簡單的安裝方法。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
2. 本地使用Gradle發(fā)布Spring Boot應(yīng)用

我這里使用Jetty9作為內(nèi)置的服務(wù)器。

// ...
bootRun {
    systemProperties = System.properties
}

configurations {
    compile.exclude module: "spring-boot-starter-tomcat"
}

dependencies {
    // spring boot
    compile "org.springframework.boot:spring-boot-starter-web:1.3.0.M5"
    compile "org.springframework.boot:spring-boot-starter-jetty"
    // ...
}

//...

在本地運(yùn)行默認(rèn)使用src/main/resources/application.yml作為配置文件,而在production環(huán)境中我們系統(tǒng)它支持提供外部的配置文件application-production.yml。

./gradlew bootRun # 開發(fā)環(huán)境下默認(rèn)使用項(xiàng)目里的application.yml

# 在本地測試使用外部配置文件
./gradlew bootRun -Dspring.config.location=/path/to/application-production.yml 

# 發(fā)布
./gradlew build 

# 運(yùn)行
java -jar build/libs/SpringBlog-0.1.jar  # 默認(rèn)使用jar包里面的application.yml配置文件

# 使用外部配置文件
java -jar build/libs/SpringBlog-0.1.jar --spring.config.location=/path/to/application-production.yml
3. 在Ubuntu服務(wù)器上部署Spring Boot應(yīng)用
# 上傳SpringBlog-0.1.jar到服務(wù)器
scp build/libs/SpringBlog-0.1.jar root@your_server_ip:/root/spring-blog/current

# 在服務(wù)器上配置生產(chǎn)環(huán)境的配置文件
scp application-production.yml root@your_server_ip:/root/spring-blog/current

然后SSH登錄服務(wù)器,修改配置文件application-production.yml,試運(yùn)行應(yīng)用。

ssh root@your_server_ip

cd spring-blog/current

java -jar SpringBlog-0.1.jar --spring.config.location=application-production.yml 
# application-production.yml

server:
    address: raysmond.com # 使用域名或者IP,啟動(dòng)之后就可以這個(gè)域名或IP訪問網(wǎng)站了
    port: 80
    contextPath:
    
spring:
    profiles:
        active: production

    thymeleaf:
        cache: true

    jade4j:
        caching: true

    dataSource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1/spring_blog
      username: root
      password:

    hibernate:
      dialect: org.hibernate.dialect.MySQLDialect
      hbm2ddl.auto: update
      show_sql: false

    redis:
      host: localhost
      port: 6379
4. 如何在Ubuntu中后臺(tái)運(yùn)行Spring Boot應(yīng)用?

推薦使用nohup這個(gè)命令。

cd /root/spring-blog/current
nohup java -jar SpringBlog-0.1.jar --spring.config.location=application-production.yml 
> ../logs/production.log 2> ../logs/production.err &

在Ubuntu還可以/etc/init.d目錄下新建一個(gè)腳本,把SpringBlog作為service來運(yùn)行,這樣不用每次都打這么繁瑣的命令了。新建一個(gè)/etc/init.d/spring_blog文件,內(nèi)容如下:

#!/bin/sh
SERVICE_NAME=spring_blog
HOME=/root/spring-blog
PATH_TO_JAR=$HOME/current/SpringBlog-0.1.jar
PID_PATH_NAME=/tmp/spring_blog.pid
LOG=$HOME/logs/production.log
ERROR_LOG=$HOME/logs/production.err
CONFIG=$HOME/application-production.yml
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            cd $HOME/current
            nohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml > $LOG 2> $ERROR_LOG &
                        echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            kill $PID;
            echo "$SERVICE_NAME stopped ..."
            rm $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill $PID;
            echo "$SERVICE_NAME stopped ...";
            rm $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            cd $HOME/current
            nohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml > $LOG 2> $ERROR_LOG &
                        echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

現(xiàn)在就可以使用service的方式來運(yùn)行網(wǎng)站了。

sudo service spring_blog start

sudo service spring_blog stop

sudo service spring_blog restart
5. 在本地自動(dòng)化部署網(wǎng)站到遠(yuǎn)程服務(wù)器

在本地我用了一個(gè)shell腳本和一個(gè)python腳本來配合自動(dòng)化部署。

deploy.sh 使用gradle的命令發(fā)布jar包,使用scp命令吧jar包上傳到服務(wù)器上;

deploy.py 使用SSH遠(yuǎn)程登錄服務(wù)器,并在服務(wù)器上執(zhí)行部署命令。

# deploy.sh

#!/bin/bash

SERVER="your_server_ip"
JAR="build/libs/SpringBlog-0.1.jar"

echo "Building $JAR..."
./gradlew build

echo "Upload $JAR to server $SERVER..."
scp $JAR root@$SERVER:/root/spring-blog/

python deploy.py

deploy.py主要使用了一個(gè)paramiko庫,用于SSH遠(yuǎn)程登錄服務(wù)器,并執(zhí)行命令。這個(gè)腳本會(huì)把服務(wù)器上/root/spring-blog/current/SpringBlog-0.1.jar備份到/root/spring-blog/releases中,并把新發(fā)布的jar包放到/root/spring-blog/current中,然后重啟spring_blog服務(wù)。

#!/usr/bin/python

import paramiko
import threading
import time

ip = "your_server_ip"
user = "root"
password = ""
jar = "SpringBlog-0.1.jar"
home="/root/spring-blog"
current=home+"/current"
releases=home+"/releases"

def execute_cmds(ip, user, passwd, cmd):
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip,22,user,passwd,timeout=5)
        for m in cmd:
            print m
            stdin, stdout, stderr = ssh.exec_command(m)
#           stdin.write("Y")
            out = stdout.readlines()
            for o in out:
                print o,
        print "%s	OK
"%(ip)
        ssh.close()
    except :
        print "%s	Error
"%(ip)


if __name__=="__main__":
    print "Start deploying %s to server %s"%(jar, ip)

    now = time.strftime("%Y%m%d%H%M%S")
    cmd = [
        "echo Stop spring_blog service... && service spring_blog stop",
        "echo Flush all redis cache data... && redis-cli -r 1 flushall",
        "echo Stop redis server... && service redis_6379 stop",
        "echo Use new jar... " + 
        " && mv " + current + "/" + jar + " " + releases + "/" + now + "_" + jar ,
        "mv " + home + "/" + jar + " " + current + "/" + jar,
        "echo Stop redis... && service redis_6379 start",
        "echo Start spring_blog service... && service spring_blog start " + 
        " && echo All done."
    ]
    a=threading.Thread(target=execute_cmds, args=(ip,user,password,cmd))
    a.start()

配置完以后,在本地寫完代碼就可以運(yùn)行./deploy.sh一鍵部署到遠(yuǎn)程服務(wù)器了。

以上就是我部署 http://raysmond.com 網(wǎng)站的一些經(jīng)驗(yàn)。項(xiàng)目源代碼已開源放在Github上:https://github.com/Raysmond/SpringBlog。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/66178.html

相關(guān)文章

  • container-as-a-service-0x02 -- 項(xiàng)目構(gòu)建&部署之道

    container-as-a-service-0x02 -- 項(xiàng)目構(gòu)建&部署之道 By 蘇依蜀黍 . 2016.06.08 分析 之前寫了兩篇,算是比較完善的稱述了就目前的業(yè)務(wù),容器服務(wù)在我司的應(yīng)用,但是沒有比較具體的講如何構(gòu)建以及部署,所以這一篇主要講如何對(duì)項(xiàng)目進(jìn)行容器化以及如何部署,對(duì)我司業(yè)務(wù)分類以后可以有以下幾種類型: python應(yīng)用 node.js應(yīng)用 php應(yīng)用 nginx服務(wù) ...

    arashicage 評(píng)論0 收藏0
  • 容器化開發(fā)環(huán)境 - Dockerize

    摘要:為了不讓別人痛苦,更不想讓自己痛苦,請(qǐng)容器化開發(fā)環(huán)境吧,讓我們享受一鍵部署開發(fā)環(huán)境的痛快吧。接下的例子依賴的環(huán)境和,請(qǐng)移步自行安裝。 有沒有過項(xiàng)目之間各種Java版本開發(fā)環(huán)境切換的場景;有沒有過github上clone回來的代碼庫,由于各種開發(fā)環(huán)境依賴無法運(yùn)行的問題;有沒有過進(jìn)入一個(gè)新項(xiàng)目時(shí)各種配開發(fā)環(huán)境到深夜的經(jīng)歷...Come On!為什么會(huì)這樣,一切都是開發(fā)環(huán)境問題。為了不讓別人...

    cnsworder 評(píng)論0 收藏0
  • Ubuntu 14.04 務(wù)器部署 Hexo 博客

    摘要:本文將介紹如何在一臺(tái)的云服務(wù)器上快速部署博客站點(diǎn),如何快速發(fā)布一篇博文并通過云服務(wù)器上的私有倉庫部署到服務(wù)器目錄下。此外,還要在云服務(wù)器上安裝和兩個(gè)必備的軟件包。在服務(wù)器上部署博客以下為文章正文。 推薦理由:Hexo 是用 Node.js 開發(fā)的一個(gè)靜態(tài)站點(diǎn)生成器(Static Site Generator),支持 Markdown 語法寫作,有著強(qiáng)大的插件系統(tǒng),而且性能優(yōu)異。下面我推...

    cyqian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<