forked from EleTeam/UniShopX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.md
executable file
·162 lines (144 loc) · 7.29 KB
/
README.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Shop-PHP-Yii2
#### 如果你支持这个项目,请 Star and Fork Me。
#### 注:有任何问题请在Issues提交,EleTeam会尽快回复。
#### EleTeam开源项目-电商全套解决方案之后端版-Shop-PHP-Yii2。一个类似京东/天猫/淘宝的商城,有对应的APP支持,由EleTeam团队维护!
#### iOS手机端,对应项目是 Shop-iOS,https://github.com/EleTeam/Shop-iOS
#### RN手机端,对应项目是 Shop-React-Native,https://github.com/EleTeam/Shop-React-Native
#### 网站的功能模块
商品模块:支持一个商品多SKU模式
用户模块:注册登录,用户角色权限管理
地址模块
订单模块
购物车模块
文章模块
#### 该电商网站的基础架构,能承担上万的并发请求:
一份代码拆分为五个项目
业务项目:GatewayWorker + Redis
API项目:Nginx + PHP-FPM,PHP通过RPC调用业务项目提供的接口。该层同时是手机APP和手机WAP的接口
WEB项目:Nginx + PHP-FPM,UI框架用 Framework7,PHP通过RPC调用业务项目提供的接口
WAP项目:
方案一:直接返回带数据的html和js。因为电商的SEO必须得做好,前后端分离无法优化SEO,而后端用nodejs调用接口把项目架构做复杂了,所以选用这种方案。
方案二:Nginx只返回静态html页面,在浏览器端用AJAX调用API层的接口。JS框架是 SUI Mobile。不用这种方案。
图片项目:Nginx存放图片等静态文件
后台项目:Nginx + PHP-FPM,UI框架用 Framework7
#### Redis 安装与使用, 必须安装
Linux下安装Redis:
用源码包安装,yii2-redis需要redis>=2.6.12的版本
1.cd /usr/local/src; wget download.redis.io/releases/redis-3.2.6.tar.gz
2.tar xvf redis-3.2.6.tar.gz; cd redis-3.2.6
3.make && make install
4.cp redis.conf /usr/local/etc
5.redis-server /usr/local/etc/redis.conf &
用命令行安装
1.安装redis: yum install redis
2.安装php-redis扩展: yum install php-redis
3.启动redis,并设定开机自动启动: service redis start
4.开机自动启动redis: chkconfig redis on
5.查看进程: ps aux|grep redis
6.查看端口: netstat -apn | grep redis
7.命令测试: redis-cli, set key "123", get key
8.查看redis版本:redis-server -v, 如果版本redis<2.6.12, 请用用源码包安装
让外网可以访问Redis:
1.打开redis端口:iptables -I INPUT -p tcp --dport 6379 -j ACCEPT && service iptables save && service iptables restart
2.修改redis的配置文件,将所有bind信息全部屏蔽。
vi /etc/redis.conf 或者 vi /usr/local/etc/redis.conf
# bind 127.0.0.1
protected-mode no
3.重启redis
4.安装redis图形界面客户端Redis Desktop Manager
5.用该客户端可以清晰看到redis数据
#### 搜索服务
ElasticSearch分布式多用户的全文搜索引擎,是当前流行的企业级搜索引擎。
#### 分布式部署
Gearman处理一些可异步执行的任务(异步队列),如发送短信等。
Gearman是一个具有php扩展的分布式异步处理框架,能处理大批量异步任务。
Gearman安装和使用:http://blog.csdn.net/e421083458/article/details/21283113
定时任务:用Linux crontab调用php代码,在php里调用gearman用异步队列处理任务,如自动取消未付款订单
#### 安装环境要求:
php-5.6.x
mysql-server-5.6.x, 否则导入sql文件语法出错
httpd-2.x/nginx, 需要打开重写规则AllowOverride All
#### rpm安装MySQL-5.6.35
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
tar xvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.6.35-linux-glibc2.5-x86_64/ mysql
cd mysql
./scripts/mysql_install_db
./bin/mysqld_safe &
./bin/mysql_secure_installation
#### 该项目分为4个小项目,Apache需要创建4个虚拟主机,存放该项目的所有代码,虚拟主机的配置如下:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/Shop-PHP-Yii2/backend/web"
ServerName admin.eleteam.com
ErrorLog "logs/admin.eleteam.com-error_log"
CustomLog "logs/admin.eleteam.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/Shop-PHP-Yii2/frontend/web"
ServerName eleteam.com
ServerAlias www.eleteam.com
ErrorLog "logs/eleteam.com-error_log"
CustomLog "logs/eleteam.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/Shop-PHP-Yii2/data"
ServerName data.eleteam.com
ServerAlias data.eleteam.com
ErrorLog "logs/data.eleteam.com-error_log"
CustomLog "logs/data.eleteam.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/Shop-PHP-Yii2/api/web"
ServerName api.eleteam.com
ServerAlias api.eleteam.com
ErrorLog "logs/api.eleteam.com-error_log"
CustomLog "logs/api.eleteam.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/Shop-PHP-Yii2/wap/web"
ServerName m.eleteam.com
ServerAlias m.eleteam.com
ErrorLog "logs/m.eleteam.com-error_log"
CustomLog "logs/m.eleteam.com-access_log" common
</VirtualHost>
#### 配置本地的hosts文件:
127.0.0.1 local.eleteam.com
127.0.0.1 local.m.eleteam.com
127.0.0.1 local.admin.eleteam.com
127.0.0.1 local.api.eleteam.com
127.0.0.1 local.admin.eleteam.com
127.0.0.1 local.data.eleteam.com
#### 配置项目:
以下文件夹要求读写权限:
chmod -R 777 frontend/runtime frontend/web/assets
chmod -R 777 backend/runtime backend/web/assets
chmod -R 777 wap/runtime wap/web/assets
chmod -R 777 api/runtime
chmod -R 777 console/runtime
数据库配置文件:
common/config/main-local.php
#### 导入数据库文件:
文件存放在: /dbbaks/etshop_?.sql, 项目在紧急开发中,所以该文件会不断更新,如果你的项目出现问题了,请重新导入最新的sql文件。
#### 数据库的设计与部署
Mysql分区分片?多数据库。
采用传统的读写分离方式,一主两从,主库只写,从库只读。
不采用二主的方式,因为会把程序搞得太负责。
参考文档:http://geek.csdn.net/news/detail/52070
#### 线上的访问地址:
前台: eleteam.com
wap: m.eleteam.com
api: api.eleteam.com/v1/product/view?id=3
数据: data.eleteam.com
gii: eleteam.com/gii
后台: admin.eleteam.com
后台超级用户: admin/123456
后台普通用户: demo/123456
###### @author Tony Wong
###### @copyright Copyright © 2015年 EleTeam. All rights reserved.
###### @license The MIT License (MIT)
###### 此源码遵守 The MIT License (MIT),可用于商业上,但是因此带来的商业损失EleTeam团队不承担责任。