项目说明

之前用docker是可以完成当前需求的,但是有些生产环境需要不同的环境变量,在用docker run启动时需要附加太多环境变量,不够优雅和灵活,随即就研究了下docker compose,发现满足项目需求。然后就有了这篇博客。

项目布局

项目文件结构

//主要的一些结构
...
├── .docker
├── .gitlab-ci.yml
├── Dockerfile
├── app
...
  • .docker下的目录结构
├── ansible
│   ├── deploy.yml
│   └── hosts
├── compose
│   ├── docker-compose.yml
│   └── laravel.env
├── docker-entrypoint.sh
├── nginx
│   └── nginx.conf
├── php
│   ├── fpm-pool.conf
│   └── php.ini
└── supervisor
    └── supervisord.conf
  • .gitlab-ci.yml 内容
ariables:
    NNYC_ALI_BASE: registry.cn-hangzhou.aliyuncs.com/xxxx-registry-prod/nnyc
    NNYC_IMAGE_REF: ${NNYC_ALI_BASE}:${CI_JOB_NAME}

stages:
  - test

test:
  stage: test
  only:
    - master@phpers/nnyc
    - develop@phpers/nnyc
  tags:
    - nnyc
  script:
    - rm -f .env
    - ln -s .env.test .env
    # commit.txt 记录当前镜像的基础信息
    - echo -e "${CI_COMMIT_REF_NAME}\n${CI_COMMIT_SHORT_SHA}\n${CI_JOB_ID}\n${GITLAB_USER_ID}" >> public/commit.txt
    - docker build -t ${NNYC_IMAGE_REF} .
    - ansible-playbook -i ./.docker/ansible/hosts ./.docker/ansible/deploy.yml -e "tag=${CI_JOB_NAME} env=test"
  when: manual
  • deploy.yml 内容
---
- name: push docker image to aliyuncs
  hosts: push_image
  tasks:
    - name: docker login
      shell: docker login -p 'xxxx' --username=xxxx@xxxx.com registry.cn-hangzhou.aliyuncs.com
    - name: push images
      shell: docker push registry.cn-hangzhou.aliyuncs.com/xxxx-registry-prod/nnyc:{{tag}}
    - name: remove images
      shell: docker rmi registry.cn-hangzhou.aliyuncs.com/xxxx-registry-prod/nnyc:{{tag}}


- name: deployment docker environment
  hosts: "{{env}}"
  serial: 1
  tasks:
    # 把文件上传到目标服务器上
    - name: copy file
      copy: src=./integrate.sh dest=/tmp/integrate.sh
      copy: src=../compose/ dest=/tmp/compose/
    - name: log permission attach
      shell: sh /tmp/integrate.sh
    - name: docker login
      shell: docker login -p 'xxxx' --username=xxxx@xxxx.com registry.cn-hangzhou.aliyuncs.com
    - name: docker runing
      shell: tag={{tag}} docker-compose -f /tmp/compose/docker-compose.yml up -d
    - name: show runing
      shell: docker ps
      register: out
    - debug: var=out['stderr_lines']
    - debug: var=out['stdout_lines']
  • hosts 内容

[push_image]
127.0.0.1 ansible_connection=local

[test]
192.168.1.10 ansible_ssh_user=root

[pre]
192.168.1.11 ansible_ssh_user=root

[prod]
192.168.1.[12:50] ansible_ssh_user=root

[jumpserver:children]
pre
test
prod

[jumpserver:vars]
ansible_ssh_common_args=' -o  "ProxyCommand ssh -o ConnectTimeout=6000000  -p 22 root@192.168.1.9 nc -w 100000 %h %p"'
  • docker-compose.yml 内容
version: "3.7"

services:
  nnyc:
    image: "registry.cn-hangzhou.aliyuncs.com/xxxx-registry-prod/nnyc:${tag}"
    ports:
      - "8080:8080"
    restart: always
    volumes:
      - /data/log/php7/:/var/log/php7/
      - /data/log/nginx/:/var/log/nginx/
      - /data/log/supervisord/:/var/log/supervisord/
    env_file:
      - ./laravel.env
    entrypoint: /var/www/html/docker-entrypoint.sh
  • laravel.env 内容

# 更换supervisord.conf配置 false为不启动 true为启动
NNYC_QUEUE_START=true

ahcometrue
0 声望0 粉丝