new plan and docs
This commit is contained in:
103
SETUP.md
Normal file
103
SETUP.md
Normal file
@@ -0,0 +1,103 @@
|
||||
Dokploy + Docker Swarm Homelab Setup Instructions
|
||||
This guide walks through setting up a fresh, multi-node Docker Swarm cluster using Dokploy for quick web app deployment and easy hosting of infrastructure services (like Pi-hole and Minio), including shared storage via NFS from your NAS node.
|
||||
|
||||
1. Prepare Environment
|
||||
• Choose a primary node (can be any capable Linux server).
|
||||
• Identify your NAS node (high capacity storage).
|
||||
• Gather all SSH credentials.
|
||||
• Ensure all nodes have Docker installed (curl -fsSL https://get.docker.com | sh).
|
||||
|
||||
2. Initialize Docker Swarm Cluster
|
||||
On your primary node:
|
||||
docker swarm init --advertise-addr <PRIMARY_NODE_IP>
|
||||
On each additional node:
|
||||
• Run the join command given by the previous step, e.g.:
|
||||
docker swarm join --token <TOKEN> <PRIMARY_NODE_IP>:2377
|
||||
|
||||
3. Label Nodes for Placement Constraints
|
||||
On your primary node, label nodes:
|
||||
docker node update --label-add role=storage nas-node-01
|
||||
docker node update --label-add storage=high nas-node-01
|
||||
docker node update --label-add role=compute node-light-01
|
||||
docker node update --label-add infra=true nas-node-01
|
||||
(Replace node names as appropriate)
|
||||
|
||||
4. Set Up Dokploy
|
||||
On primary node:
|
||||
curl -sSL https://dokploy.com/install.sh | sh
|
||||
• Dokploy UI will be available on port 8080.
|
||||
• Default credentials: admin / admin (change ASAP).
|
||||
|
||||
5. Set Up Shared NFS Storage from Your NAS
|
||||
On your NAS node:
|
||||
• Install NFS server (Debian/Ubuntu):
|
||||
sudo apt install nfs-kernel-server
|
||||
• Export a directory:
|
||||
o Edit /etc/exports, add:
|
||||
/mnt/storage/docker-data *(rw,sync,no_subtree_check)
|
||||
o Restart NFS:
|
||||
sudo exportfs -ra
|
||||
sudo systemctl restart nfs-kernel-server
|
||||
|
||||
6. Create Shared NFS Volume in Docker
|
||||
On the manager node:
|
||||
docker volume create
|
||||
--driver local
|
||||
--opt type=nfs
|
||||
--opt o=addr=<NAS_IP>,rw,nolock,nfsvers=4
|
||||
--opt device=:/mnt/storage/docker-data
|
||||
shared-data
|
||||
(Replace <NAS_IP> with your NAS's address.)
|
||||
|
||||
7. Deploy Apps with Dokploy + Placement Constraints
|
||||
• Use Dokploy UI to:
|
||||
o Deploy your web apps (Node.js, PHP, static sites)
|
||||
o Set replica counts (scaling)
|
||||
o Pin infrastructure apps (like Pi-hole or Minio) to the NAS node via placement constraints.
|
||||
o Use the shared NFS volume for persistent data.
|
||||
Example Docker Compose snippet for Pinning:
|
||||
services:
|
||||
pihole:
|
||||
image: pihole/pihole
|
||||
deploy:
|
||||
placement:
|
||||
constraints:
|
||||
- node.labels.role==storage
|
||||
volumes:
|
||||
- shared-data:/etc/pihole
|
||||
|
||||
8. (Optional) Set Up Minio (S3-Compatible Storage)
|
||||
• Deploy Minio with Dokploy, pin it to your NAS, and use shared volume for data:
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: changeme123
|
||||
volumes:
|
||||
- shared-data:/data
|
||||
deploy:
|
||||
placement:
|
||||
constraints:
|
||||
- node.labels.role==storage
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9001:9001"
|
||||
|
||||
9. Add Web Apps and Experiment!
|
||||
• Use Dokploy's UI to connect to your Gitea instance, auto-deploy repos, and experiment rapidly.
|
||||
• Traefik integration and SSL setup is handled automatically in Dokploy.
|
||||
|
||||
10. Restore K3s (Optional, Later)
|
||||
• Your original K3s manifests are saved in git—just reapply if you wish to revert:
|
||||
k3s server
|
||||
kubectl apply -f <your-manifests>
|
||||
|
||||
References
|
||||
• Docker Swarm Docs: https://docs.docker.com/engine/swarm/
|
||||
• Dokploy Docs: https://dokploy.com/docs/
|
||||
• Docker Volumes: https://docs.docker.com/engine/storage/volumes/
|
||||
• NFS on Linux: https://help.ubuntu.com/community/NFS
|
||||
|
||||
This guide gives you a fast start for a declarative, multi-node homelab with web app simplicity and infrastructure reliability using Dokploy and Docker Swarm!
|
||||
Reference in New Issue
Block a user