星期二, 1月 29, 2019

Build WebGoat in a temporary Docker Container

  • git clone https://github.com/WebGoat/WebGoat
  • cd WebGoat
  • docker run -it --rm --name mymaven -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3-jdk-11 mvn clean install

星期六, 1月 19, 2019

Access your private npm repository - Nexus

  • Nexus Server
    • install Nexus
    • create npm repository (reference)
    • grant user / pass
  • Nexus Client (Jenkins Node)
    • install npm
    • npm login --registry https://nexus.acme.com/repository/npm-group/
    • (check ~/.npmrc)
    • npm --registry https://nexus.acme.com/repository/npm-group/ install somePackage (reference)

星期五, 1月 11, 2019

Docker & Docker Compose on CentOS

  • Docker
    • sudo yum install yum-utils
    • sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • sudo yum install docker-ce
    • sudo systemctl start docker
    • (optional) sudo systemctl enable docker
    • sudo usermod -aG docker `whoami`
    • (logout, then login again)
    • (optional) docker ps
  • Docker Compose
    • (docker installed)
    • (check latest version of Docker Compose from here, ex: 1.23.2)
    • sudo curl -L “https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
    • sudo chmod +x /usr/local/bin/docker-compose
    • (optional) docker-compose --version

星期二, 1月 01, 2019

Java Restful WebServices

為了想在最少的準備之下開發 Java Restful WebServices,研究了以下的做法:
  1. 參考這篇這篇所述,在 Docker 已安裝的前提下,藉由 Maven webapp plugin,不依賴任何 IDE,建立專案的目錄結構。需要在一個空的目錄下這命令(請自行替換適合的 groupId):
    docker run -it --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.acme -DartifactId=my-webapp
  2. 將這群目錄、檔案的擁有權取回:
    sudo chown -R `whoami`. my-webapp
  3. 進入 my-webapp 子目錄,補上 src/main/java/com/acme/TestService.java,內容可參考這篇(如果用複製的話,要注意雙引號可能需要替換)。
  4. 續上,增加 servlet 與 servlet-mapping 補足 src/main/webapp/WEB-INF/web.xml 的內容,尤其要注意 param-value 與程式中所述的套件、所在路徑一致。
  5. 續上,增加三個 dependency 補足 pom.xml 的內容。若在意未來的路徑名稱,也可以增設 build/finalName。
  6. 再用 Maven 於 target 目錄產出 war 檔:
    docker run -it --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven mvn package
接下來的課題是,需要 Servlet Container 讓 war 跑起來,一樣是借重 Docker 與大家最熟悉的 Tomcat:
  1. 將 Tomcat 預設埠 8080 8443 都對應好:
    docker run -d --name tomcat -p 8080:8080 -p 8443:8443 tomcat
  2. 先確認瀏覽器訪問 8080 沒問題,再設法讓 Manager App 開起來,首先是修改 /usr/local/tomcat/conf/tomcat-users.xml 增加 manager-gui 角色的帳密;若要遠端訪問還有 /usr/local/tomcat/webapps/manager/META-INF/context.xml 要放寬 RemoteAddrValve。
  3. 登入 Manager App 之後,部署 war 上去,不論 http://localhost:8080/my-webapp 或 http://localhost:8080/my-webapp/rest/testservice 都應能得到正確內容。
  4. 準備 https 憑證與金鑰檔,放到 Docker Container 內,並參考這篇的說明修改 /usr/local/tomcat/conf/server.xml,對應的必要屬性至少有 certificateFile、certificateKeyFile 兩個,就可改由 https 8443 訪問取得結果。