Zsh

Zsh viết tắt của “Z Shell” là một shell nâng cao cho hệ thống Unix và Linux.

Nó được phát triển nhằm cung cấp các tính năng và khả năng cao hơn so với shell mặc định trên hầu hết các hệ thống Unix.

Zsh kết hợp những tính năng mạnh mẽ của các shell trước đó như Bash, Ksh và cung cấp nhiều tiện ích và khả năng tùy chỉnh.

Zsh Artisan

Zsh Artisan là một plugin hỗ trợ bạn trong việc chạy lệnh artisan trong dự án Laravel. Với tính năng auto-completion và có thể tự động mở tập tin được tạo bởi Artisan.

Bạn có thể tim hiểu thêm tại đây: https://github.com/jessarcher/zsh-artisan

Hướng dẫn cài đặt Zsh Artisan trong Docker

Create Dockerfile

Dockerfile là một tập tin văn bản không có phần mở rộng tập tin, chứa tất cả các lệnh mà người dùng có thể gọi trên dòng lệnh để tạo một Image.

Trong bài hướng dẫn này, tôi sử dụng Image webdevops/php-nginx-dev:8.2 để cài đặt plugin Zsh Artisan và nội dung Dockerfile của tôi như sau:

FROM webdevops/php-nginx-dev:8.2

# Install zsh, git, and curl
RUN apt-get update \
    && apt-get install -y zsh git curl

# Switch to the application user
USER application

# Install Oh-my-zsh for application user
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended

# Install Powerlevel10k theme
RUN git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /home/application/.oh-my-zsh/custom/themes/powerlevel10k

# Switch back to root
USER root

# Install zsh-artisan
RUN git clone https://github.com/jessarcher/zsh-artisan.git /home/application/.oh-my-zsh/custom/plugins/artisan

# Enable zsh-artisan plugin and set Powerlevel10k theme in .zshrc
RUN sed -i 's/^ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/' /home/application/.zshrc && \
    sed -i 's/plugins=(/plugins=(artisan /' /home/application/.zshrc && \
    echo 'POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true' >> /home/application/.zshrc

# Add alias for php artisan
RUN echo "alias artisan='php artisan'" >> /home/application/.zshrc

# Switch back to application user to apply changes
USER application

Sử dụng Dockerfile trong docker-compose.yml

version: "3"
services:
  manhdan:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: [example: manhdan]
    environment:
      - PHP_DISPLAY_ERRORS=1
      - PHP_DATE_TIMEZONE=Asia/Tokyo
      - WEB_DOCUMENT_ROOT=/app/public
      - COMPOSER_VERSION=2
    networks:
      - docker-net
    volumes:
      - ../httpdocs:/app
      - ./custom.conf:/opt/docker/etc/nginx/vhost.common.d/custom.conf
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.manhdan.tls=true"
      - "traefik.http.routers.manhdan.rule=Host(`manhdandev.com`)"
      - "traefik.http.routers.manhdan.entrypoints=websecure"
networks:
  docker-net:
    external: true

Build Container

Sau khi đã tạo xong Dockerfiledocker-compose.yml, chúng ta sẽ khởi tạo Container bằng lệnh sau:

docker compose up -d --build

Run Docker exec

Sau khi khởi tạo xong Container, chúng ta có thể sử dụng lệnh docker exec để khởi tạo một phiên làm việc tương tác mới trong Container.

Điều này cho phép chúng ta truy cập và tương tác trực tiếp với Container:

docker exec -ti -u 1000:1000 [container_name] /bin/zsh

Kết quả của công việc bạn đã làm đang chờ bạn khám phá!

Sau khi đã hoàn thành các bước trên, giờ là lúc để chúng ta sẽ cùng nhau khám phá thành quả công sức của mình.

Chúng ta cần phải vào thư thư mục chứa source Laravel bằng lệnh sau:

cd folder_laravel

Bạn hãy chạy lệnh sau để xem để xem thành quả của mình:

artisan + tab

Đây chính là thành quả của chúng ta sau khi thực hiện các bước ở phía trên 🤤🤤🤤🏆🍨🍨🍨.

CÓ THỂ BẠN QUAN TÂM

Laravel One to One Eloquent Relationship

Laravel One to One Eloquent Relationship

Mối quan hệ một-một là một mối quan hệ rất cơ bản. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách tạo dữ liệu và truy xuất dữ liệu bằng Eloquent Model. Trong hướng dẫn này, tôi sẽ tạo hai bảng là u...

Document Laravel API With OpenAPI (Swagger)

Document Laravel API With OpenAPI (Swagger)

Swagger là gì? Swagger là một Ngôn ngữ mô tả giao diện để mô tả các API RESTful được thể hiện bằng JSON. Swagger được sử dụng cùng với một bộ công cụ phần mềm mã nguồn mở để thiết kế, xây dựng, l...

Integrating CKFinder into CKEditor 5 in Laravel 11

Integrating CKFinder into CKEditor 5 in Laravel 11

CKEditor 5 CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

Laravel Change Expire Time Cookie Remember

Laravel Change Expire Time Cookie Remember

Vấn đề Đôi khi, trang web của bạn chỉ muốn người dùng sử chức năng remembering users  trong 7 ngày hoặc là 30 ngày chẳng hạn. Nhưng Authentication của Laravel không cung cấp cho chúng ta tùy chọn đ...

Laravel UI Password Reset Expired

Laravel UI Password Reset Expired

Trong thư viện laravel/ui, thì chức năng password reset dù cho token có hết hạn thì vẫn có truy cập vào trang password reset, đến khi bạn submit form thì mới thông báo là token đã hết hạn. Nhưng có mộ...

Defer in Laravel: Push Tasks to the Background

Defer in Laravel: Push Tasks to the Background

Deferred Functions trong Laravel Các phiên bản Laravel trước version 11, chúng ta thường sử dụng Queued Jobs cho phép thực hiện sắp xếp các tác vụ xử lý background . Nhưng đôi khi có những tác v...

Laravel View

Laravel View

View là gì? Đây là phần giao diện (theme) dành cho người sử dụng. Nơi mà người dùng có thể lấy được thông tin dữ liệu của MVC thông qua các thao tác truy vấn như tìm kiếm hoặc sử dụng thông qua các...

Laravel Custom Rules

Laravel Custom Rules

Trong quá trình phát triển website Laravel, mình cảm thấy hệ thống Validation của Laravel rất tuyệt vời, nó cung cấp đã cung cấp cho chúng ta một bộ quy tắc kiểm tra dữ liệu, mà trong các trường hợp b...

Laravel Artisan Console

Laravel Artisan Console

Ngoài các lệnh command mặc định của Laravel được cung cấp bởi Artisan, có rất nhiều tác vụ trong ứng dụng Laravel của bạn có thể được xử lý rất tốt bằng các lệnh command này. Nhưng đôi khi có nhiều tá...

ManhDanBlogs