ulib-postgres.dockerfile 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. FROM ubuntu:16.04
  2. RUN apt update
  3. RUN apt install -yqq software-properties-common build-essential curl locales wget unzip git \
  4. libmysqlclient-dev libpq-dev \
  5. libpcre3 libpcre3-dev \
  6. libssl-dev libcurl4-openssl-dev \
  7. zlib1g-dev \
  8. libreadline6-dev \
  9. libbz2-dev \
  10. libxslt-dev libgdbm-dev ncurses-dev \
  11. libffi-dev libtool bison libevent-dev \
  12. libgstreamer-plugins-base0.10-0 libgstreamer0.10-0 \
  13. liborc-0.4-0 libgnutls-dev \
  14. libjson0-dev libmcrypt-dev libicu-dev \
  15. re2c libnuma-dev
  16. RUN locale-gen en_US.UTF-8
  17. ENV LANG en_US.UTF-8
  18. ENV LANGUAGE en_US:en
  19. ENV LC_ALL en_US.UTF-8
  20. ENV DEBIAN_FRONTEND noninteractive
  21. RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
  22. apt update -yqq && \
  23. apt install -yqq gcc-6 g++-6
  24. ENV IROOT=/install
  25. ENV ULIB_VERSION=1.4.2
  26. ENV ULIB_ROOT=$IROOT/ULib
  27. ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
  28. ENV CC=gcc-6
  29. ENV CXX=g++-6
  30. ENV AR=gcc-ar-6
  31. ENV RANLIB=gcc-ranlib-6
  32. RUN mkdir -p $ULIB_ROOT
  33. RUN mkdir -p $ULIB_DOCUMENT_ROOT
  34. RUN apt install -yqq postgresql-server-dev-all libcap2-bin
  35. WORKDIR $IROOT
  36. # We need to install mongo-c-driver (we don't have a ubuntu package)
  37. RUN wget -q https://github.com/mongodb/mongo-c-driver/releases/download/1.1.10/mongo-c-driver-1.1.10.tar.gz
  38. RUN tar -xzf mongo-c-driver-1.1.10.tar.gz
  39. RUN cd mongo-c-driver-1.1.10/ && \
  40. ./configure --prefix=$IROOT --libdir=$IROOT && \
  41. make && make install
  42. # 1. Download ULib
  43. RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
  44. RUN tar xf ULib-${ULIB_VERSION}.tar.gz
  45. # 2. Compile application (userver_tcp)
  46. # AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
  47. WORKDIR $IROOT/ULib-$ULIB_VERSION
  48. RUN find . -exec touch {} \;
  49. RUN cp -r tests/examples/benchmark/FrameworkBenchmarks/ULib/db $ULIB_ROOT
  50. RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
  51. RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
  52. RUN echo "PREFORK_CHILD 2" >> $ULIB_ROOT/benchmark.cfg
  53. RUN echo "TCP_LINGER_SET 0 " >> $ULIB_ROOT/benchmark.cfg
  54. RUN echo "LISTEN_BACKLOG 16384" >> $ULIB_ROOT/benchmark.cfg
  55. RUN echo "ORM_DRIVER \"mysql pgsql\"" >> $ULIB_ROOT/benchmark.cfg
  56. RUN echo "CLIENT_FOR_PARALLELIZATION 100" >> $ULIB_ROOT/benchmark.cfg
  57. RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
  58. RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
  59. RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
  60. ./configure --prefix=$ULIB_ROOT \
  61. --disable-static --disable-examples \
  62. --with-mysql --with-pgsql \
  63. --without-ssl --without-pcre --without-expat \
  64. --without-libz --without-libuuid --without-magic --without-libares \
  65. --enable-static-orm-driver='mysql pgsql' --enable-static-server-plugin=http \
  66. --with-mongodb --with-mongodb-includes="-I$IROOT/include/libbson-1.0 -I$IROOT/include/libmongoc-1.0" --with-mongodb-ldflags="-L$IROOT"
  67. # --enable-debug \
  68. #USP_LIBS="-ljson" \
  69. #cp $TROOT/src/* src/ulib/net/server/plugin/usp
  70. RUN make install
  71. RUN cd examples/userver && make install
  72. # Compile usp pages (no more REDIS)
  73. RUN cd src/ulib/net/server/plugin/usp && \
  74. make json.la plaintext.la db.la query.la update.la fortune.la cached_worlds.la \
  75. mdb.la mquery.la mupdate.la mfortune.la && \
  76. cp .libs/json.so .libs/plaintext.so \
  77. .libs/db.so .libs/query.so .libs/update.so .libs/fortune.so .libs/cached_worlds.so \
  78. .libs/mdb.so .libs/mquery.so .libs/mupdate.so .libs/mfortune.so $ULIB_DOCUMENT_ROOT
  79. ENV PATH=${ULIB_ROOT}/bin:${PATH}
  80. ADD ./ /ulib
  81. WORKDIR /ulib
  82. # 1. Change ULib Server (userver_tcp) configuration
  83. RUN sed -i "s|TCP_LINGER_SET .*|TCP_LINGER_SET -2|g" $IROOT/ULib/benchmark.cfg
  84. RUN sed -i "s|LISTEN_BACKLOG .*|LISTEN_BACKLOG 256|g" $IROOT/ULib/benchmark.cfg
  85. RUN sed -i "s|CLIENT_FOR_PARALLELIZATION .*|CLIENT_FOR_PARALLELIZATION 100|g" $IROOT/ULib/benchmark.cfg
  86. # 2. Start ULib Server (userver_tcp)
  87. ENV ORM_DRIVER="pgsql"
  88. ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
  89. ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
  90. CMD sed -i "s|PREFORK_CHILD .*|PREFORK_CHILD $(( 2 * $(nproc)))|g" $IROOT/ULib/benchmark.cfg && \
  91. setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
  92. $IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg