一、前言
哈咯大家好,这篇文章将讲述我在云服务器上搭建个人博客系统(也就是你访问的这个网站)的完整过程,分享其中的心路历程和宝贵经验,希望能为有类似需求的朋友提供一些参考和启发。话不多说!Let’s go!
二、云服务器
我这里选择的是阿里云的服务器,因为阿里云有一个优惠套餐,99元即可购买一台为期一年的云服务器,作为个人学习还是非常实惠的。
1. 购买云服务器
选择 “产品” -> “云服务器ECS”

下滑找到对应产品

根据需求可以选”地域”、”镜像”关键信息,其他默认即可

2. 登录实例
购买完成后,可在控制台搜索ECS跳转到”云服务器ECS”管理界面


记得切换地域(购买服务器选择的地域),依次点击”实例” -> 选择你的实例ID

重置密码后通过公网IP即可使用ssh工具远程连接。
Tips:记得保存用户名和密码,用于后续连接使用,用户名一般为”root”,尽量不要使用弱密码。

我ssh工具使用的是xshell,这里就用xshell为例
“名称” 自定义即可
“协议” 选择SSH
“主机” 填写你的公网IP
“端口” 一般默认都是22
填完这些信息后,选择 “用户身份验证” ,填写用户名和密码就可以远程连接服务器啦~


3. 优化服务器
下载常用软件
# yum -y install net-tools vim tree htop iftop \
ntpdate bash-completion.noarch bash-completion-ext \
lrzsz netcat telnet
关闭Selinux
# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
调整单个进程最大能打开文件的数量
# echo '* - nofile 65535' >> /etc/security/limits.conf
时间同步
# crontab -e
*/15 * * * * ntpdate ntp.aliyun.com
PS1变量
# vim /etc/profile.d/ps1.sh
#!/bin/bash
export PS1="\[\e[35;1m\][\u@\h \W]#\[\e[0m\] "
# source /etc/profile.d/ps1.sh
修改主机名。根据需求修改云服务器的主机名
# hostnamectl set-hostname hostnamectl
创建特权账户
# groupadd techsphere
# useradd -g techsphere techsphere
# passwd techsphere
# vim /etc/sudoers.d/techsphere
techsphere ALL=(ALL:ALL) ALL
修改SSH端口,大概在17行,取消”Port 22″的注释,并将”22″改为”9999″
# vim /etc/ssh/sshd_config
Port 9999
修改连接端口、用户和密码


三、部署Docker
创建docker下载目录
# mkdir -p /data/docker-download/
下载软件包
# cd /data/docker-download/ && wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.24.tgz
创建安装目录
# mkdir -p /jiang/softwares/
解压软件包到安装目录
# tar xf /data/docker-download/docker-20.10.24.tgz -C /jiang/softwares
创建软连接
# ln -svf /jiang/softwares/docker/* /usr/bin/
配置镜像加速
# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://<changme>.mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
],
"data-root":"/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"]
}
创建数据目录
# mkdir /data/docker
配置开机自启
# vim /usr/lib/systemd/system/docker.service
[Unit]
Description=JiangYang linux CentOS Docke Engine
Documentation=https://docs.docker.com
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
[Install]
WantedBy=multi-user.target
启动docker
# systemctl daemon-reload
# systemctl enable --now docker
查看版本以验证是否安装成功
# docker --version
Docker version 20.10.24, build 297e128
四、部署WordPress
创建网络
# docker network create wordpress
运行MySQL
# docker run --name wordpress-db \
--restart=always --network=wordpress \
-v /data/mysql-3306/data:/var/lib/mysql \
-v /data/mysql-3306/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=2025@mysql \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_TCP_PORT=3306 \
-e TZ=Asia/Shanghai -p 3306:3306 \
-e LANG=C.UTF-8 \
-d registry.cn-shanghai.aliyuncs.com/jiangyang-docker/mysql:8.0.35 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-authentication-plugin=mysql_native_password \
--bind-address=0.0.0.0
创建数据库
# docker exec -it wordpress-db bash
# mysql -uroot -p2025@mysql
> create database wordpress_prod;
> create user 'wordpress_prod'@'%' identified by '2025@wordpress';
> grant all on *.* to 'wordpress_prod'@'%';
> flush privileges;
> exit;
> exit;
运行WordPress
docker run --name wordpress \
--restart=always \
-v /data/wordpress:/var/www/html \
-p 8080:80 --network=wordpress \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/localtime:/etc/localtime:ro \
-d wordpress:6.7.2-php8.3-apache
修改连接数据库信息
# cd /data/wordpress
# cp wp-config-sample.php wp-config.php
# vim wp-config.php
......
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress_prod') );
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'wordpress_prod') );
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', '2025@wordpress') );
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'wordpress-db:3306') );
......
修改以上信息后保存退出
查看公网IP

配置安全组


配置如图所示
“端口范围” 根据你Wordpress的端口而定,如果你映射的端口为8080则这里也填写8080
“授权对象” 这里填写的是你的公网IP

页面访问
http://<ECS实例公网IP:WordPress宿主机端口>/wp-admin


安装完成后,单击”登录”,在登录界面输入用户名和密码登录即可
发布文章
在左侧菜单栏单击”文章“,并在”文章”页面单击”写文章”,开始编写你的第一篇博客

编写完成后单击发布

五、监控告警
我这里列举了两种方式,一种是通过部署
Prometheus、Grafana、node-exporter、mysql-exporter的方式监控我们的服务;也可以通过阿里云的方式来实现,阿里云的监控告警相对简单些。
1. 部署node-exporter数据采集
启动
node-exporter容器
docker run -d --name=node-exporter \
--restart=always \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
-v /etc/localtime:/etc/localtime:ro \
prom/node-exporter
访问
curl http://192.168.4.12:9100/metrics
2. 部署mysql-exporter
启动
mysql-exporter容器
docker run -d --name mysql-exporter \
--restart=always -p 9104:9104 \
-v /data/prometheus/mysql-exporter/.my.cnf:/.my.cnf \
-e DATA_SOURCE_NAME="root:s6kL#cf9MeI5E@ssOKZSqg@(172.23.31.173:3306)/" \
-v /etc/localtime:/etc/localtime:ro \
registry.cn-shanghai.aliyuncs.com/jiangyang-docker/mysqld-exporter:latest
访问
curl http://192.168.4.12:9104/metrics
二、部署Prometheus 监控
1、编写配置文件
# vim /data/prometheus/config/prometheus.yml
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['172.23.31.173:9090']
labels:
instance: 172.23.31.173
- job_name: node_exporter
static_configs:
- targets: ['172.23.31.173:9100']
labels:
instance: 172.23.31.173
- job_name: mysqld
static_configs:
- targets: ['172.23.31.173:9104']
labels:
instance: 172.23.31.173
2、启动容器
docker run -d --name=prometheus \
-v /data/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
--restart=always \
-p 9090:9090 \
-v /etc/localtime:/etc/localtime:ro \
prom/prometheus
3、访问
http://192.168.4.12:9090
http://192.168.4.12:9090/graph
http://192.168.4.12:9090/targets

三、部署Grafana可视化工具
1、创建数据目录
# mkdir /data/grafana
# chmod 777 /data/grafana
2、启动容器
docker run -d --name=grafana \
-v /data/grafana:/var/lib/grafana \
--restart=always \
-p 3000:3000 \
-v /etc/localtime:/etc/localtime:ro \
grafana/grafana
3、页面访问
http://123.57.244.133:3030
admin
admin
4、汉化

5、添加数据源



6、创建node-exporter dashboard



7、创建mysql dashboard

