Recently I migrated a Prestashop website to AWS/EC2 and the process is quite smooth. Here’s how to do it.
1. Get your Website data: including Prestashop website files and a latest database dump. Remove all the files except index.php in /cache/smarty/compile and /cache/smarty/cache. (See here.)
2. Launch your EC2 instance. But before doing that, check first if a pre-configured or managed Prestashop is available in your preferred region (more info here). If not, choose the appropriate instance type and get it running. In my case I chose Ubuntu Linux.
3. Install the AMP (Apache, MySQL and PHP). On Ubuntu you can simply do it with a few simple commands:
sudo apt-get update sudo apt-get upgrade sudo tasksel install lamp-server sudo apt-get install phpmyadmin
Make sure that you remember your password for MySQL root user and phpmyadmin user.
4. Copy your database dump and website files to your EC2 instance using scp, for instance:
scp -i you-key.pem files.tar.gz ubuntu@your-ec2-instance.compute.amazonaws.com
5. Create a MySQL user for Prestashop, you don’t want to use the root user for this purpose. You can do this using phpmyadmin or a command line. Also, create a database for Prestashop and grant the user you’ve created just now all privileges on this database.
6. Import your database from the dump:
mysql -u root -p ps < db_dump.sql
7. Extract your website files on your EC2 instance. In my case, inside /var/www/html/. If there is an index.html file inside this directory, remove it first. Make sure you set the correct user and group to all the website files:
sudo chown -R www-data:www-data * sudo chmod -R 755 *
Note that if don’t set the correct permissions, you may get complaints from Apache, like the following:
PHP Fatal error: Uncaught exception ‘SmartyException’ with message ‘unable to write file /var/www/html/cache/smarty/compile/46/d9/69/wrt54ecd6c1856a72.61943173’ in /var/www/html/tools/smarty/sysplugins/smarty_internal_write_file.php:44
Stack trace:
#0 /var/www/html/tools/smarty/sysplugins/smarty_internal_template.php(201): Smarty_Internal_Write_File::writeFile(‘/var/www/html/c…’, ‘<?php /* Smarty…’, Object(Smarty))
#1 /var/www/html/tools/smarty/sysplugins/smarty_internal_templatebase.php(155): Smarty_Internal_Template->compileTemplateSource()
#2 /var/www/html/classes/controller/AdminController.php(1936): Smarty_Internal_TemplateBase->fetch(‘controllers/mod…’)
#3 /var/www/html/classes/controller/AdminController.php(2337): AdminControllerCore->initModal()
#4 /var/www/html/classes/controller/Controller.php(163): AdminControllerCore->init()
#5 /var/www/html/classes/Dispatcher.php(373): ControllerCore->run()
#6 /var/www/html/admin123/index.php(54): DispatcherCore->dispatch()
#7 {main}\n thrown in /var/www/html/tools/smarty/sysplugins/smarty_internal_write_file.php on line 44
8. Enable mcrypt for PHP:
sudo updatedb locate mcrypt.ini > /etc/php5/mods-available/mcrypt.ini locate mcrypt.so > /usr/lib/libmcrypt.so.4 > /usr/lib/libmcrypt.so.4.4.8 > /usr/lib/php5/20121212/mcrypt.so sudo vi /etc/php5/mods-available/mcrypt.ini sudo php5enmod mcrypt ls -al /etc/php5/cli/conf.d/20-mcrypt.ini > lrwxrwxrwx 1 root root 31 Feb 24 19:32 /etc/php5/cli/conf.d/20-mcrypt.ini -> ../../mods-available/mcrypt.ini ls -al /etc/php5/apache2/conf.d/20-mcrypt.ini > lrwxrwxrwx 1 root root 31 Feb 24 19:32 /etc/php5/apache2/conf.d/20-mcrypt.ini -> ../../mods-available/mcrypt.ini service apache2 restart
9. Update your Prestashop settings in the config/settings.inc.php file. Set the correct database information.
10. Enable mod_rewrite:
sudo a2enmod rewrite sudo service apache2 restart
Also, make sure to add something like the following in your apache site configuration file:
<Directory /> Options FollowSymLinks AllowOverride all </Directory> <Directory /var/www/html/> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory>
And then remember to restart your apache server.
11. Install sendmail:
sudo apt-get install sendmail
12. Go to your Prestashop back office and reconfigure your domain. Go to Preferences -> SEO & URLs and scroll down to Set shop URL section.
Now everything should be OK, your new Prestashop website is available on your new domain!
If you have any issues, just drop a line here or email me.
4 Comments