标签:style class blog code http tar
首先表述一个观点,之所以用阿里云,是被迫无奈,因为google的GAE被天朝贵国河蟹了,在墙内无法访问。原计划在墙外面购买其它空间,但是考虑到天朝贵国不定什么时候抽风,就任意把墙外的网络河蟹了,造成访问不稳定。所以,不得不下一个艰难的决定,启用墙内的服务器空间。
墙内有很多家,选那家呢?没怎么比较就直接选择阿里云了,没有为什么,就冲着我的一个好朋友曾经跟马云一起做过中国黄页。
由于是第一次用,将这个过程记录下啦,一方面有纪念意义(常常第一次是有纪念意义的,比如第一...,你懂得。);另外,也是为其他朋友做一个参考,当然,也是为自己做一个经验总结。
没什么说的,按照自己的需要,在阿里云上定好产品,然后付款。用支付宝哦。
这里要补充一下,如果网站域名是在万网申请的话,最好用万网的注册用户名申请阿里云,免得左一个用户名、右一个。太多了,有时候自己搞糊涂了。
为什么要在万网申请域名?
说实在的,万网的域名比墙外的贵,我不愿意在这里申请。但是,还是由于天朝贵国毫无规律地抽风,最担心的是不知道在墙外面申请的域名是否允许备案,所以被逼迫着在墙里面申请域名。
万网域名申请,要上传身份证照片。
这是一个天朝归国特别色的环节。
在阿里云代理备案的网站注册,跟阿里云的用户不是同一个。
然后严格按照上面的要求填写各种资料和上传资料。经过好多步骤。
不过,阿里云在服务上做的很好,如果备案有搞不定的地方,毫不客气地在微博上找 @阿里云客户满意中心 的妹子问,她不仅在网上回复,还很热情地打过来电话,用银铃般的声音耐心的告诉你应该怎么做,哪怕是你发牢骚,她还是那么耐心细致。
当然,备案要有耐心,因为需要时间审核。
原来我对备案有恐惧感,经过客服妹子的帮助,明白了流程,虽然复杂,但是阿里给了支持,还是可以完成的。
经历了自己上传资料、到指定地点拍照之后,又将所有资料邮寄给阿里云。还在等待各种审批,已经2天过去了。
空间申请下来之后,就可以连接阿里云。这个不用等备案。
连接方法一:我的电脑是ubuntu操作系统,所以,我用这种方式连接阿里云:通过ssh连接远程服务器
连接方法二:在阿里云的帮助有好多种连接方法,从我的使用体验来看,还是推荐用Xshell+Xftp,终端要是windows操作系统。具体看这个连接:http://help.aliyun.com/manual?helpId=129
刚买到的阿里云空间,还不能立刻使用,必须经过分区和挂载操作之后,才能使用。
没有什么难点,按照这里说的一步一步做,就能大功告成。
http://help.aliyun.com/manual?spm=0.0.0.0.A08yCp&&helpId=271
特别说明:一下记录内容,是我在不同时候配置数据库时遇到的不同问题,不代表着一定这么做,只是经验罢了。并且,从我的经验来看,如果是自己开发程序并发布,最好不要用一键安装的数据库(注意,我说的是不用数据库,但是一键安装的服务器还是不错滴),因为在一键安装的时候,经常会丢点东西,还是老老实实用:sudo apt-get install mysql-server来安装最好了,以后缺少什么再进行安装,而且由于是用默认设置,也方便与网上提供的解决方案结合。
在阿里云的帮助文档中有“linux一键安装web环境全攻略”,根据这里的方法,能够快捷地安装nginx服务器以及php、 mysql.
我按照帮助中的步骤进行了安装,当然能够安装成功了。但是,很多时候“但是”是必须的。但是当我远程链接mysql数据库,妄图通过这个命令来操作数据库的时候
#mysql -u root -p然后提示我输入密码。因为在安装的过程中并没有提示我输入密码,按照经验,应该是空。当我敲击回车键之后,出现了以下提示:
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password:NO)
根据以往的经验判断,这是由于权限问题,虽然当前帐号是root,但是在上述命令中,此帐号是请求在 localhost中的权限,现在是用远程链接,不在localhost中。所以,权限不足,不能操作数据库。
有一种方法是改变权限。这里备注一下,一般用下面的方法修改权限。(以下两种方法来源于网络。)
方法一:
# /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; mysql> FLUSH PRIVILEGES; mysql> quit # /etc/init.d/mysql restart # mysql -uroot -p Enter password: <输入新设的密码newpassword> mysql>
方法二:
直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码:
# mysql -udebian-sys-maint -p Enter password: <输入[client]节的密码> mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; mysql> FLUSH PRIVILEGES; mysql> quit# mysql -uroot -p Enter password: <输入新设的密码newpassword> mysql>
这时候就产生了不走上述简单一键安装的流程了,还是喜欢自己一个一个安装。一个原因是习惯这么搞了,虽然麻烦,但是从感觉踏实(强迫症表现)。于是不管上面已经通过一键安装的结果了。从新安装mysql,比较简单。在shell中敲入下面的命令
# apt-get install mysql-server
就这样,mysql配置好了。其实很简单,如果不按照一键式安装折腾的话。
后记:本着不断折腾的精神,我一直耿耿于按照阿里云里面的方法為什麼不成功,于是,我还是做出了一个艰难的决定,在折腾一遍。于是,删除自己刚刚安装的数据库,从新回到阿里云里面的方法,进行安装。之后又出现了前面的那个提示,然后按照方法一操作。居然这次提示成功了。
其实,还不知道原因。
为了测试阿里云的配置效果,上传了phpwind,通过域名来安装,出现了以下错误提示:
Can‘t connect to local MySQL server through socket
这个错误的编号是2002。
网上搜了一下,这种错误普遍存在。其原因是:
是mysql.sock 文件不存在或者位置不正确,有可能不小心删除了,比如卸载软件的时候,也有一种情况,是存在的位置不对。或许在/var/lib/mysql里面呢。
这个东西是做什么用的呢?先科普:
连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件不存在了,本地客户就不能连接。
解决方法有多种,网上也列出了很多。但是,不存在一种万能的方法,因为每个人的服务器环境有差别。所以,要多种方法尝试一下,哪个能用就用哪个。
方法一:通过重启服务器重新创建mysql.sock。因为服务器在启动时重新创建它。(这种方法简单,但是有时候不能管用。看运气了。)
方法二:编辑/etc/mysql/my.cnf文件: 有一段是[client]开头的,修改里面的 socket = /tmp/mysqld/mysql.sock(或者是mysqld.sock) 改为 socket = /tmp/mysql.sock;还有一段[mysqld]开头的也改这一项。简单点,就是将里面的socket=......的语句注释了,用socket=/tmp/mysql/mysql.sock。特别注意:改完了之后重启mysql服务。
如果你运气欠佳,或许在这种方法的时候还遇到困难,可以参考:http://kong1616.iteye.com/blog/682342
方法三:这种方法适用于在系统中有mysql,是因为程序设置问题。检查一下 MySQL 的 socket 路径,然后打开 config.inc.php(php程序系统的配置) 找到$dbhost = ‘localhost‘; 在 localhost 后面加冒号‘:’和 MySQL 的 socket 路径。比如 MySQL 服务器为 localhostMySQL 的 socket 路径为 /tmp/MySQL.sock那么就改成如下:$dbhost = ‘localhost:/temp/MySQL.sock‘;
方法四:如果系统有mysql,只是位置不对,可以指定mysql通道
[root@localhost ~]# mysql --socket=/var/lib/mysql/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 2 to server version: 5.0.22Type ‘help;‘ or ‘/h‘ for help. Type ‘/c‘ to clear the buffer.
阿里云的ubuntu服务器中,自带了python2.7.3,很好。我最喜欢这个了。
接下来安装了easy_install。
# apt-get install python-setuptools python-dev build-essential
sudo easy_install web.py
也可以在后续安装flup的时候同时安装web.py.
我图省事,采用了阿里云提供的一键安装,已经装好了mysql,为了能够让我的python程序和mysql联合工作,必须要安装mysqldb,到下面链接下载:
http://sourceforge.net/projects/mysql-python/
有时候天朝贵国的网络抽分,可能无法下载,就爬过去下载吧。
下载之后,做如下操作:
(1)在shell中,进入到下载文件所在目录,解压缩(我下载的压缩文件名称MySQL-python-1.2.4b4.tar.gz):
tar xvzf MySQL-python-1.2.4b4.tar.gz
(2)解压缩之后,文件都放在了名称为MySQL-python-1.2.4b4的文件夹中,在当前目录,进入该目录。
cd MySQL-python-1.2.4b4
(3)编辑目录中的 site.cfg文件,目的是将系统中已经安装的mysql路径在这里标记上。
vim site.cfg
把 mysql_config = /usr/local/mysql/bin/mysql_config 这一行前的#(注释)去掉,并且把mysql_config的路径写上。我用的是阿里云的一键安装,其mysql_config路径是: /alidata/server/mysql/bin/mysql_config
(4)运行下面的两个指令安装
python setup.py build
sudo python setup.py install
如此安装了mysqldb,但是这时候还没有完全搞好。我在安装mysql的时候并没有将mysql加入到动态库中。所以,还要做如下操作。
首先要特别提醒,如果不做如下操作,会出现的情况是:
>>>import MySQLdb
......报错,libmysqlclient_r.so.16 没找到。
ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
.....
好了,就不得不这么操作了。现在你也许大概明白了python的麻烦了,虽然开发效率高,功能强,但是部署起来还是比较麻烦的。没有十全十美的东西。
# updatedb
# locate libmysqlclient_r.so.16(说明:这个命令是要找到mysql中的libmysqlclient_r.so.16的位置)
我的阿里云出现的是:
/alidata/server/mysql-5.1.57/lib/mysql/libmysqlclient_r.so.16
/alidata/server/mysql-5.1.57/lib/mysql/libmysqlclient_r.so.16.0.0
然后编辑/etc/ld.so.conf文件。
#vim /etc/ld.so.conf
将/alidata/server/mysql-5.1.57/lib/mysql/libmysqlclient_r.so.16写到文件里面,这就是所谓的加入动态库文件的路径。
再执行:
# ldconfig -v
就这样,大功告成了。
补充:
动态链接库的管理命令 ldconfig 说明:
1、ldconfig命令的用途:主要是在默认搜寻目录(/lib 和 /usr/lib)以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),
进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。
2、ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
方法见这里:http://help.aliyun.com/manual?spm=0.0.0.0.EwRcmg&helpId=532
顶级域名的配置方法视频课程讲解清晰.归纳一下:
1 在/alidata/server/nginx/conf/vhosts中,将.conf文件复制一份.特别注意,一般顶级域名的中间名字为这个文件名字。
2、修改该文件内的信息,主要是将localhost/default之类的东西修改为自己域名的名字,中间那个。
3、建立对应的文件夹,还是和域名一致
4、修改文件夹权限:chown -R www:www 文件夹名字 说明:www:www是用阿里云提供的一键安装设置的。
在nginx服务配置上,特别推荐使用阿里云的一键安装程序,方法是:
(1)将阿里云提供的一键安装 sh文件夹放到服务器上,并且给予足够权限chmod –R 777 sh
(2)cd sh,察看文件里面的文件,有一个名字为install_nginx-1.0.4.sh的。运行这个文件,就按照阿里云一键安装中的设置来安装和配置服务器了。运行方法:sh install_nginx-1.0.4.sh
自我感觉,阿里云提供的这种服务器配置比较整齐,特别是conf的设置简单明了,容易记忆。比单独用apt-get install安装更容易找到和维护。
除了在nginx上做好域名配置之外,更大量的工作还在conf配置上。下面的例子是在对下列要求的配置:
ubuntu+nginx+python+web.py的配置。
1、flup是上述环境的依赖,官方网站:http://trac.saddi.com/flup,如果用:sudo apt-get install python-flup,在线安装flup的同时会将web.py也安装上。
2、安装spawn-fcgi: sudo apt-get install spawn-fcgi
3、参考web.py官方文档:http://webpy.org/cookbook/fastcgi-nginx 进行配置。因为我使用的是阿里云官方推荐的一键安装,所有的东西都在/alidata/server/nginx/conf/vhosts/*.conf里面呢。所以,将下面的内容配置到相应的.conf文件中即可。
location / { fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_pass 127.0.0.1:9002;(端口号可以修改) } location /static/ { root /path/to/www;(修改为自己的程序文件存储目录,比如:/alidata/www/abc; if (-f $request_filename) { rewrite ^/static/(.*)$ /static/$1 break; } }
4、执行下列命令:
spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002
注意:路径应该修改为自己的程序文件路径,端口号要和前面设置的一样。
5、分别编写两个脚本文件,存储在/path/to/www里面,当然,位置不重要,重要的是这两个脚本文件让你以后启动和关闭简单一些。不嫌麻烦,也可以不写。但是必须启动这个。
第一个,命名为start.sh
#!/bin/sh
spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002
注意:路径和端口要修改为自己的,设置同前面。
第二个,命名为shutdown.sh
#!/bin/sh
kill `pgrep -f "python /path/to/www/index.py"`
6、举例说明,写一个index.py文件,放在自己的目录中。样子如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return ‘Hello, world!‘
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr) #这个是必须的,不能少
app.run()
7、进入到程序目录中,执行:sudo chmod +x index.py。如果忘记执行这个,会出现:problem spawn-fcgi child exited with 126错误。
然后,运行前面制作的start.sh脚本
8、重启nginx。
/alidata/server/nginx/sbin/nginx -s reload
剩下的事情就是运行网站了。
如果是php,这里可以参考:https://www.akii.org/ubuntu-9-10-install-nginx-fastcgi-spawn-fcgi-mysql-diary.html
以上都做好之后,我抽了一下风,将机器重启(不是服务器重启),之后执行: spawn-fcgi -d /alidata/www/szcraft -f /alidata/www/szcraft/index.py -a 127.0.0.1 -p 9002,出现提示:spawn-fcgi: child exited with: 127
对这个错误折腾了很长时间,还是不成。最后在阿里云上提交共单。但是没有看到阿里提供的解决方案。早晨祷告之后,又做了如下操作:
删除原有程序;将程序重新上传。之后按照上面的流程操作。于是成功了。為什麼?还是不知其所以然。
1、出现(1045, "Access denied for user ‘root‘@‘localhost‘ (using password: YES)")错误。
我在运行程序的时候,这种错误屡次出现。解决方案是:
(1)检查数据库权限,也就是在shell中执行mysql -u root -p,输入密码后,是否能够进入数据库,如果不能,就要对数据库设置进行修改。网上似乎很多人遇到,但是解决方案就三种,且还不一定都管用。我使用体会是,想方法修改数据库密码。网上方法也都是这个核心。推荐这种方案:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(‘newpassword‘) where USER=‘root‘;
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>
(2)检查程序代码。特别是读写数据库的程序。这个很重要,有时候本地开发环境和服务器部署环境还是有很大差异的。
2、出现服务器405错误
这个问题的解决方案中,网上有一种方法是修改location的配置,但是我不推荐这种方法,推荐修改nginx源码。方法如下:
源码文件位于 /nginx源码目录/src/http/modules/ngx_http_static_module.c ,找到如下代码:
if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; }
如果是用阿里云的一键安装,这个文件在sh/nginx-1.0.4里面去找。
将上述代码注释掉之后,将服务器从新编译。注意,不是安装,是编译。下面的方法适合于阿里云一键安装。(如果不是这个,可以用make命令来编译)(说明:以下方法是中电云集的技术人员吴直提供)
进入服务器后删除/alidata/server/nginx /alidata/server/nginx-1.0.4
标签:style class blog code http tar
原文地址:http://blog.csdn.net/qiwsir/article/details/31791017