Tweaks to setup scripts

pull/1/head
Tim Sutton 2014-05-04 21:14:46 +02:00
rodzic 12ec877396
commit 4c7b293f06
10 zmienionych plików z 285 dodań i 3 usunięć

1
71-apt-cacher-ng 100644
Wyświetl plik

@ -0,0 +1 @@
Acquire::http { Proxy "http://192.168.1.13:3142"; };

54
Dockerfile 100644
Wyświetl plik

@ -0,0 +1,54 @@
#--------- Generic stuff all our Dockerfiles should start with so we get caching ------------
FROM ubuntu:trusty
MAINTAINER Tim Sutton<tim@linfiniti.com>
RUN export DEBIAN_FRONTEND=noninteractive
ENV DEBIAN_FRONTEND noninteractive
RUN dpkg-divert --local --rename --add /sbin/initctl
#RUN ln -s /bin/true /sbin/initctl
# Use local cached debs from host (saves your bandwidth!)
# Change ip below to that of your apt-cacher-ng host
# Or comment this line out if you do not with to use caching
ADD 71-apt-cacher-ng /etc/apt/apt.conf.d/71-apt-cacher-ng
RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list
RUN apt-get -y update
# socat can be used to proxy an external port and make it look like it is local
RUN apt-get -y install ca-certificates socat openssh-server supervisor
RUN mkdir /var/run/sshd
ADD sshd.conf /etc/supervisor/conf.d/sshd.conf
RUN echo 'root:postgis' | chpasswd
#-------------Application Specific Stuff ----------------------------------------------------
# Next line a workaround for https://github.com/dotcloud/docker/issues/963
RUN apt-get install -y postgresql-9.3-postgis-2.1
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
# Note: I dont think this is relevant anymore as start.sh sets up a user
# Please test and verify before removing though
RUN service postgresql start && /bin/su postgres -c "createuser -d -s -r -l docker" && /bin/su postgres -c "psql postgres -c \"ALTER USER docker WITH ENCRYPTED PASSWORD 'docker'\"" && service postgresql stop
# Listen on all ip addresses
RUN echo "listen_addresses = '*'" >> /etc/postgresql/9.3/main/postgresql.conf
RUN echo "port = 5432" >> /etc/postgresql/9.3/main/postgresql.conf
# Start with supervisor
ADD postgres.conf /etc/supervisor/conf.d/postgres.conf
# Open port 5432 and 22 so linked containers can see them
EXPOSE 5432
EXPOSE 22
# Run any additional tasks here that are too tedious to put in
# this dockerfile directly.
ADD setup.sh /setup.sh
RUN chmod 0755 /setup.sh
RUN /setup.sh
# We will run any commands in this when the container starts
ADD start-postgis.sh /start-postgis.sh
RUN chmod 0755 /start-postgis.sh
CMD supervisor -n

Wyświetl plik

@ -1,4 +1,74 @@
docker-postgis
==============
# docker-postgis
Dockerfile for postgis
A simple docker container that runs PostGIS
## Build
To build the image do:
```
docker build -t kartoza/postgis git://github.com/timlinux/docker-postgis
```
Run
---
To create a running container do:
```
sudo docker run --name "postgis" -p 2222:22 -p 25432:5432 -d -t kartoza/postgis:2.1
```
## Connect via psql
To log in to your container do:
Connect with psql (make sure you first install postgresql client tools on your
host / client):
```
psql -h localhost -U docker -p 25432 -l
```
You can then go on to use any normal postgresql commands against the container.
Under ubuntu 14.04 the postgresql client can be installed like this:
```
sudo apt-get install postgresql-client-9.3
```
# Storing data on the host rather than the container.
Docker volumes can be used to persist your data.
```
mkdir -p ~/postgres_data
docker run -d -v $HOME/postgres_data:/var/lib/postgresql kartoza/postgis`
```
You need to ensure the ``postgres_data`` directory has sufficinet permissions
for the docker process to read / write it.
Connect via ssh
---------------
To log into your container do:
```
ssh root@localhost -p 2222
```
Default ssh password is 'postgis'
Credits
-------
Tim Sutton (tim@linfiniti.com)
May 2014

1
build.sh 100755
Wyświetl plik

@ -0,0 +1 @@
docker build -t kartoza/postgis:2.1 .

Wyświetl plik

@ -0,0 +1,39 @@
#!/bin/bash
# Commit and redeploy the user map container
#
if [ $# -ne 1 ]; then
echo "Commit and then redeploy the user_map container."
echo "Usage:"
echo "$0 <version>"
echo "e.g.:"
echo "$0 1.6"
echo "Will commit the current state of the container as version 1.6"
echo "and then redeploy it."
exit 1
fi
VERSION=$1
HOST_DATA_DIR=/var/docker-data/postgres-data
PGUSER=qgis
PGPASS=qgis
IDFILE=/home/timlinux/postgis-current-container.id
ID=`cat $IDFILE`
docker commit $ID qgis/postgis:$VERSION -run='{"Cmd": ["/start.sh"], "PortSpecs": ["5432"], "Hostname": "postgis"}' -author="Tim Sutton <tim@linfiniti.com>"
docker kill $ID
docker rm $ID
rm $IDFILE
if [ ! -d $HOST_DATA_DIR ]
then
mkdir $HOST_DATA_DIR
fi
CMD="docker run -cidfile="$IDFILE" -name="postgis" -e USERNAME=$PGUSER -e PASS=$PGPASS -d -v $HOST_DATA_DIR:/var/lib/postgresql -t qgis/postgis:$VERSION /start.sh"
echo 'Running:'
echo $CMD
eval $CMD
NEWID=`cat $IDFILE`
echo "Postgis has been committed as $1 and redeployed as $NEWID"
docker ps -a | grep $NEWID
echo "If thhere was no pre-existing database, you can access this using"
IPADDRESS=`docker inspect postgis | grep IPAddress | grep -o '[0-9\.]*'`
echo "psql -l -p 5432 -h $IPADDRESS -U $PGUSER"
echo "and password $PGPASS"

5
postgres.conf 100644
Wyświetl plik

@ -0,0 +1,5 @@
[program:postgres]
user=root
command=/start-postgis.sh
autorestart=true
stopsignal=INT

Wyświetl plik

@ -0,0 +1,50 @@
#!/bin/bash
# Commit and redeploy the user map container
# Note this script hosts the postgis cluster on the host filesystem
# If you want to use the container with the cluster embedded
# In the container, run it like this:
#
if [ $# -ne 1 ]; then
echo "Deploy the postgis container."
echo "Usage:"
echo "$0 <version>"
echo "e.g.:"
echo "$0 2.1"
echo "Will run the container using tag version 2.1"
echo "Once it is running see the commit-and-deploy.sh script if you"
echo "wish to save new snapshots."
exit 1
fi
VERSION=$1
HOST_DATA_DIR=/var/docker-data/postgres-dat
PGUSER=qgis
PGPASS=qgis
IDFILE=/home/timlinux/postgis-current-container.id
if [ ! -d $HOST_DATA_DIR ]
then
mkdir $HOST_DATA_DIR
fi
CMD="docker run -cidfile="$IDFILE" -name="postgis" -e USERNAME=$PGUSER -e PASS=$PGPASS -d -v $HOST_DATA_DIR:/var/lib/postgresql -t qgis/postgis:$VERSION /start.sh"
echo 'Running:'
echo $CMD
eval $CMD
NEWID=`cat $IDFILE`
echo "Postgis has been deployed as $NEWID"
docker ps -a | grep $NEWID
echo "If there was no pre-existing database, you can access this using"
IPADDRESS=`docker inspect postgis | grep IPAddress | grep -o '[0-9\.]*'`
echo "psql -l -p 5432 -h $IPADDRESS -U $PGUSER"
echo "and password $PGPASS"
echo
echo "Alternatively link to this container from another to access it"
echo "e.g. docker run -link postgis:pg .....etc"
echo "Will make the connection details to the postgis server available"
echo "in your app container as $PG_PORT_5432_TCP_ADDR (for the ip address)"
echo "and $PG_PORT_5432_TCP_PORT (for the port number)."

1
setup.sh 100644
Wyświetl plik

@ -0,0 +1 @@
# Add any additional setup tasks here

5
sshd.conf 100644
Wyświetl plik

@ -0,0 +1,5 @@
[program:sshd]
user=root
command=/usr/sbin/sshd -D
autorestart=true
stopsignal=INT

56
start-postgis.sh 100644
Wyświetl plik

@ -0,0 +1,56 @@
#!/bin/bash
DATADIR="/var/lib/postgresql/9.3/main"
CONF="/etc/postgresql/9.3/main/postgresql.conf"
POSTGRES="/usr/lib/postgresql/9.3/bin/postgres"
INITDB="/usr/lib/postgresql/9.3/bin/initdb"
SQLDIR="/usr/share/postgresql/9.3/contrib/postgis-2.1/"
# test if DATADIR is existent
if [ ! -d $DATADIR ]; then
echo "Creating Postgres data at $DATADIR"
mkdir -p $DATADIR
fi
# Note that $USERNAME and $PASS below are passed via docker run e.g.
#docker run -cidfile=/home/timlinux/postgis-current-container.id -name=postgis -e USERNAME=qgis -e PASS=qgis -d -v /var/docker-data/postgres-dat:/var/lib/postgresql -t qgis/postgis:6 /start.sh
# test if DATADIR has content
if [ ! "$(ls -A $DATADIR)" ]; then
echo "Initializing Postgres Database at $DATADIR"
chown -R postgres $DATADIR
su postgres sh -c "$INITDB $DATADIR"
su postgres sh -c "$POSTGRES --single -D $DATADIR -c config_file=$CONF" <<< "CREATE USER $USERNAME WITH SUPERUSER PASSWORD '$PASS';"
fi
trap "echo \"Sending SIGTERM to postgres\"; killall -s SIGTERM postgres" SIGTERM
su postgres sh -c "$POSTGRES -D $DATADIR -c config_file=$CONF" &
# Wait for the db to start up before trying to use it....
sleep 10
RESULT=`su postgres sh -c "psql -l" | grep postgis | wc -l`
if [[ $RESULT == '1' ]]
then
echo 'Postgis Already There'
else
echo "Postgis is missing, installing now"
# Note the dockerfile must have put the postgis.sql and spatialrefsys.sql scripts into /root/
# We use template0 since we want t different encoding to template1
su postgres sh -c "createdb template_postgis -E UTF8 -T template0"
su postgres sh -c "psql template0 -c 'UPDATE pg_database SET datistemplate = TRUE WHERE datname = \'template_postgis\';'"
su postgres sh -c "psql template_postgis -f $SQLDIR/postgis.sql"
su postgres sh -c "psql template_postgis -f $SQLDIR/spatial_ref_sys.sql"
# Needed when importing old dumps using e.g ndims for constraints
su postgres sh -c "psql template_postgis -f $SQLDIR/legacy_minimal.sql"
su postgres sh -c "psql template_postgis -c 'GRANT ALL ON geometry_columns TO PUBLIC;'"
su postgres sh -c "psql template_postgis -c 'GRANT ALL ON geography_columns TO PUBLIC;'"
su postgres sh -c "psql template_postgis -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'"
# This should show up in docker logs afterwards
fi
su postgres sh -c "psql -l"
wait $!