- vừa được xem lúc

Setup debug Gitlab, tưởng không khó mà cũng không khó lắm

0 0 27

Người đăng: Minh Tuấn Ngụy

Theo Viblo Asia

Chuyện là gần đây Gitlab có bản Security Release mới, trong đó có một lỗi Arbitrary file read via group import feature khá là thú vị, ảnh hưởng đến tất cả các phiên bản GitLab CE/EE có đầu là 14.5 trở lên nên mình cùng với anh @vigov5 đã thử setup lên research bug này xem sao 😄. Bạn đọc có thể đọc thêm thông tin tại đây https://about.gitlab.com/releases/2022/01/11/security-release-gitlab-14-6-2-released/#arbitrary-file-read-via-group-import-feature

Mình chưa setup debug Ruby on Rails bao giờ, nên đã mất 2 ngày trời setup. Viết lên đây vừa là chia sẻ cho bạn đọc cũng như là một nơi lưu trữ lỡ mình có lỗi ở đâu đó thì còn có cái vào đọc lại =))

Setup

Để setup debug Ruby (cụ thể hơn thì là setup debug Gitlab) thì bạn cần khá là nhiều thứ và có nhiều cách để debug, mình đã thử được 2 cách debug khá ổn, nhưng trong bài này chắc là mình chỉ viết trọng tâm vào 1 cách thôi, các còn lại tương tự ấy mà 😄. Đầu tiên các bạn cần:

  • Ruby Mine (mình chọn IDE này vì đồ của JetBrains debug lúc nào cũng ngon) https://www.jetbrains.com/ruby/
  • Docker (Docker giúp cài đặt môi trường sạch sẽ, ít lỗi)
  • Một máy tính cấu hình đủ khoẻ, Gitlab khá ngốn tài nguyên, còn với các project nhẹ nhàng khác thì cấu hình yếu chút cũng được
  • Kiên trì kiên trì và kiên trì 😦

Một chiếc note nho nhỏ: Môi trường debug của mình hiện tại đang sử dụng là Windows, kết hợp kèm với WSL2 để chạy Linux, đối với Linux thì làm tương tự nhưng ít bước hơn Windows, các bạn có thể lược bỏ bước nếu muốn nhé.

Setup env với docker

  1. Clone repo https://gitlab.com/gitlab-org/gitlab-development-kit (Ở đây mình sử dụng gitlab-deveopment-kit vì chính Gitlab cũng bảo rằng mình cần dùng cái này để tránh gặp lỗi trong quá trình setup, do Gitlab có quá nhiều thành phần)
  2.  cd gitlab-development-kit docker build -t gdk:base . docker run -it --name gitlab gdk:base bash .
    
    Sử dụng câu lệnh trên để build một image env với ruby
  3. Vào trong docker trên, chạy lệnh one line duy nhất để dựng môi trường hoàn chỉnh
    curl "https://gitlab.com/gitlab-org/gitlab-development-kit/-/raw/main/support/install" | bash
    
    Lệnh này sẽ giúp các bạn cài môi trường Gitlab sạch sẽ, kiểu gì cũng xài được, nếu lỗi thì gõ lại cái lệnh đó là được, khi nào báo Success thì là ok
  4. Mở một terminal khác gõ lệnh
    docker commit gitlab gdk:ready
    
    để lưu lại thành docker image, tiện sau này có sử dụng lại đỡ phải ngồi chờ build cái đống trên bước 3 (lâu phết đấy)
  5.  docker run -it -p 3000:3000 -p 12345:12345 gdk:ready bash
    
    Truy cập vào trong docker image gdk:ready vừa mới lưu lại xong. Nếu ở phần này các bạn bị lỗi không mở được port 3000 thì bên dưới mình sẽ hướng dẫn cách fix nhé
  6. Bên trong docker vào thư mục gitlab-development-kit chạy
    gdk stop
    gdk start webpack gitlab-workhorse rails-background-jobs sshd praefect praefect-gitaly-0 redis postgresql
    
    Lệnh này sử dụng để khởi động các dịch vụ cần thiết của Gitlab

Vậy là xong các bước dựng env, tiếp theo đến bước debug với RubyMine

Debug Gitlab với Ruby Mine

  1. Cài đặt Ruby Mine lên Windows/Linux tuỳ ý (ở đây mình sử dụng Windows)
  2. Cài đặt SDK Ruby cho Ruby Mine, ở đây mình sử dụng WSL2 để cài đặt cho nó đơn giản, bạn nào k thích dùng WSL2 thì có thể cài Ruby cho Windows tại https://rubyinstaller.org/downloads/ Trên WSL2 gõ
    sudo apt-get install rails
    
    là được, chờ xíu là xong, ở đây mình đang sử dụng base kali-linux
  3. Tại Ruby Mine, vào File -> Settings -> Search Ruby SDK and Gems Ở thư mục gitlab chọn dấu + -> New remote ... rồi làm như hình là xong
    Ruby Mine có hỗ trợ rất nhiều kiểu SDK, từ local tới remote, rất là tiện 👍
  4. Clone repo gitlab trên máy local
    git clone https://gitlab.com/gitlab-org/gitlab
    
    Ở đây mình clone trên WSL2 luôn
    git checkout v14.6.1-ee
    
    để về version bị lỗi

    Chú ý, trên Docker các bạn cũng checkout về nhánh này để chạy code version này nhé.

  5. Tiếp tục vào Run -> Edit configurations
    Các bạn cài đặt như hình là xong. Phần remote port để là 12345 do nãy mình có map port docker 12345 ra ngoài rồi. Phần remote root folder thì giống như hình còn phần local root folder thì để đường dẫn là thư mục gitlab trên máy các bạn.
  6. Trên container docker gõ
    rdebug-ide --host 0.0.0.0 --port 12345 -- bin/rails s -b 0.0.0.0
    
    Lúc này trên container docker sẽ chờ tín hiệu nhận debug từ Ruby Mine, ấn nút Debug hoặc Shift + F9 để connect, sau đó chờ server start lên là được Trên máy local truy cập vào http://localhost:3000 xem có vào được Gitlab chưa, nếu vào được thì là ok 😄
  7. Tuy nhiên các bạn sẽ gặp vấn đề là k debug được, do default Gitlab chạy có nhiều Worker, cần phải tắt Worker đi để cho nó chạy Single thôi là có thể debug được (cảm ơn anh @vigov5 rất nhiều vì cái này)
    vim config/puma.rb
    
    Lặp lại bước 6 là có thể debug được gòi 😄

Kết

Trên đây là một cách debug webapp Ruby sử dụng Ruby Mine, cũng có thể sử dụng VSCode debug cũng được, nhưng cá nhân mình thích Ruby Mine hơn vì tính tiện dụng của nó, thay vì docker các bạn cũng có thể sử dụng WSL2 hay cài đặt trực tiếp lên Windows nhưng mà nó có khá nhiều lỗi + Gitlab là một project khá lớn cần cài đặt các thành phần bổ trợ khá nhiều nên mình thấy cách trên có vẻ tối ưu nhất, các project khác các bạn có thể làm tương tự

Extend

Lúc setup debug mình có gặp một lỗi liên quan đến Windows, nó không cho phép mình mở port 3000 map từ Docker ra ngoài, hoá ra là nó bị excludedport, cách fix như sau

netsh interface ipv4 show excludedportrange protocol=tcp

Sử dụng lệnh này để check xem mình có đang bị Exclusion port nào k, nếu port mình đang muốn mở ở trong khoảng start port - end port thì cần xoá nó đi

Mở powershell quyền Administrator lên

net stop winnat
netsh interface ipv4 delete excludedportrange protocol=tcp startport=2972 numberofports=100
net start winnat

Với startport và numberofport các bạn tự định nghĩa nhé. See you.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Debug siêu nhanh dành cho người mới

Hướng dẫn debug siêu nhanh chỉ trong vòng 5 phút. Đây là kĩ năng quan trọng mà ai theo ngành cũng cần biết. Nếu bạn đã lâu không dùng tới debugger, hãy xem qua bài viết này để ôn lại nhé. Ok bắt đầu thôi.

0 0 21

- vừa được xem lúc

[Laravel initial settings] - Best Packages & Tools for Development

Ai trong chúng ta cũng đều mong muốn code chúng ta viết ra phải chất lượng, hạn chế ít nhất bug có thể, luôn biết sử dụng những tools hay các packages thần thánh để cải thiện hiệu suất làm việc của mì

0 0 20

- vừa được xem lúc

Phức tạp hóa vấn đề: Làm sao để debug?

Phức tạp hóa vấn đề: Làm sao để debug. .

0 0 23

- vừa được xem lúc

Laravel DebugBar

1. Giới thiệu.

0 0 31

- vừa được xem lúc

Debug testing a nodejs app with visual code

Chắc hẳn khi viết test nhiều bạn sẽ chỉ cho test chạy và đôi khi không biết lỗi bắn ra ở đâu. Bài viết này mình sẽ hướng dẫn các bạn debug trong quá trình testing.

0 0 31

- vừa được xem lúc

Debug NodeJS app using visual code

Debug nodejs app với Visual Studio Code. Trong bài viết này mình sẽ hướng dẫn debug nodejs app với thư viện ExpressJS.

0 0 25