美文网首页
快速装机 ubuntu+ngnix+mysql+django;J

快速装机 ubuntu+ngnix+mysql+django;J

作者: 方逸飞 | 来源:发表于2015-06-19 13:57 被阅读1612次

    快速装机 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...<your hashed password here>'
    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 访问:

    一台运行着的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 git@github.com:bmcfee/samplerate.git
    cd samplerate
    python3 setup.py install
    

    大概是这么个样子:


    读入音频并播放 画出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;J

          本文链接:https://www.haomeiwen.com/subject/cerufttx.html