Skip to content

Pinry Docker

A nice and easy way to get a Pinry instance up and running using docker. For help on getting started with docker see the official getting started guide at the end of this page.

Get Image form DockerHub

The image is here: getpinry/pinry, or you could simply pull the image from DockerHub's registry via

docker pull getpinry/pinry

Then use the command line like:

# this should be an abs-path not relative path like "."
export DATA_PATH=/abs/path/to/your/data/directory

sudo docker run -d=true -p=80:80 \
    -v=${DATA_PATH}:/data \
    getpinry/pinry

Build Docker from Source

Running this will get the latest version of pinry itself

git clone https://github.com/pinry/pinry
cd pinry/docker
./build_docker.sh

Now you can start your container by command like this

# this is where your database, local_settings and pins located
mkdir data
# use absolute path for docker to avoid using default data-volume (we use directory instead)
./start_docker.sh `readlink -f data`

Also, if you want to use a "named volume" instead, you can do this:

docker volume create pinry
docker run -d=true -p=80:80 \
    -v pinry:/data \
    getpinry/pinry

Please visit http://your-ip to visit your instance and register a new account, enjoy it.

Configuring docker-pinry


All the configuration files will be created in your data folder you mounted to docker (mounted as /data). If you use docker's data volume, please find the way to edit files via docker exec and any way like here.

Enable signups for new users

Please edit /data/local_settings.py in docker and remove the container then restart it.

ALLOW_NEW_REGISTRATIONS = True

Building docker-pinry again (with latest version)

Running this will build you a docker image with the latest version of pinry

git pull --rebase
cd ./docker/
./build_docker.sh

Backup

Just copy data folder's content to an safe place, enjoy :)

Why include nginx and not just map to gunicorn directly?

Because gunicorn/django can't serve static files very well and it is unwise to do so for security reasons. I built this so that people can have a full hosted solution in a container. If you have a host machine running nginx then of course there is no point to run nginx in the container as well, you can simply disable nginx, map gunicorn to a port and then set your host machine's nginx to display your media and static files since that directory is shared between the container and host.

Why use sqlite3?

Because it has a very low resource cost and most pinry websites are small personal ones. Why have a full on database for that? If you need more power than you can easily modify the data/local_settings.py to point to a stronger database solution ( e.g: PostgreSQL or MySQL ) .

Links