配置Ubuntu以及Web部署

配置Ubuntu以及Web部署

  • 注解
    • 针对类似的文档有时效性,此文的编辑时间是2018/9/4 凌晨,预计半年内有效
    • 这里的环境是Ubuntu16.04版本,使用的是腾讯云的学生机
  • 说明:
    • 我这里没有写使用docker部署的方法,如果你的服务器上计划只部署一个网站可以使用我的方法;如果你的服务器上计划部署多个网站,建议使用docker,不但迁移方便,配置方便,且网站之间相互独立,保证网站的稳定性

错误:Host key verification failed.

  • 解决方式:
    • 在客户端输入指令:vi ~/.ssh/known_hosts
    • 删除所要连接的服务器IP的相关内容或者直接删掉known_hosts文件
  • 原因:
    • 使用SSH通信时,第一次客户端连接服务器,服务器会给客户端发送一个密钥,这个密钥会一直存储再服务器和客户端中,后面每次连接都需要验证密码和密钥,只有两者条件都匹配的时候,客户端才能正确连接服务器

设置root密码

  • 方法:
    • sudo passwd
    • 把密码重复输入两次,看到设置成功即可
  • 原因:
    • 云服务器大多第一次使用或者重置操作系统后虽然在控制台已经设置了root密码,但还是要在命令行中重新设置

添加普通用户

  • 方法:
    • su root,进入root用户
    • adduser user-name,添加用户,其中user-name是要添加的用户名称
    • 输入user-name用户的密码两次,后面的信息可以不用填写
    • 输入Y确认即可

错误:add-apt-repository command not found

  • 方法:
    • sudo apt-get install python-software-properties
    • sudo apt install software-properties-common
    • sudo apt-get update

python3.6的安装

  • 警告:
    • Ubuntu上面的python3.5不能删除,原因是例如yum以及其他一些组件依赖于python3.5的版本,系统内部自带的插件最好不要动
  • 方法:
    • sudo add-apt-repository ppa:jonathonf/python-3.6,添加第三方仓库,要输入root密码
    • sudo apt-get update
    • sudo apt-get install python3.6,安装python3.6
    • 输入python3.6 -V,查看是否安装成功
    • 至此,Ubuntu系统中已经有了三个python版本(python2.7, python3.5, python3.6)
    • 提高python3.6的优先级(就是输入python3会直接进入的是python3.6的环境,而不是Ubuntu自带的python3.5的环境)
      • sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
      • sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
      • sudo update-alternatives --config python3
      • 输入python -V,查看是否优先级设置成功
      • 输入 pip3,查看pip3是否正常

错误:ModuleNotFoundError: No module named 'gdbm'

  • 方法:
    • sudo apt-get install python3.6-gdbm

错误:You will have to enable the component called 'universe'

  • 方法:
    • apt install python3-pip

警告:

1
2
You are using pip version 8.1.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
  • 方法:
    • pip3 install --upgrade pip

错误:

1
2
3
4
5
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main

ImportError: cannot import name 'main'
  • 方法:
    • sudo vim /usr/bin/pip3,进入文件
    • insert键,进入vim的编辑模式
      原来的:
      1
      2
      3
      from pip import main
      if __name__ == '__main__':
      sys.exit(main())

替换为:

1
2
3
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())

重新安装pip3

方法:

  • sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

python3安装库

  • 方法:
    • pip3 install package-name,使用此命令安装对应的包
    • pip3 list,查看python3.6下安装的包
    • pip3 uninstall package-name,使用此命令卸载对应的包

mysql的安装

  • 方法:
    • sudo apt-get install mysql-server
    • 设置mysql的密码
    • sudo apt-get install libmysqlclient-dev
  • 验证安装是否成功:
    • 输入mysql -u root -p,登陆数据库
    • 输入密码,登陆成功就说明安装无误

python的Web部署

  • 注解:
    • 这里使用的是uwsgi、nginx和Django的2.1.1
  • 方法:

    • 安装django
      • pip3 install django,等待安装即可
      • pip3 list,查看是否安装成功
    • 安装uwsgi
      • pip3 install uwsgi
      • 如果出现:
        1
        2
        3
        In file included from plugins/python/python_plugin.c:1:0:
        plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
        compilation terminated.
  • 方法:

    • 安装uwsgi
      • 如果出现:
        • 执行sudo apt-get install libpython3.6-dev,然后再安装uwsgi
      • uwsgi --version,查看uwsgi是否安装成功
    • 测试uwsgi
      • cd /home,进入home的目录
      • vim test.py,新建文件
      • 输入:
        1
        2
        3
        def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]
  • 安装:

    • 测试uwsgi
      • 按Esc键,输入:wq,回车
      • uwsgi --http :8000 --wsgi-file test.py
      • 看到spawned uWSGI worker 1 (and the only) (pid: 22343, cores: 1),打开浏览器访问你服务器的8000端口,页面有hello world表示uwsgi安装是正确的
    • 安装nginx
      • sudo apt-get install nginx
    • 验证nginx是否安装成功
      • 打开浏览器,输入your-server-IP:80,就是用80端口访问你的服务器
      • 看到Welcome to nginx!说明nginx安装好了
    • 配置nginx和uwsgi
      • 在/etc/目录下新建uwsgi8000.ini,添加如下配置:(并把中文注释删掉)
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        socket = 127.0.0.1:8000
        master = true //主进程
        vhost = true //多站模式
        no-site = true //多站模式时不设置入口模块和文件
        workers = 2 //子进程数
        reload-mercy = 10
        vacuum = true //退出、重启时清理文件
        max-requests = 1000
        limit-as = 512
        buffer-size = 30000
        pidfile = /var/run/uwsgi9090.pid //pid文件,用于下面的脚本启动、停止该进程
        daemonize = /website/uwsgi9090.log
  • 安装:

    • 配置nginx和uwsgi
      • 进入nginx的安装目录/etc/nginx,打开nginx.conf文件,修改server配置:(并把中文注释删掉)
        此配置在http大括号里面添加,注意缩进和配置
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        server {
        listen 80;
        server_name localhost;

        location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000; //必须和uwsgi中的设置一致
        uwsgi_param UWSGI_SCRIPT demosite.wsgi; //入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
        uwsgi_param UWSGI_CHDIR /home/demosit; //项目根目录
        index index.html index.htm;
        client_max_body_size 35m;
        }
        }
  • 安装:

    • 配置nginx和uwsgi
      • uwsgi --ini /etc/uwsgi8000.ini & /etc/nginx
    • 新建项目
      • cd /home
      • django-admin.py startproject demosite
      • cd demosite/demosite
      • vim settings.py,进入设置文件
      • 找到ALLOWED_HOSTS,在方括号中加入你服务器的IP和localhost(使用单引号括起来)
      • Esc键,:qw,保存退出
      • cd ..
      • python3 manage.py runserver 0.0.0.0:8000
      • 打开浏览器,输入your-seerver-IP+8000,能看到django的报错就好,先不管错误,这说明到此uwsgi和nginx配置成功,django部署基本完成,接下来就是调试了

错误:上边的设置无误,但就是访问不了的话

  • 方法:
    • 如果是云服务器的话,查看安全组的设置是否打开了这些端口让浏览器去访问

Docker部署

Donate comment here