【实用github项目】极光(Aurora)博客详细部署教程
本文最后更新于 2024-05-09,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
项目展示
轻量版后端: https://github.com/zhouyqxy/aurora_Lite
服务器要求
下面的建议不包含minio的内存占用,如需使用minio,请参考文章末尾
核心数和内存大小有两种方案:
2核4G(使用ES搜索策略)
2核2G(使用MySQL搜素策略)
带宽大小有两种方案:(目前此博客使用的是2C 2G 3M)
使用oss对带宽没有要求(本人亲测:1M带宽+oss 访问速度很快)
使用minio需要大一点的带宽(小带宽也可以,但需要使用cdn加速)
安装Docker
详阅 Docker的安装使用
安装mysql
通过数据卷挂载的方式运行容器,将容器内的部分重要文件映射到宿主机上。直接操作宿主机对应的映射文件就能和容器内作同步,方便操作的同时还能保证容器内的数据在宿主机上有一个备份。
下面的命令分别对mysql的日志文件、配置文件、数据文件进行了映射,你也可以自己修改。
docker run --name mysql --restart=always -p 3306:3306 -v /mnt/aurora/mysql/log:/var/log/mysql -v /mnt/aurora/mysql/data:/var/lib/mysql -v /mnt/aurora/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql
安装redis
下载Redis镜像
docker pull redis
设置redis数据库密码并运行redis服务
(这里我在教程中设置的密码是123456
)大家按照自己的习惯修改
docker run --name redis --restart=always -p 6379:6379 -d redis --requirepass "123456"
安装rabbitmq
下载RabbitMQ镜像
docker pull rabbitmq:management
启动RabbitMQ,默认guest用户,密码也是guest。
docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -d rabbitmq:management
这里我设置RabbitMQ的账号为admin,密码设置为123456(大家自行更改)。
docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -d rabbitmq:management
安装elasticsearch
docker pull elasticsearch:7.9.2
mkdir -p /home/elasticsearch/data/
mkdir -p /home/elasticsearch/config/
编写配置文件
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
修改文件夹权限
chmod -R 777 /home/elasticsearch/
启动elasticseach镜像
docker run --name elasticsearch -p 9200:9200
-p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
-v /home/elasticsearch/config/elasticsearch.yml:/usr/shellare/elasticsearch/config/elasticsearch.yml
-v /home/elasticsearch/data:/usr/shellare/elasticsearch/data
-v /home/elasticsearch/plugins:/usr/shellare/elasticsearch/plugins
-d elasticsearch:7.9.2
接下来我们就是拿浏览器访问啦。
在浏览器上输入:服务器IP地址:9200
(假设你的服务器公网ip是123.123.123.123则访问路径为:123.123.123.123:9200)
可能出现的问题:
- 防火墙相关(我用的云服务器,没有测试,如果有问题,还是需要大家自行去百度||谷歌一下)。
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
:配置内存大小出现了问题。- 可能是配置文件中出现了问题。
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
http.host: 0.0.0.0
在冒号后面有一个空格的,这里的配置文件是yml格式,所以一定要严格按照yml格式来书写。
安装ik分词器
进入已经启动成功的elasticsearch容器。
docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.2/elasticsearch-analysis-ik-7.9.2.zip
ps: 安装的ik分词器的版本一定要与elasticsearch的版本保持一致
下载过程中如果遇到选择,直接输入 y回车就可以了。
下载完成之后,退出去,重新启动elasticsearch容器。
docker restart elasticsearch
测试ik分词器是否安装成功
安装完成后,我们再来进行测试遍,看看有什么样的变化。
postman post请求分词测试:http://服务器IP地址:9200/_analyze
{
"tokenizer":"ik_smart",
"text":"我爱技术"
}
结果
{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "爱",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "技术",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 2
}
]
}
安装MaxWell
下载MaxWell镜像
docker pull zendesk/maxwell
运行MaxWell
docker run --name maxwell --restart=always -d zendesk/maxwell bin/maxwell --user='数据库用户名' --password='数据库密码' --host='IP地址' --producer=rabbitmq --rabbitmq_user='MQ用户名' --rabbitmq_pass='MQ密码' --rabbitmq_host='IP地址' --rabbitmq_port='5672' --rabbitmq_exchange='maxwell_exchange' --rabbitmq_exchange_type='fanout' --rabbitmq_exchange_durable='true' --filter='exclude: *.*, include: aurora.t_article.article_title = *, include: aurora.t_article.article_content = *, include: aurora.t_article.is_delete = *, include: aurora.t_article.status = *'
演示(假设你的服务器公网ip是123.123.123.123)
docker run --name maxwell --restart=always -d zendesk/maxwell bin/maxwell --user='root' --password='123456' --host='123.123.123.123' --producer=rabbitmq --rabbitmq_user='guest' --rabbitmq_pass='guest' --rabbitmq_host='123.123.123.123' --rabbitmq_port='5672' --rabbitmq_exchange='maxwell_exchange' --rabbitmq_exchange_type='fanout' --rabbitmq_exchange_durable='true' --filter='exclude: *.*, include: aurora.t_article.article_title = *, include: aurora.t_article.article_content = *, include: aurora.t_article.is_delete = *, include: aurora.t_article.status = *'
注意:上述命令中aurora为数据库名称。
填写aurora-springboot中的yml文件
此处省略,操作比较简单,就是配置一些简单的ip+端口+用户名+密码,前提是服务器上对应的端口已经打开
打包运行后端项目
-
使用idea右侧Maven的package命令
-
在服务器的
/usr/local/
下面创建名为docker
的文件夹 -
将打包好的
jar
包传到服务器上面的/usr/local/docker
下面 -
在
/usr/local/docker
路径下使用vim Dockerfile
编写Dockerfile
FROM openjdk:8 VOLUME /tmp ADD aurora-springboot-0.0.1.jar blog.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/blog.jar"]
注意:Dockerfile文件只需要上传到指定目录下即可,不需要手动执行其他操作。
编写aurora-start.sh
,同时将编写好的aurora-start.sh
上传到服务器的/usr/local/docker
下面
SOURCE_PATH=/usr/local/aurora-springboot
SERVER_NAME=aurora-springboot-0.0.1.jar
TAG=latest
SERVER_PORT=8080
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
if [ -n "$CID" ]; then
echo "存在容器$SERVER_NAME,CID-$CID"
docker stop $CID
echo "成功停止容器$SERVER_NAME,CID-$CID"
docker rm $CID
echo "成功删除容器$SERVER_NAME,CID-$CID"
fi
if [ -n "$IID" ]; then
echo "存在镜像$SERVER_NAME:$TAG,IID=$IID"
docker rmi $IID
echo "成功删除镜像$SERVER_NAME:$TAG,IID=$IID"
fi
echo "开始构建镜像$SERVER_NAME:$TAG"
cd $SOURCE_PATH
docker build -t $SERVER_NAME:$TAG .
echo "成功构建镜像$SERVER_NAME:$TAG"
docker run --restart=always --name aurora-springboot-0.0.1.jar -d -p 8080:8080 aurora-springboot-0.0.1.jar:latest
echo "成功创建并运行容器$SERVER_NAME"
注意事项:sh文件需要用notepad++转为Unix格式
具体操作:点开notepad++中的编辑 ---> 文档格式转换 --->转为Unix
cd到/usr/local/docker
下面 ,执行如下命令打包docker镜像文件
sh aurora-start.sh
启动容器
docker run --name aurora-springboot-0.0.1.jar -d -p 8080:8080 aurora-springboot-0.0.1.jar:latest
最好的操作是在服务器的/usr/local/docker目录下直接运行指令
sh aurora-start.sh
这样后端项目就可以在服务器上跑起来了
访问测试(浏览器上访问)
ip:8080
演示(假设你的服务器公网ip是123.123.123.123
打包运行前端项目
aurora-blog项目中,更改src/config/config.ts
其中天域验证码和QQ互联还有其他信息在沈自在的博客部署视频中都有提到
captcha: {
TENCENT_CAPTCHA: '你自己的天御验证码'
},
qqLogin: {
QQ_APP_ID: '你自己的APP_ID',
QQ_REDIRECT_URI: 'https://你的前台域名/oauth/login/qq'
},
aurora-blog项目中,更改public/index.html
<script
src="http://connect.qq.com/qc_jssdk.js"
data-appid="你自己的APP_ID"
data-redirecturi="https://你的前台域名/oauth/login/qq"></script>
假设我的前台想让别人访问的前台域名为poiblog.com
<script
src="http://connect.qq.com/qc_jssdk.js"
data-appid="你自己的APP_ID"
data-redirecturi="https://poiblog.com/oauth/login/qq"></script>
如果你的网站没有打算使用https(解释:是否购买了域名并备案和申请颁发了SSL证书)
将aurora-blog/public/index.html和aurora-admin/public/index.html
中下面这一行代码给注释掉(没有备案则执行)
分别到aurora-blog和aurora-admin下面执行如下命令 (推荐关闭vscode的Eslint,本项目没有遵循Eslint的规范) 如果下列命令执行报错,可以尝试替换版本 参考版本:npm版本为:8.3.1 vue-cli的版本为:5.0.6
vue项目安装依赖
npm install
vue项目打包
npm run build
运行完成后在项目的主目录下会生成一个dist文件夹,这个dist文件夹就是打包好的项目
在服务器的/usr/local/下面创建名为vue的文件夹,
将打包好的前台代码重命名为blog
, 并传输到服务器的/usr/local/vue
下面
将打包好的后台代码重命名为admin
, 并传输到服务器的/usr/local/vue
下面
安装并启动nginx
拉取nginx镜像
docker pull nginx
在/usr/local/nginx下
创建nginx.conf
文件,格式如下
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 50m;
client_body_buffer_size 10m;
client_header_timeout 1m;
client_body_timeout 1m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
server {
listen 443 ssl;
#演示
#server_name www.poiblog.com;
server_name 前台域名;
ssl on;
#演示:这里将证书文件压缩包中的.pem和.key后缀结尾的文件在服务器的/usr/local/nginx/下
#ssl_certificate /usr/local/nginx/www.poiblog.com_bundle.pem;
#ssl_certificate_key /usr/local/nginx/www.poiblog.com.key;
ssl_certificate ssl证书文件位置;
ssl_certificate_key ssl文件位置;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/vue/blog;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
#这里假设服务器ip为:123.123.123.123
#proxy_pass http://123.123.123.123:8080/;
proxy_pass http://服务器ip:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
#演示
#server_name admin.poiblog.com;
server_name 后台域名;
ssl on;
#演示:这里将证书文件压缩包中的.pem和.key后缀结尾的文件在服务器的/usr/local/nginx/下
#ssl_certificate /usr/local/nginx/admin.poiblog.com_bundle.pem;
#ssl_certificate_key /usr/local/nginx/admin.poiblog.com.key;
ssl_certificate ssl证书文件位置;
ssl_certificate_key ssl文件位置;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/vue/admin;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
#这里假设服务器ip为:123.123.123.123
#proxy_pass http://123.123.123.123:8080/;
proxy_pass http://服务器ip:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
# 演示:server_name www.poiblog.com;
server_name 前台域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 80;
# 演示:server_name admin.poiblog.com;
server_name 后台域名;
rewrite ^(.*)$ https://$host$1 permanent;
}
}
启动nginx
docker run --name nginx --restart=always -p 80:80 -d -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/vue:/usr/local/vue nginx
本地部署yml,Minio版(舍弃es)
server:
port: 8080
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/aurora?serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: 123456
hikari:
minimum-idle: 10
idle-timeout: 180000
maximum-pool-size: 100
auto-commit: true
pool-name: MyHikariCP
max-lifetime: 60000
connection-timeout: 30000
connection-test-query: SELECT 1
redis:
host: 127.0.0.1
port: 6379
#本地未设置过的则可不填
# password: redis密码
database: 1
lettuce:
pool:
min-idle: 10
max-idle: 100
max-active: 100
max-wait: 10000
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
listener:
simple:
retry:
enabled: true
max-attempts: 3
initial-interval: 3000
elasticsearch:
rest:
uris: 127.0.0.1:9200
mail:
host: smtp.163.com
username: 邮箱
password: 密码
default-encoding: UTF-8
protocol: smtp
port: 465
properties:
mail:
smtp:
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
ssl:
enable: true
starttls:
enable: true
required: true
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
search:
# mode: elasticsearch
mode: mysql
upload:
# mode: oss
mode: minio
oss:
url: http://Bucket域名/
endpoint: OSS配置endpoint
accessKeyId: OSS配置accessKeyId
accessKeySecret: OSS配置accessKeySecret
bucketName: OSS配置bucketName
minio:
#url二选一
#url: http://minio的ip:9000/ #服务器
#url: http://minio的ip:9000/桶的名称/ #本地
url: http://localhost:9000/桶的名称/
endpoint: http://localhost:9000/
accesskey: 用户名
secretKey: 密码
bucketName: 桶的名称
website:
#这里我是根据vscode运行的前端项目,在控制台得知项目前台地址为http://localhost:8081/
url: http://localhost:8081/
qq:
app-id: QQ互联 APPID
check-token-url: https://graph.qq.com/oauth2.0/me?access_token={access_token}
user-info-url: https://graph.qq.com/user/get_user_info?openid={openid}&access_token={access_token}&oauth_consumer_key={oauth_consumer_key}
服务器配置minio
需要准备一台云服务器
1、启动 Minio 容器下载 Docker 命令:
docker run -d -p 9000:9000 -p 9001:9001 --name minio --restart=always -e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=123456" -v /minio/data:/data -v /minio/config:/root/.minio -v /etc/localtime:/etc/localtime minio/minio server /data --console-address ":9001"
解释说明:
MINIO_ROOT_USER=minio 代表 MINIO 控制台账号是 minio; MINIO_ROOT_PASSWORD=123456 代表 MINIO 控制台密码是 123456;这个密码必须大于8个数不然报错 /minio/data:/data 代表将容器 /data 目录挂载至本地 /minio/data; /minio/data:/data 代表将容器 /root/.minio 目录挂载至本地 /minio/config; /etc/localtime:/etc/localtime 代表将容器时间配置成服务器时间; -p 9000:9000 -p 9001:9001 代表容器开放 9000 和 9001, 其中 9001 为 MINIO 控制台访问端口, 9000 为存储桶S3调用端口.
2.端口开放需要防火墙开通9000端口和9001端口3、创建和配置Minio存储桶
3、浏览器输入: IP:9001 登录 MINIO 控制台2、创建存储桶.
3、设置 Minio 存储桶共有读、私有写权限
4、创建 Minio Access Key
5.minio要设置成public
6、配置Nginx 路由转发
配置Nginx配置文件
有域名的 其中 minio.poiblog.com 为自配二级域名,这个不限制
server {
listen 80;
server_name minio.poiblog.com;
location / {
proxy_pass http://IP地址:9000/创建的bucket名称/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}