diff --git a/packages/server/src/setup/server-setup.ts b/packages/server/src/setup/server-setup.ts index 66204b21a..a1324e9c8 100644 --- a/packages/server/src/setup/server-setup.ts +++ b/packages/server/src/setup/server-setup.ts @@ -144,6 +144,9 @@ ${installRClone()} echo -e "4. Installing Docker. " ${installDocker()} +echo -e "4.1. Setting up Docker permissions" +${setupDockerPermissions()} + echo -e "5. Setting up Docker Swarm" ${setupSwarm()} @@ -573,6 +576,49 @@ export const installRClone = () => ` fi `; +const setupDockerPermissions = () => ` + # Get the original user who ran sudo (if any) + ORIGINAL_USER=\${SUDO_USER:-\$USER} + + # Add user to docker group + if getent group docker > /dev/null 2>&1; then + if ! groups \$ORIGINAL_USER | grep -q docker; then + echo "Adding user \$ORIGINAL_USER to docker group..." + usermod -aG docker \$ORIGINAL_USER + echo "User \$ORIGINAL_USER added to docker group ✅" + else + echo "User \$ORIGINAL_USER already in docker group ✅" + fi + else + echo "Docker group not found, creating it..." + groupadd docker + usermod -aG docker \$ORIGINAL_USER + echo "Docker group created and user added ✅" + fi + + # Configure sudo to allow docker commands without password for the user + if [ "\$ORIGINAL_USER" != "root" ]; then + echo "Configuring passwordless sudo for Docker commands..." + echo "\$ORIGINAL_USER ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/docker-compose, /usr/local/bin/docker-compose" > /etc/sudoers.d/\$ORIGINAL_USER-docker + chmod 440 /etc/sudoers.d/\$ORIGINAL_USER-docker + echo "Docker sudo configuration completed ✅" + fi + + # Restart docker service to ensure group changes take effect + systemctl restart docker + echo "Docker service restarted ✅" + + # Create a configuration file to tell Dokploy to use sudo for Docker commands + if [ "\$ORIGINAL_USER" != "root" ]; then + echo "Creating Dokploy Docker configuration..." + mkdir -p /etc/dokploy/config + echo "USE_SUDO_FOR_DOCKER=true" > /etc/dokploy/config/docker.conf + echo "DOCKER_USER=\$ORIGINAL_USER" >> /etc/dokploy/config/docker.conf + chown -R \$ORIGINAL_USER:\$ORIGINAL_USER /etc/dokploy/config + echo "Dokploy Docker configuration created ✅" + fi +`; + export const createTraefikInstance = () => { const command = ` # Check if dokpyloy-traefik exists