项目说明
之前用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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。