.. | ||
certificate.yaml | ||
integration-test.puml | ||
kubectl.sh | ||
localstack.yaml | ||
README.md | ||
setup-docker.sh | ||
setup-local-s3-on-k3d.sh | ||
setup-local-s3.sh | ||
setup-local.sh | ||
start-k3d.sh | ||
start-k3s.sh |
Usage
setup-local-s3.sh [BUCKET_NAME]
:
- [BUCKET_NAME] is optional, "mybucket" will be used if not specified
- sets up a k3s instance
- installs a localstack pod
- creates http and https routing to localstack via localhost
- saves the self-signed certificate as ca.crt
- uses the certificate to initialize a restic repo at
https://k3stesthost/BUCKET_NAME
Note: In case of not being able to connect to "k3stesthost/health", you might need to ensure that the ingress' ip matches with the required host names: k3stesthost and cloudhost. With sudo k3s kubectl get ingress
you can view the ingress' ip (e.g. 10.0.2.15), then add a line to file "/etc/hosts" e.g. 10.0.2.15 k3stesthost cloudhost
start-k3s.sh
:
- creates and starts a k3s instance
k3s-uninstall.sh
:
- deletes everything k3s related
Other useful commands
sudo k3s kubectl get pods
curl k3stesthost/health
expected:{"services": {"s3": "running"}, "features": {"persistence": "disabled", "initScripts": "initialized"}}
Requires AWS-CLI
- create bucket
aws --endpoint-url=http://k3stesthost s3 mb s3://mybucket
- list buckets
aws --endpoint-url=http://k3stesthost s3 ls
- upload something
aws --endpoint-url=http://k3stesthost s3 cp test.txt s3://mybucket
- check files
aws --endpoint-url=http://k3stesthost s3 ls s3://mybucket
Run docker locally
docker pull docker:19.03.12-dind
docker run -d --privileged --name integration-test docker:19.03.12-dind
docker exec integration-test sh -c "apk add bash"
Set up docker container integration-test:
docker cp ../../../../../c4k-nextcloud/ integration-test:/
docker exec -it integration-test sh
cd /c4k-nextcloud/src/test/resources/local-integration-test
./setup-docker.sh
Deploy nextcloud
Requirements
- leiningen (install with:
sudo apt install leiningen
) - In the project's root execute:
lein uberjar
- Change file "valid-config.edn" according to your settings (e.g.
:fqdn "cloudhost"
and:restic-repository "s3://k3stesthost:mybucket"
).
Deploy to k3s
- Create and deploy the k8s yaml:
java -jar target/uberjar/c4k-nextcloud-standalone.jar valid-config.edn valid-auth.edn | sudo k3s kubectl apply -f -
Some of the steps may take some min to be effective, but eventually nextcloud should be available at: https://cloudhost
Deploy to k3d
k3d is a k3s system which is running inside of a container. To install k3d run curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
or have a look at https://k3d.io/v5.0.3/ .
- Start a k3d cluster to deploy s3, nextcloud and test backup and restore on it:
./setup-local-s3-on-k3d.sh
Some steps may take a couple of minutes to be effective, but eventually nextcloud should be available at: https://cloudhost
Remove k3d cluster
k3d cluster delete nextcloud
Test in local gitlab runner
See https://stackoverflow.com/questions/32933174/use-gitlab-ci-to-run-tests-locally
This needs to be done in the project root
docker run -d --name gitlab-runner --restart always -v $PWD:$PWD -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
docker exec -it -w $PWD gitlab-runner gitlab-runner exec docker nextcloud-integrationtest --docker-privileged --docker-volumes '/var/run/docker.sock:/var/run/docker.sock'