[关闭]
@zslzxc 2018-03-06T07:29:00.000000Z 字数 7816 阅读 3191

Docker 部署 Openresty + Lor + Openresty-china

openresty docker lor


前言

Docker部署Openresty + Lor + Openresty-china总体来说不难,但是还是有许多问题,这些问题一个是不细心造成的,一个是无知造成的,所以,我都会一一记下来。

Docker 部署 Openresty + Lor

因为我们要安装Lor所以,我们不直接使用官方镜像,而是通过修改Dockerfile来创建自己的镜像。

创建 Dockerfile:

  1. # Dockerfile - CentOS 7
  2. # https://github.com/openresty/docker-openresty
  3. FROM centos:7
  4. LABEL maintainer="Evan Wies <evan@neomantra.net>"
  5. # Docker Build Arguments
  6. ARG RESTY_VERSION="1.13.6.1"
  7. ARG RESTY_LUAROCKS_VERSION="2.4.3"
  8. ARG RESTY_OPENSSL_VERSION="1.0.2k"
  9. ARG RESTY_PCRE_VERSION="8.41"
  10. ARG RESTY_J="1"
  11. ARG RESTY_CONFIG_OPTIONS="\
  12. --with-file-aio \
  13. --with-http_addition_module \
  14. --with-http_auth_request_module \
  15. --with-http_dav_module \
  16. --with-http_flv_module \
  17. --with-http_geoip_module=dynamic \
  18. --with-http_gunzip_module \
  19. --with-http_gzip_static_module \
  20. --with-http_image_filter_module=dynamic \
  21. --with-http_mp4_module \
  22. --with-http_random_index_module \
  23. --with-http_realip_module \
  24. --with-http_secure_link_module \
  25. --with-http_slice_module \
  26. --with-http_ssl_module \
  27. --with-http_stub_status_module \
  28. --with-http_sub_module \
  29. --with-http_v2_module \
  30. --with-http_xslt_module=dynamic \
  31. --with-ipv6 \
  32. --with-mail \
  33. --with-mail_ssl_module \
  34. --with-md5-asm \
  35. --with-pcre-jit \
  36. --with-sha1-asm \
  37. --with-stream \
  38. --with-stream_ssl_module \
  39. --with-threads \
  40. "
  41. ARG RESTY_CONFIG_OPTIONS_MORE=""
  42. # These are not intended to be user-specified
  43. ARG _RESTY_CONFIG_DEPS="--with-openssl=/tmp/openssl-${RESTY_OPENSSL_VERSION} --with-pcre=/tmp/pcre-${RESTY_PCRE_VERSION}"
  44. # 1) Install yum dependencies
  45. # 2) Download and untar OpenSSL, PCRE, and OpenResty
  46. # 3) Build OpenResty
  47. # 4) Cleanup
  48. RUN yum install -y \
  49. gcc \
  50. gcc-c++ \
  51. gd-devel \
  52. gettext \
  53. GeoIP-devel \
  54. libxslt-devel \
  55. make \
  56. perl \
  57. perl-ExtUtils-Embed \
  58. readline-devel \
  59. unzip \
  60. zlib-devel \
  61. git \
  62. && cd /tmp \
  63. && curl -fSL https://www.openssl.org/source/openssl-${RESTY_OPENSSL_VERSION}.tar.gz -o openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
  64. && tar xzf openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
  65. && curl -fSL https://ftp.pcre.org/pub/pcre/pcre-${RESTY_PCRE_VERSION}.tar.gz -o pcre-${RESTY_PCRE_VERSION}.tar.gz \
  66. && tar xzf pcre-${RESTY_PCRE_VERSION}.tar.gz \
  67. && curl -fSL https://openresty.org/download/openresty-${RESTY_VERSION}.tar.gz -o openresty-${RESTY_VERSION}.tar.gz \
  68. && tar xzf openresty-${RESTY_VERSION}.tar.gz \
  69. && cd /tmp/openresty-${RESTY_VERSION} \
  70. && ./configure -j${RESTY_J} ${_RESTY_CONFIG_DEPS} ${RESTY_CONFIG_OPTIONS} ${RESTY_CONFIG_OPTIONS_MORE} \
  71. && make -j${RESTY_J} \
  72. && make -j${RESTY_J} install \
  73. && cd /tmp \
  74. && rm -rf \
  75. openssl-${RESTY_OPENSSL_VERSION} \
  76. openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
  77. openresty-${RESTY_VERSION}.tar.gz openresty-${RESTY_VERSION} \
  78. pcre-${RESTY_PCRE_VERSION}.tar.gz pcre-${RESTY_PCRE_VERSION} \
  79. && curl -fSL https://github.com/luarocks/luarocks/archive/${RESTY_LUAROCKS_VERSION}.tar.gz -o luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
  80. && tar xzf luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
  81. && cd luarocks-${RESTY_LUAROCKS_VERSION} \
  82. && ./configure \
  83. --prefix=/usr/local/openresty/luajit \
  84. --with-lua=/usr/local/openresty/luajit \
  85. --lua-suffix=jit-2.1.0-beta3 \
  86. --with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1 \
  87. && make build \
  88. && make install \
  89. && cd /tmp \
  90. && rm -rf luarocks-${RESTY_LUAROCKS_VERSION} luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
  91. && yum clean all \
  92. && ln -sf /dev/stdout /usr/local/openresty/nginx/logs/access.log \
  93. && ln -sf /dev/stderr /usr/local/openresty/nginx/logs/error.log
  94. # Add additional binaries into PATH for convenience
  95. ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin
  96. # 安装Lor
  97. RUN cd /tmp \
  98. && git clone https://github.com/sumory/lor \
  99. && cd lor \
  100. && make install \
  101. && rm -rf /tmp/lor
  102. # Copy nginx configuration files
  103. COPY docker-ng-conf/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
  104. COPY docker-ng-conf/default.conf /etc/nginx/conf.d/default.conf
  105. CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"]

创建docker-dompose

  1. version: "2"
  2. services:
  3. pcsoft:
  4. build: /data/docker/openresty
  5. ports:
  6. - "8080:80"
  7. - "8888:8888"
  8. - "8881:8881"
  9. - "8882:8882"
  10. # links:
  11. # - "db"
  12. volumes: # 注意,要么使用相对路径,要么使用绝对路径,切勿使用变量
  13. - ./www:/www/
  14. restart: always
  15. # networks:
  16. # - ng_pc
  17. # command: nginx -g "daemon off;" -p /www/pcsoft/ -c /www/pcsoft/conf/nginx-dev.conf
  18. db:
  19. image: mysql:5.7
  20. volumes:
  21. - ./dbdata:/var/lib/mysql/
  22. # - $PWD/opchina/install:/mysql/
  23. expose:
  24. - "3306"
  25. ports:
  26. - "3306:3306"
  27. # restart: always
  28. environment:
  29. MYSQL_USER: root
  30. MYSQL_PASSWORD: root
  31. MYSQL_ROOT_PASSWORD: root
  32. restart: always
  33. # networks:
  34. # ng_pc:
  35. # networks:
  36. # ng_pc:

Docker 部署 Openresty + Openresty-china

  1. git clone git@github.com:sumory/openresty-china.git
  1. CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  1. [root@575bb7bcc482 openresty-china]# ls
  2. LICENSE README.md conf install start.sh
  3. LICENSE.md app docs reload.sh stop.sh
  4. [root@575bb7bcc482 openresty-china]# mkdir static
  5. [root@575bb7bcc482 openresty-china]# cd static/
  6. [root@575bb7bcc482 static]# ls
  7. [root@575bb7bcc482 static]# cp ../install/avatar/* ./
  8. [root@575bb7bcc482 static]# ls
  9. 1.png 5.png 9.png d.png h.png l.png p.png t.png x.png
  10. 2.png 6.png a.png e.png i.png m.png q.png u.png y.png
  11. 3.png 7.png b.png f.png j.png n.png r.png v.png z.png
  12. 4.png 8.png c.png g.png k.png o.png s.png w.png
  13. [root@575bb7bcc482 static]# cd ..
  14. [root@575bb7bcc482 openresty-china]# ls
  15. LICENSE README.md conf install start.sh stop.sh
  16. LICENSE.md app docs reload.sh static
  17. [root@575bb7bcc482 openresty-china]# rm -rf install/
  18. [root@575bb7bcc482 openresty-china]# ls
  19. LICENSE README.md conf reload.sh static
  20. LICENSE.md app docs start.sh stop.sh
  21. [root@575bb7bcc482 openresty-china]#

注意的事:

  1. RUN yum install -y 中写入 git,原本的Dockerfile没有装。
  2. 不要想着一次把事情搞定,一定要明白什么是镜像,不要把自己的业务也加入到镜像,这样会造成镜像的不可重复使用。系统(服务)和业务一定要分清楚。
  3. 定义在同一个compose文件里的所有service都会自动加入同一个network,所以也不用特意声明network。
  4. 一般使用Lor在创建nginx-conf时创建两个,一个事测试,一个是上线,方便切换。
  5. 执行docker-composer up 时一定要注意所在目录。

遇见的问题:

Docker文件权限问题

解决方法:一定不要关闭sudo,每条Docker命令前都要加sudo。

  1. amor@amor:/data/docker/openresty$ docker-compose up --build -d
  2. Building pcsoft
  3. Traceback (most recent call last):
  4. File "/usr/bin/docker-compose", line 11, in <module>
  5. load_entry_point('docker-compose==1.8.0', 'console_scripts', 'docker-compose')()
  6. File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 61, in main
  7. command()
  8. File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 113, in perform_command
  9. handler(command, command_options)
  10. File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 835, in up
  11. remove_orphans=remove_orphans)
  12. File "/usr/lib/python2.7/dist-packages/compose/project.py", line 382, in up
  13. svc.ensure_image_exists(do_build=do_build)
  14. File "/usr/lib/python2.7/dist-packages/compose/service.py", line 289, in ensure_image_exists
  15. self.build()
  16. File "/usr/lib/python2.7/dist-packages/compose/service.py", line 727, in build
  17. buildargs=build_opts.get('args', None),
  18. File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 54, in build
  19. path, exclude=exclude, dockerfile=dockerfile, gzip=gzip
  20. File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 103, in tar
  21. t.add(os.path.join(root, path), arcname=path, recursive=False)
  22. File "/usr/lib/python2.7/tarfile.py", line 2024, in add
  23. with bltn_open(name, "rb") as f:
  24. IOError: [Errno 13] Permission denied: '/data/docker/openresty/dbdata/auto.cnf'

Lor 中Lua在 Nginx路径配置问题

TIM图片20180301152749.png-18.3kB

解决办法就是修改nginx 配置文件中lua的路径。(可能会遇到新问题)

  1. lua_package_path "./app/?.lua;./app/library/?.lua;./app/?/init.lua;./?.lua;/usr/local/lor/?.lua;/usr/local/lor/?/init.lua;;";
  2. lua_package_cpath "./app/library/?.so;/usr/local/lor/?.so;;";
  3. lua_code_cache on; # set on @production

Mysql连接问题 1

TIM图片20180301153223.png-3.4kB
解决方法:
进到容器里, cat /etc/resolv.conf,然后修改nginx配置

  1. resolver 127.0.0.11;
  2. 注意:这个值一定要和容器中的resolv.conf值一致!

Mysql连接问题 2

  1. amor@amor-PC:/data/docker/docker-openresty-lor$ sudo docker logs dockeropenrestylor_db_1
  2. Initializing database
  3. 2018-03-06T03:13:31.337602Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
  4. 2018-03-06T03:13:31.338815Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
  5. 2018-03-06T03:13:31.338831Z 0 [ERROR] Aborting

解决方法:
保证数据挂载目录为空!

Openresty-china 500

image_1c7t2l7g11du47169s11jk1168m.png-108.2kB
解决方法:
修改位local lib = C

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注