Wpisy dla "debian"
Nginx z PHP5 i Rails w Debianie 5.0
Jestem zmuszony do trzymania na jednym z serwerów Debiana w wersji 5, niemniej chciałem tam zainstalować nowego Nginksa z PHP5 oraz Rails. Do tego oczywiście masa przydatnych gemów..
Poniżej kroki jakie wykonałem w tym boju, mam nadzieję że komuś się przyda :)
Notka: wszystkie pokazane poniżej polecenia wykonywałem jako root..
Instalacja wymaganych pakietów
apt-get install bzip2 build-essential
apt-get install ruby ruby-dev ruby1.8 rubygems libopenssl-ruby
apt-get install libfcgi libfcgi-perl libfcgi
apt-get install php5 php5-cgi php5-common php5-dev php5-mysql php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-cgi php5-mcrypt php5-curl php5-gd php5-memcache php5-mhash php5-pspell php5-snmp php5-sqlite libmagick9-dev php5-cli
apt-get install libmysqlclient-dev libxslt-dev
Konfiguracja PHP5 jako FastCGI
Do poprawnej konfiguracji wymagany jest program spawn-fcgi, nie ma go jednak w Debianie 5 jako deb'a więc należy skopiować go z pakietu lighttpd:
# oczywiście można inaczej, ale tak też działa :)
apt-get install lighttpd
cp /usr/bin/spawn-fcgi ~/
apt-get --purge remove lighttpd
mv ~/spawn-fcgi /usr/bin/
Do wystartowania serwera fcgi potrzebujemy:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Taki wpis najlepiej dodać np. do /etc/rc.local aby startował przy każdym podnoszeniu systemu..
Instalacja nowszego RubyGems, gemów
W Debianie gem update --system jest wyłączone, więc musimy pobrać ręcznie:
wget http://rubyforge.org/frs/download.php/75309/rubygems-1.8.10.tgz
tar xzf rubygems-1.8.10.tgz
cd rubygems-1.8.10
ruby setup.rb
Upewniamy się poprzez gem --version czy nowsza wersja została zainstalowana.. Następnie instalujemy passengera i inne gemy:
gem install --no-rdoc --no-ri passenger
gem install --no-rdoc --no-ri rails --version=3.0.9 # ja akurat potrzebuję konkretnie 3.0.9
gem install --no-rdoc --no-ri mysql2
# gem install ...whatever potrzebujesz :)
Nginx
Nginksa zainstalujemy ze źródeł, ponieważ nie ma on możliwości ładowania modułów, a więc nie da się inaczej wpiąć passengera. Przed instalacją potrzebujemy utworzyć mu kilka katalogów:
mkdir /var/lib/nginx
mkdir /var/lib/nginx/body
mkdir /var/lib/nginx/proxy
mkdir /var/lib/nginx/fastcgi
Pobieramy, rozpakowujemy i kompilujemy Nginksa
cd ~
wget http://nginx.org/download/nginx-1.0.6.tar.gz
tar xzf nginx-1.0.6.tar.gz
passenger-install-nginx-module
Ostatnia linijka wywołuje kompilację oraz instalację nginksa.. Jest to w formie przewodnika krok po kroku prowadzącego nas przez ten proces.. W miejscu gdzie przewodnik pyta nas o metodę instalacji, wybieramy opcję 2 - ekspert. Dzięki temu mamy możliwość zmiany kilku parametrów kompilacji.
Przy pytaniu o lokalizację źródeł nginksa należy podać katalog gdzie przed chwilą go wypakowaliśmy.
Następnie mamy możliwość przekazania opcji do procesu budowania źródeł.. Oto moja sugestia :)
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --sbin-path=/usr/sbin --user=www-data --group=www-data --with-http_dav_module --with-http_gzip_static_module --with-http_stub_status_module
Skrypt startowy nginksa /etc/init.d/nginx:
#! /bin/sh
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run 'sudo update-rc.d nginx defaults', or use the appropriate command on your
# distro.
#
# Author: Ryan Norbauer
# Modified: Geoffrey Grosenbach http://topfunky.com
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/sbin/$NAME
CONFIGFILE=/etc/nginx/nginx.conf
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
d_start() {
$DAEMON -c $CONFIGFILE || echo -n " already running"
}
d_stop() {
kill -QUIT `cat $PIDFILE` || echo -n " not running"
}
d_reload() {
kill -HUP `cat $PIDFILE` || echo -n " can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
# One second might not be time enough for a daemon to stop,
# if this happens, d_start will fail (and dpkg will break if
# the package is being upgraded). Change the timeout if needed
# be, or change d_stop to have start-stop-daemon use --retry.
# Notice that using --retry slows down the shutdown process somewhat.
sleep 5
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults
Konfiguracja
Główny plik konfiguracyjny
# /etc/nginx/nginx.conf
user www-data;
worker_processes 5;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 5;
#gzip on;
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9;
passenger_ruby /usr/bin/ruby1.8;
include /etc/nginx/sites-enabled/*;
}
Plik dla vhosta strony głównej, z PHP
# /etc/nginx/sites-available/default
server {
listen 80;
server_name serwer.com;
access_log /var/log/nginx/default.access.log;
location / {
root /var/www/nginx-default;
index index.php index.html index.htm;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex on;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
Dodatkowo, 'na przyszłość', szablon pliku dla aplikacji w Rails:
# /etc/nginx/sites-available/_rails_tpl
server {
listen 80;
server_name aplikacja.com;
access_log /var/www/aplikacja.com/log/access.log;
root /var/www/aplikacja.com/public;
passenger_enabled on;
}
Włączenie danego vhosta odbywa się poprzez utworzenie symlinka w katalogu sites-enabled:
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
Powodzenia!
GEM RMagick w Debianie 5.0
Może komuś się przyda..
Potrzebowałem gema RMagick dla Paperclip na VPSie z Debianem 5.0, ale gem nie kompilował się ze standardowymi pakietami Debiana tej wersji.. Instalacja libmagickwand oraz symlink katalogu nie pomogły, ponieważ wand był zbyt starej wersji..
Bazowałem na tym poście oraz jego źródłach apt. Jedyna różnica jest taka, że nie miałem w pakietach Lennego libltdl7 oraz libltdl-dev - pobrałem je z pakietów Debiana wersji Sid, po instalacji libltdl..:
apt-get install libmagic-dev libmagickwand-dev
# i
gem install --no-rdoc --no-ri rmagick
..zakończone powodzeniem! :)

