Saya baru-baru ini menukar pelayan maya, dan terpaksa mengkonfigurasi semuanya sekali lagi. Saya lebih suka tapak itu boleh diakses melalui https dan sijil letsencrypt diperoleh dan diperbaharui secara automatik. Ini boleh dicapai dengan menggunakan dua imej docker nginx-proxy dan nginx-proxy-companion.
Ini ialah panduan tentang cara menyediakan tapak web di Docker, dengan proksi yang menerima sijil SSL secara automatik. Pelayan maya CentOS 7 digunakan.
Saya menganggap bahawa pelayan telah dibeli, dikonfigurasikan, log masuk menggunakan kunci, fail2ban dipasang, dsb.
Mula-mula anda perlu memasang docker.
- Mula-mula anda perlu memasang kebergantungan
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Sambungkan repositori
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Kemudian pasang edisi komuniti buruh pelabuhan
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Tambahkan docker untuk memulakan dan jalankan
$ sudo systemctl enable docker $ sudo systemctl start docker
- Tambahkan pengguna pada kumpulan docker untuk dapat menjalankan docker tanpa sudo
$ usermod -aG docker user
Langkah seterusnya ialah memasang docker-compose. Utiliti boleh dipasang dalam beberapa cara, tetapi saya lebih suka memasang melalui pengurus pip dan virtualenv, supaya tidak mengacaukan sistem dengan pakej yang tidak perlu.
- Pasang pip
$ sudo yum install python-pip
- Pasang virtualenv
$ pip install virtualenv
- Seterusnya anda perlu membuat folder dengan projek dan memulakannya. Folder dengan semua yang anda perlukan untuk menguruskan pakej akan dipanggil ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Untuk mula menggunakan persekitaran maya, anda perlu menjalankan arahan berikut dalam folder projek.
$ source ve/bin/activate
- Anda boleh memasang docker-compose.
pip install docker-compose
Agar bekas dapat melihat satu sama lain, kami akan membuat rangkaian. Secara lalai, pemandu jambatan digunakan.
$ docker network create network
Seterusnya anda perlu mengkonfigurasi docker-compose, proksi akan berada dalam folder proksi, tapak ujian akan berada dalam folder ujian. Sebagai contoh, saya menggunakan nama domain example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Kandungan proxy/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx-proxy: container_name: nginx-proxy image: jwilder/nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-letsencrypt: container_name: nginx-proxy-letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html:
Pembolehubah persekitaran NGINX_PROXY_CONTAINER adalah perlu bagi bekas letsencrypt untuk melihat bekas proksi. Folder /etc/nginx/certs /etc/nginx/vhost.d dan /usr/share/nginx/html mesti dikongsi oleh kedua-dua bekas. Untuk bekas letsencrypt berfungsi dengan betul, aplikasi mesti boleh diakses pada kedua-dua port 80 dan 443.
Kandungan test/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx: container_name: nginx image: nginx:latest environment: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - [email protected]
Di sini, pembolehubah persekitaran diperlukan supaya proksi memproses permintaan ke pelayan dengan betul dan meminta sijil untuk nama domain yang betul.
Yang tinggal hanyalah menjalankan docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Sumber: www.habr.com