@zslzxc
2018-03-06T07:29:00.000000Z
字数 7816
阅读 3191
openresty
docker
lor
Docker部署Openresty + Lor + Openresty-china总体来说不难,但是还是有许多问题,这些问题一个是不细心造成的,一个是无知造成的,所以,我都会一一记下来。
因为我们要安装Lor所以,我们不直接使用官方镜像,而是通过修改Dockerfile来创建自己的镜像。
# Dockerfile - CentOS 7
# https://github.com/openresty/docker-openresty
FROM centos:7
LABEL maintainer="Evan Wies <evan@neomantra.net>"
# Docker Build Arguments
ARG RESTY_VERSION="1.13.6.1"
ARG RESTY_LUAROCKS_VERSION="2.4.3"
ARG RESTY_OPENSSL_VERSION="1.0.2k"
ARG RESTY_PCRE_VERSION="8.41"
ARG RESTY_J="1"
ARG RESTY_CONFIG_OPTIONS="\
--with-file-aio \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_geoip_module=dynamic \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module=dynamic \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_xslt_module=dynamic \
--with-ipv6 \
--with-mail \
--with-mail_ssl_module \
--with-md5-asm \
--with-pcre-jit \
--with-sha1-asm \
--with-stream \
--with-stream_ssl_module \
--with-threads \
"
ARG RESTY_CONFIG_OPTIONS_MORE=""
# These are not intended to be user-specified
ARG _RESTY_CONFIG_DEPS="--with-openssl=/tmp/openssl-${RESTY_OPENSSL_VERSION} --with-pcre=/tmp/pcre-${RESTY_PCRE_VERSION}"
# 1) Install yum dependencies
# 2) Download and untar OpenSSL, PCRE, and OpenResty
# 3) Build OpenResty
# 4) Cleanup
RUN yum install -y \
gcc \
gcc-c++ \
gd-devel \
gettext \
GeoIP-devel \
libxslt-devel \
make \
perl \
perl-ExtUtils-Embed \
readline-devel \
unzip \
zlib-devel \
git \
&& cd /tmp \
&& curl -fSL https://www.openssl.org/source/openssl-${RESTY_OPENSSL_VERSION}.tar.gz -o openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
&& tar xzf openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
&& curl -fSL https://ftp.pcre.org/pub/pcre/pcre-${RESTY_PCRE_VERSION}.tar.gz -o pcre-${RESTY_PCRE_VERSION}.tar.gz \
&& tar xzf pcre-${RESTY_PCRE_VERSION}.tar.gz \
&& curl -fSL https://openresty.org/download/openresty-${RESTY_VERSION}.tar.gz -o openresty-${RESTY_VERSION}.tar.gz \
&& tar xzf openresty-${RESTY_VERSION}.tar.gz \
&& cd /tmp/openresty-${RESTY_VERSION} \
&& ./configure -j${RESTY_J} ${_RESTY_CONFIG_DEPS} ${RESTY_CONFIG_OPTIONS} ${RESTY_CONFIG_OPTIONS_MORE} \
&& make -j${RESTY_J} \
&& make -j${RESTY_J} install \
&& cd /tmp \
&& rm -rf \
openssl-${RESTY_OPENSSL_VERSION} \
openssl-${RESTY_OPENSSL_VERSION}.tar.gz \
openresty-${RESTY_VERSION}.tar.gz openresty-${RESTY_VERSION} \
pcre-${RESTY_PCRE_VERSION}.tar.gz pcre-${RESTY_PCRE_VERSION} \
&& curl -fSL https://github.com/luarocks/luarocks/archive/${RESTY_LUAROCKS_VERSION}.tar.gz -o luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
&& tar xzf luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
&& cd luarocks-${RESTY_LUAROCKS_VERSION} \
&& ./configure \
--prefix=/usr/local/openresty/luajit \
--with-lua=/usr/local/openresty/luajit \
--lua-suffix=jit-2.1.0-beta3 \
--with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1 \
&& make build \
&& make install \
&& cd /tmp \
&& rm -rf luarocks-${RESTY_LUAROCKS_VERSION} luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \
&& yum clean all \
&& ln -sf /dev/stdout /usr/local/openresty/nginx/logs/access.log \
&& ln -sf /dev/stderr /usr/local/openresty/nginx/logs/error.log
# Add additional binaries into PATH for convenience
ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin
# 安装Lor
RUN cd /tmp \
&& git clone https://github.com/sumory/lor \
&& cd lor \
&& make install \
&& rm -rf /tmp/lor
# Copy nginx configuration files
COPY docker-ng-conf/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
COPY docker-ng-conf/default.conf /etc/nginx/conf.d/default.conf
CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"]
version: "2"
services:
pcsoft:
build: /data/docker/openresty
ports:
- "8080:80"
- "8888:8888"
- "8881:8881"
- "8882:8882"
# links:
# - "db"
volumes: # 注意,要么使用相对路径,要么使用绝对路径,切勿使用变量
- ./www:/www/
restart: always
# networks:
# - ng_pc
# command: nginx -g "daemon off;" -p /www/pcsoft/ -c /www/pcsoft/conf/nginx-dev.conf
db:
image: mysql:5.7
volumes:
- ./dbdata:/var/lib/mysql/
# - $PWD/opchina/install:/mysql/
expose:
- "3306"
ports:
- "3306:3306"
# restart: always
environment:
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
restart: always
# networks:
# ng_pc:
# networks:
# ng_pc:
git clone git@github.com:sumory/openresty-china.git
CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
[root@575bb7bcc482 openresty-china]# ls
LICENSE README.md conf install start.sh
LICENSE.md app docs reload.sh stop.sh
[root@575bb7bcc482 openresty-china]# mkdir static
[root@575bb7bcc482 openresty-china]# cd static/
[root@575bb7bcc482 static]# ls
[root@575bb7bcc482 static]# cp ../install/avatar/* ./
[root@575bb7bcc482 static]# ls
1.png 5.png 9.png d.png h.png l.png p.png t.png x.png
2.png 6.png a.png e.png i.png m.png q.png u.png y.png
3.png 7.png b.png f.png j.png n.png r.png v.png z.png
4.png 8.png c.png g.png k.png o.png s.png w.png
[root@575bb7bcc482 static]# cd ..
[root@575bb7bcc482 openresty-china]# ls
LICENSE README.md conf install start.sh stop.sh
LICENSE.md app docs reload.sh static
[root@575bb7bcc482 openresty-china]# rm -rf install/
[root@575bb7bcc482 openresty-china]# ls
LICENSE README.md conf reload.sh static
LICENSE.md app docs start.sh stop.sh
[root@575bb7bcc482 openresty-china]#
docker-composer up
时一定要注意所在目录。解决方法:一定不要关闭sudo,每条Docker命令前都要加sudo。
amor@amor:/data/docker/openresty$ docker-compose up --build -d
Building pcsoft
Traceback (most recent call last):
File "/usr/bin/docker-compose", line 11, in <module>
load_entry_point('docker-compose==1.8.0', 'console_scripts', 'docker-compose')()
File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 61, in main
command()
File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 113, in perform_command
handler(command, command_options)
File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 835, in up
remove_orphans=remove_orphans)
File "/usr/lib/python2.7/dist-packages/compose/project.py", line 382, in up
svc.ensure_image_exists(do_build=do_build)
File "/usr/lib/python2.7/dist-packages/compose/service.py", line 289, in ensure_image_exists
self.build()
File "/usr/lib/python2.7/dist-packages/compose/service.py", line 727, in build
buildargs=build_opts.get('args', None),
File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 54, in build
path, exclude=exclude, dockerfile=dockerfile, gzip=gzip
File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 103, in tar
t.add(os.path.join(root, path), arcname=path, recursive=False)
File "/usr/lib/python2.7/tarfile.py", line 2024, in add
with bltn_open(name, "rb") as f:
IOError: [Errno 13] Permission denied: '/data/docker/openresty/dbdata/auto.cnf'
解决办法就是修改nginx 配置文件中lua的路径。(可能会遇到新问题)
lua_package_path "./app/?.lua;./app/library/?.lua;./app/?/init.lua;./?.lua;/usr/local/lor/?.lua;/usr/local/lor/?/init.lua;;";
lua_package_cpath "./app/library/?.so;/usr/local/lor/?.so;;";
lua_code_cache on; # set on @production
解决方法:
进到容器里, cat /etc/resolv.conf,然后修改nginx配置
resolver 127.0.0.11;
注意:这个值一定要和容器中的resolv.conf值一致!
amor@amor-PC:/data/docker/docker-openresty-lor$ sudo docker logs dockeropenrestylor_db_1
Initializing database
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).
2018-03-06T03:13:31.338815Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2018-03-06T03:13:31.338831Z 0 [ERROR] Aborting
解决方法:
保证数据挂载目录为空!
解决方法:
修改位local lib = C