Показаны сообщения с ярлыком Nginx. Показать все сообщения
Показаны сообщения с ярлыком Nginx. Показать все сообщения

вторник, 1 января 2019 г.

Настройка nginx в Docker-compose

Docker-compose: идеальное рабочее окружение

$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ mkdir  -p /home/user/production_nginx
$ nano /home/user/production_nginx/docker-compose.yml

version: '3'

services:
   nginx:
    image: nginx:latest
    container_name: production_nginx
    volumes:
     - ./src:/usr/share/nginx/html
     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    restart: always
    ports:
      - 80:80
      - 443:443

Сохранить.


$ sudo nano /home/user/production_nginx/nginx.conf

worker_processes 1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        root   /usr/share/nginx/html;
        listen       80;
        server_name  zaz60.com;

        location / {
            index  index.html index.htm;
        }
    }
}

Сохранить.

$ mkdir src
$ nano src/index.html

Hi, I'am Nginx

Сохранить.

$ docker-compose up -d

$ docker-compose down

Вариант с SSL сертифиикатами

$ sudo chown -R user:user certs



$ nano /home/user/production_nginx/docker-compose.yml

version: '3'

services:
   nginx:
    image: nginx:latest
    container_name: production_nginx
    volumes:
     - ./src:/usr/share/nginx/html
     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
     - ./certs:/etc/letsencrypt
    restart: always
    ports:
      - 80:80
      - 443:443

Сохранить.


$ sudo nano /home/user/production_nginx/nginx.conf

worker_processes 1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        root   /usr/share/nginx/html;
        listen       80;
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/zaz60.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/zaz60.com/privkey.pem;
        server_name  zaz60.com;

        location / {
            index  index.html index.htm;
        }
    }
}

Сохранить.

$ mkdir src
$ nano src/index.html

Hi, I'am Nginx

Сохранить.

$ docker-compose up -d

$ docker-compose down




понедельник, 31 декабря 2018 г.

Получение Let's Encrypt Certificate используя docker и nginx


Для обоих вариантов осводим порт 80 !!!
Вариант № 1 (левый quay.io/letsencrypt/letsencrypt)
Let's Encrypt Certificate Generation Using Docker

$ mkdir -p /home/user/letsencrypt/certs

$ docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html nginx

$ docker run -it --name letsencrypt  --rm -v /home/user/letsencrypt/certs:/etc/letsencrypt --volumes-from nginx quay.io/letsencrypt/letsencrypt certonly --agree-tos --webroot --webroot-path /usr/share/nginx/html -m certs@zaz60.com -d zaz60.com -d www.zaz60.com

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/zaz60.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/zaz60.com/privkey.pem
   Your cert will expire on 2019-03-31. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

$ docker stop nginx
$ docker rm nginx

Сертификаты /home/user/letsencrypt/certs

Вариант № 2 (официальный certbot/certbot)
Generate and renew Let’s Encrypt Certificates for Apache with Certbot Docker container

$ mkdir -p /home/user/letsencrypt/certs

$ docker pull certbot/certbot

$ docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html nginx

$ docker run -it --rm -v /home/user/letsencrypt/certs:/etc/letsencrypt  --volumes-from nginx certbot/certbot certonly --webroot --webroot-path=/usr/share/nginx/html -d zaz60.com --email info@zaz60.com --agree-tos

 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/zaz60.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/zaz60.com/privkey.pem
   Your cert will expire on 2019-03-31. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Сертификаты /home/user/letsencrypt/certs


Вариант № 3 (показался мне самым лучшим)
Automating the management of HTTPS certificates in a Dockerized environment with Let’s Encrypt

$ docker volume create --name certs
$ docker run -v certs:/etc/letsencrypt -e http_proxy=$http_proxy -e domains="www.zaz60.com" -e email="info@zaz60.com" -p 80:80 -p 443:443 --rm pierreprinetti/certbot:latest

Сертификаты /var/lib/docker/volumes/certs/_data/

Настройка обратного прокси nginx docker-compose на примере wordpress

Setting up a Reverse-Proxy with Nginx and docker-compose
Use NGINX As A Reverse Proxy To Your Containerized Docker Applications
Docker compose : NGINX reverse proxy with multiple containers
Nextcloud via Docker with nginx reverse proxy
Docker Compose wordpress

$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ mkdir  -p /home/user/wordpress
$ nano /home/user/wordpress/docker-compose.yml

version: '3'

services:
   db:
     image: mysql:5.7
     container_name: db
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     container_name: wordpress
     expose:
       - "80"
     volumes:
       - html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

   nginx:
    image: nginx:latest
    container_name: production_nginx
    volumes:
     - ./nginx.conf:/etc/nginx/nginx.conf
     - ./certs:/etc/letsencrypt
    restart: always
    ports:
      - 80:80
      - 443:443

volumes:
    db_data:
    html:

Сохранить

$ nano /home/user/production_nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
  upstream target {
      server wordpress:80;
  }

  server {
      listen 443 ssl;
      server_name zaz60.com;
      ssl_certificate /etc/letsencrypt/live/zaz60.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/zaz60.com/privkey.pem;

      location / {
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Port $server_port;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://target;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
          # This allows the ability for the execute shell window to remain open for up to 15 minutes. Without this parameter, the default is 1 minute and will automatically close.
          proxy_read_timeout 900s;
      }
  }

  server {
      listen 80;
      server_name zaz60.com;
      return 301 https://$server_name$request_uri;
  }
}

Сохранить

$ cd /home/user/wordpress

$ docker-compose up -d
$ docker-compose down