博客从 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" # redis不对外暴露,防止被侵入
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 就会出现语法报错;
# 使用官方 PHP 7.0 FPM 镜像
FROM php:7.0-fpm
# 安装 GD 扩展需要的依赖库(用于图像上传处理,由于 php7.0 -fpm 版本过老,所以,很难下载到匹配的gd库,这里也是折腾了很久,才找到可以下载相关依赖的库)
# 切换源到 archive,并删除 security 仓库
RUN sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list \
&& sed -i '/security.debian.org/d' /etc/apt/sources.list \
&& sed -i '/stretch-updates/d' /etc/apt/sources.list
# 允许无 GPG 验证(因为旧源已经过期)
RUN apt-get update -o Acquire::Check-Valid-Until=false -o Acquire::Check-Date=false \
&& apt-get install -y --allow-unauthenticated \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev
# 配置 & 安装 GD 扩展(PHP 7.0 用旧语法)
RUN docker-php-ext-configure gd \
--with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd
# 安装 MySQL PDO 扩展
RUN docker-php-ext-install pdo_mysql
# 可选:拷贝自定义 php.ini
COPY php.ini /usr/local/etc/php/php.ini
# 设置工作目录
WORKDIR /var/www/html
注意:上边的镜像构建环境需要php 7.0 版本的gd库,否则无法上传处理图片;另外,需要安装pdo_mysql 扩展,否则无法连接数据库
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;
##
# Basic Settings
## 需要添加上传文件大小,负责图片无法被上传;
client_max_body_size 20m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
#include /etc/nginx/mime.types;
#default_type application/octet-stream;
##
# Logging Settings
##
#access_log /var/log/nginx/access.log;
#error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
#gzip on;
#gzip_disable "msie6";
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
打印:
root@dev-server:/var/www# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
myphp:7.0-fpm-pdo_mysql 1a81dd962ad4 547MB 143MB U
myphp:7.4-fpm-pdo_mysql 1a2f6408d898 651MB 163MB
mysql:5.7 f2ad209efe9c 620MB 155MB U
nginx:1.21 0d17b565c37b 213MB 56.7MB U
php:7.0-fpm 8e8644c0fd61 512MB 130MB
php:7.4-fpm def6bdad9c31 651MB 163MB
redis:5.0 a30e893aa92e 162MB 40.1MB U
---
查看 容器:
root@dev-server:/var/www# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bbf84c4bd30 nginx:1.21 "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp nginx-php7
b3f5a71a2c5e myphp:7.0-fpm-pdo_mysql "docker-php-entrypoi…" 10 minutes ago Up 10 minutes 9000/tcp php7-fpm
760d929f129b redis:5.0 "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 6379/tcp redis5
d94e0db6f948 mysql:5.7 "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp mysql57
root@dev-server:/var/www#
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)