前言
一直想搭建一個屬于自己的博客,之前使用過Wordpress,但是覺得太笨重了,很多功能都不是自己需要的,然后有一天摸魚摸到了拾壹博客。感覺這個項目雖然功能少,但是基本上架子都有了,自己想要的功能可以一邊學習一邊實踐,就想從頭部署并且改造一下這個項目。同時,順便的,也把改造的過程記錄成博客沉淀下來。
后續(xù)的想法是:
- spring boot改造成spring cloud alibaba的分布式服務(wù);
- 使用netty + webrtc搭建視頻聊天室;
- 結(jié)合kubernets進行集群管理;
- 爬蟲 + hadoop集群進行數(shù)據(jù)統(tǒng)計分析展示;
- more
以及,歡迎光臨安心小站~
環(huán)境分析
1、需求軟件
- jdk1.8
- redis
- mysql
- elasticsearch
- nginx
- minio:作者使用的文件存儲方式有本地、七牛云、阿里云,但是個人更喜歡minio,本地管理并且可以搭建集群。
2、部署環(huán)境
服務(wù)器名稱 | 系統(tǒng) | 配置 | 安裝軟件 | 說明 |
---|---|---|---|---|
web服務(wù)器 | centos7.6 | 2核2G | nginx | 部署前端頁面 |
服務(wù)端服務(wù)器 | centos7.6 | 2核8G | jdk1.8、redis、mysql、elasticsearch | 部署后端服務(wù) |
配置部署環(huán)境
所有相關(guān)的工具暫時先放置到docker中,所以首先安裝docker與docker-compose
1、安裝docker
#自動化腳本安裝docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl daemon-reload
systemctl restart docker.service
#查看版本號
docker -v
#docker compose安裝
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#docker compose 授權(quán)
chmod +x docker compose
#查看版本號
docker-compose -version
2、安裝mysql-5.7
#docker鏡像拉取mysql
docker pull mysql:5.7
#正常情況下執(zhí)行
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
說真的,mysql裝了N次第一次遇到啟動失敗的情況。docker ps
下發(fā)現(xiàn)容器未啟動,執(zhí)行docker logs mysql
后發(fā)現(xiàn)報錯。
[root@centos30 mysql]# docker logs mysql
2022-11-14 02:52:54+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started.
2022-11-14 02:52:54+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.sZu8ONKkC5
mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
網(wǎng)上試了幾個方法不行,那么只能用魔法打敗魔法了,使用docker-compose啟動mysql。
#創(chuàng)建文件docker-compose-mysql.yml
vim docker-compose-mysql.yml
#文件內(nèi)容
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
environment:
MYSQL_ROOT_PASSWORD: root #設(shè)置root帳號密碼
ports:
- 3306:3306
volumes:
- /mydata/mysql/data/db:/var/lib/mysql #數(shù)據(jù)文件掛載
- /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件掛載
- /mydata/mysql/log:/var/log/mysql #日志文件掛載
#啟動docker-compose
docker-compose -f docker-compose-mysql.yml up -d
#開啟賬號遠程訪問權(quán)限
#查看所有用戶
SELECT * FROM USER;
#如果不存在 'root'@'%' 賬號則添加遠程登錄用戶
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#授權(quán)遠程連接
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
3、安裝redis
docker pull redis:6.0.6
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
各版本redis對應配置文件地址:http://download.redis.io/releases/
修改redis.conf
- 注釋掉 bind 127.0.0.1
- 修改 protected-mode 為 no
4、安裝minio
docker pull minio/minio
#掛載本地文件再配置Access和Secret密鑰
docker run -i -t -p 9000:9000 -p 9001:9001 --name minio -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" -v /mydata/minio/data:/data -v /mydata/minio/config:/root/.minio minio/minio server /data --console-address ":9001"
#ctrl + P + Q退出控制臺不退出應用
訪問:http://192.168.2.30:9001 查看控制臺
5、安裝elasticsearch + kibana
配置docker-compose文件
version: '3'
# 網(wǎng)橋es -> 方便相互通訊
networks:
es:
services:
elasticsearch:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原鏡像`elasticsearch:7.14.1`
container_name: elasticsearch # 容器名為'elasticsearch'
restart: unless-stopped # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器
volumes: # 數(shù)據(jù)卷掛載路徑設(shè)置,將本機目錄映射到容器目錄
- "./data:/mydata/elasticsearch/data"
- "./logs:/mydata/elasticsearch/logs"
- "./config/elasticsearch.yml:/mydata/elasticsearch/config/elasticsearch.yml"
# - "./config/jvm.options:/usr/share/elasticsearch/config/jvm.options"
environment: # 設(shè)置環(huán)境變量,相當于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
discovery.type: single-node
ES_JAVA_OPTS: "-Xmx512m -Xms512m"
ELASTIC_PASSWORD: "123456" # elastic賬號密碼
ports:
- "9200:9200"
- "9300:9300"
networks:
- es
kibana:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/kibana:7.14.1 # 原鏡像`kibana:7.14.1`
container_name: kibana
restart: unless-stopped
volumes:
- ./kibana/config/kibana.yml:/mydata/elasticsearch/kibana/config/kibana.yml
ports:
- "5601:5601"
depends_on:
- elasticsearch
links:
- elasticsearch
networks:
- es
執(zhí)行docker-compose -f docker-compose-elasticsearch.yml up -d
啟動
訪問:http://192.168.2.30:9200/ 查看es版本信息
http://192.168.2.30:5601/ 查看kibana
6、安裝nginx
#拉取nginx鏡像
docker pull nginx
#-v掛載到本地文件夾
docker run --name nginx -d -p 80:80 -p 443:443 -v /my/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/log:/var/log/nginx -v /home/nginx/cert:/etc/nginx/cert -v /home/nginx/conf.d:/etc/nginx/conf.d nginx
監(jiān)聽80的配置
server {
listen 80;
# listen [::]:80;
server_name 域名;
location / {
proxy_pass http://ip:port; # 本地程序代理
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;
}
}
配置ssl證書
server {
listen 443 ssl;
server_name blog.dinganwang.top;
ssl_certificate cert/dinganwang.top.pem;
ssl_certificate_key cert/dinganwang.top.key;
ssl_session_cache shared:SSL:1m;
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; #表示使用的TLS協(xié)議的類型。
ssl_prefer_server_ciphers on;
location ^~/ {
proxy_pass http://dinganwang.top/;
}
}
證書放在cert映射的文件夾下
PS:原來是沒有SSL證書的,配置好之后調(diào)試一直沒有反應,包括log也沒有打印,最后發(fā)現(xiàn)是443端口沒有映射?。?!
7、安裝jenkins
發(fā)布需要,先裝個jenkins
#首先要有java環(huán)境
#拉取鏡像
docker pull jenkins/jenkins:lts
#新建工作目錄
mkdir /home/jenkins
#給ID為1000的用戶添加操作權(quán)限
chown -R 1000:1000 /home/jenkins
#啟動
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:lts
#查看docker日志,在最下方找到初始密碼
#Please use the following password to proceed to installation:
docker logs jenkins
訪問:http://192.168.2.30:9090/
在彈出頁面輸入初始密碼,選擇推薦的插件安裝后等待插件安裝完成,最后注冊一個管理用戶就完成。正式發(fā)布jenkins的配置在下文再介紹。
8、端口總覽
端口號 | 說明 |
---|---|
3306 | mysql訪問端口 |
6379 | redis訪問端口 |
9000 | minio訪問端口 |
9001 | minio管理頁面 |
9200 | elasticsearch外部訪問端口 |
9300 | elasticsearch集群通訊端口 |
5601 | kibana管理頁面 |
80、443 | nginx監(jiān)聽端口 |
9090 | jenkins管理頁面(從8080映射) |
50000 | jenkins JNLP服務(wù)端口 |
啟動項目
1、后端項目
先通過jar包啟動,確定配置無誤。
編寫docker-compose啟動文件
- docker-compose.yml
version: '3'
services:
blog-server:
image: blog-server:latest # 指定基礎(chǔ)鏡像
container_name: blog-server # 容器名稱
privileged: true
restart: always # 自動啟動服務(wù)器炸了也沒事,重啟服務(wù)器自動啟動
volumes:
- "/mydata/workspace/blog/logs:/log" #日志掛載
- "/mydata/workspace/blog:/opt"
environment:
- "TZ=Asia/Shanghai"
ports:
- 1216:8800 #端口映射
- Dockerfile
FROM openjdk:8u212-jre
COPY blog-server.jar /project/blog-server.jar
ENTRYPOINT ["java", "-Xms1024m", "-Xmx2048m", "-XX:-UseGCOverheadLimit","-jar", "/opt/blog-server.jar", "--spring.profiles.active=app"]
- deploy.sh
#!/bin/bash
cd /mydata/workspace/blog
docker-compose down
docker rmi blog-server:latest
docker build -t blog-server .
docker-compose up -d
**chmod +x deploy.sh **給deploy.sh授權(quán)。
啟動jar包
- 先修改application.yml文件中各個工具的連接地址。
- 使用maven打包jar文件。
- jar包與docker-compose啟動文件放在同一文件夾下。
- 執(zhí)行 ./deploy.sh。
訪問http://192.168.2.30:1216/dingx/doc.html查看是否啟動成功
配置jenkins啟動
- 點擊系統(tǒng)管理,再點擊插件管理。在打開的頁面中點擊可選插件,安裝Maven Integration、Publish Over SSH,插件安裝后需重啟jenkins。
- 系統(tǒng)配置:一直下拉直到SSH Servers,配置目標服務(wù)器。因為jenkins是部署在docker中,雖然都是在 **192.168.2.30 **機器上,但是容器跟外部環(huán)境是隔離的,所以不能直接執(zhí)行Shell命令。
全局工具配置:自動安裝Maven、NodeJS(盡量在17以下,不然有插件會報錯)
- 點擊新建任務(wù)后,輸入任務(wù)名稱,選擇構(gòu)建一個maven項目,點擊確定。
- jenkins配置
源碼管理必然是git,Credentials憑據(jù)自行添加,類型使用 **Username with password **配置好gitee的用戶名密碼即可,當然也可以配置SSH登錄。
最后連接服務(wù)器配置。
PS:先寫在前面,遇到一個卡了兩小時的坑。Exec command內(nèi)填入:
mv /mydata/workspace/blog/shiyi-blog.jar /mydata/workspace/blog/blog-server.jar
sh /mydata/workspace/blog/deploy.sh
構(gòu)建成功
2、前端項目
本地打包發(fā)布
- 修改.env.production文件中訪問地址。
- 在項目中運行 npm run build 進行打包,打包文件放到nginx下的html文件夾中。
PS:管理端頁面運行的時候異常,修改babel.config.js文件下的presets。不保證適用于任何人,沒準都沒報錯呢。
presets: [
[ "@vue/app", { useBuiltIns: "entry" } ]
],
- 高版本nginx配置nginx.conf,直接在conf.d文件夾下新建blog.conf
server {
#監(jiān)聽80端口
listen 80;
server_name blog.dinganwang.top;
gzip on;
gzip_comp_level 3;
gzip_min_length 1k;
gzip_vary on;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml image/jpeg image/gif image/png application/javascript;
#access_log /var/log/nginx/host.access.log main;
client_max_body_size 500M;
# web端
location / {
root html/web;
index index.html index.htm;
}
# 管理端
location ^~/admin {
alias html/admin;
index index.html index.htm;
}
location ^~/blog {
index doc.html;
proxy_pass 代理的后端接口地址; # 本地程序代理
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;
}
}
- 直接訪問。
配置jenkins發(fā)布
- 如果是初次發(fā)布請選擇構(gòu)建一個自由風格的軟件項目,否則直接復制。
2. 配置環(huán)境
Builds Steps的不同腳本
web
echo "----------------start install and build------------------"
rm -rf dist
npm cache clear --force
npm config set registry http://registry.npm.taobao.org
npm install
npm run build
mv dist blogweb
tar -zcvf blogweb.tar.gz blogweb
rm -rf blogweb
rm -rf node_modules
echo "----------------start send files and unpackage------------------"
admin文章來源:http://www.zghlxwxcb.cn/news/detail-401174.html
echo "----------------start install and build------------------"
rm -rf dist
npm config set registry http://registry.npm.taobao.org
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
npm install --no-optional --no-shrinkwrap --no-package-lock
npm run build
mv dist blogadmin
tar -zcvf blogadmin.tar.gz blogadmin
rm -rf blogweb
rm -rf node_modules
echo "----------------start send files and unpackage------------------"
最終成果
文章來源地址http://www.zghlxwxcb.cn/news/detail-401174.html
到了這里,關(guān)于拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!