Shigar da FcgiWrap da Ba da damar Perl, Ruby da Bash Dynamic Harsuna akan Gentoo LEMP


Wannan koyawa tana da alaƙa da tsohon akan shigarwa na LEMP akan Gentoo kuma yana kula da wasu ƙarin batutuwan uwar garken kamar ba da damar harsunan rubutu masu ƙarfi kamar Perl ko Bash ko Ruby ta hanyar Fcgiwrap Gateway, da shirya fayilolin sanyi na Nginx Virtual Hosts don ba da abun ciki mai ƙarfi ta amfani da .pl, .rb da rubutun .cgi.

  1. An shigar da tarin LEMP akan Gentoo - https://linux-console.net/install-lemp-in-gentoo-linux/

Mataki 1: Kunna FCGIWRAP akan Gentoo LEMP

Fcgiwrap wani bangare ne na Nginx FastCGI Common Gateway Interface wanda ke aiwatar da wasu yarukan rubutu masu ƙarfi, kamar rubutun Perl ko Bash ko Ruby, suna aiki ta hanyar sarrafa buƙatun da aka karɓa daga Nginx, ta hanyar TCP ko Unix Sockets, ta hanyar kai tsaye kuma yana mayar da sakamakon da aka samar zuwa Nginx, wanda, a cikin lokaci, zai tura martani zuwa ƙarshen abokan ciniki.

1. Bari mu fara farawa ta hanyar shigar da tsarin FCcgiwrap akan Gentoo Linux ta amfani da umarni mai zuwa.

# emerge --ask www-misc/fcgiwrap

2. Ta hanyar tsoho fakitin Fcgiwrap baya samar da kowane rubutun init akan Gentoo don sarrafa tsarin. Bayan an haɗa fakitin kuma an shigar da su ƙirƙirar rubutun init masu zuwa waɗanda ke taimaka muku sarrafa tsarin Fcgiwrap ta amfani da hanyoyi guda uku: ko dai ƙaddamar da tsarin ta amfani da Unix Domain Sockets ko ta amfani da gida b>TCP Socketsko amfani da duka biyu a lokaci guda.

Ƙirƙiri fayil init akan hanyar /etc/init.d/ tare da abun cikin fayil mai zuwa.

# nano /etc/init.d/fcgiwrap

Ƙara abun cikin fayil mai zuwa.

#!/sbin/runscript

ip="0.0.0.0"
port="12345"

start() {
ebegin "Starting fcgiwrap process..."
       /usr/sbin/fcgiwrap -s tcp:$ip:$port &
        tcp_sock=`netstat -tulpn | grep fcgiwrap`
        echo "Socket details: $tcp_sock"
eend $? "Errors were encountered while starting fcgiwrap process"
}

stop() {
ebegin "Stopping fcgiwrap process..."
                pid=`ps a | grep fcgiwrap | grep tcp | cut -d" " -f1`
kill -s 1 $pid
                tcp_sock=`netstat -tulpn | grep fcgiwrap`
                 if test $tcp_sock =  2> /dev/null ; then
                 echo "Fcgiwrap process successfully stoped"
                tcp_sock=`netstat -atulpn | grep $port`
                if test $tcp_sock =  2> /dev/null ; then
                echo "No open fcgiwrap connection found..."
                else
                echo "Wait to close fcgiwrap open connections...please verify with 'status'"
                echo -e "Socket details: \n$tcp_sock"
                 fi
                else
                echo "Fcgiwarp process is still running!"
        echo "Socket details: $tcp_sock"
        fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

status() {
ebegin "Status fcgiwrap process..."
      tcp_sock=`netstat -atulpn | grep $port`
    if test $tcp_sock =  2> /dev/null ; then
                       echo "Fcgiwrap process not running"
                     else
                echo "Fcgiwarp process is running!"
                 echo -e "Socket details: \n$tcp_sock"
                fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

Kamar yadda kake gani fayil ɗin rubutun yana riƙe da masu canji biyu a farkon, bi da bi ip da tashar ruwa. Canja wannan masu canji tare da bukatun ku kuma ku tabbata ba su zo tare da wasu ayyuka akan tsarin ku ba, musamman madaidaicin tashar jiragen ruwa - tsoho anan shine 12345 - canza daidai.

Yin amfani da 0.0.0.0 akan madaidaicin IP yana ba da damar tsarin don ɗaure da sauraren kowane IP (a waje mai iya samun damar idan ba ku da Tacewar zaɓi), amma saboda dalilan tsaro yakamata ku canza shi don sauraron gida kawai, akan 127.0.0.1, sai dai idan kuna da wasu dalilai kamar saitin ƙofar Fcgiwrap mai nisa akan kulli na daban don aiki ko daidaita nauyi.

3. Bayan an ƙirƙiri fayil ɗin, ƙara izinin aiwatarwa kuma sarrafa tsarin daemon ta amfani da farawa, tsayawa ko matsayi. Canjin matsayi zai nuna maka bayanan soket masu dacewa kamar su IP-PORTbiyu yana saurara kuma idan duk wani haɗi mai aiki a inda aka fara. Hakanan, idan tsarin yana da haɗin kai a cikin TIME_WAIT jihar ba za ku iya sake kunna shi ba har sai duk haɗin TCP ya rufe.

# chmod +x /etc/init.d/fcgiwrap
# service start fcgiwrap
# /etc/init.d/fcgiwrap status

Kamar yadda aka gabatar a baya Fcgiwrap na iya gudu lokaci guda ta amfani da sockets guda biyu, don haka za a ɗan canza sunan rubutun na biyu zuwa fcgiwrap-unix-socket, don tabbatar da cewa ana iya farawa duka biyu da gudu lokaci guda.

# nano /etc/init.d/fcgiwrap-unix-socket

Yi amfani da abun ciki na fayil mai zuwa don soket na UNIX.

#!/sbin/runscript
sock_detail=`ps a | grep fcgiwrap-unix | head -1`

start() {
ebegin "Starting fcgiwrap-unix-socket process..."
        /usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-unix.sock &
        sleep 2
        /bin/chown nginx:nginx /run/fcgiwrap-unix.sock
        sleep 1
        sock=`ls -al /run/fcgiwrap-unix.sock`
        echo "Socket details: $sock"
eend $? "Errors were encountered while starting fcgiwrap process"
}

stop() {
ebegin "Stopping fcgiwrap-unix-socket process..."
                pid=`ps a | grep fcgiwrap | grep unix | cut -d" " -f1`
                rm -f /run/fcgiwrap-unix.sock                 
                kill -s 1 $pid
                echo "Fcgiwrap process successfully stoped"
                #killall /usr/sbin/fcgiwrap
        sleep 1
        echo "Socket details: $sock"
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

status() {
ebegin "Status fcgiwrap-unix-socket process..."
  if test -S /run/fcgiwrap-unix.sock; then
       echo "Process is started with socket: $sock_detail"
        else
        echo "Fcgiwrap process not running!"
        fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

4. Sake tabbatar da cewa wannan fayil ɗin yana iya aiwatarwa kuma yi amfani da maɓallin sabis iri ɗaya: fara, tsayawa ko status. Na saita tsohuwar hanyar wannan soket akan hanyar tsarin /run/fcgiwrap-unix.sock. Fara tsarin kuma tabbatar da shi ta amfani da status canza ko jera /gudu abun cikin directory kuma gano wurin soket, ko amfani da ps -a | grep fcgiwrapumarni.

# chmod +x /etc/init.d/fcgiwrap-unix-socket
# service start fcgiwrap-unix-socket
# /etc/init.d/fcgiwrap-unix-socket status
# ps -a | grep fcgiwrap

Kamar yadda aka ambata a baya Fcgiwrap na iya aiki tare da duka TCP da UNIX soket a lokaci guda, amma idan ba kwa buƙatar haɗin ƙofar waje na manne wa Unix Domain Socket kawai, saboda yana amfani da hanyar sadarwa ta hanyar sadarwa, wanda ya fi sauri fiye da sadarwa. Haɗin madauki na TCP, kuma yana amfani da ƙasa da TCP sama.

Mataki 2: Kunna Rubutun CGI akan Nginx

5. Don Nginx don ƙaddamarwa da gudanar da rubutun Perl ko Bash ta hanyar Interface Mai Saurin Ƙofar Ƙofar Sadarwa, Dole ne a daidaita Ma'aikatan Runduna tare da ma'anar Fcgiwrap akan tushen hanyar ko bayanin wuri.

Misali, an gabatar da shi a ƙasa (localhost), wanda ke kunna rubutun Perl da CGI akan duk fayilolin da aka sanya a tushen tushen (/var/www/localhost/htdocs/) tare da .pl > da .cgi tsawo ta amfani da Fcgiwrap TCP Sockets don tsohuwar hanyar daftarin aiki, wuri na biyu ta amfani da Unix Domain Sockets, tare da fayil index.pl kuma wuri na uku yana amfani da Sockets TCP tare da fayil index.cgi.

Sanya abubuwan da ke biyo baya, ko wasu sassansa kawai, zuwa fayil ɗin daidaitawar Mai watsa shiri da kuke so kuna son kunna Perl mai ƙarfi ko rubutun Bash tare da UNIX ko TCP Sockets a ƙarƙashin wurare daban-daban, ta hanyar gyara fastcgi_pass bayanin gardama.

# nano /etc/nginx/sites-available/localhost.conf

Shirya localhost.conf don yin kama da samfurin da ke ƙasa.

server {
                                listen 80;
                                server_name localhost;

access_log /var/log/nginx/localhost_access_log main;
error_log /var/log/nginx/localhost_error_log info;

               root /var/www/localhost/htdocs/;
                location / {
                autoindex on;
                index index.html index.htm index.php;
                                }

## PHP –FPM Gateway ###
                            location ~ \.php$ {
                            try_files $uri =404;
                            include /etc/nginx/fastcgi.conf;
                            fastcgi_pass 127.0.0.1:9001;
				}

## Fcgiwrap Gateway on all files under root with TCP Sockets###
location ~ \.(pl|cgi|rb)$ {
                fastcgi_index index.cgi index.pl;
                include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:12345;    
                                }                                                                                                                             

## Fcgiwrap Gateway on all files under root second folder with index.pl using UNIX Sockets###
location /second {
                                index index.pl; 
root /var/www/localhost/htdocs/;
                                location ~ \.(pl|cgi|rb)$ {
                                include /etc/nginx/fastcgi.conf;
                                fastcgi_pass unix:/run/fcgiwrap-unix.sock;      
                                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                                             }                                                                                                            
                                                }

## Fcgiwrap Gateway on all files under root third folder with index.cgi using TCP Sockets###
location /third {
                                index index.cgi;               
                                location ~ \.(pl|cgi|rb)$ {
                                include /etc/nginx/fastcgi.conf;
                                 fastcgi_pass 127.0.0.1:12345;       
                                }                                                                                             
  }

6. Bayan kun gama gyara Nginx localhost.conf, ko takamaiman fayil ɗin daidaitawar Mai watsa shiri na Virtual, matsa zuwa tushen tushen daftarin aiki na gidan yanar gizon ku, ƙirƙirar waɗannan manyan fayiloli guda biyu don nuna bayanin wurin ku, kuma ƙirƙirar fayilolin fihirisa don kowane wuri tare da takamaiman tsawo.

# cd /var/www/localhost/htdocs
# mkdir second third

Ƙirƙiri fayil index.pl a wuri na biyu tare da abun ciki mai zuwa.

# nano /var/www/localhost/htdocs/second/index.pl

Ƙara wannan abun ciki don samun masu canjin yanayi.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<HTML;
                <html>
                <head><title>Perl Index</title></head>
                <body>
                                <div align=center><h1>A Perl CGI index on second location with env variables</h1></div>
                </body>
HTML
print "Content-type: text/html\n\n"; foreach my $keys (sort keys %ENV) { print "$keys =
$ENV{$keys}<br/>\n";
}
exit;

Sannan ƙirƙirar fayil index.cgi a wuri na uku tare da abun ciki mai zuwa.

# nano /var/www/localhost/htdocs/third/index.cgi

Ƙara wannan abun ciki don samun masu canjin yanayi.

#!/bin/bash
echo Content-type: text/html
echo ""
cat << EOF
<HTML>
<HEAD><TITLE>Bash script</TITLE></HEAD>
<BODY><PRE>
<div align=center><h1>A BASH CGI index on third location with env variables</h1></div>
EOF
env
cat << EOF
</BODY>
</HTML>
EOF

7. Lokacin da aka gama gyarawa, sanya fayiloli guda biyu masu aiwatarwa, sake kunna uwar garken Nginx kuma tabbatar da cewa duka Fcgiwrap sockets suna gudana.

# chmod +x /var/www/localhost/htdocs/second/index.pl
# chmod +x /var/www/localhost/htdocs/third/index.cgi
# service nginx restart
# service fcgiwrap start
# service fcgiwrap-unix-socket start

Na gaba, tura mai binciken ku na gida akan URL mai biyo baya.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Sakamakon ya kamata ya bayyana kamar yadda yake a ƙasan hotunan kariyar kwamfuta.

8. Idan komai yana wurin kuma an daidaita shi daidai, kunna duka Fcgiwrap daemons don farawa ta atomatik, bayan sake yi ta hanyar ba da umarni masu zuwa (idan kun saita Nginx don amfani da kwasfan CGI guda biyu).

# rc-update add fcgiwrap default
# rc-update add fcgiwrap-unix-socket default

Mataki 3: Kunna tallafin Ruby akan Fcgiwrap

9. Idan kana buƙatar gudanar da rubutun Ruby mai ƙarfi akan Nginx FCGI dole ne ka shigar da fassarar Ruby akan Gentoo tare da umarni mai zuwa.

# emerge --ask ruby

10. Bayan an haɗa kunshin kuma an shigar da shi, matsa zuwa Nginx shafukan da ake da su kuma a gyara localhost.conf fayil ta hanyar haɗa waɗannan bayanan kafin na ƙarshe mai lanƙwasa \ } , wanda ke kunna goyan baya don gudanar da rubutun Ruby a wuri na hudu a ƙarƙashin tsohuwar hanyar tushen daftarin aiki ta Nginx localhost.

# nano /etc/nginx/sites-available/localhost.conf

Yi amfani da umarnin Nginx masu zuwa.

## Fcgiwrap Gateway on all files under root fourth folder with index.rb under TCP Sockets###
                location /fourth {
                                index index.rb;
                                location ~ \.rb$ {
                                include /etc/nginx/fastcgi.conf;
                                fastcgi_pass 127.0.0.1:12345;       
                                                }                                                                                                             
                               }             
## Last curly bracket which closes Nginx server definitions ##
}

11. Yanzu, don gwada sanyi ƙirƙiri shugabanci na huɗu a ƙarƙashin hanyar /var/www/localhost/htdocshanyar, ƙirƙirar rubutun Ruby mai aiwatarwa tare da tsawo .rb kuma ƙara mai zuwa. abun ciki.

# mkdir /var/www/localhost/htdocs/fourth
# nano /var/www/localhost/htdocs/fourth/index.rb

Ruby index.rb misali.

#!/usr/bin/ruby
puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><HEAD><TITLE>Ruby script</TITLE></HEAD>"
puts "<BODY><PRE>"
puts "<div align=center><h1>A Ruby CGI index on fourth location with env variables</h1></div>"
system('env')

12. Bayan kun ƙara izinin aiwatarwa akan fayil, sake kunna Nginx daemon don amfani da saiti.

# chmod +x /var/www/localhost/htdocs/fourth/index.rb
# service nginx restart

Bude burauzar ku kuma kewaya zuwa URL http://localhost/fourth/, wanda ya kamata ya gabatar muku da abun ciki mai zuwa.

Shi ke nan a yanzu, kun saita Nginx don yin hidimar Rubutun Perl, Ruby da Bash akan Ƙofar FastCGI, amma, ku sani cewa gudanar da irin wannan rubutun da aka fassara akan Nginx CGI Gateway na iya zama haɗari kuma yana haifar da haɗarin tsaro sosai akan sabar ku saboda suna gudu ta amfani da harsashi masu aiki a ƙarƙashin tsarin ku, amma yana iya faɗaɗa shingen tsaye wanda HTML ɗin tsaye ya sanya, yana ƙara ayyuka masu ƙarfi zuwa gidan yanar gizonku.