Admin

About Gleb

This author has not yet filled in any details.
So far Gleb has created 38 blog entries.

Why internet marketers have email deliverability problems

There is a tendency in high end marketing circles to get inspired about spending about $1000+ /month for email autoresponder services. Usual selling point of these services is higher (albeit unproved) deliverability of emails and better tracking. I personally think that “tracking” is a great marketing trick as it is relatively easy to convince any business owner that his business is not that great (or not as great as could be) because he does not have enough tracking bells and whistles.

Last week I personally been through 3 sales pitches based on this. But that’s another story.

It is a bit of a problem indeed if you have 5,000-10,000 emails list and only half of them reach destination during your next affiliate pimping campaign.

Now here’s what happening. I use gmail and getting pretty much zero spams per day. One of my lists has about 30% of email from gmail. Once in a while during the coffee break I check my spam folder.

And here’s the picture.

Besides exciting viagra, porn, casinos and replica offers – I see oh-so familiar names of internet marketers I subscribed to.

My gmail spam folder pack leaders are Mike Filsaime and second close is David Bass. Why are they in spam folder if I never reported them as spammers and even subscribed to their newsletters? (more…)

WordPress Membership Plugin – MemberWing. And it’s free!

If you want to convert your wordpress blog into membership site and shy spending hundreds of dollars upfront – keep reading! 🙂

The new free wordpress membership plugin – MemberWing allows to convert your existing blog into membership site without any changes or re-designs.

MemberWing was built with Search Engine Optimization and speed in mind.

By inserting small text marker “{+++}” inside any article (old or new) – the content of it will become “protected” and available only to registered premium members. Simply put – anything that was before the marker – is visible for everyone – so put your teasers here. Anything after the “{+++}” marker will only be visible to users who are “Gold” or “Platinum” members. This is great feature that allows search engines to index and rank free text “teasers” part of your blog/website. Other plugins and multi-hundred dollars membership software packages does not have this very useful feature. They just lock site completely leaving you on your own with zero chance for organic rankings.

Once activated, plugin created 4 separate group members – Bronze, Silver, Gold and Platinum. So you may (if wanted to) have 4 classes of contents and charge fees accordingly to access each class of contents. The way you mark contents of your articles for each group is the same simple one – via markers that separate free teasers from premium “juicy” part. {+} – Bronze members, {++} – Bronze and Silver members, {+++} – Bronze, Silver and Gold members, etc..

Membership plugin MemberWing supports latest version of self-hosted WordPress 2.6+ and works on any hosted account that allows wordpress installations.

I’ve installed it here – and protected this article 🙂

Here’s how your protected article will look like, when viewed by non-premium member:

{+++}

Yes.

Aweber vs 1ShoppingCart vs GetResponse – autoresponders comparison

I was searching for the best autoresponder to use for business and as many of us do – went to Google to search for unbiased opinions, reviews and experiences. The quest was a bit time consuming – Google still has a work to do eliminating useless spam and zero-value pages from their index. Until they do – we – the searchers has to do it ourselves. So I did it and filtered through the content of all these results to make the final choice.

My research might save you time if you’re after similar task.

I already have basic shopping cart account with 1ShoppingCart and they also offer autoresponder at extra monthly cost. Another contender is AWeber. I also found quite a few people using GetResponse. I wanted to find which one is the best and whether I might be missing other choices in this area.

Choosing the right autoresponder is VERY important as the task of moving away from it later on could mean serious loss of established business (old list members refuse to re-optin).

I decided to search for reasonably fresh pages – dated less than 1 yr old. I wanted to find decent  reviews/comparisons/articles regarding choosing the right autoresponder.

So here I just list the reasonably decent posts I found and at the end summarize my choice. (more…)

5R System: How to build your opt-in list 4 to 7 times faster

I missed this week’s call with Michel Fortin and Daniel Levis about growing your online customer and prospects lists 4 to 7 times faster. Luckily Michel Fortin (my fellow Ottawan) was kind enough to mail me MP3 recording of a call. This call was obviously pre-sale for more complete and detailed system by Daniel Levis but nevertheless it was full of actionable tips that could be utilized by any webmaster in any business immediately.
Just by reading these ideas and acting upon them could really improve the speed of any opt-in prospects gathering process quite a bit.

So here they are.

5R system by Daniel Levis – well defined workflow for improving conversion. It boils down to:

Effective Communication

which in 5R terms could be spelled as:

Right person communicating Right message to the Right audience at the Right time in the Right way

What these principles are (in different order): (more…)

Building fast SEO-optimized websites

This tutorial is the result of my quest to find the best way to build fast, CMS-based, easy to manage, SEO friendly websites that would be well capable of generating money.

(I wanted to use the word “extra” but then why “extra”? It could very well be “main” money! The act of “generating money online” I envision as an act of easily delivering useful products or services to other people with the help of a website and being compensated for your work. The less problems or tractions that are happening during this process – the better)

The following features of WEB site building tool as well as features of final website were of the most importance:

  • Ability to quickly build fully featured website. No painstaking struggles with web building software itself is acceptable.
  • Ability to easily manage website from any internet-connected computer with any browser. In other words I want CMS (Contents Management System) based solution. No “create here and then copy there” solutions are acceptable any more.
  • Ability to clone website – duplicate your success at will!
  • Web site needs to load fast – Google spider wouldn’t wait 30 seconds to read your sluggish pages and will move on.
  • SEO: Web site needs to be highly optimized for search engines and SEO-important elements and structures needs to be highly customizable.
  • Web site needs to be WEB2.0 ready. Meaning:
    • Allowing your visitors/members to contribute and share contents right on your website.
    • Having Social Media / Social Networking elements either built-in or easily added.
  • Web site needs to be perfectly suitable for online e-commerce – in other words I want to be able to build online store to sell anything.
  • Web site needs to be compatible with modern membership-based solutions (for the webmasters who wants to build membership sites)
  • Web site needs to be able to be properly indexable by spiders and able to rank high on major search engines. This of course depends on skills of webmaster, but having these skills – the solution needs to be on par.
  • Web site needs to have integrated backup facility – I had my share of defacings done by mentally challenged script kiddies and backups are a necessity of life.

(more…)

How to reboot/reset/restart iPhone or iPod touch

WordPress folks recently released free application that allow you to manage your WordPress blog directly from iPhone or iPod touch. This free neat app lets you write posts, upload photos, and edit your WordPress blog from your iPhone or iPod Touch. It supports WordPress 2.5.1 and higher as well as WordPress MU.

I downloaded it but experienced a problem where application would just close by itself right after starting up. Sincerely – it started to happen after I also downloaded a few games as well. Not sure whether different apps started to conflict with each other or iPod developed some sort of Windows-ish need-to-be-rebooted-often-to-work-properly syndrome.

So to fix it I removed a few games and performed the following “soft reboot” procedure:

Press and hold down the Sleep/Wake button and the Home button (top edge of your device) simultaneously for a few seconds. The iPhone/iPod’s display will clear. Then the Apple logo appears. In a few more seconds the whole system gets back to normal. Reboot/restart is done.

After that my new WordPress App worked properly.

How to prevent wordpress from messing up with your rich editing tags

After spending countless hours fighting with wordpress changing my tags and text formatting in it’s rich text editor I finally decided to create a tiny little cute plugin that makes wordpress to leave alone my HTML formatting, tags and line breaks.

Essentially the source code of the whole thing is this:

function myautop ($text) { return $text; }
function mytext  ($text) { return $text; }
remove_filter ('the_content', 'wpautop');
add_filter    ('the_content', 'myautop');
remove_filter ('the_content', 'wptexturize');
add_filter    ('the_content', 'mytext');

You may download actual plugin from the link below. Just unzip, copy it into ./plugins directory, activate and enjoy.

Note: to fix another big annoyance with WordPress eliminating line breaks – this is what I use to “create” line breaks that WordPress doesn’t kill. In HTML mode insert this code:

<div style="margin:2em;"><span style="display:none;">-</span></div>

Advantage of this method is that you can regulate size of your “custom line break” by changing value in “margin” CSS tag.

Bonus TIP:
Actually I just found a better way to keep linebreaks: Advanced TinyMCE plugin seems to add lot more features to TinyMCE editor as well as has an option to stop WordPress’s messing up with line breaks.

Download: WP-AllowTags
Wordpress Plugin that allows inserting tags

Perfect Setup: Ubuntu Hardy+Nginx+MySQL5+PHP5+Wordress

The Perfect Setup:

Ubuntu Server 8.04.1 LTS Hardy (supported to 2013) + EngineX (NGINX) Web Server built from sources + MySQL 5 + PHP 5.
(Or LEMP )

Tested on 256MB VPS slice at SliceHost. Should work for other hardware.

From baremetal/barebone/empty fresh install of Ubuntu Server to shiny, fast and SEO-friendly WordPress Portal propelled by WP Super Cache plugin.
All configured and powered by NGinx WEB Server.
Step by step copy/paste instructions – from "zero to hero" with everything on a single page (albeit long one) and in the right order. Just what your granma was asking for!

Every time I need to quickly utilize new product or technology it always made me wonder "why don’t someone came up with a simple step by step instructions on which buttons to press to make this thing work?". So instead of waiting for someone to do it this time I decided to make one myself.

After spending countless hours and days hunting for scripts, searching for clues, scrolling through misleading posts, extracting bits from articles, eliminating blubber and fluff, bugging busy geeky people for hints and getting all necessary pieces together in the right order I finally came up with this instructional post. It all boils down to step-by-step copy/paste instructions that should take you less than 1 hour to get from freshly installed Ubunty server to fully functioning, search engine optimized business-ready WordPress-powered website.

I tested it all on 256MB VPS image offered by SliceHost but the same instructions should work just just fine on any real hardware as well.
Most credits goes to excellent set of articles by PickedOnion at SliceHost plus to some more sources, acknowledged within this post.

This article assumes your username is ‘jsmith’ and your domain is ‘mydomain.com’.

Now it’s time to get our hands dirty!

Secure and tidy-up your fresh Ubuntu Server installation

  • Login as root.
  • Change root password:

    passwd
  • Add new username – yourself:
    adduser jsmith
    visudo
  • Append this line to end of file (to navigate within ‘vi’ editor to create next line – use these: L, $, a, <ENTER>):
    jsmith ALL=(ALL) ALL
    To save and exit do: <ESC>, :wq, <ENTER>

  • SSH configuration:
    nano /etc/ssh/sshd_config – Find
    Port 22 – and change number to something different (12345) to make hacking more difficult.
    – Set these to:
    PermitRootLogin no
    X11Forwarding no
    UsePAM no
    – Append these lines to the very end:

    UseDNS no

    AllowUsers jsmith

  • Secure slice with iptables

    iptables-save > /etc/iptables.up.rules
    nano /etc/iptables.test.rules
  • 1. Copy contents of this file -> and paste it into ‘iptables.test.rules’.
    2. Change port number to your port number on this line:

    -A INPUT -p tcp -m state –state NEW –dport 30000 -j ACCEPT

    3. Save and exit (Ctrl+O, Ctrl+X).

  • Apply new iptables rules:

    iptables-restore < /etc/iptables.test.rules
  • Save iptables rules permanently:

    iptables-save > /etc/iptables.up.rules
  • Make sure iptables rules will apply when server is rebooted as well:
    nano /etc/network/interfaces
  • Add new line after these 2:

    auto lo
    iface lo inet loopback
    pre-up iptables-restore < /etc/iptables.up.rules
    Save and exit.
  • Reload SSH to use new ports and configurations:

    /etc/init.d/ssh reload
  • Keep ‘root’ session running and open second session.
    SSH login to your slice to new port, with your new username and password:

    – Linux: ssh -p 12345 jsmith@123.45.6.78 – Windows: putty jsmith@123.45.6.78 12345
  • If you logged on successfully via your new username: ‘jsmith’ – you may close ‘root’ session now.
    If not – you still have ‘root’ session opened to fix problems. In the worst case – you can use web based console shell login from your manage.slicehost.com dashboard to fix issues.
    sudo aptitude -y install screen
  • Enter screen:
    screen Screen is the great little utility that allows your terminal session activity to keep running (say lengthy builds) even if you were cut off or disconnected. You may reenter your abandoned screen session at a later time to check progress and continue working.
    – Usage notes:

    new screen session: screen

    attach to existing screen session: screen -r
    list all existing screen sessions: screen -list (output: 12045.pts-0.MENSK (Detached), etc…)

    attach to existing screen session by number: screen -r 12045

    detach from screen session and back to main terminal: Ctrl+A, D
    – to rename screen session from inside of it: Ctrl+A, Shift+A – and enter it’s name.

    – to kill current screen session: exit or Ctrl+A

    – to kill all screen sessions: Ctrl+A,

  • Edit .bashrc file to make terminal window a bit more helpful:

    nano ~/.bashrc
  • Append these lines to the end of it:

    export PS1=”
    [e[32;1m]u[e[0m][e[32m]@h[e[36m]w [e[33m]$ [e[0m]”
    alias ll=”ls -la”
    alias a2r=”sudo /etc/init.d/apache2 stop && sleep 2 && sudo /etc/init.d/apache2 start”
    alias n2r="sudo /etc/init.d/nginx stop && sleep 2 && sudo /etc/init.d/nginx start"
    alias ver=”cat /etc/lsb-release”
    Save and exit.

  • Reload .bashrc to make changes active:

    source ~/.bashrc
  • Update sources: sudo aptitude update
  • Set system locale:

    sudo locale-gen en_US.UTF-8
    sudo /usr/sbin/update-locale LANG=en_US.UTF-8
  • Upgrade system now:
    sudo aptitude -y safe-upgrade
    sudo aptitude -y full-upgrade

Install PHP 5, Build Essentials and related libraries

  • Install Build essentials:
    sudo aptitude -y install build-essential
  • Install PHP with php client and without apache (one long line):
    sudo aptitude -y install 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
  • Fix issues with imagick:
    sudo aptitude -y install make php-pear
    sudo pecl install imagick

    (Just press <ENTER> at prompt)

  • Adjust php.ini:
    sudo nano /etc/php5/cgi/php.ini Adjust memory limit to accomodate WordPress requirements:
    Find line:

    memory_limit = 16M and change it to: memory_limit = 48M

    Append to the end of this file this line:
    extension=imagick.so

  • Install MySQL server, secure it and create database for wordpress (or other dynamic web app you will be using)
    sudo aptitude -y install mysql-server mysql-client libmysqlclient15-devSecure MySQL server:
    mysql_secure_installation
  • Install subversion (best to install and upgrade wordpress is via subversion):
    sudo aptitude -y install subversion

Install Postfix to prepare e-mail capabilities for your web application

  • First – login into slicemanager at manage.slicehost.com, click "DNS" tab and "Reverse DNS".
    Replace record with: mail.mydomain.com.
  • sudo nano /etc/hostname Replace slicename with mail.mydomain.com
  • sudo nano /etc/hosts
    Replace 127.0.0.1 slicename with 127.0.0.1 mail.mydomain.com
  • Reboot slice:
    sudo reboot
  • When rebooted – check slice hostname (it must be mail.mydomain.com):
    hostname -f
  • Install dns utils and check RDNS (by using your slice’s IP address)
    sudo aptitude -y install dnsutils
  • Check if RDNS propagated already:
    dig -x 123.45.6.78
    If "ANSWER SECTION" still shows old name (or anytihng other than mail.mydomain.com) – you’ll have to wait until propagation will finish before proceeding.
  • sudo aptitude -y install postfix telnet mailx
    Select "Internet Site", and then for "System mail name:" -> "mail.mydomain.com".
  • Redirect all email destined to ‘root’ toward ‘jsmith’:
    sudo nano /etc/aliasesAppend this line to the end of file:
    root: jsmith
  • Refresh aliases database now:
    sudo newaliases
  • Edit main.cf file:
    sudo nano /etc/postfix/main.cf
    – Replace: myorigin = /etc/mailname
    – with this: myorigin = $mydomain

    – Replace this: mydestination = mail.mydomain.com, localhost.mydomain.com, , localhost
    – with this: mydestination = $mydomain, localhost.$mydomain, localhost

    – Replace this: mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    – with this: mynetworks = 127.0.0.0/8

  • Restart postfix to make changes take effect: sudo /etc/init.d/postfix restart
  • Test email sending capabilities. Run little php console prog to do it. Check if you receive email message.
    php -a
    mail (‘your@email.com’, "Hello from slice!", "My email setup works!");
    exit ();
  • Follow this article if you want to setup postfix to receive emails as well (opening port 25 in firewall and configuring stuff):
    But what we’ve done already is enough to have hosted portal with full outgoing email capabilities.

Install and configure NGINX

  • Install NGINX. Dependencies first. Check sysoev.ru website first for newer versions though.
    sudo aptitude -y install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev
    mkdir ~/sources
    cd ~/sources/
    wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz
    tar -zxvf nginx-0.6.32.tar.gz
    cd nginx-0.6.32
    ./configure –sbin-path=/usr/local/sbin –with-http_ssl_module
    make
    sudo make install
  • Start Nginx:
    sudo /usr/local/sbin/nginx
  • Navigate to your slice’s IP address to test that it works: http://123.45.6.78
  • Stop Nginx:
    sudo kill `cat /usr/local/nginx/logs/nginx.pid`
  • Create NGINX init script
    sudo nano /etc/init.d/nginx Copy/paste this text into it:

    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          nginx
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts the nginx web server
    # Description:       starts nginx using start-stop-daemon
    ### END INIT INFO
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    
    
    
    
    DAEMON=/usr/local/sbin/nginx
    NAME=nginx
    DESC=nginx
    
    test -x $DAEMON || exit 0
    
    # Include nginx defaults if available
    if [ -f /etc/default/nginx ] ; then
            . /etc/default/nginx
    fi
    
    set -e
    
    case "$1" in
      start)
            echo -n "Starting $DESC: "
            start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid 
                    --exec $DAEMON -- $DAEMON_OPTS
            echo "$NAME."
            ;;
      stop)
            echo -n "Stopping $DESC: "
            start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid 
                    --exec $DAEMON
            echo "$NAME."
            ;;
    
      restart|force-reload)
            echo -n "Restarting $DESC: "
            start-stop-daemon --stop --quiet --pidfile 
                    /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
            sleep 1
            start-stop-daemon --start --quiet --pidfile 
                    /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
            echo "$NAME."
            ;;
      reload)
          echo -n "Reloading $DESC configuration: "
          start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid 
              --exec $DAEMON
          echo "$NAME."
          ;;
      *)
            N=/etc/init.d/$NAME
            echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
            exit 1
            ;;
    esac
    
    exit 0
    
  • Set it executable:
    sudo chmod +x /etc/init.d/nginx
  • Add it to the default run levels:
    sudo /usr/sbin/update-rc.d -f nginx defaults
  • Create folder layout:
    sudo mkdir /usr/local/nginx/sites-available

    sudo mkdir /usr/local/nginx/sites-enabled
  • Adjust main NGINX configuration file to look in sites-enabled folder for vhosts: sudo nano /usr/local/nginx/conf/nginx.conf Delete all contents of this file and replace it with this:

    user www-data www-data;
    worker_processes  4;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     off;
        keepalive_timeout  5;
    
        gzip  on;
        gzip_comp_level 2;
        gzip_proxied any;
        gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml
        application/xml+rss text/javascript;
    
        include /usr/local/nginx/sites-enabled/*;
    }
        

  • Create default vhost in ‘sites-available’ folder:
    sudo nano /usr/local/nginx/sites-available/defaultCopy/paste this text into it:

    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
    
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    
    }
    
  • Enable vhost by creating symlink:
    sudo ln -s /usr/local/nginx/sites-available/mydomain.com /usr/local/nginx/sites-enabled/mydomain.com
  • Start NGINX:
    sudo /etc/init.d/nginx start Make sure that navigating to slice IP will show "Welcome to nginx!" default page.

  • Create layouts for domains to be served.
    sudo mkdir /home/public_html
    sudo mkdir -p /home/public_html/mydomain.com/{public,private,log,backup}
  • Setup users and groups to manage portal:
    sudo -i
    addgroup webmasters
    usermod -G webmasters jsmith
    OPTIONAL: Do it for every user who will be allowed to manage files for the portal:
    usermod -G webmasters user_2
    usermod -G webmasters user_3
    Change ownership of main web files directory:
    chown -R jsmith.webmasters /home/public_html
    chmod -R g+w /home/public_html
    Set group id to ‘webmasters’ for all newly created files and dirs.
    find /home/public_html -type d -exec chmod g+s {} ;
    exit
  • Create initial index.html file for the domain:
    sudo nano /home/public_html/mydomain.com/public/index.phpPaste this into the file:

    <?php echo phpinfo(); ?>        

    First – create supporting wordpress-specific configuration files. ‘wordpress_params.regular’ – is basic wordpress config file that allows support for nice permalinks.
    sudo nano /usr/local/nginx/conf/wordpress_params.regular…And paste into it the following contents:

      # WordPress pretty URLs: (as per dominiek.com)
      if (-f $request_filename) {
      break;
      }
      if (-d $request_filename) {
      break;
      }
      rewrite ^(.+)$ /index.php?q=$1 last;
    
    
      # Enable nice permalinks for WordPress: (as per Yawn.it)
      error_page  404  = //index.php?q=$uri;
    
    

    Save and exit.
    Next – create second version of NGinx-specific WordPress config file that allows support for nice permalinks + WP Super Cache plugin. WP Super Caching gives you extra horse power and juice to handle intense traffic and getting your portal seriously ready to be DIGG-ed.
    sudo nano /usr/local/nginx/conf/wordpress_params.super_cache…And paste into it the following contents (Credits: Matt Stevens):

    # if the requested file exists, return it immediately
    if (-f $request_filename) {
    break;
    }
    
    set $supercache_file '';
    set $supercache_uri $request_uri;
    
    if ($request_method = POST) {
    set $supercache_uri '';
    }
    
    # Using pretty permalinks, so bypass the cache for any query string
    if ($query_string) {
    set $supercache_uri '';
    }
    
    if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
    set $supercache_uri '';
    }
    
    # if we haven't bypassed the cache, specify our supercache file
    if ($supercache_uri ~ ^(.+)$) {
    set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
    }
    
    # only rewrite to the supercache file if it actually exists
    if (-f $document_root$supercache_file) {
    rewrite ^(.*)$ $supercache_file break;
    }
    
    # all other requests go to WordPress
    if (!-e $request_filename) {
    rewrite . /index.php last;
    }
    
    

    Create vhost for domain mydomain.com:
    sudo nano /usr/local/nginx/sites-available/mydomain.com…And paste into it the following contents:

    server {
    
                listen   80;
                server_name  mydomain.com;
                rewrite ^/(.*) http://www.mydomain.com/$1 permanent;
    
               }
    
    
    server {
    
                listen   80;
                server_name www.mydomain.com;
    
                access_log /home/public_html/mydomain.com/log/access.log;
                error_log /home/public_html/mydomain.com/log/error.log;
    
                location / {
    
                            root   /home/public_html/mydomain.com/public/;
                            index  index.php index.html;
    
                            # Basic version of WordPress parameters, supporting nice permalinks.
                            # include /usr/local/nginx/conf/wordpress_params.regular;
                            # Advanced version of WordPress parameters supporting nice permalinks and WP Super Cache plugin
                            include /usr/local/nginx/conf/wordpress_params.super_cache;
                            }
    
                # 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;
                include /usr/local/nginx/conf/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /home/public_html/mydomain.com/public/$fastcgi_script_name;
                }
          }
       
      

    Above will append ‘www’ to all non-www requests – all requests for http://mydomain.com/dir/page will be redirected to -> http://www.mydomain.com/dir/page.
    As you can also see above we enabled ‘wordpress_params.super_cache’ settings. If for some reason you’ll have problems – you may comment ‘ ….wordpress_params.super_cache’ line out, disable wordpress WP Super Cache plugin via WordPress admin panel and uncomment ‘…wordpress_params.regular’ settings (+restart Nginx). From my own test – they both works with or without WP Super Cache enabled and I’d definitely prefer WP Super Cache to be up and running.

  • Enable site:
    sudo ln -s /usr/local/nginx/sites-available/mydomain.com /usr/local/nginx/sites-enabled/mydomain.com
  • Making NGinx to serve PHP and make it all start automatically after system restart (Credits):
    sudo aptitude -y install libfcgi0
    cd /etc/default/
    sudo wget -O php-fastcgi https://www.mensk.com/uploads/php-fastcgi.txt
    cd /etc/init.d/
    sudo wget -O php-fastcgi https://www.mensk.com/uploads/php-fastcgi.rc.txt
    sudo chmod +x php-fastcgi
    sudo /usr/sbin/update-rc.d -f php-fastcgi defaults
    sudo /etc/init.d/php-fastcgi start
    Restart NGINX:
    n2r (or sudo /etc/init.d/nginx stop, sudo /etc/init.d/nginx start)

  • Navigate to your website: http://mydomain.com you should be redirected to http://www.mydomain.com and then see phpinfo() screen…
  • Reboot your slice and make sure that after restart everything still works (NGINX & Co restarts properly)

    sudo reboot

Install and configure WordPress + configure WP Super Cache WordPress plugin to work with NGINX

  • Install WordPress. Login to mysql console as mysql’s root user:
    mysql -u root -p
  • Issue this command to create new username for WordPress database (replace username, password and database name with your values):
    mysql> grant all privileges on *.* to wp_user@localhost identified by "wp_pa55w0rd";
    mysql> create database wp_dbase;
    mysql> quit
  • Get WordPress files directly from SVN repository. See this great article about using subversion to install and update WordPress.
    cd /home/public_html/mydomain.com/public
    sudo rm index.php
    svn co http://svn.automattic.com/wordpress/tags/2.6 .
    mv wp-config-sample.php wp-config.php
    sudo nano wp-config.php
    Set database name, DB user name and password, Change DB prefix to something different (good security measure), save and exit.

  • Adjust permissions:
    sudo chmod -R 777 /home/public_html/mydomain.com/public/wp-content
    sudo chmod 666 /home/public_html/mydomain.com/public/wp-config.php
  • Access your site: http://www.mydomain.com/
    – Enter blog name, remember the password that wordpress gave you.
    – Login as admin/password
    – Click Users tab at upper right in admin panel
    – Click on ‘admin’ user
    – Change password to something secure and you’d remember.
    – Logoff, Logon again with your new password.
    – Goto Settings->Permalinks
    – Set (x) "Custom Structure" -> /%category%/%postname%/, [Save Changes], ignore WordPress warning: "You should update your .htaccess now." – it cannot find .htaccess – we are not running apache.
    – Access your blog’s "About" page – and voila – it should work just fine as this: http://www.mydomain.com/about/ (instead of default ugly: http://www.mydomain.com/?p=123)
  • Download and unzip WP Super Cache plugin into ‘/home/public_html/mydomain.com/public/wp-content/plugins‘ directory. Activate it via Admin panel.
    For FTP-ing purposes I use FileZilla configured to use SFTP. (I don’t elaborate on specifics of installing and activating WordPress plugins in this document).
    – Goto Plugins, activate "WP Super Cache".
    – Goto Settings->WP Super Cache and set (x) WP Super Cache Status to "ON". [Update Status].
    You’ll see bunch of warnings on this page regarding "mod rewrite" rules and ".htaccess" file. Just ignore these – we are not using Apache so WP Super Cache cannot find apache specific places to write settings. We did it for WP Super Cache already inside of ‘wordpress_params.super_cache’ – which contains "translation" of caching rules from Apache to Nginx.
    Your WP Super Cache-ed blog should be up and running now at fullest speed.
  • Make ‘wp-content’ directory a bit more secure: sudo chmod -R 755 /home/public_html/mydomain.com/public/wp-content – Goto Manage->Categories. Create few categories with subcategories.
    – Goto Write->Post – create few posts and assign them to subcategory, publish, save.
    – Access your posts – and see that they all have nice SEO-friendly URLs, thanks to custom wordpress-specific setups we included in our ‘/usr/local/nginx/sites-available/mydomain.com‘ file.
    – This also works just fine with John Godley’s excellent redirection plugin that supports flexible custom redirects with regular expressions.
  • Customize your theme and go wild!

Done!

Ottawa Sales Leadership Initiative – the missing link?

I was interviewed recently for Ottawa Business Journal regarding newly formed local organization named Sales Leadership Initiative. The concept behind it is that Ottawa’s local Technology and R&D talent is lacking selling skills and expertise – and that’s what SLE will be attempting to fix. I do agree with that. “I have great idea -  let’s do it” syndrome was responsible for as many startups as many failures and tons of cash burned to ashes in relatively short periods of time. We all need extra sales and marketing education. How to find potential customer, how to approach potential customer, how to educate customer, how to establish lasting mutually beneficial relationships – those are the skills that greatly help to converts idea, product, service and technology to cash.
So I hope to see great sales, marketing and educational events, speakers and materials to be available to local tech companies soon.

The Missing Link?

Although there is one thing that I didn’t find anywhere on SLE website (at least at the time of writing this post) – anything about educating local techies on specifics of Internet Marketing.

I currently working for

[Epiphan Systems->http://www.epiphan.com/] – company that markets their niche hardware products almost exclusively through the internet channels. We sell products to 70 countries all over the world. Only about half of our sales are from North America – so this made us somewhat resilient to US economic downturns and rollercoaster credit crunch rides. Without internet – we as technology company would have really hard time to do business and survive, even if we’d have the best local sales team at hands. Only about 1% of our sales coming from Ottawa and only 5% from Canada.

So, how about educating local technology companies on how to wisely use internet to propell their business and sales?{+++}

I’d love to see more Internet Marketing and Sales education available to local technology companies. This would make them stronger and make our local economy stronger.

Gleb Esman

How to get precise search volume for any keyword or phrase

Imagine knowing exact number of searches for your targeted keyword phrase (or it’s synonyms). This information would let you know instantly whether it’s worthwhile to target certain niche or pass it on for better ones. While it used to be closely guarded data behind Google’s corporate data centers – it is available now on first come – first serve basis.

Google just decided to offer more information about keywords and keyphrases search volume. In fact almost precise numbers as well as average monthly search volume numbers. Any paid subscibers to wordtracker around? Sorry guys, we just got an access to precise numbers from the king of kings. No more questionable guesswork at a premium fee is needed.

Here is goes:

  1. Go ahead to Google Keyword Tool
  2. Click on: How would you like to generate keyword ideas?
  3. Select “Descriptive words or phrases”
  4. In the field: “Enter one keyword or phrase per line:” enter your favorite keyphrase
  5. Press button “Get keyword ideas”. Wait a few seconds…

Together with suggested keywords and all of it’s possible variations – Google will return “Approximate Search Volume” numbers together with “Approx Average Search Volume” numbers for the current month.

Handy indeed.

Enjoy!

Gleb Esman

Go to Top