冉老师整理
# Linux-Oracle 对接服务器配置文档
**主要内容**:
1. 外网计算机:安装 VirtualBox,配置一个跑业务的虚拟机
2. 内网实体机:安装 VirtualBox,导入在外网计算机配置的虚拟机
## 1 .外网计算机
### 1.1 安装 VirtualBox
根据不同系统,下载对应版本的 VirtualBox。下载地址:[https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
注意:安装后如果不能支持创建 64 bit 的虚拟机,则在 Bios 启用虚拟化支持。相关文档:[启动BIOS的虚拟化设置 | 开启CPU虚拟化支持](http://jingyan.baidu.com/article/335530daa55d7e19cb41c3c2.html)
### 1.2 创建虚拟机并安装 Ubuntu
虚拟机镜像采用 Ubuntu 14.04 64 bit 桌面版。
### 1.2.1 配置 LAMP 运行环境
参考文档:[https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14-04](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14-04)
文档很详细,一步一步的做就可以了。
### 1.2.2 配置 Drupal 环境并安装 Drupal
参考文档:[https://www.digitalocean.com/community/tutorials/how-to-install-drupal-on-an-ubuntu-14-04-server-with-apache](https://www.digitalocean.com/community/tutorials/how-to-install-drupal-on-an-ubuntu-14-04-server-with-apache)
### 1.2.3 安装 oci8 扩展
#### 1.2.3.1 准备工作:安装 Oracle Client。
先查看服务器端 Oracle 的版本,如果可以执行 SQL 语句。
~~~
SELECT * FROM v$version
~~~
下载对应版本的 Oracle 连接客户端。下载地址:[http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html](http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html) , 下载页面的底部是安装文档。
需要注意的是把环境变量的设置放入了 .bashrc 文件中。
~~~
export PATH=/opt/oracle/instantclient_11_2:$PATH
~~~
并使用
~~~
source ~/.bashrc
~~~
使其生效。
#### 1.2.3.2 开始安装 oci8 扩展
因为安装的 PHP 版本为 5.1 ~ 5.6 之间,所以选择 oci8 扩展的版本为 2.0.12
通过源码的方式安装,步骤为下载源代码,解压后进入其文件夹,配置,编译,安装。
参考文档 [http://php.net/manual/en/oci8.installation.php](http://php.net/manual/en/oci8.installation.php),[https://gist.github.com/ranqiangjun/1e40dde4ea35833dd5933c3706cd9244](https://gist.github.com/ranqiangjun/1e40dde4ea35833dd5933c3706cd9244)
### 1.2.4 安装 Drush
准备工作:安装 git 和 composer(具体查看 bash 的历史记录)
步骤:
- 克隆源代码到 ~/.drush
- 检出一个 7.x 的一个版本,8.x 也支持 drupal 7,但是对 php 的要求可能更高,与当前系统安装的 php 版本冲突。
- 运行 composer install 安装依赖
- 创建符号链接到 /usr/local/bin,使得可以全局运行 drush 命令
### 1.2.5 安装 openssh-server
使得允许使用 ssh 访问。
~~~
sudo apt-get installl openssh-server -y
~~~
## 2 内网实体机
### 2.1 安装系统
系统选择 Ubuntu 16.04 64 bit 桌面版
#### 2.1.1 制作安装 U 盘
工具:[https://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/](https://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/)
#### 2.1.2 安装 Ubuntu
如果安装完毕后,无法正常进入,则考虑格式化整个磁盘,重新安装。
### 2.2 无网络安装 openssh-server
无网络的情况下,获取 openssh-server 及其依赖的下载地址。
在一个全新安装的可联网 Ubuntu 16.04 64 bit 虚拟机/实体机里运行下面这条命令,获取 openssh-server 及其依赖列表。执行前需将命令中的 package-name 替换为 openssh-server。
~~~
apt-get -y install --print-uris package-name | cut -d\' -f2 | grep http:// > apturls
~~~
下载文件
~~~
wget -i path-to-apturls-file
~~~
拷贝文件到不可联网的机器上,进入包含 deb 文件的文件夹,安装
~~~
sudo dpkg -i *.deb
~~~
#### 2.3 安装 VirtualBox
去官网下载对应版本的安装文件。运行下面的命令安装
~~~
dpkg -i 文件夹名
~~~
如果缺少依赖,解决依赖的问题。通过上面的方式或联网。
#### 2.4 导入虚拟机镜像
启动 VirtualBox,打开终端,输入:
~~~
sudo VirtualBox &
~~~
让其以 root 账号身份在后台运行。使用 root 账号身份运行,使得 VirtualBox 在配置端口映射时,可以使用数值比较小的端口,如 80。
#### 2.5 设置端口映射
需要映射至少两个端口,80 是 Drupal 网站的默认端口,22 是 SSH 服务的默认端口。
所以可以将实体机的 80 端口映射为虚拟机里的 80 端口,其他某个的端口如 2222 影射为虚拟机里的 22 端口。
外部则可以使用实体机的 ip 虚拟机里的网站。使用下面这个命令利用 ssh 登录虚拟机:
~~~~
ssh gat@ip地址 -p 2222
# 提示输入密码时输入 gat
~~~~
## 附1:默认账号密码
虚拟机:
实体机
## 附2:虚拟机管理常用命令
- 运行 VirtualBox
~~~
sudo VirtualBox
~~~
可能的输出:
~~~
"Ubuntu14.04 Clone_1" {d7c1be83-1f78-41d3-bfb9-a11b2c0bd993}
~~~
"Ubuntu14.04 Clone" 为界面中显示的虚拟机名字
- 列出虚拟机
~~~
VBoxManage list vms
~~~
- 以 Headless 方式启动虚拟机
~~~
VBoxManage startvm "Ubuntu14.04 Clone" --type headless
~~~
其中 "Ubuntu14.04 Clone" 为界面中显示的虚拟机名字
- 关闭虚拟机
~~~
VBoxManage controlvm "Ubuntu14.04 Clone" poweroff
~~~
- 创建一条名为 ssh 的映射规则
将实体机的 2222 端口,映射到虚拟机的 22 端口
~~~
VBoxManage controlvm "Ubuntu14.04 Clone" natpf1 "ssh,tcp,,2222,,22"
~~~
- 删除一条名为 rule1 的映射记录
~~~
VBoxManage controlvm "Ubuntu14.04 Clone" natpf1 delete rule1
~~~
更多命令查阅 VirtualBox 用户手册:[https://www.virtualbox.org/manual/](https://www.virtualbox.org/manual/)
## 附3 修改软件安装源
如果使用 apt-get 安装软件很慢,可以考虑换源。
下面是将 Ubuntu 14.04 的源修改为阿里云提供的镜像源。
编辑 `/etc/apt/sources.list`,(编辑前最好备份该文件),修改其内容如下:
~~~
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
~~~
Ubuntu 16.04 则将上面的所有 trusty 换为 xenial 即可。
## 附3:部分操作命令记录
来自 history 命令
~~~
16 sudo apt-get update
18 sudo apt-get install apache2
19 sudo apt-get install mysql-server php5-mysql
20 sudo mysql_install_db
21 sudo mysql_secure_installation
22 sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
23 sudo vi /etc/apache2/mods-enabled/dir.conf
24 sudo service apache2 restart
25 sudo apt-get install php5-cli
26 vi /var/www/html/info.php
27 sudo vi /var/www/html/info.php
29 sudo apt-get install php5-gd php5-curl libssh2-php
30 sudo vi /etc/php5/apache2/php.ini
31 sudo a2enmod rewrite
32 sudo vi /etc/apache2/sites-enabled/000-default.conf
33 sudo service apache2 restart
34 wget http://ftp.drupal.org/files/projects/drupal-7.54.tar.gz
35 tar xzvf drupal*
36 cd drupal-7.54/
37 sudo rsync -avz . /var/www/html
38 cd /var/www/html
39 mkdir /var/www/html/sites/default/files
40 cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php
41 chmod 664 /var/www/html/sites/default/settings.php
42 sudo chown -R :www-data /var/www/html/*
# 解压 Oracle 客户端,需要的两个文件
50 unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
51 unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
54 sudo mkdir /opt/oracle
57 sudo mv instantclient_11_2/ /opt/oracle/
64 cd instantclient_11_2/
66 ln -s libclntsh.so.11.1 libclntsh.so
67 ln -s libocci.so.11.1 libocci.so
73 vi .bashrc
74 . .bashrc
75 echo $LD_LIBRARY_PATH
80 tar -xf oci8-2.0.12.tgz
81 cd oci8-2.0.12/
89 sudo apt-get install php5-dev
90 phpize
91 ./configure --with-oci8=instantclient,/opt/oracle/instantclient_11_2
92 make
94 sudo make install
95 echo $LD_LIBRARY_PATH
100 ll /usr/lib/php5/20121212/oci8.so
115 sudo vi /etc/php5/mods-available/oci8.ini
118 sudo php5enmod oci8
119 sudo service apache2 restart
121 cd /opt/oracle/instantclient_11_2/
123 mkdir -p network/admin
124 cd network/admin
126 vi tnsnames.ora
130 cd /var/www/html/sites/all/modules/
132 mkdir custom
133 cd custom/
134 mkdir oracle_test
138 cd oracle_test/
140 touch oracle_test.{info,module}
142 vi oracle_test.info
144 ls
145 rm oracle_test.module
146 mv oracle_test.info oracle_test.module
152 git clone https://github.com/drush-ops/drush.git .drush
153 sudo apt-get install git
155 git clone https://github.com/drush-ops/drush.git .drush
156 cd .drush/
159 cd
160 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
161 php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
162 php composer-setup.php
163 php -r "unlink('composer-setup.php');"
166 sudo mv composer.phar /usr/local/bin/composer
171 composer config -g repo.packagist composer https://packagist.phpcomposer.com
176 git checkout 7.4.0
177 composer install -vvv
179 ./drush
191 sudo ln -s $(pwd)/drush /usr/local/bin/
196 drush init
197 cd /var/www/html/
198 drush en admin_menu -y
199 drush dis toolbar -y
200 drush pm-uninstall toolbar -y
201 drush en oracle_test -y
203 drush en devel -y
~~~