sudo add-apt-repository "deb http://archive.canonical.com/ lucid
partner"
sudo apt-get update
sudo apt-get install sun-java6-jre
sudo update-alternatives --config java
Instalación Python, Git, y Librerías necesarias
sudo apt-get install python-dev python-setuptools libmysqlclient-dev
git-core mercurial libxml2-dev libxslt1-dev libjpeg-dev
libfreetype6-dev liblcms1-dev python-tk gettext
Crear copia del repositorio
su - web
cd /export/web/
mkdir domain.com
copiar
archivos al directorio
Preparación ambiente virtual del sitio
su - web
cd /export/web/domain.com
virtualenv domain_env --no-site-packages
source domain_env/bin/activate
pip install -r /domain/requirements.txt
Archivo configuración django_wsgi.py
Creamos el siguiente
archivo.
sudo vim /export/web/domain.com/django_wsgi.py
Y colocamos las siguientes
lineas.
import
os
os.environ['DJANGO_SETTINGS_MODULE']
= 'site.settings'
import
django.core.handlers.wsgi
application
= django.core.handlers.wsgi.WSGIHandler()
Ahora se crea el archivo
django.wsgi
sudo vim /export/web/domain.com/domain/django.wsgi
Colocamos las siguientes lineas
#
coding: utf-8
SITE_DIRS
= ['/export/web/domain.com/domain_env/lib/python2.6/site-packages']
import
sys
import
site
import
os
#
Remember original sys.path.
prev_sys_path
= list(sys.path)
#
Add each new site-packages directory.
for
directory in SITE_DIRS:
site.addsitedir(directory)
#
Reorder sys.path so new directories at the front.
new_sys_path
= []
for
item in list(sys.path):
if
item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
new_sys_path.append('/export/web/domain.com')
new_sys_path.append('/export/web/domain.com/domain')
sys.path[:0]
= new_sys_path
import
django.core.handlers.wsgi
os.environ['DJANGO_SETTINGS_MODULE']
= 'settings'
os.environ['PYTHON_EGG_CACHE']
= '/tmp'
application
= django.core.handlers.wsgi.WSGIHandler()
Instalación y configuración uWSGI
Se instala los archivos
necesarios para compilar el modulo uWSGI para apache, y se baja la
ultima versión del codigo fuente del modulo.
sudo apt-get install apache2-dev
su - root
mkdir -p /export/src
cd /export/src
wget
http://projects.unbit.it/uwsgi/browser/apache2/mod_uwsgi.c?format=txt
-o mod_uwsgi.c
apxs2 -i -c mod_uwsgi.c
echo "LoadModule uwsgi_module /usr/lib/apache2/modules/mod_uwsgi.so" > \
/etc/apache2/mods-available/uwsgi.load
a2enmod uwsgi
/etc/init.d/apache2 restart
Instalando
uWSGI con PIP
pip install uwsgi
Creamos
el archivo configuración uwsgi.xml
sudo vim /export/web/domain.com/uwsgi.xml
y
colocamos lo siguiente
<uwsgi>
<max-requests>100</max-requests>
<listen>100</listen>
<memory-report/>
<limit-as>1024</limit-as>
<buffer-size>64768</buffer-size>
<workers>4</workers>
<master/>
<socket-timeout>10</socket-timeout>
<socket>/tmp/domain.sock</socket>
<home>/export/web/domain.com/domain_env</home>
<pythonpath>/export/web/domain.com</pythonpath>
<pythonpath>/export/web/domain.com/domain</pythonpath>
<touch-reload>/export/web/domain.com/domain/django.wsgi</touch-reload>
<module>django_wsgi</module>
</uwsgi>
Se
crea el script que inicia el servicio
sudo vim /etc/init.d/uwsgi
Y
se coloca lo siguiente:
#!/bin/bash
#
uwsgi - Use uwsgi to run python and wsgi web apps.
#
#
chkconfig: - 85 15
#
description: Use uwsgi to run python and wsgi web apps.
#
processname: uwsgi
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/uwsgi
OWNER=root
NAME=domain.com
DESC=domain.com
test
-x $DAEMON || exit 0
set
-e
get_pid()
{
if
[ -f /var/run/$NAME.pid ]; then
echo
`cat /var/run/$NAME.pid`
fi
}
DAEMON_OPTS="
--uid www-data --gid www-data -x /export/web/$NAME/uwsgi.xml -d
/var/log/uwsgi/$NAME.log --pidfile /var/run/$NAME.pid"
case
"$1" in
start)
echo
-n "Starting $DESC: "
PID=$(get_pid)
if
[ -z "$PID" ]; then
[
-f /var/run/$NAME.pid ] && rm -f /var/run/$NAME.pid
touch
/var/run/$NAME.pid
chown
$OWNER /var/run/$NAME.pid
su - $OWNER -pc "$DAEMON $DAEMON_OPTS"
echo "$NAME."
fi
;;
stop)
echo
-n "Stopping $DESC: "
PID=$(get_pid)
echo
$PID
[
! -z "$PID" ] && kill -s 3 $PID &> /dev/null
if
[ $? -gt 0 ]; then
echo
"was not running"
exit
1
else
echo "$NAME."
rm
-f /var/run/$NAME.pid &> /dev/null
fi
;;
reload)
echo
"Reloading $NAME"
PID=$(get_pid)
[
! -z "$PID" ] && kill -s 1 $PID &> /dev/null
if
[ $? -gt 0 ]; then
echo
"was not running"
exit
1
else
echo "$NAME."
rm
-f /var/run/$NAME.pid &> /dev/null
fi
;;
force-reload)
echo
"Reloading $NAME"
PID=$(get_pid)
[
! -z "$PID" ] && kill -s 15 $PID &>
/dev/null
if
[ $? -gt 0 ]; then
echo
"was not running"
exit
1
else
echo "$NAME."
rm
-f /var/run/$NAME.pid &> /dev/null
fi
;;
restart)
$0
stop
sleep
2
$0
start
;;
status)
#killall
-10 $DAEMON
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N
{start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac
exit
0
Se le asignan permisos de
ejecución
sudo chmod +x /etc/init.d/uwsgi
Se inicia el servicio
sudo /etc/init.d/uwsgi start
Y se agrega en la lista de
servicios que se ejecutan al iniciar el sistema
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf
sudo sysv-rc-conf
Configuración Apache
Se crea el archivo de
configuración del virtualhost
sudo vim /etc/apache2/site-available/domain.com
Con la siguiente
información.
<VirtualHost
*>
ServerName
domain.com
ServerAlias
domain.interalia.net
DocumentRoot
"/export/web/domain.com/www"
<Location
/>
SetHandler
uwsgi-handler
uWSGISocket
/tmp/domain.sock
</Location>
LogLevel
warn
CustomLog
/var/log/apache2/domain.com-access.log combined
ErrorLog
/var/log/apache2/domain.com-error.log
</VirtualHost>
Activamos el sitio y
recargamos la configuración.
sudo a2ensite domain.com
sudo /etc/init.d/apache2 reload
Instalación ultima version estable Nginx
sudo apt-get install python-software-properties
sudo -s
nginx=stable
add-apt-repository ppa:nginx/$nginx
apt-get update
apt-get install nginx
Se crean los siguientes
archivos
vim /etc/nginx/conf.d/osam.conf
##
General Options
ignore_invalid_headers
off;
keepalive_requests
100;
#limit_conn_zone
$binary_remote_addr 5m;
recursive_error_pages
on;
#sendfile
on;
server_name_in_redirect
off;
server_tokens
off;
##
TCP options
#tcp_nopush
on;
#tcp_nodelay
on;
##
Compression
#gzip
on;
gzip_static
on;
gzip_http_version
1.0;
#gzip_http_version
1.1;
gzip_comp_level
6;
gzip_min_length
100;
gzip_proxied
any;
gzip_types
text/plain text/css text/xml image/x-icon image/gif
application/json application/x-javascript application/xml
application/
xml+rss
text/javascript;
gzip_vary
on;
#
make sure gzip does not lose large gzipped js or css files
#
see http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
gzip_buffers
16 8k;
#
Disable gzip for certain browsers.
#gzip_disable
“MSIE [1-6].(?!.*SV1)”;
##
Global SSL options
ssl_ciphers
HIGH:!ADH:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols
TLSv1;
ssl_session_cache
shared:SSL:10m;
ssl_session_timeout
5m;
##
Proxy options
proxy_redirect
off;
proxy_set_header
Host $host;
proxy_set_header
X-Real-IP $remote_addr;
proxy_set_header
X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout
300;
proxy_send_timeout
90;
proxy_read_timeout
90;
proxy_buffer_size
16k;
proxy_buffers
32 16k;
proxy_busy_buffers_size
64k;
proxy_buffering
on;
proxy_cache_min_uses
3;
proxy_cache_path
/usr/local/nginx/proxy_temp/ levels=1:2 keys_zone=cache:10m
inactive=10m max_size=1000M;
proxy_cache_valid
any 10m;
proxy_ignore_client_abort off;
proxy_intercept_errors
on;
proxy_next_upstream
error timeout invalid_header;
##
uWSGI
#upstream
uwsgi_main {
#
server 127.0.0.1:5050;
#}
# The country IP database
#geoip_country
/usr/share/GeoIP/GeoIP.dat;
vim /etc/nginx/sites-available/domain.com
#
server
{
add_header
Cache-Control public;
server_name
domain.interalia.net 206.80.40.111 10.164.90.16;
access_log
/var/log/nginx/domain.com-access.log;
error_log
/var/log/nginx/domain.com-error.log;
root
/export/web/domain.com/www;
##
Only allow GET and HEAD reques:qt methods
#if
($request_method !~ ^(GET|HEAD)$ ) {
# return
444;
#}
##
Deny illegal Host headers
#if
($host !~* ^domain.com$ ) {
# return
444;
#}
##
Deny certain User-Agents (case insensitive)
##
The ~* makes it case insensitive as opposed to just a ~
#if
($http_user_agent ~* (Baiduspider|Jullo|httperf) ) {
# return
444;
#}
##
Serve an empty 1x1 gif _OR_ an error 204 (No Content) for favicon.ico
location
= /favicon.ico {
#empty_gif;
return
204;
}
location
/ {
proxy_pass
http://127.0.0.1:8080;
}
location
~ ^/(media|static) {
expires
30d;
root
/export/web/domain.com/domain;
if
($request_filename ~* ^.*?/([^/]*?)$)
{
set
$filename $1;
}
if
($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
add_header
Access-Control-Allow-Origin *;
}
}
location
/gmedia {
expires
30d;
alias
/export/web/domain.com/domain.com/_generated_media;
if
($request_filename ~* ^.*?/([^/]*?)$)
{
set
$filename $1;
}
if
($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
add_header
Access-Control-Allow-Origin *;
}
}
}
Se inicia el servicio
$
sudo /etc/init.d/nginx start
Para obtener los paquetes a instalar
pip freeze --local
Aparece una lista como la siguientes.
Django==1.3.1
Fabric==1.2.2
MySQL-python==1.2.3
PIL==1.1.7
South==0.7.3
Whoosh==2.1.0
argparse==1.2.1
distribute==0.6.21
django-admin-tools==0.4.0
django-appmedia==1.0.1
-e hg+https://bitbucket.org/wnielson/django-chronograph@f1b471b4ef84b4efea4c1d764968a833d8aaf794#egg=django_chronograph-dev
django-classy-tags==0.3.3.1
django-cms==2.1.3
django-debug-toolbar==0.8.5
-e git://github.com/wardi/django-filebrowser-no-grappelli.git@0be5a31a703c1bf656b0fe244343d6017e3e6419#egg=django_filebrowser-dev
django-haystack==1.2.4
django-mediagenerator==1.10.4
django-modeltranslation==0.3.2
django-pagination==1.0.7
django-rosetta==0.6.0
django-taggit==0.9.3
django-tinymce==1.5.1a2
django-uni-form==0.8.0
gdata==2.0.15
ipython==0.11
lxml==2.3.1
mutagen==1.20
paramiko==1.7.7.1
pycrypto==2.3
python-dateutil==1.5
python-memcached==1.47
simplejson==2.1.6
slimmer==0.1.30
sorl-thumbnail==11.05.2
suds==0.4
Parches
su - web
cd /export/web/dominio.com
source dominio_env/bin/activate
cd /export/web/domino.com/dominios_env/lib/python2.6/site-packages/cms
NGINX
/etc/nginx/nginx.conf
/etc/nginx/conf.d/osam.conf
/etc/nginx/sites-available/dominio.com
/etc/nginx/sties-available/s.dominio.com
MySQL
CREATE DATABASE `dominio` /*!40100 DEFAULT CHARACTER SET latin1 */
mysql -uroot -p dominio < dominio.sql
SET PASSWORD FOR 'usuario'@'localhost' = PASSWORD('123456');
GenerateMedia
cd /export/web/dominio.com
source dominio/bin/activate
python manage.py collectstatic --noinput && python manage.py generatemedia
python manage.py makemessages -a && python manage.py makemessages -d djangojs -a
python manage.py makemessages -a
Ajustes del sistema operatico http://www.cyberciti.biz/faq/linux-tcp-tuning/
No comments:
Post a Comment