侧边栏壁纸
博主头像
lukeewin的博客博主等级

行动起来,活在当下

  • 累计撰写 10 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CentOS7.9搭建网站

Administrator
2024-09-13 / 0 评论 / 0 点赞 / 21 阅读 / 18432 字 / 正在检测是否收录...

0. 准备工作

想要部署一个博客,你需要准备云服务器,域名,SSL证书,其中这里SSL证书,我会使用acme.sh方式免费白嫖zeroSSL的证书,并且可以自动续期。

在云服务器方面,选择很广,你如果是学生,推荐选择阿里云云服务器,对学生有很大的优惠力度,但是我第一台云服务器就是阿里云的轻量级云服务器,当时租一年是114元。如果你是非学生,那么你可以选择莱卡云云服务器,在相同的价格中,能租到性能更好的云服务器。我下面就是选择的莱卡云云服务器。

域名,这里我是很多年前在阿里云的万网中租的域名,而DNS是在腾讯云这边,所以域名备案也是在腾讯云这边进行的。这里需要说明一点,如果你绑定的云服务器在国内大陆地区,都需要先备案,才能进行DNS

下面说一下如何选择莱卡云云服务器,如果你不需要,可以跳过。如果你不想要备案也可以考虑vultr,这是一家支持使用支付宝支付的海外云服务器供应商,可选的节点很多,如果需要可以点击这里进行注册

点击这里跳转到莱卡云官方网站

image-20240913170328944

如果你面向的用户群体是国内大陆地区,那么你可以点击上图中的“国内云服务器”。

然后根据自己地理位置,价格等等选择一款符合自己需求的云服务器,我这里选择的是浙江电信云中的宁波电信云

image-20240913170655365

点击“前往选购”会跳转到配置页面,选择你需要的配置,如果是部署博客,不需要选择太高的配置,这里我推荐选择2核心4GB运行内存10MB带宽50GB存储空间的云服务器就够用了。这里可以选择一个月一个月来租,也可以直接租一年,这里推荐直接租一年,因为租一年会给你减免两个月的费用,目前我这边看到的是这样的,如果你现在看到,也有可能优惠政策又不一样了。

下面我列举一下服务器配置对应的价格

| 地区 | 配置 | 价钱 | 链接 |
| ———– | ——————————– | ———- | ———————————————————— |
| 宁波电信云 | 2核4GB运行内存10MB带宽50GB主硬盘 | 1/月 38¥ | 点击跳转 |
| 宁波电信云 | 2核4GB运行内存10MB带宽50GB主硬盘 | 1/年 380¥ | 点击跳转 |
| 镇江电信云 | 2核4GB运行内存10MB带宽50GB主硬盘 | 1/年 580¥ | 点击跳转 |
| 中国香港CN2 | 1核1GB运行内存3MB带宽30GB主硬盘 | 1/年 420¥ | 点击跳转 |
| 美国CN2 | 2核1GB运行内存10MB带宽30GB主硬盘 | 1/年 385¥ | 点击跳转 |

1. 安装Nginx

更新系统依赖列表

yum -y update

执行上面命令提示下面内容

Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

需要执行下面命令解决

yum -y install deltarpm

安装系统依赖

yum -y install gcc gcc-c++ libstdc++-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel

下载源码并进入源码

wget https://nginx.org/download/nginx-1.26.2.tar.gz && tar -zxvf nginx-1.26.2.tar.gz && cd nginx-1.26.2

执行配置并编译安装

./configure --prefix=/usr/local/nginx/ --with-http_ssl_module --with-stream --with-threads --with-file-aio --with-poll_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_slice_module && make -j 4 && make install

安装vim

yum install -y vim

创建系统服务

vim /etc/systemd/system/nginx.service
```shell
[Unit] 
Description=nginx 
After=network.target 

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
```shell
# 编辑了/etc/systemd/system/下的内容需执行下面语句
systemctl daemon-reload
# 启动
systemctl start nginx
# 查看状态
systemctl status nginx
# 设置开机自启
systemctl enable nginx

如果还没安装firewalld,可以使用下面命令安装

yum install -y firewalld

安装好后,使用下面命令启动防火墙

systemctl start firewalld

但是你会得到一个警告,那么可以修改下面文件

vim /etc/firewalld/firewalld.conf

搜索AllowZoneDrifting=yes,把它改为AllowZoneDrifting=no

最后记得重启防火墙

systemctl restart firewalld

现在就没有了那个警告了

开放防火墙端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

然后现在我们来访问一下,在浏览器地址栏中输入你服务器的ip或者域名,就可以访问了,如下图所示。

image-20240908185345304

2. 安装MySQL

这里采用源码编译方式安装,这里源码编译安装企业用的最多的MySQL5.7

安装前的准备

# 卸载默认的数据库
rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
# 如果以前安装过 MySQL,先卸载干净
rpm -qa|grep mysql
rpm -e --nodeps mysql-*
# 删除配置文件
rm -rf /etc/my.cnf
cd /etc/init.d/
rm -rf mysql*

下载并解压源码

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz && tar -zxvf mysql-5.7.44.tar.gz && cd mysql-5.7.44

安装之前需要先安装以下系统依赖

yum install -y gcc gcc-c++ cmake libaio-devel ncurses ncurses-devel bison openssl-devel

创建目录,用于保存cmake产生的文件

cd /usr/local/src/mysql-5.7.44
mkdir build && cd build

执行配置,指定mysql.socket的位置

cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost -DWITH_INNODB_MEMCACHED=ON

如果不想要指定位置,可以使用下面命令,通常mysql.socket默认位置在/tmp/mysql.sock或者/var/run/mysqld/mysqld.sock

cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DMYSQL_TCP_PORT=3306 -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost -DWITH_INNODB_MEMCACHED=ON

注意:如果执行cmake失败了,把build目录删除,然后重新创建build目录,并且进入到build目录中,然后重新执行上面的cmake命令

创建用户组和用户

groupadd mysql
useradd -r -g mysql -M -s /sbin/nologin mysql

编译安装

make -j 4 && make install

配置权限

mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/tmp
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql

创建配置文件

vim /etc/my.cnf

写入下面内容

[client]
port=3306
socket=/usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
bind-address=0.0.0.0
user=mysql
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
tmpdir=/usr/local/mysql/tmp
pid-file=/usr/local/mysql/data/mysqld.pid
log-error=/usr/local/mysql/data/error.log
socket=/usr/local/mysql/data/mysql.sock
default-storage-engine=innodb
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
ssl-cipher=TLSv1.2

对上面配置的解释

bind-address 设置允许访问的地址,设置为 0.0.0.0 表示任何地址都可以连接到数据库
user 指定用哪个用户运行 MySQL
port 指定运行的端口
basedir 指定 MySQL 的安装位置,这个要与上面 cmake 中 -DCMAKE_INSTALL_PREFIX 指定的一致
datadir 保存 数据库 文件的路径,这个要与上面 cmake 中 -DMYSQL_DATADIR 指定的一致
socket 的值要与 cmake 中 -DMYSQL_UNIX_ADDR 指定的值一致

到这里数据库就已经安装好了,下面我们需要初始化数据库

/usr/local/mysql/bin/mysqld --initialize-insecure --explicit_defaults_for_timestamp --user=mysql

注册为系统服务

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
cp /usr/local/mysql/bin/mysqld /etc/init.d/
chmod +x /etc/init.d/mysql

启动服务及查看状态

/etc/init.d/mysql start
/etc/init.d/mysql status
/etc/init.d/mysql stop
service mysql start
service mysql status
service mysql stop

设置环境变量

vim /etc/profile
```shell
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
```shell
source /etc/profile

设置开机自启

vim /etc/systemd/system/mysql.service
```shell
[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=forking
PermissionsStartOnly=true
PIDFile=/usr/local/mysql/data/mysqld.pid
ExecStartPre=/etc/init.d/mysql restart
ExecStart=/etc/init.d/mysql start
TimeoutSec=600
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
```shell
systemctl daemo-reload
systemctl enable mysql

设置MySQL密码

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY  'new_password';
flush privileges;

3. 安装JDK

下载源码

wget https://download.oracle.com/java/17/archive/jdk-17.0.11_linux-x64_bin.tar.gz

解压

mkdir -p /usr/local/jdk && tar -zxvf jdk-17.0.11_linux-x64_bin.tar.gz -C /usr/local/jdk

配置环境变量

vim /etc/profile

在文件末尾添加下面内容

export JAVA_HOME=/usr/local/jdk/jdk-17.0.11
export PATH=$PATH:$JAVA_HOME/bin
```shell
source /etc/profile

使用下面命令查看否是配置成功

java
javac
java -version

4. 安装Halo

修改设置密码规则

vim /etc/security/pwquality.conf
```markdown
difok=0: 新密码与旧密码可以完全相同
ucredit=-1: 必须包含至少 1 个大写字母(负值表示不需要)
lcredit=-1: 必须包含至少 1 个小写字母(负值表示不需要)
dcredit=0: 必须包含至少 1 个数字(0 表示必须全部为数字)
ocredit=-1: 必须包含至少 1 个特殊字符(负值表示不需要)

创建用户,并且给用户设置密码

useradd -m halo && passwd halo

登录到halo用户

su - halo

创建目录,用于存放jar,并且下载jar

mkdir ~/app && cd ~/app && wget https://dl.halo.run/release/halo-2.19.0.jar -O halo.jar

创建工作目录

mkdir ~/.halo2 && cd ~/.halo2

创建配置文件

vim application.yaml

写入下面内容

server:
  # 运行端口
  port: 8090
spring:
  # 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
  r2dbc:
    url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password: 123456
  sql:
    init:
      mode: always
      # 需要配合 r2dbc 的配置进行改动
      platform: h2
halo:
  caches:
    page:
      # 是否禁用页面缓存
      disabled: true
  # 工作目录位置
  work-dir: ${user.home}/.halo2
  # 外部访问地址
  external-url: http://localhost:8090
  # 附件映射配置,通常用于迁移场景
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x

这里不推荐使用H2数据库,推荐使用MySQL数据库,把数据库更改为MySQL数据库

url=r2dbc:pool:mysql://localhost:3306/halo
platform=mysql

设置可执行权限

chmod +x halo.jar

测试一下看看能否正常启动

cd ~/app && java -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/

如果没有报错,说明正常

切换到root用户下,执行下面命令

然后我们做一个软链接,把/usr/local/jdk/jdk-17.0.11/bin/java文件软链接到/usr/bin/java

ln -s /usr/local/jdk/jdk-17.0.11/bin/java /usr/bin/java

然后就可以注册到系统服务中了

切换到root用户下,执行下面命令

vim /etc/systemd/system/halo.service

写入下面内容

[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=halo
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar /home/halo/app/halo.jar --spring.config.additional-location=optional:file:/home/halo/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target
```shell
systemctl daemon-reload
systemctl start halo
systemctl enable halo

通过下面命令可以查看日志

journalctl -n 20 -u halo

配置反向代理

upstream halo {
  server 127.0.0.1:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.yourdomain.com;
  client_max_body_size 1024m;
  location / {
    proxy_pass http://halo;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

5. 域名解析

在准备工作中已经准备好了我的域名,并且域名已经备案了,那么可以进行域名解析了,也就是DNS

这里我使用的是腾讯云DNS

首先进入到你的腾讯云控制台中,找到云DNS

可以访问下面链接,跳转到腾讯云云DNS控制台

https://console.cloud.tencent.com/cns

如果你还没添加域名,可以点击添加域名,如下图所示

image-20240913164210387

然后添加一条记录,记录类型选择A类型,记录值填写你的服务器公网ip,主机记录填写你要绑定的二级域名,比如这里我想要绑定二级域名为blog,那么主机记录填写blog,而如果我们想要只绑定一级域名,那么可以填写@,这里通常还会绑定www,其它保持默认,如下图所示

image-20240913164635435

添加完成后,不会马上生效,一般要等待5分钟到10分钟生效

过了10分钟后,你可以在本地电脑打开cmd,使用ping命令查看是否生效,如果可以ping通,那么说明已经完成DNS配置,如下图所示

image-20240913165047305

6. 使用acme申请证书

我这里的域名在腾讯云DNS解析,目前免费的SSL证书普遍都是90天到期,所以这里推荐使用acme方式免费白嫖zeroSSL

首先我们需要安装acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

如果你已经安装过了,可以使用下面命令更新你的acme.sh

acme.sh --upgrade

6.1 获取腾讯云SecretId和SecretKey

有两种方式,可以使用主账号API密钥,还可以使用子账号密钥,这里推荐后者,所以这里只讲使用子账号的方式获取SecretIdSecretKey

具体可以参考腾讯文档

6.2 申请证书

  1. 设置环境变量

    export Tencent_SecretId="<Your SecretId>"
    export Tencent_SecretKey="<Your SecretKey>"
    
  2. 注册到zeroSSL

    若还没EAB KIDEAB HCME KEY,可以点击这里,进入网站后点击Generate

    /root/.acme.sh/acme.sh --register-account  --server zerossl -m myemail@example.com --eab-kid <EAB KID> --eab-hmac-key <EAB HCME KEY>
    
  3. 使用acme.sh申请证书

    acme.sh --issue --dns dns_tencent -d lukeewin.top -d *.lukeewin.top
    
  4. 安装证书

    注意:不建议直接使用~/.acme.sh路径下的证书,而是通过acme.sh提供的命令将证书安装到指定位置,以确保证书的正确使用和续期,具体可以参考install the cert to Apache/Nginx etc,下面以Nginx为例。

    acme.sh --install-cert -d lukeewin.top -d *.lukeewin.top \
    --key-file       /usr/local/nginx/ssl/key.pem  \
    --fullchain-file /usr/local/nginx/ssl/cert.pem \
    --reloadcmd     "systemctl reload nginx"
    
  5. 修改nginx.conf文件

    server {
       listen 443 ssl http2;
    
       server_name lukeewin.top www.lukeewin.top;
    
       # 请替换为证书实际路径
       ssl_certificate /usr/local/nginx/ssl/cert.pem;
       ssl_certificate_key /usr/local/nginx/ssl/key.pem;
    
       ssl_session_timeout 5m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
       ssl_prefer_server_ciphers off;
       ssl_prefer_server_ciphers on;
       location / {
           root /nginx/www/html;
       }
    }
    

    注意:将/usr/local/nginx/ssl/cert.pem/usr/local/nginx/ssl/key.pem替换为你的实际路径。

acme.sh中文说明书

https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

腾讯文档关于acme.sh说明书

https://cloud.tencent.com/document/product/302/105900

最后要记得开放443端口

firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

现在我们的博客就已经完成部署了

7. 其它

上面的步骤,我们其实已经可以通过域名访问了,但是如果你使用的是莱卡云,你还需要在控制台中添加域名白名单,如下图所示。

image-20240913214552656

如果你使用的是vultr,那么就不需要这个操作了。如果你使用的是阿里云,那么你需要在控制台中的安全组中开放对应的端口号,比如你需要开放80端口和443端口。

最后来看看我博客的效果,如下图所示。

image-20240913231313292

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区