Ters proxy, başka bir web sunucusunun veya bir web hizmetinin önüne oturabilen bir web sunucusudur. Giden trafiği şifreleyebilir, yük dengeleyici görevi görebilir, trafiği yönlendirebilir ve koruma sağlayabilir. Nginx web sunucusu, geleneksel sunucuların önünde bir proxy sunucusu olarak kullanılabilir, ancak bazen kurulumu sıkıcı olabilir ve düzgün yapılmadığında sorunlara neden olabilir.
Nginx Proxy Manager, Let’s Encrypt kullanarak yerleşik SSL desteği, birden çok ana bilgisayar için destek, HTTP kimlik doğrulaması, erişim listeleri ve kullanıcı gibi özelliklere sahip bir grafik kullanıcı arabirimi (arayüzü) sağlayarak Nginx’in proxy sunucusu olarak kurulumunu kolaylaştıran bir uygulamadır.
Önkoşullar
- Minimum 1 GB RAM ile Ubuntu Debian CentOS Alma Linux Rocky Linux çalıştıran bir Linux sunucusu.
- Sudo ayrıcalıklarına sahip root olmayan bir kullanıcı.
- Sunucuya işaret eden npm.example.com gibi tam nitelikli bir alan adı
Adım 1 Güvenlik Duvarını Yapılandırın
Cent OS Rocky Linux Alma Linux
Firewalld güvenlik duvarının kurulu olması gerekir. Güvenlik duvarının durumunu kontrol edin.
sudo firewall-cmd --state
running
80, 81 ve 443 numaralı bağlantı noktalarını açın.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=81/tcp
Değişiklikleri etkinleştirmek için güvenlik duvarını yeniden yükleyin.
sudo firewall-cmd --reload
Ubuntu Debian
Ubuntu ve Debian sistemleri varsayılan olarak ufw (Karmaşık Olmayan Güvenlik Duvarı) kullanır.
Güvenlik duvarının çalışıp çalışmadığını kontrol edin.
sudo ufw status
Çalışıyorsa, 80, 81 ve 443 numaralı bağlantı noktalarını açın.
sudo ufw allow 80
sudo ufw allow 81
sudo ufw allow 443
Güvenlik duvarı çalışmıyorsa SSH bağlantı noktasını açın.
sudo ufw allow "OpenSSH"
Çalışmıyorsa güvenlik duvarını etkinleştirin.
sudo ufw enable
Çalışıyorsa, değişiklikleri uygulamak için yeniden yükleyin.
sudo ufw reload
Adım 2 Docker’ı Yükleyin
Cent OS Rocky Linux Alma Linux
Docker’ı yüklemek için aşağıdaki komutu çalıştırın.
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
sudo apt install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Debian
sudo apt install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Docker hizmetini etkinleştirin ve başlatın.
sudo systemctl start docker --now
Kullanıcı adınızı Docker grubuna ekleyin.
sudo usermod -aG docker $USER
Değişikliği uygulamak için sistemden çıkış yapın ve tekrar giriş yapın.
3. Adım Docker Compose’u Yükleyin
Docker compose ikili dosyasını indirin ve kurun.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
İkili dosyaya yürütülebilir izin uygulayın.
sudo chmod +x /usr/local/bin/docker-compose
Adım 4 Docker Compose Dosyası Oluşturun
Nginx proxy yöneticisi için bir dizin oluşturun.
mkdir ~/nginx-proxy
Dizine geçin.
cd ~/nginx-proxy
Kullanıcı verileri ve SSL sertifikaları için dizinler oluşturun.
mkdir {data,letsencrypt}
Düzenlemek için docker-compose.yml
dosyasını oluşturun ve açın.
nano docker-compose.yml
İçine aşağıdaki kodu yapıştırın.
version: "3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# Uncomment the line below if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- npm-db
networks:
- npm-nw
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- npm-internal
networks:
npm-internal:
npm-nw:
external: true
Dosyayı Ctrl + X tuşlarına basarak ve istendiğinde Y girerek kaydedin.
Dosyayı inceleyelim. Dosyanın ilk kısmı, Nginx proxy yöneticisinin görüntüsünü içe aktardığımız ve bazı ortam değişkenlerini veritabanı kimlik bilgileri biçiminde ayarladığımız yerdir. Ayrıca 80, 81 ve 443 numaralı bağlantı noktalarını erişim için sunucuya sunuyoruz. FTP erişimi için 21 gibi daha fazla bağlantı noktası gösterebilirsiniz. DISABLE_IPV6: ‘true’ satırının yorumunu kaldırarak IPV6 desteğini devre dışı bırakabilirsiniz. Veri ve SQL depolaması için ana makinemizden Docker’a birkaç dizini eşledik.
Burada iki ağ kullanıyoruz. Biri, proxy yöneticisini ve veritabanını bağlamak için dahili ağ npm-internal’dır. Bu, otomatik olarak oluşturulduğu için isteğe bağlıdır. Ama burada kendi seçeceğimiz bir isim vererek manuel olarak yapıyoruz.
npm-nw adlı proxy yöneticisi kapsayıcısına harici bir ağ ekledik. Bu ağ, proxy yöneticisini yüklediğiniz diğer docker kapsayıcılarına bağlamak için kullanabileceğiniz için önemlidir. Bir ağ kullanmak, herhangi bir kapsayıcıyı, bağlantı noktalarını sunucuya göstermeye gerek kalmadan doğrudan bağlamanıza olanak tanır.
Adım 5 Nginx Proxy Yöneticisini Çalıştırın
Docker kapsayıcısını başlatmadan önce, harici ağ npm-nw’yi oluşturmamız gerekiyor dahili ağlar otomatik olarak oluşturulur harici ağı oluşturmak için aşağıdaki komutu çalıştırın.
docker network create npm-nw
Aşağıdaki komutu kullanarak Docker Container’ı başlatın.
docker-compose up -d
Konteynerlerin durumunu kontrol edin.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c91ca0ddca97 jc21/nginx-proxy-manager:latest "/init" About a minute ago Up About a minute 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp npm-app
1738d71b95da mariadb:latest "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp npm-db
Adım 6 Nginx Proxy Yöneticisine Erişin
Artık Nginx proxy yöneticinize http://sunucunuzIP:81 URL’si aracılığıyla erişebilirsiniz. Aşağıdaki giriş ekranını almalısınız.