diff --git a/ReadMe.md b/ReadMe.md index a0f32e6..ff23455 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -35,7 +35,7 @@ https://www.bilibili.com/video/BV1AYm8YSEKY/ ### 安装docker内容 -如果使用是centos或者是rocky +#### centos或rocky ```shell # 更新yum 和 dnf @@ -57,20 +57,75 @@ systemctl enable docker systemctl start docker ``` +#### Ubuntu环境搭建 + +```bash +sudo apt-get remove docker docker-engine docker.io containerd runc +sudo apt update +sudo apt upgrade +sudo apt-get install ca-certificates curl gnupg lsb-release +# 添加Docker官方GPG密钥 +sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - +sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" +# 安装docker +sudo apt-get install docker-ce docker-ce-cli containerd.io +# 默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo,设置完成后退出当前用户之后再进入既可 +sudo usermod -aG docker $USER +# 运行docker +sudo systemctl start docker +# 安装工具 +sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common +# 重启docker +sudo service docker restart +``` + +> 安装docker会可能会遇到镜像无法拉去问题试下面的几个镜像地址,根据你自己的需要进行配置不是所有人都需要;同时也不能保证地址真的有效!!! +> +> ```bash +> # 如果遇到没有这个文件的直接输入命令进行创建既可,之后记得重启docker +> sudo touch /etc/docker/daemon.json +> sudo vim /etc/docker/daemon.json +> ``` +> +> 复制下面的内容到`daemon.json` +> +> ```json +> { +> "registry-mirrors": [ +> "https://jockerhub.com", +> "https://dockerhub.icu", +> "https://docker.1panel.live", +> "https://gwsg6nw9.mirror.aliyuncs.com", +> "https://registry.docker-cn.com", +> "http://hub-mirror.c.163.com", +> "http://f1361db2.m.daocloud.io", +> "https://mirror.ccs.tencentyun.com", +> "https://phtv51hj.mirror.aliyuncs.com", +> "https://gwsg6nw9.mirror.aliyuncs.com" +> ] +> } +> ``` +> +> 重启docker +> +> ```bash +> sudo systemctl restart docker.socket +> ``` + ### 安装Redis #### 编写配置文件 ```sh -mkdir /bunny/docker_data/my_redis/ -p -vim /bunny/docker_data/my_redis/redis.conf +mkdir ~/docker/docker_data/redis_master/ -p +vim ~/docker/docker_data/redis_master/redis.conf ``` **添加以下内容** 有注释大概率启动不了 -``` +```properties # bind 127.0.0.1 #注释掉这部分,使redis可以外部访问 daemonize no #用守护线程的方式启动 requirepass 123456 @@ -80,7 +135,7 @@ tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接 **删除注释** -``` +```properties daemonize no requirepass 123456 appendonly yes @@ -89,40 +144,102 @@ tcp-keepalive 300 #### 启动Redis +密码是上面的:`123456` + ```sh docker pull redis:7.0.10 docker run -p 6379:6379 --name redis_master \ --v /bunny/docker_data/redis_master/redis.conf:/etc/redis/redis.conf \ --v/bunny/docker_data/redis_master/data:/data \ +-v ~/docker/docker_data/redis_master/redis.conf:/etc/redis/redis.conf \ +-v ~/docker/docker_data/redis_master/data:/data \ --restart=always -d redis:7.0.10 --appendonly yes ``` ### 安装Minio +在这个项目中进入之后输入你的用户名密码之后创建一个桶,桶名称为`auth-admin`,这个桶名称在后端的配置文件中可以修改 + ```sh docker run -d \ -p 9000:9000 \ -p 9090:9090 \ --name minio_master --restart=always \ - -v /bunny/docker/minio/data:/data \ + -v ~/docker/docker_data/minio/data:/data \ -e "MINIO_ROOT_USER=bunny" \ -e "MINIO_ROOT_PASSWORD=02120212" \ minio/minio server /data --console-address ":9090" ``` +![image-20241117201248420](http://116.196.101.14:9000/docs/image-20241117201248420.png) + +#### 搭建步骤 + +**1、输入地址,之后登录进去** + +**2、创建桶** + +![image-20241117201444738](http://116.196.101.14:9000/docs/image-20241117201444738.png) + +**3、进入创建的桶,设置桶的权限时公开的,否则无法访问文件内容** + +![image-20241117201552805](http://116.196.101.14:9000/docs/image-20241117201552805.png) + +![image-20241117201622288](http://116.196.101.14:9000/docs/image-20241117201622288.png) + +![image-20241117201712911](http://116.196.101.14:9000/docs/image-20241117201712911.png) + ### 安装MySQL -**设置开机启动** +#### 创建配置文件 + +注意路径!!! + +```bash +# 创建3306配置文件 +sudo mkdir -p /home/bunny/docker/docker_data/mysql/mysql_master/etc +sudo vim /home/bunny/docker/docker_data/mysql/mysql_master/etc/my.cnf + +# 创建3304配置文件 +sudo mkdir -p /home/bunny/docker/docker_data/mysql/slave_3304/etc +sudo vim /home/bunny/docker/docker_data/mysql/slave_3304/etc/my.cnf +``` + +**my.cnf 配置** + +```mysql +[mysqld] +skip-host-cache +skip-name-resolve +secure-file-priv=/var/lib/mysql-files +user=mysql + +# 设置字符集 +character-set-server=utf8mb4 +collation-server=utf8mb4_unicode_ci + +# 设置服务器ID(如果是复制集群,确保每个节点的ID唯一) +server-id=1 + +# 启用二进制日志 +log-bin=mysql-bin + +# 设置表名不区分大小写 +lower_case_table_names = 1 +``` + +#### 启动MySQL + +启动时会一直输出,等输出差不多了直接关掉既可 **执行启动3306:** ```sh -docker stop master -docker rm master +docker stop mysql_master +docker rm mysql_master -docker run --name master -p 3306:3306 \ --v /bunny/docker_data/mysql/master/etc/my.cnf:/etc/my.cnf \ --v /bunny/docker_data/mysql/master/data:/var/lib/mysql \ +docker run --name mysql_master -p 3306:3306 \ +-v /home/bunny/docker/docker_data/mysql/mysql_master/etc/my.cnf:/etc/my.cnf \ +-v /home/bunny/docker/docker_data/mysql/mysql_master/data:/var/lib/mysql \ +-v /home/bunny/docker/docker_data/mysql/mysql_master/backup:/backup \ --restart=always --privileged=true \ -e MYSQL_ROOT_PASSWORD=02120212 \ -e TZ=Asia/Shanghai \ @@ -138,47 +255,23 @@ docker stop slave_3304 docker rm slave_3304 docker run --name slave_3304 -p 3304:3306 \ - -v /bunny/docker_data/mysql/slave_3304/etc/my.cnf:/etc/my.cnf \ - -v /bunny/docker_data/mysql/slave_3304/data:/var/lib/mysql \ - -v /bunny/docker_data/mysql/slave_3304/backup:\ + -v /home/bunny/docker/docker_data/mysql/slave_3304/etc/my.cnf:/etc/my.cnf \ + -v /home/bunny/docker/docker_data/mysql/slave_3304/data:/var/lib/mysql \ + -v /home/bunny/docker/docker_data/mysql/slave_3304/backup:/backup \ --restart=always --privileged=true \ -e MYSQL_ROOT_PASSWORD=02120212 \ -e TZ=Asia/Shanghai \ mysql:8.0.33 --lower-case-table-names=1 ``` -**修改密码:** - -```sh -docker exec -it mysql_master /bin/bash -mysql -uroot -p02120212 -use mysql -ALTER USER 'root'@'%' IDENTIFIED BY "02120212"; -FLUSH PRIVILEGES; -``` - -> my.cnf 配置 -> -> ```sql -> [mysqld] -> skip-host-cache -> skip-name-resolve -> secure-file-priv=/var/lib/mysql-files -> user=mysql -> -> # 设置字符集 -> character-set-server=utf8mb4 -> collation-server=utf8mb4_unicode_ci -> -> # 设置服务器ID(如果是复制集群,确保每个节点的ID唯一) -> server-id=1 -> -> # 启用二进制日志 -> log-bin=mysql-bin -> -> # 设置表名不区分大小写 -> lower_case_table_names = 1 +> **修改密码:** > +> ```sh +> docker exec -it mysql_master /bin/bash +> mysql -uroot -p02120212 +> use mysql +> ALTER USER 'root'@'%' IDENTIFIED BY "02120212"; +> FLUSH PRIVILEGES; > ``` ### 数据库文件 @@ -1067,6 +1160,14 @@ server { ## 后端部署 +### 注意事项 + +如果需要打包需要手动创建生产环境文件:`application-prod.yml` + +![image-20241117202134939](http://116.196.101.14:9000/docs/image-20241117202134939.png) + +### 环境设置 + 开发环境环境:对外暴露的端口是`7070` 生产环境:对外暴露的端口是`8000` diff --git a/build/buildEnv.ts b/build/buildEnv.ts index 074a3c2..283a2a9 100644 --- a/build/buildEnv.ts +++ b/build/buildEnv.ts @@ -43,6 +43,7 @@ export const buildEnvironment = () => { // 如果是包含在包中则打包成 vendor if (id.includes('node_modules')) { return `vendor`; + // return id.toString().split('node_modules/')[1].split('/')[1].toString(); } }, }, diff --git a/build/data.js b/build/data.js index bc345a1..ff68766 100644 --- a/build/data.js +++ b/build/data.js @@ -76,7 +76,7 @@ async function add(data) { headers: { 'Content-Type': 'application/json', token: - 'eyJhbGciOiJIUzI1NiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAA_yWLywqFIBQA_-WsE9Sjt2xXuz7jmAYGWfiAIu6_X-HuhmHmhVwtjDDXGB_owN8XjKJH3iMayTuo2afFNffHSIdv-eSOEEMuicqZ2raX0Kx22g4ciRkUyBRpw6yxgq1S0SBXubnPBt8fEjhnWnMAAAA.YwSm-NO_6Kg1k1GRwucIt50Y70FbPHoldsdTPVHK_Y4', + 'eyJhbGciOiJIUzI1NiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAA_yWLywqFIBQA_-WsE_RknWxXuz5DU8EgCx9QXO6_X-HuhmHmA7kamGGtMb7QgXtumAX1KEekQXVQs0ubbe6PUZ-u5Ys9Qwy5JF2u1LajhGaNFoZGLxlKS0xavjPjkbPBKS8Uql3TBN8fHTtSk3MAAAA.u-rDR1a46DoV0X-iQEz0Y9lfUGPm0Nsr2MuD4fvtVMg', }, body: JSON.stringify(data), }); diff --git a/docker/Dockerfile b/docker/Dockerfile index 0461d86..c913909 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -6,10 +6,10 @@ RUN rm /etc/nginx/conf.d/default.conf # 将自定义的 Nginx 配置文件复制到容器中 COPY nginx.conf /etc/nginx/conf.d/default.conf -COPY bunny-web.site.csr /etc/nginx/bunny-web.site.csr -COPY bunny-web.site.key /etc/nginx/bunny-web.site.key -COPY bunny-web.site_bundle.crt /etc/nginx/bunny-web.site_bundle.crt -COPY bunny-web.site_bundle.pem /etc/nginx/bunny-web.site_bundle.pem +#COPY bunny-web.site.csr /etc/nginx/bunny-web.site.csr +#COPY bunny-web.site.key /etc/nginx/bunny-web.site.key +#COPY bunny-web.site_bundle.crt /etc/nginx/bunny-web.site_bundle.crt +#COPY bunny-web.site_bundle.pem /etc/nginx/bunny-web.site_bundle.pem # 设置时区,构建镜像时执行的命令 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime @@ -25,7 +25,7 @@ COPY dist/ /etc/nginx/html # 暴露 Nginx 的默认端口 EXPOSE 80 -EXPOSE 443 +#EXPOSE 443 # 自动启动 Nginx CMD ["nginx", "-g", "daemon off;"] diff --git a/docker/nginx.conf b/docker/nginx.conf index 05490e0..fca77a4 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -3,59 +3,10 @@ map $http_upgrade $connection_upgrade { '' close; } -server { - #SSL 默认访问端口号为 443 - listen 443 ssl; - #请填写绑定证书的域名 - server_name localhost; - #请填写证书文件的相对路径或绝对路径 - ssl_certificate bunny-web.site_bundle.crt; - #请填写私钥文件的相对路径或绝对路径 - ssl_certificate_key bunny-web.site.key; - ssl_session_timeout 5m; - #请按照以下协议配置 - ssl_protocols TLSv1.2 TLSv1.3; - #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 - ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; - ssl_prefer_server_ciphers on; - - location / { - root /etc/nginx/html; - index index.html index.htm; - try_files $uri /index.html; - } - - # 后端跨域请求 - location ~/admin/ { - proxy_pass http://172.17.0.1:8000; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - # 后端跨域请求 - location ~/api/v1/ { - proxy_pass http://129.211.31.58:3000; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_redirect http:// https://; - } - - error_page 404 404.html; - - location = /50x.html { - root html; - } - } - server { listen 80 ; listen [::]:80; server_name localhost; - return 301 https://$host$request_uri; location / { root /etc/nginx/html; diff --git a/package.json b/package.json index 6f99234..4e8363f 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,9 @@ { - "name": "bunny-admin-element", - "version": "1.0.0", + "name": "bunny-admin-web", + "version": "2.0.1", "private": true, "type": "module", "keywords": [ - "bunny-admin-element", - "bunny-cli", "element-plus", "tailwindcss", "typescript", @@ -14,19 +12,19 @@ "vite", "esm" ], - "homepage": "https://gitee.com/BunnyBoss/bunny-admin-element.git", + "homepage": "https://github.com/BunnyMaster/bunny-admin-web", "repository": { "type": "git", - "url": "https://gitee.com/BunnyBoss/bunny-admin-element.git" + "url": "https://github.com/BunnyMaster/bunny-admin-web" }, "bugs": { - "url": "https://gitee.com/BunnyBoss/bunny-admin-element.git/issues" + "url": "https://github.com/BunnyMaster/bunny-admin-web/issues" }, "license": "MIT", "author": { "name": "Bunny0212", "email": "1319900154@qq.com", - "url": "https://github.com/xiaoxian521" + "url": "https://github.com/BunnyMaster" }, "scripts": { "dev": "NODE_OPTIONS=--max-old-space-size=4096 vite", diff --git a/src/layout/components/lay-footer/index.vue b/src/layout/components/lay-footer/index.vue index 70e0985..58586b4 100644 --- a/src/layout/components/lay-footer/index.vue +++ b/src/layout/components/lay-footer/index.vue @@ -8,7 +8,7 @@ const Copyright = getConfig('Copyright'); diff --git a/src/store/configuration/emailUsers.ts b/src/store/configuration/emailUsers.ts index c40f2ad..fe56b73 100644 --- a/src/store/configuration/emailUsers.ts +++ b/src/store/configuration/emailUsers.ts @@ -22,6 +22,8 @@ export const useEmailUsersStore = defineStore('emailUsersStore', { port: undefined, // 邮箱协议 smtpAgreement: undefined, + // 是否启用SSL + openSSL: undefined, }, // 分页查询结果 pagination: { diff --git a/src/utils/message.ts b/src/utils/message.ts index fa55e76..12ea15a 100644 --- a/src/utils/message.ts +++ b/src/utils/message.ts @@ -83,7 +83,7 @@ export const storeMessage = (result: BaseResult) => { if (result.code !== 200) { return false; } - message(result.message, { type: 'success' }); + message(result.message, { type: 'success', duration: 3666 }); return true; }; diff --git a/src/views/configuration/emailTemplate/email-template-dialog.vue b/src/views/configuration/emailTemplate/email-template-dialog.vue index c7e2287..e272187 100644 --- a/src/views/configuration/emailTemplate/email-template-dialog.vue +++ b/src/views/configuration/emailTemplate/email-template-dialog.vue @@ -5,6 +5,9 @@ import { rules } from '@/views/configuration/emailTemplate/utils/columns'; import { FormProps } from '@/views/configuration/emailTemplate/utils/types'; import { $t } from '@/plugins/i18n'; import { useEmailTemplateStore } from '@/store/configuration/emailTemplate'; +import { useRenderIcon } from '@/components/CommonIcon/src/hooks'; +import View from '@iconify-icons/ep/view'; +import { viewTemplate } from '@/views/configuration/emailTemplate/utils/hooks'; const props = withDefaults(defineProps(), { formInline: () => ({ @@ -54,6 +57,9 @@ defineExpose({ formRef }); + + {{ $t('viewTemplate') }} + diff --git a/src/views/configuration/emailTemplate/index.vue b/src/views/configuration/emailTemplate/index.vue index b022d56..2cf1a21 100644 --- a/src/views/configuration/emailTemplate/index.vue +++ b/src/views/configuration/emailTemplate/index.vue @@ -4,9 +4,10 @@ import { columns } from '@/views/configuration/emailTemplate/utils/columns'; import PureTableBar from '@/components/TableBar/src/bar'; import AddFill from '@iconify-icons/ri/add-circle-line'; import PureTable from '@pureadmin/table'; -import { onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows } from '@/views/configuration/emailTemplate/utils/hooks'; +import { onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows, viewTemplate } from '@/views/configuration/emailTemplate/utils/hooks'; import Delete from '@iconify-icons/ep/delete'; import EditPen from '@iconify-icons/ep/edit-pen'; +import View from '@iconify-icons/ep/view'; import Refresh from '@iconify-icons/ep/refresh'; import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { $t } from '@/plugins/i18n'; @@ -122,6 +123,7 @@ onMounted(() => {