linode 设置

Project Picky

Rails & PHP Linux VPS速配指南

12/31/2009

VPS 主机类型: Linode 360

可到 linode.com 购买,360MB 物理内存,16GB 磁盘存储空间,200GB 月流量(输入输出总和) ,1个独立IP,月租 $19.95 (信用卡支付)。数据中心目前选择 Fremont, CA, USA 最快,Dallas, TX, USA 其次,测速地址:http://www.linode.com/speedtest/ 。(Newark, NJ, USA已有部分IP段不幸遇难,请低调分享)

VPS 操作系统: Debian 5.0 (Lenny)

操作系统大小约 200M,比 Ubuntu 节省一半多的磁盘空间 ;还有很多其他可选的操作系统,可以根据自己的喜好和需要进行选择 。这篇文档同样适配于Ubuntu Server。

装完操作系统后,在本地用 SSH 方式登录远程主机,Windows 系统推荐使用方便小巧的 Putty (接受数据的字符集请选择 UTF-8,否则输出的非英文信息会乱码) 。这里假设VPS 的IP 地址是 12.34.56.78 。

$ ssh root@12.34.56.78 # 登入远程主机

设置源

使用apt-spy命令可以让系统自动寻找并设置速度最快的源。

$ apt-get install apt-spy # 下载安装 apt-spy 软件包
$ mv /etc/apt/sources.list /etc/apt/sources.list.bak # 备份默认的源文件
$ man apt-spy # 获取详细的使用方法
$ apt-spy update # 更新源的镜像列表文件 /var/lib/apt-spy/mirrors.txt
$ apt-spy -d stable -a North-America # 在北美地区寻找速度最快的stable版镜像,
并生成sources.list文件,也可使用 -o 参数输出到指定文件

更新系统

$ apt-get update
$ apt-get upgrade -y

安装所需软件包

$ apt-get -y install build-essential \
openssl libssl-dev openssh-server \
vim wget curl sudo libreadline5-dev \
zlib1g-dev

创建管理员帐号(非root)

由于root太出名了,可能出意外;基于安全考虑,从入口把关,在后面的SSH安全设置中会禁用root帐号登录。这里假设新建的用户名是 demo。

$ adduser demo # 创建用户名为demo的普通用户,读者朋友们操作时需将 demo 改成你想要的名字
$ vim /etc/sudoers

编辑/etc/sudoers,在文件的最末尾加上如下一行代码:

demo ALL=(ALL) ALL

上面一行设置 demo 用户的可操作范围(同root)。写入后保存并退出 (按Esc后键入 :wq 并按回车)。

生成SSH密钥对(客户端操作)

$ mkdir ~/.ssh # 创建用于存放密钥对的默认文件夹
$ ssh-keygen -t rsa # 生成SSH密钥
$ scp ~/.ssh/id_rsa.pub demo@12.34.56.78:~ # 上传SSH公钥至远程服务器

上面的命令行在当前用户的主目录中创建了一个 .ssh/ 目录,用于存放我们用ssh-keygen程序生成的密钥对。所谓“密钥对”,是指由ssh-keygen命令行产生的一份私钥(private key)和一份公钥(public key),两者构成一个密钥对。在以上示例中,私钥是~/.ssh/id_rsa ,公钥是~/.ssh/id_rsa.pub。私钥存放在本地的客户端机器中,公钥则存放在远程主机上;公钥用于服务端进行加密操作,私钥则用于客户端还原经混入公钥加密后的密文。我们把公钥public key放在远程系统指定用户的主目录中,当从本地开始进行ssh连接时,远程的sshd进程会产生一个随机字符串并用我们产生的public key进行加密,然后将加密后的密文发送给本地客户端机器,本地机器再用private key进行解密还原出这一随机字符串并发回给远程系统,如果经客户端还原后的随机字符串与原先服务端生成的字符串一致,那么远程主机则允许从此客户端登录,两台机器间便建立了连接。使用SSH PublicKey认证的好处在于无需提供远程系统的用户名和密码就能够与目标主机直连;即每当两台机器需要建立连接时,不用每次都输入远程主机的用户名和密码。

注册公钥(远程主机)

$ mkdir /home/demo/.ssh
$ mv /home/demo/id_rsa.pub /home/demo/.ssh/authorized_keys
$ chown -R demo:demo /home/demo/.ssh
$ chmod 700 /home/demo/.ssh
$ chmod 600 /home/demo/.ssh/authorized_keys

我们把在客户端生成的公钥放在要远程主机的~/.ssh/目录下并改名为authorized_keys, 并且保证文件除了属主外没有被人修改的权限。

SSH 安全设置

$ vim /etc/ssh/sshd_config # 编辑远程主机上的ssh配置文件,找到相关选项进行如下设置

Port 5120 # 将 SSH 秘道端口由默认的 22 改为 5120,可以自行更改,必须是没有被使用的端口
PermitRootLogin no # 禁用root登录
X11Forwarding no # 禁止用户运行远程主机上的X程序
UsePAM no # 关闭PAM密码认证(因为已使用PublicKey的认证方式)
UseDNS no # 禁用DNS解析(可能造成延时)
AllowUsers demo # 只允许用户demo以SSH方式登录

$ /etc/init.d/ssh restart # 重启SSH Server 以使配置生效

然后,退出当前连接;从本地客户端尝试以demo用户的身份登录该远程主机。

$ ssh demo@12.34.56.78 -p 5120 # 登录成功后继续

接下来我们可以放心地进行系统配置。

设置时区

$ sudo dpkg-reconfigure tzdata # 可选择 Asia / Shanghai, 或者使用 sudo tzselect 命令。
$ date

可以用如下命令通过网络同步系统时间(需联网,若无效可用su命令切换到root帐号操作)

$ sudo apt-get install ntp
$ sudo ntpdate ntp.ubuntu.com # 同步系统时间
$ date

系统语言设置(可选)

设置系统默认的语言环境的用处并不大,不过您可以根据自身需要,设置操作系统默认语言环境和字符集。下面的示例将操作系统的默认语言设置为简体中文,字符集为UTF-8。

$ sudo apt-get install locales # 下载安装区域语言包
$ sudo dpkg-reconfigure locales # 选择安装指定的语言包

在弹出的窗口中选择 en_GB.UTF-8 UTF-8 和 zh_CN.UTF-8 UTF-8 ,空格选中,方向键可以上下移动,tab键切换到按钮,回车确认,这将会安装选定的语言包;之后会询问设置默认的语言和字符集,按方向键选中后回车即可。

也可用如下命令行将系统默认的语言环境设置为简体中文UTF-8编码。

$ sudo locale-gen zh_CN.UTF-8
$ sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8

设置主机名

$ hostname # 如果输出为空则表示尚未设定主机名称,继续按如下方式设置
$ sudo echo "your_host_name" > /etc/hostname # 将 "your_host_name" 换成你想要的名字
$ sudo hostname -F /etc/hostname # 更新主机名
$ hostname # 查看新的主机名是否生效

设置DNS

$ sudo vim /etc/resolv.conf

第一个 nameserver 后面的IP是系统解析域名的主DNS,第二个是备用DNS。下面示例将原来系统自动分配给我们的DNS注释掉,换成Google Public DNS 。只要DNS不是内网IP,您也可以用默认的DNS设置而无需进行更改。

nameserver 8.8.8.8
nameserver 8.8.4.4

绑定静态IP

$ sudo vim /etc/network/interfaces

# The loopback interface
auto lo
iface lo inet loopback

# auto eth0 #注释掉,禁用DHCP自动分配IP的方式
# iface eth0 inet dhcp # 注释掉,禁用DHCP自动分配IP的方式

# 接下来配置以太网IP地址及别名,IP/掩码/网关请自行修改。

# 开机时自动设置如下三个IP地址(这里自动载入的是eth0 及其两个别名eth0:0 eth0:1)
# auto 后面的以太网卡名称及其别名必须在下面的配置中存在。如果下面配置中删除一个IP地址这里也要做相应的变更。

auto eth0 eth0:0 eth0:1

# eth0 - 主IP地址

iface eth0 inet static
address 12.34.56.78 # IP 地址
netmask 255.255.255.0 # 子网掩码
gateway 12.34.56.1 # 网关

# eth0:0 - 绑定的另外一个独立IP(公网),如果你只有一个IP地址可以去掉此部分,不过配置也需要做相应的调整。

iface eth0:0 inet static
address 34.56.78.90
netmask 255.255.255.0
gateway 34.56.78.1

# eth0:1 - 内网IP,供机房内部局域网连接使用,无需外部网关
# 指定内网IP和掩码即可

iface eth0:1 inet static
address 192.168.123.234
netmask 255.255.128.0

保存并退出 :wq

重启eth0,使IP配置生效:

$ sudo /etc/init.d/network restart

安装 Git

$ sudo apt-get install git-core

安装数据库

安装 MySQL

$ sudo apt-get -y install mysql-server libmysqlclient15-dev mysql-client

安装 SQLite

$ sudo apt-get -y install sqlite3 libsqlite3-dev

安装 PostgreSQL

$ sudo apt-get -y install postgresql

上述第三行代码安装了 MySQL/PostgreSQL/SQLite 三种RDBMS,建议您根据需要选择安装。您也可以选择下载数据库安装文件的压缩包解压后进行编译安装。

安装 Ruby

服务器跑Ruby站点推荐用REE,下载地址:http://www.rubyenterpriseedition.com/download.html

$ mkdir ~/temp && cd ~/temp
$ wget http://rubyforge.org/frs/download.php/68719/ruby-enterprise-1.8.7-2010.01.tar.gz
$ tar xzvf ruby-enterprise-*.tar.gz
$ sudo ./ruby-enterprise-1.8.7-2010.01/installer
$ export RUBY_HOME=/opt/ruby-enterprise-1.8.7-2010.01
$ sudo ln -s $RUBY_HOME/bin/ruby /usr/bin/ruby
$ echo "export RUBY_HOME=$RUBY_HOME
 export PATH=$RUBY_HOME/bin:$PATH" > ~/.profile && ~/.profile
$ ruby -v

手动安装 RubyGem

$ wget "http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz"
$ tar -xzvf rubygems-1.3.6.tgz
$ cd rubygems-1.3.6
$ sudo ruby setup.rb
$ sudo ln -s $RUBY_HOME/bin/gem /usr/bin/gem

安装 Passenger & Nginx

$ sudo $RUBY_HOME/bin/passenger-install-nginx-module

控制台输出信息,询问以何种方式安装Nginx,选择第一项 1. Yes: download, compile and install Nginx for me. (recommended)

然后会下载Nginx源码包并解压到 /tmp 目录中。可以用命令行 $ ls -l /tmp 查看Nginx源码包及其解压后的文件夹是否存在。

如果想在安装Nginx时一并安装其他扩展库,可以先退出交互式Shell程序,再一次运行

$ sudo $RUBY_HOME/bin/passenger-install-nginx-module

不过这次要选择第二项 2. No: I want to customize my Nginx installation. (for advanced users)

当询问 “Where is your Nginx source code located?” 时,输入 Nginx 源码所在的目录:

/tmp/nginx-0.7.64

回车确认。接着会询问附加参数,即要加载的Nginx扩展模块。比如我们要加载SSL模块,可以输入:

--with-http_ssl_module

要加载其他模块,一并输入即可。Nginx 各模块参考:http://wiki.nginx.org/NginxModules

然后继续回车确认,直至编译安装完毕。

Nginx 相关设置

# 创建虚拟用户 www-data(虽是系统用户,但-s参数已指定并无登录系统的权限)
$ sudo useradd -s /sbin/nologin -r www-data

# 将www-data demo作为用户demo的附加群组,请自行修改用户名
$ sudo usermod -a -G www-data demo

$ mkdir -p ~/web/logs && cd ~/web
$ rails example.com

# 将~/web/及其子目录中文件的属组设置为 www-data
$ sudo chgrp -R www-data ~/web

# ~/web/及其子目录中文件的权限设置
$ sudo chmod -R 2750 ~/web

$ sudo su

# 用于存放可用站点的 vhosts
$ mkdir /opt/nginx/sites-available

# 用于存放可运行站点的快捷方式,软链接指向/opt/nginx/sites-available中的各 vhost 文件
$ mkdir /opt/nginx/sites-enabled

$ cd /home/demo/temp

设置 vhost (示例)

$ git clone git://gist.github.com/266085.git gist-266085
$ mv gist-266085/example.com.conf /opt/nginx/sites-available/
# 根据实际情况进行修改,比如WEB根目录
$ vim /opt/nginx/sites-available/example.com.conf
$ ln -s /opt/nginx/sites-available/example.com.conf /opt/nginx/sites-enabled
$ rm -rf gist-266085/

更新 Nginx 配置文件

$ mv /opt/nginx/conf/nginx.conf /opt/nginx/conf/nginx.conf.bak
$ git clone git://gist.github.com/265360.git gist-265360
$ mv gist-265360/nginx.conf /opt/nginx/conf/
$ rm -rf gist-265360/

Nginx命令行脚本

$ git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git
$ mv rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx
$ chown root:root /etc/init.d/nginx
$ /etc/init.d/nginx start # stop | restart | force-reload | status | configtest | terminate
$ /usr/sbin/update-rc.d -f nginx defaults
$ rm -rf rails-nginx-passenger-ubuntu
$ exit

此时,打开浏览器输入 http://example.com 应该能看到 Rails app 的默认页面。

编译安装 ImageMagick

$ sudo apt-get remove imagemagick

$ sudo apt-get -y install libperl-dev gcc libjpeg62-dev libbz2-dev \
libtiff4-dev libwmf-dev libz-dev libpng12-dev libx11-dev \
libxt-dev libxext-dev libxml2-dev libfreetype6-dev liblcms1-dev \
libexif-dev perl libjasper-dev libltdl3-dev graphviz gs-gpl pkg-config

$ cd ~/temp
$ wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
$ tar xvfz ImageMagick.tar.gz
$ cd ImageMagick-*
$ ./configure && make
$ sudo make install
$ sudo ldconfig
$ rm -rf ~/tmp/ImageMagick-*

安装 PHP 和 FPM (PHP FastCGI 进程管理器)

先安装依赖包 libxml 和 libevent

$ sudo apt-get install -y libxml2-dev libevent-dev

libevent 主页:http://www.monkey.org/~provos/libevent/

$ export LE_VER=1.4.13-stable
$ cd ~/temp
# http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
$ wget "http://www.monkey.org/~provos/libevent-$LE_VER.tar.gz"
$ tar -zxvf "libevent-$LE_VER.tar.gz"
$ cd "libevent-$LE_VER"
$ ./configure && make
$ sudo make install
$ rm -rf "libevent-$LE_VER"

下载 FPM 并生成补丁

$ export PHP_VER=5.3.1
$ export FPM_VER=0.6
$ cd ~/temp
$ wget "http://launchpad.net/php-fpm/master/$FPM_VER/+download/php-fpm-$FPM_VER~$PHP_VER.tar.gz"
$ tar -zxvf "php-fpm-$FPM_VER~$PHP_VER.tar.gz"
$ "php-fpm-$FPM_VER-$PHP_VER/generate-fpm-patch"

下载PHP源码包并解压

$ wget "http://cn.php.net/get/php-$PHP_VER.tar.gz/from/cn2.php.net/mirror"
$ tar xvfz "php-$PHP_VER.tar.gz"
$ cd "php-$PHP_VER"

安装编译过程中需要的工具和库

$ sudo apt-get install -y autoconf autoconf2.13 mcrypt libmcrypt-dev libmcrypt4

打上FPM补丁然后编译安装PHP

$ patch -p1 < ../fpm.patch
$ ./buildconf --force
$ mkdir fpm-build && cd fpm-build
$ ../configure --with-fpm \
$ --with-config-file-path=/usr/local/lib/php.ini \
$ --with-libevent \
$ --with-fpm-user=www-data \
$ --with-fpm-group=www-data \
$ --with-mysql \
$ --with-zlib --with-gd \
$ --enable-mbstring \
$ --with-mcrypt && make
$ sudo make install

添加系统启动项

$ sudo update-rc.d php-fpm defaults
$ sudo invoke-rc.d php-fpm start

清理无用文件

$ cd ~/temp
$ rm -rf "php-$PHP_VER"
$ rm -rf "php-fpm-$FPM_VER-$PHP_VER"
$ rm fpm.patch

PHP 安全设置

$ vim /usr/local/lib/php.ini

修改php.ini,设置如下:

safe_mode = On
display_errors = Off
allow_url_fopen = Off
expose_php = Off
disable_functions = phpinfo, get_cfg_var,passthru,exec,system, \
popen,chroot,escapeshellcmd,escapeshellarg,shell_exec, \
proc_open,proc_get_status,ini_restore

重启 PHP FastCGI 进程

$ sudo /etc/init.d/php-fpm restart

安装 phpMyAdmin

$ export PMA_VER=3.2.5
$ cd ~/temp
$ wget "http://downloads.sourceforge.net/project/phpmyadmin/
  phpMyAdmin/$PMA_VER/phpMyAdmin-$PMA_VER-all-languages.tar.gz"
$ tar xzvf phpMyAdmin-$PMA_VER-all-languages.tar.gz
$ mv phpMyAdmin-$PMA_VER-all-languages/ ~/web/pma
$ sudo chgrp -R www-data ~/web/pma
$ cp ~/web/pma/config.sample.inc.php ~/web/pma/config.inc.php
$ vim ~/web/pma/config.inc.php # 编辑 $cfg['blowfish_secret'] = ' '; 后保存退出 ( :wq )
$ rm ~/web/pma/phpinfo.php

vhost 映射

$ cd ~/temp
$ git clone git://gist.github.com/266647.git gist-266647
$ sudo mv gist-266647/pma.conf /opt/nginx/sites-available/
$ sudo vim /opt/nginx/sites-available/pma.conf # 根据实际情况进行修改,比如WEB根目录
$ sudo ln -s /opt/nginx/sites-available/pma.conf /opt/nginx/sites-enabled
$ rm -rf gist-266647/

$ sudo /etc/init.d/nginx restart

此时,打开浏览器输入 http://pma.example.com:3307 应该能显示 phpMyAdmin 程序的登录界面。

未完待续…

祝大家新年愉快!Happy new year, every one! ;-)

Published on Jan-28 21:32

© 2009-2010 Ahy
Powered by Picky + Google App Engine

原文地址:https://www.cnblogs.com/lexus/p/1890476.html