阿里云ECS-Linux--CentOS7.3--乱七八糟,回头在整理

原创
2017/05/17 16:33
阅读数 193

常用命令:

  • iptables -P INPUT ACCEPT         允许所有
  • iptables -L -n           查看iptables现有规则
  • iptables -F                清空所有自定义规则
  • iptables -P OUTPUT ACCEPT          所有出站一律绿灯
  • iptables -P FORWARD DROP          所有转发一律丢弃
  • iptables -I INPUT -s ***.***.***.*** -j DROP     封掉一个IP
  • iptables -D INPUT -s ***.***.***.*** -j DROP    解封一个IP
  • service iptables save                  保存iptables配置信息
  • netstat -lnp|grep 88                   查看端口占用
  • ps -aux|grep <进程号>               查看进程详细信息
  • rpm -q pkgname                        查看软件是否安装

 

  •  

说在前面,如果不是root账号,命令前要加sudo。

安装软件的方法:

一、安装iptables

  1. 关闭firewall,请务必使用sudo 否则关闭不上。
    # systemctl stop firewall.service
    # sudo systemctl stop firewalld.service
  2. 禁止firewall自启动,请务必使用sudo 否则关闭不上。
    # systemctl disablefirewall.service
    # sudo systemctl disable firewalld.service
  3. 安装iptables-services
    # sudo yum install iptables-services
  4. 编辑防火墙配置文件
    # vi /etc/sysconfig/iptables
    添加开放端口
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
  5. 重启iptables,使配置生效
    # systemctl restart iptables.service
    这里一定要说明一下:配置格式错误重启将会报错。
  6. 设置iptables为开机启动
    # sudo systemctl enable iptables
  7. 关闭SELinux-----(我的默认是关闭的这条开始不用再操作了)
    vi /etc/selinux/config
    注释所有,只保留一下一条
    SELINUX=disabled
  8. 使配置立即生效-----(我的默认是关闭的这条开始不用再操作了)
    # setenforce 0

二、安装与配置VSFTP

安装vsftpd:

  1. 安装 ftp和Vsftpd
    # yum -y install ftp vsftpd
  2. 检查vsftpd状态
    # systemctl status vsftpd
  3. 启动vsftpd服务
    # systemctl start vsftpd
  4. 尝试访问vsftpd
    # ftp localhost

配置vsftpd.conf

  1. 备份vsftpd.conf
    # mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
  2. 新建打开vsftpd.conf
    # vi /etc/vsftpd/vsftpd.conf
  3. 修改配置:(可以直接复制)

    #禁用匿名账户
    anonymous_enable=NO

    #允许实体用户登录
    local_enable=YES

    #允许用户写入
    write_enable=YES

    #限制用户上传文件的权限
    local_umask=002

    #启用用户列表
    userlist_enable=YES

    #在用户列表的用户将会禁止登录(感觉像是黑名单)
    userlist_deny=YES

    #用户列表的位置
    userlist_file=/etc/vsftpd/user_list

    #使用本地时间
    use_localtime=YES

    #如果文件夹中有.message,在该用户计入该文件夹时,将会显示其内容
    dirmessage_enable=YES

    #输出日志文件
    xferlog_enable=YES

    #输出传输端口为20
    connect_from_port_20=YES

    #日志格式化
    xferlog_std_format=YES

    #开启监听
    listen=YES

    #服务名称为vsftpd
    pam_service_name=vsftpd

    #支持TCP Wrapper
    tcp_wrappers=YES

    #登录ftp时的欢迎词
    banner_file=/etc/vsftpd/welcome.txt

  4. 修改新vsftpd.conf权限----(因为新建文件和原备份文件不一致)
    # chmod 600 /etc/vsftpd/vsftpd.conf

  5. 创建welcome.txt欢迎词
    # vi /etc/vsftpd/welcome.txt
    ~~~欢迎登录WXH的FTP服务器~~~

添加和配置用户

  1. 添加用户,并指定用户主目录
    # useradd -d /home/wangxihao wangxihao
  2. 设置密码
    # passwd wangxihao
    PS:系统会提示输入密码,但注意,密码不能少于8位数。
  3. 重启vsftpd
    # systemctl restart vsftpd
  4. 测试ftp链接
    # ftp localhost
    PS:出现欢迎词后,在输入用户名、密码。提示Login successful. 则登录成功。
  5. 测试ftp用户权限
    ftp> ls /
    此时进入了系统根目录,这种情况是不允许的,需要配置chroot。

配置chroot权限

  1. 打开vsftpd.conf
    # vi /etc/vsftpd/vsftpd.conf
  2. 修改并加入以下配置信息

    #启用chroot。
    chroot_local_user=YES

    #启用chroot列表,这个列表中的用户不受chroot限制,可以进入其他目录,比如系统目录。
    chroot_list_enable=YES

    #列表的位置
    chroot_list_file=/etc/vsftpd/chroot_list
    allow_writeable_chroot=YES

    #chroot_list是默认不存在的,需要自己建立。
    # vi /etc/vsftpd/chroot_list

  3. 建立chroot_list文件------(可以为空,等于是chroot限制的一个白名单)
    # vi /etc/vsftpd/chroot_list

  4. 测试ftp链接
    # cp /etc/vsftpd/chroot_list /home/wangxihao
    PS:此处只是为了增加一个标记。
    # ftp localhost
    输入用户名、密码,登录成功。
    ftp>ls /
    此处显示的是刚才拷贝的chroot_list文件,则说明chroot限制生效。

  5. 遇到的问题
    使用FileZilla,链接服务器出现以下错误“ Failed to retrieve directory listing ”
    解决方法1:因我FileZilla默认是passive链接方式,修改为active即可
    Site Manager>Transfer settings>Transfer mode,选Active

    解决办法2:使vsftp支持passive
    1、编辑vsftpd
    # vi /etc/vsftpd/vsftpd.conf
    加入以下4行:
    #允许被动访问,端口50000--50003
    pasv_enable=YES
    pasv_min_port=50000
    pasv_max_port=50003
    port_enable=YES

    2、在iptables添加50000~50003端口。
    # vi /etc/sysconfig/iptables
    加入以下:开放50000-50003端口
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 50000:50003 -j ACCEPT

    3、重启vsftp和iptables
    # systemctl restart vsftpd
    # systemctl restart iptables

  6. 搞定!下一步是python django uwsgi nginx

三、安装Python、pip3、Django

安装Python、PIP

  1. 首先说明系统自带的python2.7.5不能卸载。否则系统会问题。
  2. 安装python3 需要的依赖包。
    # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel
  3. 下载python3.6.1(2017-05)
    # cd /home/wangxihao
    这个目录是之前创建的vsftp目录。用于存放一般性数据
    # wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
  4. 创建python3目录
    # mkdir /usr/local/python3 
  5. 解压缩python文件
    # tar -zxvf Python-3.6.1.tgz
  6. 进入解压缩之后的目录
    # cd Python-3.6.1
  7. 配置文件安装目录--- 唰唰唰-很快
    # ./configure --prefix=/usr/local/python3
  8. 执行make---唰唰唰唰唰-好慢,真的好慢,要耐心
    # make
  9. 执行 make install
    # make install
  10. 设置软连接,可以直接使用执行python3 进入python3
    # ln -s /usr/local/python3/bin/python3 /usr/bin/python3
  11. 因为yum使用python2,因此替换为python3后可能无法正常工作,因此修改yum配置文件
    # vi /usr/bin/yum
    将其中:#!/usr/bin/python
    修改为:#!/usr/bin/python2.7
    PS:运行yum时报错:File "/usr/libexec/urlgrabber-ext-down", line 28
    解决办法如下:
    #  vi /usr/libexec/urlgrabber-ext-down
    将其中:#!/usr/bin/python
    修改为:#!/usr/bin/python2.7
  12. 如果想执行Python,进入python3
    # mv /usr/bin/python /usr/bin/python_bak
    # ln -s /usr/local/python3/bin/python3 /usr/bin/python
  13. 默认已经安装了pip3,但只是没有加入环境变量(吐槽不知道Linux是不是叫环境变量)
    # ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    如果习惯使用pip的话,可以用上面类似的方法
    # mv /usr/bin/pip /usr/bin/pip_bak
    # ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

安装Django

  1. 安装Django
    # pip install django
  2. 设置软连接(就是加入环境变量,如果把整个文件夹加入进去就好了)
    # ln -s /usr/local/python3/bin/django_admin /usr/bin/django_admin
  3. 或者修改/etc/profile文件(在系统启动后第一个用户登录时运行)
    # vi /etc/profile
    添加以下命令:
    export PATH=/usr/local/python3/bin:$PATH
  4. 要使修改生效,可以重启系统,或者执行
    # source /etc/profile
    # echo $PATH

  5. 创建Django项目
    # cd /home/Django_Web
    # django-admin startproject WXH_DJANGOWEB

  6. 修改Django项目配置
    # cd WXH_DJANGOWEB\WXH_DJANGOWEB
    # vi settings.py
    在尾部添加一句:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

  7. 保存退出后更新应用配置,自动生成 static 目录
    # ../manage.py collectstatic

  8. 运行django项目
    # python /home/Django_Web/WXH_DJANGOWEB/manage.py runserver 0.0.0.0:8080

  9. 这是访问http://ip:8080 或 http://ip:8080/admin(我的8080端口是开放的),提示错误:ALLOWED_HOSTS
    这里添加host白名单
    # vi /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB/settings.py
    找到:ALLOWED_HOSTS = [ ]
    修改:ALLOWED_HOSTS = ['*'] 
    或改成:ALLOWED_HOSTS = ['你的IP'] 
    或改成:ALLOWED_HOSTS = ['你的域名'] 
    这样访问就没有问题了~~

  10. 存在一个小问题,当我开启runserver之后,关闭时按了CTRL+Z。当再次打开时,提示我端口占用。无奈之下,查找了一下如何解决

    1. 原因:CTRL+C 是强制中断(关闭)。CTRL+Z 是中断,但如果任务没有结束就等于是挂起状态。

    2. 查找占用的端口:
      # netstat -apn|grep 8080

    3. 显示“tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      32574/python  ”
      记住加粗的部分,就是进程号

    4. 杀死当前进程
      # kill -9 32574

    5. 在运行runserver
      # python /home/Django_Web/WXH_DJANGOWEB/manage.py runserver 0.0.0.0:8080
      OK了~ 以后尽量用CTRL+C关闭

安装uWSGI

  1. 安装uWSGI
    # pip3 install uwsgi
  2. 运行uWSGI,测试
    # vi test.py
    输入一下内容:(注意缩进)
    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
        #return ["Hello World"] # python2
    再运行:
    # uwsgi --http :8080 --wsgi-file test.py
    PS:浏览器访问8080端口,看到Hello World,说明ok。
  3. 测试django与uwsgi的连接
    # uwsgi --http :80 --chdir /home/Django_Web/WXH_DJANGOWEB/ --module WXH_DJANGOWEB.wsgi
    PS:这里修改了好多,以前是建立一个django_uwsgi.ini文件,然后连接,现在可以直接指向项目中的wsgi,省去中间文件了。
    PS:这里要注意的是,如果更换端口的话,记得打开防火墙的端口限制。

安装nginx

  1. 安装依赖环境
    # yum install patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils
    好多啊,,,,汗,不过有一些是以前安装过的。
  2. 安装pcre
    # wget https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
    # tar -zxvf pcre-8.00.tar.gz
    # cd pcre-8.00
    # ./configure --prefix=/usr/local/pcre
    # make
    # make install
  3. 创建用户(没明白意思)
    # groupadd www
    # useradd -s /sbin/nologin -g www www
  4. 下载nginx
    # wget http://nginx.org/download/nginx-1.9.12.tar.gz
    PS:为什么不用yum安装。因为传说云安装会添加很多权限配置,不懂哎。
    # tar -zxvf nginx-1.9.12.tar.gz
    # cd nginx-1.9.12
    # ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
    # make
    # make install
  5. 启动nginx
    # /usr/local/nginx/sbin/nginx
    PS浏览器访问网站80端口,显示“Welcome to nginx!”,则安装OK
  6. 配置nginx
    # vi /usr/local/nginx/conf/nginx.conf
    PS:好多文档都写/etc/nginx/nginx.conf,然而,并没有。
    在http{}中添加如下:   
    upstream django {
            server 127.0.0.1:8001; # for a web port socket
    }
    server {
            listen      80;
            server_name wangxihao.com;
            charset     utf-8;
            client_max_body_size 75M;   # adjust to taste

            #location /media  {
            #    alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
            #}

            #location /static {
            #    alias /path/to/your/mysite/static; # your Django project's static files - amend as required
            #}

            # Finally, send all non-media requests to the Django server.
            location / {
                root        /home/DJANGO_WEB/WXH_DJANGOWEB;
                uwsgi_pass  django;
                include     uwsgi_params; # the uwsgi_params file you installed
            }
        }

  7. uwsgi 与 nginx 链接
    # uwsgi --socket :8001 --wsgi-file /home/wangxihao/test/test.py
    PS:test.py是之前安装uwsgi时建立的测试文件。
    PS:nginx是启动状态,运行这条命令。
    PS:浏览器访问80端口,显示 Hello World ,说明成功!
    PS:这里socket:8001对应的是nginx配置文件中的127.0.0.1:8001。如果需要修改则一起修改,必须同步。

  8. nginx 与 uwsgi 与 django 链接
    # uwsgi --socket :8001 --module /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB.wsgi
    运行到这里,访问浏览器时,出现“Internal Server Error”--500错误
    PS:推测1:是权限问题

  9. uwsgi.ini配置
    # vi django_uwsgi.ini
    添加以下内容,需要的请自己修改。
    # django_uwsgi.ini file
    [uwsgi]
    # Django-related settings
    # the base directory (full path)
    chdir           = /home/Django_Web/WXH_DJANGOWEB
    # Django's wsgi file
    module          = WXH_DJANGOWEB.wsgi
    # the virtualenv (full path)
    # home          = /path/to/virtualenv
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 10
    # the socket (use the full path to be safe)
    # socket        = /path/to/your/project/mysite.sock
    socket          = :8001
    # ... with appropriate permissions - may be needed
    # chmod-socket  = 664
    # clear environment on exit
    vacuum          = true

  10. 运行uwsgi.ini
    # /usr/local/nginx/sbin/nginx -s  reload
    # uwsgi --ini django_uwsgi.ini
    PS:到了这里“Internal Server Error”--500错误,自己消失了。
    PS:访问浏览器80端口,卧槽!!  显示It worked! django 的It worked!

  11.  

    下一步是安装mysql

安装mysql

  1. 安装mysql
    # yum install mysql mysql-devel mysql-server、
    PS:CentOS7下解决yum install mysql-server没有可用包的问题
    # cd /home/wangxihao
    # wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    # rpm -ivh mysql-community-release-el7-5.noarch.rpm
    # yum install mysql-server

  2. 启动mysql
    # service mysqld start
    # service mysqld stop
    启动mysql(推荐):  # systemctl start mysqld
    开机启动:     # systemctl enable mysqld

  3. 进入mysql配置用户密码
    不要删除ROOT权限 妈蛋,初始化系统,重新再来!!
    这里我删除了root账号,请大家注意谨慎操作,一定要创建一个可用用户先。
    mysql>delete from user where User!='root';

    # mysql
    PS:命令交行直接输入mysql,不需要密码直接进入mysql
    mysql>select Host,User,Password from mysql.user;
    mysql>delete from mysql.user where host!='localhost' user!='root';
    mysql>UPDATE mysql.user SET Password=PASSWORD('password') where USER='root'
    PS:只留下root的localhost权限
    创建数据库并设置wangxihao账号,在所有地方都而已访问指定数据库。
    mysql>create database WXH_DJANGOWEB;
    mysql>grant all on WXH_DJANGOWEB.* to 'wangxihao'@'%' identified by 'passw@rd';
    刷新操作,立即生效。
    mysql>flush privileges;

  4. 出现过的问题

    1. 在修改root密码时,输入的命令是:UPDATE mysql.user SET Password='passw@rd' where USER='root';
      这样存在数据库password字段中的密码是没有加密的。而数据库读取密码时是解密读取。
      所以怎么输入密码都是错误的。请大家注意。但是也有解决办法。
      解决办法:
      # systemctl stop mysqld
      # mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
      # mysql -u root mysql
      # mysql> UPDATE mysql.user SET Password=PASSWORD('newpassword') where USER='root';
      # mysql>FLUSH PRIVILEGES;
      # mysql>quit;
      # systemctl start mysqld
      # mysql -uroot -pnewpassword

    2. 晚上还是还好好的,今早在登录的时候外地客户端显示10061错误。
      # systemctl stop mysqld,报错,要求看状态。
      # systemctl start mysqld,也报错
      # systemctl status mysqld,状态看不懂。哈哈
      解决办法:
      查看错误日志:
      # mysql -uroot -p
      # mysql> show variables like 'log_error';
      PS:结果显示错误日志地址,我的是#/var/log/mysqld.log
      # mysql>quit;
      # vi /var/log/mysqld.log
      PS,里面最后一行一直说mysqld_safe已经存在。“mysqld_safe A mysqld process already exists”
      于是乎:
      # ps -A|grep mysql
      此时显示了3个mysql、mysqld、mysqld_safe,3个进程存在。
      于是乎,我把他们3个杀死了 ……
      # kill -9 XXXXX
      之后,打开mysqld服务,一切正常。
      # systemctl start mysqld
      搞定!

链接mysql与Django

  1. 安装pymysql
    # pip3 install pymysql
    # pip3 freeze
    PS:查看pymysql版本号应该是7.11以上,5.0是错误的。
    #pip3 uninstall pymysql3 -- 安装失败时执行删除。
  2. 配置Django数据库设置
    # vi /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB/settings.py
    修改数据库配置:
    DATABASES = {
        'default': { 'ENGINE': 'django.db.backends.mysql',
            'NAME': 'WXH_DJANGOWEB',
            'USER': 'wangxihao',
            'PASSWORD': 'passw@rd',
            'HOST': '你的ip',
            'PORT': '3306',
        }
    }
  3. 因为mysqldb不再支持python3,所以将使用pymysql替代。
    # vi /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB/__init__.py
    PS:目前是一个空的文件,不要担心。
    插入内容:
    import pymysql
    pymysql.install_as_MySQLdb()
    保存退出,注意,两行前面都不能留空额
  4. 跑起来吧~~·
    没出问题,OY!~

 

到这里基本环境就搭建好了~等写完一些功能,再传服务器,再继续更新

 

 

 

 

 

 

 

 

 

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部