A template repository for building React single page apps talking to .NET Core back ends. Clone, rm rf ./git, grab a drink and pretend you've spent ages configuring things. The intent is to be opinionated in the technology choices so that all the wiring and plumbing is set up allowing you to focus on bringing your idea to life, securely. The opinion of wanting to write minimal code to add value.
To deliver value, not code.
- GraphQL -> add value, not endpoints
- React -> add value, not ##insert_edgy_comment##
Run this snippet if you use Minikube until kubernetes/minikube#11513 is resolved.
A recent change in the linux kernel has required virtualization tools to update (Kind has resolved this in v0.11).
sudo sysctl net/netfilter/nf_conntrack_max=131072and now normal minikube init
minikube start --addons=ingressYou may also experience DNS service resolution issues and consider modifying
kubectl -n kube-system edit configmap corednsto add log and remove loop indicated by the ++ and --
data:
Corefile: |
.:53 {
errors
++log
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
hosts {
192.168.49.1 host.minikube.internal
fallthrough
}
forward . /etc/resolv.conf {
max_concurrent 1000
}
--loop
cache 30
reload
loadbalance
}
kind: ConfigMap
...See provision.sh for full configuration. You'll probably also want
minikube dashboard
minikube tunnelThis repository has tried to stay simple for an F5 experience to lower the barrier to entry in aim to be more productive. For setup, there are still things to configure:
Update your local device hosts file
sudo vim /etc/hoststo include the IP address to your minikube cluster
...
192.168.49.2 yournamespacecluster.local
...
RabbitMQ is required by the application servers. If you run the application by skaffold dev then local-development-backend.yml is already configured but if you want to launch the app outside of the k8s cluster, maybe via VS Code F5 debugging, you will want to expose the rabbit amqp access:
kubectl port-forward service/rabbit-simple-cluster 5672:5672prior to launching the application server
Install htpasswd (for bare minimal k8s security). // TODO: replace with RBAC from Keycloak/FreeIPA/OpenLDAP
apt update && apt install -y apache2-utilsexpose monitoring solution
k port-forward service/prometheus-operated 30000:9090
k port-forward service/prommy-kube-prometheus-sta-alertmanager 30001:9093
k port-forward service/prommy-grafana 30002:80Update NuGet packages
find . -type f -name "*.csproj" -exec bash -c 'cd $(dirname $0) && dotnet list package --outdated | sed -n -E "s/^.*> (\S*) .*([0-9].[0-9].[0-9]) $/dotnet add package \1 --version \2/gmip" | sh' {} \;Update npm packages
npx npm-check-updates -uAdd migration
dotnet ef migrations add Init --verboseRust's drill is a simple and declarative way to execute load testing.
drill --benchmark ./load-testing/load-test.yml --statsExample load-test.yml contents:
---
concurrency: 50
base: "http://localhost:9080"
iterations: 100
rampup: 5
plan:
- name: Fetch todos
request:
url: /api/todos
- name: Fetch weather
request:
url: /weatherforecastHere's a list of things to call out in this repository.
Authoring documents located ~/documentation assumes writing in markdown and uses
to generate human friendly versions by running ~/documentation/build.sh outputting to ~/documentation/dist
admin ui credentials, you will need to change hello-world to your rabbit cluster name
username
k -n default get secret hello-world-default-user -o jsonpath='{.data.username}' | base64 --decodeadmin ui password
k -n default get secret hello-world-default-user -o jsonpath='{.data.password}' | base64 --decode