博客从 Ubuntu14.0 迁移到 Ubuntu24.0 流程

一、迁移目的

博客是 10年前用PHP7.0(laraval框架)在阿里云上搭建的,服务器配置 1C 2G 30G,每年 750元,费用很贵,对老用户一点优惠也没有;

二、迁移步骤

使用 Docker 进行构建应用服务和相关组件;

root@dev-server:~# cd /var/www/
root@dev-server:/var/www# ls -l
total 24
-rw-r--r--  1 root root     1129 Nov 13 17:56 docker-compose.yml
-rw-r--r--  1 root root      236 Nov 13 17:55 Dockerfile
-rw-r--r--  1 root root      236 Nov 13 17:54 Dockerfile-php78
-rw-r--r--  1 root root      461 Nov 13 17:59 nginx.conf
-rw-r--r--  1 root root      140 Nov 13 16:02 php.ini
drwxr-xr-x 15 root www-data 4096 Nov 13 16:28 road2chain
root@dev-server:/var/www#

docker-compose.yml 文件:

version: '3.8'

services:
  php:
    build: .
    image: myphp:7.0-fpm-pdo_mysql
    container_name: php7-fpm
    restart: always
    volumes:
      - ./road2chain:/var/www/html
      - ./php.ini:/usr/local/etc/php/php.ini
    working_dir: /var/www/html
    networks:
      - backend

  nginx:
    image: nginx:1.21
    container_name: nginx-php7
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./road2chain:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    networks:
      - backend

  mysql:
    image: mysql:5.7
    container_name: mysql57
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxxx
      MYSQL_DATABASE: road2chain
    volumes:
      - /data/mysql57/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
      - /data/mysql57/data:/var/lib/mysql
      - /data/mysql57/logs:/var/log/mysql
    networks:
      - backend

  redis:
    image: redis:5.0
    container_name: redis5
    ports:
      - "6379:6379"
    restart: always
    networks:
      - backend

networks:
  backend:
    driver: bridge

Dockerflie 文件(主要用来构建 mysql-pdo扩展到 php7.0-fpm 镜像)

root@dev-server:/var/www# cat Dockerfile
# 使用官方 PHP 7.0 FPM 镜像, 只能是 php7.0, 如果过高的版本 如 php7.4 就会出现语法报错;
FROM php:7.0-fpm

# 安装 MySQL PDO 扩展
RUN docker-php-ext-install pdo_mysql

# 可选:拷贝自定义 php.ini
COPY php.ini /usr/local/etc/php/php.ini

# 设置工作目录
WORKDIR /var/www/html

nginx.conf 文件

root@dev-server:/var/www# cat nginx.conf
server {
    listen 80;
    server_name digtime.cn www.digtime.cn;

    root /var/www/html/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    location ~ /\.ht {
        deny all;
    }
}

php.ini 文件:


root@dev-server:/var/www# cat php.ini
date.timezone = Asia/Shanghai
memory_limit = 512M
upload_max_filesize = 50M
post_max_size = 50M
display_errors = On
error_reporting = E_ALL

构建镜像命令

# 构建含有 pdo-mysql 的php7.0 镜像,只能是 php7.0, 如果过高的版本 如 php7.8 就会出现语法报错;
docker compose build php

启动服务

cd /var/www

# 启动
docker compose up -d

# 停止
docker compose down

为者常成,行者常至