win-to-linux-01-trungquandev-05

Window sang Linux – Ngày 3

Xin chào tất cả các bạn, tiếp tục series về việc chuyển đổi hệ điều hành, hôm nay mình sẽ viết bài thứ 3 và cũng là bài cuối luôn, trong bài này mình sẽ tập trung vào việc cài đặt môi trường phát triển cho một web developer.

– Bài số 1 Ánh mắt chạm nhauhttps://trungquandev.com/tu-window-sang-linux-ngay-1/

– Bài số 2 Ngại ngùng nắm tayhttps://trungquandev.com/tu-window-sang-linux-ngay-2/

Những nội dung có trong bài này:

1. Install LAMP: Linux – Apache – Mysql – PHP

2. Install PHP Myadmin

3. Phân quyền cho các thư mục

4. Install Composer

5. Cấu hình Virtual Host, Virtual Domains


1. Install LAMP: Linux – Apache – Mysql – PHP

Trước hết, mình nói qua một chút về thuật ngữ LAMP, nó là cụm từ viết tắt được dùng để chỉ việc sử dụng các phần mềm: LinuxApacheMysqlPHP (có thể là Perl hoặc Python nữa) để tạo ra một máy chủ web có khả năng chứa và phân phối các trang web động.

Ở trên Window thì chúng ta thường hay nghe tới các phần mềm như Xampp, Wampp, OpenServer, …vv. Chúng là những gói phần mềm mà đã được tích hợp sẵn apache, mysql, php, php myadmin…, chúng ta chỉ việt tải về rồi cài đặt và sử dụng. Trên Linux cũng có thể cài các gói phần mềm đó nhưng mình khuyên các bạn không nên làm thế, vì đã xác định sử dụng Linux thì nên tìm hiểu cài riêng từng thứ một để có kinh nghiệm, sau này các bạn cần cấu hình một con web server cũng sẽ dễ dàng hơn.

– Đầu tiên là cài Apache

sudo apt-get update

sudo apt-get install apache2

– Mysql

sudo apt-get install mysql-server

– PHP

sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

Kiểm tra PHP có tương thích với Apache hay không:

sudo service apache2 restart

Sau đó ra trình duyệt gõ localhost bạn sẽ thấy:

– Hiện tại, localhost đang trỏ đến thư mục /File System/var/www/html/index.php

– Mình mở terminal trong thư mục html sau đó tạo thêm một file mới để kiểm tra phiên bản php:

sudo nano trungquan.php 

– Nội dung file trungquan.php như thế này:

win-to-linux-03-trungquandev-02

– Sau đó Ctrl+X rồi chọn Yes để lưu lại. Quay lại trình duyệt gõ địa chỉ localhost/trungquan.php, kết quả như dưới đây:

win-to-linux-03-trungquandev-03


2. Install PHP Myadmin

sudo apt-get install phpmyadmin

Trong quá trình cài đặt, hệ thống sẽ hỏi bạn chọn webserver nào, chúng ta sẽ chọn apache2.

Tiếp theo sẽ yêu cầu bạn tạo mật khẩu cho tài khoản root khi đăng nhập php myadmin, bạn cứ dùng mật khẩu như đã tạo ở lúc cài Mysql là được.

Một bước nữa là mở file /etc/apache2/apache2.conf

sudo nano /etc/apache2/apache2.conf

Và thêm dòng này vào cuối file sau đó Ctrl +X lưu lại: Include /etc/phpmyadmin/apache.conf

Cuối cùng là khởi động lại Apache: sudo service apache2 restart

Mở trình duyệt truy cập vào localhost/phpmyadmin, nhập tài khoản là root và mật khẩu bạn vừa tạo là xong.

win-to-linux-03-trungquandev-04


3. Phân quyền cho các thư mục

Còn 1 vấn đề nữa mình gặp phải là khi mình copy source code cũ bên window vào trong /var/www/html thì không được, vì mặc định ban đầu Linux để phân quyền cho các thư mục trong File System là chỉ cho phép đọc (readonly), bây giờ mình cần lấy quyền chỉnh sửa nó, có 2 cách.

– Cách 1 là vào terminal ở chế độ root, bạn nào chưa biết vào root thì có thể xem bài 1 mình viết ở đây, khi này chúng ta đã ở trong root, có nghĩa là đã có full quyền. Rồi dùng câu lệnh copy trên linux cp -a /path/from /path/to để copy từ đâu đến đâu tùy bạn.

– Cách 2chmod (phân quyền) cho thư mục html ở trên kia có full quyền:

cd /var/www/

sudo chmod -R 777 html/


4. Install Composer

Bước 01: Cài đặt curl, php-cli, php-mbstring, git , unzip (cứ cho cả vào lệnh, cái nào cài rồi thì máy sẽ tự ignore):

sudo apt-get install curl php-cli php-mbstring git unzip

Bước 02: Dowload composer:

cd ~

curl -sS https://getcomposer.org/installer -o composer-setup.php

– Bước 03: Chạy lệnh php dưới để xác minh trình cài đặt mới nhất phù hợp với mã băm SHA-384 trên trang chủ của composer, các bạn có thể lấy mã SHA mới nhất từ trang này https://composer.github.io/pubkeys.html, và dán thay thế vào cái đoạn mình in đậm trong đoạn code dưới.

php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

* Nếu thấy Installer verified nghĩa là đã thành công bước này.

Bước 04: Cài đặt composer ở global.

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Bước 05: Sau khi xong ta có thể kiểm tra lại bằng: composer-v

Bước 06: Và sau này có thể update composer bằng câu lệnh: sudo composer self-update


5. Cấu hình Virtual Host, Virtual Domains

Một cái nữa mà mình khá thích làm đó là tạo tên miền ảo cho các project ở local, để khỏi phải gõ localhost/xoẹt xoẹt. Cũng như khi code ứng dụng web với Laravel, bình thường nếu không tạo virtual host, mình hay phải terminal câu lệnh php artisan serve và chạy localhost:8000 trên trình duyệt. Mỗi lần cần mở sang project Laravel khác, lại phải tắt cái cũ đi chạy lại ở cái project mới. Khá bất tiện.

– Đầu tiên tạo thư mục để test trong /www, giả sử mình tạo thư mục cv.tq chứa code trang cv online của mình

Mở terminal với quyền root, và sau đó di chuyển tới thư mục sites-available

cd /etc/apache2/sites-available

Hiển thị ra các site đang có sẵn: ls-l

Có một cái site mặc định là 000-default.conf, cái này là tập tin cấu hình mặc định mà khi các bạn gõ localhost thì chạy ra kết quả ấy. File này các bạn nên giữ nguyên nó, tốt nhất là đừng chỉnh sửa gì cả.

– Tạo một bản copy mới từ 000-default.conf, mục đích để tạo ra một tập tin cấu hình mới cho project, cụ thể ở đây là cái CV của mình.

cp 000-default.conf cv.tq.conf

– Chỉnh sửa file cv.tq.conf ta vừa tạo:

nano cv.tq.conf

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which arebạn
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

– Ở trên sẽ có một số thông tin mà chúng ta cần cấu hình lại:

  • ServerName: ở đây cần sửa lại thành domain của bạn, như ví dụ của mình là cv.tq,  bỏ dấu # ở trước đi nhé.
  • ServerAdmin: email của bạn cho domain này
  • DocumentRoot: đây là đường dẫn tới thư mục sẽ lưu trữ trang web mà bạn đã tạo ở trên, của mình là /var/www/cv.tq/public

– Sau khi chỉnh sửa, bạn sẽ có một tập tin cấu hình virtual host với nội dung như sau:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName cv.tq

        ServerAdmin webmaster@cv.tq
        DocumentRoot /var/www/cv.tq/public

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

– Tiếp tục ta thêm một tên miền vào file hosts:

Mở file host: nano /etc/hosts bạn sẽ thấy dòng 127.0.0.1 localhost

Thêm dòng này vào dưới dòng localhost trên: 127.0.0.1    cv.tq

Ctrl+X và lưu lại.

– Bật file cấu hình này lên: a2ensite cv.tq.conf

– Khởi động lại apache: service apache2 restart hoặc service apache2 reload

– Khi này chúng ta ra trình duyệt truy cập vào đường dẫn cv.tq là đã xong rồi đấy.

– Còn một vấn đề nữa với project Laravel là bạn phải Rewrite lại file .htaccess để bật chế độ mod lên, nếu không làm bước này thì bạn chỉ có thể truy cập được vào route index đầu tiên, còn lại các route tiếp theo sẽ bị lỗi như sau:

Not Found

The requested URL /your_slug was not found on this server.

– Cách fix: Đầu tiên chạy câu lệnh: a2enmod rewrite

– Sau đó ta vào file config apache2.conf tìm tất cả những chỗ nào có AllowOverride none chuyển hết thành AllowOverride All

nano /etc/apache2/apache2.conf

win-to-linux-03-trungquandev-05.png

Và cuối cùng khởi động lại apache: sudo service apache2 restart


Vậy là xong Series 3 bài hướng dẫn chuyển từ window sang linux của mình rồi. Nếu có chỗ nào sai sót, rất mong được sự góp ý từ các bạn.

Cảm ơn các bạn đã xem bài viết của mình!

Best Regards – Trung Quân – Green Cat

trungquandev-img-modal

Khóa học lập trình làm việc thực tế:

Nếu các bạn thấy bài viết của mình có ích thì hãy ủng hộ mình bằng cách tham khảo bài viết giới thiệu khóa học cực kỳ chất lượng và chính chủ dưới đây của mình nhé, cảm ơn các bạn ^^

nodejs-mongodb-messenger-realtime-course-trungquandev
Node.js và MongoDB - Xây dựng một ứng dụng Messenger trò chuyện trực tuyến.