# Mirroring PGXN

Hosting a PGXN mirror is simple. All you need is:

- A reasonably fast internet connection
- Space for storage
- An rsync client
- A web server

The `rsync` address for the PGXN root mirror is `rsync://master.pgxn.org/pgxn`.

Once you have the `rsync` client installed on your system and the disk space mapped out, add an entry to your crontab like so:

    0 20 * * * /usr/bin/rsync -az --delete rsync://master.pgxn.org/pgxn /usr/local/pgxn

On Windows, use AT like so:

    AT 20:00 /every:M,T,W,Th,F,S,Su "C:\Program Files\Rsync\rsync -az --delete rsync://master.pgxn.org/pgxn C:\Projects\PGXN"

Please do not sync more than once every hour. And realistically you only need to sync once or twice a day. Next, set up a web server to serve the mirror. If your rsync is already in the subdirectory of a web server root, you should be golden. Otherwise you need a static file web server; perhaps the simplest is this Python one-liner serving on port 8080:

    python -m http.server 8080

If you’re using Apache, you can set up a virtual host like so (assuming that you’re `rsync`ing to `/usr/local/pgxn`):

    <VirtualHost *:80>
      DocumentRoot /usr/local/pgxn
      ServerName pgxn.example.org
      CustomLog /var/log/httpd/access_log combined
      <Directory /usr/local/pgxn>
        AllowOverride All
        Allow from all
        Options +Indexes
      </Directory>
    </VirtualHost>

For Nginx, you set set up a virtual host like this:

    server {
        listen       80;
        server_name  pgxn.example.org;
        charset      utf-8;
        location / {
            root   /var/local/pgxn;
            index  index.html;
        }
    }

If you’d like to register your mirror, send us email with all the details and we’ll get you registered.