博客迁移到 Ubuntu 22.04

介绍

Ubuntu 22.04 LTS 是最新版本的 LTS,维护周期 10 年,非常适合长期项目使用。

博客原来用的是 CentOS 7,使用的版本较老。

环境

  • Ubuntu 22.04
  • Nginx 1.18.0
  • Docker 20.10.17
  • Commento v1.8.0

博客

在 Linode 中创建相同区域新的机器,这样做是为了 IP 迁移,即将原有 IP 从一台机器换到另一台机器上。

Ubuntu 22.04

操作系统配置

 1  2  3  4  5  6  7  8  9 10 11 12 
# 登录服务器 $ ssh root@your_server_ip # 配置新用户 $ adduser sammy $ usermod -aG sudo sammy # 配置防火墙 $ ufw app list $ $ ufw allow OpenSSH $ ufw enable $ ufw status 

安装 Nginx

1 2 3 4 5 6 7 8 
# 安装 Nginx $ apt update $ apt install nginx # 配置防火墙 $ ufw app list $ ufw allow 'Nginx Full' $ ufw status 

配置网站

只需要先配置 HTTP 协议的网站,HTTPS 等待后续使用 certbot 自动处理。

$ vi /etc/nginx/sites-available/networm.me

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
server { listen 80; listen [::]:80; server_name networm.me; access_log /var/www/networm.me/logs/access.log; error_log /var/www/networm.me/logs/error.log warn; root /var/www/networm.me/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } server { if ($host = www.networm.me) { return 301 http://networm.me$request_uri; } listen 80; listen [::]:80; server_name www.networm.me; return 404; } 

$ vi /etc/nginx/sites-available/commento.networm.me

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
server { listen 80; listen [::]:80; server_name commento.networm.me; access_log /var/www/commento.networm.me/logs/access.log; error_log /var/www/commento.networm.me/logs/error.log; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

sammy 替换为自己的用户名

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 
# 博客 $ mkdir -p /var/www/networm.me/html $ mkdir -p /var/www/networm.me/logs $ chown -R sammy:sammy /var/www/networm.me $ vi /etc/nginx/sites-available/networm.me $ ln -s /etc/nginx/sites-available/networm.me /etc/nginx/sites-enabled/networm.me # Commento 评论系统 $ mkdir -p /var/www/commento.networm.me/html $ mkdir -p /var/www/commento.networm.me/logs $ chown -R sammy:sammy /var/www/commento.networm.me $ vi /etc/nginx/sites-available/commento.networm.me $ ln -s /etc/nginx/sites-available/commento.networm.me /etc/nginx/sites-enabled/commento.networm.me # Nginx 读取配置 $ systemctl reload nginx $ systemctl status nginx 

交换 IP

Linode 中交换 IP,交换完成后需要手动重启机器才会生效,在 Lindoe 管理界面中点击 Reboot 按钮。

迁移 HTTPS 证书

使用命令重新申请,并不使用原有服务器上的证书。

certbot 网站还没有更新 Ubuntu 22.04 的说明,不过使用 22.04 的也一样。

1 2 3 4 
$ sudo snap install core; sudo snap refresh core $ sudo snap install --classic certbot $ sudo ln -s /snap/bin/certbot /usr/bin/certbot $ sudo certbot --nginx 

建议简单参考官方文档,然后以这个更全面的教程为准。

certbot 自动设置了定时更新证书任务,不用手动处理。

验证

需要确保四种地址都可以访问,并且最多只有一次跳转,测试需要在隐身模式下以避免缓存干扰。

  1. http://networm.me
  2. https://networm.me
  3. http://www.networm.me
  4. https://www.networm.me

评论系统

评论系统使用的是 Commento,详细的安装配置方法可以参考 Commento 安装配置 - 狂飙

安装 Docker

按照 Docker 官方教程安装

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 
$ sudo apt-get update $ sudo apt-get install /  ca-certificates /  curl /  gnupg /  lsb-release $ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg $ echo /  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu /  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin $ sudo systemctl status docker 

参考下面教程的第 2 步,将非 root 用户添加到 docker 组中,以便可以不用 sudo 直接使用 docker 命令。

1 2 3 
$ sudo usermod -aG docker your_user $ sudo su your_user $ docker run hello-world 

安装 Commento

由于 Commento 官方的 docker-compose.yml 未指定容器的版本,然后新版本 PostgreSQL 修改了密码验证的内容,导致 Commento 容器报告无法连接到数据库错误:

1 
[ERROR] database_connect.go:31 dbConnect(): cannot talk to postgres, retrying in 10 seconds (4 attempts left): pq: unknown authentication response: 10 

此问题已在官方仓库中提出了 Issue,但是官方开发人员一直未进行处理,导致现在最新版本的 Docker 配置是无法启动的。

因此需要强制指定 commento 与 postgres 容器的版本,实测 commento:v1.8.0postgres:11.4 可以使用。如果想要实测哪些版本兼容,建议前往 Container Registry · Commento / Commento · GitLabPostgres - Official Image | Docker Hub,在其中找到需要的版本进行测试。PostgreSQL 的版本发布日期可以前往 PostgreSQL - Wikipedia 查看,具体的版本可以在 Docker Hub 中的 Tags 标签页中搜索框输入版本进行搜索,例如输入 11.5 查找 PostgreSQL 11.5 版本镜像。

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
version: '3'  services:  server:  image: registry.gitlab.com/commento/commento:v1.8.0  ports:  - 8080:8080  environment:  COMMENTO_ORIGIN: http://commento.example.com:8080  COMMENTO_PORT: 8080  COMMENTO_POSTGRES: postgres://postgres:postgres@db:5432/commento?sslmode=disable  depends_on:  - db  networks:  - db_network  db:  image: postgres:11.4  environment:  POSTGRES_DB: commento  POSTGRES_USER: postgres  POSTGRES_PASSWORD: postgres  networks:  - db_network  volumes:  - postgres_data_volume:/var/lib/postgresql/data  networks:  db_network:  volumes:  postgres_data_volume: 

指定版本后进行部署:

1 2 3 4 5 6 7 8 9 
$ mkdir commento $ cd commento # 这步将内容直接粘贴到文件中,也可以将本地的文件上传 $ vi docker-compose.yaml $ docker compose up -d # 查看日志输出是否正常 $ docker compose logs 

备份恢复

使用 docker ps 查看 postgres 对应的容器 ID,然后替换下面命令中的 your-db-container

备份数据库,需要在原服务器中执行以下命令

1 
$ docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql 

恢复数据库,在执行操作前需要先停止 commento 容器,只保留 postgres 容器,否则会报以下错误:

1 2 3 4 
ERROR: database "commento" is being accessed by other users DETAIL: There are 4 other sessions using the database. ERROR: current user cannot be dropped ERROR: role "postgres" already exists 

执行操作

 1  2  3  4  5  6  7  8  9 10 
# 查看 commento 容器 ID $ docker ps $ docker stop your-commento-container # 导入数据 $ cat your_dump.sql | docker exec -i your-db-container psql -U postgres $ docker compose up -d # 查看日志输出是否正常 $ docker compose logs 

验证

  • 找到一篇没有评论的文章,确定 Commento 评论框可以正常显示出来。
  • 找到一篇有评论的文章例如 Commento 安装配置 - 狂飙,确定可以正常显示出已有的评论。
  • 使用管理员登录后台,确定功能是否正常。
  • 在登录界面中点击重置密码,确定邮件通知功能是否正常。

监控

第三方

监控这种东西最好使用第三方的不需要自己维护的产品,这样不用操心。需要将网站与 Commento 评论系统添加到网站监控中,强烈推荐将推送邮箱填写为手机上使用的邮箱,以便及时得到通知。

UptimeRobot

简单对比了一下发现 UptimeRobot 免费版功能最全面,注册后建议将功能更新、开发更新、月度总结相关的邮件通知关闭。

实测免费版本最小间隔检测时间是 5 分钟,完全够用了。另外注意到在网站无法访问时,检测间隔似乎会自动变小,以便及时发现网站可以正常访问。实际发现的确很有用,在网站无法访问时及时发出了通知;并且在恢复访问后马上就有了上线通知,间隔不到 1 分钟。

其他

备份访问日志

需要将旧机器上的日志备份回来

1 2 3 4 5 6 
# 在服务器执行 $ cd /var/www/networm.me $ tar -czf logs.tar.gz logs # 在本机执行 $ scp [email protected]:/var/www/networm.me/logs.tar.gz . 

设置时区

1 
$ sudo timedatectl set-timezone Asia/Shanghai 

主机名

1 
$ hostname your-hostname 

设置完成后重新登录 SSH 就会生效。

SSH 登录

使用公钥登录与禁用密码登录

1 
$ sudo vi /etc/ssh/sshd_config 

PasswordAuthentication yes 改为 PasswordAuthentication no

1 
$ sudo systemctl restart ssh 

隐藏 Nginx 版本

1 
$ sudo vim /etc/nginx/nginx.conf 

在 http 内增加 server_tokens off;,然后重启 Nginx

1 
$ sudo systemctl reload nginx 

版权声明:
作者:lichengxin
链接:https://www.techfm.club/p/33401.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>