Merge pull request #2 from fleetbase/dev-main

Alpha version
This commit is contained in:
Ron
2023-05-18 15:31:11 +08:00
committed by GitHub
31 changed files with 3004 additions and 725 deletions

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
.env
.env.backup
.phpunit.result.cache
.pnpm-store
docker-compose.override.yml
npm-debug.log
yarn-error.log

5
.gitmodules vendored
View File

@@ -27,6 +27,7 @@
[submodule "packages/dev-engine"]
path = packages/dev-engine
url = git@github.com:fleetbase/dev-engine.git
branch = dev-main
[submodule "packages/fleetbase-extensions-indexer"]
path = packages/fleetbase-extensions-indexer
url = git@github.com:fleetbase/fleetbase-extensions-indexer.git
@@ -48,3 +49,7 @@
path = packages/fleetops-data
url = git@github.com:fleetbase/fleetops-data.git
branch = dev-main
[submodule "socket"]
path = socket
url = git@github.com:fleetbase/socket.git
branch = dev-main

View File

@@ -6,38 +6,28 @@
"license": "MIT",
"require": {
"php": "^7.3|^8.0",
"fleetbase/core-api": "1.0.0-dev",
"fleetbase/fleetops-api": "1.0.0-dev",
"fleetbase/storefront-api": "1.0.0-dev",
"fleetbase/core-api": "1.0.0-alpha",
"fleetbase/fleetops-api": "1.0.0-alpha",
"fleetbase/storefront-api": "1.0.0-alpha",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/tinker": "^2.5",
"psr/http-factory-implementation": "*"
"maatwebsite/excel": "^3.1",
"phpoffice/phpspreadsheet": "^1.28",
"psr/http-factory-implementation": "*",
"textalk/websocket": "^1.6"
},
"require-dev": {
"facade/ignition": "^2.5",
"fakerphp/faker": "^1.9.1",
"kitloong/laravel-migrations-generator": "^6.10",
"laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^5.10",
"phpunit/phpunit": "^9.5.10"
},
"repositories": [
{
"type": "path",
"url": "../packages/core-api"
},
{
"type": "path",
"url": "../packages/fleetops-api"
},
{
"type": "path",
"url": "../packages/storefront-api"
}
],
"autoload": {
"psr-4": {
"App\\": "app/",

3166
api/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,22 +2,6 @@
use Illuminate\Support\Str;
$host = env('DB_HOST', '127.0.0.1');
$database = env('DB_DATABASE', 'fleetbase');
$username = env('DB_USERNAME', 'fleetbase');
$password = env('DB_PASSWORD', '');
if ($databaseUrl = getenv('DATABASE_URL')) {
$url = parse_url($databaseUrl);
$host = $url['host'];
$username = $url['user'];
if (isset($url['pass'])) {
$password = $url['pass'];
}
$database = substr($url['path'], 1);
}
$redis_host = env('REDIS_HOST', '127.0.0.1');
$redis_database = env('REDIS_DATABASE', '0');
$redis_password = env('REDIS_PASSWORD', null);
@@ -32,13 +16,9 @@ if ($cacheUrl = getenv('CACHE_URL')) {
$redis_database = isset($url['path']) ? substr($url['path'], 1) : 'cache';
}
$mysql_options = [];
if (env('APP_ENV') === 'local') {
$mysql_options[PDO::ATTR_EMULATE_PREPARES] = true;
}
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
@@ -68,118 +48,7 @@ return [
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'host' => $host,
'port' => env('DB_PORT', '3306'),
'database' => $database,
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => $mysql_options,
],
'sandbox' => [
'driver' => 'mysql',
'host' => $host,
'port' => env('SANDBOX_DB_PORT', '3306'),
'database' => $database . '_sandbox',
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => $mysql_options,
],
'frontend' => [
'driver' => 'mysql',
'host' => $host,
'port' => env('FRONTEND_DB_PORT', '3306'),
'database' => $database . '_frontend',
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => $mysql_options,
],
'greenfreight' => [
'driver' => 'mysql',
'host' => $host,
'port' => env('GREENFREIGHT_DB_PORT', '3306'),
'database' => $database . '_greenfreight',
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => $mysql_options,
],
'storefront' => [
'driver' => 'mysql',
'host' => $host,
'port' => env('STOREFRONT_DB_PORT', '3306'),
'database' => $database . '_storefront',
'username' => $username,
'password' => $password,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => $mysql_options,
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'prefix' => '',
'prefix_indexes' => true,
],
],
'connections' => [],
/*
|--------------------------------------------------------------------------
@@ -241,4 +110,5 @@ return [
'database' => $redis_database . '_geocode_cache',
],
],
];

View File

@@ -13,7 +13,7 @@ return [
|
*/
'default' => env('MAIL_MAILER', 'smtp'),
'default' => env('MAIL_MAILER', 'ses'),
/*
|--------------------------------------------------------------------------
@@ -47,6 +47,10 @@ return [
'ses' => [
'transport' => 'ses',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'version' => '2010-12-01'
],
'mailgun' => [

View File

@@ -1,36 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}

View File

@@ -1,32 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}

View File

@@ -1,36 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFailedJobsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('failed_jobs');
}
}

View File

@@ -1,36 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePersonalAccessTokensTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable');
$table->string('name');
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('personal_access_tokens');
}
}

Submodule console updated: 7a27f92554...f5c881c3b6

View File

@@ -1,5 +1,5 @@
version: "3.4"
name: "fleetbase"
services:
cache:
image: redis:4-alpine
@@ -12,7 +12,30 @@ services:
- "./docker/database/:/docker-entrypoint-initdb.d/"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: "fleetbase_os"
MYSQL_DATABASE: "fleetbase"
socket:
build:
context: .
dockerfile: socket/Dockerfile
args:
ENVIRONMENT: dev
ports:
- "38000:8000"
environment:
SOCKETCLUSTER_WORKERS: 10
SOCKETCLUSTER_BROKERS: 10
console:
ports:
- "4200:4200"
volumes:
- ./console:/app/console
build:
context: .
dockerfile: console/Dockerfile
args:
ENVIRONMENT: development
application:
volumes:
@@ -24,12 +47,14 @@ services:
args:
ENVIRONMENT: development
environment:
DATABASE_URL: "mysql://root@database/fleetbase_os"
DATABASE_URL: "mysql://root@database/fleetbase"
CACHE_DRIVER: redis
CACHE_PATH: /var/www/html/api/storage/framework/cache
CACHE_URL: tcp://cache
REDIS_URL: tcp://cache
SESSION_DOMAIN: localhost
BROADCAST_DRIVER: socketcluster
MAIL_FROM_NAME: Fleetbase
depends_on:
- database
- cache

View File

@@ -1,78 +1,106 @@
# Base stage
FROM php:7.4-fpm-bullseye as base
# download and install geos php bindings
# need to run docker-php-ext-configure to create /usr/src/php/ext dir
RUN mkdir -p /usr/src/php/ext && curl -L https://git.osgeo.org/gitea/geos/php-geos/archive/1.0.0.tar.gz > /tmp/php-geos.tar.gz && tar -C /usr/src/php/ext -xzvf /tmp/php-geos.tar.gz
# Download and install GEOS PHP bindings
RUN mkdir -p /usr/src/php/ext \
&& curl -L https://git.osgeo.org/gitea/geos/php-geos/archive/1.0.0.tar.gz > /tmp/php-geos.tar.gz \
&& tar -C /usr/src/php/ext -xzvf /tmp/php-geos.tar.gz
RUN apt-get update && apt-get install -y git unzip libzip-dev \
libgd-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
imagemagick libmagickwand-dev --no-install-recommends \
libmemcached-dev \
libgeos-dev \
libgmp-dev \
default-mysql-client \
libicu-dev \
tmux \
# Install required packages and PHP extensions
RUN apt-get update \
&& apt-get install -y git unzip libzip-dev libgd-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
imagemagick libmagickwand-dev --no-install-recommends libmemcached-dev libgeos-dev libgmp-dev \
default-mysql-client libicu-dev tmux \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-configure gd --with-external-gd && docker-php-ext-configure php-geos \
&& docker-php-ext-install -j$(nproc) gmp php-geos gd zip pdo_mysql sockets intl && pecl install redis-4.3.0 memcached-3.1.3 && docker-php-ext-enable redis memcached opcache
&& docker-php-ext-configure gd --with-external-gd \
&& docker-php-ext-configure php-geos \
&& docker-php-ext-install -j$(nproc) gmp php-geos gd zip pdo_mysql sockets intl bcmath \
&& pecl install redis-4.3.0 memcached-3.1.3 \
&& docker-php-ext-enable redis memcached opcache bcmath
RUN sed -e 's/^expose_php.*/expose_php = Off/' "$PHP_INI_DIR/php.ini-production" > "$PHP_INI_DIR/php.ini"
RUN sed -i -e 's/^upload_max_filesize.*/upload_max_filesize = 600M/' -e 's/^post_max_size.*/post_max_size = 0/' -e 's/^memory_limit.*/memory_limit = 600M/' "$PHP_INI_DIR/php.ini"
# Update PHP configurations
RUN sed -e 's/^expose_php.*/expose_php = Off/' "$PHP_INI_DIR/php.ini-production" > "$PHP_INI_DIR/php.ini" \
&& sed -i -e 's/^upload_max_filesize.*/upload_max_filesize = 600M/' -e 's/^post_max_size.*/post_max_size = 0/' \
-e 's/^memory_limit.*/memory_limit = 600M/' "$PHP_INI_DIR/php.ini"
RUN curl -L https://github.com/springload/ssm-parent/releases/download/v1.4.3/ssm-parent_1.4.3_linux_amd64.tar.gz > /tmp/ssm-parent.tar.gz && tar -C /sbin -xvf /tmp/ssm-parent.tar.gz ssm-parent && rm /tmp/ssm-parent.tar.gz
# Install ssm-parent
RUN curl -L https://github.com/springload/ssm-parent/releases/download/v1.4.3/ssm-parent_1.4.3_linux_amd64.tar.gz > /tmp/ssm-parent.tar.gz \
&& tar -C /sbin -xvf /tmp/ssm-parent.tar.gz ssm-parent \
&& rm /tmp/ssm-parent.tar.gz
# Install Composer
WORKDIR /var/www
COPY docker/composer-install.sh ./
RUN chmod +x ./composer-install.sh && ./composer-install.sh
RUN chmod +x ./composer-install.sh \
&& ./composer-install.sh
# Copy packages
COPY packages /var/www/html/packages
WORKDIR /var/www/html/api
RUN chown www-data:www-data /var/www/html
RUN chown www-data:www-data /var/www/html/api
# Set ownership and permissions
RUN chown www-data:www-data /var/www/html \
&& chown www-data:www-data /var/www/html/api
USER www-data
RUN mkdir -p ./storage/logs/ && ln -sf /dev/stdout ./storage/logs/laravel.log
# copy these first to not reinstall everything on a random file change
RUN mkdir -p ./storage/logs/ \
&& ln -sf /dev/stdout ./storage/logs/laravel.log
# Install Composer dependencies
COPY api/composer.json api/composer.lock ./
RUN composer install --no-dev --no-scripts --no-autoloader
# Copy application files
COPY --chown=www-data:nogroup . ./
# RUN composer dumpautoload
USER root
# Copy entrypoint.sh
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Copy entrypoint-app.sh
COPY docker/entrypoint-app.sh /entrypoint-app.sh
RUN chmod +x /entrypoint-app.sh
# Set environment
ARG ENVIRONMENT=production
ENV APP_ENV=$ENVIRONMENT
#### Scheduler stages
# Scheduler base stage
FROM base as scheduler-base
RUN curl -L https://github.com/webdevops/go-crond/releases/download/0.6.1/go-crond-64-linux-dynamic > /usr/local/bin/go-crond && chmod +x /usr/local/bin/go-crond
# Install go-crond
RUN curl -L https://github.com/webdevops/go-crond/releases/download/0.6.1/go-crond-64-linux-dynamic > / usr/local/bin/go-crond && chmod +x /usr/local/bin/go-crond
COPY docker/crontab ./crontab
RUN chmod 0600 ./crontab
# Scheduler dev stage
FROM scheduler-base as scheduler-dev
ENTRYPOINT []
CMD ["go-crond", "--verbose", "--no-auto", "root:./crontab"]
# Scheduler stage
FROM scheduler-base as scheduler
ENTRYPOINT ["/sbin/ssm-parent", "-c", ".ssm-parent.yaml", "run", "--"]
CMD ["go-crond", "--verbose", "--no-auto", "root:./crontab"]
#### Application stages
# Application dev stage
FROM base as app-dev
ENTRYPOINT ["docker-php-entrypoint"] # the default
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
# Events stage
FROM base as events
ENTRYPOINT ["/sbin/ssm-parent", "-c", ".ssm-parent.yaml", "run", "--", "docker-php-entrypoint"]
CMD ["php", "api/artisan", "queue:work", "events"]
CMD ["php", "artisan", "queue:work", "events"]
# Jobs stage
FROM base as jobs
ENTRYPOINT ["/sbin/ssm-parent", "-c", ".ssm-parent.yaml", "run", "--", "docker-php-entrypoint"]
CMD ["php", "api/artisan", "queue:work", "sqs"]
CMD ["php", "artisan", "queue:work", "sqs"]
# Application stage
FROM base as app
ENTRYPOINT ["/sbin/ssm-parent", "-c", ".ssm-parent.yaml", "run", "--", "docker-php-entrypoint"]
CMD ["php-fpm"]
ENTRYPOINT ["/entrypoint-app.sh"]
CMD ["php-fpm"]

10
docker/entrypoint-app.sh Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -e
# Run migrations
php artisan mysql:createdb
php artisan migrate
php artisan sandbox:migrate
# Call the original entrypoint
exec /sbin/ssm-parent -c .ssm-parent.yaml run -- docker-php-entrypoint "$@"

10
docker/entrypoint.sh Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -e
# Run migrations
php artisan mysql:createdb
php artisan migrate
php artisan sandbox:migrate
# Call the original entrypoint
exec docker-php-entrypoint "$@"

25
scripts/autoupdate.sh Normal file
View File

@@ -0,0 +1,25 @@
#!/bin/bash
git submodule update --init --recursive
git submodule update --recursive --remote
cd console
git checkout dev-main
git pull
cd ../packages/ember-core
git checkout dev-main
pnpm install
cd ../ember-ui
git checkout dev-main
pnpm install
cd ../fleetops-engine
git checkout dev-main
pnpm install
cd ../dev-engine
git checkout dev-main
pnpm install
cd ../storefront-engine
git checkout dev-main
pnpm install
cd ../../console
git checkout dev-main
pnpm install

View File

@@ -4,8 +4,7 @@ set -ev
php /var/www/html/api/artisan mysql:createdb
php /var/www/html/api/artisan migrate --force
php /var/www/html/api/artisan migrate:sandbox --force
php /var/www/html/api/artisan init:key-column
php /var/www/html/api/artisan fix:data
php /var/www/html/api/artisan sandbox:migrate --force
php /var/www/html/api/artisan sandbox:init-key
php /var/www/html/api/artisan db:seed --force
php /var/www/html/api/artisan queue:restart

View File

@@ -2,3 +2,4 @@
composer dump-autoload --working-dir /var/www/html/api
composer dump-autoload --working-dir /var/www/html/packages/core-api
composer dump-autoload --working-dir /var/www/html/packages/fleetops-api
composer dump-autoload --working-dir /var/www/html/packages/storefront-api

46
scripts/pushpackages.sh Normal file
View File

@@ -0,0 +1,46 @@
#!/bin/bash
cd packages/core-api
git add .
git commit -m 'latest'
git push origin dev-main
cd ../dev-engine
git add .
git commit -m 'latest'
git push origin dev-main
cd ../ember-core
git add .
git commit -m 'latest'
git push origin dev-main
cd ../ember-ui
git add .
git commit -m 'latest'
git push origin dev-main
cd ../fleetops-api
git add .
git commit -m 'latest'
git push origin dev-main
cd ../fleetops-data
git add .
git commit -m 'latest'
git push origin dev-main
cd ../fleetops-engine
git add .
git commit -m 'latest'
git push origin dev-main
cd ../storefront-api
git add .
git commit -m 'latest'
git push origin dev-main
cd ../storefront-engine
git add .
git commit -m 'latest'
git push origin dev-main
cd ../iam-engine
git add .
git commit -m 'latest'
git push origin dev-main
cd ../fleetbase-extensions-indexer
git add .
git commit -m 'latest'
git push origin main

1
socket Submodule

Submodule socket added at ff0c984058