以前在阿里云买了一台centos服务器,自己拿来倒腾玩,由于工作中一直用的ubuntu,抽时间将系统镜像更换为了ubuntu16.04
一、 服务器初始化配置
1、子用户创建
- 使用root登录服务器
登录命令:ssh root@ip
ip地址更换为自己的服务器 - 创建子用户有两个命令
-
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
-
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
-
- 创建一个子用户,通过子用户来操作
$~ adduser test
这里我们使用 addtest
命令,这样在创建用户名时,就创建了用户的主目录以及密码。
如果使用 useradd
命令,只会简单的创建一个用户,相关的目录和密码需要通选命令指定。
2、在根目录下创建项目文件夹
我们在根目录下创建一个data文件夹下,用于部署项目代码
# 根目录下创建一个文件夹,由于用户和用户组属于root的,需要修改所属用户和用户组
$ sudo mkdir /data
# 修改文件夹所属用户组和用户
$ sudo chown liang:liang /data
3. 简单的快捷自动登录
为了避免每次输入账号密码麻烦,可以简单的使用expect
自动登录
- mac下首先安装
expect
$~ brew install expect
- 在家目录下创建登录脚本
login.sh
,名字个人喜好定义
$~ mkdir login.sh
- 给该脚本可执行权限
$~ sudo chmod u+x login.sh
- 打开
login.sh
,添加如下配置
#!/usr/bin/expect
set timeout 30
# root 替换为登录用户名
# 127.0.0.1 替换为自己登录ip地址
spawn ssh root@127.0.0.1
expect {
"(yes/no)?"
{send "yes\n";exp_continue}
"password:"
# passwd 替换为登录密码
{send "passwd\n"}
}
interact
因为expect
使用的不是bash,所以bash login.sh
会报错,切换到脚本目录使用如下命令执行:
$~ ./login.sh
如果这样还觉得麻烦,可以再懒一点,在家目录下的.bashrc
下面添加一个软连接,指定别名来执行,这里我的文件路径是在家目录下,自己根据实际需要配置。
if [ -f $HOME/login.sh ]; then
alias login="$HOME/login.sh"
fi
使用source
重新加载一下.bashrc
文件
$~ source .bashrc
在终端输入login
命令,即可自动登录到远程服务器。
$~ login
二、 python环境配置
Python最佳实践指南!(requests库大神引导完成安装和使用 Python 包) 传送门地址
系统自带的pip版本较低,需要先更新
pip install --upgrade pip
使用命令 pip -V
显示当前版本为 pip 10.0.1
首先安装了python的环境管理工具 pipenv
sudo pip install pipenv
ubuntu自带了python2.7和python3.5两个版本,目前最新的是python3.6,如何可以选择更新一下
ubuntu version >= 16.10, 可以执行下面操作更新
$ sudo apt-get update
$ sudo apt-get install python3.6
之前的版本,可以添加ppa
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.6
进入终端,需要输入python3.6
liang@iZ250k0mjlbZ:~$ python3.6
Python 3.6.6 (default, Jun 28 2018, 04:42:43)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
在安装virtualenv的时候,sudo pip install virtualenv
老是提示西面的内容,虽然没什么影响,但是强迫症起来了,看着还是不舒服:
The directory '/home/liang/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
解决方案如下:
sudo -H pip install virtualenv
后面sudo -H pip install virtualenvwrapper
安装也正常,但是在创建虚拟环境的时候报错了
首先配置了virtaulenvwrapper
的环境变量,在家目录下的.bashrc
文件末尾添加如下配置:
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi
完成之后执行命令激活source ~/.bashrc
理论上一切都正常了,只要你指定的source /usr/local/bin/virtualenvwrapper.sh
路径是你的安装路径
接下来可以尝试创建一个虚拟目录:
mkvirtualenv venv-myproject
提示如下错误
ERROR: virtualenvwrapper could not find virtualenv in your path
这里真是自己给自己挖坑了,查了一遍配置路径都是没问题的,最后发现安装virtualenv
貌似是用root
账号安装了一次,然后使用当前用户重新安装了一次,问题解决了,大坑啊,root
账号还是要慎重,操作尽量还是需要创建使用子账户。使用下面命令就可以在当前用户下安装包了:
pip install --user virtualenv
PS: ipython
目前不支持python3
,如果有需要使用ipython
,创建虚拟环境的时候指定为python2
版本。
截止到这里,python的基础环境应该满足需要了。尽量使用virtualenv
环境,避免相互干扰.
三、 WEB环境配置
1. 安装Nginx
1.1 首先安装nginx服务器
sudo apt-get install nginx
安装完成后,文件结构基本如下:
- 配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
- 程序文件在/usr/sbin/nginx
- 日志放在了/var/log/nginx中
- 启动脚本nginx在/etc/init.d/下
- 默认的虚拟主机的目录设置在了/var/www
1.2 启动nginx,验证是否安装成功
$sudo /etc/init.d/nginx start
在浏览器输入当前IP地址,验证是否正常
欢迎地址
1.3 启动、停止以及重启命令
$sudo /etc/init.d/nginx start //启动
$sudo /etc/init.d/nginx stop //停止
$sudo /etc/init.d/nginx restart //重启
2. 安装mysql
2.1 执行安装命令
$ sudo apt-get update
$ sudo apt-get install mysql-server
2.2 查看当前状态
安装成功后,mysql应该已经自动运行,查看状态
liang@iZ250k0mjlbZ:~$ systemctl status mysql.service
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-23 00:28:42 CST; 51s ago
Main PID: 26075 (mysqld)
CGroup: /system.slice/mysql.service
└─26075 /usr/sbin/mysqld
如果没有正常运行,执行启动命令
$ sudo systemctl start mysql //启动
$ sudo systemctl stop mysql //停止
$ sudo systemctl restart mysql //重启
2.3 使用mysqladmin
管理工具可以查看mysql
的一些信息
liang@iZ250k0mjlbZ:~$ mysqladmin -p -u root version
Enter password:
mysqladmin Ver 8.42 Distrib 5.7.22, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.7.22-0ubuntu0.16.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 7 min 58 sec
Threads: 1 Questions: 39 Slow queries: 0 Opens: 107 Flush tables: 1 Open tables: 26 Queries per second avg: 0.081
2.4 远程连接stackoverflow传送门
- 打开配置文件,注释掉本地绑定连接
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改此行
bind-address = 127.0.0.1
为
#bind-address = 127.0.0.1
- 进入mysql终端,执行如下命令
# password 定义跟更换为远程登录密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 重启mysql服务,让配置生效
sudo systemctl restart mysql
3、安装supervisor
supervisor是基于python开发的,一款好用的dameon管理工具,可以在后台很方便的监听、启动、停止、重启一个或多个进程。若被管理的当前进程异常终止,supervisor
可以自动重新启动该进程。
详细介绍参考之前关于supervisor
介绍,传送门
四、Django 工程环境配置
- 激活python虚拟环境
在上面的时候,我们安装了python虚拟环境,在使用pip安装之前,首先将我们安装的python3虚拟环境保持激活状态。
$ workon venv-myproject
- 安装使Django项目可以运行的库
$ pip install Django=1.10.8
$ pip install uwsgi
$ pip install pymysql
注意,上面的uwsgi在虚拟环境下安装的,在uwsgi.ini
的配置中,要写对该路径。
PS:最开始在本地环境python2直接安装的uwsgi,然后由于项目是基于python3,因此在运行时报错,找不到python环境,经过分析,怀疑是uwsgi的安装环境问题。在本地python3环境和虚拟环境python3安装uwsgi都失败,最后卸载了本地python2安装的uwsgi,在本地python3安装了uwsgi,使用uwsgi单独启动django成功了,然后在通过supervisor.ini配置启动的时候,又报错找不到python环境,懵逼了,python2和python3有点混乱了,最后在python3虚拟环境安装了uwsgi,在配置中统一使用虚拟环境的uwsgi路径,终于运行起来了,泪奔,也是第一次使用python3来部署django,虽然走了许多弯路,但是最后还是跑起来了。
配置记录
下面是配置记录,网上找的相关配置,经过试验最终在服务器成功运行,记录下,留个备注。
uwsgi.ini文件配置,具体参数配置待补充
[uwsgi]
socket = 0.0.0.0:8001
chdir = /data/www/myproject/
wsgi-file = myproject/wsgi.py
master = true
processes = 4
harakiri = 120
limit-as = 256
max-requests = 500
single-interpreter = true
enable-threads = true
env = DJANGO_SETTINGS_MODULE=myproject.settings.development
virtualenv = /home/liang/.venv/venv-myproject
supervisor.ini文件配置,具体配置含义待完善,这是在网上找到一个配置
[program:myproject]
directory=/data/www/myproject/configs
command=/home/liang/.venv/venv-myproject/bin/uwsgi --ini uwsgi.ini
umask=022
user=liang
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
stdout_logfile=/data/logs/myproject/myproject.stdout.log
stderr_logfile=/data/logs/myproject/myproject.stderr.log
stopsignal=QUIT
killasgroup=true
[supervisord]
网友评论