ZotPrime is a fully packaged repository aimed to make on-premise Zotero deployment easier with the last versions of both Zotero client and server. This is the result of sleepness nights spent to deploy Zotero within my organization on a disconnected network. Feel free to open issues or pull requests if you did not manage to use it.
Identify your Server IP Address:
You may install ZotPrime server in baremetal, or in virtual machine, or in your PC host - where you would run client too. For any of these installations you will have to identify your Server IP Address. In baremetal it would be IP address of your network interface connected to LAN. In virtual machine it would be either IP address of your hypervisor's or VMM's virtual network interface that is connected to host computer, or it would be IP address of your host's network interface connected to LAN if you want to expose it to LAN for connecting from other computers to this virtual machine, and you will need to do port forwarding from the host's network interface IP address to virtual network interface IP address for all ports listed below under Available endpoints. If you install both server and client in same PC host then you can use 127.0.0.1 (localhost) as Server IP Address.
Install latest docker compose plugin:
$ sudo apt update
$ sudo apt install docker-compose-pluginClone production branch of the repository:
$ mkdir /path/to/your/app && cd /path/to/your/app
$ git clone -b production --recursive --single-branch https://github.com/uniuuu/zotprime.git
$ cd zotprimeRun:
$ ./bin/install.shConfigure: When prompted input the IP address of the server
Initialize databases:
$ ./bin/init.sh| Name | URL |
|---|---|
| Zotero API | http://<Server IP Address>:8080/ |
| S3 | http://<Server IP Address>:9000/ |
| PHPMyAdmin | http://<Server IP Address>:8083/ |
| S3 Web UI | http://<Server IP Address>:9001/ |
| Stream Server | ws://<Server IP Address>:8081/ |
| Name | Login | Password |
|---|---|---|
| Zotero API | admin | admin |
| S3 Web UI | zotero | zoterodocker |
| PHPMyAdmin | root | zotero |
Clone the repository:
$ mkdir /path/to/your/app && cd /path/to/your/app
$ git clone https://github.com/uniuuu/zotprime.git
$ git checkout production
$ cd zotprimeInstall Google Cloud SDK: https://cloud.google.com/sdk/docs/install
Install Terraform: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
Install Kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/
Install Helm: https://helm.sh/docs/intro/install/
Run:
$ gcloud init
$ gcloud iam service-accounts create zotprimeprod
$ gcloud projects list
$ gcloud projects add-iam-policy-binding <PROJECT_ID> --member="serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role="roles/owner"- <PROJECT_ID> is name of your project ID
- NAME@PROJECT_ID.iam.gserviceaccount.com is email ID of service account
Run:
$ cd ./zotprime-k8s/GKE/terraform
$ gcloud iam service-accounts keys create cred.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com
$ mv cred.json ./auth/
$ gcloud services enable container.googleapis.com
$ gcloud services enable cloudresourcemanager.googleapis.com
$ cp terraform.tfvars_example terraform.tfvarsEdit terraform.tfvars and change project_id, region, zones, node-locations, minnode, maxnode, disksize, machine
Run:
$ terraform init
$ terraform fmt && terraform validate && terraform plan
$ terraform apply
$ gcloud container clusters get-credentials zotprime-k8s-prod
$ cd ..Check cluster and install Zotprime Helm Chart
Run:
$ kubectl config get-contexts
$ kubectl get all --all-namespacesEdit ./helm-chart/values.yaml and change dsuri:, s3Pointuri:, api:, streamserver:, minios3Data:, phpmyadmin:, minios3Web: .
Replace to your hostnames api (dsuri:, api:), S3 Minio Data (s3Pointuri:, minios3Data:), Stream Server (streamserver:), Phpmyadmin (phpmyadmin:) and S3 Minio Web (minios3Web:):
- dsuri: http://api-any.yourhostname.io/
- s3Pointuri: s3-any.yourhostname.io
- api: api-any.yourhostname.io
- streamserver: stream-any.yourhostname.io
- minios3Data: s3-any.yourhostname.io
- phpmyadmin: phpmyadmin-any.yourhostname.io
- minios3Web: minioweb-any.yourhostname.io
Run:
$ kubectl create namespace zotprime
$ helm install zotprime-k8s helm-chart --namespace zotprime
$ kubectl get -A cm,secrets,deploy,rs,sts,pod,pvc,svc,ingObtain Ingress IP's and setup A records in DNS hosting:
Wait while GCP will provision IP's verify with below command output in ADDRESS column
Run:
$ kubectl get -A ingAvailable endpoints:
| Name | URL |
|---|---|
| Zotero API | http://api-any.yourhostname.io |
| S3 | http://s3-any.yourhostname.io |
| PHPMyAdmin | http://phpmyadmin-any.yourhostname.io |
| S3 Web UI | http://minioweb-any.yourhostname.io |
| Stream Server | ws://stream-any.yourhostname.io |
Default login/password:
| Name | Login | Password |
|---|---|---|
| Zotero API | admin | admin |
| S3 Web UI | zotero | zoterodocker |
| PHPMyAdmin | root | zotero |
Clone the repository:
$ mkdir /path/to/your/app && cd /path/to/your/app
$ git clone https://github.com/uniuuu/zotprime.git
$ git checkout production Install Microk8s: https://microk8s.io/docs/getting-started
Install Kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/
Install Helm: https://helm.sh/docs/intro/install/
Install microk8s modules:
microk8s enable hostpath-storage
microk8s enable helm
microk8s enable registry
microk8s enable dns
microk8s enable ingressEnable metallb based on guide https://microk8s.io/docs/addon-metallb. Use available IP range from your LAN.
Run:
microk8s enable metallb:<IP-range>Check cluster
Run:
$ kubectl config get-contexts
$ kubectl get all --all-namespacesBuild and push images to Microk8s registry
Run:
$ cd zotprime/microk8s/scripts
$ ./buildimages.sh
$ ./pushimages.shInstall Zotprime Helm Chart
Run:
$ cd ../
$ kubectl create namespace zotprime
$ helm install zotprime-k8s helm-chart --namespace zotprime
$ kubectl get -A cm,secrets,deploy,rs,sts,pod,pvc,svc,ingObtain Ingress IP's and setup A records in all DNS servers (or add in /etc/hosts) in client and server LAN Run:
$ kubectl get -A ingAvailable endpoints:
| Name | URL |
|---|---|
| Zotero API | http://api.zotprime |
| S3 | http://s3min.zotprime |
| PHPMyAdmin | http://pm.zotprime |
| S3 Web UI | http://min.zotprime |
| Stream Server | ws://stream.zotprime |
Default login/password:
| Name | Login | Password |
|---|---|---|
| Zotero API | admin | admin |
| S3 Web UI | zotero | zoterodocker |
| PHPMyAdmin | root | zotero |
Create new users:
$ sudo ./bin/create-user.sh {UID} {USERNAME} {PASSWORD} {EMAIL} {LIBRARY ID}List users:
$ sudo docker compose exec zotprime-dataserver /var/www/zotero/admin/list-users.shCreate shared group libraries:
$ sudo docker compose exec zotprime-dataserver /var/www/zotero/admin/create-group.sh {OWNER_USER_NAME} {GROUP_NAME} {GROUP_FULLNAME} List groups:
$ sudo docker compose exec zotprime-dataserver /var/www/zotero/admin/list-groups.shAdd users to a group:
$ sudo docker compose exec zotprime-dataserver /var/www/zotero/admin/add-user-group.sh {USER_NAME} {GROUP_NAME}Remove users from a group:
$ sudo docker compose exec zotprime-dataserver /var/www/zotero/admin/remove-user-group.sh {USER_NAME} {GROUP_NAME}Edit and run:
- For Docker Installation argument's are:
HOST_DS=http://\<Server IP Address\>:8080/
HOST_ST=ws://\<Server IP Address\>:8081/
- For GKE Installation arguments are:
HOST_DS=http://api-any.yourhostname.io/
HOST_ST=ws://stream-any.yourhostname.io/
- For Microk8s Installation arguments are:
HOST_DS=http://api.zotprime/
HOST_ST=ws://stream.zotprime/
- Edit argument MLW=[w|l]: w=Windows, l=Linux
Replace respective arguments in the command below and run it:
$ DOCKER_BUILDKIT=1 docker build --progress=plain --file client.Dockerfile \
--build-arg HOST_DS=http://<input argument>:8080/ \
--build-arg HOST_ST=ws://<input argument>:8081/ \
--build-arg MLW=l --output build .Run client:
$ ./build/staging/Zotero_VERSION/zotero(.exe))For [m]: m=Mac
Install Git LFS.
sudo port install git-lfsRun:
$ git submodule update --init --recursive
$ cd client
$ ./config.sh
$ cd zotero-client
$ npm install
$ npm run build
$ app/scripts/dir_build -p mRun client:
$ ./staging/Zotero_VERSION/zoteroConnect with the default user and password:
| Name | Login | Password |
|---|---|---|
| Zotero | admin | admin |
Credits
- https://github.com/FiligranHQ/zotprime
- https://github.com/gfacciol/zotero_dataserver-docker
- https://github.com/isabekov/dataserver
- https://github.com/piernov/zotprime
- https://github.com/Dwarf-Planet-Project/zotero_installation
- https://github.com/foxsen/zotero-selfhost
- https://github.com/zehuanli/zotero-selfhost
- https://github.com/fversaci/zotero-prime
- https://github.com/victoradrianjimenez/dockerized-zotero