从0开始搭建博客

1. 概述

本篇博客,我教大家从0开始搭建一个 bolo博客,bolo 博客 和 solo 博客的区别是皮肤更加多,并且可以帐号密码登录。

本篇博客主要的内容如下:

  • linux 安装 docker,设置docker镜像加速
  • docker 安装 nginx
  • docker 的一些常用的命令
  • docker 安装 mysql 数据库
  • docker 安装 solo 博客
  • nginx 配置 https 证书

1.1 涉及技术

本篇博客,将会使用到一下的相关知识:

  • dokcer
  • mysql
  • 阿里云服务器
  • nginx
  • https
  • java
  • ...

2. docker

首先,我们需要购买一台阿里云的服务器,然后,就开始安装服务器的基本软件了,因为 solo 博客、mysql、nginx 等软件的安装都依赖 docker,所以,我们的第一步就是安装 docker 容器。

2.1 docker 的安装

因为系统是我们刚买的 ecs,所以无需像网上一样,yum 卸载 docker。

设置 docker 安装镜像,如果不设置的话,docker 安装起来会特别的慢。

sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

这里我使用的是阿里云的镜像源

安装 docker

yum install docker-ce docker-ce-cli containerd.io

启动 docker

systemctl start docker

运行 docker hello world

docker run hello-world

2.2 设置 docker 的镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。这里我使用的镜像加速使用的是阿里云的。

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:

阿里云镜像

配置阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://zoi3dt5d.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3. nginx

3.1 安装 nginx

这里的 nginx 我采用的是 docker 安装,因为需要 nginx 配置域名的 https,因此,我们需要把 nginx 的配置文件挂载在主机目录

docker run -d --name nginx -p 80:80 -p 443:443 \
-v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/logs:/var/log/nginx \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/conf:/etc/nginx/conf.d \
-v /opt/nginx/ssl:/root/ssl \
--privileged=true \
nginx

下面,我来解释下个参数的意义:

  • -d:后台运行 nginx 容器
  • --name nginx:指定 nginx 的容器名为 nginx
  • -p 80:80:将容器的 80 端口映射到主机 80 端口,ps:前面的端口为主机端口
  • -p 443:443:将容器的 443 端口映射到主机 443 端口, ps:443端口为 https 端口,后续配置 https 我们将使用到这个端口
  • -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf:将 nginx 的配置文件映射到主机,ps:前面为主机目录,后面为 nginx 的容器目录
  • -v /opt/nginx/logs:/var/log/nginx:将 nginx 的日志文件映射到主机
  • -v /opt/nginx/html:/usr/share/nginx/html:将 nginx 的 html 静态文件映射到主机
  • -v /opt/nginx/conf:/etc/nginx/conf.d:将 nginx 的配置文件夹映射到主机
  • -v /opt/nginx/ssl:/root/ssl:将 主机的 ssl https 密匙,映射到 nginx 的 /root/ssl 目录
  • --privileged=true :容器用户运行 root 权限

我们可以使用一下的一些命令,查看容器的运行情况:

  • docker ps :查看正在运行的容器,如果 nginx 运行成功了,这里会显示 nginx 的容器
  • docker exec -it nginx /bin/bash :进入 nginx 容器里面,查看容器内部的运行情况
  • docker stats:查看容器的基本内存、cpu占用情况
  • docker logs nginx:查看 nginx 容器运行的日志

3.2 docker 的一些命令

下面是以上的一些命令的截图:

4. mysql

4.1 安装 mysql

为了简单方便,我这里安装 mysql 的方式是采用 dokcer 安装。

docker run -d --name mysql -p 3306:3306 \
-v /opt/mysql/conf.d:/etc/mysql/conf.d \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=我的密码 \
mysql

以下是相关命令解释:

-p 3306:3306:将容器的 3306 端口映射到主机

-v /opt/mysql/conf.d:/etc/mysql/conf.d:将 mysql 的配置文件映射到主机

-v /opt/mysql/data:/var/lib/mysql:将 mysql 的数据文件映射到主机

-e MYSQL_ROOT_PASSWORD=我的密码: 设置 mysql root 密码

4.2 mysql 允许外网访问

进入 mysql 容器

docker exec -it mysql /bin/bash

登录 mysql

mysql -uroot -p

设置 root 可外网访问

GRANT ALL ON *.* TO 'root'@'%'; 
flush privileges; 

开放阿里云服务的 3306 端口,使用 Navicat 进行连接吧!

5. bolo

5.1 安装 git

yum install git

5.2 拉取源码

git clone https://github.com/adlered/bolo-solo.git

如果拉取的速度很慢,可按照我下面的方式,设置一个镜像:

浏览器下载一个 GitHub 加速的插件,下载完成后刷新页面,GitHub页面会变成下面:

选择合适的镜像,下载即可,

下载完成后,修改 .git/config

5.3 构建镜像

我们是需要 https 访问的,所以需要做如下的操作:

前往项目根目录下 src/main/resources目录,编辑 latkes.properties文件,将 http修改为 https,即可使用 https 访问。

进入项目根目录,执行一下的命令

docker build -t "bolo" .

5.4 运行 bolo

运行下面的脚本

docker run -it -d -p8080:8080 \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="**" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://172.18.0.24:3306/bolo_blog?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
--rm \
bolo --listen_port=8080 --server_scheme=https --server_host=blog.booleandev.xyz

参数解释:

-p8080:8080:容器与主机的端口映射

--env RUNTIME_DB="MYSQL": 数据库

--env JDBC_USERNAME="root": 数据库用户名

--env JDBC_PASSWORD="**" :数据库密码

--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver":数据库驱动

--env JDBC_URL="jdbc:mysql://172.18.0.24:3306/bolo_blog?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC":数据库链接

--listen_port=8080:bolo容器监听端口

--server_scheme=https:http or https

--server_host=blog.booleandev.xyz:域名

5.5 相关解释

相信大家注意到,bolo 连接的数据库链接为 172.18.0.24,而不是 127.0.0.1,这是为什么呢?

因为 bolo 博客和主机运行的不是一个网络,所以无法通过 127.0.0.1 进行访问,容器和宿主机的网络通信是桥接,那么宿主机和docker会有两个网卡,eth0和docker0,docker0是容器之间的一个路由,eth0是宿主机的ip路由,两个路由可以直接通信,所以,只要找到宿主机的eth0网卡即可。

下面是我的网卡信息:

[root@booleandev .git]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255inet6 fe80::42:51ff:fe42:367d  prefixlen 64  scopeid 0x20<link>ether 02:42:51:42:36:7d  txqueuelen 0  (Ethernet)RX packets 453368  bytes 233613690 (222.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 496030  bytes 492850722 (470.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.18.0.24  netmask 255.255.240.0  broadcast 172.18.15.255inet6 fe80::216:3eff:fe02:edf2  prefixlen 64  scopeid 0x20<link>ether 00:16:3e:02:ed:f2  txqueuelen 1000  (Ethernet)RX packets 1798448  bytes 2109780912 (1.9 GiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 632237  bytes 320525103 (305.6 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 372  bytes 73305 (71.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 372  bytes 73305 (71.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0veth1376aef: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet6 fe80::30c7:fdff:fe57:22fd  prefixlen 64  scopeid 0x20<link>ether 32:c7:fd:57:22:fd  txqueuelen 0  (Ethernet)RX packets 41327  bytes 41068253 (39.1 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 38087  bytes 35132337 (33.5 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

因此,solo 容器需要访问数据库,只需要使用 eth0地址即可

5.6 验证 solo 部署成功

以上,solo 的本地部署就完成了,所以我们需要验证下是否部署成功,使用

curl 127.0.0.1:8080

如果出现了 html,则说明部署成功了

如果出现相应的错误的话,则只需要 dokcer run 时,把 -d 参数去除,即可以看到错误信息

6. https

6.1 申请 https 证书

https 证书一般可以到你购买域名的位置申请即可。我这里使用的是腾讯云生成的证书,下载完文件后,出现以下几个文件:

因为我们采用 nginx,所以只需要把 Nginx 下的两个文件移到 nginx 的映射目录 /opt/nginx/ssl 下即可

6.2 配置 nginx

修改 /opt/nginx/nginx.conf


user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;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;keepalive_timeout  65;#gzip  on;# 为了避免文件过长,将其它的配置包含进来include /etc/nginx/conf.d/*.conf;
}

编写 /opt/nginx/conf/blog.conf

server {listen       443 ssl http2;server_name  blog.booleandev.xyz;ssl_certificate      /root/ssl/1_blog.booleandev.xyz_bundle.crt;ssl_certificate_key  /root/ssl/2_blog.booleandev.xyz.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;# 文件目录location / {proxy_pass http://172.18.0.24:8080;  # 内网IPproxy_set_header HOST $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_set_header X-Forwarded-Scheme $scheme;}
}
server {listen 80;server_name blog.booleandev.xyz;return      301 https://$server_name$request_uri;
}

6.3 修改域名解析

域名解析添加一个 A 记录,我这里使用的是腾讯云的域名,配置页面大致如下:

7. 成功

输入 https://blog.booleandev.xyz,即成功!

博客

8. 参考文章

  • CentOS Docker 安装
  • Docker 镜像加速
  • 使用docker安装nginx
  • docker搭建的nginx代理宿主机服务
  • Docker 安装 MySql
  • 方法② 传统 Docker 方式安装菠萝博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/742386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OI 之后的故事 ~After Story~

回归综合 NOI 2023 后,理所当然是回归文化课的学习。 一开始,我惊讶地发现凭借学 OI 期间打下的数学基础及平时阅读英文题面积累的词汇量,我的数学和英语似乎还不错。 最头痛的无疑是语文和物理了。前者属于是玄学,你想到的点答案不一定有;对于后者,计算大题做一道错一道…

CF1936D. Bitwise Paradox-位运算、分治、线段树

link:https://codeforces.com/contest/1936/problem/D 题意:给两个长度为 \(n\) 的序列 \(a\) 和 \(b\),对一个区间 \([l,r]\),称 \([l,r]\) 是好的,若:\((b_l|\dots|b_r)\geq v\)。一个区间的 美丽值 定义为区间内 \(a\) 的最大值。现在有 \(q\) 个操作:1、\(b_i\to x\…

去哪儿故障定位

https://mp.weixin.qq.com/s/9f9PUUy8c-GCJLa0deIvuA

Cilium DSR 特性(转载)

Cilium DSR 特性Cilium DSR(转载) 一、环境信息主机 IPubuntu 10.0.0.234软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0kubernetes 1.23.4ubuntu os Ubuntu 22.04.6 LTSkernel 5.15.0-106 内核升级文档使用 5.11.5 内核版本的 20.04 版本,发起 curl 请求无法代理到 p…

上传恶意代码服务器和数据库的操作

在通过访问端对服务器上传一句话木马的时候,我们需要对服务器进行部分操作: 1.打开服务器远程目录权限: (1)在windows服务器上,将文件夹的只读方式去掉; (2)在linux服务器上,将文件夹的权限改为pwd 2.开启数据库secure_file_priv权限 (1)我这里使用的是mysql5.7.2…

Zabbix 5.0 LTS URL 健康监测

更多细节详情看【zabbix官方文档】 需求 Zabbix 的URL健康监测功能允许你检测 Web 地址是否可用、正常工作以及响应速度。这对于监控网站的可用性和性能非常有用。例如,你可以监控公司网站、API 端点或其他关键服务的 URL。【官方表述 Web monitoring items】【官方表述 Trigg…

idea 修改 git 提交用户名

本项目 修改配置文件 修改当前项目目录下的 config 文件添加以下数据[user]name = **email = **@gmail.com全局修改 git config --global user.name gitlab注册用户名 git config --global user.email gitlab注册邮箱

ChatMoney,你的就业指导明灯

本文由 ChatMoney团队出品介绍说明 Hey!亲爱的小伙伴们,今天我要给大家带来一个职场利器——AI就业指导机器人!🤖 在这个充满变数的职场江湖,找到一份既能养家糊口又能实现自我价值的工作是多么重要。但是,职业道路上的选择和决策并不总是那么容易。有时候,我们需要的不…

AI就业指导机器人,你的专属职业导航灯!

本文由 ChatMoney团队出品介绍说明 Hey!亲爱的小伙伴们,今天我要给大家带来一个职场利器——AI就业指导机器人!🤖 在这个充满变数的职场江湖,找到一份既能养家糊口又能实现自我价值的工作是多么重要。但是,职业道路上的选择和决策并不总是那么容易。有时候,我们需要的不…

IDEA工具使用Git回滚代码

回滚已经commit但未push到远程仓库的代码点击git,然后右键选择你要退回的那条记录,选择undo commit(撤销提交) ,代码回滚就完成了! 此操作只是回滚,并不会删除你的操作内容回滚已经push到远程仓库的代码1. 先回滚提交到本地仓库的代码选择需要回滚到那个版本的提交记录,右键…

转-Java 异常处理的 20 个最佳实践,你知道几个?

‍ 作  者:武培轩 出  处:https://www.cnblogs.com/wupeixuan 原文链接:https://www.cnblogs.com/wupeixuan/p/11746117.html 异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java 提供了几个异常处理特性,以…

vue 混合方法mixins 协可以写入公共的方法

新建一个文件夹mixins 同views 同级export default {data() {return {};},mounted() {},methods: {// 修改标题方法ready(callback) {// 如果 jsbridge 已经注入则直接调用if (window.AlipayJSBridge) {callback && callback();} else {// 如果没有注入则监听注入的事…