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
分享到:
相关推荐
概述一路设置主控然后设置小兵CLUSTER_NAME=testSERVICE_IP_RANGE=10.0.0.0/16CLUSTER_POD_IP_RANGE=10.10.0.0/16POD_IP_RANGES=10.10.x.0/24条款Provisioning Master和2个奴才作为Ubuntu 15.04 设置主机名,私有IP...
在Linode上,你可以通过设置Linode Block Storage Volume来实现这一点。你需要创建一个Volume并将其挂载到Kubernetes的PersistentVolume上,再创建对应的PersistentVolumeClaim供Pod使用。 7. **部署Traefik**:...
Linode是一家知名的云服务提供商,其API允许开发者通过编程方式管理Linode账户中的各种资源,如创建和管理虚拟服务器(Linodes)、配置网络设置、管理存储卷等。通过使用`linode_api4`,我们可以轻松地在Python应用...
每次我想要一台新服务器时,我基本上都厌倦了使用Web界面创建Linodes并执行相同的基本设置步骤(创建用户,上载ssh密钥,禁用root登录等)。 这些不是艰巨的任务,但是却浪费了我本可以用来做其他事情的时间。 在...
下载脚本: $ git clone https://github.com/andrewchilds/linode-dyn-dns $ cd linode-dyn-dns设置您的 API 密钥,可在找到: $ echo MY_API_KEY > .key获取您的域 ID 和资源 ID(您的 A 记录)。 可以通过运行...
如果您已经设置了开发环境,请阅读以获取有关进行首次PR的帮助。 我想为Cloud Manager贡献力量 :smiling_face_with_heart-eyes: 除了提供帮助的准则外,您还可以阅读我们的和文档,以获取有关如何按照我们的期望...
入口点设置为linode --help因此 runnign 容器将列出 API 中的所有可用选项。 示例输出: Linode Bash API CoreOS Deployment Help opnions: --help help --node_name Node name (required) --node_plan Node plan ...
- 通过在VirtualBox中设置Debian和Xen的虚拟环境,成功复现了内核崩溃并获取了traceback,即崩溃的调用栈信息。 5. **技术挑战和分析**: - 在代码差异比较中,区分上游内核修改和PaX/grsecurity补丁的修改是一个...
设置创建linode帐户和api令牌创建SSH密钥对ssh-keygen ssh-agent bash SSH添加创建散列和盐腌的pw 用TF提供运行剧本片段openssl passwd -salt superSalt -1 superPWDtf output -json | jq --raw-output '.private_ip...
在本教程中,我们将深入探讨如何在Linode服务器上配置一个功能齐全的多站点Web环境,包括Ubuntu 16.04 LTS操作系统、UFW防火墙、Nginx Web服务器(支持多站点)、MySQL数据库、phpMyAdmin管理工具、PHP 7、Let's ...
例如,开发者可以研究emtr0dotcom-old-master这个文件夹内的内容,查看项目的组织结构、模板文件、配置设置等,以加深对这些工具实际应用的理解。总的来说,这个项目展示了现代Web开发中常用的技术栈,对于学习和...
我正在使用Linode VP服务器帐户。 每月5美元即可在这里获得一个 第一步 Debian的 # apt-get update # locale-gen && export LC_ALL="en_US.UTF-8" && apt-get -y install curl 默认服务器设置: # curl --output ...
covid-sanity - Aspires to help the influx ...Linode是在Internet上托管应用程序的一种简单/便宜的方法,并且他们提供了详细的教程供您设置。 在屏幕会话中运行服务器,并且有一个非常简单的脚本pull.sh来更新数据库
在Linode上设置服务器的步骤 首先,向Nelson询问Sunrise Linode上的帐户,以便您可以创建API令牌。 然后: 为Ansible创建库存文件 在“ / etc / ansible / hosts”(如果在Mac上使用Homebrew来安装Ansible,则在/ ...
设置linode服务器-> 自动api文档生成-> 引导和Sass编译 整合chart.js 前端 页数 登录/注册 家庭选择者 仪表盘 会员和邀请管理 排序和过滤付款 定期付款管理 资金池 功能性 使用邀请链接 动态数据获取...
假设用户正在使用来自IaaS提供商(如Amazon或Linode)的全新Debian 10安装。 1个更新VPS # Update via the package manager sudo apt update && sudo apt upgrade 2创建一个新用户并将其分配给sudo组 # create ...
Ansible用于供应和部署到Digital Ocean和Linode等服务 适用于Python 3.6.x 这些项目带有许多有用的页面和预构建的内容结构,可为您节省大量的工作。 我是否说过它会使用Letsencrypt为您的站点自动设置SSL! 入门 ...
假设这些已经在相邻目录中设置并且您已经在包含它们的目录中,那么: for a in lithium/ swops/ swops-secret/ cobalt/ do (cd $a;git pull) done 用法 将 settings-example.json 复制到 settings.json 并添加您...
有几种免费或便宜的选择,例如Digital Ocean,Linode和Amazon EC2。 设置服务器后,下一步就是安装并启动SMTP服务器。 这是实际发送欺骗电子邮件所必需的。 我个人使用Postfix,尽管可以。 该脚本默认将localhost:...
此README.md文件描述了设置 Linode(或其他服务器/VM)以托管这些 Docker 容器的步骤。 请按照给定的顺序执行这些步骤。可选的安装 Webmin 访问 ( ) 以确保以下命令引用最新的 Webmin 可用版本。 页面上提供了 MD5 ...