体验地址:http://opensource.developers.pub
一 准备工作
- 本地有Java运行环境,要求
Java8
及以上版本:运行项目使用; - 本地安装
maven
:下载项目依赖使用; - 有可以连接的数据库,要求
mysql6.0
及以上版本:保存服务数据使用; - 本地有安装
git
客户端:从 github 下载代码使用; - 【服务器部署必须,本地不需要】安装
nginx
:配置服务访问路径使用;
二 本地启动项目
2.1 下载代码
从github下载代码到本地,github 仓库地址:https://github.com/Qbian61/forum-java
,进入到某个自己的项目工作文件夹下,执行下面的 clone
命令,将 github 代码下载到本地:
git clone git@github.com:Qbian61/forum-java.git
执行后效果如下图所示:
2.2 编辑器打开项目
我用的编辑器是 idea,大家根据自己平时的开发习惯使用对应的编辑器就好。
idea 打开项目如下:
默认打开的是项目的 readme 文件,下面还有提示一些报错信息,报错说是我的本地maven配置的仓库地址不存在,所以需要修改下maven配置。
可以打开自己的编辑器的 preferences,搜索 maven,修改自己的 maven 配置,如下图:
修改好 maven 配置后,打开项目的启动入口类,可以看到依赖的Spring包都没有下载下来,这个时候我们打开编辑器的maven控制台,点击左上角的刷新按钮,手动触发下依赖包的下载:
刷新后可以看到项目的依赖包都已经下载下来了:
2.3 修改配置信息
这个时候还不能启动项目,需要先找到项目的配置文件,根据自己环境修改下配置信息。配置文件如下图所示:
配置文件有五个,接下来我们一一说明下每个文件的作用:
2.3.1 application.properties配置详解
下面这几项配置不需要我们修改,如果有人需要修改服务启动端口,需要修改多处,后面我们再说怎么修改端口:
server.port=8080
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=/mapper/*.xml
spring.thymeleaf.cache=true
spring.servlet.multipart.max-file-size=3MB
下面这几项配置是数据库链接的配置,按照自己的数据库去配,不做过多说明:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/developers?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true
spring.datasource.username=root
spring.datasource.password=mysql password
下面这几项配置是准备接入163邮箱发送的配置,功能代码已经开发好了,但是因为自己的163邮箱邮件发送的配置不对,所以发送邮件的功能也就被注释掉了,这里不需要配置,配置了也没用,有二开的同学可以根据自己的需要去修改这部分功能:
custom-config.mail.smtp.host=smtp.163.com
custom-config.mail.smtp.port=465
custom-config.mail.smtp.socketFactoryPort=465
custom-config.mail.smtp.auth=true
custom-config.mail.smtp.account=15620608572@163.com
custom-config.mail.smtp.password=account login password
custom-config.mail.smtp.fromAddress=开发者社区 <15620608572@163.com>
下面的这几项配置是七牛云图片存储的配置,文章内的图片上传会使用到这里,如果使用的是其他云存储,可以自己实现下图中的接口,例如可以将图片保存到服务器本地。
custom-config.upload-file.qiniu.accessKey=
custom-config.upload-file.qiniu.secretKey=
custom-config.upload-file.qiniu.bucketName=
# 访问域名,例如 https://static.developers.pub/
custom-config.upload-file.qiniu.accessDomain=
下面的这几项配置都是和页面显示相关的,需要自己根据自己的网站去个性化配置,每个配置都有配置说明,看备注一个个改下就好了。
# 全局页面配置 =》网站名称
custom-config.view.global.websiteName=开发者客栈
# 全局页面配置 =》网站 logo url
custom-config.view.global.websiteLogoUrl=https://static.developers.pub/logo.jpeg
# 全局页面配置 =》网站 favicon icon url
custom-config.view.global.websiteFaviconIconUrl=https://static.developers.pub/favicon.ico
# 全局页面配置 =》联系我 wx qr code img url,不配置 contactMeWxQrCode 时不现实
custom-config.view.global.contactMeTitle=联系我 - 官方微信
custom-config.view.global.contactMeWxQrCode=https://static.developers.pub/wx_qa_code.jpeg
# 全局页面配置 =》分页大小
custom-config.view.global.pageSize=20
# 全局页面配置 =》图片访问时样式,访问cdn图片时,可自定义压缩格式
custom-config.view.global.cdnImgStyle=?imageView2/2/w/700
# 首页侧边栏类型 names
custom-config.view.index-page.sidebar-type-names=公告,活动
# 全局页面配置 =》页面底部网站建站年份
custom-config.view.global.websiteStartYear=2016
# 全局页面配置 =》页面底部网站备案号
custom-config.view.global.websiteRecord=皖ICP备17014120号
下面的是github授权登录的配置,需要用到 github 授权登录的可以配置下,不需要的话可以把登录框的三方授权隐藏掉。
# github 授权登录 client id custom-config.view.global.githubClientId= # github 授权登录 client secret custom-config.oauth.github.clientSecret=
2.3.2 application-qa.properties配置详解
下面的配置是qa环境的配置,在本地启动的话,可以修改配置为本地参数,例如连接本地数据库等。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/developers?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true
spring.datasource.username=root
spring.datasource.password=root
spring.thymeleaf.cache=false
怎么让上面的配置生效呢,需要我们修改下项目启动配置的,如下:
2.3.3 logback.xml配置详解
下图是 logback 日志框架的配置,里面包含了日志文件保存的路径,这个路径需要按照自己的运行环境进行修改,注意该路径需要给项目赋予可写的权限。
2.3.4 schema.sql配置详解
下图是数据库表的ddl配置,项目启动前需要创建数据库,并执行下面的sql初始化表结构。数据库名称可以看上面的数据库配置链接,可根据自己的数据库并进行修改。
2.3.5 data.sql配置详解
下图的配置是初始数据的配置,会初始化一个超级管理员、一个管理员这两个账号,用户登录管理后台和管理内容使用。
2.4 初始化数据库
2.4.1 创建数据库
创建一个数据库名为 forum-java
的数据库,并选择对应的编码方式。
注意这里的数据库名要和上面的数据库链接里的数据库名对应,所以数据库链接中的数据库名也需要修改为 forum-java
。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/forum-java?useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true
2.4.2 初始化数据表
mysql workbench 太难用了,换了个mysql客户端工具 navicat,下面的操作都是基于navicat进行的。选中我们建好的数据库,右键运行sql文件,找到项目中的 schema.sql,执行建表ddl。
执行完成后刷新数据库,就可以看到我们新建的数据表了。
2.4.3 初始化数据
选中上面的数据库,右键继续执行sql文件,执行 data.sql 文件初始化数据,这里会初始化两个管理员账号。
账号 | 登录密码 |
---|---|
admin@developers.pub | admin123456 |
superadmin@developers.pub | admin123456 |
如下图所示:
2.4.4 修改项目数据库连接
连接到刚刚创建的数据库。
2.3 本地启动服务
上面的 2.3.2 中配置好了启动参数,我们直接点击idea右上角的小虫子 debug 模式启动服务。如下图表示服务启动成功。
2.4 访问本地服务
从上面的服务启动日志可以看到,我们的服务启动的端口是 8080
,所以我们直接访问本地的 http://127.0.0.1:8080/
就可以访问到启动的服务了,如下图:
2.5 管理员登录
管理后台代码已经全部开源在 github(https://github.com/Qbian61/forum-java),拉下最新代码!!!
点击右上角登录,如下图:
超级管理员登录,如下图:
账号 | 登录密码 |
---|---|
admin@developers.pub | admin123456 |
superadmin@developers.pub | admin123456 |
登录成功后可以看到右上角的用户头像,点击下拉可以看到管理后台访问入口,只有管理员登录才会出现管理后台,这里做了权限的区分:
2.6 访问管理后台
- 回到浏览器,管理员登录成功后,访问
http://127.0.0.1:8080/admin
地址,就可以进入管理后台了,如下图:
- 初始化的两个管理员用户
- 刚刚登录的操作日志
- 初始化的文章类别
- 初始化的标签数据
到这里就完成了本地的服务配置和启动,管理后台也部署成功了。
接下来就让我们看下怎么将服务部署到服务器,让互联网上的其他人也能够访问到你的网站。
三 服务器部署
我的服务器操作系统是 Centos7
,下面的步骤都是基于 Centos7
操作系统下进行的操作。
3.1 服务器安装jdk8
- 查看下yum源中是否有jdk安装包,如下图:
yum -y list java*
- 下载安装jdk8,这里注意安装的版本:
yum -y install java-1.8.0-openjdk-devel.x86_64
- 下图可以看到我们的安装路径:
3.1.1 配置Java环境变量
vi /etc/profile
命令打开配置文件,添加下面的配置项,这里根据自己的安装路径配置:
#java
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export JRE_HOME
export PATH
export CLASSPATH
- 配置完成后执行下
source /etc/profile
命令,使上面的配置生效。 - 执行
javac
和java -version
命令查看是否安装成功,如下图:
3.2 安装tomcat服务器
我部署的服务都是用的 tomcat
容器启动的,并没有用到 spring boot
打 jar
包自带的服务器,所以我会在自己的服务器上安装一个 tomcat
服务器,这样我每次发布部署的时候,只需要在本地打好 war
包,通过 scp
命令上传到服务器 tomcat
的 webapps
目录下,tomcat
会自动发布最新的 war
包,完成自动部署。
- 我本地有下载好的tomcat安装包,所以就通过 scp 命令直接上传到服务器指定路径下了:
- 进入到服务器的tomcat包路径,执行
tar -zxvf apache-tomcat-9.0.6.tar.gz
解压tomcat,如下图:
- 进入 tomcat 的
conf
路径下,查看server.xml
文件查看tomcat 启动端口号:
如果有需要修改的同学可以修改这里的端口号。
- 进入到tomcat的
bin
路径下,执行./startup.sh
命令启动tomcat服务器,如下图所示:
- 上图表示启动成功了,我们通过服务器的ip+tomcat的启动端口访问下
http://42.51.0.196:8080/
,如下图:
为了保险起见,建议把tomcat的webapps下自带的服务删掉。
3.3 安装数据库mysql
- 配置Mysql 8.0安装源,如下图:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- 安装Mysql 8.0,如下图:
sudo yum --enablerepo=mysql80-community install mysql-community-server
- 启动数据库,如下图:
sudo service mysqld start
- 查看mysql运行状态,如下图:
service mysqld status
- 查看root临时密码,如下图:
安装完mysql之后,会生成一个临时的密码让root用户登录
grep "A temporary password" /var/log/mysqld.log
- 更改登录密码,如下图:
输入:mysql -uroot -p
在Enter password:后面输入临时密码
登录成功,输入:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
- 查看用户,如下图:
mysql> use mysql;
mysql> select host, user, authentication_string, plugin from user;
发现root的host是localhost,不是%,可以加个host是%的root账号:
- 更新root用户可远程连接,如下图:
update user set host = '%' where user = 'root';
- 刷新下配置,如下图:
flush privileges;
- 通过mysql客户端连接刚部署的数据库,如下图:
- 初始化项目数据库及数据,参考 2.4;
3.4 部署服务到服务器
3.4.1 修改项目中数据库配置为服务器数据库配置
3.4.2 在服务器创建日志文件路径
3.4.3 将本地项目打 war 包
- 将
forum-starter/pom.xml
的下图中的两处注释解开;
- 打开控制台,
mvn clean
清除下之前的编译文件;
- 执行
mvn package
命令将项目打成 war 包;
- 查看打好的 war 包;
- 将打包的 war 包上传到服务器的 tomcat/webapps 目录下
scp ./forum-starter/target/forum-java.war server_user_account@42.51.0.196:/home/apache-tomcat-9.0.6/webapps
- 访问服务器部署的网站
http://42.51.0.196:8080/forum-java/
因为我们打的war包名是forum-java.war,所以访问的路径是forum-java
- 修改打包后的war名称
到这里虽然能够访问到我们部署的服务了,但是还不可以登录,因为我们项目中所有的请求路径都是根路径,并没有 /forum-java
前缀,所以需要在服务器部署个nginx做下转发。
3.5 安装nginx
因为nginx是c写的,所以我们需要安装c的编译环境,然后把包下载下来,自己编译一下,然后在启动就好了。
- 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++
- PCRE pcre-devel 安装
yum install -y pcre pcre-devel
- zlib 安装
yum install -y zlib zlib-devel
- OpenSSL 安装
yum install -y openssl openssl-devel
- 安装gcc
yum -y install gcc
- 使用wget命令下载(推荐)。确保系统已经安装了wget,如果没有安装,执行 yum install wget 安装。
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
- 解压
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
- 配置
./configure
- 编译安装
make make install
- 查找安装路径
whereis nginx
- 启动 nginx
cd /usr/local/nginx/sbin/ ./nginx
- 修改配置
/usr/local/nginx/conf vi nginx.conf
nginx 默认监听的是80端口,所以我们只需要将访问 /
路径转发到本地的 8080/forum-java/
就好了,如下图:
location / {
# root html;
# index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8080/forum-java/;
index index.html index.htm;
proxy_connect_timeout 300; #单位秒
proxy_send_timeout 300; #单位秒
proxy_read_timeout 300; #单位秒
}
- 使路由配置生效
/usr/local/nginx/sbin ./nginx -s reload
- 访问服务器 ip,不加端口时默认是 80 端口;
- 管理员登录
登录成功
- 访问管理后台
我们已经可以通过 IP 访问部署的服务了,并且也验证了功能都是没问题的。但是IP的访问方式不是很友好。
3.6 配置域名解析
- 域名提供商配置域名的dns解析配置
这里就没啥好说的了,域名解析配置在域名提供商那边都有对应的控制台,把域名解析到服务器的ip就好了,一般解析后不会立即生效,等待一会也就差不多了。这里可以去对应域名提供商那边看对应教程。
- 在nginx上配置对应的域名解析
将nginx的配置server_name改为域名就好了。
server {
listen 80;
server_name 这里填你的域名;
......
}
四 常见问题
4.1 修改服务端口
需要修改下面几个地方
- 修改服务启动端口
- 修改编辑器页面访问接口的端口
- 修改管理后台页面访问接口的端口