美文网首页
Dockerfile之构建gitlab-runner+nodej

Dockerfile之构建gitlab-runner+nodej

作者: 7b7d23d16ab5 | 来源:发表于2019-12-26 11:07 被阅读0次

    前言

    这里必须来个说明,太折腾了
    这个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

    相关文章

      网友评论

          本文标题:Dockerfile之构建gitlab-runner+nodej

          本文链接:https://www.haomeiwen.com/subject/ojekoctx.html