發表於 程式分享

用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先做擴充就可以了

發表於 程式分享

IntelliJ IDEA maven build遇到PKIX path building failed解法

錯誤訊息:ValidatorException:PKIX path building failed : sun.security.provider.certpath.SunCertPathBuilderException : unable to find valid certification path to requested target

步驟一:Settings –> Build, Execution, Deployment –> Build Tools –> Maven –> importing 中的 VM options for importer 設定為如下

-Xmx768m -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=ture

步驟二:Settings –> Build, Execution, Deployment –> Build Tools –> Maven –> Runner 中的 VM Options 設定如下

-Dmaven.multiModuleProjectDirectory=$MAVEN_HOME  -Dmaven.wagon.http.ssl.insecure=true  -Dmaven.wagon.http.ssl.allowall=true  -Dmaven.wagon.http.ssl.ignore.validity.dates=true
發表於 程式分享

Angular 10 SPA升級成PWA步驟

步驟如下:

ng add @angular/pwa –project newportalweb
ng build –prod
npm install -g http-server
http-server -p 8080 -c-1 dist/

參考網址-https://angular.io/guide/service-worker-getting-started

發表於 程式分享

如何設定node js的根目錄

之前新增angular專案時ng new graceAngularApp –routing –style=scss會出現如下訊息,當時的解法如 文章: 新增angular cli遇到的問題

後來發現nodejs的根目錄不再是C:\Users\[user_name]\AppData\Roaming\npm,而是隨著目錄的切換根目錄也變成當時的目錄,因此npm install -g @angular/cli@next只會安裝在當時的目錄,無法安裝於C:\Users\[user_name]\AppData\Roaming\npm

npm root -g可查看目前的根目錄,設定根目錄的方式是在C:\Users\[user_name]\.npmrc這個檔案填入C:\Users\[user_name]\AppData\Roaming\npm即可設定nodejs的根目錄,此設定完成後再執行npm root -g可發現不管切換至何目錄,其根目錄一律為C:\Users\[user_name]\AppData\Roaming\npm

此設定一旦完成,新增angular專案也不再出現browserslist、ansi-html的錯誤訊息了.

發表於 程式分享

mongoDB安裝 – CentOS 7

一、安裝mongoDB – CentOS 7

項次指令
1vi /etc/yum.repos.d/mongodb-org-4.2.repo [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
2sudo yum install -y mongodb-org
3systemctl start mongod
4ps auxw | grep mongod systemctl status mongod

、移除mongoDB – CentOS 7

Uninstall : sudo yum erase $(rpm -qa | grep mongodb-org)

三、新增mongoDB資料庫及新增使用者

項次指令
1use portaldb show dbs db.students.insert({}) show dbs
2use portaldb db.createUser(   {     user: “grace",     pwd: passwordPrompt(),  // or cleartext password     roles: [        { role: “readWrite", db: “portaldb" }     ]   } )