0x01 安装nginx
sudo apt-get install nginx
配置文件入口路径:/etc/nginx/nginx.conf;
虚拟主机配置路径:/etc/nginx/sites-enabled/default。
0x02 安装python虚拟环境
pip install virtualenv;virtualenv --no-site-package ENV_GRASS
路径在/opt/caoshuai/ENV_GRASS。
0x03 安装mysql
sudo apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev
- 遇到的问题:
只能本地连接mysql,不能远程连接。首先检查了3306端口是否开启,然后阿里云添加安全组,检查服务器自身的iptables防火墙,mysql创建用户并授权,以上操作都完成了,但是还不能从远程连接,结果是因为mysql配置文件“bind-address = 127.0.0.1”这行搞得鬼,注释掉就好了。参考链接:https://www.cnblogs.com/codeAB/p/6391022.html
0x04 安装uwsgi
mysql总算是搞好了,接下来就是搞定uwsgi。
进入虚拟环境,执行命令:pip install uwsgi
接下来是nginx配置文件和uwsgi配置文件的配置,这个是最重要的。
nginx配置文件:
upstream django {
# 反向代理的配置节点,名字叫django的代理,
# 底下可以配置多个server,可以达到负载均衡的作用
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
listen 80;
listen [::]:80;
server_name test.yangliu.com;
root /var/www/caoshuai;
index index.html;
location / {
# uwsgi_pass就是取的上面配置的upstream的名字:django
uwsgi_pass django;
# 这个配置是uwsgi的参数,这两个配置可以达到将请求转发到uwsgi的作用
include /etc/nginx/uwsgi_params;
# try_files $uri $uri/ =404;
}
}
uwsgi配置文件:
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /opt/backend
# Django's wsgi file
module = mark.wsgi
# the virtualenv (full path)
home = /opt/caoshuai/ENV_GRASS
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe
socket = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
daemonize=/var/log/uwsgi.log
0x05 安装git
安装
sudo apt-get install git
配置
git config –global user.name “lxxxxxxxlxx”
git config –global user.email “[email protected]”
此时$HOME目录下会新建一个.gitconfig文件
然后为github账号添加SSH keys
ssh-keygen -t ras -C “[email protected]”
系统会提示key的保存位置(一般是~/.ssh目录)和指定口令,保持默认,连续三次即可
id_rsa.pub公钥内容粘贴到github账号管理的添加SSH KEY界面中
0x06 部署代码
从git上clone代码到本地
由于git不能单个文件夹clone,只能想到一个其他方案:软连接
sudo ln -s 源文件 目标文件
注意:删除操作是 rm -rf symbolic_name
而不是 rm -rf symbolic_name/
问题
从操作步骤来总结一下问题:
首先安装nginx没有多大问题,配置文件的路径在/etc/nginx/nginx.conf,virtual_host的路径在/etc/nginx/sites-enabled/default,也可以自己写一个配置文件,然后include到主配置文件内;
然后安装python虚拟环境没有什么困难;
接下来是安装mysql,遇到一些问题,安装时候很顺利,安装完以后从外网(我的是阿里云)访问不了,根据网上的教程,首先查看3306端口是开着的,然后配置了阿里云的安全组,开启了3306端口通过,然后查看防火墙是否阻塞改端口,最后在mysql的mysql库的user表中,增加了用户可从外网访问,即host为%,最后还是不行。皇天不负有心人,最终找到了原因:mysql配置文件中没有注释掉bind-address = 127.0.0.1,绑定的依旧是本地的ip,所以没法从外网访问。
接着是安装uwsgi,这个挺顺利的。
最后是nginx和uwsgi配置文件的配置,开始没有搞清楚怎么做反向代理,不知道upstream的作用,后来配置完了upstream才使得nginx的请求转发到uwsgi上。uwsgi的配置没有什么困难的,主要就是配置一些django项目的路径等等。
可以访问rest接口还是不通,开始报502错误,然后看/var/log/nginx/access.log,接收到了请求,那就是没有转发到uwsgi中,再看/var/log/error.log,报连接拒绝的错误,在网上搜了一下,也没有找到什么解决方法;然后又报500错误了,使用python manager.py runserver启动django项目,发现有报错,没有yaml和MySQL-python插件,安装完插件,重启服务,然后就可以访问通了
调试中又发现一个问题,rest api可以正常访问,但是主页静态页面不能正常访问,加了以下代码还是没用:
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root /var/www/html/;
index index.html;
# expires定义用户浏览器缓存的时间为7天,如果静态页面不常更新,
# 可以设置更长,这样可以节省>带宽和缓解服务器的压力
expires 7d;
}
最后才发现上面代码只是对具体html等静态页面的控制,我直接是使用域名或者ip访问的,当然走的不是这个分支,加了以下分支接ok了,参考:http://blog.csdn.net/kkgbn/article/details/53896485:
location ~ ^/$ {
root /var/www/html/;
}
PS:
在Ubuntu终端彻底删除软件:
1、删除软件
方法一、如果你知道要删除软件的具体名称,可以使用
sudo apt-get remove --purge 软件名称
sudo apt-get autoremove --purge 软件名称
方法二、如果不知道要删除软件的具体名称,可以使用
dpkg --get-selections | grep ‘软件相关名称’
sudo apt-get purge 一个带core的package,如果没有带core的package,则是情况而定。
2、清理残留数据
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
欢迎关注微信公众号(coder0x00)或扫描下方二维码关注,我们将持续搜寻程序员必备基础技能包提供给大家。