因为当时学习服务器的时候用了ubuntu,后来做了很多小项目都是用ubuntu做的,但是项目逐渐涉及复杂内容后,发现网上大部分教程都是基于centos,也发现很多环境基于centos会友好一些,趁着现在还能回头,项目还不太大,长痛不如短痛,今天就搞了它。
下面记录一下我重装的过程。
# adduser demo
# passwd demo
设置密码
sudo命令的授权管理是在sudoers文件里的。可以看看sudoers:
# whereis sudoers
sudoers: /etc/sudoers.d /etc/sudoers /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz
找到这个文件位置之后再查看权限:
# ls -l /etc/sudoers
先添加更改权限
# chmod -v u+w /etc/sudoers
用vim更改
# vim /etc/sudoers
加入demo ALL=(ALL) ALL
修改完:wq退出,然后权限收回
# chmod -v u-w /etc/sudoers
进root,下载
# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# yum install -y mysql-community-server
service mysqld start
但是我没看到初始化密码,只好修改MySQL的登录设置:
# vim /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
保存并且退出vim。
重新启动mysqld
# service mysqld restart
进入mysql
#mysql -uroot -p
mysql>use mysql
mysql>update mysql.user set authentication_string=password('root') where user='root' ;
mysql>FLUSH PRIVILEGES;
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;
又遇到一个问题,着实心疼
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
重置密码
mysql> alter user 'root'@'localhost' identified by 'youpassword';
然后用Navicat Premium将原有的数据库与账户信息顺利的移植过来
# mkdir /usr/local/python3
# cd /usr/local/python3
# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
# tar -xvf Python-3.7.0.tgz
这时候已经出3.8了,还不熟悉新特性,就还是用3.7了,但是追求稳定的话应该还是用版本低一些的吧。
# cd Python-3.7.0
修改配置,让python文件装在一起
# ./configure --prefix=/usr/local/python3Dir
编译一下python文件
# make
# make install
然后发现缺少了一些依赖包
zipimport.ZipImportError: can't decompress data; zlib not available
于是乎根据套路
# yum -y install zlib*
但是发现没用,这个问题先放着,貌似没什么影响
然后回到/usr/bin目录
# cd /usr/bin
# ln -s /usr/local/python3Dir/bin/python3 /usr/bin/python3
更改一下配置
# vi /usr/bin/yum
按i输入
按 :wq ,保存退出
将/usr/bin/python改为/usr/bin/python2.7。
# vim /usr/libexec/urlgrabber-ext-down
安装前置库
# yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
测试了一下,python可以用了,现在开始安装模块
# export PATH=$PATH:/usr/local/python3Dir/bin
现在python和python3共存
首先先更改一下国内源,没有这个文件就创建一下
$ ~/.pip/pip.conf
内容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
然后安装一下依赖包
$ sudo yum -y install zlib*
$ sudo yum install openssl-devel
更新一下pip
$ sudo sudo pip3 install --upgrade pip
安装python时候用的是root,现在切换到了demo,都要用sudo
$ sudo pip3 install pymysql
$ sudo pip3 install json
$ sudo pip3 install django
$ sudo pip3 install django-simple-captcha
这个时候理论上已经可以运行django项目文件了,测试了一下也确实可以了,但是还有很多环境需要配置一下
$ sudo pip3 install supervisor
但是安装这个插件的时候出了点问题
看来不能用python3,就先用2吧
$ sudo pip install supervisor
依赖库安装
$ sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ sudo yum install gcc perl-ExtUtils-MakeMaker
$ wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz
$ tar zxf git-2.19.2.tar.gz git-2.19.2
$ cd git-2.19.2
$ make prefix=/usr/local/git all
$ make prefix=/usr/local/git install
添加到环境变量,这一步权限不够的话就转为root
$ source /etc/bashrc
$ echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
然后设置账号信息
$ git config --global user.name "Your Name"
$ git config user.email "[email protected]"
试了试git,没毛病,开始下一个
$ sudo pip3 install uwsgi
$ ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
测试一下
test.py
def application(env, start_response):
start_response(‘200 OK’, [(‘Content-Type’,’text/html’)])
return "Hello World".encode()
# uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
访问链接,服务器有反应,但是页面什么也没有显示
后来发现要传输比特类型的数据。问题不大。
创建 uWSGI运行的配置文件 uwsgi.conf
# mkdir -p /etc/uwsgi
# vi /et c/uwsgi/uwsgi.conf
[uwsgi]
chdir = /opt/hn_dataweb
socket = /opt/hn_dataweb/hn_dataweb.sock
wsgi-file = /opt/hn_dataweb/hn_dataweb/wsgi.py
master = true
uid = root
processes = 2
threads = 4
chmod-socket = 666
chown-socket = root:nginx
vacuum = true
下载
$ wget -c https://nginx.org/download/nginx-1.15.8.tar.gz
$ tar -zxvf nginx-1.15.8.tar.gz
$ cd nginx-1.15.8
$ ./configure
$ make
$ sudo make install
whereis测试下装好没
$ whereis nginx
$ cd /usr/local/nginx/sbin/
开启测试一下
$ ./nginx
访问ok
还有设置一下ssl,具体流程就不说了,网上大把的教程
作为一个我觉得很牛逼很好用的软件,我现在已经离不开它了
$ sudo yum -y install tmux
然后贴一下常用指令
C-b ? 显示快捷键帮助
C-b C-o 调换窗口位置,类似与vim 里的C-w
C-b 空格键 采用下一个内置布局
C-b ! 把当前窗口变为新窗口
C-b “ 横向分隔窗口
C-b % 纵向分隔窗口
C-b q 显示分隔窗口的编号
C-b o 跳到下一个分隔窗口
C-b 上下键 上一个及下一个分隔窗口
C-b C-方向键 调整分隔窗口大小
C-b c 创建新窗口
C-b 0~9 选择几号窗口
C-b c 创建新窗口
C-b n 选择下一个窗口
C-b l 切换到最后使用的窗口
C-b p 选择前一个窗口
C-b w 以菜单方式显示及选择窗口
C-b t 显示时钟
C-b ; 切换到最后一个使用的面板
C-b x 关闭面板
C-b & 关闭窗口
C-b s 以菜单方式显示和选择会话
C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话
再贴一下配置
# 鼠标滚动
set -g mode-mouse on
#设置前缀为Ctrl + a
set -g prefix C-x
#解除Ctrl+b 与前缀的对应关系
unbind C-b
#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R
# split window
unbind '"'
# vertical split (prefix -)
bind - splitw -v
unbind %
bind | splitw -h
# horizontal split (prefix |)
set-option -g mouse-select-pane on
先在项目同级目录下创建文件夹
$ mkdir script
$ touch script/uwsgi.ini
$ vim script/uwsgi.ini
接下来是配置
[uwsgi]
chdir = /home/demo/django_pro
# 项目目录
# 指定项目的application
module=django_pro.wsgi:login
# 指定sock的文件路径
socket=/home/demo/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/demo/script/uwsgi.pid
# 指定IP端口
http=XXX:8080
# 指定静态文件
static-map=/static=/home/demo/django_pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
py-autoreload=1
# 修改自动重启
daemonize=/home/demo/script/uwsgi.log
运行项目试试
项目目录下创建wsgi.py,写入python3的代码
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_pro.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
$ uwsgi --ini script/uwsgi.ini
查询log发现一句
!!! no /etc/mime.types file found !!!
mime是多用途互联网邮件扩展类型。 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
$ yum provides /etc/mime.types
但是发现基本上都是nginx才会出现这种问题,那就先用以后再解决
然后公网访问,没有问题。
nginx配置之前,先申请了个阿里的免费ssl证书,具体教程阿里都已经解释的很清楚了,不在赘述。
$ sudo vim /usr/local/nginx/conf/nginx.conf
nginx.conf配置
user root;
#user nobody;
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80; #监听80端口
server_name XXX.com www.XXX.com;
return 301 https://www.XXX.com$request_uri; #301重定向为https
}
server {
#listen 8080; #监听项目端口
listen 8080 ssl; #监听项目端口
server_name XXX.com www.XXX.com;
if ($http_host != 'www.XXX.com:8080' ) {
return 301 https://www.XXX.com:8080$request_uri;
}
#return 301 https://www.XXX.com$request_uri; #301重定向为https
ssl_certificate ../cert/XXX.pem;
ssl_certificate_key ../cert/XXX.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
access_log /home/demo/project/django_pro/access.log; # Nginx日志配置
error_log /home/demo/project/django_pro/error_log;
#error_page 400 https://www.XXX.com:8080$request_uri;
location / {
include uwsgi_params; #加入uwsgi
uwsgi_pass unix:///home/demo/project/script/uwsgi.sock;#与uwsgi通信
}
location /static/ {
alias /home/demo/project/django_pro/static/;
#index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name www.XXX.com;
#配置阿里ssl免费证书,具体见阿里教程
ssl_certificate ../cert/XXX.pem;
ssl_certificate_key ../cert/XXX.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
uwsgi配置
[uwsgi]
chdir = /home/demo/project/django_pro
module=django_pro.wsgi
# 指定sock的文件路径
socket=/home/demo/project/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/demo/project/script/uwsgi.pid
# 指定IP端口
http=127.0.0.1:8000
# 指定静态文件
static-map=/static=/home/demo/project/django_pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
py-autoreload=1
# 修改自动重启
daemonize=/home/demo/project/script/uwsgi.log
然后nginx启动
$ sudo /usr/local/nginx/sbin/nginx
$ uwsgi --ini uwsgi.ini
然后还要简单更改一下django配置文件,其实就是加句话,但是不加也不影响运行,现在可以正常访问了