Thứ Năm, 31 tháng 1, 2019

Nâng cấp lên PHP 7.x trong Ubuntu

Trong bài ta sẽ nâng cấp từ PHP 5.x lên PHP 7.x trong Ubuntu 14.04 và xài Apache
Thực hiện các bước sau :

1. Thêm PPA (Personal Package Archive) cho gói PHP 7.2, Ondřej Surý phát triển gói PHP cho Debian và PPA cho PHP 7.x trên Ubuntu :

$ sudo add-apt-repository ppa:ondrej/php

Nếu gặp lỗi :
sudo: add-apt-repository: command not found

thì cài đặt software-properties-common như sau :

$ sudo apt-get install -y software-properties-common


2. Cập nhật thông tin gói trên máy (local package cache) :

$ sudo apt-get update


3. Nâng cấp mod_php dùng trong Apache để chạy mã php :

$ sudo apt-get install php7.2


4. Kiểm tra phiên bản PHP vừa cài đặt :

$ php -v


Cho output như sau :
PHP 7.2.14-1+ubuntu14.04.1+deb.sury.org+1 (cli) (built: Jan 13 2019 10:33:56) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

    with Zend OPcache v7.2.14-1+ubuntu14.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies


5. Cài đặt thêm một số gói thông dụng nếu cần thiết, chẳng hạn :

$ sudo apt-get install php7.2-cli php7.2-common libapache2-mod-php7.2 php7.2 php7.2-mysql

$ sudo apt-get install php7.2-mbstring


6. Cập nhật cấu hình Apache với mod_php dùng gói vừa nâng cấp :

$ sudo a2dismod php5

$ sudo a2enmod php7.2


7. Khởi động lại Apache :

$ sudo service apache2 restart


8. Kiểm tra phiên bản PHP mà máy chủ web dùng bằng cách tạo một tập tin info.php trong document root:

$ sudo nano /var/www/html/info.php


Điền nội dung tập tin info.php :
<?php

phpinfo();

?>


Kiểm tra thông tin phiên bản và cấu hình PHP dùng trong máy chủ với đường dẫn sau xem có đúng là dùng phiên bản vừa cập nhật :
http://server_domain_name_or_IP/info.php

9. Chạy ứng dụng PHP mà ta phát triển để kiểm thử, nếu có vấn đề, xem lỗi trong log :

$ sudo cat /var/log/apache2/error.log


Đôi khi ứng dụng không chạy do thiếu một thư viện, ta có thể tìm và cài đặt thư viện tương ứng còn thiếu cho phiên bản PHP vừa cài đặt trên máy. Ví dụ tìm và cài đặt thư viện xmlrpc cho PHP 7.2 như sau :

$ apt-cache search php | grep xmlrpc

$ sudo apt-get install php7.2-xmlrpc

Sau đó, khởi động lại Apache :

$ sudo service apache2 restart


10. Nếu muốn quay trở lại dùng phiên bản php 5.5 :

$ sudo a2dismod php7.2

$ sudo a2enmod php5


Sau đó, khởi động lại Apache :

$ sudo service apache2 restart

Thứ Tư, 30 tháng 1, 2019

Cài đặt và dùng Docker trên Ubuntu 14.04

Ngắn gọn về Docker
Khi bạn phát triển một ứng dụng, bạn cần cung cấp các thư viện, máy chủ web, cơ sở dữ liệu... để mã của bạn có thể hoạt động. Đôi khi có những tình huống ứng dụng mà bạn triển khai chạy tốt trên một số máy nhưng trên một số máy khác thì không.

Vấn đề này có thể được giải quyết bằng cách cô lập ứng dụng và làm cho nó độc lập với hệ thống mà nó chạy trên đó. Docker là một giải pháp để thực hiện việc này.

Docker là một công cụ mã nguồn mở cho phép thực hiện việc phát triển, triển khai và chạy một ứng dụng bên trong một bộ chứa phần mềm (sofware container).


Một số thuật ngữ

* Hình ảnh (image): là một gói thực thi bao gồm tất cả những thứ cần thiết để cho một ứng dụng chạy, tức : mã nguồn, môi trường hoạt động (runtime), thư viện, biến môi trường, file cấu hình...

* Bộ chứa (container): là một thực thể (instance) của image trong đó chứa ứng dụng cần sử dụng. Nó luôn luôn được khởi động từ image. Bộ chứa có thể đưa ra các cổng (port) và volumes để tương tác với các bộ chứa khác và tương tác với môi trường ngoài bộ chứa.

* volume : có thể xem như một thư mục chia sẻ. Volume được khởi tạo khi bộ chứa được hình thành. Nó được dùng để lưu dữ liệu và độc lập với vòng đời của bộ chứa.

* Registry : là máy chủ lưu giữ các hình ảnh docker. Nó tương đương với Github, bạn có thể kéo (pull) một hình ảnh từ registry xuống và triển khai (deploy) trên máy bạn và có thể đẩy (push) lên registry hình ảnh tạo trên máy bạn.


Docker khác với máy ảo (virtual machine) ra sao?

Máy ảo dùng thêm các hệ điều hành bên trên hệ điều hành của máy chứa máy ảo, do đó nó đòi hỏi nhiều tài nguyên hơn ứng dụng cần, thêm nữa là boot chậm.

Docker chia sẻ lõi hệ điều hành giữa các bộ chứa và chạy như những tiến trình riêng lẻ trên hệ điều hành chứa nó.


Cài đặt Docker trên Ubuntu 14.04

Để dùng Docker trong Ubuntu 14.04 ta tải và cài đặt gói docker.io như sau :

$ sudo apt-get update

$ sudo apt-get -y install docker.io


Sau khi cài đặt xong docker, ta tạo đường dẫn tượng trưng để có thể gọi docker trực tiếp trong cửa sổ lệnh terminal :

$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker


Kiểm tra phiên bản docker cài đặt :

$ sudo docker version


Thử chạy chương trình hello world với docker để kiểm tra

$ sudo docker run hello-world

* docker run là lệnh chạy một bộ chứa.
* hello-world là một hình ảnh mà bạn chạy. Ở đây là hình ảnh của ứng dụng hiển thị dòng chữ "Hello world". Khi bạn chỉ định một hình ảnh trong dòng lệnh này, đầu tiên Docker sẽ tìm hình ảnh này trên Docker host của bạn. Nếu hình ảnh này chưa có trên máy, nó sẽ được kéo xuống (pull) từ public image registry tức Docker Hub
* Dòng lệnh trên đơn thuần hiển thị "Hello world" rồi kết thúc.

Nếu chương trình chạy hiển thị không lỗi thì việc cài đặt docker hoàn thành.

Lệnh khởi động và tắt docker :

$ sudo start docker

$ sudo stop docker


Để tránh dùng root user (tức khỏi gần gõ sudo trước docker), ta tạo nhóm docker và thêm người dùng vào nhóm vì người dùng trong nhóm docker có cùng quyền như root user :

$ sudo usermod -aG docker <username>



Thay thế <username> bằng người dùng muốn thêm vào chẳng hạn :

$ sudo usermod -aG docker toan


Kích hoạt việc thêm nhóm này :

$ newgrp docker



Kiểm tra việc thêm nhóm này thành công hay không bằng cách dùng docker không cần phải gõ thêm sudo đằng trước lệnh :

$ docker run hello-world
$ docker -v
$ docker version 

Đôi khi cần reboot để việc cập nhật này thành công

Tham khảo về việc cài đặt Docker trên các phiên bản Ubuntu khác tại đây : https://docs.docker.com/install/linux/docker-ce/ubuntu/

Các lưu ý sau khi cài đặt Docker trên Ubuntu nếu nó không hoạt động : https://docs.docker.com/install/linux/linux-postinstall/

Tham khảo :
https://docs.docker.com/engine/reference/commandline/docker/


Ví dụ dùng bộ chứa docker để chạy php7cc (PHP 7 Compability Checker) 

Khi ta muốn chuyển một ứng dụng PHP dùng phiên bản cũ lên phiên bản PHP 7, ta cần phải cập nhật mã của ứng dụng cho tương thích với PHP 7. PHP7cc (PHP 7 Compatibility Checker) giúp ta làm việc này.

Ứng dụng này sẽ phân tích các tập tin php và thông báo cho ta các chỗ cần chỉnh sửa dưới dạng các warning (màu vàng) hoặc error (màu đỏ). Nó cũng cho biết các lỗi cú pháp có trong mã nguồn.

Tham khảo dự án php7cc tại đây : https://github.com/sstalle/php7cc

Thay vì tải về, cài đặt và dùng ứng dụng này, ta sẽ dùng một bộ chứa docker để xài một hình ảnh docker của ứng dụng được tạo sẵn tại đây : https://hub.docker.com/r/ypereirareis/php7cc/


Ta chỉ việc dùng bộ chứa docker để xài ứng dụng php7cc đã được cài đặt sẵn (tiết kiệm cho ta việc tải ứng dụng này về và cài trên máy) với cú pháp sau :

$ docker run -it --rm -v $(pwd):/app ypereirareis/php7cc php7cc <path to source to verify>

* -t flag (--tty) gọi một pseudo-tty hoặc terminal bên trong bộ chứa.
* -i flag (--interactive) cho phép thực hiện kết nối tương tác bằng cách thu nhận standard input (STDIN) của bộ chứa.
* -v flag  (--volume) gắn và tạo một volumn.
* -rm flag tự động xóa bộ chứa một khi thoát tiến trình (process). Mặc định, bộ chứa không bị xóa và nó tồn tại khi ta giữ shell session và kết thúc khi ta ra khỏi session

thay <path to source to verify> bằng đường dẫn tới thư mục chứa mã nguồn cần kiểm tra tính tương thích với PHP 7, chẳng hạn :

$ docker run -it --rm -v $(pwd):/app ypereirareis/php7cc php7cc ./src