Đối với các bạn chuyên làm mảng offshore hay outsource thì chắc hẳn ai cũng hiểu cảm giác nhàm chán vì mỗi dự án lại phải tạo virtual host cho dự án mới. Đầu tiên là cấu hình virtual host trong file vhost, tiếp đến vào file hosts để thêm domain ảo, rồi restart lại apache.
Dù cho làm trên môi trường nào bạn đều phải trải qua những thao tác này. Hôm nay mình sẽ hướng dẫn các bạn cách tạo virtual host một cách tự động chỉ với một dòng lệnh duy nhất, rút ngắn thời gian cho những thao tác lặp đi lặp lại.
Ở đây mình chỉ hướng dẫn cho các bạn tạo trên môi trường linux (Ubuntu) thôi nhé, các bạn có thể ứng dụng để làm trên window cũng được với điều kiện các bạn phải biết chút ít về ngôn ngữ Windows Batch Script.
– Đầu tiên bạn tạo một file text tên là virtual để ở đâu cũng được và thêm nội dung như sau:
#!/bin/bash if [ "$(whoami)" != 'root' ]; then echo $"You have no permission to run $0 as non-root user. Use sudo" exit 1; fi server=$1 docroot=$2 database=$3 if [ -z "$server" ] || [ -z "$docroot" ] || [ -z "$database" ]; then echo "Command valid is: sudo virtual [server-name] [docroot] [database-name]" exit 1; fi sitesAvailable="/etc/apache2/sites-available/" sitesAvailabledomain=$sitesAvailable$server.conf if [ -e $sitesAvailabledomain ]; then echo "This domain already exists. Please Try Another one" exit 1; fi sudo touch $sitesAvailabledomain echo "<VirtualHost *:80>" >> $sitesAvailabledomain echo " ServerName $server" >> $sitesAvailabledomain echo " ServerAdmin webmaster@localhost" >> $sitesAvailabledomain echo " DocumentRoot /var/www/html/$docroot" >> $sitesAvailabledomain echo " ErrorLog /var/www/html/error.log" >> $sitesAvailabledomain echo " SetEnv DB_HOST \"localhost\"" >> $sitesAvailabledomain echo " SetEnv DB_USER \"root\"" >> $sitesAvailabledomain echo " SetEnv DB_PASS \"\"" >> $sitesAvailabledomain echo " SetEnv DB_NAME \"$database\"" >> $sitesAvailabledomain echo " SetEnv BASE_URL \"http://$server/\"" >> $sitesAvailabledomain echo "</VirtualHost>" >> $sitesAvailabledomain echo "127.0.0.1 $server" >> /etc/hosts sudo a2ensite $server.conf sudo service apache2 reload echo "Server running in http://$server/"
Ở điều kiện đầu tiên là kiểm tra xem câu lệnh có được chạy với quyền `sudo` hay không vì trong quá trình tạo virtual host cần phải tạo file và thêm nội dung vào file hosts nếu bạn không chạy dưới quyền `sudo` thì câu lệnh sẽ không hoạt động được, nếu không thì dừng chương trình và thông báo lỗi:
if [ "$(whoami)" != 'root' ]; then echo $"You have no permission to run $0 as non-root user. Use sudo" exit 1; fi
Tiếp theo là lấy các biến đi theo lệnh, thứ tự các biến do các bạn quy định, ở đây mình quy ước biến đầu tiên là `serve
r` là tên của domain ảo mà bạn sẽ đặt cho dự án ví dụ `wordpress.dev`, tiếp theo `docroot` là thư mục gốc của dự án, cuối cùng là tên `database`.
server=$1 docroot=$2 database=$3
Đoạn tiếp theo là kiểm tra xem các biến yêu cầu có thiếu biến nào không nếu thiếu thì dừng chương trình và thông báo lỗi:
if [ -z “$server” ] || [ -z “$docroot” ] || [ -z “$database” ]; then echo “Command valid is: sudo virtual [server-name] [docroot] [database-name]” exit 1; fi
Khai báo đường dẫn cho file config virtual host và tên file config là tên của url mà bạn nhập ở biến server luôn, để khi bạn cần thay đổi nội dung gì thì vào tìm sẽ dễ dàng hơn:
sitesAvailable=”/etc/apache2/sites-available/” sitesAvailabledomain=$sitesAvailable$server.conf
Kiểm tra xem file config virtual host đã tồn tại chưa, nêú file đã tồn tại tức là domain ảo này đã được sử dụng rồi:
if [ -e $sitesAvailabledomain ]; then echo “This domain already exists. Please Try Another one” exit 1; fi
Tạo file config bằng dòng lệnh dưới đây:
sudo touch $sitesAvailabledomain
Tiếp đến các lệnh `echo`
để đẩy nội dụng vào file config và file hosts, các bạn có thể chỉnh lại nội dung của file config nhé, như DocumentRoot, file log, và các biến môi trường.
sudo a2ensite $server.conf sudo service apache2 reload echo “Server running in http://$server/”
3 dòng lệnh cuối để khởi động virtual host mà bạn vừa tạo, sau đó reload lại apache và in thông báo server hiện tại của virtual host.
– OK vậy là xong, lưu file lại rồi copy file này vào thư mục /bin và set quyền thực thi cho file này nhé:
sudo cp virtual /bin && sudo chmod +x /bin/virtual
– Để thử lệnh bạn clone một dự án nào đó rồi chạy lệnh sau để tạo virtual host nhé (ví dụ mình có một dự án tên là myblog nằm trong thư mục wordpress và tên database là blog):
sudo virtual myblog.dev wordpress blog
Nếu thấy kết quả như dưới đây là bạn đã thành công rồi.
Chúc các bạn thành công!!!