Linux 搭建 Blog

学习笔记 ·

本博客第一篇文章~ 介绍搭建 SpringBoot + Vue 前后端分离博客的过程。 在此鸣谢 Naccl 的开源项目。

前置准备:Linux服务器、域名

1.安装docker

1.安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.设置阿里云docker-ce镜像

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

3.安装docker-ce

yum install -y docker-ce

4.启动docker

#启动docker
systemctl start docker
#开机自启
systemctl start docker
#查看docker版本
docker -v

如果出现版本号则证明安装成功。

5.配置国内镜像源

如果未配置国内镜像源会导致拉取镜像超时。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.安装Mysql

1.拉取5.7版本mysql镜像

docker pull mysql:5.7

2.启动Mysql容器

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:5.7

3.开启Mysql远程连接

#进入容器
docker exec -it mysql bash
#输入账号密码
mysql -uroot -ppassword
#开启远程权限
alter user 'root'@'%' identified with mysql_native_password by 'password';
#刷新权限
flush privileges;

3.安装Redis

#拉取镜像
docker pull redis
#启动容器
docker run -d --name redis -p 6379:6379 redis --requirepass "password"

4.安装Nginx

#拉取镜像:docker pull nginx

# 创建挂载目录
mkdir -p /mnt/nginx/conf
mkdir -p /mnt/nginx/log
mkdir -p /mnt/nginx/html
mkdir -p /mnt/nginx/ssl
# 生成容器
docker run --name nginx -p 80:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /mnt/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /mnt/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html/ /mnt/nginx/
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
#运行容器
docker run -p 80:80 -p 443:443 --name nginx \
    -v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d \
    -v /mnt/nginx/log:/var/log/nginx \
    -v /mnt/nginx/html:/usr/share/nginx/html \
    -v /mnt/nginx/ssl:/etc/nginx/ssl \
    -d nginx:latest

5.搭建SSL证书

1.申请免费证书

2.下载Nginx证书并上传至服务器

3.配置nginx.conf文件

# view配置
server {
 listen 443 ssl;
 server_name criesa.cn www.criesa.cn; 
 ssl_certificate /etc/nginx/ssl/criesa.cn_bundle.crt; 
 ssl_certificate_key /etc/nginx/ssl/criesa.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.2 TLSv1.3;
 ssl_prefer_server_ciphers on;
 if ($host = 'www.criesa.cn') {
        return 301 https://criesa.cn$request_uri;
 }
 location / {
	root   /usr/share/nginx/html/view;
	index  index.html index.htm;
	try_files $uri $uri/ /index.html;
 }
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
	root   /usr/share/nginx/html;
 }
}

# api配置
server {
 listen 443 ssl;
 server_name api.criesa.cn; 
 ssl_certificate /etc/nginx/ssl/api.criesa.cn_bundle.crt; 
 ssl_certificate_key /etc/nginx/ssl/api.criesa.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.2 TLSv1.3;
 ssl_prefer_server_ciphers on;
 location / {
	root   /usr/share/nginx/html;
	index  index.html index.htm;
 }
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
	root   /usr/share/nginx/html;
 }
 location /blog/ {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://124.220.33.109:8090/;
    }
}

# crm配置
server {
 listen 443 ssl;
 server_name admin.criesa.cn; 
 ssl_certificate /etc/nginx/ssl/admin.criesa.cn_bundle.crt; 
 ssl_certificate_key /etc/nginx/ssl/admin.criesa.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.2 TLSv1.3;
 ssl_prefer_server_ciphers on;
 location / {
	root /usr/share/nginx/html/crm;
    index index.html index.htm;
	try_files $uri $uri/ /index.html;
 }
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
	root   /usr/share/nginx/html;
 }
}
server {
 listen 80;
 server_name *.criesa.cn; 
 return 301 https://$host$request_uri; 
}

6.部署后端服务

1.构建镜像

1.打jar包并上传至服务器

2.配置dockerfile

FROM openjdk:8 
MAINTAINER criesa <criesa@163.com> 
ADD ./blog-api.jar /app.jar 
ENTRYPOINT ["java", "-jar", "/app.jar"]

3.构建docker镜像

docker build -f ./blog_dockerfile -t app .

2.服务编排

1.安装dockerCompose

#下载 Docker Compose 的可执行文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" 
-o /usr/local/bin/docker-compose
#授予可执行权限
sudo chmod +x /usr/local/bin/docker-compose

验证安装

docker-compose --version

这里发现下载下来的docker-compose被错误的HTML文件所替代,删除掉重新下载。

#删除docker-compose
sudo rm /usr/local/bin/docker-compose

再次查看版本,出现版本号,成功。

2.使用dockerCompose编排项目

创建docker-comnpose目录

mkdir /mnt/docker/docker-compose

编写 docker-compose.yml 文件

version: '3'
services:
  app:
    image: app
    container_name: nblog
    restart: always
    network_mode: bridge
    ports:
      - "8090:8090"
        volumes:
            - /home/nblog/logs:/logs

启动容器

docker-compose up -d

查看启动日志

docker logs -f nblog

7.部署前端项目

前端项目只需打包后上传至nginx挂载的html目录下并配置nginx即可。

#进入nginx容器
docker exec -it nginx /bin/bash
#重载nginx配置
nginx -s reload
  • SpringBoot
  • Vue
  • Linux
  • docker