GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Host Banyak Situs Web di Docker Containers

Docker adalah platform yang sangat berguna yang memungkinkan pengembang mengembangkan dan menyebarkan aplikasi dengan mudah. Pada artikel ini, kita akan melihat cara menggunakan wadah Docker untuk meng-host beberapa situs web di satu server. Salah satu manfaat paling signifikan menggunakan container Docker adalah ringan, lebih cepat, dan lebih mudah dikelola.

Bulan ini, saya memindahkan dua aplikasi yang dibuat khusus dari dua server terpisah ke satu server, masing-masing dalam wadah Dockernya sendiri. Lebih mudah untuk mengelola kedua aplikasi, dan juga mengurangi biaya produksi saya.

Setiap aplikasi diatur di dalam lingkungan amannya sendiri dan dapat diakses melalui nama domain. Sebelum kita beralih ke instruksi, mari kita bahas secara singkat cara kerjanya dan alat apa yang kita perlukan untuk mengatur semuanya. Jadi mari kita mulai.

Apa yang ingin kita siapkan?

Kami ingin menggunakan wadah Docker untuk menyiapkan satu server yang dapat melayani beberapa aplikasi atau situs web. Saat pengguna meminta URL untuk salah satu situs web yang dihosting, server utama harus mem-proksi permintaan tersebut ke penampung, yang kemudian akan menyajikan konten.

Kita perlu menyiapkan server untuk mencapai ini. Saya telah menyiapkan server dengan alamat IP statis untuk artikel ini. Kunjungi MassiveGRID, DigitalOcean, atau Vultr jika Anda mencari layanan hosting awan yang bagus.

Kedua, kami akan membuat proxy untuk mengarahkan permintaan pengguna ke wadah yang sesuai. Ada banyak alat yang tersedia untuk tujuan ini, tetapi saya akan menggunakan nginx-proxy karena sangat mudah disiapkan dan memiliki hampir semua fitur yang kami butuhkan. Terakhir, kami akan menggunakan Cloudflare sebagai pengelola DNS untuk mengarahkan nama domain ke server host (alamat IP).

Saya juga merekomendasikan menggunakan Portainer, antarmuka grafis yang mudah digunakan untuk mengelola wadah buruh pelabuhan. Untuk mengatur Portainer, silakan ikuti panduan ini.

Setelah server Anda aktif dan berjalan, ssh ke server dan perbarui.

ssh [email protected]

Jika Anda telah menyiapkan kunci ssh untuk login, silakan gunakan opsi -i option in the ssh command to log in dengan kunci ssh pribadi.

ssh -i path-to-ssh-key [email protected]

Siapkan server

Di mesin host, saya menjalankan Ubuntu 20.04. Instruksi akan sama apakah Anda menggunakan Debian atau distribusi berbasis debian lainnya. Untuk distribusi lain, satu-satunya instruksi untuk mengonfigurasi buruh pelabuhan akan berbeda, dan yang lainnya akan tetap sama. Silakan ikuti panduan ini untuk menginstal Docker di Ubuntu.

Menggunakan sertifikat SSL dengan nginx-proxy

Langkah kedua adalah membuat direktori yang akan menyimpan sertifikat dan kunci SSL untuk setiap domain. Di server host, buat direktori di direktori /etc/. Anda dapat memberi nama direktori ini apa pun yang Anda suka. Untuk artikel ini, saya menamakannya cloudflare.

mkdir /etc/cloudflare

Nantinya, kami akan mengikat direktori ini dengan nginx-proxy untuk mengakses sertifikat dan kunci SSL untuk setiap nama domain.

Buat jaringan buruh pelabuhan

Kami juga akan membuat jaringan virtual di mana setiap kontainer buruh pelabuhan, termasuk nginx-proxy, akan terhubung.

docker network create nginx-proxy

Siapkan nginx-proxy

Jika kita mau, kita bisa membuat proxy untuk menghadapi situasi seperti itu. Untungnya, pengembang nginx telah membangun seluruh image Docker yang akan melacak semua container dan memperbarui segera setelah container baru dibuat. Untuk membuat nginx-proxy docker (dengan ssl), jalankan perintah berikut –

docker run -d –name nginx-proxy -p 80:80 -p 443:443 –net nginx-proxy -v /etc/cloudflare:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx-proxy

Mari kita uraikan perintah di atas langkah demi langkah.

  • lari – Opsi ini akan membuat wadah.
  • -d - Ini memungkinkan mode debug. Jika terjadi kesalahan, itu akan menampilkan informasi yang berguna untuk mencari masalah.
  • –nama – Nama wadah.
  • -p 80:80 – Ini sangat penting. Parameter -p mengikat port host dengan port container. Di sisi kiri 80:80 adalah port host dan sebaliknya.
  • –net – Menghubungkan container yang baru dibuat dengan jaringan nginx-proxy.
  • -v /etc/cloudflare:/etc/nginx/certs – Diperlukan jika Anda akan menggunakan SSL di situs web Anda. Mengikat direktori host dengan direktori container nginx-proxy tempat menyimpan sertifikat dan kunci SSL.
  • -v /var/run/docker.sock:/tmp/docker.sock:ro – Memasang soket buruh pelabuhan dengan wadah untuk berkomunikasi dengan daemon buruh pelabuhan.
  • nginxproxy/nginx-proxy – Alamat image docker nginx-proxy yang dihosting di hub.docker.com.

Kami telah memecahkan teka-teki terbesar game ini setelah Anda membuat wadah nginx-proxy. Itu sangat sederhana. Benar? Ini semua berkat gambar nginx-proxy; jika tidak, kami harus melakukan semuanya secara manual.

Buat wadah dengan variabel lingkungan VIRTUAL_HOST

Variabel lingkungan VIRTUAL HOST digunakan oleh nginx-proxy untuk menentukan domain mana yang harus diarahkan ke server mana. Setiap kali Anda membuat penampung baru, setel nilai variabel VIRTUAL HOST ke nama domain yang ingin Anda arahkan ke penampung ini.

docker run -it -d --name gaminggroup.online -h gaminggroup.online --expose 80 --net nginx-proxy -e VIRTUAL_HOST=gaminggroup.online -e VIRTUAL_HOST=www.gaminggroup.online httpd

Mari kita uraikan perintah di atas langkah demi langkah.

  • -h – menetapkan nama domain yang sepenuhnya memenuhi syarat (mengatur nama domain)
  • –mengekspos – Mengekspos port 80 untuk mengizinkan lalu lintas HTTP
  • –net – Hubungkan wadah yang baru dibuat ke jaringan nginx-proxy
  • VIRTUAL_HOST=domain.xyz – Variabel VIRTUAL_HOST digunakan oleh nginx-proxy untuk mengarahkan permintaan pengguna ke wadah masing-masing
  • httpd – Tarik citra server Apache dari hub buruh pelabuhan

Perintah di atas akan memulai wadah dengan server web populer Apache. Setiap permintaan yang mencapai server host diarahkan ke nginx-proxy, yang kemudian meneruskannya ke port 80 penampung ini .

Arahkan domain ke server

Terakhir, konfigurasikan nama domain untuk menunjuk ke server host. Buat catatan A dengan nama '@' dan IPv4 sebagai alamat IP server host. Tunggu beberapa saat setelah Anda selesai. Propagasi DNS dapat berlangsung dari beberapa menit hingga beberapa jam.

Setelah propagasi DNS selesai, nama domain Anda akan mengarah ke wadah yang baru dibuat yang menghosting server web Apache. Sekarang semuanya sudah diatur. Yang perlu Anda lakukan adalah terus membuat container dengan variabel VIRTUAL_HOST dan nginx-proxy akan mengarahkan lalu lintas ke container dengan benar.

Menggunakan SSL/HTTPS dalam Docker

Karena kebanyakan dari kita lebih suka menyajikan konten melalui HTTPS daripada HTTP yang tidak aman, nginx-proxy dapat dengan mudah menanganinya. Kami telah melewati parameter -v dengan direktori /etc/cloudflare saat kami menyiapkan nginx-proxy wadah. Direktori ini dikaitkan dengan nginx-proxy direktori /etc/nginx/certs .

Setiap sertifikat dan kunci SSL harus disimpan di /etc/cloudflare dengan nama yang tepat. Sertifikat dan kunci SSL harus diganti namanya sesuai dengan nama domainnya. Misalnya, untuk nama domain, example.com , sertifikat SSL harus diganti namanya menjadi example.com.crt dan kuncinya harus example.com.key .

Kesimpulan

Penggunaan nginx-proxy telah sangat menyederhanakan proses. Cukup gunakan wadah yang menangani yang lainnya. Setelah ini selesai, Anda dapat menggunakan container sebanyak yang Anda inginkan tanpa harus mengkhawatirkan terlalu banyak file konfigurasi. Penampung itu ringan, tetapi seiring dengan peningkatan lalu lintas/beban kerja, lebih banyak sumber daya akan dibutuhkan.

Jika Anda mengalami kesulitan mengikuti langkah-langkah di atas, beri tahu saya di bagian perintah di bawah ini atau bergabunglah dengan server Discord kami untuk bantuan cepat.


Docker
  1. Cara mengkonfigurasi beberapa situs web dengan server web Apache

  2. Cara Menggunakan Tulis Docker

  3. Bagaimana Menghubungkan Kontainer Docker

  1. Cara menginstal dan menghosting server OpenVPN dengan Docker

  2. Apa itu Docker (dan wadah Linux?)

  3. Cara Mendaftar Kontainer Docker

  1. Apa itu Doker?

  2. Docker vs. Kubernetes

  3. Pengantar Kontainer Docker