前几天和两个朋友一起租了个国外的服务器,自己手头有个域名,打算寒假把flask学了做个网站玩一玩,不过还没开工,下午学了下flask弄了个helloworld,所以迫不及待的想先试一下把它部署到服务器上去。
使用的架构是uwgsi+nginx+flask.
nginx是个什么东西呢,我们购买的服务器有一个ip地址,我们3个人有个人的域名需要解析到这个地址,互联网上默认的请求都是通过80端口,然后我们各自的web应用在服务器上需要有自己的端口,那么nginx就把请求转移到对应的服务器端口上去,比如我在服务器上的端口是8888。
而uwsgi是和python模块对接的,nginx将请求送到对应的服务器端口上面去后,uwsgi会根据不同的端口调用对应的服务器应用来响应这个请求。
购买服务器的sy给我们每个人创建了一个用户,以及对应的密码,第一次尝试用ssh远程连接到我们的服务器上,但是每次都要ssh [email protected] 比较麻烦,由于之前刚买不久就被恶意扫描端口破解权限,sy又改了默认的端口,每次都要加上-p ,然后还要输入密码,比较麻烦,所以在网上学了下ssh免密码登录的方法,具体的命令是$ ssh-keygen -t rsa, 然后在我电脑的用户名下找到.ssh目录(我用的是win),找到id_rsa.pub,再运行命令scp .ssh/id_rsa.pub [email protected]:/home/user/id_rsa.pub 把它复制到服务器中,之后运行cat id_rsa.pub >> ~/.ssh/authorized_keys ,这里出现一点问题,我的没有.ssh文件夹,一开始没有创建所以一直出错,然后创建也不能用sudo创建,否则也不行,搞定之后最后一句chmod 600 .ssh/authorized_keys就可以了。这样就实现了免密码登陆。
然后又由于每次都要输入ip地址比较麻烦,所以要改下host文件,在win下找到C:\Windows\System32\drivers\etc里面的hosts,把它拷贝到别的地方修改host,然后再粘贴回原来的地方。由于现在用的电脑用户名和服务器的一样,所以就不用再加上[email protected]前面的[email protected]了
OK,前面都是一些为以后方便的工作,进入服务器后,找到/etc/uwsgi/ 里面是存放uwsgi的一些配置文件,刚好另外两个人已经配置好了他们的,直接cp 过来改改就有一个自己的了(哈哈),配置文件里面主要有一些参数,chdir = path path是放置我的web应用的地址,然后又一个module = xxx, 是启动这个应用的模块,
还有一个socket = :8888是我设置的端口号,其他一些和他们保持一致,这样就配置好了uwsgi,然后sudo systemmctl restart [email protected] 就可以实现本地访问我的网站了,要实现外网访问,还要用到nginx
nginx的配置比较简单,先进入/usr/local/etc/nginx/vhosts/,里面也有朋友已经配好的文件,继续cp一份来修改,里面很简单的,只有下面这样,
1 server { 2 listen 80; 3 server_name www.xxxx.com; 4 location / { 5 include uwsgi_params; 6 uwsgi_pass 127.0.0.1:8888; 7 }
这样也就配置好了nginx。
好了,最后去购买域名的地方把域名解析到我们的服务器ip地址就可以了,但是只进入到了我们的服务器却没有返回我的web应用,原因是之前被恶意攻击后sy把所有的端口都禁止了,用了一个iptable来管理,配置文件在/etc/iptables/iptables.rules,加入一个 -A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT就可以了
到此为止网站就可以直接通过域名访问了,可能配置得比较简单,网上有好多配置方法,这个应该算是最容易的了,可能后期需要比较多功能的时候还要改一些东西,但刚接触的话太复杂也不好,这样已经足够一两个小时内弄一个helloworld出来了,还是挺好玩的。
Ps:这篇不是教程。。只是简单记录下刚才配置的过程(怕今晚睡一觉就忘了。。)