快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;...

快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;...

我想要的是在服务器上放我的博客(django搭建)或者其它的网页(80端口),然后另外几个端口放一些自己用的东西(Jupyter让我可以用手机/pad之类可以联网的设备随时通过网页编程,phpmyadmin查看数据库等)。

服务器环境为一台全空的阿里云ubuntu 14.04。


ssh登陆免输密码

首先肯定是做这一步,不然每次都输入密码是非常麻烦的。首先ssh登陆到服务器上,然后在服务器上安装ssh。

apt-get update
apt-get upgrade
apt-get install ssh

安装好ssh后。

mkdir .ssh

好了,然后可以暂时退出服务器了。
回到本地,提前在本机上运行ssh-keygen生成你自己的rsa秘钥(当然大部分人已经有了)并在本机装好ssh-copy-id。

 ssh-copy-id yourUserName@yourServerIp

完成。

python科学计算 + Jupyter

课题组研究方向是音频处理,除了matlab(matlab很萌的,你们不要黑它),python的使用也是比较频繁的,在windows上,python环境的搭建比起MATLAB稍微繁琐一些,一个自然的想法就是在*nix服务器上搭好环境后通过网页访问它,Jupyter(前身是ipython notebook)就是这样一个项目。

反正一口气装一下以下这些软件(通过apt安装的pandas/scipy等包版本会比较旧,但是省了编译时间,想使用较新版本可以用pip安装):

apt-get install python-matplotlib python-scipy  python-pip software-properties-common python-sklearn python-pandas git

因为ipython有重大版本更新,为了获得新版本的ipython,就不通过apt-get来安装ipython了,我们使用pip,使用pip前我们更换一下pip源为国内源(服务器买在国外当然就略过这一步咯),需要创建或者更改pip配置文件(linux的文件在~/.pip/pip.conf,windows在%HOMEPATH%\pip\pip.ini),修改内容为:

[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com

然后

pip install ipython jupyter

当然你也可以使用python3,apt-get install比pip安装更快,所以能偷懒就偷懒了:

apt-get install python3-matplotlib python3-scipy python3-pandas python3-pip
pip3 install ipython jupyter

然后是把Jupyter作为服务器,直接移步:Running a notebook server,我这里记录的简要版本只供自己回忆:
先是在ipython生成秘钥:

In [1]: from notebook.auth import passwd
In [2]: passwd()    
Enter password:
Verify password:
Out[2]:     'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

然后

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
jupyter notebook --generate-config

vim .jupyter/jupyter_notebook_config.py
修改为

# Set options for certfile, ip, password, and toggle off
# browser auto-opening
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...'
c.NotebookApp.open_browser = False
# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = 9999

然后

nohup jupyter notebook &

就可以在后台运行了(nohup的方式比较粗糙,更好的是用tmux/screen之类的,又或者写到/etc/init/里作为一个service启动),效果如下,记得是用 https 访问:

快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;..._第1张图片
一台运行着的Jupyter的服务器

音频处理librosa

用python做音频处理,最普遍的一个问题就是读入各种格式的音频了,当然,还有一些其它需求,推荐librosa库。为了正常使用librosa,我们需要装一系列东西。

apt-get install libsndfile-dev libsamplerate-dev 

安装ffmpeg作为音频读写的backend:

apt-get install software-properties-common
apt-add-repository ppa:mc3man/trusty-media
apt-get update
apt-get install ffmpeg gstreamer0.10-ffmpeg

对于python2,很简单:

pip install scikits.samplerate librosa

samplerate这个包年久失修,并不适配python3,librosa的作者fork了一个分支,并做了更新,我们安装这个(git的使用我就不啰嗦了)。

pip3 install librosa
git clone [email protected]:bmcfee/samplerate.git
cd samplerate
python3 setup.py install

大概是这么个样子:


快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;..._第2张图片
读入音频并播放
快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;..._第3张图片
画出Mel倒谱

uwsgi + ngnix + django + mysql部署博客系统

诶,把这些东西写清楚也挺费劲,今天写不动了,明天继续。


我今天又回来写了,这说明今儿心情不错!

首先你得先用django写好一个博客系统,当然开源博客方案也是一搜一大把,比如django-blog-zinnia,当然这也就少了自己折腾的乐趣。如果纯粹只是想挂个博客,也没必要自己写,使用wordpress最简单了。

安装一下uwsgi,ngnix和python-virtualenv:

apt-get install ngnix
pip install uwsgi virtualenv 

或者你用python3的项目的话就pip3 install uwsgi。

为博客项目创建一个文件夹,比如名为blog,然后在里面创建配置文件夹conf,日志文件夹logs和代码文件夹src,src中放代码。文件结构大致如下:

└── blog
    ├── conf
    ├── logs
    └── src
        └── blog

然后conf中放你的配置文件uwsgi.ini和blog_ngnix.conf,
uwsgi.ini是这样的:

[uwsgi]
# variables
projectname = blog
projectdomain = 你的域名或者服务器ip地址
base = 项目路径

# config
# plugin = python
# 如果你是通过pip/pip3 install uwsgi安装的uwsgi,那么就不需要写plugin = python
master = true
protocol = uwsgi
env = DJANGO_SETTINGS_MODULE=%(projectname).settings
pythonpath = %(base)/src/%(projectname)
module = %(projectname).wsgi:application
socket = 127.0.0.1:8889
# socket = /var/run/uwsgi/%(projectname).sock
logto = %(base)/logs/uwsgi.log
vacuum = True
home = 你创建的virtualenv路径(这里就不啰嗦virtualenv的用法了)

# below line runs it as a daemon in background
daemonize = %(base)/logs/daemon.log

blog_ngnix.conf里写这些:

server {
    listen 80;
    server_name 你的域名或者服务器ip地址;
    access_log 项目路径/logs/access.log;
    error_log 项目路径/logs/error.log;

    # 记得在django里写好STATIC_ROOT = '/var/www/blog/static/'
    # 和MEDIA_ROOT = '/var/www/blog/media/',然后python manage collectstatic
    location /static/ { # STATIC_URL
        alias /var/www/blog/static/; # STATIC_ROOT
        expires 30d;
    }

    location /media/ { # MEDIA_URL
        alias /var/www/blog/media/; # MEDIA_ROOT
        expires 30d;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8889;
        # uwsgi_pass unix:///var/run/uwsgi/mir_uwsgi.sock;
    }
}

然后链接blog_ngnix.conf到ngnix的site-enabled文件夹里。

ln -s pathToYourProject/conf/blog_nginx.conf /etc/ngnix/site-enabled

然后

uwsgi --ini pathToYourProject/conf/uwsgi.ini
service ngnix restart

就行了(如果你用的是80端口,那么可能需要做些调整,因为这个端口一般是被占了的,把占了80端口的东西挪开,或者你把blog放在其它端口,或者把所有东西都放80端口然后调整一下ngnix的路由规则)。

开机自动启动服务

ngnix自然是开机自启动的,但是ipython notebook和uwsgi(单指博客项目而言)都是我们手动开启的服务,如果不是以daemon的形式运行这些进程的话,ssh会话一退出,这些进程就被杀死了,这显然不是我们想要的。比较dirty的解决方案是用nohup或者screen或者tmux来运行这些进程,这样的话退出ssh会话后这些进程还会继续运行。不过如果这些进程能开机自启动,那么显然更好一些。

可以创建/etc/init/jupyter.conf文件(jupyter这名字你可以随便取):

exec sudo /usr/local/bin/jupyter notebook
start on filesystem and net-device-up IFACE!=lo

然后也可以使用service jupyter restart/stop/start了。

uwsgi与之类似,创建/etc/init/uwsgi.conf,

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

# setuid blog
# setgid www-data
respawn
exec /usr/local/bin/uwsgi --emperor /pathToYourProject/conf/uwsgi.ini

好了,终于写完了。。。这些指令我记在备忘录里才半页,写清楚竟然要这么久,感谢所有写技术博客的人。。。他们是付出了汗水的 T T.

你可能感兴趣的:(快速装机 ubuntu+ngnix+mysql+django;Jupyter;音频处理librosa;...)