Dockerfile之构建gitlab-runner+nodej

2019-12-26  本文已影响0人  7b7d23d16ab5

前言

这里必须来个说明,太折腾了
这个gitlab-runner折腾我好久,诸多问题,虽然目前通过各种尝试找到了解决方案,但是并不方便,并不是最佳方案,还有诸多问题目前我没搞明白,工作较忙,时间原因,暂时如此,后续找时间再作研究

dockerfile 构建nodejs资料

https://blog.csdn.net/Pursudu/article/details/75006506
【nodejs 包下载地址】
https://nodejs.org/en/download/

wget https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-x64.tar.xz
dockerfile 构建nginx资料

https://www.cnblogs.com/20143605--pcx/p/10305680.html

【nginx-1.14.0.tar.gz下载地址】

wget http://nginx.org/download/nginx-1.14.0.tar.gz

【pcre-8.37.tar.gz下载地址】

wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

Dockerfile之构建gitlab-runner+nodejs+nginx 的dockfile脚本

以下脚本是我经过消化后组合的https配置的脚本
后面对应的 docker-compose.yml 脚本链接
https://www.jianshu.com/p/79dc57956aa8

FROM gitlab/gitlab-runner
ADD node-v12.14.0-linux-x64.tar.xz /usr/local
ENV PATH $PATH:/usr/local/node-v12.14.0-linux-x64/bin
ENV DEBIAN_FRONTEND noninteractive
# 将nginx以及pcre源代码加入镜像
ADD nginx-1.14.0.tar.gz /usr/local/src/
ADD pcre-8.37.tar.gz /usr/local/src/
# 安装编译器
RUN apt-get update
RUN apt-get install gcc -y
RUN apt-get install g++ -y
RUN apt-get install make -y
RUN apt-get install openssl -y
RUN apt-get install libssl-dev -y
# 指定工作目录
WORKDIR /usr/local/src/nginx-1.14.0/
# 编译nginx
RUN ./configure --prefix=/usr/local/nginx --without-http_gzip_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install
# RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD https.conf /usr/local/nginx/conf/conf.d/https.conf
# 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
# 加入gitlab-runner激活脚本,每次启动容器时,都要激活gitlab-runner,否则gitlab-ci/cd跑gitlab-runner时找不到活动的gitlab-runner,就会一直处于pendding状态
ADD gitlab-runner-default.sh /home/gitlab-runner-default.sh
# 容器默认启动命令
ENTRYPOINT ["sh","/home/gitlab-runner-default.sh"]

# 建立软链接的脚本,一定要建立软链接,否则gitlab-ci/cd跑gitlab-runner时会找不到容器中安装的环境的相关指令
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/node /usr/bin/node && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/npm /usr/bin/npm && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/npx /usr/bin/npx && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/cnpm /usr/bin/cnpm
# 把gitlab-runner加入root用户组,这样gitlab-ci/cd在跑gitlab-runner的时候就有权限处理它自身意外的目录文件了
# 先将gitlab-runner用户加入root组
RUN usermod -g root gitlab-runner
# 再将gitlab-runner用户的UID修改成root一样的UID,这样gitlab-runner就拥有了跟root一样的权限了
# 这里一定要加上 -o 不然回提示uid为0的用户已存在
RUN usermod -u 0 -o gitlab-runner
其中的 gitlab-runner-default.sh 脚本

(功能很简单,每次容器启动都启动nginx和gitlab-runner)
(注意:目前这个 gitlab-runner restart 测试下来并没有啥用,重启gitlab-runner容器后,gitlab-runner还是会没有激活,每次重启容器还是要在宿主机上执行这条指令来激活 【docker exec -it gitlab-runner-vue gitlab-ci-multi-runner restart】)

nginx
gitlab-runner restart
其中的 nginx.conf 文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    include /usr/local/nginx/conf/conf.d/*.conf;
}
daemon off;
其中的 https.conf 文件

这里的监听端口号,要与后面的 docker-compse.yml 创建的脚本文件映射的端口保持一致
https://www.jianshu.com/p/79dc57956aa8

server {
    listen 6606;
    server_name localhost;
    ssl on;
    ssl_certificate /cert/2423367_www.micking.top.pem;
    ssl_certificate_key /cert/2423367_www.micking.top.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
    root /home/web;
        index index.html index.htm index.nginx-debian.html;
    try_files $uri $uri/ /index.html;
    }
}
安装过程中遇到这样的问题

配置https的ssl证书时,网上的那份nginx安装资料里没有加入nginx所需的ssl模块,所以容器运行报错:nginx无法识别 ssl 指令,所以百度了,要安装 openssl 和 penssl-devel,可是其中的 penssl-devel 在gitlab-runner中安装失败,gitlab-runner容器是基于ubuntu,所以我百度unbuntu apt 安装 openssl,就搜到了答案
https://zhidao.baidu.com/question/617772603179405372.html
https://yq.aliyun.com/articles/523935

sudo apt-get install openssl
sudo apt-get install libssl-dev
RedHat、centos才是openssl-devel

然后就搞定了https的配置

怎么使用指令编译配置nginx的ssl模块的资料

https://blog.csdn.net/weixin_38111957/article/details/81283121

上一篇下一篇

猜你喜欢

热点阅读