Giter Site home page Giter Site logo

mellita's Introduction

梅利塔(Mellita)官方网站

鸣谢

JetBrains | Laravel | Dcat Admin | Tenancy

简介

Mellita 可以使任何 Laravel 应用具备 SaaS 能力,只需要简单的 composer 安装以及极其少量的改动。无论你是打算使用 Laravel 项目开发新项目,还是将已经付出努力的项目转化为 SaaS 架构,都可以轻松实现。

Mellita 拥有一个控制台,控制台用于管理 SaaS 的租户实例,可以对其进行创建或是删除。对于租户实例则采用了分库的方式来处理,以使用户数据得到最基本的安全隔离保障和更加高效的数据库 I/O 效率。

环境要求

Laravel 没错,只有它,Mellita 所需的环境依赖正是 Laravel 所需的环境依赖。

安装

composer require celaraze/mellita

配置

1:执行 php artisan mellita:install

2:于 app/Providers/RouteServiceProvider.php 文件中:

<?php

namespace App\Providers;

use Dcat\Admin\Admin;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
    public const HOME = '/home';

    public function boot()
    {
        $this->configureRateLimiting();

        // 注意,Mellita SaaS Console依赖它注册路由,必须。
        Admin::routes();
        // 注意结束
        
        // 注意,这些方法在本类中声明,找到对应的方法查看说明
        // 如果声明了,就必须要加入到本方法内
        $this->mapWebRoutes();
        $this->mapApiRoutes();
        $this->mapAdminRoutes();
        // 注意结束
    }

    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
        });
    }
    
    /**
     * 获取根域名 
     * 注意,这个方法是必须的。
     * @return array
    */
    protected function centralDomains(): array
    {
        return config('tenancy.central_domains');
    }

    /**
     * web 路由处理
     * 注意,按照你的想法处理,如果声明此方法,web 路由将无法被租户实例所访问到
     * 只能通过Console访问
    */
    protected function mapWebRoutes()
    {
        foreach ($this->centralDomains() as $domain) {
            Route::middleware(['web'])
                ->domain($domain)
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        }
    }

    /**
     * api 路由处理
     * 注意,按照你的想法处理,如果声明此方法,api 路由将无法被租户实例所访问到
     * 只能通过Console访问
    */
    protected function mapApiRoutes()
    {
        foreach ($this->centralDomains() as $domain) {
            Route::prefix('api')
                ->domain($domain)
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
        }
    }
    
    /**
     * console 路由处理
     * 注意,这是必须的
    */
    protected function mapAdminRoutes()
    {
        foreach ($this->centralDomains() as $domain) {
            Route::domain($domain)
                ->middleware(['web', 'admin'])
                ->namespace($this->namespace)
                ->group(base_path('app/Admin/routes.php'));
        }
    }
}

开始使用

租户实例的数据库迁移,移动至:app/database/migrations/tenant 文件夹中。

执行租户实例数据库迁移的命令是:php artisan tenants:migrate

为租户定义的路由写在:app/routes/tenant.php 文件中。

创建租户实例

访问 http://your-domain/admin ,在租户实例中可以进行创建。

Mellita

每一个租户实例都有独立的数据库以及其配置。

彩蛋

Mellita 可以和 DcatAdmin 完美联动,如果租户实例是通过 DcatAdmin 开发的应用,那么可以直接通过命令 php artisan admin:app ApplicationName 来创建多应用, 然后在 app/admin.php 文件中做以下配置:

return [

    //...我是其它配置内容
    
    'multi_app' => [
        // 与新应用的配置文件名称一致
        // 设置为true启用,false则是停用
        'application_name' => true,
    ],
    
];

执行完成之后,application_name 的后台应用即为租户实例的应用,无需其它配置,逻辑代码则应该写在app/ApplicationNmae 文件夹中。

如果对此有疑问,可以查看 DcatAdmin 多应用文档

开源协议

Mellita 遵循 GPL3.0 开源协议。

mellita's People

Contributors

celaraze avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.