当前位置: 首页 > news >正文

本地用docker开发的php 程序如何部署到阿里云的ecs上

将本地用 Docker 开发的 PHP 程序部署到阿里云 ECS,有多种方法,我会从简单到复杂为您详细介绍三种主流方案。

方案一:通过镜像仓库上传拉取(最推荐)

这种方式最符合 Docker 的理念,将应用及其环境整体打包成镜像进行分发。

步骤 1:在本地准备镜像

1、确保本地项目有 Dockerfile

一个典型的 PHP 项目 Dockerfile 示例:

# 使用官方 PHP 镜像带 Apache
FROM php:8.1-apache# 设置工作目录
WORKDIR /var/www/html# 安装必要的 PHP 扩展
RUN docker-php-ext-install mysqli pdo pdo_mysql# 将本地源代码复制到容器中
COPY . /var/www/html/# 如果需要,修改文件权限
RUN chown -R www-data:www-data /var/www/html

2、构建本地镜像

cd /path/to/your/php-project
docker build -t my-php-app:latest .

3、测试本地镜像

docker run -d -p 8080:80 --name my-php-app-local my-php-app:latest

访问 http://localhost:8080 确认应用正常运行。

步骤 2:推送镜像到仓库

1、选择镜像仓库

  • 阿里云容器镜像服务(ACR):与 ECS 同生态,推荐
  • Docker Hub:全球通用

2、以 ACR 为例推送镜像

# 登录阿里云ACR(需要先开通容器镜像服务)
docker login --username=your_aliyun_username registry.cn-hangzhou.aliyuncs.com# 给本地镜像打上ACR的标签
docker tag my-php-app:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest

步骤 3:在阿里云 ECS 上运行

1、登录 ECS 实例

ssh root@your-ecs-ip

2、安装 Docker(如果尚未安装)

# CentOS 示例
yum install -y docker
systemctl start docker
systemctl enable docker

3、从 ACR 拉取并运行镜像

# 登录ACR(同样需要先登录)
docker login --username=your_aliyun_username registry.cn-hangzhou.aliyuncs.com# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest# 运行容器
docker run -d \--name my-php-app \-p 80:80 \-v /path/on/ecs/uploads:/var/www/html/uploads \registry.cn-hangzhou.aliyuncs.com/your-namespace/my-php-app:latest

优点:环境完全一致,部署快速,回滚方便(只需拉取旧版镜像)。
缺点:镜像文件较大,上传下载需要时间。

方案二:同步代码 + 在 ECS 上构建(灵活性强)

这种方式只上传代码和 Dockerfile,在服务器上执行构建。

步骤 1:准备项目文件

确保项目包含:

  • 所有 PHP 源代码

  • Dockerfile

  • .dockerignore(忽略 node_modules、.git 等不必要文件)

  • 如果需要,准备 docker-compose.yml

步骤 2:上传文件到 ECS

1、使用 rsync 同步(推荐)

# 在本地执行
rsync -avz --delete \-e "ssh -i /path/to/your/ecs-key.pem" \./your-php-project/ \root@your-ecs-ip:/home/php-project/

2、或使用宝塔面板

  • 在 ECS 上安装宝塔面板

  • 通过宝塔的「文件」管理器直接上传项目 ZIP 包并解压

步骤 3:在 ECS 上构建和运行

1、SSH 登录 ECS

ssh -i /path/to/your/ecs-key.pem root@your-ecs-ip

2、进入项目目录并构建

cd /home/php-project
docker build -t my-php-app-ecs .

3、运行容器

docker run -d \--name my-php-app \-p 80:80 \-v $(pwd)/uploads:/var/www/html/uploads \my-php-app-ecs

优点:传输文件小,适合频繁的代码更新。
缺点:ECS 需要安装构建环境,构建过程可能消耗资源。

方案三:使用 Docker Compose(适合复杂应用)

如果您的应用还包含 MySQL、Redis 等服务,这是最佳方案。

步骤 1:准备 docker-compose.yml

version: '3.8'services:app:build: .ports:- "80:80"volumes:- ./uploads:/var/www/html/uploads- ./logs:/var/log/apache2depends_on:- dbenvironment:- DB_HOST=db- DB_USER=app_userdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_DATABASE: app_dbMYSQL_USER: app_userMYSQL_PASSWORD: app_passwordvolumes:- db_data:/var/lib/mysqlredis:image: redis:alpinevolumes:db_data:

步骤 2:上传文件到 ECS

同方案二,将整个项目目录(包含 docker-compose.yml)上传到 ECS。

步骤 3:在 ECS 上启动服务

# 在ECS上
cd /home/php-project# 安装 Docker Compose(如果未安装)
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose# 启动所有服务
docker-compose up -d

部署后的重要操作

1、配置域名和 SSL

  • 在阿里云控制台解析域名到 ECS IP

  • 使用 Nginx 反代或直接在容器内配置 SSL

2、数据持久化

# 确保重要数据卷映射到主机目录
-v /ecs/data/uploads:/var/www/html/uploads
-v /ecs/data/mysql:/var/lib/mysql

3、设置自动启动

# 使用 --restart=always
docker run -d --restart=always --name my-app ...# 或在 docker-compose.yml 中配置
restart: always

4、日志管理

# 查看日志
docker logs my-php-app# 或配置日志驱动,将日志发送到阿里云日志服务

方案选择建议

  • 新手/简单项目:从方案二开始,最容易理解和调试

  • 生产环境/微服务:使用方案一,最规范,易于CI/CD集成

  • 多服务应用:使用方案三,管理依赖最方便

无论选择哪种方案,核心都是确保生产环境与本地开发环境的 Docker 配置保持一致。

http://www.dtcms.com/a/540587.html

相关文章:

  • html css js网页制作成品——一念关山HTML+CSS网页设计(5页)附源码
  • BuildingAI二开 Coze套餐管理页面PRD
  • 加强学院网站的建设与管理一个完整的外贸流程
  • 大屏开发,在线歌词舆情分析系统demo,基于python,flask,web,echart,nlp,自然语言数据库mysql。
  • 网站后台上传缩略图高端网站开发哪家强
  • SAP GUI 800进行品牌化设置
  • unity打包安卓设置为横屏
  • final是干嘛的
  • 马赛克数据增强与 Tensor、TensorFlow 区别学习总结
  • 【Node】win 10 / win 11:node.js 长期维护版下载、安装与 npm 配置
  • 青岛公司网站建设开发南京网站建设与维护
  • 宠物系统功能演示
  • 具身智能的平民化浪潮:从表演秀到产业变革临界点
  • Geoserver漏洞图形化利用工具
  • 沈阳公司网站设计类似58的推广平台有哪些平台
  • 最小二乘问题详解6:梯度下降法
  • Linux内核RDMA计数器机制:深入解析与实现原理
  • iOS 反编译防护工具与实战组合 从静态侦察到 IPA 成品加固的工程化路径
  • 微信小程序组件中二维码生成问题解决方案
  • 网站文件解压北仑装修公司哪家最好
  • 《微信小程序》第八章:“我的“设计
  • 基于 Launcher3 的 iOS 风格桌面 04 拖拽和移位
  • django model Manager
  • 前端数据可视化实战:Chart.js vs ECharts 深度对比与实现指南
  • 霍山县网站建设公司寻花问柳专注做一家男人最爱的网站
  • LInux(一)VMware虚拟机中安装CentOS7
  • MATLAB基于对数灰关联度的IOWGA算子最优组合预测模型
  • 企业开源网站系统网页制作软件
  • Linux存储软件栈剖析之第4篇:Linux文件系统的实现
  • Excel怎么将八位数字设置为日期格式?