Keywords: Symfony 5, PHP7.4, Apache 2.4, Postgres 10.4, Docker, Kubernetes, cli, https, Ingress
All commands are run in the root directory.
Path | Usage |
---|---|
./.env | build env variables for build via docker-compose |
./app/.env | app env variables for local development |
./app/.env.test | app env variables for test development |
Prod ENVs are defined in ./kubernetes/init/secrets.yaml!
Remote postgres db (no-persist), apache listening on localhost:80 and php-fpm
$ ./cli start
$ ./cli stop
CLI shortcut (within manually connecting to container):
$ ./cli tests <-- all tests
$ ./cli tests ecs <-- only ecs
$ ./cli tests phpstan <-- only phpstan
$ ./cli tests phpunit <-- only phpuni
Or run composer commands / symfony commands in webroot directory in PHP container:
$ composer ecs <-- code style check
$ composer ecs-fix <-- code style check with auto-fix
$ composer phpstan <-- php static analyst
$ composer phpunit <-- classic phpunit tests
$ ./cli bash <-- return bash from php-fpm container
- go to https://github.com/settings/tokens and generate new token for "repo", "write:packages", "read:packages"
- on github.com click to your account -> Feature preview and click to "Enable"
On your localhost run command (as password paste token from first step):
$ docker login ghcr.io -u [github_username]
kubectl create secret docker-registry regcred \
--docker-server=ghcr.io \
--docker-username=[github_username] \
--docker-password=[token_from_first_step] \
--namespace [githubusername/github_project]
Great! You have github docker registry. Your images you can find on your github profile under "Packages" tab.
This project has GitHub actions for automatic build php-fpm and apache with save images on GitHub.
- on github in project settings click to Secrets
- click to New repository secret and create two keys with this names:
File | Description |
---|---|
KUBE_CONFIG_DATA | contains base64 encode KUBECONFIG file for access your Kubernetes |
CR_PAT | with token for image repository (from previous step) |
All configs use namespace attribute. Namespace is generated from your github username/repo (repo must be cloned with git), for example:
Repo: [email protected]:kdosiodjinud/symfony-docker.git
Generated namespace: kdosiodjinud-symfony-docker
Becouse project is universal, you must init script for replace namespaces in your cloned version:
./cli init
That`s all! :)
Look at the kubernetes/init/secrets.yaml file and config your settings for production. After check apply configure all files from folder init:
kubectl apply -f kubernetes/init/
This example is for Kubernetes over microk8s service, but commands for full install kubernetes is the same. In file ingress/cert.yaml set your email address. In file ingress/ingress.yaml set domain for your app.
// run in cluster
$ microk8s enable helm3 ingress
$ microk8s kubectl create namespace cert-manager
$ microk8s helm3 repo add jetstack https://charts.jetstack.io
$ microk8s helm3 repo update
$ microk8s helm3 install cert-manager jetstack/cert-manager \
--namespace cert-manager --version v0.15.2 \
--set installCRDs=true \
--set ingressShim.defaultIssuerName=letsencrypt-production \
--set ingressShim.defaultIssuerKind=ClusterIssuer \
--set ingressShim.defaultIssuerGroup=cert-manager.io
// run from localhost
$ kubectl apply -f kubernetes/ingress/
If you have ready app, push it to github. Init realease is realy easy. Make git tag with prefix r (for example r0.0.1).
After github register tag, github actions run tests, build images and make deploy to Kubernetes.
This project use great simple framework for generate CLI: https://github.com/DannyBen/bashly
Thank you Danny :)
Path to sources files:
./cli-src/
New commands you can define in yml file:
./cli-src/src/bashly.yml
After edit you must run:
./cli-src/bashly generate
Bashly create new *.sh files in ./cli-src/src/ directory - this is place for process your new command logic. After update run generate again!
In app root is symlink for easy call CLI:
./cli --help