THẢO LUẬN

  1. Hãy Từ Chối TypeScript Cách này đang được team Deno sử dụng. Vậy team đó bad lắm hả ta? Typescript chỉ là type-check thôi, dù nó có generic hay các feature khác thì nhìn bản chất cũng chỉ là type. Cái chúng ta cần là code style chuẩn, Eslint + JSDocs + readme có thể làm điều đó. Câu này không đúng lắm
+2
thg 11 19, 2023 9:45 SA

hay 😄

0

bác không viết hướng dẫn về gitlab với jenkins nên hơi khó khăn quá vì em chưa dùng 2 cái đó bao giờ, tự mò cũng mất 1 ngày, bạn nào muốn có thêm hướng dẫn cài gitlab với jenkins thì như ở dưới:

  • GitLab yêu cầu 4GB ram, Jenkins 3GB ram, bạn nên bật swap vì GitLab khá nặng
  • GitLab sẽ cài trên docker, Jenkins thì cài trực tiếp vì nó cần kết nối với k8s sử dụng kubectl và helm ( nếu muốn xài docker thì phải tự build image có thêm kubectl và helm )
  • Cài đặt GitLab ( theo hướng dẫn https://docs.gitlab.com/ee/install/docker.html )
  • Tạo 3 thư mục /srv/gitlab/logs /srv/gitlab/data /srv/gitlab/config xong chạy lệnh
export GITLAB_HOME=/srv/gitlab
  • Triển khai container gitlab
sudo docker run --detach \
  --hostname gitlab.example.com \ #đổi thành hostname của bạn
  --publish 443:443 --publish 80:80 --publish 22:22 \ #tốt nhất là bind port y hệt như thế này, vì thế gitlab nên cài trên 1 máy ảo riêng
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ce:latest #bạn nào muốn xài bản enterprise edition thì chuyển thành gitlab-ee, bản ce xài ít tài nguyên hơn
  • Xài watch -n 1 docker ps đợi đến khi nào container nó healthy là vào được
  • Dùng lệnh
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

để lấy password root, lưu ý là kể từ lần đầu đăng nhập thì file này sẽ bị xoá sau 24h vì thế nên đổi mật khẩu, nếu như cần tạo lại container gitlab thì bạn cũng cần xoá luôn folder /srv/gitlab tạo lại vì nếu không thì sau 24h tạo container mới nó cũng không có file pass

  • Một số tweak mình đã test để giảm tài nguyên GitLab sử dụng:
  • Truy cập vào container bằng lệnh docker exec -it gitlab bash vào file /etc/gitlab/gitlab.rb để chỉnh sửa 1 số tham số sau ( sử dụng vi nhé )
puma['worker_processes'] = 0
sidekiq['max_concurrency'] = 10
prometheus_monitoring['enable'] = false

cái nào đánh # thì bỏ # đi là được

  • Tắt Prometheus Metrics: Chọn Search or go to., tìm Admin Area, chọn Settings > Metrics and profiling., chọn Expand Metrics - Prometheus., tắt Enable Prometheus Metrics., rồi Save . Ngoài ra còn 1 số tweak khác nữa nhưng khi mình sử dụng thì không tạo project được, sẽ bị lỗi 500, các bạn có thể tìm hiểu tại đây https://docs.gitlab.com/omnibus/settings/memory_constrained_envs.html
  • Kết nối tới Gitlab nên sử dụng ssh-agent nếu không nó khá lỗi, bật ssh-agent bằng
eval $(ssh-agent)

Thêm ForwardAgent yes vào file config của ssh tại ~/.ssh/config (không có thì tạo) như sau

Host gitlab.local.com #đổi bằng host gitlab của bạn
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/gitlab_com_rsa #đây là private key nhé
  ForwardAgent yes

Bạn cũng cần bật ForwardAgent trong /etc/ssh/sshd_config

AllowAgentForwarding Yes
  • Add public key của bạn vào ssh-agent bằng
ssh-add

xong bạn cũng add nội dung của public key đó lên Gitlab, bạn nên tạo 1 cặp ssh key mới sử dụng email và username của tài khoản gitlab ( lưu ý username của tài khoản rootAdministrator, add tại Preferences -> SSH Key

  • Tạo 1 project blank trên Gitlab, không tích chọn tạo file readme, nó sẽ hiện các lệnh giúp bạn kết nối tới repo gitlab của mình, các tham số trên lệnh đã đúng nên không cần sửa gì, ngoại trừ cái cd thì các bạn cd vào folder mà mình sẽ up lên repo
  • Các bạn test thử xem push commit lên gitlab không là ok
  • Với Jenkins, nếu là bản mới nhất thì cần phải cài Java 17 trước
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
yum -y install ./jdk-17_linux-x64_bin.rpm

rồi phải tìm đường dẫn của nó, của mình là /usr/lib/jvm/jdk-17-oracle-x64/, mặc định thì nó nằm trong /usr/lib/jvm/

  • Rồi cài Jenkins theo hướng dẫn sau https://www.jenkins.io/doc/book/installing/linux/ , distro nào thì làm như thế nhưng đừng start jenkins vội
  • Vào file https://www.jenkins.io/doc/book/installing/linux/ và sửa biến môi trường JAVA_HOME sang đường dẫn ở trên, giờ thì có thể start jenkins rồi, nhớ cài đủ plugin như hướng dẫn của bác Việt
0

em chạy đến bước ./configure-vm.sh thì bị lỗi như này ạ "Nothing to do : No such file or directory/etc/profile.d/bash_completion.sh usage: setenforce [ Enforcing | Permissive | 1 | 0 ] : No such file or directoryx/config Failed to stop firewalld\x0d.service: Unit firewalld\x0d.service not loaded. Failed to execute operation: No such file or directory sysctl: setting key "net.ipv4.ip_forward": Invalid argument net.ipv4.ip_forward = 1"

0

Bài viết hay và chi tiết. Em cảm ơn tác giả nhiều

0
thg 11 18, 2023 3:32 SA

Anh cho e hỏi chút là giả dụ người khác muốn tải cái của mình về thì mình phải để project là public để cho người kia dùng bình thường phải không a?

0
Avatar
đã bình luận cho bài viết
thg 11 18, 2023 12:40 SA

có vẻ như bạn đang hiểu nhầm việc sử dụng unitOfWork thì phải, nó không phải sử dụng để giảm số lần gọi tới cơ sở dữ liệu 😃)

+1
thg 11 17, 2023 3:07 CH

@conghdql4 Đúng rồi mình đang nói đến các private thôi. Cảm ơn bạn.

0

Hi bạn, cách này chỉ là 1 trick mình tham khảo được và viết lại bằng java để sử dụng cho đơn giản, chủ yếu để vọc vạch hoặc làm các dự án cá nhân thôi. Còn để áp dụng vào sản phẩm thật thì hơi khó vì cookie của google mình cũng không biết được bao lâu nó sẽ không hợp lệ nữa, có khi vài ngày, vài tuần, v.v...

0

bài này bác phải thêm mục "Liên kết private registry vào k8s" chứ trò dùng file toml của containerd chỉ hoạt động với những phiên bản k8s không còn dùng docker thôi hướng dẫn cho anh em:

  • Sau khi login vào private registry trên CICD, trong thư mục $HOME/.docker/ sẽ có 1 file docker.json với nội dung như thế này
{
	"auths": {
		"harbor.prod.longpq.com": { #link private registry của bạn
			"auth": "YWRtaW46MDk4cG9pQSM="
		}
	}
}
  • Tạo secret key bằng lệnh
kubectl create secret generic regcred --from-file=.dockerconfigjson=$HOME/.docker/config.json --type=kubernetes.io/dockerconfigjson

lưu ý: tạo 1 secret key ở default namespace và tạo thêm ở các namespace khác mà deploy lên với cùng tên secret

  • File deployment không thể xài trường "imagePullSecrét" mà chỉ pod xài được nên ta phải thêm key này vào service account bằng lệnh:
kubectl edit serviceaccounts default
  • Trên tất cả các node, sửa/ tạo file /etc/docker/daemon.json với nội dung
{
  "insecure-registries" : ["harbor.prod.longpq.com"]
}
  • Trên tất cả các node, copy file cert ( đuôi .crt ) vào thư mục /etc/docker/certs.d/link_hoặc_IP_của_private_registry/, không có thì tạo thư mục
  • Trên tất cả các node, add hostname của private registry vào /etc/hosts
0
thg 11 17, 2023 2:13 SA

cảm ơn thím

0

😍cám ơn e đã theo dõi 😍

0

mình rép bạn ở comment này rồi đó 😃:

https://viblo.asia/c/qPoL7apk4vk

0

Đỉnh quá thần đồng unittest ơi :vv

0

This post is very interesting . Thank author ! 💪

+1
thg 11 16, 2023 2:20 CH

thank you, bro

0
thg 11 16, 2023 11:04 SA

hay quá thím ơi

+1

Bạn sử dụng Cloud Function + Firestore đi mình gần 1 triệu người truy cập hàng tháng, 600k thành viên nhưng mỗi tháng chỉ mất có khoảng 600k với lương người truy cấp thấp gần như là miễn phí

0
thg 11 16, 2023 9:22 SA

bạn có thể lên medium để đọc các bài viết của chuyên gia nước ngoài, các bài viết về bug bounty hay chia sẻ về các kỹ thuật tấn công. Mình cũng hay lên đấy xem. Ở Việt Nam có anh @jang (testanull) cũng là một người mình theo dõi và đọc blog từ ảnh. Bạn có thể tham khảo

0

Bếch luôn làm PBI router 😄

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí