https://github.com/betterde/ecms
E-Commerce Management System
https://github.com/betterde/ecms
ecms element-ui nginx
Last synced: 4 months ago
JSON representation
E-Commerce Management System
- Host: GitHub
- URL: https://github.com/betterde/ecms
- Owner: betterde
- License: mit
- Created: 2020-02-21T09:46:31.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-09-15T01:02:07.000Z (9 months ago)
- Last Synced: 2025-09-15T02:43:33.132Z (9 months ago)
- Topics: ecms, element-ui, nginx
- Language: PHP
- Homepage:
- Size: 4.75 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

## ECMS
一个面向代购的简单电商管理系统。前端采用 [Vue Cli 3](https://cli.vuejs.org/)搭建的开发环境,UI 使用的是 [Element UI](https://element.eleme.io/),统计图表使用 [Antv G2](https://g2.antv.vision/en/),后端 API 采用 Laravel 实现。
- [x] 数据分析
- [x] 订单管理
- [x] 商品信息管理
- [x] 库存管理
- [x] 客户信息管理
- [x] 采购订单导出 Excel
- [X] 集成 Google 登录 (服务器和客户端都能访问 Google 服务器的情况下可以开启)
- [x] 邀请注册
- [x] 操作日志
- [x] 客户下单流程
- [] 微信小程序
- [] 客户管理后台
- [] 代理商管理
- [] 支付系统
## API
```bash
composer install --optimize-autoloader --no-dev # 安装项目依赖
cp .env.example .env # 复制一份配置文件模板,然后根据实际环境修改配置文件
php artisan config:cache # 优化配置加载
php artisan route:cache # 优化路由加载
php artisan migrate # 迁移数据表信息
php artisan jwt:secret # 生成 JWT Secret
```
## 创建系统管理用户
```bash
php artisan create:user
Please enter your name:
> Admin
Please enter your email:
> admin@example.com
Please enter your password:
>
Please enter your password again:
>
Do you wish to continue? (yes/no) [no]:
> yes
User created successfully!
+--------------------------------------+--------+---------------------+---------------------+
| ID | Name | Email | Created at |
+--------------------------------------+--------+---------------------+---------------------+
| 1f8db157-ed9b-4886-9776-0e1bdd2fb2be | Admin | admin@example.com | 2020-05-15 14:48:46 |
+--------------------------------------+--------+---------------------+---------------------+
```
## Web
如果需要将 SPA 和 API 分开部署,需要注释 `routes/web.php` 中的路由:
```php
Route::view('{path?}', 'index')->where('path', '[\/\w\.-]*');
```
这里并没有采用 Laravel 自带的 Vue 脚手架,也是便于将前端和 Laravel 进行拆分。
```bash
yarn # 安装依赖
yarn build # 打包前端资源
```
如果需要将 Vue SPA 单独部署,只需要将打包后的 `resources/views/index.blade.php` 拷贝到前端资源目录中,并改名为 `index.html`,再将 `public` 目录下生成的 `js,css,fonts` 等目录同时拷贝到前端资源目录中。目录结构如下:
```
.
├── css
├── favicon-128.png
├── favicon-16.png
├── favicon-32.png
├── favicon-48.png
├── favicon-64.png
├── favicon.ico
├── fonts
├── index.html
└── js
```
## Nginx
```
server {
listen 80;
server_name ecms.example.com;
root /example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
```
以下是前后端完全分离的 Nginx 配置文件:
```
server {
listen 80;
server_name ecms.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_tokens off;
server_name ecms.example.com;
ssl_certificate /etc/nginx/cert/fullchain.cer;
ssl_certificate_key /etc/nginx/cert/example.com.key;
# Recommendations from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/cert/ca-bundle.trust.crt;
location / {
index index.html;
root /web/sites/php/ecms/spa;
try_files $uri $uri/ /index.html;
}
location /api {
index index.php;
root /web/sites/php/ecms/api/public;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root /var/local/web/sites/php/ecms/api/public;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
> 这个配置文件是基于 Docker 部署的,如果直接在服务器上部署,可以将f `astcgi_pass` 修改为响应的 PHP-FPM 监听地址或 unxi
## Swagger
YAML 文件存放在 `public/swagger/{version}.yaml`,访问 URI: /swagger/{version}。
> 这里我并没有采用在控制器里写注释,而是直接将 API 写在 YAML 文件中。避免 Controller 过于冗长。
你也在 `RouteServiceProvider` 取消注册 swagger 的路由,来关闭该功能。
## 赞助商
[](https://www.jetbrains.com/?from=ecms)