Sync svn repo commits to website documentroot in Cpanel Server
SITUATION: Customer has a cpanel server with one domain hosted on a shared ip and wants to setup svn repository for this domain in such a way that whenever the svn commit operation takes place, the contents of the repository is exported to the documentroot. Thus all updates to files inside documentroot can be done over svn instead of via ftp. Also use ‘svnserve’ daemon for setup and don’t use ‘mod_dav’.
1) Cpanel Server is used.
2) Domain is setup on a shared ip
3) Suphp is the php handler used
4) ‘username’ is the username of the website
1) Install subversion in cpanel server
yum install subversion.x86_64 -y
2) Create a directory named ‘repos’ inside the default documentroot of apache(ie, /usr/local/apache/htdocs/) and start the ‘svnserve’ daemon from that directory. Also make sure that the port 3690 is opened in firewall and you are starting the service as root user.
mkdir /usr/local/apache/htdocs/repos svnserve -d -r /usr/local/apache/htdocs/repos
3) Create a repository named ‘username’ and import its home directory(/home/username/public_html) to the repository,
cd /usr/local/apache/htdocs/repos svnadmin create username cd ~ svn import /home/username/public_html file:///usr/local/apache/htdocs/repos/username -m "username"
4) Now open up the svn repository configuration file “/usr/local/apache/htdocs/repos/username/conf/svnserve.conf” and disable anonymous access and specify the user authentication and authorization files,
[general] anon-access = none auth-access = write password-db = /usr/local/apache/htdocs/repos/username/conf/passwd authz-db = /usr/local/apache/htdocs/repos/username/conf/authz realm = Project logfile = /tmp/svn.log
5) Create a new user in user database file “/usr/local/apache/htdocs/repos/username/conf/passwd”
[users] jackal777 = pnity29#@I
6) Set authorization for user created in password file via “/usr/local/apache/htdocs/repos/username/conf/authz”
[/] jackal777 = rw
7) Now finally create post commit hook inside the repository directory “/usr/local/apache/htdocs/repos/username/hooks/post-commit” and set execute permission for that file. Paste the following contents to that file,
#!/bin/bash svn export --force file:///usr/local/apache/htdocs/repos/username/ /home/username/public_html/ chown -R username:username /home/username/public_html/
The post commit script will export the contents of the repository to the website documentroot and assigns the proper permission to the directory.
Now checkout the repository to your local directory,
svn co svn://220.127.116.11/username --username=jackal777
Make modifications with the files and then commit to the repository,
cd username svn commit
Now login to the server and check whether the commit made to repository are shown inside “/home/username/public_html”.
That’s it 🙂