跳到主要內容

發表文章

目前顯示的是 1月, 2018的文章

Install Oracle Java8 on Debian

Pre-Install sudo apt-get install software-properties-common https://packages.ubuntu.com/zh-tw/trusty/software-properties-common Install Oracle Java8 sudo add-apt-repository "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" sudo apt-get update sudo apt-get install oracle-java8-installer javac -version Install Oracle Java9 sudo apt-get install oracle-java9-installer Java version manager sudo update-alternatives --config java SET JAVA_HOME Modified ~/.profile vim ~/.profile Append JAVA_HOME to environment # JAVA_HOME JAVA_HOME="/usr/lib/jvm/java-8-oracle" # JAVA version manange controller aliases alias jvc='sudo update-alternatives --config java' Verify source ~/.profile echo $JAVA_HOME jvc jerry@local:~$ jvc There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr...

Spring-boot Thymeleaf Html5 SAXParseException 解析錯誤

thymeleaf 解析 html5 出錯 <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin - Start Bootstrap Template</title> <!-- Bootstrap core CSS--> <link href="../static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom fonts for this template--> <link href="../static/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- Page level plugin CSS--> <link href="../static/vendor/datatables/dataTables.bootstrap4.css" rel="stylesheet"> <!-- Custom styles for this template--> <li...

Spring boot with docker

Spring boot with docker Spring-boot 官方教學: https://spring.io/guides/gs/spring-boot-docker/ , 做法跟設定跟官方教學有些不太一樣, 不考慮用 maven plugin 維護 docker images, 方便 devOps 統一管理。 Set up Spring-boot 先建立 spring-boot 專案, 專案命名為 demo-docker-spring 建立 controller, 簡單 echo Hello Docker World package com.example.demo; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by jerry on 2018/1/15. * * @author jerry */ @Slf4j @RestController public class Controller { @RequestMapping("/") public String home() { return "Hello Docker World"; } } Dockerfile docker 官方不支援 oracle-java, 所以找了一個 star 較高的 image 來用。 Dockerfile 就直接放在專案底下。 # https://hub.docker.com/_/java/ 不支援 oracle-java # FROM: 指定 base image (https://hub.docker.com/r/cogniteev/oracle-java/) FROM cogniteev/oracle-java # expose 8080 port EXPOSE 8080 # 複製當前路徑所有資料, 到容器裡面 COPY . /usr/app/demo-...

Docker Concept and Best Practice

Docker 參考 GitBook - Docker Practice 鏡像(Image)和容器(Container)的關係,就像是 OOP (Object-oriented Programming) 中的 class 和 instance 一樣, Image 是靜態的定義, Container 是 Image 運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。 基本的運作方式像這樣, 參考 這份PPT Developer Best Practice Keep Images Small 確保 Images 越小越好, 跟 layers 越少越好, 這樣啟動的速度就越快. Layers 指的是在 Dockerfile 的每一行指令, 代表一個 layer, 例如下面這份 Dockfile 就代表 6 Layers. FROM ubuntu:15.04 COPY . /app RUN apt-get -y update RUN apt-get install -y python RUN make /app CMD python /app/app.py 可以修改為 4 layers. FROM ubuntu:15.04 COPY . /app RUN apt-get -y update && apt-get install -y python && make /app CMD python /app/app.py Layers 的說明: 參考 JDK 的開發者, 可以考慮 Docker 官方建議的 OpenJDK Image , 官方目前不支援 oracle-jdk 呦。 Multiple Build , 在一份 Dockerfile 同時使用不同來源的 image, 可以避免同時維護多個 dockerfiles, 參考: 用 Docker Multi-Stage 編譯出 Go 語言最小 Image 如果有多個 images 擁有相同的 common, 可以考慮建立一個 base image , 類似父層級的 image, docker 會協助做快取來加速其他 image 的啟動. 在建立多個 images 時, 可以透過 tags 的指令做管理, 不要依賴 latest 的 tag. Where and...

Google Compute Engine‎ - AccessDeniedExceptions 403

原因 打算從 instance 打包 logs 到 google cloud storage 發生了 AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation. , 看起來是 instance 沒有 storage 權限 解決 Reference: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes 重新設定 service account 權限 instance 上內建有 gcloud , 就直接用現有的工具查詢一下 instance 的 account. $ gsutil info 或者在本機直接 gcloud compute instances describe INSTANCE_NAMES Account: [alpha-number-compute@developer.gserviceaccount.com] Project: [our-project-name] 會看到 instance 的一些狀態, 接下來就簡單多了, 按照下列的說明, 要先 stop instance, 更改 storage scope 再重新 start 。 To change an instance's service account and access scopes, the instance must be temporarily stopped. To stop your instance, read the documentation for Stopping an instance. After changing the service account or access scopes, remember to restart the instance. # Stop Instance gcloud compute instances stop INSTANCE_NAMES # 設定 storage scope 為 full (Read, Write) gcloud co...

Ubuntu 常用指令

id - 查詢使用者權限 id jerry uid=1003(jerry) gid=1004(jerry) groups=1004(jerry) ... 查詢檔案權限 getfacl getfacl docker-compose # file: docker-compose # owner: root # group: root user::rw- group::r-- other::r-- ls ls -al drwxr-xr-x 2 root root 4096 Jan 11 02:26 . drwxr-xr-x 10 root root 4096 Dec 12 14:21 .. -rw-r--r-- 1 root root 8479184 Jan 11 02:26 docker-compose chown - 更改檔案擁有者 chown UserName FileName chgrp - 更改檔案群組 系統的群組都紀錄在 /etc/group 檔案內 chgrp UserName FileName chmod - 修改權限 # a : 全部 user # u : 目前檔案的 owner # g : 目前檔案的 group # o : 其他 # + : 給予 # - : 移除 # = : 設定 # r : 讀 # w : 寫 # x : 執行 chmod [a/u/g/o] [+/-/=] [r/w/x] FileName # 讓所有 user 可以執行這個 File chmod a+x FileName tar - 壓縮, 解壓縮 # -z : 透過 gzip 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.gz # -cv : 建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename) # -f FileName : 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記) # -x : 解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開, -c, -t, -x 不可同時出現在一串指令列中。 壓縮 tar -zcv -f FileName.tar.gz DirName 解壓縮 tar -zxv -f FileName.tar.gz which - 查詢指令所在位置 ...