This project contains the helm charts for batnoter deployment on kubernetes cluster. This repo can be used as a helm repository for batnoter charts.
The github wokflows present in this repo will release and publish the helm chart on push event. This setup is created by referencing the charts-repo-actions-demo by helm.
Helm Repository URL - https://batnoter.github.io/batnoter-charts
Helm Repository Metadata URL - https://batnoter.github.io/batnoter-charts/index.yaml
Note: Make sure to update the chart version before pushing your changes to main branch. Otherwise the workflow will fail because release and tag already exist with current version.
- Create a kubernetes cluster.
- Create a postgres database cluster on cloud platform & if required add the trusted sources to it. Make sure to also add the kubernetes cluster in the trusted sources.
- Postgres cluster may contain default database created by cloud provider. If you want you can create a new one with required name.
- Connect to database using pgAdmin and create
batnoterschema inside the database. - Make sure you create the kubernetes cluster and database cluster in the same region to avoid any latency issues.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace --set controller.publishService.enabled=trueCheck if load balancer become available using below command
kubectl get svc -o wide nginx-ingress-ingress-nginx-controller -n ingress-nginxNOTE: Copy the load balancer's external ip address and point it to A-record using your domain's dns interface.
This needs to be done before installing the application. Verify the updates are available using nslookup command.
If not then decrease the TTL of A-record and try nslookup again.
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager -n cert-manager --create-namespace --version v1.8.0 --set installCRDs=trueVerify cert-manager pods
kubectl get pods -n cert-managerkubectl create namespace bnkubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson -n bnNOTE: Replace <path/to/.docker/config.json> token with correct path
To verify the secret, run the below command
kubectl get secret regcred -o jsonpath='{.data}' -n bnkubectl create secret generic postgres-secret \
--from-literal=DATABASE_USERNAME=<POSTGRES_USER> \
--from-literal=DATABASE_PASSWORD=<POSTGRES_PASSWORD> \
--from-literal=DATABASE_DBNAME=<POSTGRES_DB> \
--from-literal=DATABASE_HOST=<POSTGRES_PORT> \
--from-literal=DATABASE_PORT=<POSTGRES_PORT> -n bnNOTE: Replace <POSTGRES_USER> <POSTGRES_PASSWORD> <POSTGRES_DB> <POSTGRES_HOST> and <POSTGRES_PORT> with correct values.
To verify the secret, run the below command
kubectl get secret postgres-secret -o jsonpath='{.data}' -n bnkubectl create secret generic auth-secret \
--from-literal=OAUTH2_GITHUB_CLIENTID=<GITHUB_CLIENT_ID> \
--from-literal=OAUTH2_GITHUB_CLIENTSECRET=<GITHUB_CLIENT_SECRET> \
--from-literal=OAUTH2_GITHUB_REDIRECTURL=https://batnoter.com/api/v1/oauth2/github/callback \
--from-literal=APP_SECRETKEY=<APP_JWT_SECRET> \
--from-literal=APP_CLIENTURL=https://batnoter.com -n bnNOTE: Replace <GITHUB_CLIENT_ID> <GITHUB_CLIENT_SECRET> and <APP_JWT_SECRET> with correct values.
To verify the secret, run the below command
kubectl get secret auth-secret -o jsonpath='{.data}' -n bnUse the batnoter helm repository to install the application.
helm repo add batnoter https://batnoter.github.io/batnoter-charts
helm repo update
helm install batnoter batnoter/batnoter -n bn --create-namespaceIf, for any reason, you want to install batnoter using local helm charts, then run the below command from root directory.
helm install batnoter charts/batnoter -n bn --create-namespaceCheck all the pods are up and running with below command
kubectl get pods -n bnCheck all the services is in active state
kubectl get svc -n bn -o wideVerify Let’s Encrypt certificate status
kubectl describe certificate batnoter-tls -n bn
kubectl describe clusterissuer letsencrypt-prod -n bn
kubectl get certificaterequest -n bn -o wide
kubectl get orders -n bn
kubectl get challenges -n bnMake sure to link the name-servers of your cloud service provider to your domain using the interface provided by your domain registrar. Then route the incoming requests to load balancer by creating A-record (DNS record) with the interface provided by cloud service provider.
NOTE: If you were using an email hosting service previously with the domain, then you may need to create respective dns records for the email service provider inside your cloud provider. Otherwise, the incoming service won't work. This is because we have changed the name-servers of domain registrar. with the name-servers of cloud service provider. Since the DNS records lives inside name-servers, the old DNS records of domain registrar will no longer used. So make sure to configure respective dns records after updating name-servers.
You should now be able to access your domain on https with a valid certificate.
Every Contribution Makes a Difference
Read the Contribution Guidelines before you contribute.