{"id":21644325,"url":"https://github.com/vectorxxxx/26-apartmentlease","last_synced_at":"2026-04-11T09:04:59.624Z","repository":{"id":247311567,"uuid":"824488568","full_name":"vectorxxxx/26-ApartmentLease","owner":"vectorxxxx","description":"尚硅谷Java项目之尚庭公寓","archived":false,"fork":false,"pushed_at":"2024-07-28T15:35:25.000Z","size":2643,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T04:27:32.972Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.bilibili.com/video/BV1At421K7gP/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vectorxxxx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-05T08:39:09.000Z","updated_at":"2024-07-28T15:50:32.000Z","dependencies_parsed_at":"2024-07-08T02:45:25.792Z","dependency_job_id":"f034f73d-910f-49a6-bda9-c8ae90ef131b","html_url":"https://github.com/vectorxxxx/26-ApartmentLease","commit_stats":null,"previous_names":["vectorxxxx/26-apartmentlease"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2F26-ApartmentLease","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2F26-ApartmentLease/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2F26-ApartmentLease/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2F26-ApartmentLease/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vectorxxxx","download_url":"https://codeload.github.com/vectorxxxx/26-ApartmentLease/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244413458,"owners_count":20448710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T05:39:41.802Z","updated_at":"2025-10-28T18:32:08.494Z","avatar_url":"https://github.com/vectorxxxx.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 1、环境搭建\n\n### 1.1、安装 linux\n\n```bash\n# 初始化一个centos7系统\nvagrant init centos7 https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box\n\n# 启动虚拟机\nvagrant up\n\n# 连接虚拟机\nvagrant ssh\n\n# 使用 root 账号登录\nsu root\nvagrant\n\n# 允许账号密码登录\nvi /etc/ssh/sshd_config\n# PasswordAuthentication yes\n# PermitRootLogin no\nservice sshd restart\n\n# 同步时间\n# 查看当前系统的本地时间\ndate\n# 查看硬件时钟（RTC），即BIOS中的实时时钟\nhwclock\n# 查看系统时间、硬件时钟设置，以及时区等信息\ntimedatectl\n# 设置时区为 Asia/Shanghai\ntimedatectl set-timezone Asia/Shanghai\n# 使用本地时间来存储硬件时钟的值，而不是UTC时间\ntimedatectl set-local-rtc 1\n# 安装和配置 ntpdate 服务\nyum install -y ntpdate\nsystemctl enable ntpdate\nsystemctl is-enabled ntpdate\nsystemctl status ntpdate\nsystemctl start ntpdate\n# 手动同步时间\nntpdate pool.ntp.org\n# 自动同步时间\ncrontab -e\n# 每10分钟同步一次\n*/10 * * * *  /usr/sbin/ntpdate -u pool.ntp.org \u003e/dev/null 2\u003e\u00261\n# 重启服务\nservice crond restart\n```\n\n### 1.2、安装 MySQL\n\n```bash\n# 下载yum库\nwget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm\n\n# 安装yum库\nrpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023\n# i-install\n# v-verbose\n# h-hash marks\nrpm -ivh mysql80-community-release-el7-9.noarch.rpm\n\n# 配置国内镜像\nvi /etc/yum.repos.d/mysql-community.repo\n[mysql80-community]\nname=MySQL 8.0 Community Server\nbaseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-8.0-community-el7-$basearch/\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023\n       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql\n\n# 安装MySQL\nyum install -y mysql-community-server\n# 启动MySQL\nsystemctl start mysqld\nsystemctl status mysqld\nsystemctl enable mysqld\n\n# 查看root用户初始密码\ncat /var/log/mysqld.log | grep password\n# 使用初始密码登录\nmysql -uroot -p':JayQs0snJhR'\n# 修改root用户密码\nALTER USER 'root'@'localhost' IDENTIFIED BY 'VectorX.123';\n# 授予root用户远程登录权限\nCREATE USER 'root'@'%' IDENTIFIED BY 'VectorX.123';\nGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;\nFLUSH PRIVILEGES;\n```\n\n### 1.3、安装 Redis\n\n```bash\n# 下载yum库\nwget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm\n# 安装yum库\nyum install epel-release -y\nrpm -ivh remi-release-7.rpm\n\n# 安装Redis\n# --enablerepo选项的作用为启用一个仓库\nyum --enablerepo=remi -y install redis\n\n# 配置Redis允许远程访问\nvi /etc/redis/redis.conf\n#监听所有网络接口，默认只监听localhost\nbind 0.0.0.0\n#关闭保护模式，默认开启。开始保护模式后，远程访问必须进行认证后才能访问。\nprotected-mode no\n\n# 启动Redis\nsystemctl start redis\nsystemctl status redis\nsystemctl enable redis\n```\n\n### 1.4、安装 MinIO\n\n```bash\n# 下载yum库\nwget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm\n# 安装yum库\nrpm -ivh minio-20230809233022.0.0.x86_64.rpm\n\n# 编写MinIO服务配置文件\nvi /etc/systemd/system/minio.service\n```\n\n`minio.service`\n\n```bash\n[Unit]\nDescription=MinIO\nDocumentation=https://min.io/docs/minio/linux/index.html\nWants=network-online.target\nAfter=network-online.target\nAssertFileIsExecutable=/usr/local/bin/minio\n\n[Service]\nWorkingDirectory=/usr/local\nProtectProc=invisible\nEnvironmentFile=-/etc/default/minio\nExecStartPre=/bin/bash -c \"if [ -z \\\"${MINIO_VOLUMES}\\\" ]; then echo \\\"Variable MINIO_VOLUMES not set in /etc/default/minio\\\"; exit 1; fi\"\nExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES\nRestart=always\nLimitNOFILE=65536\nTasksMax=infinity\nTimeoutStopSec=infinity\nSendSIGKILL=no\n\n[Install]\nWantedBy=multi-user.target\n```\n\n编写`EnvironmentFile`文件\n\n```bash\nmkdir /data\nvi /etc/default/minio\nMINIO_ROOT_USER=minioadmin\nMINIO_ROOT_PASSWORD=minioadmin\nMINIO_VOLUMES=/data\nMINIO_OPTS=\"--console-address :9001\"\n\n# 启动MinIO\nsystemctl start minio\nsystemctl status minio\nsystemctl enable minio\n```\n\n访问MinIO管理页面：[http://192.168.56.26:9001](http://192.168.56.26:9001)\n\n- 账号：minioadmin\n- 密码：minioadmin\n\nMinIO服务器默认监听9000端口，用于提供HTTP访问。通过该端口，可以使用标准的HTTP工具（如浏览器、curl）访问MinIO服务器，并执行各种操作，例如上传、下载和管理存储桶等。\n\n而9001端口是MinIO服务器的默认管理端口，用于提供MinIO的Web管理界面。通过该端口，可以访问MinIO的管理控制台，并进行存储桶的创建、权限管理、监控等操作。\n\n\n### 1.5、安装 Nginx\n\nserver02 服务器\n\n```bash\nvi /etc/yum.repos.d/nginx.repo\n[nginx-stable]\nname=nginx stable repo\nbaseurl=http://nginx.org/packages/centos/$releasever/$basearch/\ngpgcheck=1\nenabled=1\ngpgkey=https://nginx.org/keys/nginx_signing.key\nmodule_hotfixes=true\n\n[nginx-mainline]\nname=nginx mainline repo\nbaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/\ngpgcheck=1\nenabled=0\ngpgkey=https://nginx.org/keys/nginx_signing.key\nmodule_hotfixes=true\n\n# 在线安装Nginx\nyum -y install nginx\nsystemctl start nginx\nsystemctl status nginx\nsystemctl enable nginx\nsystemctl is-enabled nginx\n```\n静态资源服务器案例\n\n```bash\n# 解压静态资源\nyum install -y unzip\nunzip hello-nginx.zip -d /usr/share/nginx/html\n\n# 配置nginx\nvi /etc/nginx/conf.d/hello-nginx.conf\nserver {\n    listen       8080;\n    server_name  192.168.56.226;\n\n    location /hello-nginx {\n        root   /usr/share/nginx/html;\n        index  index.html;\n    }\n}\n\n# 重新加载nginx配置\nsystemctl reload nginx\n\n# 访问地址\nhttp://192.168.56.226:8080/hello-nginx\n```\n\n访问地址: [http://192.168.56.226:8080/hello-nginx](http://192.168.56.226:8080/hello-nginx)\n\n\n反向代理案例\n\n```bash\nvi /etc/nginx/conf.d/hello-proxy.conf\nserver {\n    listen       9090;\n    server_name  192.168.56.226;\n\n    location / {\n        proxy_pass http://www.atguigu.com;\n    }\n}\n\n# 重新加载nginx配置\nsystemctl reload nginx\n```\n\n访问地址: [http://192.168.56.226:9090](http://192.168.56.226:9090)\n\n\n### 1.6、安装 JDK\n\nserver01 服务器\n\n```bash\nyum install -y wget\nwget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz\ntar -zxvf jdk-17.0.8_linux-x64_bin.tar.gz -C /opt\n\n# 验证\n/opt/jdk-17.0.8/bin/java -version\n```\n\n### 1.7、集成 Systemd\n\nserver02 服务器\n\n使用Systemd管理后端服务进程，方便项目的启停\n\n```bash\n# 移动端集成Systemd\nvi /etc/systemd/system/lease-app.service\n[Unit]\nDescription=lease-app\nAfter=syslog.target\n\n[Service]\nUser=root\nExecStart=/opt/jdk-17.0.8/bin/java -jar /opt/lease/web-app-1.0-SNAPSHOT.jar 1\u003e/opt/lease/\n\n2\u003e\u00261\nSuccessExitStatus=143\n\n[Install]\nWantedBy=multi-user.target\n\n# 后台管理系统集成Systemd\nvi /etc/systemd/system/lease-admin.service\n[Unit]\nDescription=lease-admin\nAfter=syslog.target\n\n[Service]\nUser=root\nExecStart=/opt/jdk-17.0.8/bin/java -jar /opt/lease/web-admin-1.0-SNAPSHOT.jar 1\u003e/opt/lease/admin.log 2\u003e\u00261\nSuccessExitStatus=143\n\n[Install]\nWantedBy=multi-user.target\n\n# 启动两个后端项目\nsystemctl start lease-app\nsystemctl enable lease-app\nsystemctl start lease-admin\nsystemctl enable lease-admin\n```\n\n### 1.8、部署前端项目\n\nserver02 服务器\n\n#### 1.8.1、移动端\n\n```bash\nyum install -y vim\nvim /etc/nginx/conf.d/app.conf\nserver {\n    listen       80;\n    server_name  lease.atguigu.com;\n    \n    # 静态资源\n    location / {\n        root   /usr/share/nginx/html/app;\n        index  index.html;\n    }\n    \n    # 接口地址\n    location /app {\n        proxy_pass http://192.168.56.126:8081;\n    }\n}\n\n# 重新加载nginx配置\nsystemctl reload nginx\n```\n\n访问地址：[http://lease.atguigu.com](http://lease.atguigu.com)\n\n#### 1.8.2、后台管理系统\n\n```bash\nvim /etc/nginx/conf.d/admin.conf\nserver {\n    listen       80;\n    server_name  admin.lease.atguigu.com;\n    \n    location / {\n        root   /usr/share/nginx/html/admin;\n        index  index.html;\n    }\n    location /admin {\n        proxy_pass http://192.168.56.126:8080;\n    }\n}\n\n# 重新加载nginx配置\nsystemctl reload nginx\n```\n\n访问地址：[http://admin.lease.atguigu.com](http://admin.lease.atguigu.com)\n\n\n\n## 2、知识点汇总\n\n- feat: 公寓信息管理\n\n  1、统一异常处理：@ControllerAdvice、@ExceptionHandler\n  2、配置文件类：@ConfigurationProperties、@EnableConfigurationProperties\n  3、MP自动填充：MetaObjectHandler#strictInsertFill\n  4、构造器：@Builder、.builder().build()\n  5、Knife4j(OpenApi3): @Tag、@Operation、@Schema\n  6、LambdaUpdateWrapper#set\n\n- feat: 租赁管理\n\n  1、日期格式与时区：@JsonFormat、date-format、time-zone\n  2、定时任务：@EnableScheduling、@Scheduled\n\n- feat: 用户管理\n\n  1、@TableField#select=false\n\n- feat: 系统管理\n\n  1、加密：DigestUtils.md5Hex（commons-codec）\n  2、MP更新策略：updateStrategy#IGNORED、NOT_NULL、NOT_EMPTY、DEFAULT、NEVER\n\n- feat: 登录管理\n\n  1、验证码：SpecCaptcha(easy-captcha)\n  2、spring-boot-starter-data-redis已经完成了StringRedisTemplate的自动配置（RedisAutoConfiguration），直接注入使用\n  3、MP手写SQL时，需要带上is_deleted逻辑删除字段\n  4、链式调用：@Builder\n  5、线程局部变量：ThreadLocal配合HandlerInterceptor进行全局统一拦截处理\n  6、多绘制流程图，理清功能逻辑，辅助思考过程，固化思考结果\n\n- build: 移动端后端开发-项目初始化配置\n\n  1、Knife4j: OpenAPI、GroupedOpenApi\n  2、@ConditionalOnProperty：配置项存在时，才会加载，避免报错\n  3、default-flat-param-object：json做打平处理，方便使用Knife4j调试\n\n- feat: 移动端后端开发-登录管理、找房\n\n  1、@ConfigurationProperties：配置文件\n  2、@EnableConfigurationProperties：开启配置文件\n  3、@ConditionalOnProperty：属性条件\n  4、阿里云发送短信请求：SendSmsRequest、client.sendSms\n\n- feat: 移动端后端开发-个人中心\n\n  1、异步功能：@EnableAsync、@Async\n\n- build: 项目部署\n\n解决编译运行报错问题\n\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n            \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e3.1\u003c/version\u003e\n            \u003c!-- 解决报错问题： -source 8 中不支持 文本块 --\u003e\n            \u003cconfiguration\u003e\n                \u003csource\u003e17\u003c/source\u003e\n                \u003ctarget\u003e17\u003c/target\u003e\n            \u003c/configuration\u003e\n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n    \u003c!--编译打包过虑配置--\u003e\n    \u003cresources\u003e\n        \u003cresource\u003e\n            \u003cdirectory\u003esrc/main/resources\u003c/directory\u003e\n            \u003cfiltering\u003etrue\u003c/filtering\u003e\n            \u003cincludes\u003e\n                \u003cinclude\u003e**/*\u003c/include\u003e\n            \u003c/includes\u003e\n        \u003c/resource\u003e\n        \u003cresource\u003e\n            \u003cdirectory\u003esrc/main/java\u003c/directory\u003e\n            \u003cincludes\u003e\n                \u003cinclude\u003e**/*.xml\u003c/include\u003e\n            \u003c/includes\u003e\n        \u003c/resource\u003e\n    \u003c/resources\u003e\n\u003c/build\u003e\n```\n\n解决打包问题\n\n```xml\n\u003c!-- Spring Boot Maven插件，用于打包可执行的JAR文件 --\u003e\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n            \u003cartifactId\u003espring-boot-maven-plugin\u003c/artifactId\u003e\n            \u003c!-- 解决打包不可单独运行的问题 --\u003e\n            \u003cexecutions\u003e\n                \u003cexecution\u003e\n                    \u003cgoals\u003e\n                        \u003cgoal\u003erepackage\u003c/goal\u003e\n                    \u003c/goals\u003e\n                \u003c/execution\u003e\n            \u003c/executions\u003e\n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectorxxxx%2F26-apartmentlease","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvectorxxxx%2F26-apartmentlease","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectorxxxx%2F26-apartmentlease/lists"}