Categories
Chia sẻ

Cài Supervisor và cấu hình để chạy queue cho Laravel trên CentOs 7

Cài Supervisor trên CentOs 7 step by step:

easy_install supervisor

 

yum install supervisor

 

Sửa file cấu hình để chạy queue:

vi /etc/supervisord.conf

Cấu hình:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/app.com/public_html/artisan queue:work --sleep=1 --tries=3 --timeout=120
autostart=true
autorestart=true
user=nginx
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/app.com/public_html/worker.log

 

Cho nó start cùng sv:

systemctl enable supervisord

 

Restart service:

systemctl restart supervisord

 

Categories
Chia sẻ

Mã hóa thông tin cấu hình của ứng dụng Laravel

documentó una actividad antioxidante temporal de Capparis spinosa y también mostró https://vgres.net/compra-cialis-soft-sinreceta.html flavonoles y pigmentos hidroxicinámicos como el principal antioxidante de Capparis spinosa. En combinación con las invenciones de análogos de fármacos, por lo tanto, es fuerte que haya más de tres tumores malignos primarios.
Laravel sử dụng cấu hình biến môi trường (environment variables) nhờ thư viện DotEnv, nó cực kỳ linh động và dễ sử dụng cho phép ta dễ dàng cấu hình và chuyển đổi giữa các môi trường … Nhưng liệu nó có an toàn? Các biến môi trường trong PHP hoàn toàn có thể lộ ra ngoài:

Hãy thử show phpinfo() trong ứng dụng Laravel của bạn, bạn có thể tìm thấy các thông tin cấu hình trên.

 

Cách mà tôi mã hóa thông tin cấu hình của ứng dụng Laravel bao gồm 2 việc:

  • Tạo một secret key và lưu nó vào ứng dụng
  • Lưu các cấu hình ứng dụng dưới dạng đã hóa dựa vào secret key ở trên

Note: Trong phần thực hiện có sử dụng một tính năng của Laravel là Tinker. Tinker là một tính năng ít được biết đến trong Laravel artisan giúp bạn nhanh chóng đọc dữ liệu ngay trong project của mình. Tinker cho phép chúng ta tương tác trực tiếp với ứng dụng của mình thông qua các lệnh như stop() hay dd() thậm chí là cả print_r() mà không cần thao tác qua các bước như tạo Routes, Model, Controller, …

Bước 1: Vào Tinker tạo một secret key và lưu vào ứng dụng

D:xampphtdocslaravel>php artisan tinker
>>> IlluminateSupportStr::random(16);
=> "65TwDjDRWfwz3auF"

Lưu key vừa tạo ra vào config/env.php:

<?php
return [
'key' => '65TwDjDRWfwz3auF'
];

 

Bước 2: Tiếp tục sử dụng Tinker mã hóa tất cả các biến cấu hình mà bạn muốn. Ở ví dụ của tôi, tôi sẽ mã hóa 3 thông tin ứng dụng của tôi trên máy local bao gồm:

DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=123456

như sau:

# khởi tạo Encrypter với key đã tạo vào lưu ở trên
>>> $c = new IlluminateEncryptionEncrypter(config("env.key"));
=> IlluminateEncryptionEncrypter {#655}

# mã hóa 3 thông tin trên với tiền tố "ENC:"
>>> "ENC:". $c->encrypt("laravel_db");
=> "ENC:eyJpdiI6IncxN0M5...NyJ9"

>>> "ENC:". $c->encrypt("root");
=> "ENC:eyJpdiI6ImM2Ujc...ifQ=="

>>> "ENC:". $c->encrypt("123456");
=> "ENC:eyJpdiI6ImhcL05...In0=="

Note: Nếu bạn gặp lỗi RuntimeException with message ‘The only supported ciphers are AES-128-CBC and AE
S-256-CBC with the correct key lengths.’ khi khởi tạo Encrypter hãy tạm thoát Tinker và xóa config cache rồi tiếp tục

>>> exit
D:xampphtdocslaravel>php artisan config:clear
=> Configuration cache cleared!

 

Bước 3: Lưu các thông tin đã mã hóa lại file .env

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=ENC:eyJpdiI6IncxN0M5...NyJ9
DB_USERNAME=ENC:eyJpdiI6ImM2Ujc...ifQ==
DB_PASSWORD=ENC:eyJpdiI6ImhcL05...In0==

 

Bước 4: Thêm vào đầu file bootstrap/app.php đoạn code sau để xử lý giải mã

$env = require __DIR__ . './../config/env.php';
$crypt = new IlluminateEncryptionEncrypter($env['key']);
$secEnv = [];

function secEnv($name, $fallback = '')
{
    global $crypt, $secEnv;
    if ( ! isset($secEnv[$name]) && env($name) && strpos(env($name), "ENC:") === 0)
    {
        $secEnv[$name] = $crypt->decrypt(substr(env($name), 4));
    }
    return isset($secEnv[$name]) ? $secEnv[$name] : env($name, $fallback);
}

 

Bước 5: Cuối cùng sử dụng secEnv(“ENV_NAME”, “fallback value”) ở bất kỳ đâu để truy cập biến môi trường đã mã hóa. Trong ví dụ đang xét là config/database.php

// ..
'connections' => [
    // ..
    'mysql' => [
        // ..
        'database' => secEnv('DB_DATABASE', ''),
        'username' => secEnv('DB_USERNAME', ''),
        'password' => secEnv('DB_PASSWORD', ''),
        // ..
    ],
],

 

 

Categories
Chia sẻ

Setup ứng dụng Laravel 5 chạy trên nhiều môi trường, tự động lấy cấu hình tương ứng

Mục đích như tiêu để đưa ra “Setup ứng dụng Laravel 5 chạy trên nhiều môi trường, tự động lấy cấu hình tương ứng“. Kịch bản đưa ra là chúng ta có một ứng dụng Laravel cần chạy ở 2 nơi :

  • Trên máy tính của developer (môi trường local)
  • Trên server chạy domain chính của ứng dụng (môi trương production)

Tất nhiên bạn cũng có thể deploy ứng dụng của mình ở nhiều nơi hơn so với ví dụ này.

 

Bước 1: Mở file .env và xóa rỗng nội dung sau đó thêm vào local hoặc production . Đây sẽ là biến mà bạn muốn chuyển sang môi trường khác.

 

Bước 2: Tạo 2 file .local.env.production.env nội dung giống với file .env lúc trước

 

Bước 3: Set biến môi trường mặc định cho từng file ở trên

Cho .local.env file: APP_ENV=local
Cho .production.env file: APP_ENV=production

 

Bước 4: Tạo file environment.php trong thư mục /app/bootstrap/ với nội dung

$env = $app->detectEnvironment(function(){
$environmentPath = __DIR__.'/../.env';
$setEnv = trim(file_get_contents($environmentPath));
if (file_exists($environmentPath))
{
$setEnv = trim(file_get_contents($environmentPath));
putenv('APP_ENV='.$setEnv);

$dotenv = new Dotenv\Dotenv(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
$dotenv->overload();
}
});

Đoạn mã trên sử dụng function php putenv để set APP_ENV và sửng dụng Dotenv package của vlucas, nó sẽ load ra một trong 2 file vừa tạo ở trên mà biết trong file .env khai báo

 

Bước 5: Gọi file environment.php trong bootstrap/app.php

require __DIR__.'/environment.php';

 

Bước 6: Tận hưởng thành quả, bạn có thể thay đổi các cấu hình trong 2 file .local.env.production.env tùy thích, trên máy tính của developer để nội dụng file .envlocal, trên server là production
Test thử bằng cách vào views/welcome.blade.php thay nội dung Laravel bằng:

Laravel - {{App::environment()}}

Kết quả:

Setup ứng dụng Laravel 5 chạy trên nhiều môi trường, tự động lấy cấu hình tương ứng