Laravel is a web application framework with expressive, elegant syntax. This base project is to assist in the development project on the laravel based on RestFul API.
- Basic Authentication
- Json Web Token
- Custom Error Handling
- CORS Filter
- Authority Access
- Custom Middleware
- Soft Deletes Service
- Custom Form Validation
- Auto Refresh Token Every 1 Hour (Ajax request)
- User Management
- Clone this project
https://github.com/piinalpin/laravel-base.git
. - Change
.env.docker
file to change database configuration to your database configuration and add basic auth configuration. Then copy.env.docker
to.env
AUTH_USERNAME=<BASIC_AUTH_USERNAME>
AUTH_PASSWORD=<BASIC_AUTH_PASSWORD>
DB_CONNECTION=mysql
DB_HOST=<DATABASE_HOST>
DB_PORT=<DATABASE_PORT>
DB_DATABASE=<DATABASE_NAME>
DB_USERNAME=<DATABASE_USERNAME>
DB_PASSWORD=<DATABASE_PASSWORD>
- Run
php artisan migrate
to migrate table on database. - Change
database/AppUserSeeder.php
according what do you want (optional), for this case I have two default user.
DB::table('APP_USER')->insert([
'created_at' => DB::raw('CURRENT_TIMESTAMP'),
'created_by' => 0,
'username' => 'admin',
'full_name' => 'Administrator',
'email' => 'admin@test.com',
'password' => Hash::make('password'),
'enabled' => true,
'role' => 'ADMINISTRATOR'
]);
- Run
php artisan db:seed
to seed data in database. - Run
php artisan serve
to run this project.
- Install Docker desktop from Docker Hub
- Install MySQL Docker if you want to use MySQL as container
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
- Create database and add user for laravel docker, default IP Address for docker is 172.17.0.1
shell> docker exec -it mysql mysql -u root -p
mysql> CREATE DATABASE database_name;
mysql> CREATE USER 'newuser'@'172.17.0.1' IDENTIFIED BY 'user_password';
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'172.17.0.1';
mysql> FLUSH PRIVILEGES;
- Change
.env.docker
to change database connection for mysql docker
DB_CONNECTION=mysql
DB_HOST=172.17.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=new_user
DB_PASSWORD=user_password
- Run migration and seed data
php artisan migrate && php artisan db:seed
- Build web server on docker, you can see Dockerfile for web server at web.dockerfile
docker build -t laravel_web:latest -f web.dockerfile .
- Build laravel application on docker, you can see Dockerfile for laravel application at app.dockerfile
docker build -t laravel_app:latest -f app.dockerfile .
- Create network on docker and create connection for mysql docker on your network.
docker network create my-network
docker network connect my-network mysql
- Adjust
docker-compose.yml
to run web server, application and connect to external mysql container.
version: '3'
services:
web:
image: laravel_web:latest
volumes:
- ./:/var/www
restart: always
ports:
- "8080:80"
- "443:443"
links:
- app
networks:
- my-network
app:
image: laravel_app:latest
env_file: '.env.docker'
environment:
- "DB_HOST=172.17.0.1"
- "APP_URL=http://localhost:8080/api/v1"
volumes:
- ./:/var/www
restart: always
networks:
- my-network
networks:
my-network:
external: true
- Run
docker-compose up -d
to deploy docker image to container anddocker-compose down
to stop it. - Application should be can access at
localhost:8080
- Login
/api/v1/oauth/token POST
- Header
Authorization: Basic
username and password as same as value of basic auth on.env
- Form Data
username: admin
andpassword: password
- Header
- User Currently Logged In
/api/vi/user/me GET
- Header
Authorization: Bearer Token
- Header
- Get All User
/api/vi/user GET
- Header
Authorization: Bearer Token
- Header
- Create New User
/api/vi/user/me POST
- Header
Authorization: Bearer Token
- Request:
application/json
{ "username": "someuser", "email": "someemail@test.com", "fullName": "Some Name", "password": "somepassword", "confirmPassword": "somepassword", "enabled": true, "role": "SOME_ROLE" }
- Header
- Get Single User
/api/vi/user/{id} GET
- Header
Authorization: Bearer Token
- Header
- Update User
/api/vi/user/{id} POST
- Header
Authorization: Bearer Token
- Request:
application/json
{ "username": "someuser", "email": "someemail@test.com", "fullName": "Some Name", "password": "somepassword", "confirmPassword": "somepassword", "enabled": true, "role": "SOME_ROLE" }
- Header
- Delete User
/api/vi/user/{id} DELETE
- Header
Authorization: Bearer Token
- Header
The Laravel framework is open-sourced software licensed under the MIT license.