Kanvas Ecosystem API powered by PhalconPHP
- Clone the project
- Copy
storage/ci/.env.prod
and paste it in the root of the project and rename it.env
- On
phalcon-api/.env
inMYSQL_ROOT_PASSWORD
andDATA_API_MYSQL_PASS
assign the root password for MySQL. - On
phalcon-api/.env
, update MySQL credentials (DATA_API_MYSQL_NAME,DATA_API_MYSQL_USER,DATA_API_MYSQL_PASS
) - On
phalcon-api/.env
, changeDATA_API_MYSQL_HOST = localhost
toDATA_API_MYSQL_HOST = mysql
- Run Docker containers with the
docker-compose up --build
command - After the build, access the project main container with
docker exec -it id_of_docker_container sh
- Inside the container's console run get inside the
apps
folder,cd app/
- Copy
storage/ci/phinx.php
tophinx.php
- Copy
storage/ci/phinx-kanvas.php
tophinx-kanvas.php
- To finish the setup run
./runCli setup start
this will run migration, seed and acl
NOTE : This requires docker to be present in your system. Visit their site for installation instructions.
- To create a new app run
./runCli setup newapp {{AppName}}
- Clear model and temp cache
./app/php cli/cli.php clearcache
- Update db migartion
./app/vendor/bin/phinx migrate -e production
- Clear old Sessions on db
./app/php cli/cli.php clearcache sessions
The Kanvas Core uses RabbitMQ to manage our queue process. Internally we handle 3 queue jobs to start
php cli/cli.php queue jobs
php cli/cli.php queue events
php cli/cli.php queue notifications
Jobs : will handle normal Jobs run on any moment during the runtime of the app
Events : will handle events we run send to the queue
$this->events->fireToQueue('user:test', Users::findFirst(), ['test'])
Notifications : will handle notifications we send to the queue
Users::findFirst(18)->notify(new CanvasSubscription(Companies::findFirst(10)))
By Default the Canvas will assign all register user the Admin role but if you want to define a specific roles , you will need to add to your app settings
defaultAdminRole : App.RoleName
When working with other local apps we have created a docker network called canvas_network
, this will allow other local ecosystem apps to connect to it if needed
Add to your local docker-compose file on the app network
my-proxy-net:
external:
name: canvas_network
And on your contianer network info
networks:
- local-network
- my-proxy-net
- Inside the container's console run
./vendor/bin/codecept run
There's a CI/CD already defined for this api that is composed by:
- Helm Chart templates
- GitHub Actions Pipeline
The technologies selected to work fine with this CI/CD are:
- EKS (AWS's Kubernetes)
- GitHub/GitHub Actions
- AWS CLI
- AWS ECR (container registry )
- Bash Scripting (so the agent worker must be Unix)
The steps of this pipeline are programed inside the repo at ./.github/workflows/actions.yml
Go to the Settings/Secrets section of your GitHub Repo and configure the following secret vars:
AWS_ACCESS_KEY_ID= Access key of the aws account with access rigths to the EKS cluster
AWS_SECRET_ACCESS_KEY= Secret of the Access Key ID
DEVELOPMENT_VARS= All content of your .env file filled with the access and configurations needed by the api (you can find an example at the repo ./.env.example
Must replace the var cluster_name
in the actions.yaml file with the name of your api's destination cluster that is in the AWS org of your configured aws account.
Replace account_id: ********
at "AWS ECR" step with the account ID of your Access KEY
Replace <account_id>
inside repo name (and region if necesary) --set apiImage=<account_id>.dkr.ecr.us-east-1.amazonaws.com/${{ env.instance_name }}:latest
you'll find that line at "Deploy Helm chart" step.