PHP经验分享laravel

Windows/Mac在本地用Vagrant部署LNMP环境

2017-09-12  本文已影响293人  雪峰童鞋

具体配置:Vagrant+VM+Centos7环境部署LNMP+Git+Drush+Drupal8

关于在本地配置LNMP搭建网站的相关的资料多如牛毛,但真正实用的并不多,而我自己曾花了两个月研究LNMP的问题,遇到各种环境问题,差点把我折腾屎,所以就把这份宝贵的经验分享出来供大家学习及方便我自己,下面我们就来尝试自己在本地部署LNMP环境,相们你能学到不少知识!

我们的目标是在本地用Vagrant+Vritualbox配置一个Centos7.2的环境,然后在此环境上再配置LNMP环境,然后搭建Drupal8.x的CMS网站项目。具体环境如下:

虚拟环境:Vagrant1.8.6+VirtualBox_5.0.40_x64
系统环境:Centos7.2
LNMP环境:Nginx1.10.2+PHP70u+Mariadb101
其它扩展:Memcache+Opcache+Git+Drush
网站平台:Drupal8.x
参考网址:http://ninghao.net/blog/3630

具体步骤:

  1. 安装Vagrant+Vritualbox
  2. 导入Centos虚拟box
  3. Vagrant+VM修改Centos的配置
  4. 安装IUS仓库
  5. 安装nginx
  6. 安装mariaDB
  7. 安装PHP/memcached/opcache
  8. 修改PHP配置
  9. 优化Nginx配置文件
  10. 新建Nginx配置文件
  11. 创建网站目录
  12. 安装Composer
  13. 安装Drush
  14. 安装Git
  15. 安装Drupal

一、安装vagrant+Virtualbox

注意:如果在操作过程中出现什么问题可能是你安装的这个版本是不兼容,建议使用“vagrant_1.8.6.msi”和“VirtualBox_5.0.40_x64.exe”来配合,每次变动后不行就重启电脑试试。

二、导入Centos虚拟BOX

端导入box

进入终端导入box,xxx.box文件最好先放入要导入的目录

vagrant box add c7 abc.box  //添加box,“c7”是自定义的名称
vagrant box list  //查看成功安装的box
vagrant init c7  //在一个要配置网站的目录中初始化box,成功后会有一个Vagrantfile
vagrant up  //启动

注意:如果在操作过程中出现什么问题可能是你安装的这个版本是不兼容,建议使用“vagrant_1.8.6.msi”和“VirtualBox_5.0.40_x64.exe”来配合,每次变动后不行就重启电脑试试。在启动成功后,你会在网站目录里看到一个“Vagrantfile”的文件,这就是vagrant的配置文件,你需要配置你的网站IP,找到

config.vm.network "private_network", ip: "192.168.33.10"

去掉前面的“#”它就生效了,你可以拿空上IP来SSH你的主机上。
相关教程:

另外,分享一个我自己在本地配置好的box文件,你下载下来直接添加到你的电脑就可以使用了,里面已配置好LNMP相关的环境,百度网盘下载:
http://pan.baidu.com/s/1i568iHJ

Vagrant中打包box

在我们配置好的box如果还是给别人使用或者在另一个项目上使用的话,我们可以把这整个环境打个包,然后在别我电脑或者项目的安装这个包后,就和你的环境一模一样了。先退出vagrant,用"vagrant halt"先关闭vagrant,再用Xshell进入到安装了box虚拟机的所在目录,如www/abc中(这个目录包含有Vagrantfile文件才对),输入以下命令
vagrant package

完了一会看到一个"package.box"的文件在文件夹内,如果再拿到其它项目上使用的话,就和之前一样,用添加box命令就可以:

vagrant box add c7 abc.box  //添加box,“c7”是自定义的名称
vagrant box list  //查看成功安装的box
vagrant init c7  //在一个要配置网站的目录中初始化box,成功后会有一个Vagrantfile
vagrant up  //启动

Vagrant的常用命令:

vagrant up  //启动
vagrant halt  //关机
vagrant reload  //重启
vagrant destroy  //销毁虚拟机
vagrant box listview  //列出当前导入的box
vagrant box list  //查看当前可用的box
vagrant status [name]  //查看vagrant的状态
vagrant box remove boxname  //删除指定的box环境
vagrant package  //当前的box环境打包
vagrant ssh  //用SSH进入vagrant
vagrant suspend  //暂停vagrant
vagrant resume  //暂停vagrant恢复
exit  //退出vagrant

SSH登录主机

MAC用终端工具,WIN用户用Cmder或Xshell即可:
使用cmder/powershell/Xshell或者Mac终端登录SSH进入使用(密码:vagrant,用vagrant创建的box,在用FTP和SSH时,所有的用户名和密码是:vagrant / vagrant):

三、Vagrant+VM修改Centos的配置

一般情况下,box安装的centos配置稍低,我们可自行修改一下配置
进入相应的目录,对centos关机:

vagrant halt

打开Virtualbox图形界面,选中要修改的centos,点击设置直接修改!然后进入相应的目录,再启动:

vagrant up

建议内存:2BG 硬盘:40GB
参考:https://gist.github.com/christopher-hopper/9755310


四、安装IUS仓库

连接成功后,安装IUS仓库,这样才能用yum去安装比较新的软件包,获取地址:https://ius.io/GettingStarted

cat /etc/redhat-release //查看系统版本
sudo yum install https://centos7.iuscommunity.org/ius-release.rpm -y //安装
yum repolist //查看仓库列表

五、安装nginx

sudo yum install nginx -y //安装nginx
sudo systemctl start nginx //启动nginx
sudo systemctl enable nginx //开机自启动

47.89.45.50 //打开浏览器输入,出现nginx说明成功

sudo systemctl reload nginx  //重启
如果nginx出现问题,可以先启动,再重启:
sudo systemctl start nginx
sudo systemctl reload nginx

六、安装mariaDB

数据库消耗大量的内容,至少2G的内存服务器

sudo yum search mariadb //搜索版本
sudo yum install mariadb101u-server -y //提示有冲突,先删除原来的资源
sudo yum remove mariadb-libs -y //删除原来的资源
sudo yum install mariadb101u-server mariadb101u -y //重新执行安装

启动数据库【如果数据库出错,网站打不开(The website encountered an unexpected error. Please try again later.),也可以使用以下两段命令重启数据库试试】

sudo systemctl start mariadb //启动
sudo systemctl enable mariadb //开机自启动
mysql_secure_installation   //执行安全配置,密码设为root,回答问题全“y”(这个方法也适用于当数据库打不开时,出现登录报错:“ERROR 1045 (28000)”或者其它错误时,如果用了以下命令,可能会删除之前的数据库,得重新导入数据库文件)设置root密码,一直按Y,第一个提示输入root数据库的密码,默认为空,回车
mysql -u root -p //测试
mysql --version   //查看版本相关信息
mysql -u root -p db < db.sql  //导入数据库(将数据库文件db.sql导入到db数据库中,得先用FTP把db.sql上传到当前目录里)
mysqldump -u root -p db > db.sql  //导出数据库(导出的数据库文件就在当前目录里)

阿里云RDS(例) 导出MySQL:

mysqldump -u ascm -p -h aoshiyiyuanpai.mysql.rds.aliyuncs.com a>  /alidata/b.sql

进入数据库常用命令

mysql -u root -p  //进入数据库
create database xxx;   //创建数据库
show databases;  //查看数据库
drop database xxx;  //删除数据库
exit  //退出数据库
mysqladmin -uroot password 'yourpassword'  //更改root密码
mysql -uroot -p -h192.168.137.10 -P3306  //远程登陆数据库
use xxx;  //进入某个数据库
show tables;  //列出数据库中的表
desc slow_log;  //查看某个表全部字段
show create table slow_log\G;   //显示建表语句
select user();  //查看当前用户
select database();  //查看当前所在数据库
create database db1 charset utf8;  //创建数据库指定字符集
create table t1 (`id` int(4), `name` char(40));  //创建新表
select version();  //查看数据库版本

为了更安全再创建数据库用户(已进MySQL),然后给这个用户分配可以管理 dbname这个数据库权限(其中“123456”是你为这个用户创建的密码):

grant all privieges on dbname.* to 'username'@'localhost' identified by '123456';

查看MYSQL数据库中所有用户:

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

其它常用命令

当前会话状态:show status; 
全局数据库状态:show global status; 
查看主从数据库状态信息:show slave status\G;   
查询数据库参数:show variables;
修改数据库参数:show variables like 'max_connect%';
重启数据库会失效,要在配置文件中修改:set global max_connect_errors = 1000;
查看当前数据库队列:show processlist;
创建普通用户并授权给某个数据库:
grant all on databasename.* to 'user1'@'localhost' identified by '123456';
查询该表中的所有字段:select * from mysql.db;
 count(*)表示表中有多少行:select count(*) from mysql.user; 
查询表中的多个字段:select db,user  from mysql.db; 
在查询语句中可以使用万能匹配 “%”:select * from mysql.db where host like '10.0.%';
插入一行数据:insert into db1.t1 values (1, 'abc');
更改表的某一行数据:update db1.t1 set name='aaa' where id=1;
清空表数据:truncate table db1.t1;
删除表:drop table db1.t1;
清空数据库中的所有表(数据库名是eab12)
mysql -N -s information_schema -e "SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') FROM TABLES WHERE TABLE_SCHEMA='eab12'" | mysql -f eab12
新建普通用户:CREATE USER name IDENTIFIED BY 'ssapdrow';
更改普通用户密码:SET PASSWORD FOR name=PASSWORD('fdddfd');
查看name用户权限:SHOW GRANTS FOR name;
脚本中执行mysql命令:
mysql -uuser -ppasswd -e"show databases"
echo "show databases"|mysql -uuser -ppassword

七、安装PHP/memcached/opcache

sudo yum search php | grep php   //搜索安装对应版本
sudo yum install php70u-fpm -y   //安装,或者安装其它版本的PHP如php56u-fpm
sudo yum install php70u-fpm php70u-cli php70u-xml php70u-gd php70u-mysqlnd php70u-pdo php70u-mcrypt php70u-mbstring php70u-json php70u-opcache php70u-pecl-memcached -y //安装扩展
sudo systemctl start php-fpm  //启动
sudo systemctl enable php-fpm   //开机自启php-fpm
sudo systemctl reload php-fpm //重新加载php-fpm
netstat -tunpl  //查看memcached进程是否开启

注:安装memcached后,性能就会有极大的改善。opcache是 php 的一个扩展,安装后可提升性能,opcache不需要在php.ini中写,安装完默认开启。安装drupal或者其它CMS时,遇到没有opcache会无法安装,参考宁皓网这个教程:https://ninghao.net/video/3588

八、修改PHP配置

cd /etc 找到php.ini文件,修改以下几点,使PHP与Drupal更好的结合

;加大页面执行时间php.ini中的默认值是30 (秒)
max_execution_time = 300
post_max_size = 200M
upload_max_filesize = 200M
;内存的1/4这里必须注意,设置太多会崩溃,因为还有其他程序要用内存,查看内存:free 或者top
memory_limit = 512M  
;tmp是服务器根目录777权限,drupal cc all后查看drupal是否还提示上传未知错误
upload_tmp_dir = tmp
;中国时区设置
date.timezone = PRC
改好后保存再重启
sudo systemctl reload php-fpm //重新加载

九、优化Nginx配置文件

这个可以忽略,建议在修改之前先备份一下原来的nginx.conf这个文件,如果修改后出现问题,再恢复回来。到 /etc/nginx 找到nginx.conf文件,实行优化,以2核CPU为例,1核CPU不要用!

user nginx;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

worker_processes 2;
worker_rlimit_nofile 204800;
worker_cpu_affinity 00000001 00000010;
events {
use epoll;
worker_connections 204800;
}

http {
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;

include /etc/nginx/mime.types;
default_typeapplication/octet-stream;

include /etc/nginx/conf.d/.conf;

server {
listen   80 default_server;
listen   [::]:80 default_server;
server_name  _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/.conf;

location / {
}
   location ~* ^.+.(ico|gif|jpg|jpeg|png)$ {
access_log   off;
expires  30d;
}
location ~* ^.+.(css|js|txt|xml|swf|wav)$ {
access_log   off;
 expires  24h;
 }
location ~* ^.+.(html|htm)$ {
expires  1h;
}
error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

十、新建Nginx配置文件

在 /etc/nginx/conf.d 新建web.conf文件,第一个location为网站静态配置,第二个location是让nginx处理php,192.168.33.10这个IP是你之前在Vagrantfile文件里配置的IP。

server{
  listen80;
  server_name   192.168.33.10;
  root  /home/site;
  index index.php index.html;

  location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}
  location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
}

十一、创建网站目录

ssh @ip 到服务器后,使用 cd ../ 查看centos7的相关目录,能看到如下目录:

bin   dev  home  lib64  media  opt   root  sbin  sys  usr
boot  etc  lib   lost+found  mntproc  run   srv   tmp  var

建议把你的网站放到home或者mnt的下面,以home为例:

sudo mkdir -p /home/mysite
sudo chmod 755 mysite //读取权限,否则网站访问不了php权限

然后你就可以把你的网站文件放到mysite里,再重启相关服务,没问题的话,网站就可以打开了:

sudo systemctl reload php-fpm
sudo systemctl reload nginx

十二、安装Composer

参考:

先安装composer依赖的php插件,如果之前在安装php插件时安装过就不用再安装了

sudo yum install php70u-cli -y

使用包管理来安装composer:

curl -S https://getcomposer.org/installer | php

ls查看,会看到下载一个composer.phar文件,输入:php composer.phar会出现一些帮助信息。如果你想在服务器的任何地方去使用的话需要去设置一下,把composer.phar 这个文件放在系统的环境变量里面的某个目录里面,全局使用!

echo $PATH //查看环境变量路径
sudo mv composer.phar /usr/local/bin/composer  //好了后可以直接输入 composer 可以看到很多信息表明成功!
vi ~/.bash_profile

追加到PATH后面
把原来的:PATH=$PATH:$HOME/bin 换成:PATH=$PATH:$HOME/bin:$HOME/.composer/vendor/bin
让文件生效:

source ~/.bash_profile

十三、安装Drush

安装drush,指定安装8.x版本。使用 composer 在国内下载会比较慢,需要等挺长时间,所以本地安装很难成功。加上一个--prefer-dist表示我们不想去下载带版本控制的东西,再加上一个 -vvv可以显示在安装过程中的更详细的信息,最后再加上一个--profile显示耗费的内存还有时间,composer 会去找出 drush 还有它依赖的东西)

composer global require drush/drush:8.x --prefer-dist -vvv --profile

完成以后我们可以去看一下,先进入到用户的主目录下面:

ls -la

查看一下这个目录里的东西,有一个 .config 的目录,你会看到一个 composer 目录,再进入到composer这个目录下地vendor:

cd .config/composer/vendor

在这个目录里面,你会看到 composer 下载下来的drush ,还有一些其它的东西,把这个目录下面的 bin 这个目录,添加到系统的环境变量里面,可以去编辑一下主目录下面的.bash_profile

vi ~/.bash_profile

进入编辑模式后插入一条代码:

export PATH="$HOME/.config/composer/vendor/bin:$PATH"

保存并退出后然后再用 source 去执行一下.bash_profile:

source ~/.bash_profile

查看drush:

drush  //跟 drush 命令相关的帮助信息说明证明可以去使用 drush 了
drush status   //会显示一些状态信息,这里会有 PHP 的地址,配置文件,drush 的版本等等

十四、安装Git

可能要用到git,所以顺便安装一下:

yum search git
sudo yum install git2u -y  //安装
sudo yum remove git-core -y  //若有提示冲突,删除冲突的包再执行安装
git config --global user.name "feng"  //告诉Git你是谁
git config --global user.email "54370478@qq.com"  //告诉Git你的 Email

另外顺便提一下一键LNMP:https://oneinstack.com/install/ 这种方法可让你快速部署网站,少了很多麻烦,不用自己折腾的死去活来。但是,我还是提倡大家自己动手,丰衣足食!别人的永远是别人的,只有自己掌握才是自己的,才是熟悉的,所以,我不推荐使用一键LNMP。

十五、安装Drupal8

有两种方式,一种是直接下载的上传到网站目录里,第二种是用drush来下载。

直接下载:

Drush下载:

例如,我们的网站目录是放在/home/site里的,进入到这个目录后,用以下命令下载:

drush dl drupal  //下载最新drupal

解压到网站目录:

下载好了就把drupal解压到/home/site目录里(如果是zip文件就用以下命令解压,如果是用drush下载的就不用解压,因为drush已解压好了):

unzip drupal8.zip

打开网站:

然后在浏览器里输入你在Vagrantfile中配置好的IP打开进行drupal安装,例如我配置的IP是:192.168.33.100,在安装时若需要安装简体中文就可以提前在官网上下载好,然后放入网站目录里site/default/files/translations里面,再刷新:
https://localize.drupal.org/translate/languages/zh-hans

安装示例:

在安装drupal8网站前,必须先进入数据库建立一个新的数据库名称,比如你建立了一个名为“ss”的数据库,在安装drupal时在数据库名称这栏就填写你新建的数据库名称即可。以下为例:

修改权限:

OK,网站现在可以了,我们可以试着在drupal上安装扩展,但发现在线或者下载了都不能安装,这是因为权限的问题,批量修改文件夹及文件用户权限和用户组权限,在[vagrant@locahost sites]$下

查看用户及用户组权限  ls -lh
批量修改目录下所有文件的用户为root chown -R root *
批量修改目录下所有文件,用户组为root    chown -R :root *
Centos 设置目录及文件权限,现在我们要把sites这个目录的权限改成可读写的权限
chown -R 777

所有配置文件信息路径

注意事项:

权限问题:

Vagrant 会给我们在虚拟机与本地电脑之间设置一个共享的目录,默认这个目录在本地电脑就是项目的根目录,在虚拟机上这个共享的目录是 /vagrant ,这个目录的拥有者与用户组都会是 vagrant。注意我们不能在虚拟机上修改这个目录的权限,所以,如果你的网站应用放在这个目录的下面或者它下面的某个子目录里面,你需要把运行 PHP-FPM 这个服务的用户修改成 vagrant。
编辑一下 php-fpm 的配置文件:

sudo  vi /etc/php-fpm.d/www.conf

找到:user = php-fpm,把php-fpm修改成 vagrant

user = vagrant

保存配置文件后重启一下php-fpm

sudo systemctl restart php-fpm

在varant本地中,如果要修改哪个文件权限:
读写权限,使用:

sudo chmod 777 *

读取权限,使用:

sudo chmod 755 *

无权读取,使用:

sudo chmod 700 *

以上的*号表示在本文件夹下所有文件设置,也可以直接使用文件夹名称,如使用:sudo chmod 700 aaa

通常使用的数字值和其意义:

-rw------- (600) -- 只有属主有读写权限
-rw-r--r-- (644) -- 只有属主有读写权限而属组用户和其他用户只有读权限
-rwx------ (700) -- 只有属主有读写执行权限
-rwxr-xr-x (755) -- 属主有读写执行权限而属组用户和其他用户只有读执行权限
-rwx--x--x (711) -- 属主有读写执行权限而属组用户和其他用户只有执行权限
-rw-rw-rw- (666) -- 所有用户都有文件读写权限。这种做法不可取
-rwxrwxrwx (777) -- 所有用户都有读写执行权限。更不可取的做法

用drush管理模块

drash 命令大全:

 pm-disable (dis)       禁用模块   
 pm-download (dl)       下载模块   
 pm-enable (en)         Enable one or more extensions (modules or themes). 
 pm-info (pmi)          查看模块的相关信息
 pm-list (pml)          显示一个模块列表 
 pm-projectinfo (pmpi)  Show a report of available projects and their extensions.  
 pm-refresh (rf)        刷新升级的状态报告
 pm-releasenotes        Print release notes for given projects.
 pm-releases (rl)       Print release information for given projects.  
 pm-uninstall (pmu)     卸载指定的模块 
 pm-update (up)         升级 drupal 核心
 pm-updatecode (upc)    Update Drupal core and contrib projects to latest recommended releases.
 pm-updatestatus        Show a report of available minor updates to Drupal core and contrib projects.  
 runserver (rs)         Runs PHP's built-in http server for development.

drush下载drupal版本

drush dl drupal         下载最新drupal
drush dl drupal-8       下载drupal8的最新版本

drush升级drupal核心

drush rf                        升级前,用空上命令刷新一下更新的信息
drush pm-updatestatus           查看可用更新
drush vset maintenance_mode 1   可以打开维护模式
drush up drupal                 升级drupal核心
drush up ctools -y              如果有模块需要升级可以用
drush vset maintenance_moda 0   最后,关掉维护模式

drush操作模块相关命令

如果下载模块的话,命令工具进入到相应的文件夹里:

drush dl ctools             下载叫ctools的模块到drupal(推荐版本)
drush dl ctools --select    可选择ctools这个模块的相关版本
drush pmi ctools            查看ctools这个模块的相关信息
drush en ctools             启用这个模块
drush dis ctools            禁用这个模块(只mv适用drupal7)
drush dis ctools    -y      禁用这个模块时确认的窗口全选yes(只适用drupal7)
drush pmu ctools -y         卸载这个模块

备份与恢复

如果要备份网站的话,执行以下命令会把网站所有文件及数据库打包成一个文件放在/root/drush-backups/archive-dump里面:

drush archive-dump

进到这个目录里,执行以下命令可以解压这个压缩包里的文件:

tar -zxvf filename.tar.gz

删除网站执行以下命令:

sudo rm -rf webname

删除网站数据库执行以下命令:

mysqladmin -u root -p drop databasename;

创建一个数据库执行以下命令:

mysqladmin -u root -p create databasename;

如果要恢复网站的话,先进到网站备份相应的目录,执行以下命令:

drush archive-restore ./webname.tar.ga --destination=/www/webname

--destination=/www/webname这行命令表示你恢复的网站文件所放的位置

导入导出数据库

在导出数据库之前,先清缓存:

drush cc        选择全部清空:2

导出数据库执行以下命令(放到主目录下):

drush sql-dump > ~/adname.sql

导入数据库执行以下命令:

drush sql-cli < ~/adname.sql

导出导入的sql文件都放在root目录下!

下载Drupal8常用模块

drush dl backup_migrate ctools flag flippy honeypot imce inline_entity_form l10n_client module_filter pathauto rules site_verify smtp token typed_data wechat entity_clone entity_browser entity embed ds sitemap views_slideshow

下载Drupal8常用主题

drush dl adminimal_theme omega bootstrap

下载并安装Drupal7常用模块

drush en views views_ui views_slideshow block_class ckeditor ctools imce r4032login token simplehtmldom addanother back_to_top ajax_comments node_clone devel_themer devel simplehtmldom module_missing_message_fixer pathauto libraries date webform wysiwyg google_analytics entity backup_migrate link captcha jQuery_update sitemap module_filter rules l10n_update flag smtp commerce inline_entity_form commerce_fancy_attributes field_group commerce_extra_price_formatters commerce_discount content_access -y

下载Drupal7常用主题

drush dl adminimal_theme omega bootstrap
上一篇下一篇

猜你喜欢

热点阅读