├── Dockerfile ├── README.md ├── build.sh ├── container ├── docker-entrypoint.sh └── postgresql.conf.sh ├── licenses └── docker-library │ └── postgres │ ├── AUTHORS │ └── LICENSE └── run.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:xenial 2 | 3 | ENV DEBIAN_FRONTEND noninteractive 4 | 5 | RUN groupadd postgres --gid=999 \ 6 | && useradd --gid postgres --uid=999 postgres 7 | 8 | ENV GOSU_VERSION 1.7 9 | RUN apt-get -qq update \ 10 | && apt-get -qq install --yes --no-install-recommends ca-certificates wget locales \ 11 | && apt-get clean \ 12 | && rm -rf /var/lib/apt/lists/* \ 13 | && wget --quiet -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ 14 | && chmod +x /usr/local/bin/gosu \ 15 | && gosu nobody true 16 | 17 | RUN localedef --inputfile ru_RU --force --charmap UTF-8 --alias-file /usr/share/locale/locale.alias ru_RU.UTF-8 18 | ENV LANG ru_RU.utf8 19 | 20 | ENV SERVER_VERSION 9.4 21 | ENV PATH /usr/lib/postgresql/$SERVER_VERSION/bin:$PATH 22 | ENV PGDATA /data 23 | RUN echo deb http://1c.postgrespro.ru/deb/ xenial main > /etc/apt/sources.list.d/postgrespro-1c.list \ 24 | && wget --quiet -O- http://1c.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO-1C | apt-key add - \ 25 | && apt-get -qq update \ 26 | && apt-get -qq install --yes --no-install-recommends postgresql-common-pro-1c \ 27 | && sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf \ 28 | && apt-get -qq install --yes --no-install-recommends postgresql-pro-1c-$SERVER_VERSION \ 29 | && apt-get clean \ 30 | && rm -rf /var/lib/apt/lists/* 31 | 32 | RUN mkdir --parent /var/run/postgresql "$PGDATA" /docker-entrypoint-initdb.d \ 33 | && chown --recursive postgres:postgres /var/run/postgresql "$PGDATA" \ 34 | && chmod g+s /var/run/postgresql 35 | 36 | COPY container/docker-entrypoint.sh / 37 | COPY container/postgresql.conf.sh /docker-entrypoint-initdb.d 38 | 39 | ENTRYPOINT ["/docker-entrypoint.sh"] 40 | 41 | VOLUME $PGDATA 42 | 43 | EXPOSE 5432 44 | 45 | CMD ["postgres"] 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-postgrespro-1c 2 | 3 | ## Что это? 4 | 5 | docker-postgrespro-1c -- это Docker-контейнер PostgreSQL для использования с сервером 1С:Предприятия (который, в свою очередь, тоже может работать в [контейнере Docker](https://github.com/alexanderfefelov/docker-1c-server)). В контейнере используется сборка Postgres Professional, которая содержит патчи, разработанные компанией 1С. 6 | 7 | ## Как это установить? 8 | 9 | Для установки и начального запуска выполните команды: 10 | 11 | git clone https://github.com/alexanderfefelov/docker-postgrespro-1c.git 12 | cd docker-postgrespro-1c 13 | ./build.sh 14 | ./run.sh 15 | 16 | :exclamation: __ВАЖНО__ PostgreSQL в образе никак не сконфигурирован. Если вы хотите использовать свою конфигурацию PostgreSQL, отредактируйте файл `container/postgresql.conf.sh` перед вызовом `build.sh`. После этого все контейнеры, созданные из этого образа, будут сконфигурированы аналогично. 17 | 18 | ## Как остановить/запустить/перезапустить контейнер? 19 | 20 | Для управления контейнером используйте команды: 21 | 22 | docker stop postgrespro-1c 23 | docker start postgrespro-1c 24 | docker restart postgrespro-1c 25 | 26 | ## Какой пароль у администратора? 27 | 28 | При первом запуске контейнера пользователю `postgres` назначается пароль `password`. Не забудьте поменять его на более надёжный. 29 | 30 | ## Где мои данные? 31 | 32 | Данные PostgreSQL вы можете найти в каталоге `/var/lib/docker/volumes/postgrespro-1c-data/_data`. 33 | 34 | ## Как это удалить? 35 | 36 | Удалите контейнер: 37 | 38 | docker rm -f postgrespro-1c 39 | 40 | Удалите образ: 41 | 42 | docker rmi alexanderfefelov/postgrespro-1c 43 | 44 | :fire: Удалите данные: 45 | 46 | docker volume rm postgrespro-1c-data 47 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker build --tag alexanderfefelov/postgrespro-1c . 4 | -------------------------------------------------------------------------------- /container/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # usage: file_env VAR [DEFAULT] 5 | # ie: file_env 'XYZ_DB_PASSWORD' 'example' 6 | # (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of 7 | # "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) 8 | file_env() { 9 | local var="$1" 10 | local fileVar="${var}_FILE" 11 | local def="${2:-}" 12 | if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then 13 | echo >&2 "error: both $var and $fileVar are set (but are exclusive)" 14 | exit 1 15 | fi 16 | local val="$def" 17 | if [ "${!var:-}" ]; then 18 | val="${!var}" 19 | elif [ "${!fileVar:-}" ]; then 20 | val="$(< "${!fileVar}")" 21 | fi 22 | export "$var"="$val" 23 | unset "$fileVar" 24 | } 25 | 26 | if [ "${1:0:1}" = '-' ]; then 27 | set -- postgres "$@" 28 | fi 29 | 30 | # allow the container to be started with `--user` 31 | if [ "$1" = 'postgres' ] && [ "$(id -u)" = '0' ]; then 32 | mkdir -p "$PGDATA" 33 | chown -R postgres "$PGDATA" 34 | chmod 700 "$PGDATA" 35 | 36 | mkdir -p /var/run/postgresql 37 | chown -R postgres /var/run/postgresql 38 | chmod g+s /var/run/postgresql 39 | 40 | exec gosu postgres "$BASH_SOURCE" "$@" 41 | fi 42 | 43 | if [ "$1" = 'postgres' ]; then 44 | mkdir -p "$PGDATA" 45 | chown -R "$(id -u)" "$PGDATA" 2>/dev/null || : 46 | chmod 700 "$PGDATA" 2>/dev/null || : 47 | 48 | # look specifically for PG_VERSION, as it is expected in the DB dir 49 | if [ ! -s "$PGDATA/PG_VERSION" ]; then 50 | file_env 'POSTGRES_INITDB_ARGS' 51 | eval "initdb --username=postgres $POSTGRES_INITDB_ARGS" 52 | 53 | # check password first so we can output the warning before postgres 54 | # messes it up 55 | file_env 'POSTGRES_PASSWORD' 56 | if [ "$POSTGRES_PASSWORD" ]; then 57 | pass="PASSWORD '$POSTGRES_PASSWORD'" 58 | authMethod=md5 59 | else 60 | # The - option suppresses leading tabs but *not* spaces. :) 61 | cat >&2 <<-'EOWARN' 62 | **************************************************** 63 | WARNING: No password has been set for the database. 64 | This will allow anyone with access to the 65 | Postgres port to access your database. In 66 | Docker's default configuration, this is 67 | effectively any other container on the same 68 | system. 69 | 70 | Use "-e POSTGRES_PASSWORD=password" to set 71 | it in "docker run". 72 | **************************************************** 73 | EOWARN 74 | 75 | pass= 76 | authMethod=trust 77 | fi 78 | 79 | { echo; echo "host all all all $authMethod"; } | tee -a "$PGDATA/pg_hba.conf" > /dev/null 80 | 81 | # internal start of server in order to allow set-up using psql-client 82 | # does not listen on external TCP/IP and waits until start finishes 83 | PGUSER="${PGUSER:-postgres}" \ 84 | pg_ctl -D "$PGDATA" \ 85 | -o "-c listen_addresses='localhost'" \ 86 | -w start 87 | 88 | file_env 'POSTGRES_USER' 'postgres' 89 | file_env 'POSTGRES_DB' "$POSTGRES_USER" 90 | 91 | psql=( psql -v ON_ERROR_STOP=1 ) 92 | 93 | if [ "$POSTGRES_DB" != 'postgres' ]; then 94 | "${psql[@]}" --username postgres <<-EOSQL 95 | CREATE DATABASE "$POSTGRES_DB" ; 96 | EOSQL 97 | echo 98 | fi 99 | 100 | if [ "$POSTGRES_USER" = 'postgres' ]; then 101 | op='ALTER' 102 | else 103 | op='CREATE' 104 | fi 105 | "${psql[@]}" --username postgres <<-EOSQL 106 | $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ; 107 | EOSQL 108 | echo 109 | 110 | psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) 111 | 112 | echo 113 | for f in /docker-entrypoint-initdb.d/*; do 114 | case "$f" in 115 | *.sh) echo "$0: running $f"; . "$f" ;; 116 | *.sql) echo "$0: running $f"; "${psql[@]}" -f "$f"; echo ;; 117 | *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; 118 | *) echo "$0: ignoring $f" ;; 119 | esac 120 | echo 121 | done 122 | 123 | PGUSER="${PGUSER:-postgres}" \ 124 | pg_ctl -D "$PGDATA" -m fast -w stop 125 | 126 | echo 127 | echo 'PostgreSQL init process complete; ready for start up.' 128 | echo 129 | fi 130 | fi 131 | 132 | exec "$@" 133 | -------------------------------------------------------------------------------- /container/postgresql.conf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat << EOF > $PGDATA/postgresql.conf 4 | 5 | #------------------------------------------------------------------------------ 6 | # CONNECTIONS AND AUTHENTICATION 7 | #------------------------------------------------------------------------------ 8 | 9 | listen_addresses = '*' 10 | 11 | #------------------------------------------------------------------------------ 12 | # ERROR REPORTING AND LOGGING 13 | #------------------------------------------------------------------------------ 14 | 15 | logging_collector = on 16 | log_line_prefix = '%m ' 17 | 18 | EOF 19 | -------------------------------------------------------------------------------- /licenses/docker-library/postgres/AUTHORS: -------------------------------------------------------------------------------- 1 | Docker PostgreSQL Authors 2 | 3 | Tianon Gravi 4 | Joseph Ferguson 5 | 6 | And other contributors not specifically named here. 7 | -------------------------------------------------------------------------------- /licenses/docker-library/postgres/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2015, Docker PostgreSQL Authors (See AUTHORS) 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker run --name postgrespro-1c \ 4 | --net host \ 5 | --detach \ 6 | --volume postgrespro-1c-data:/data \ 7 | --volume /etc/localtime:/etc/localtime:ro \ 8 | --env POSTGRES_PASSWORD=password \ 9 | alexanderfefelov/postgrespro-1c 10 | --------------------------------------------------------------------------------