Setting up Subversion on Amazon EC2

  • Creating an EC2 instance and connecting via SSH

    Create a new EC2 instance (free, unless you go beyond the free tier)

    • Choose an AMI: check "Free tier only" and pick the Amazon Linux AMI
    • Next (Choose an Instance Type): choose General purpose t2.microFree tier eligible (EBS only)
    • Next (Configure Instance Details): leave everything as is unless you need some changes e.g. subnet
    • Next (Add Storage): change Size (GiB) to up to 30GB
    • Next (Tag Instance): e.g. Key = Name, Value = MySVN or Key = Owner, Value = Yatko - learn more about tagging
    • Next (Configure Security Group): SSH should be already open, below click Add Rule and select HTTP on port 80, Anywhere (

    Review and Launch

    • Create a new key pair when prompted and download the .PPK file from amazon, save it in a safe place!
    • Visit the EC2 dashboard, instance should be Running and status checks 2/2 checks
    • Record your instance Public IP (and/or Public DNS)
      if Mac/Linux, open a Terminal window

    SSH into your instance:

    Locate the path where your .PPK file from amazon was saved e.g. /Documents/YOUR_PPK-FILE_PATH/mysvn.pem.txt

    # cd /Documents/**YOUR_PPK-FILE_PATH**/
    # ssh -i **mysvn.pem.txt** ec2-user@**YOUR_EC2_PUBLIC-IP**

    *if you encounter "WARNING: UNPROTECTED PRIVATE KEY FILE", try to chmod your keypair to 600: # chmod 600 mysvn.pem.txt
    *in case you run into more issues, read/ask here.

    if Windows (skip next 4 lines for Mac/Linux), download Putty
    SSH into your instance using the PPK from amazon (guide)
    Default amazon AMI SSH username is ec2-user, no password
    **Putty hint: right-click to paste clipboard contents.

    Installing software

    Update pre-installed software:
    # sudo yum update -y

    Visit the public ip in your browser: http://YOUR_EC2_PUBLIC-IP, should see Amazon Linux AMI Test Page if Apache is installed and running

    If Apache is not installed (guide):
    # sudo yum groupinstall -y "Web Server" "MySQL Database" "PHP Support"
    # sudo yum install -y php-mysql
    # sudo service httpd start

    Install subversion and mod_dav_svn (should see a long list of all changes):
    # sudo yum install -y mod_dav_svn
    # sudo sudo yum install -y subversion

    # sudo yum install mod_dav_svn subversion

    Edit the Apache configuration file for subversion:
    # sudo vi /etc/httpd/conf.d/subversion.conf
    Replace any subversion.conf content with:

    LoadModule dav_svn_module     modules/
    LoadModule authz_svn_module   modules/
    <Location /repos>
       DAV svn
       SVNParentPath /var/www/svn
       `# Limit write permission to list of valid users.`
       AuthType Basic
       AuthName "Authorization Realm"
       AuthUserFile /var/www/svn-auth/passwd
       AuthzSVNAccessFile  /var/www/svn-auth/access
       Require valid-user

    Create the directory which will contain the subversion repository:
    # sudo mkdir /var/www/svn

    Create the directory which will contain the permissions files.
    # sudo mkdir /var/www/svn-auth

    Create the permission file:
    # sudo vi /var/www/svn-auth/access
    And fill it with (replace sarah, colin, guest with your usernames):

    admin = rw
    user1 = rw
    guest = r

    Create and add to the password file (use -c the first time to create)
    # sudo htpasswd -cb /var/www/svn-auth/passwd admin ADMIN_PASSWORD
    # sudo htpasswd -b /var/www/svn-auth/passwd user1 USER1_PASSWORD
    # sudo htpasswd -b /var/www/svn-auth/passwd guest GUEST_PASSWORD

    Create a repository (REPONAME is the name of your repository eg rebuild):
    # cd /var/www/svn
    # sudo svnadmin create REPONAME

    Change files authorization (again after creating new repos too):
    # sudo chown -R apache.apache /var/www/svn /var/www/svn-auth
    # sudo chmod 600 /var/www/svn-auth/access /var/www/svn-auth/passwd

    Restart apache web server:
    # sudo service httpd restart
    May complain about determining domain and using, that’s ok

    To make sure apache always starts on boot:
    # sudo chkconfig httpd on
    # sudo chkconfig --list
    Should show 2:on 3:on 4:on 5:on for httpd

    Verify the subversion repo by opening in a browser:

    You’re done! Connect via your fav svn client using the url above.

    Other operations

    To copy from an older repo including revisions:
    # sudo svnadmin dump /var/www/svn/REPONAME > /tmp/REPONAME.svn
    (copy the file to the new server then)
    # sudo svnadmin load /var/www/svn/REPONAME < /tmp/REPONAME.svn

    To connect a backup mirror on another (non-free) EC2 server with the same setup (guide)
    First make revisions editable in the mirror repo:
    # sudo echo '#!/bin/sh' > /var/www/svn/REPONAME/hooks/pre-revprop-change
    # sudo chmod 755 /var/www/svn/REPONAME/hooks/pre-revprop-change
    Then initialize the mirror from the old one:
    # sudo svnsync init file:///var/www/svn/REPONAME http://YOUR_INSTANCE_IP/repos/REPONAME
    Should see "Copied properties for revision 0."
    Then copy the data including all revisions:
    # sudo svnsync sync file:///var/www/svn/REPONAME
    Can use this to make nightly backups to another server

    Based on Setting up Subversion on Amazon EC2 for free by northwaygames.comSetting up SVN on AWS EC2 instance by Stuff I Do and

Log in to reply