使用阿里云服务器搭建自己的开源博客系统
如果只是搭建博客系统,平常记录学习笔记使用,推荐大家购买阿里云的轻量级应用服务器,香港的,288/年,24/月,如图:
阿里云官网www.aliyun.com
登录之后点击轻量应用服务器
点击立即购买
选择香港或者新加坡的,境外的服务器不需要备案,可以省很多事情
默认是给你选择应用镜像WordPress,这个是给不会建站的小白用的,我们选择系统镜像centos
购买时长随你自己选择,我这里是购买一年,点击立即购买。
购买之后如果不能用ssh工具链接,有可能是你防火墙规则没有添加,添加一下就好了。
确保能够使用ssh工具连接之后,然后我们开始建站,建站的方式有很多种,
你可以自己开发一个博客系统,也可以使用开源的,我这里使用的开源的mtons
gitee地址: https://github.com/langhsu/mblog
github地址:https://gitee.com/mtons/mblog
官方文档: https://langhsu.github.io/mblog/#/
官网地址:http://www.mtons.com/
官网目前已不能访问,可能是作者域名或者服务器到期了,只要项目还在就没问题。
好了,我们开始建站
所需环境jdk1.8、mysql5.7
可以参考这两个博客进行安装
https://www.cnblogs.com/reasonzzy/p/11150130.html
https://www.cnblogs.com/reasonzzy/p/11150131.html
1.将代码从远程仓库down下来
git clone https://github.com/langhsu/mblog
有几个地方是需要做修改的,
application.yml
8080是一个常用的端口,如果不想用,就改成其他端口
同时添加防火墙规则
数据库地址localhost改成你服务器的ip
作者数据处理框架用的jpa,是不需要导入数据的,但是需要建立数据库
数据库名称与配置文件的保持一致。
如果你不想用作者默认的头像或者logo,也可以换。
把这三张图片替换成你自己的logo
数据库这张表显示的内容是页眉跟页脚
再改一下默认头像的地址,
我这里还是用的默认的
你自己可以配置一下nginx静态资源
这里弄好之后,我们开始打包项目
打包成功之后将target目录下的jar上传到linux服务器
上传好之后,使用命令后台运行并且输出日志
nohup java -jar mblog-latest.jar >mblog-latest.log 2>&1 &
源码里面有一个run.sh执行脚本,把那个上传之后改一下然后授权就可以用了。
完整脚本
#!/bin/bash
## java env
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
API_NAME=mblog-latest
JAR_NAME=$API_NAME\.jar
#PID 代表是PID文件
PID=$API_NAME\.pid
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
else
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >$API_NAME.log 2>&1 &
echo $! > $PID
echo ">>> start $JAR_NAME successed PID=$! <<<"
fi
}
#停止方法
stop(){
#is_exist
pidf=$(cat $PID)
#echo "$pidf"
echo ">>> api PID = $pidf begin kill $pidf <<<"
kill $pidf
rm -rf $PID
sleep 2
is_exist
if [ $? -eq "0" ]; then
echo ">>> api 2 PID = $pid begin kill -9 $pid <<<"
kill -9 $pid
sleep 2
echo ">>> $JAR_NAME process stopped <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
else
echo ">>> ${JAR_NAME} is not running <<<"
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
exit 0
如果不输出日志 把 $API_NAME.log 改成 /dev/null
如果就是当前路径,就把target跟前面的路径删除,然后授权
chmod 777 run.sh
如果是docker部署,需要先安装docker,
参考文档:https://www.cnblogs.com/reasonzzy/p/11127296.html
然后自己编写Dockerfile文件,作者自己写的不能用,
他上面写的用的h2的数据库,构建的时候有问题,我们自己来写一个Dockerfile
#docker build -t mblog:latest . #docker run -d --name mblog-latest --restart=always -p 7100:7100 mblog:latest FROM openjdk:8-jdk-alpine EXPOSE 7100 ADD mblog-latest.jar /mblog-latest.jar ENTRYPOINT ["java","-jar","mblog-latest.jar"]
记得将这两个文件放在同一目录下
构建镜像
docker build -t mblog:latest .
运行容器
docker run -d --name mblog-latest --restart=always -p 7100:7100 mblog:latest
然后查看日志
docker logs 0adaa3b59654
出现项目访问地址说明启动成功了,
将docker中项目日志挂载在宿主机,需要自己改一下application.yml文件
修改内容
file: ./logs/mblog-latest.log
重新部署
docker run -d --name mblog-latest -v /app/mblog/logs:/logs/ -p 7100:7100 mblog:latest
查看日志
接下来,我们还可以配置nginx端口映射
拉取镜像
docker pull nginx
创建目录
mkdir -p /data/nginx/{conf,conf.d,html,logs}
创建配置文件nginx.conf
vim /data/nginx/conf/nginx.conf
文件内容
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name reasonzzy.cn; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://pic; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } upstream pic{ server localhost:7100; } }
修改内容说明
运行nginx容器
docker run --name mynginx -d -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/logs:/var/log/nginx -d docker.io/nginx
然后就可以通过域名访问你的项目了。
之前改的地方成功显示出来了。
阿里云ssl证书配置-nginx
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log; #日志存放目录
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 443 ssl;
server_name www.reasonzzy.cn; #你的域名
root /var/www/reasonzzy.cn; #前台文件存放文件夹,可改成别的
ssl_certificate cert/2728558_www.reasonzzy.cn.pem; #改成你的证书的名字
ssl_certificate_key cert/2728558_www.reasonzzy.cn.key; #你的证书的名字
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 / {
proxy_pass http://pic;
}
}
server {
listen 80;
server_name www.reasonzzy.cn; #你的域名
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
}
upstream pic{
server localhost:7100;
}
}
详情参考阿里云官方文档,有详细视频讲解
nginx证书部署文档: https://help.aliyun.com/document_detail/98728.html?spm=5176.2020520163.0.0.4292aFCtaFCthD