Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk menjana konfigurasi secara dinamik melalui nginx+confd dalam docker

Bagaimana untuk menjana konfigurasi secara dinamik melalui nginx+confd dalam docker

WBOY
WBOYke hadapan
2023-05-27 13:04:241845semak imbas

Apabila kami mempunyai lebih banyak projek, pergi ke pelayan secara manual untuk mengubah suai konfigurasi nginx sangat menyusahkan dan mungkin menjadi salah. Kami boleh melaksanakan penyelesaian melalui nginx+confd+配置中心 untuk mengelakkan ralat dan mengurangkan proses yang menyusahkan.

Pertama, muatkan terus fail docker nginx+confd

FROM nginx:1.21.6
# 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0
COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd
# 拷贝wait-for脚本 https://github.com/Eficode/wait-for
COPY ./wait-for /
# 安装nc支持wait-for脚本
RUN apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    net-tools \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
RUN apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    netcat \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
# 创建配置文件目录
RUN mkdir -p /etc/confd/conf.d \
# 给可执行权限
&& chmod +x /usr/local/bin/confd \
&& chmod 777 /wait-for \
# 使用脚本启动多进程
&& echo "#!/bin/bash" >> start.sh \
&& echo "nohup /usr/local/bin/confd -config-file /etc/confd/conf/confd.toml &" >> start.sh \
&& echo "nginx -g 'daemon off;'" >> start.sh \
&& chmod 664 ./start.sh 
CMD ["bash", "start.sh"]

Jika anda tidak mahu menjananya sendiri, anda boleh menggunakan:

https:/ /hub.docker.com/repository/docker /lablelan/nginx-confd

Docker-compose digunakan di sini untuk menunjukkan cara menggunakan nginx+confd+etcd+etcdkeeper untuk mengubah suai konfigurasi nginx secara grafik

version: '2'
networks:
  app-tier:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.22.0.0/16
services:
  Etcd:
    image: 'bitnami/etcd:3.5.2'
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
    ports:
      - 2379:2379
      - 2380:2380
    networks:
      app-tier:
        ipv4_address: 172.22.0.2
  EtcdKeeper:
    image: 'deltaprojects/etcdkeeper:latest'
      - 8000:8080
        ipv4_address: 172.22.0.3
  Nginx:
    image: 'lablelan/nginx-confd'
    command: sh -c '/wait-for Etcd:2379 -- bash start.sh'
    depends_on: 
      - Etcd
    volumes:
      - "./confd.toml:/etc/confd/conf/confd.toml"
      - "./nginx.tmpl:/etc/confd/templates/nginx.tmpl"
      - "./myapp-nginx.toml:/etc/confd/conf.d/myapp-nginx.toml"
      - "./nginx.conf:/etc/nginx/nginx.conf"
      - "./conf.d:/etc/nginx/conf.d"
      - 80:80
        ipv4_address: 172.22.0.4

Selepas permulaan, ia akan dibuat melalui etcdkeeper Atau mengemas kini /myapp/services/web/www/1 akan menjana konfigurasi nginx secara dinamik (port 80 forwards port 8080) dan berkuat kuasa secara automatik. IP yang dikonfigurasikan di sini ialah IP intranet dan tidak menggunakan 127.0.0.1, kerana perkhidmatan itu tidak berjalan pada bekas nginx (perhatikan bahawa hos tempatan saya untuk www.lablelan.com ditetapkan kepada 127.0.0.1)

Bagaimana untuk menjana konfigurasi secara dinamik melalui nginx+confd dalam docker

Perkhidmatan yang dijalankan pada port 8080 di sini ialah perkhidmatan demo yang mudah (nodejs Jika anda memerlukannya, anda boleh mendapatkannya dari gitee

https://). gitee.com/lablelan/amis-demo

Selepas mengkonfigurasi etcd, kita dapat melihat bahawa mengakses http://www.lablelan.com/select telah berjaya dikembalikan

Bagaimana untuk menjana konfigurasi secara dinamik melalui nginx+confd dalam docker

Ini mungkin tidak berlaku. Ini tidak menggambarkan kepraktisan penyelesaian ini. Malah, kami boleh merealisasikan fungsi penemuan perkhidmatan dengan mendaftarkan maklumat perkhidmatan semasa ke etcd dalam kod perniagaan, supaya nginx. konfigurasi boleh dijana secara dinamik untuk mengelakkan pengubahsuaian manual konfigurasi nginx dan mengurangkan ralat.

Atas ialah kandungan terperinci Bagaimana untuk menjana konfigurasi secara dinamik melalui nginx+confd dalam docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam