PrestaShop 是一个开源,免费,可扩展的网上购物系统, 基于 PHP 和 MySQL 以及 Smarty 引擎编程,模块化设计,可以使用插件和主题进行扩展,能轻易实现多种语言,多种货币浏览交易,支持Paypal等几乎所有的支付手段,是外贸网站建站的佳选。
Prestashop是目前为止,操作最简单,最人性化,用户体验最佳的电子商务解决方案之一。
本教程讲一步一步教你如何在Debian10上搭建PrestaShop电商系统。
前提条件
1、一台安装了Debian10系统的VPS服务器。
2、登录用的root账号。
配置SSH登录
首先,我们使用root账号登录系统,创建应用账号以及配置SSH登录。
ssh root@your_server_ip
更新系统软件:
apt update -y && apt upgrade -y
新建一个linux265账号供后续使用:
adduser linux265
usermod -a -G sudo linux265
修改SSH配置,为加固安全调整其默认的22端口号。
nano /etc/ssh/sshd_config
在sush_config文件中,找到以下选项并修改为如下内容,其中的端口号你可以根据自己需要设置:
Port 22100
Protocol 2
PermitRootLogin no
在文件最后增加如下内容:
UseDNS no
AllowUsers linux265
保存sush_config文件,并通过如下命令重启ssh服务,使其配置生效。
systemctl restart ssh.service
此时,可以按CTRL+D退出当前终端登录,使用新创建的账号ssh登录到服务器。
ssh -p 22100 linux265@ip_address
安装PHP及相关PHP模块
通过下面一条命令安装PHP环境以及相关PHP模块:
sudo apt install php-fpm php-common php-mysql php-gmp php-curl php-intl php-mbstring php-xmlrpc php-gd php-bcmath php-imap php-xml php-cli php-zip unzip wget git curl -y
安装完成后,打开/etc/php/7.3/fpm/php.ini
文件进行编辑,找到如下内容选项,调整文件上传等相关参数值如下:
file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
保存文件,通过以下命令重启PHP-FPM服务:
sudo systemctl restart php7.3-fpm.service
安装配置Nginx
nginx的安装也非常简单,只需要简单的一条命令即可。
sudo apt install nginx
安装完成后,配置PrestaShop需要的站点服务。此时在目录/etc/nginx/sites-available/
创建myshop.com
配置文件:
sudo nano /etc/nginx/sites-available/myshop.com
在文件中添加如下内容:
server {
# Ipv4
listen 80;
# IPv6
listen [::]:80;
# SSL Ipv4 & v6
# listen 443 ssl;
# listen [::]:443 ssl;
# ssl_session_timeout 24h;
# ssl_session_cache shared:SSL:10m;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:AES128-SHA:!ADH:!AECDH:!MD5;
# ssl_prefer_server_ciphers on;
# Do not forget to create this file before with OpenSSL : "openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048"
# ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Your domain names here
server_name myshop.com www.myshop.com;
#Your website root location
root /var/www/myshop/;
index index.php;
#Log
access_log /var/log/nginx/myshop_access.log;
error_log /var/log/nginx/myshop_error.log;
# Your admin folder
set $admin_dir /admin730nzdtkb;
# Gzip Settings, convert all types.
gzip on;
gzip_vary on;
gzip_proxied any;
# Can be enhance to 5, but it can slow you server
# gzip_comp_level 5;
# gzip_min_length 256;
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
# Supposed to be the case but we never know
# text/html;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
# Symfony controllers
location ~ /(international|_profiler|module|product|feature|attribute|supplier|combination|specific-price|configure)/(.*)$ {
try_files $uri $uri/ /index.php?q=$uri&$args $admin_dir/index.php$is_args$args;
}
# Redirect needed to "hide" index.php
location / {
# try_files $uri $uri/ /index.php$uri&$args;
# Old image system ?
rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
try_files $uri $uri/ /index.php?$args;
}
error_page 404 /index.php?controller=404;
# Static assets delivery optimisations
add_header Strict-Transport-Security max-age=31536000;
# Cloudflare / Max CDN fix
location ~* \.(eot|otf|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin *;
}
location ~* \.(css|js|docx|zip|pptx|swf|txt|jpg|jpeg|png|gif|swf|webp|flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav|mp4|m4v|ogg|webm|aac)$ {
expires max;
log_not_found off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# Deny access to .htaccess .DS_Store .htpasswd etc
location ~ /\. {
deny all;
}
# PHP 7 FPM part
location ~ [^/]\.php(/|$) {
fastcgi_index index.php;
# Switch if needed
include /etc/nginx/fastcgi_params;
# include fcgi.conf;
# Do not forget to update this part if needed
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn on;
fastcgi_read_timeout 30s;
fastcgi_send_timeout 30s;
# In case of long loading or 502 / 504 errors
# fastcgi_buffer_size 256k;
# fastcgi_buffers 256 16k;
# fastcgi_busy_buffers_size 256k;
client_max_body_size 10M;
# Temp file tweak
fastcgi_max_temp_file_size 0;
fastcgi_temp_file_write_size 256k;
}
# Allow access to robots.txt but disable logging every access
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Prevent injection of php files in directories a user can upload stuff
location /upload {
location ~ \.php$ { deny all; }
}
location /img {
location ~ \.php$ { deny all;}
}
# Ban access to source code directories
location ~ ^/(app|bin|cache|classes|config|controllers|docs|localization|override|src|tests|tools|translations|travis-scripts|vendor)/ {
deny all;
}
# Banned file types
location ~ \.(htaccess|yml|log|twig|sass|git|tpl)$ {
deny all;
}
}
注意:配置文件中的域名根据自己实际情况填写,这里只是使用了myshop.com进行举例。证书则需要自己购买或者申请免费的 Let's Encrypt 证书。关于Let's Encrypt 证书,可以参考「如何在 Debian 10 上安装 Nginx 并使用 Let's Encrypt实现https加密」教程。
当然你也可以执行如下命令来使用Let's Encrypt 证书:
sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface -y
sudo apt install python3-certbot-nginx
sudo certbot --nginx -d myshop.com -d www.myshop.com
如果要从新获得证书可以还行如下命令,你也可以将其设置为crontab job定期执行获取更新证书:
sudo certbot renew --dry-run
保存myshop.com
配置文件,并创建如下软链接。
sudo ln -s /etc/nginx/sites-available/myshop.com /etc/nginx/sites-enabled/
以上操作完成后,使用如下命令验证配置文件的正确性以及重启nginx以及PHP-FPM服务。
sudo nginx -t //验证配置文件的正确性
sudo systemctl restart nginx.service
sudo systemctl restart php7.3-fpm.service
安装数据库
在Debian10上,mariadb已经取代MySQL成为默认的数据库,我们通过以下命令进行安装:
sudo apt install mariadb-server mariadb-client
安装完成后,执行如下命令,加固数据库安全并重置数据库root账号密码:
sudo mysql_secure_installation
命令执行后,终端会有交互提示,所有的默认输入"y"回车即可。
之后,通过以下命令登录数据库:
mysql -u root -p
登录成功后,之后输入以下命令创建数据库以及数据库账号:
CREATE DATABASE dbprestashop DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL ON dbprestashop.* TO 'prestashopuser'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
EXIT;
下载并安装PrestaShop
通过wget命令下载安装PrestaShop,如果想了解wget命令的使用,可以参考
cd /tmp && wget https://download.prestashop.com/download/releases/prestashop_1.7.6.5.zip
下载完成后,通过unzip命令解压,将解压的程序拷贝到/var/www/
目录中,并修改相应的权限,如下命令:
sudo unzip prestashop.zip -d /var/www/myshop
sudo chown -R www-data:www-data /var/www/myshop/
sudo find . -type d -exec chmod 0755 {} \;
sudo find . -type f -exec chmod 0644 {} \;
以上所有操作完成后,我们就可以在浏览器中输入对应的地址通过安装向导一步一步安装PrestaShop了。
例如在浏览器地址中输入:
https://www.myshop.com
之后就会进入到安装向导页面。
设置防火墙
使用ufw对防火墙进行管理,可以通过以下命令进行设置:
sudo apt install ufw //install ufw
sudo ufw enable
sudo ufw app list
sudo ufw allow 22100/tcp comment 'Open port ssh tcp port 22100'
sudo ufw allow 80
sudo ufw allow 443
sudo ufw status
至此,整个在Debian10上如何一步一步安装PrestaShop电商平台程序的讲解已经完成,如果你想搭建自己的外贸电商平台,不妨尝试一下PrestaShop。