Because I found it a challenge and there's no good documentation, I'm posting what I used. Replace USER
and PROJECT
with your own folders.
---
deployment:
tasks:
# NOTE: public_html on cPanel must not be removed or renamed.
# This folder has owner USER:nobody, and the USER user does not have
# access to change owner. So this folder must stay as-is to keep the nobody
# group, which is critical to the site working. A new folder won't work.
- export DEPLOYPATH=/home/USER/public_html
- export REPOPATH=/home/USER/repositories/PROJECT
# Remove previous old files, if any.
- /bin/rm -Rf ${DEPLOYPATH}_old
# Copy old site files to another directory.
- /bin/cp -R ${DEPLOYPATH} ${DEPLOYPATH}_old
# Sync repository files to the deploy target path, excluding .git folder.
# --delete-after will remove deleted files and folders after syncing.
- /bin/rsync -aP --exclude '.git' --exclude '.well-known' ${REPOPATH}/ ${DEPLOYPATH} --delete-after
# Set correct permissions.
- /bin/chmod 755 ${DEPLOYPATH}
- /bin/find ${DEPLOYPATH} -type d -exec /bin/chmod 755 '{}' \;
- /bin/find ${DEPLOYPATH} -type f -exec /bin/chmod 644 '{}' \;
It's possible to use cp
, but it's a pain, because you don't want to copy the .git
folder, and you can't exclude folders easily. I used rsync
.
Setting the permissions is necessary if your git repo doesn't have the correct file/folder permissions. This happens often if you check in code from Windows.
You may need to change the deploy process for your own uses. See this guide for file permissions: https://www.a2hosting.com/kb/cpanel/cpanel-file-features/cpanel-file-manager/file-permissions