Dear all,
I would like to share some experiences in building a website – it might be helpful for someone who wants to build their own websites.
1. Decide what kind of website you want to build. E.g., I would like to build rfmri.org to be a supporting network for R-fMRI studies. In this website, I would like to reform the centralized discussion to distributed discussion -- R-fMRI researchers can communicate with each other directly. Through the network, we can share our ideas, comments, resources, tools, experiences, data. Also, the current peer-reviewed system is kind of slow, I would like push some changes to peer-viewed system, thus we can exchange our opinions more directly, conveniently and efficiently.
2. Buy web space and domain name(s). I bought the ipage essential plan: $1/month, unlimited Disk space, bandwidth and email addresses, free domain registration. Their price may go a little higher now: $1.89/month. (Interested in? Please do not forget to click this link before registering ipage’s service; you can help me to reduce my cost. orz, :) )
Note: I decided I will not have only one server, but have development, staging, live servers to ensure the stability. Thus I used the essential plan for development and staging servers, and will push the living server to their vps plan to facilitate the possibly high load and traffic in the future.
3. Build Development site
3.1. Install Content management system (CMS). Drupal (drupal.org) is installed according to instructions from https://drupal.org/documentation/install.
All runs smoothly for me but one problem: register_globals is 1. Lots of suggestions come from google. I think this one is the best: edit modules/system/system.install $requirements['php_register_globals']['severity'] = REQUIREMENT_WARNING; (from ERROR to WARNING).
3.2. Install modules. Here is a list of modules I installed:
entity seo_checklist
WYSIWYG-CKFinder ga_tokenizer site_verify
admin_menu google_analytics smtp
adsense htmlmail token
backup_migrate libraries views
checklistapi mailsystem views_bulk_operations
contact_google_analytics metatag wysiwyg
context notify xmlsitemap
context_keywords pathauto
ctools search404
3.3. Configure the theme. The Bartik theme looks pretty beautiful, but can not display dropdown menu. I tried a lot of solutions, some solutions even crashed the website. Finally, I figured out this solution is the best: Bartik plus: https://drupal.org/sandbox/jjw/1281040.
3.4. Configure forums and menus.
Beyond the main menu, I created a login/log out/register menu. Since this menu has items of login/logout, drupal will automatically to display which one based on the login status of the user.
3.5. Make the webpage looks beautiful by re-ordering the blocks. E.g., the “search” and “login/logout menu” are put in “header” section.
3.6. E-mail list. I did construct a mailman list server, but considering the burden of a list server, I decide to use google email list at the first stage. Use the admin email (rfmriorg#gmail.com) to create a google group and then setup a user account with the group email, -- this is the only user who subscribes notifications. As the website will send updating email to the group in the name of rfmriorg#gmail.com, the google group will accept this email and forward to all the group members. This strategy is used to reduce the server burden.
3.7. Write a sample post for each forum.
3.8. Email R-fMRI software developers if they would like their tools to be listed, and if they are interested in building a subforum to support their tools (in stepwise).
3.9. Email R-fMRI researchers if they would like to contribute as consulting nodes (in stepwise).
4. Maintain the website with live, staging and development servers.
4.1. Push the website from development server to staging and live server.
This procedure is similar to backup the live server to staging server, I will give the details in the next section.
4.2. Backup the website from live server to staging server.
4.2.1. Regular backup (with small changes): use Backup and Migrate module, but need to manually backup sites/default/files/images.
4.2.2. Structure-level backup (with big changes):
4.2.2.1. Delete the database (db) and files on the staging server.
4.2.2.2. Copy the db and files from live server to staging server.
4.2.2.3. Modify setting.php to link to the db at staging server.
4.2.3. Turn on maintenance mode.
4.2.4. Change Google email list address, to prevent send out emails out while developing.
4.2.5. The content of the live server will be backed up to the staging server weekly.
4.3. Develop the website at development server.
4.3.1. Using structure-level backup (4.2) to copy the live website to development server.
4.3.2. Develop anything you want.
4.3.3. Once satisfied the development, first apply to the staging server.
4.3.4. If everything is fine, then turn the live website down to maintenance mode, and apply the changes.
4.4. Live, staging, development websites: staging website always has the same structure as the live website, and synchronize the content weekly. As the staging website is on an independent server, once severe problems happened to the live server, the domain rfmri.org will be redirected to this staging server (hope this will never happen). All new things should be tried on the development website, on which doesn’t matter if it crashed or not.
5. Google AdSense was added to reduce the cost. The small ad is just put on the bottom of the page. Of note: Google AdSense is sometimes smart, you can scroll down and see if there is anything interested you. If there is anything you are interested in, you may reduce our cost. orz, :)
Many thanks to Mr. Xiaowei Song, the website administrator of restfmri.net, from whom I learned a lot of website skills.
Finally, I would like to thank my wife (Kate) and my son (Justin) for their support! Without their support, nothing can happen!
P.S., once again, if you are interested in ipage web hosting service (essential plan: $1.89/month), please do not forget to click this link before registering ipage’s service; you can help us to reduce our cost. orz, :)
Best,
Chao-Gan
--