11/08/2018, 20:55

Cài đặt server/VPS để chạy được cả PHP và Rails

Mục đích: để tận dụng tối đa server, như mình thì là để đỡ tốn tiền :)) Mình chỉ định thuê 1 cái VPS, nhưng vừa muốn nó có thể host được 2 cái blog wordpress của mình. Bên cạnh đó cũng muốn nó có thể chạy được app Rails của mình nữa. Kết quả mong muốn: sau khi setup, các app sẽ chạy ngon như ...

Mục đích: để tận dụng tối đa server, như mình thì là để đỡ tốn tiền :)) Mình chỉ định thuê 1 cái VPS, nhưng vừa muốn nó có thể host được 2 cái blog wordpress của mình. Bên cạnh đó cũng muốn nó có thể chạy được app Rails của mình nữa.

Kết quả mong muốn: sau khi setup, các app sẽ chạy ngon như trên môi trường production, các domain/sub-domain chỉ cần point thẳng đến IP của server, sau đó server sẽ phân giải để vào app gắn với domain/sub-domain đó.

  • Môi trường mình đang thực hiện bài hướng dẫn này là server Ubuntu 14.04 LTS x64. Các phiên bản sau này chắc sẽ không có thay đổi quá nhiều.
  • Để đơn giản hóa phần cài đặt mình sẽ coi như bạn đã đang đăng nhập vào server với user root.

Setup Rails server với Apache2 và Passenger

Update hệ thống và cài đặt cái gói build cơ bản (phục vụ cho việc build Passenger về sau)

apt-get update
apt-get upgrade
apt-get install build-essential

Cài đặt Ruby

Mình sẽ dùng RVM để quản lý phiên bản Ruby trên server cho dễ, hơn nữa nó sẽ giúp bản có thể deploy được nhiều ứng dụng Rails khác phiên bản ruby một cách dễ dàng. Nếu bạn nào chưa biết thì có thể tham khảo tại rvm.io

  • Cài RVM bash curl -sSL https://rvm.io/mpapis.asc | gpg --import - curl -sSL https://get.rvm.io | bash -s stable Thoát server và ssh vào server lại để có thể bắt đầu dùng được RVM
  • Cài Ruby (bạn nên xem bản mới nhất bây giờ là bao nhiêu để cài tại trang chủ của ruby, vào thời điểm bài viết này là Ruby 2.2.2) bash rvm install 2.2.2
  • Chọn phiên bản ruby hiện tại làm mặc định cho hệ thống bash rvm use 2.2.2 --default
  • Kiểm tra lại một lần nữa xem Ruby đã được cài đặt thành công chưa bash ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

Cài đặt Apache2 và Passenger

  • Cài Apache2 bash apt-get install apache2
  • Cài đặt Passenger ```bash passenger-install-apache2-module

Lưu ý: khi trong quá trình cài đặt chương trình sẽ hỏi ngôn ngữ bạn muốn cài đặt, trong đó Ruby đã được chọn sẵn, các bạn chỉ cần nhấn Enter. Sau đó chương trình có thể sẽ yêu cầu bạn tự cài đặt các package còn thiếu. Passenger Installer sẽ viết ra các câu lệnh cụ thể giúp bạn cài các package còn thiếu đó, bạn chỉ cần cứ copy và paste lại vào terminal và ấn enter.
Sau khi đã cài hết các package theo hướng dẫn, các bạn chạy lại:

passenger-install-apache2-module

Nếu mọi package đã đầy đủ thì bạn có thể đi nhâm nhi 1 tách trà đợi quá trình compile và cài đặt nốt.

  • Config Apache với Passenger sau khi đã cài đặt xong Passenger

Sau khi cài xong Passenger ở bước trên, Passenger Installer sẽ yêu cầu bạn phải thêm một vài dòng vào file config của Apache để Apache có thể load module Passenger lên được. Theo như hướng dẫn trên trang chủ của Passenger thì cách làm sau đây sẽ là tốt nhất.

- Tạo file /etc/apache2/mods-available/passenger.load và copy dòng có đoạn LoadModule... .../mod_passenger.so vào file này (dòng này được cung cấp sau khi bạn cài xong Passenger)
- Tạo file /etc/apache2/mods-available/passenger.conf và copy các dòng còn lại, bao gồm từ <IfModule mod_passenger.c> đến </IfModule> (dòng này được cung cấp sau khi bạn cài xong Passenger)

Như của mình thì 2 file này như sau:

/etc/apache2/mods-available/passenger.load

LoadModule passenger_module /home/root/.rvm/gems/ruby-2.2.2/gems/passenger-5.0.14/buildout/apache2/mod_passenger.so

/etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
     PassengerRoot /home/deploy/.rvm/gems/ruby-2.2.2/gems/passenger-5.0.14
     PassengerDefaultRuby /home/deploy/.rvm/gems/ruby-2.2.2/wrappers/ruby
     PassengerMaxPoolSize 10
</IfModule>

Sau khi chắc chắn đã tạo xong 2 file trên có nội dung đúng như Passenger yêu cầu, các bạn chạy lệnh sau đây để Apache load cái module Passenger các bạn vừa tạo lên

a2enmod passenger

Về cơ bản, đến đây các bạn đã cài xong server để có thể chạy được app Rails, tiếp theo các bản chỉ cần config file VirtualHost của Apache để bảo với apache biết app Rails của bạn để ở đâu, và domain/sub-domain nào sẽ được gắn với app đó.

Config directory chứa app Rails và gắn vào domain/sub-domain các bạn muốn

  • Các bạn có thể tạo 1 file với tên bất kì trong thư mục /etc/apache2/sites-enabled, như mình thì cứ mỗi 1 app Rails/PHP mình sẽ tạo 1 file ở đây, sau này mình muốn gỡ app nào đó đi mình chỉ cần xóa file đó là được.
  • Ví dụ với app Rails của mình gắn với domain: ruby.long.rocks, mình sẽ tạo file có tên là: 001-ruby.long.rocks.conf có nội dung như sau: <VirtualHost *:80> ServerName ruby.long.rocks DocumentRoot /home/root/mania-rails-test/public RailsEnv production <Directory /home/root/mania-rails-test/public> Allow from all Options -MultiViews Require all granted </Directory> </VirtualHost> ` Giải thích các chỉ thị trong file này
  • VirtualHost *:80: bạn đang chỉ định rằng app này có thể được truy cập từ bên ngoài qua cổng 80
  • ServerName ruby.long.rocks: đây chính là tên miền mà bạn muốn gắn với app Rails này
  • DocumentRoot /home/root/mania-rails-test/public: đây là nơi để bạn define đường dẫn tới app Rails của bạn, và theo convention của Passenger thì sẽ là: $RAILS_ROOT_PATH + /public. Ví dụ app Rails của mình đặt tại /home/root/mania-rails-test/. Thì mình sẽ để là /home/root/mania-rails-test/public
  • RailsEnv production Môi trường khi chạy app Rails này
  • Tại thẻ Directory các bạn cũng để đường dẫn tới app Rails của mình giống như DocumentRoot
  • Các phần còn lại trong thẻ Directory các bạn giữ nguyên, chúng ta sẽ nói về phần này sau.

Bây giờ các bạn có thể upload app Rails của mình lên 1 folder nào đó trên Server và trỏ đường dẫn + domain name đúng với mong muốn trong file config VirtualHost ở trên sau đó khởi động lại apache server để thấy hiệu lực

service apache2 restart

Setup PHP/MySQL

Mọi việc bây giờ đã đơn giản hơn nhiều, cài đặt PHP và MySQL như sau

apt-get install mysql-server php5-mysql

Khởi động lại apache2

service apache2 restart

Bây giờ bạn có thể tạo 1 file php tại thư mục /var/ww/html/ để kiểm tra xem php đã được cài thành công chưa. Để tạo file tại /var/ww/htm/ các bạn gõ

nano /var/www/html/phpinfo.php

Gõ vào đoạn sau

<?
  phpinfo();
?>

Nhấn tổ hợp phím Ctrl + X, điền chữ Y (để đồng ý save file) và nhấn Enter.

Bây giờ bạn có thể kiểm tra thành quả vừa làm bằng cách vào địa chỉ:
http://<ip của server bạn>/phpinfo.php

Nếu bạn thấy hiện lên một trang thông báo màu tím tím của PHP và chứa một loạt thông tin phiên bản PHP và các thông số của server thì bạn đã cài đặt thành công rồi đó :)

Giờ bạn đã có một server có đủ khả năng để chạy app Rails và cả PHP một cách ổn định. Tuy nhiên vẫn còn rất nhiều thứ để các bạn có thể đưa được app Rails từ môi trường development lên môi trường Production. Và vì việc đó không thuộc phạm vi của bài viết này nên mình sẽ giới thiệu các bạn vào thời gian sắp tới: Cách deploy app Rails lên server bằng Mina

Các link dưới này rất hữu ích trong lúc các bạn setup và gặp phải một vấn đề khó khăn gì đó, ngoài ra mình cũng đưa ra cả những link giúp các bạn setup php/mysql để sao quản lý cho tốt hơn (các bài viết từ Digital Ocean)

https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html
https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-12-04
https://www.digitalocean.com/community/tutorials/a-basic-mysql-tutorial
https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql
http://askubuntu.com/questions/460837/mcrypt-extension-is-missing-in-14-04-server-for-mysql/477608#477608

Các bạn có vấn đề gì có thể hỏi qua đây bằng cách comment vì mình sẽ check thường xuyên và nếu các bạn có nhu cầu setup server/VPS để chạy website thì mình có thể hỗ trợ.

Happy hacking!

0