See my previous post, Upgrade Ubuntu and LEMP on an Unmanaged VPS, to learn how to upgrade LEMP and Ubuntu to the latest versions. In this post, we will install Subversion on the server and learn how to access it using Subversion over SSH (svn+ssh).
Note: Though I’m doing the work on a DigitalOcean VPS running Ubuntu, the instructions may also apply to other VPS providers.
Subversion allows a client to execute svn commands on the server over SSH. As a result, there is no need to have a Subversion server process (svnserve) running or an Apache server configured to support Subversion (mod_dav_svn); one only needs SSH access. Subversion over SSH is simple and sufficient for my needs.
For svn+ssh, access to Subversion is controlled by the Linux user login. To avoid having to input your SSH login password every time you run a svn command, I recommend configuring SSH with public key authentication between your client and the server. For instructions, see the “SSH With Public Key Authentication” section in my previous post, SSH and SSL With HostGator Shared Web Hosting.
To begin, on the server, install the Subversion package and create a repository:
sudo apt-get install subversion
# Check that subversion is installed
svn --version
# Make a repository directory
sudo mkdir /var/repos
# Create a repository
sudo svnadmin create /var/repos
We need to change the permissions on the newly-created repository directory so that our Linux user can have read-write access. I recommend adding your user to the ‘www-data’ group and giving that group modify access to the repository like so:
sudo usermod -g www-data mynewuser
# Check by showing all groups that mynewuser belongs to
groups mynewuser
# Change repository group owner to be www-data
sudo chgrp -R www-data /var/repos
# Add group write permission to repository
sudo chmod -R g+w /var/repos
On the remote client machine, we will use the Subversion client with svn+ssh to access the repository. Because we are using a custom SSH port and the Subversion command line does not provide an option to input the SSH custom port, we have to configure SSH to use the custom port automatically.
Configure SSH to use the custom port when connecting to your server by creating a SSH configuration file located at “~/.ssh/config” (on Mac OS X) or “%HOME%/.ssh/config” (on Windows). Input the following file content:
Port 3333
PreferredAuthentications publickey,password
After this, you can run “ssh mynewuser@mydomain.com” instead of “ssh -p 3333 mynewuser@mydomain.com” because SSH will use the custom 3333 port automatically when connecting to “mydomain.com”.
Note: On Windows, I am using the DeltaCopy “ssh.exe” client in combination with the CollabNet “svn.exe” Subversion client. On Mac OS X, I am using the built-in ssh client and the svn client (installed using MacPorts).
To test access to the repository, run the following command on the client:
svn list svn+ssh://mynewuser@mydomain.com/var/repos
This command will return an empty line because there are no projects in the repository currently. If you do not see an error, then the command works correctly.
On the client, you can now issue the standard Subversion commands like the following:
svn import ./myproject svn+ssh://mynewuser@mydomain.com/var/repos/myproject -m "Initial Import"
# The list command should now show your newly-imported project
svn list svn+ssh://mynewuser@mydomain.com/var/repos
# Check out a local, working copy of the project from the repository
svn co svn+ssh://mynewuser@mydomain.com/var/repos/myproject ./myproject2
# View the working copy's info (no need to input the svn+ssh URL once inside the project)
cd ./myproject2
svn info
# Update the project to the latest version
svn update
If you should wish to run Subversion commands locally on the server, you can do so using the “file:///” path instead of “svn+ssh://” URL.
svn list file:///var/repos
# Check out a local, working copy of the project from the repository
svn co file:///var/repos/myproject ./myproject2
And we are done. Hopefully the above info will be useful should you ever need to get Subversion working.
See my followup post, Automate Remote Backup of WordPress Database, on how to create and schedule a Windows batch script to backup the WordPress database.