여러 클라이언트 환경이 서버에 연결하는 메커니즘을 만들었습니다.

11425 단어 라라벨

소개



복수의 클라이언트 환경이, 특정의 서버에 접속하는 기구가 자주 있습니다.
예를 들면, WordPress나 Git(GitHub) 등이 있습니다.
더 말해 버리면, 그곳에 있는 웹 어플리케이션이 해당됩니다만, 지금 들었다 2개는, 클라이언트가 파일 구조를 평소부터 의식하고 있는 특징이 있습니다.

우선, WordPress는 이런 구조가 되고 있습니다.
현재 무수히 존재하는 WordPress 클라이언트의 경우 테마와 플러그인은 (광의로는) 하나의 서버이며 클라이언트에 동일한 정보를 제공합니다.


다음으로, Git과 GitHub의 관계도 간단하게 표현하면 이런 느낌이 듭니다.
Git에는 무수한 클라이언트가 있지만 WordPress와 마찬가지로 GitHub에는 서버가 하나 있습니다.


끔찍한 것 같지만,
이것을 모델로 다시 쓰면 이런 느낌이 듭니다.


이번에는 이것을 Laravel로 재현합니다.
이것을 Laravel로 재현하면 이렇게 됩니다.


이번 목적



여러 클라이언트 환경이 하나의 서버에 액세스하는 메커니즘을 만듭니다.
평범한 간단한 서버 - 클라이언트 관계입니다.

아래 준비



이번에는 다음 설정으로 진행합니다.
로컬 IP 주소의 환경 구축이 됩니다.


종류
IP 주소
데이터 저장 위치


서버
192.168.189.200
/show

클라이언트
192.168.189.101
/get

클라이언트
192.168.189.102
/get


Docker와 Laravel의 환경을 정돈합니다.
# Dockerのインストール
curl -fsSL https://get.docker.com/ | sh

# Laravelのインストール
curl -s "https://laravel.build/client" | bash

cd client
./vendor/bin/sail up -d

클라이언트 만들기


# コントローラの作成
./vendor/bin/sail artisan make:controller GetServerController
./app/Http/Controllers/GetServerController.php 가 작성되었으므로 편집합니다.

GetServerController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class GetServerController extends Controller
{
    public function index () 
    {
        /* ここでは試しにyuzukichi.jpのHTMLファイルを読み出しています */
        //$server_name = "https://yuzukichi.jp/get-docker.sh";
        $server_name = "192.168.189.200/show";
        return view('get_server', ['server'=> $server_name, 'data'=>$this->curl_test($server_name)]);
    }

    private function curl_test($url)
    {
        $conn = curl_init(); // cURLセッションの初期化
        curl_setopt($conn, CURLOPT_URL, $url); // 取得するURLを指定
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す。
        $res =  curl_exec($conn);
        curl_close($conn); //セッションの終了
        return htmlspecialchars($res);
    }
}

cURL 함수를 사용하여 외부 사이트의 파일에 액세스하여 값을 검색하는 형태로 만듭니다.
./public/resources/views/get_server.blade.php 를 만들고 HTML 병아리만 만들어 둡니다.
VSCode라든가 ! 를 입력하고 나서 탭 키를 누르면, 마음대로 병아리를 생성해 주기 때문에 편리합니다.

get_server.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>GET SERVER: <?= $server ?> </p>
    <p>GET VALUE: <?= $data ?> </p>
</body>
</html>
./public/routes/web.php 에 다음을 추가합니다.

web.php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\GetServerController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/get', [GetServerController::class, 'index']);

이번에는 컨트롤러에서 cURL 함수로 외부 사이트의 파일을 읽는 움직임을 시켰습니다.
이것을 응용해 인증 처리나 API를 작성하는 것으로, 외부의 데이터를 조작하거나 취득할 수 있게 됩니다.
http://IPアドレス/get 방문한 결과
( htps // 유즈키치. jp / 게 t-c c r. sh 에 액세스한 예)


이 구성을 유지하면서 파일을 패키징하여 여러 클라이언트가 서버에 연결하는 메커니즘을 만들 수 있습니다.
매우 단순한 구성이었습니다.

서버 측 생성



서버측에서도 아래 준비를 실시해, Laravel을 움직여 갑니다.
# コントローラの作成
./vendor/bin/sail artisan make:controller ShowDataController

ShowDataController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class ShowDataController extends Controller
{
    public function index () 
    {
        $value = "successfully!";
        return view('show', ['data'=> $value]);
    }
} 

클라이언트와 유사한 방식으로 ./public/resources/views/show.blade.php를 만듭니다.

show.blade.php
<?php
echo $data;
./public/routes/web.php를 추가합니다.

web.php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ShowDataController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/show', [ShowDataController::class, 'index']);

이것으로 기본형은 완성됩니다.
클라이언트 측을 다시 패키징하고 다른 환경에서 여러 개 배포하여 여러 클라이언트에서 액세스하는 클라이언트-서버 모델을 구현할 수 있습니다.

실제로는, 컨트롤러 부분에 인증의 처리나, 데이터베이스 조작등의 처리를 실시하게 된다고 생각합니다.
서버 측 데이터베이스를 활용하면 WordPress나 GitHub 같은 구조를 재현할 수 있습니다.
(어디까지나 단순한 모델로서의 재현으로, 실제의 WP나 GitHub는 보다 하이 레벨의 처리가 행해지고 있습니다)

좋은 웹페이지 즐겨찾기