对于服务端来说,配置服务器,将项目部署到服务端是比较麻烦的事情。这里由于使用的是国外的云服务器的原因,所以并不是像一般的配置服务器那么顺利,甚至差别还是比较大的。这里使用的是CentOS7.2版本的VPS。
在pycharm中,通过Tools->deployment->configuration添加部署的服务器时,如果单单使用刚刚从云服务端配置好的VPS的ip地址是根本行不通的,这一点,从使用putty登录到VPS中就可以明白,出于安全考虑,不可能随便访问VPS。所以,需要配置服务端。
在CentOS中,本身已经安装了python了,可以通过putty连接,然后通过python -V查看版本(注意,这里的是大写的V),所以可以使用pip安装python的相关软件包,但是安装CentOS的软件包需要使用yum,dpkg,rpm等。
查看是否通过yum安装了某个软件包,可以使用yum list installed,或者yum list installed | grep "软件名"查看。
查看是否通过rpm安装了某个软件包,可以使用rpm -qa | "软件名"查看。实际上使用例如rpm -q httpd就可以查询httpd是否已经安装。
查看是否通过deb包安装的,可以通过dpkg -l | grep "软件名"
如果是以源码包自己编译安装的,如.tar.gz等,就只能看执行文件是否存在了。
用root用户安装的可执行文件一般在/sbin或者/usr/bin。
在centos,ubuntu中都可以使用find / -name 文件名,可以查找程序。需要注意,一般来说linux才会默认安装apache,而这里,我的CentOS并未安装apache,所以需要自行安装apache。注意,apache基金会现在已经将apache的web server改名为httpd了,所以安装的时候使用的是yum -y install httpd。需要注意的是,在centos中使用find / -name httpd.conf可以查找到配置文件,路径一般就是/etc/httpd/conf/httpd.conf,而在ubuntu中根本查找不到httpd.conf文件,而是需要使用find / -name apache2.conf查找,一般路径在/etc/apache2/apache2.conf路径下。最后,最重要,最需要注意的是,在配置文件夹下找不到VirtualHost配置,其实这是因为,这个配置被放到/etc/apache2/sites-enabled/000-default文件夹里面了。
另外,如果是在centos,可以使用find -name 'httpd'查看httpd的安装位置。还有需要注意的是,在apache下,web文件的放置路径在/var/www下,这点可以再httpd.conf或者apache2.conf中可以看到。
需要注意,一些框架自带测试服务器,例如bottle,flask这些都是带有测试服务器的,但是真的要使用的话,不建议开启。所以还是得使用httpd,而httpd最麻烦的地方在于需要配置。在开始操作之前最好使用find / -name 'httpd'查看httpd被安装到哪些目录下,然后进行操作比较稳妥点。
对于一些VPS商家,可以直接选择已经安装好的服务器,例如这里我的VPS选择安装的时候可以选择安装LAMP。当然还有很多其他的,例如docker,django等可以选择。
这里最需要注意的是,其实apache已经问我们提供了很好的引导措施,在安装了apache之后,输入ip地址可以看到引导页,ip地址/info.php之后可以看到一些需要的信息,而实际上输入ip地址看到的是/var/www/html/index.html文件,而实际上,info.php,index.html文件在/var/www/html路径下,而/var/www是web文件的放置路径。另外,对于一些不懂的问题可以再apache官网查看。
简单点说,刚开始搞apache时,需要先看看index.html页面,这样才能知道需要怎么搞apache的配置。而info.php里面则是我们一般需要的信息,如一些配置文件的位置。
其实只要搜索各个系统下apache怎么搭建就可以了,一般都有很详细的配置介绍,例如搜索ubuntu下apache2的web项目部署。
可以使用cmd命令的telnet ip port方式查看ip的端口是否封闭。一般如果没封闭,那么背景都变成黑色,或者给出一点其他提示。
另外,centos中防火墙使用iptables,而ubuntu没有,但是可以使用ufw命令,ufw其实就是ubuntu fire wall简写。总的来说,如果要熟悉系统防火墙,可以直接搜索某系统的防火墙,例如搜索:centos防火墙,ubuntu防火墙。
防火墙可能会监听端口导致端口不能访问,所以防火墙也是需要注意的。而对于上传项目到服务器,需要开放端口,而端口一般有自己的作用,所以开放端口需要注意。
使用putty实现上传,需要注意,需要下载.zip格式的,因为.exe的将下面的工具封装了。打开putty的解压文件夹,里面会有如pscp.exe,psftp.exe这些工具,他们都是可以用于传输文件的,作用跟在putty中用scp命令进行上传项目是差不多的,这里scp是secure copy的意思。需要注意,scp对于在linux间传输数据有用,如果是windows到linux间传递数据,那么就需要使用pscp.exe了,但是pscp.exe只能传输单个文件,如果需要传输项目,需要使用psftp.exe。另外,对于服务端的文件夹需要设置chmod -R 777 /var/www设置读写权限,不然传输会失败。
对于使用psftp传输文件的,使用cmd定位到psftp.exe的路径下,这里可以使用psftp -h查看有哪些参数可供选择。然后:
1、如果没有ssh key file的,直接输入psftp,有的话,输入psftp -i key路径。如果需要指定端口,可以带上-P 端口号。需要密码可以带上-pw 密码。
2、填写key的账号和密码,账号如果是VPS的,一般是root。
3、登陆成功之后,当前目录是/root,也就是我们使用putty登陆使用的~路径,可以使用cd命令转移路径。如果对于需要使用的命令不熟悉,可以输入help查看命令。
4、使用lcd切换本地路径。
5、使用put上传,使用get下载。但是使用put,get只能操作单个文件
6、使用mget,mput上传下载多个文件。
7、进入psftp之后,输入help之后可以看到命令的用法。
上传项目可以通过如pycharm的Tools->Deployment->Configuration来设置,通过Tools->start ssh session实现一个会话。但是需要注意如果有SSH key的存在,设置的时候应该考虑将SSH key的文件导入,不然访问会被拒绝。另外Tools->Deployment->Configuration的设置中,对于协议的选择需要注意,一般选择sftp,然后Auth Type选择Key pair(Open SSH or puTTy),然后导入ssh
key文件,这里需要特别注意,在这里使用putty导出的ssh key文件会报错,所以如果已经生成了ssh key文件了,那么需要使用puttygen导入这个ssh key文件,然后点击conversions菜单按钮,选择导出open SSH文件,注意open SSH文件和SSH文件一样都是ppk后缀的。其实如果我们使用的是ssh key文件,pycharm会给出提示,说明需要Open SSH格式的ssh key文件,然后配置好后确定就可以了。另外,如果需要确定配置好后,是否连接的通,可以点击Tools->Deployment->Configuration下的Test
SFTP Connection。
然后再Tools->Deployment->Browse Remote host,就可以看到连接上了的远端的服务器路径下的目录了,当然如果没目录的话,不要因为没目录而以为失败了。
这里可以通过Tools->Deployment下的菜单进行上传下载操作,也可以通过Tools->Deployment->Browse Remote host出现的Remote Host界面操作。另外,需要注意,需要点击需要pycharm中需要上传的项目,然后Tools->Deployment下的上传下载操作菜单项才会显示,所以如果点击了Remote Host界面的项目之后,打开Tools->Deployment,会发现上传下载操作菜单项是不能操作的,所以这点需要注意!
对于Tools->Deployment->Automatic Upload自动上传功能,需要慎重使用,因为自动上传的话,会让远程代码编辑变得和本地代码编辑一样,所以个人比较倾向手动上传下载,这样保证不会出错。
对于项目的操作,如果需要使用到远程调试,那么,需要在settings->Project:项目名->Project interpreter右上角的齿轮中选择add Remote,然后出来的界面中选择SSH Credentials,配置好之后,点击确定,并将Project Interpreter选择为他,这样就可以进行远程调试了。这个过程中,pycharm会上传本地的数据到服务端,以实现远程调试,其中,最重要的是上传本地的pycharm-debug.egg,当然,这个东西也可以直接在服务端使用命令安装,毕竟本地安装比较耗时,这个东西主要是为了调试用的。当然还有其它的东西要上传的。等到Upload pycharm helpers完成就可以了,虽然可能会有点慢,下载完之后还需要进行一些诸如账号密码之类的设置。另外,完成之后本地也需要下载一些东西。另外,python console会连接上远端的python命令行,会使用服务端安装的python控制台。
使用putty通过命令来让服务端编译go项目。这里注意,使用go build之后出现的文件没有后缀,然后go run命令会一直停留着,这点和windows下是一样的,其实已经在运行了。
跟apache不一样的是,go项目的端口需要自行打开,不像apache那样能直接配置。可以使用netstat -a查看网络状态,不过奇怪的是80和22两个端口都是可以连接的,但是却没有显示,估计是配置了ssh和apache的原因。另外需要特别注意,iptables最多是允许端口被连接而已,并不能打开端口,而且如果需要操作iptables的话,需要按照iptables的规则来,使用iptables --h可以查看,网上的操作基本上用不上。最后,使用iptables -I INPUT -p tcp --dport 8080 -j ACCEPT,然后使用iptables -L -n可以看到确实允许了8080端口了,但是在windows上使用telnet命令却发现还是不行。应该说,需要时这样一种流程,一般情况下,一个刚安装的centos系统都会有22端口的,通过这个端口我们可以上传下载,甚至操作很多东西,然后使用iptables可以允许某个端口被使用,然后我们通过22端口上传项目上去,通过项目打开需要的端口。当然可以通过安装apache这样的软件直接就打开一个像80这样的端口。
另外需要注意,ubuntu中允许访问端口需要兼顾iptables和ufw两个地方。
这里使用nmap这款非常有用的嗅探工具将会事半功倍,在ubuntu中安装完nmap,只需要使用nmap localhost就可以查看自己本地开放的端口。这比使用netstat -tanpu | grep "8080"这样去查找要高效许多。同时,使用nmap还会帮你打印出打开这个端口的是哪个程序。当然,也可以使用netstat -a可以查看网络使用情况,包括端口。
打开端口其实在使用go run xxx.go文件的时候go内置服务器就已经根据代码配置打开了相应的端口了,而iptables,ufw这些仅仅起到一个允许访问的作用,并非是打开端口。这里需要注意,不要以为在网页中打开自己配置的网站地址之后没打开成功就以为端口没打开成功,开端口打开成功,要使用telnet命令。也就是说先go run xxx.go,然后再使用telnet命令查看。ps:这个时候不可能在putty中使用nmap查看了,因为go run xxx.go命令会阻塞你输入命令。
总的来说,如果是一般的使用,那么使用go内置的服务器就够了,可是对于大型的web项目,还是搭配服务器使用比较好。