阿里云服务器搭建Magento电子商务网站图文教程
本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程,Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使用MySQL存储数据。本教程主要介绍如何在CentOS 7操作系统的ECS实例上搭建Magento电子商务网站。
目录
前提条件
步骤一:安装并配置Apache
步骤二:安装并配置MySQL
步骤三:安装并配置PHP
步骤四:创建Magento数据库
步骤五:安装并配置Composer
步骤六:安装配置Magento
步骤七:配置Magento客户端
步骤八:添加cron作业
常见问题
后续步骤
前提条件
- 已注册阿里云账号。如还未注册,请先完成账号注册。
- 已完成实名认证。如还未认证,请先完成实名认证。
- 已在ECS实例安全组的入方向已添加规则并放行端口80和3306。具体操作,请参见添加安全组规则。
- ECS云服务器:aliyunbaike.com/go/ecs
- 实例规格:ecs.c6.large
- 操作系统:公共镜像CentOS 7.2 64位
- Apache:2.4.6
- MySQL:5.7
- PHP:7.0
- Composer:1.8.5
- Magento:2.1
步骤一:安装并配置Apache
- 安装Apache。
- 运行以下命令安装Apache。
yum install httpd -y
- 运行以下命令查看Apache是否安装成功。
httpd -v
返回结果如下图所示,表示安装成功。
- 运行以下命令安装Apache。
- 配置Apache。
- 运行以下命令打开Apache配置文件。
vim /etc/httpd/conf/httpd.conf
- 在
Include conf.modules.d/*.conf
的下一行,添加LoadModule rewrite_module modules/mod_rewrite.so
。具体步骤如下:- 移动光标到
Include conf.modules.d/*.conf
下一行的行首。 - 按下i键进入编辑模式。
- 输入
LoadModule rewrite_module modules/mod_rewrite.so
。
添加后的内容,如下图所示。
- 移动光标到
- 将下列内容中的
AllowOverride None
更改为AllowOverride All
。# AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # #在行首添加#注释掉本行内容 #AllowOverride None#添加下列内容 AllowOverride All
修改后的内容,如下图所示。
- 按下Esc键后,输入:wq并回车以保存并关闭配置文件。
- 运行以下命令打开Apache配置文件。
- 运行以下命令启动Apache服务。
systemctl start httpd
- 运行以下命令添加Apache服务开机自启动。
systemctl enable httpd
步骤二:安装并配置MySQL
- 安装MySQL。
- 运行以下命令添加MySQL YUM源。
rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
- 运行以下命令安装MySQL。
yum -y install mysql-community-server --nogpgcheck
- 运行以下命令添加MySQL YUM源。
- 运行以下命令启动MySQL服务。
systemctl start mysqld
- 运行以下命令设置MySQL服务开机自启动。
systemctl enable mysqld
- 配置MySQL。
- 运行以下命令查看/var/log/mysqld.log文件,获取并记录root用户的初始密码。
grep 'temporary password' /var/log/mysqld.log
命令的返回结果如下:
2016-12-13T14:57:47.535748Z 1 [Note] A temporary password is generated for root@localhost: p0/G28g>lsHD
说明 下一步重置root用户密码时,会使用该初始密码。
- 运行下列命令配置MySQL的安全性。
安全性的配置包含以下五个方面:mysql_secure_installation
- 设置root账号密码。
Enter password for user root: #输入上一步中获取的root用户密码 The 'validate_password' plugin is installed on the server. The subsequent steps will run with the existing configuration of the plugin. Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y #是否更改root用户密码,输入Y New password: #输入密码,长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。特殊符号可以是()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/ Re-enter new password: #再次输入密码 Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
- 输入
Y
删除匿名用户账号。By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y #是否删除匿名用户,输入Y Success.
- 输入
Y
禁止root账号远程登录。Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y #禁止root远程登录,输入Y Success.
- 输入
Y
删除test库以及对test库的访问权限。Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y #是否删除test库和对它的访问权限,输入Y - Dropping test database... Success.
- 输入
Y
重新加载授权表。Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y #是否重新加载授权表,输入Y Success. All done!
- 设置root账号密码。
- 运行以下命令查看/var/log/mysqld.log文件,获取并记录root用户的初始密码。
步骤三:安装并配置PHP
- 安装PHP。
- 运行以下命令添加ius源。
yum install \ https://repo.ius.io/ius-release-el7.rpm \ https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- 运行以下命令添加Webtatic源。
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
- 运行以下命令安装PHP7及所需扩展。
yum -y install php70w php70w-pdo php70w-mysqlnd php70w-opcache php70w-xml php70w-gd php70w-mcrypt php70w-devel php70w-intl php70w-mbstring php70w-bcmath php70w-json php70w-iconv
- 运行以下命令查看PHP版本。
返回结果如下所示,说明PHP安装成功。php -v
PHP 7.0.33 (cli) (built: Dec 6 2018 22:30:44) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologieswith Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies
- 运行以下命令添加ius源。
- 配置PHP。
- 运行以下命令打开PHP配置文件。
vim /etc/php.ini
- 移动光标至最后一行的行尾。具体操作步骤如下:
- 输入:$并回车,光标将移动至文件最后一行。
- 按下$移动光标至行尾。
- 按下i键进入编辑模式。
- 在文件最后添加关于内存限制和时区的配置。
; 允许为PHP脚本分配的最大内存值。您可根据实际情况增加或减少内存限制 memory_limit = 1024M ; 设置时区为上海 date.timezone = Asia/Shanghai
添加后如下图所示。
- 按下Esc键后,输入:wq并回车以保存并关闭文件。
- 重启Apache服务。
systemctl restart httpd
- 运行以下命令打开PHP配置文件。
步骤四:创建Magento数据库
- 运行以下命令使用root用户和密码登录MySQL。
mysql -u root -p
- 运行以下命令创建
magento
数据库。mysql> CREATE DATABASE magento; #根据实际情况将magento替换为您需要创建的数据库名称
- 依次运行以下命令为
magento
数据库创建用户。
例如,创建账号为mysql> GRANT ALL ON magento.* TO <YourUser>@localhost IDENTIFIED BY '<YourPass>'; #替换<YourUser>和<YourPass>为您需要创建的账号和密码 mysql> FLUSH PRIVILEGES;
magentoUser
、密码为magentoUser1@3
的用户,运行的命令为:mysql> GRANT ALL ON magento.* TO magentoUser@localhost IDENTIFIED BY 'magentoUser1@3'; mysql> FLUSH PRIVILEGES;
- 输入exit并回车以退出MySQL。
- 可选:验证新建的Magento数据库和用户是否可用。具体步骤如下:
- 运行以下命令使用新建账号和密码登录MySQL。
mysql -u <YourUser> -p #替换<YourUser>为您创建的账号
- 运行以下命令查看新建的
magento
数据库。mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | magento | +--------------------+ 2 rows in set (0.00 sec)
- 运行以下命令并回车以退出MySQL。
mysql> exit
- 运行以下命令使用新建账号和密码登录MySQL。
步骤五:安装并配置Composer
Composer是PHP的一个依赖管理工具。Composer允许您申明项目所依赖的代码库,并帮您在项目中安装依赖的代码库。
- 运行以下命令安装Composer。
curl -sS https://getcomposer.org/installer | php
- 运行以下命令配置Composer全局使用。
mv /root/composer.phar /usr/bin/composer
- 运行命令composer -v查看Composer版本。返回结果如下,表示Composer安装成功。
说明 因最新版Composer与Magento暂不兼容,所以您需要安装与Magento兼容的Composer版本。你可以使用以下命令来让最新版Composer转换至兼容版本。如Composer 1.8.5版本。/ ____/___ ____ ___ ____ ____ ________ _____/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_//_/ Composer version 1.8.5 2019-04-09 17:46:47
composer self-update 1.8.5
步骤六:安装配置Magento
您可以使用不同的方法安装Magento,可以选择是否安装示例数据。
- 如果安装Magento仅用于测试,您可以选择安装示例数据。
- 如果安装Magento用于生产环境,建议您安装全新的Magento,从头开始配置。
本教程介绍使用Git下载Magento,并使用Composer安装Magento的操作步骤。
- 下载Magento。
- 运行以下命令安装Git。
yum -y install git
- 进入Web服务器的默认根目录。
cd /var/www/html/
- 下载Magento。
git clone https://github.com/magento/magento2.git
- 运行以下命令安装Git。
- 可选:运行以下命令将Magento切换到稳定版本。
cd magento2 && git checkout tags/2.1.0 -b 2.1.0
命令执行后的结果如下:
Switched to a new branch '2.1.0'
说明 默认情况下,Git下载安装的Magento是最新的开发版本。如果您在生产环境中使用,建议切换到稳定版本,否则未来将无法升级安装。
- 运行以下命令将安装文件移到Web服务器根目录下。
shopt -s dotglob nullglob && mv /var/www/html/magento2/* /var/www/html/ && cd ..
说明 运行此命令后,您可以通过
https://<ECS实例公网IP地址>
访问您的Magento站点。否则,您只能通过https://<ECS实例公网IP地址>/magento2
访问。 - 依次运行下列命令为Magento文件设置适当的权限。
chown -R :apache /var/www/html
find /var/www/html -type f -print0 | xargs -r0 chmod 640
find /var/www/html -type d -print0 | xargs -r0 chmod 750
chmod -R g+w /var/www/html/{pub,var}
chmod -R g+w /var/www/html/{app/etc,vendor}
chmod 750 /var/www/html/bin/magento
- 运行命令composer install安装Magento。
步骤七:配置Magento客户端
- 打开浏览器。
- 在浏览器地址栏中,输入
http://<ECS实例公网IP地址>
。出现如下图所示页面,表示Magento安装成功。
- 单击Agree and Setup Magento开始配置Magento。具体步骤如下:
- 准备性检查。
- 单击Start Readiness Check。
- 检查完成后,单击Next。
- 添加数据库。
- 输入之前创建的数据库用户的账号和密码。本教程中创建的示例用户账号为
magentoUser
、密码为magentoUser1@3
。 - 输入之前创建的数据库的名字。本教程中创建的示例数据库名字为
magento
。 - 单击Next。
- 输入之前创建的数据库用户的账号和密码。本教程中创建的示例用户账号为
- 填写Web访问设置,并单击Next。
- 填写定制商店,并单击Next。
- 填写管理员账号信息,并单击Next。
- 单击Install Now进行安装。
- 准备性检查。
出现如下图所示界面,表示Magento配置完成。
步骤八:添加cron作业
完成以下操作,添加cron作业:
- 运行crontab -u apache -e设置cron运行调度工作。
- 按下i键进入编辑模式。
- 输入下列配置信息。
*/10 * * * * php -c /etc /var/www/html/bin/magento cron:run */10 * * * * php -c /etc /var/www/html/update/cron.php */10 * * * * php -c /etc /var/www/html/bin/magento setup:cron:run
- 按下Esc键后,输入:wq并回车以保存并退出。
Magento上使用cron作业的更多详情。
常见问题
输入http://<ECS实例公网IP地址>/admin
登录Magento后台,如果界面提示“One or more indexers are invalid. Make sure your Magento cron job is running.”的错误信息,请参考以下步骤解决问题。
- 远程连接Magento服务器。具体操作,请参见连接方式概述。
- 运行以下命令,将PHP的安装路径建立软连接至/usr/sbin/php目录下。
ln -s /usr/local/php/bin/php /usr/sbin/php
- 运行以下命令,刷新索引。
回显信息类似如下所示,表示索引已刷新成功。cd /var/www/html php bin/magento indexer:reindex
[root@iZbp1h2mquu8nb0jz99**** wwwroot]# php bin/magento indexer:reindex Design Config Grid index has been rebuilt successfully in 00:00:00 Customer Grid index has been rebuilt successfully in 00:00:00 Category Products index has been rebuilt successfully in 00:00:00 Product Categories index has been rebuilt successfully in 00:00:00 Product Price index has been rebuilt successfully in 00:00:00 Product EAV index has been rebuilt successfully in 00:00:00 Stock index has been rebuilt successfully in 00:00:00 Catalog Rule Product index has been rebuilt successfully in 00:00:00 Catalog Product Rule index has been rebuilt successfully in 00:00:00 Catalog Search index has been rebuilt successfully in 00:00:00
- 刷新页面后,单击Cache Management。
- 选中状态为INVALIDATED的Cache Types,并单击Submit。
当出现类似如下返回信息时,表示问题已经解决。
后续步骤
- 访问
http://<ECS实例公网IP地址>
可以看到如下图所示的默认主页。 - 访问
http://<ECS实例公网IP地址>/admin
,输入您在安装过程中设置的用户名和密码,成功登录管理面板后可看到如下界面。
本文转自阿里云官方文档。
相关文章:

阿里云服务器搭建Magento电子商务网站图文教程
本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程,Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使…...

Docker安装 Kibana
目录 前言安装Kibana步骤1:准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2:拉取 kibana 镜像拉取镜像查看已拉取的镜像 步骤3:创建容器创建容器方式1:快速创建容器 步骤…...
数字图像处理 --- 相机的内参与外参(CV学习笔记)
Pinhole Camera Model(针孔相机模型) 针孔相机是一种没有镜头、只有一个小光圈的简单相机。 光线穿过光圈并在相机的另一侧呈现倒立的图像。为了建模方便,我们可以把物理成像平面(image plane)上的图像移到实际场景(3D object)和焦点(focal p…...

基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数
基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数 项目介绍 微指数是基于海量用户行为数据、博文数据,采用科学计算方法统计得出的反映不同事件领域发展状况的指数产品。微指数对于收录的关键词,在指…...

金融反欺诈的应用实践
“根据980起全球重大金融欺诈事件分析,60%的欺诈发生在移动端,同比增长170%。“,在香港近日举办的金融科技沙龙上,顶象金融业务安全专家史博表示,金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…...

Win10启动Jmeter报错提示jmeter.log拒绝访问问题
jmeter版本:5.4.1 查看版本 在dos命令窗口中进入jmeter安装目录下的bin目录中:执行jmeter - v命令 我启动的方式是:进入jmeter安装目录下的bin目录中双击jmeter.bat启动的。结果报错,但是不影响使用。 报错日志如下: …...

Vue中使用Tailwind css
1.什么是Tailwind 就是一个CSS框架,和你知道的bootstrap,element ui,Antd,bulma。一样。将一些css样式封装好,用来加速我们开发的一个工具。 Tailwind解释 tailwind css 中文文档 2.Vue使用Tailwind配置 1. 新建vu…...

承接各种设计
小弟985研究生毕业,目前攻读读博士,可做各种设计,包括但不限于Matlab 电力电子/电气工程,matlab/simulink 电气专业仿真MATLAB 电气工程专业,matlab建模 电力电子,电气工程,电力系统,…...

HTTP请求性能分析 - 简单
使用随手可得的工具,尽量少的前置要求,来完成任务。 0. 目录 1. 前言2. 分析工具2.1 基于Chrome DevTools 的Timing2.1.1 关于Network标签页下的Timing部分2.1.2 一些注意项 2.2 基于Curl 命令 3. 剩下的工作 1. 前言 对于业务开发选手而言,…...

腾讯云标准型CVM云服务器详细介绍
腾讯云CVM服务器标准型实例的各项性能参数平衡,标准型云服务器适用于大多数常规业务,例如:web网站及中间件等,常见的标准型云服务器有CVM标准型S5、S6、SA3、SR1、S5se等规格,腾讯云服务器网来详细说下云服务器CVM标准…...

基于DEM tif影像的插值平滑和tif纹理贴图构建方法
准备数据是一个10米分辨率的Tif影像,直接用于生成DEM会十分的不平滑。如下图所示,平滑前后的对比效果图差异: 基于ArcGIS的DEM平滑插值 等值线生成(指定加密间距) 平滑线(指定平滑容差平滑等高线࿰…...
Redis_五种数据类型及操作命令
5.redis常用的五种数据类型 5.1 Redis String字符串 5.1.1 简介 String类型在redis中最常见的一种类型string类型是二制安全的,可以存放字符串、数值、json、图像数据value存储最大数据量是512M 5.1.2 常用命令 set < key>< value>:添加…...

Mac如何打开隐藏文件中Redis的配置文件redis.conf
Redis下载(通过⬇️博客下载的Redis默认路径为:/usr/local/etc) Redis下载 1.打开终端进入/usr文件夹 cd /usr 2.打开/local/文件夹 open local 3.找到redis.conf并打开,即可修改配置信息...

nginx+flask+uwsgi部署遇到的坑
文章目录 1.环境:2.uwsgi_conf.ini具体配置内容3.nginx 具体配置4.具体命令(注意使用pip3命令安装)5.服务异常排查 1.环境: centos8 uWSGI 2.0.22 gmssl 3.2.2 nginx version: nginx/1.18.0 项目目录: 2.uwsgi_conf.ini具体配置内容 [uws…...

vue实现pdf预览功能
背景:材料上传之后点击预览实现在浏览器上预览的效果 效果如下: 实现代码如下: //预览和下载操作 <el-table-column fixed"right" label"操作" width"210"><template #default"scope">…...

(原创)Flutter与Native页面互相跳转
前言 实际开发混合项目时,常常会有页面跳转的需求 如果是原生界面和flutter界面需要互相跳转 这种情况应该怎么处理呢? 今天这篇博客主要就来介绍下这个情况 其实想一下,这个问题可以拆成四个小的问题来分析: 1:原生界…...

web集群学习--基于CentOS构建LVS-DR集群、配置nginx负载均衡
基于CentOS构建LVS-DR集群 环境准备 主机名 ip地址 node1 192.168.1.140 client node2 192.168.1.141 LVS node3 192.168.1.142 RS1 node4 192.168.1.143 RS2配置 1.关闭防火墙和SELinux [rootclient~]# systemctl stop firewalld [rootclient~]# systemctl disabl…...

基于 FPGA 的电机控制
FPGA 非常适合精密电机控制,在这个项目中,我们将创建一个简单的电机控制程序,在此基础上可以构建更复杂的应用。 需要的硬件 Digilent Pmod HB3 介绍 我们可以用一个简单的 8 位微控制器来控制电机,输出一个简单的脉宽调制波形。然…...

STM32F429IGT6使用CubeMX配置IIC通信(AT2402芯片)
1、硬件电路 写地址:0xA0 读地址:0xA1 存储容量:256Byte 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置IIC 4、生成工程配置 5、部分代码 #define IIC_WRITE_ADDR 0xA0 // IIC写地址 #define IIC_READ_ADDR 0xA1 …...

JS逆向系列之猿人学爬虫第14题-备而后动-勿使有变
文章目录 题目地址参数分析参考jspython 调用往期逆向文章推荐题目地址 https://match.yuanrenxue.cn/match/14题目难度标的是困难,主要难在js混淆部分。 参数分析 初始抓包有无限debugger反调试,可以直接hook 函数构造器过掉无限debugger Function.prototype.__construc…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...