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:

``` cron
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:

``` sh
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`):

``` apache
<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:

``` nginx
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.

  [rsync]: https://rsync.samba.org
  [Python one-liner]: https://docs.python.org/3/library/http.server.html
  [Apache]: https://httpd.apache.org
  [Nginx]: https://nginx.org
  [send us email]: mailto:[_1]
