發表於 程式分享

三大前端框架比較

三大前端框架比較,以表格說明如下

比較/分類 Angular Vue React
Logo
產生時間

Google 2010

尤雨溪

Facebook 2013

主要架構

MVVM

MVVM

Virtual DOM

MVC的V

優點 1. 完整強大的文件

2. 完整強大的solution

3. 雙向綁定

4. 依賴注入

1. 完整的多國語言文件

2. 集各家特色

3. 易整合

4.  輕量

1. 簡單好學

2. 運用靈活

3. 單向資料流

4. Virtual DOM技術

5. 升級工具

缺點 1. 需花相對多的時間學習

2. 語法相對複雜

3. 版本變動大

1. 生態系不夠全面 1. 沒有React百科文件

2. 太過靈活

3. JavaScript知識需求高

主要使用者

Udemy

YouTube

Paypal

Nike

Google

AWS

小米

阿里巴巴

Gitlab

Adobe

Facebook

Instagram

Netflix

Dropbox

Airbnb

Microsoft

需學習知識比動 TypeScript: 35%

Angular: 65%

JavaScript: 35%

Vue: 65%

JavaScript: 65%

React: 35%

發表於 程式分享

docker與Kubernete(k8s)特點

一.docker特點

  1. Isolation (與其它應用層服隔離)
  2. Lightweight (輕型)
  3. Simplicity (簡單)
  4. Workflow (工作流程)
  5. Community (社群)

二.Kubernete(k8s)特點

  1. Automatic binpacking (自動打包) & delivery (自動佈署)
  2. Horizontal scaling (自動或手動)
  3. Automated rollouts & rollback (可處理升版及降版)
  4. Service monitor (監控服務)
  5. Self-healing (自我修復)
  6. Service discovery (服務發現) & LoadBalance (負載平衡)
  7. 100% open source, written in GO (發源,以GO語言撰寫)
發表於 程式分享

用docker-compose安裝gitlab及設定(於ubuntu上)

1.安裝docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

sudo apt install docker-compose
git config –global http.sslverify “false" (遇到下載時憑證問題可使用此指令)

2.安裝gitlab
我主要是參考https://blog.toright.com/posts/5831/%E4%B8%89%E7%A7%92%E6%95%99%E4%BD%A0%E7%94%A8-docker-%E5%AE%89%E8%A3%9D-gitlab.html此篇文章
1)於ubuntu上建目錄, ex./home/ubuntu/gitlab
2)於1)目錄上建立docker-compose.yml,內容如下

version: '3.2'
services:
 
  gitlab:
    image: gitlab/gitlab-ce:latest
    hostname: gitlab.example.com
    container_name: gitlab
    restart: always
    volumes:
      - /gitlab/config:/etc/gitlab
      - /gitlab/logs:/var/log/gitlab
      - /gitlab/data:/var/opt/gitlab
    ports:
      - 443:443
      - 80:80
    networks:
      - devel-net
 
networks:
  devel-net:


3)啟動docker container
docker-compose up -d 或
docker-compose -f “docker-compose.yml" up -d

3.執行網頁
依網路上說http://localhost可用root密碼登入,
但我登不進去,最後就直接進入gitlab container改root密碼:
docker exec -it gitlab bash
進入container後
gitlab-rails console -e production
進入rail畫面
user = User.where(id: 1).first
user.password = ‘your secret’
user.password_confirmation = ‘your secret’
user.save
exit

註1: docker-compose出現未認證的解法-匯入網站憑證檔至系統
1) 取得憑證檔
openssl s_client -showcerts -connect [registry_address]:[registry_port] < /dev/null | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > ca.crt
2) 複製憑證檔至 /usr/local/share/ca-certificates/
sudo cp ca.crt /usr/local/share/ca-certificates/
3) 執行update-ca-certificates
sudo update-ca-certificates
4) 重啟docker服務
sudo service docker restart

參考來源: https://stackoverflow.com/questions/50768317/docker-pull-certificate-signed-by-unknown-authority

發表於 程式分享

確認angular專案使用的套件版本是否需更新,並執行更版安裝

確認angular專案使用的套件版本是否需更新,並執行更版安裝,方法如下
1.安裝npm套件npm-check-updates
npm i -g npm-check-updates

2.確認angular專案套件版本(執行npm-check-updates),且會更新該專案的package.json
ncu -u

3.更新專案使用的套件
npm install

發表於 程式分享

Docker指令複習(以ubuntu為例)

練習docker指令的網站 https://labs.play-with-docker.com/

1.安裝docker

su (以root user執行)
apt-get update => 若執行出現憑證問題,請改此指令試看看 sudo apt-get update –allow-unauthenticated –allow-insecure-repositories

apt-get -y install apt-transport-https ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg| gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg –dearmor | sudo tee /usr/share/keyrings/docker-ce-archive-keyring.gpg > /dev/null

curl -fsSL https://download.docker.com/linux/ubuntu/gpg| gpg –dearmor -o /etc/apt/trusted.gpg.d/docker-ce-archive-keyring.gpg

echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
echo “deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
=> 若上述指令執行仍有問題,建議在deb […]加上trusted=yes allow-insecure=yes allow-weak=yes allow-downgrade-to-insecure=yes check-valid-until=no試看看

apt-get update && apt-get install docker-ce docker-ce-cli containerd.io
exit

sudo usermod -aG docker $USER (非root使用者使用docker不用sudo指令)

docker –version (查看docker版本)

2.相關指令整理-image相關

  • 搜尋github上有那些images: docker search httpd (搜尋github上image為httpd者)
  • 列出本機的image檔: docker images
  • 取得image(由github拉到本機): docker pull httpd:alpine
  • 移除local image: docker rmi httpd:alpine
  • 更改image名稱: docker tag alpine:1 myrepo/alpine:3.4
  • 登入registry: docker login my.registry.com:8080
  • 將image上傳至registry: docker push myrepo/myapp:01
  • 打包多個image為tar檔: docker save -o images.tar nginx:latest gitlab:latest 或 docker save nginx:latest gitlab:latest > images.tar
  • 載入tar檔為image檔: docker load -i images.tar 或 docker image import images.tar alpine-new
  • 將container存成image檔: docker export -o images.tar gitlab(container名稱) 或 docker container export gitlab > images.tar
  • 查看image歷史記錄: docker image history alpine-c1

3.相關指令整理- container相關

  • 列出執行中的container: docker ps或docker container ls -a
  • 列出執行中+停用的container: docker ps -a
  • 執行container: docker run –rm hello-world (執行hello world container)
  • 執行container並做port mapping: docker run -d -p 8080:80 httpd1 httpd:alpine (於host server用8080連線至container內的80 port)
  • 查看container詳細內容: docker inspect nginx
  • 停止container: docker stop nginx
  • 啟動container: docker start nginx
  • 刪除一個正在執行的container: docker kill nginx
  • 刪除已停止的container: docker rm 'docker ps -a -q --filter status=exited'
  • 刪除運行中的所有container: docker rm -f 'docker ps '
  • 刪除運所有的container: docker rm -f 'docker ps -aq'
  • 進入container執行指令:

docker exec -it httpd2 bash
進入httpd2 container後執行
ps -ef
ip a
exit

4.相關指令整理- volume相關

  • mount volume

echo “Hello, I’m Grace!" > index.html
docker run -d –name httpd2 -v $PWD/index.html:/usr/local/apache2/htdocs/index.html -p 81:80 httpd:alpine

docker exec httpd2 df -h (查看volume設定)
docker ps

5.查看container logs

  • docker logs [container name]
  • docker logs -f [container name]

6.由Dockerfile建立image

1) Dockerfile內容

FROM nginx:alpine
LABEL maintainer="Docker Maintainers huang.yahui.grace@gmail.com"

ENV IMAGE_VERSION 1.0.0
ENV RELEASE 1
RUN set -x \
apk add vim
COPY index.html /usr/share/nginx/html/index.html

2) 建置image: docker build . -t myhttpd:v1

7.網路相關

  • 建立一個overlay網路及subnet: docker network create –subnet 10.1.0.0/24 –gateway 10.1.0.1 -d overlay mynet
  • 使用host網路(效能比預設的docker bridge好): docker run -d –name web1 –network host tomcat

註1: 另一種安裝指令
sudo apt-get install docker.io
service docker status
sudo usermod -aG docker gtwang
docker version

註2: 安裝docker-compose
sudo apt install docker-compose
git config –global http.sslverify “false" (遇到下載時憑證問題可使用此指令)

註3: docker-compose出現未認證的解法-匯入網站憑證檔至系統
1) 取得憑證檔
openssl s_client -showcerts -connect [registry_address]:[registry_port] < /dev/null | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > ca.crt
2) 複製憑證檔至 /usr/local/share/ca-certificates/
sudo cp ca.crt /usr/local/share/ca-certificates/
3) 執行update-ca-certificates
sudo update-ca-certificates
4) 重啟docker服務
sudo service docker restart

參考來源: https://stackoverflow.com/questions/50768317/docker-pull-certificate-signed-by-unknown-authority

發表於 程式分享

在Docker內的gitlab container如何使用Host主機的sendmail服務寄送信件(email)

因為還在試gitlab的功能,建在ubuntu上的Docker內的gitlab container要寄信,gitlab document有很詳細的說明https://docs.gitlab.com/omnibus/settings/smtp.html,但因在公司除了透過公司的exchange server外(但要在exchange上設定,還在測試階段,故不想動到此部份),因此試了很久於gitlab container設定,終於成功了,說明大約如下

1.docker啟動時需先傳入docker host ip值

(1)取得docker host ip
echo $(ifconfig | grep -E “([0-9]{1,3}.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk ‘{ print $2 }’ | cut -f2 -d: | head -n1)
Ex.172.18.0.1

(2)啟動gitlab docker,有用docker 或 docker-compose
a.用docker傳送docker host ip
docker run -it –name gitlab –add-host=’dockerhost:172.18.0.1′ gitlab/gitlab-ce:latest

b.用docker-compose傳送docker host ip
b-1)修改docker-compose.yml
增加
extra_hosts:
– “dockerhost: 172.18.0.1″

(3)查看gitlab的/etc/hosts有加上dockerhost

2.host server的sendmail要設定接受gitlab docker container的信做寄送
(1)開啟 sendmail 25 port 可連線 (以root登入)
vi /etc/mail/sendmail.cf
#註解以下
#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
#新增以下
O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA

service sendmail restart (重啟sendmail服務)
telnet localhost 25 (確認是否已開啟25 port)

(2)修改允許relay(轉信) 清單
vi /etc/mail/access
最後一行加上
Connect:172.10 RELAY

3.gitlab container設定透過host的sendmail寄信

(1)調整container內的gitlab.rb設定檔
a.設定smtp
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “dockerhost"
gitlab_rails[‘smtp_port’] = 25
#gitlab_rails[‘smtp_user_name’] = “"
#gitlab_rails[‘smtp_password’] = “"
gitlab_rails[‘smtp_domain’] = “dockerhost"
#gitlab_rails[‘smtp_authentication’] = “none"
gitlab_rails[‘smtp_openssl_verify_mode’] = ‘none’
gitlab_rails[‘smtp_enable_starttls_auto’] = false
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_ssl’] = false
gitlab_rails[‘smtp_force_ssl’] = false
#gitlab_rails[‘smtp_pool’] = false

b.設定寄件者
gitlab_rails[‘gitlab_email_from’] = ‘grace@xxx.com.tw’
gitlab_rails[‘gitlab_email_display_name’] = ‘Grace’

c.設定gitlab admin寄件者
alertmanager[‘admin_email’] = ‘grace@xxx.com.tw’

(2)gitlab container重新讀取gitlab.rb
docker exec -it gitlab bash
gitlab-ctl reconfigure

補充1: host主機sendmail手動寄測試機
telnet localhost 25
ehlo localhost (跟主機打招呼)
mail from: “Grace"<grace@mail.xxx.com.tw> (寄件者)
rcpt to: <kevin@mail.xxx.com.tw> (收件者)
data (要開始寫信了)
This is a test (信件內容)
. (結束)
quit (離開)

補充2: gitlab container手動寄測試信
docker exec -it gitlab bash
telnet [docker host ip] 25 (有成功表示F/W有通,才往下執行)
gitlab-rails console
Notify.test_email(“grace@xxxx.com.tw", “Title", “Message").deliver_now

發表於 程式分享

如何由Host Server連到VirtalBox VM上的ssh、網頁

如何由Host Server連到VirtalBox VM上的ssh、網頁困擾了我幾天,大體有兩種方式,
一種是比較簡單的port mapping(可參考此篇https://myapollo.com.tw/zh-tw/virtualbox-port-forwarding/),但是每開放一個port都要做設定,而且是跟Host的port不能衝突,這不是我想要的,因為我只是要測試這個VM上的主機功能是否正常,不考慮安全性,故找到另一種方式是將VM的port全對Host主機開放,步驟如下(以VM裝ubuntu為例)

1.VM的F/W關閉

sudo systemctl stop ufw

sudo systemctl status ufw (檢查F/W是否關閉)

sudo systemctl disable ufw (此設定重開機之後也有效)

2.設定Host網卡

DHCP記得勾選不啟用,否則每次重開機後IP會變

3.設定VM網卡

4.此設定Host主機連至VM主機,用192.168.208.3,而VM主機連Host主機則用192.168.208.1

發表於 程式分享

VirtualBox加掛硬碟

重開VirtualBox的ubuntu VM有提示硬碟空間不足,
那就來加些硬碟空間吧!

1.增加新硬碟: 記得先將VM關機哦
由VirtualBox的VM => 設定 => Storage(存放裝置) => SATA控制器
=> 右鍵後選擇"硬碟" => 建立"硬碟" => 選取新建立之硬碟

2.啟動VM,並以root執行以下指令
(1)查看系統的磁碟空間
sudo fdisk -l
=> 看到新加的虛擬硬碟,應該為Disk /dev/sdb
(2)將新硬碟建分割槽
fdisk /dev/sdb
command (m for help):m (輸入m為help)
command (m for help):n (增加新分割槽)
p (選擇基本分割槽, p為primary)
Partition number(1-4):1 (建立分割槽數量)
First cylinder (1-15908,default 1):Enter
command (m for help):w (寫入並離開此指令)
(3)格式化磁碟分割槽
sudo mkfs.ext4 /dev/sdb1 (用ext4格式對/dev/sdb1格式化)
(4)掛載分割槽
sudo mkdir /newdir (建立新掛載點)
sudo mount -t ext4 /dev/sdb1 /work (將新分割槽掛載到/newdir目錄下)
df -h (檢視掛載結果)
=> 可以看到新加的硬碟:/dev/sdb1對應至路徑/newdir

3.設定開機自動掛載 (用root執行)
vi /etc/fstab
在最後一行加入:/dev/sdb1 /newdir ext4 errors=remount-ro 0 1
執行shutdown -r重開機後
df -h (檢視掛載結果)
=> 可以看到新加的硬碟:/dev/sdb1對應至路徑/newdir

註: GUI工具可使用Gparted
安裝方式(用root) apt-get install gparted
一開始以為沒辦法將/目錄由19.5G擴充至39.5G,
後來發現是要先將檔案系統的extended先做擴充就可以了