12/08/2018, 17:06

Write Linux Init Script

Như ở bài viết Managing services with update-rc.d mình đã giới thiệu cách sử dụng update-rc.d để cho một service script chạy khi khởi động. Hôm nay mình sẽ giới thiệu cách viết một service script đơn giản nhất (cũng đầy đủ chức năng cơ bản là start , stop , restart và status ). Chúng ta sẽ ...

Như ở bài viết Managing services with update-rc.d mình đã giới thiệu cách sử dụng update-rc.d để cho một service script chạy khi khởi động. Hôm nay mình sẽ giới thiệu cách viết một service script đơn giản nhất (cũng đầy đủ chức năng cơ bản là start, stop, restartstatus). Chúng ta sẽ viết service cho Unicorn nhé.

Nguyên liệu

Về phần nguyên liệu, chúng ta sẽ thử nghiệm luôn trên local cho nhanh (đỡ phải động chạm đến server hoặc đỡ phải cài cắm quá nhiều - nếu bạn dùng Docker).

Source code

Bạn có thể sử dụng ngay https://github.com/namnv609/test-deploy-ruby-v3 này của mình cho tiện nhé. Clone nó về máy và duplicate file config/unicorn/staging.rb thành config/unicorn/development.rb rồi sửa lại line 1 chỗ app_path cho phù hợp với đường dẫn của project.

Tiếp theo, bạn sửa lại nội dung của file config/database.yml ở phần default: và development: cho phù hợp là xong.

Nginx

Phần cài đặt này là để chúng ta access vào web thông qua socket của Unicorn với Nginx. Các bạn thực hiện theo các bước sau:

  1. Tạo một file cấu hình cho Nginx trong thư mục /etc/nginx/sites-available/, mình lấy tạm tên là sample_app và thêm nội dung sau (các bạn nhớ thay placeholder <Path to project foler> cho phù hợp):

    upstream test_deploy_v3 {
      server unix:<Path to project folder>/tmp/sockets/unicorn.sock fail_timeout=0;
    }
    
    server {
      listen 80;
      server_name sample-app.local;
      root <Path to project folder>/public;
    
      location ^~ /assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
      }
    
      location ~ ^/(robots.txt|sitemap.xml.gz)/ {
        root <Path to project folder>/public;
      }
    
      try_files $uri/index.html $uri @test_deploy_v3;
      location @test_deploy_v3 {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://test_deploy_v3;
      }
    
      error_page 500 502 503 504 /500.html;
      client_max_body_size 4G;
      keepalive_timeout 10;
    }
    
  2. Enable Nginx config bằng lệnh sau: sudo ln -s /etc/nginx/sites-available/sample_app /etc/nginx/sites-enabled

  3. Khởi động lại Nginx để áp dụng các cài đặt: sudo service nginx restart

  4. Thêm sample-app.local vào file /etc/hosts để có thể truy cập vào ứng dụng thông qua domain đã cài đặt với Nginx bằng cách mở file /etc/hosts và thêm dòng sau:

    # /etc/hosts
    127.0.0.1   sample-app.local
    

Sau khi hoàn thành, bạn có thể thử truy cập vào địa chỉ http://sample-app.local. Nếu kết quả như bên dưới là bạn đã thành công

Tạm thời bạn chưa cần quan tâm đến lỗi xuất hiện nhé. Vì chúng ta chưa khởi động Unicorn. Vậy là đã xong phần chuẩn bị nguyên liệu, giờ chúng ta bắt tay vào viết service nào.

Viết script

Bây giờ chúng ta đi vào chi tiết viết một init script đơn giản nhé. Việc đầu tiên chúng ta cần làm là tạo một file có thể thực thi (executable) trong thư mục /etc/init.d/, mình lấy tên là unicorn cho nó nhanh gọn             </div>
            
            <div class=

0