1. Thiết lập code-server trên máy ảo Linux
Để tạo một môi trường phát triển mã nguồn có thể truy cập từ bất kỳ đâu, chúng ta sẽ bắt đầu bằng việc cài đặt code-server trên một máy ảo (VM) chạy Linux. code-server là một phiên bản Visual Studio Code chạy trên trình duyệt, cho phép bạn viết code mà không cần cài đặt VS Code cục bộ.
1.1. Tải và cài đặt code-server
Truy cập trang Releases của code-server trên GitHub để tìm phiên bản mới nhất phù hợp với kiến trúc hệ thống của bạn. Ví dụ, để tải phiên bản amd64:
wget https://github.com/coder/code-server/releases/download/vX.Y.Z/code-server_X.Y.Z_amd64.deb
(Hãy thay thế vX.Y.Z bằng số phiên bản mới nhất bạn tìm thấy.)
Sau khi tải về, sử dụng lệnh dpkg để cài đặt gói:
sudo dpkg -i code-server_X.Y.Z_amd64.deb
1.2. Cấu hình code-server
Để code-server tạo ra các tập tin cấu hình ban đầu, hãy chạy nó một lần. Bạn có thể nhấn Ctrl+C để dừng tiến trình sau khi nó đã khởi động thành công và hiển thị các thông tin cơ bản:
code-server
Bây giờ, hãy chỉnh sửa tập tin cấu hình chính của code-server, thường nằm tại ~/.config/code-server/config.yaml:
vim ~/.config/code-server/config.yaml
Thêm hoặc chỉnh sửa các dòng sau trong tập tin cấu hình để thiết lập địa chỉ lắng nghe và phương thức xác thực:
bind-addr: 0.0.0.0:8080 # Địa chỉ IP và cổng để code-server lắng nghe kết nối
auth: password # Phương thức xác thực bằng mật khẩu
password: YourStrongPasswordHere # Thay thế bằng mật khẩu an toàn của bạn
cert: false # Tắt chứng chỉ SSL/TLS tự ký (Tailscale sẽ xử lý mã hóa)
2. Chạy code-server trong nền với Screen
code-server chạy trực tiếp trong terminal, điều này không tiện nếu bạn muốn đóng terminal mà không dừng dịch vụ. Để giải quyết vấn đề này, chúng ta sử dụng công cụ screen để chạy các tiến trình trong một phiên làm việc riêng biệt, có thể tách rời và kết nối lại sau.
2.1. Cài đặt Screen
Nếu screen chưa được cài đặt, hãy thực hiện lệnh sau:
sudo apt install screen
2.2. Quản lý phiên làm việc
Để tạo một phiên screen mới và chạy code-server trong đó:
screen -S remote_dev_session
Bạn sẽ được chuyển đến một terminal mới. Tại đây, hãy chạy code-server:
code-server
Để "tách rời" (detach) khỏi phiên screen mà không làm dừng tiến trình code-server, nhấn tổ hợp phím Ctrl+A, sau đó nhấn D. Bạn sẽ quay lại terminal gốc của mình.
Để xem danh sách các phiên screen đang hoạt động:
screen -ls
Để quay lại một phiên screen đã tách rời (ví dụ, phiên có ID 12345):
screen -R 12345 # Thay 12345 bằng ID phiên thực tế của bạn
3. Kết nối an toàn với Tailscale
Tailscale là một dịch vụ VPN lưới (mesh VPN) giúp bạn xây dựng mạng riêng ảo (VPN) một cách dễ dàng giữa các thiết bị của mình, cho phép truy cập an toàn vào code-server trên VM từ bất kỳ đâu, như thể tất cả các thiết bị đều nằm trong cùng một mạng cục bộ.
3.1. Cài đặt Tailscale
Thêm kho lưu trữ của Tailscale vào hệ thống của bạn:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
Cập nhật danh sách gói và cài đặt Tailscale:
sudo apt-get update
sudo apt-get install tailscale
3.2. Kích hoạt và kết nối Tailscale
Để khởi động và đăng nhập vào Tailscale:
sudo tailscale up
Khi chạy lệnh này lần đầu tiên, một URL sẽ xuất hiện trên terminal. Bạn cần mở URL đó trên trình duyệt web, đăng nhập bằng tài khoản Tailscale của mình và cấp quyền cho máy ảo này. Sau khi ủy quyền thành công, máy ảo của bạn sẽ được gán một địa chỉ IP riêng trong mạng Tailscale của bạn.
Để kiểm tra địa chỉ IP Tailscale của máy ảo:
tailscale ip -4
Để dừng dịch vụ Tailscale (nếu cần):
sudo tailscale down
Sau khi cả code-server và Tailscale đều đã hoạt động, bạn có thể truy cập môi trường phát triển từ xa của mình. Từ một thiết bị khác cũng đã cài đặt và đăng nhập vào Tailscale, chỉ cần mở trình duyệt và nhập địa chỉ IP Tailscale của máy ảo cùng với cổng code-server (ví dụ: http://[IP_TAILSCALE_CỦA_VM]:8080).
4. Tự động khởi chạy dịch vụ khi VM khởi động
Để hệ thống hoạt động tự động mỗi khi máy ảo khởi động, chúng ta có thể tạo một script và thiết lập để nó chạy tự động.
4.1. Tạo script khởi động
Tạo một tập tin script, ví dụ ~/scripts/start_dev_services.sh:
#!/bin/bash
# Khởi động dịch vụ Tailscale và ghi log
sudo tailscale up &> /var/log/tailscale_startup_$(date +%Y%m%d%H%M%S).log
# Chờ một lát để Tailscale thiết lập kết nối hoàn chỉnh (tùy chọn)
sleep 5
# Khởi động code-server trong một phiên screen nền
# Tên phiên là 'remote_code_editor_session'
screen -dmS remote_code_editor_session bash -c 'code-server --config ~/.config/code-server/config.yaml'
Cấp quyền thực thi cho script:
chmod +x ~/scripts/start_dev_services.sh
4.2. Cấu hình tự động chạy
Để script này tự động chạy khi người dùng đăng nhập vào hệ thống, thêm đường dẫn của nó vào tập tin cấu hình shell của bạn (ví dụ: ~/.bash_profile cho Bash hoặc ~/.zprofile cho Zsh):
echo "~/scripts/start_dev_services.sh" >> ~/.bash_profile
# Hoặc nếu bạn dùng Zsh:
# echo "~/scripts/start_dev_services.sh" >> ~/.zprofile
Lưu ý quan trọng: Lệnh sudo tailscale up trong script có thể yêu cầu mật khẩu nếu bạn chưa cấu hình sudoers để cho phép chạy lệnh này mà không cần mật khẩu. Để script chạy hoàn toàn tự động, bạn cần chỉnh sửa tập tin /etc/sudoers để cho phép người dùng chạy tailscale up mà không cần mật khẩu. Hãy hết sức cẩn thận khi chỉnh sửa tập tin này.