Hmm, interesting. I'll give it a try and compare RAM usage/performance after I've had more time to record data tinkering with the custom Nginx install.
On Monday, December 17, 2012 11:34:51 AM UTC-8, Neil wrote: > > What I've done for that is set up another webfaction application of type > "static" to server all the css, images, audio, videos, etc. That creates a > new folder, for example: > > /home/[USER]/webapps/static_web2py_myapp > > Then, in my web2py/applications/[my_app]/ folder, I put a symbolic link > called "static" to the above folder. Seems to do the trick. > > On Monday, December 17, 2012 7:17:35 PM UTC, HittingSmoke wrote: >> >> Bah, I actually asked a Webfaction staff member if this were possible and >> I was told no, that the frontend Nginx server could only be used on >> static/PHP sites. >> >> Now that I'm looking into it I'm seeing one major issue that without >> proper configuration of Nginx for web2py, it would be serving static files >> through uwsgi instead of directly though Nginx. That requires a special >> entry in nginx.conf. Would that not mean reduced performance and higher RAM >> usage from uwsgi? >> >> On Monday, December 17, 2012 4:32:21 AM UTC-8, Neil wrote: >>> >>> I'm also not a sysadmin, but I did go through the process of setting up >>> web2py on webfaction recently as well. I also found that script but it >>> seemed to be overly complicated. In particular, there is no need to >>> download, build & run nginx, as you can use webfaction's instance. If there >>> is an advantage to running your own I'd be curious to hear about it. >>> Simplified steps I followed: >>> >>> 1. download & build latest uwsgi >>> 2. download & unpack latest web2py >>> 3. set up a "custom app" using webfaction's control panel, taking note >>> of the port >>> 4. run the uwsgi binary, specifying parameters in the command line. For >>> the socket parameter use 127.0.0.1 and the port webfaction assigned for >>> your custom app. There are a few other posts in this group about selecting >>> good uwsgi parameters so that you don't run out of memory (seems to be a >>> common pitfall on webfaction) >>> >>> Hope that's useful. >>> >>> Neil >>> >>> >>> On Monday, December 17, 2012 6:53:31 AM UTC, HittingSmoke wrote: >>>> >>>> I've been learning web2py on Webfaction off and on for a while now. The >>>> web2py install script on the Webfaction wiki is quite outdated and runs on >>>> an Apache instance that can barely stay within the default memory limits >>>> without serious tweaking. Responsiveness with web2py/apache out of the box >>>> with the default install script is unimpressive as well. >>>> >>>> A while back I tried a lighttpd setup with web2py on Webfaction. The >>>> memory usage went way down and responsiveness was better but the web >>>> server >>>> was quite unstable. I found myself having to restart it constantly and I >>>> couldn't track down the cause of the breakages. After the host upped the >>>> default RAM limit on CentOS6 systems to 256MB things got better as it made >>>> Apache more manageable on custom installs but it still sucked overall. >>>> >>>> So I found an install script for nginx/uWSGI on the WF community >>>> support >>>> forum<http://community.webfaction.com/questions/7193/install-web2py-with-nginx-and-uwsgi>but >>>> it was horribly outdated and had multiple issues pointed out in the >>>> comments that went unfixed. I spent a couple hours today fixing the >>>> ignored >>>> errors, updating it to the latest nginx and uwsgi versions and fixing the >>>> errors which that brought on. After getting it working my RAM usage has >>>> decreased and responsiveness of my web2py apps has noticeably increased. I >>>> figured I'd share the script for anyone interested. >>>> >>>> I'm not a sysadmin, more of a hobbyist so any critique of my server >>>> configs here are greatly welcome. Please note that the comments are not >>>> mine. I merely updated the parts of the script that were required for it >>>> to >>>> work. All else was left as-is. >>>> >>>> Also, if anyone with knowledge of XML-RPC want's to make an actual >>>> Webfaction install >>>> script<https://docs.webfaction.com/xmlrpc-api/tutorial.html> for >>>> nginx/uwsgi/web2py that would be awesome. It could be added to the script >>>> wiki. >>>> >>>> #!/bin/sh >>>> >>>> >>>> # TODO's: >>>> # * find free port for communication for nginx and uwsgi >>>> # * test conjob creation properly >>>> >>>> >>>> echo 'Install script for nginx (1.2.6), uwsgi (1.4.3) and web2py >>>> (latest stable)' >>>> echo 'If you wish to create cronjobs comment out the last lines of >>>> this script' >>>> >>>> >>>> # port betweet nginx and uwsgi >>>> nginx_uwsgi_port=9001 >>>> >>>> >>>> # Get web2py admin password >>>> echo "Web2py admin password:" >>>> read web2py_password >>>> >>>> >>>> # Get webfaction application name >>>> echo "Webfaction application name:" >>>> read webfaction_app_name >>>> >>>> >>>> # Get webfaction port number >>>> echo "Webfaction application port:" >>>> read webfaction_app_port >>>> >>>> >>>> # port betweet nginx and uwsgi >>>> echo "Port number for communication between nginx and uswgi (eg. >>>> 9001):" >>>> read nginx_uwsgi_port >>>> >>>> >>>> ### >>>> ### web2py >>>> ### >>>> cd ~/webapps/${webfaction_app_name} >>>> wget http://www.web2py.com/examples/static/web2py_src.zip >>>> unzip web2py_src.zip >>>> rm web2py_src.zip >>>> cd web2py >>>> python -c "from gluon.main import save_password; >>>> save_password('${web2py_password}',${webfaction_app_port})" >>>> cd .. >>>> >>>> >>>> ### >>>> ### nginx >>>> ### >>>> mkdir downs >>>> cd downs >>>> >>>> >>>> # download and install nginx in the appname directory >>>> wget http://nginx.org/download/nginx-1.2.6.tar.gz >>>> tar xvf nginx-1.2.6.tar.gz >>>> cd nginx-1.2.6 >>>> >>>> >>>> ./configure \ >>>> --prefix=/home/${USER}/webapps/${webfaction_app_name}/nginx \ >>>> >>>> --sbin-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/sbin/nginx >>>> \ >>>> >>>> --conf-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/nginx.conf >>>> \ >>>> --error-log-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/ >>>> log/error.log \ >>>> --pid-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/run/ >>>> nginx.pid \ >>>> --lock-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/lock/ >>>> nginx.lock \ >>>> --with-http_gzip_static_module \ >>>> --http-log-path=/home/${USER}/webapps/${webfaction_app_name}/nginx/ >>>> log/access.log \ >>>> --http-client-body-temp-path=/home/${USER}/webapps/${ >>>> webfaction_app_name}/nginx/tmp/client/ \ >>>> --http-proxy-temp-path=/home/${USER}/webapps/${webfaction_app_name}/ >>>> nginx/tmp/proxy/ \ >>>> --http-fastcgi-temp-path=/home/${USER}/webapps/${webfaction_app_name >>>> }/nginx/tmp/fcgi/ >>>> make && make install >>>> cd .. >>>> >>>> >>>> # configure nginx >>>> cd .. >>>> mkdir nginx/tmp >>>> mkdir nginx/tmp/client >>>> cd nginx >>>> >>>> >>>> echo " >>>> worker_processes 2; >>>> >>>> >>>> events { >>>> worker_connections 1024; >>>> } >>>> >>>> >>>> http { >>>> access_log /home/${USER}/logs/user/access_appname.log combined; >>>> error_log /home/${USER}/logs/user/error_appname.log crit; >>>> >>>> >>>> include mime.types; >>>> client_max_body_size 5m; >>>> default_type application/octet-stream; >>>> gzip_static on; >>>> gzip_vary on; >>>> sendfile on; >>>> tcp_nodelay on; >>>> >>>> >>>> server { >>>> listen ${webfaction_app_port}; >>>> location ~* /(\w+)/static/ { >>>> root >>>> /home/${USER}/webapps/${webfaction_app_name}/web2py/applications/; >>>> } >>>> location / { >>>> uwsgi_pass 127.0.0.1:${nginx_uwsgi_port}; >>>> include uwsgi_params; >>>> } >>>> } >>>> } >>>> " > nginx.conf >>>> >>>> >>>> echo "#!/bin/sh >>>> kill -s QUIT \$( cat >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/run/nginx.pid ) >>>> " > stop >>>> chmod +x stop >>>> >>>> >>>> # start nginx >>>> ./sbin/nginx -c /home/${USER}/webapps/${webfaction_app_name}/nginx/ >>>> nginx.conf >>>> cd .. >>>> >>>> >>>> ### >>>> ### uwsgi >>>> ### >>>> mkdir uwsgi >>>> cd downs >>>> >>>> >>>> # download and install uwsgi in the appname directory >>>> wget http://projects.unbit.it/downloads/uwsgi-1.4.3.tar.gz >>>> tar xvf uwsgi-1.4.3.tar.gz >>>> >>>> >>>> cd uwsgi-1.4.3 >>>> make -f Makefile >>>> cp uwsgi ../../uwsgi/ >>>> >>>> >>>> cd ../../uwsgi >>>> echo "<uwsgi> >>>> <socket>127.0.0.1:${nginx_uwsgi_port}</socket> >>>> <workers>4</workers> >>>> <no-orphans/> >>>> >>>> <pythonpath>/home/${USER}/webapps/${webfaction_app_name}/web2py</pythonpath> >>>> >>>> <pidfile>/home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.pid</pidfile> >>>> >>>> <daemonize>/home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.log</daemonize> >>>> <module>wsgihandler</module> >>>> <master/> >>>> <memory-report/> >>>> </uwsgi>" > uwsgi.xml >>>> >>>> >>>> echo "#!/bin/sh >>>> kill -s QUIT \$( cat >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.pid ) >>>> " > stop >>>> chmod +x stop >>>> >>>> >>>> # start uwsgi >>>> ./uwsgi -x /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.xml >>>> cd .. >>>> >>>> >>>> ### >>>> ### cleanup >>>> ### >>>> rm -rf downs >>>> >>>> >>>> ## >>>> ## create start/stop scripts >>>> ## >>>> echo "#!/bin/sh >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/sbin/nginx -c >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/nginx.conf >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi -x >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.xml >>>> " > start >>>> chmod +x start >>>> >>>> >>>> echo "#!/bin/sh >>>> kill -s QUIT \$( cat >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.pid ) >>>> kill -s QUIT \$( cat >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/run/nginx.pid ) >>>> " > stop >>>> chmod +x stop >>>> >>>> >>>> ### >>>> ### create cronjobs >>>> ### >>>> >>>> >>>> #nginx_cron="10,30,50 * * * * >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/sbin/nginx -c >>>> /home/${USER}/webapps/${webfaction_app_name}/nginx/nginx.conf" >>>> #(crontab -l; echo "$nginx_cron" ) | crontab - >>>> # >>>> #uwsgi_cron="10,30,50 * * * * >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi -x >>>> /home/${USER}/webapps/${webfaction_app_name}/uwsgi/uwsgi.xml" >>>> #(crontab -l; echo "$uwsgi_cron" ) | crontab - >>>> >>>> >>>> --