常用命令:
- 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
- 关闭firewall,请务必使用sudo 否则关闭不上。
# systemctl stop firewall.service
# sudo systemctl stop firewalld.service - 禁止firewall自启动,请务必使用sudo 否则关闭不上。
# systemctl disablefirewall.service
# sudo systemctl disable firewalld.service - 安装iptables-services
# sudo yum install iptables-services - 编辑防火墙配置文件
# 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 - 重启iptables,使配置生效
# systemctl restart iptables.service
这里一定要说明一下:配置格式错误重启将会报错。 - 设置iptables为开机启动
# sudo systemctl enable iptables - 关闭SELinux-----(我的默认是关闭的这条开始不用再操作了)
vi /etc/selinux/config
注释所有,只保留一下一条
SELINUX=disabled - 使配置立即生效-----(我的默认是关闭的这条开始不用再操作了)
# setenforce 0
二、安装与配置VSFTP
安装vsftpd:
- 安装 ftp和Vsftpd
# yum -y install ftp vsftpd - 检查vsftpd状态
# systemctl status vsftpd - 启动vsftpd服务
# systemctl start vsftpd - 尝试访问vsftpd
# ftp localhost
配置vsftpd.conf
- 备份vsftpd.conf
# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak - 新建打开vsftpd.conf
# vi /etc/vsftpd/vsftpd.conf - 修改配置:(可以直接复制)
#禁用匿名账户
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 -
修改新vsftpd.conf权限----(因为新建文件和原备份文件不一致)
# chmod 600 /etc/vsftpd/vsftpd.conf -
创建welcome.txt欢迎词
# vi /etc/vsftpd/welcome.txt
~~~欢迎登录WXH的FTP服务器~~~
添加和配置用户
- 添加用户,并指定用户主目录
# useradd -d /home/wangxihao wangxihao - 设置密码
# passwd wangxihao
PS:系统会提示输入密码,但注意,密码不能少于8位数。 - 重启vsftpd
# systemctl restart vsftpd - 测试ftp链接
# ftp localhost
PS:出现欢迎词后,在输入用户名、密码。提示Login successful. 则登录成功。 - 测试ftp用户权限
ftp> ls /
此时进入了系统根目录,这种情况是不允许的,需要配置chroot。
配置chroot权限
- 打开vsftpd.conf
# vi /etc/vsftpd/vsftpd.conf - 修改并加入以下配置信息
#启用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 -
建立chroot_list文件------(可以为空,等于是chroot限制的一个白名单)
# vi /etc/vsftpd/chroot_list -
测试ftp链接
# cp /etc/vsftpd/chroot_list /home/wangxihao
PS:此处只是为了增加一个标记。
# ftp localhost
输入用户名、密码,登录成功。
ftp>ls /
此处显示的是刚才拷贝的chroot_list文件,则说明chroot限制生效。 -
遇到的问题
使用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 -
搞定!下一步是python django uwsgi nginx
三、安装Python、pip3、Django
安装Python、PIP
- 首先说明系统自带的python2.7.5不能卸载。否则系统会问题。
- 安装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 - 下载python3.6.1(2017-05)
# cd /home/wangxihao
这个目录是之前创建的vsftp目录。用于存放一般性数据
# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz - 创建python3目录
# mkdir /usr/local/python3 - 解压缩python文件
# tar -zxvf Python-3.6.1.tgz - 进入解压缩之后的目录
# cd Python-3.6.1 - 配置文件安装目录--- 唰唰唰-很快
# ./configure --prefix=/usr/local/python3 - 执行make---唰唰唰唰唰-好慢,真的好慢,要耐心
# make - 执行 make install
# make install - 设置软连接,可以直接使用执行python3 进入python3
# ln -s /usr/local/python3/bin/python3 /usr/bin/python3 - 因为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 - 如果想执行Python,进入python3
# mv /usr/bin/python /usr/bin/python_bak
# ln -s /usr/local/python3/bin/python3 /usr/bin/python - 默认已经安装了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
- 安装Django
# pip install django 设置软连接(就是加入环境变量,如果把整个文件夹加入进去就好了)
# ln -s /usr/local/python3/bin/django_admin /usr/bin/django_admin- 或者修改/etc/profile文件(在系统启动后第一个用户登录时运行)
# vi /etc/profile
添加以下命令:
export PATH=/usr/local/python3/bin:$PATH -
要使修改生效,可以重启系统,或者执行
# source /etc/profile
# echo $PATH -
创建Django项目
# cd /home/Django_Web
# django-admin startproject WXH_DJANGOWEB -
修改Django项目配置
# cd WXH_DJANGOWEB\WXH_DJANGOWEB
# vi settings.py
在尾部添加一句:
STATIC_ROOT = os.path.join(BASE_DIR, 'static') -
保存退出后更新应用配置,自动生成 static 目录
# ../manage.py collectstatic -
运行django项目
# python /home/Django_Web/WXH_DJANGOWEB/manage.py runserver 0.0.0.0:8080 -
这是访问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 = ['你的域名']
这样访问就没有问题了~~ -
存在一个小问题,当我开启runserver之后,关闭时按了CTRL+Z。当再次打开时,提示我端口占用。无奈之下,查找了一下如何解决
-
原因:CTRL+C 是强制中断(关闭)。CTRL+Z 是中断,但如果任务没有结束就等于是挂起状态。
-
查找占用的端口:
# netstat -apn|grep 8080 -
显示“tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 32574/python ”
记住加粗的部分,就是进程号 -
杀死当前进程
# kill -9 32574 -
在运行runserver
# python /home/Django_Web/WXH_DJANGOWEB/manage.py runserver 0.0.0.0:8080
OK了~ 以后尽量用CTRL+C关闭
-
安装uWSGI
- 安装uWSGI
# pip3 install uwsgi - 运行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。 - 测试django与uwsgi的连接
# uwsgi --http :80 --chdir /home/Django_Web/WXH_DJANGOWEB/ --module WXH_DJANGOWEB.wsgi
PS:这里修改了好多,以前是建立一个django_uwsgi.ini文件,然后连接,现在可以直接指向项目中的wsgi,省去中间文件了。
PS:这里要注意的是,如果更换端口的话,记得打开防火墙的端口限制。
安装nginx
- 安装依赖环境
# 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
好多啊,,,,汗,不过有一些是以前安装过的。 - 安装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 - 创建用户(没明白意思)
# groupadd www
# useradd -s /sbin/nologin -g www www - 下载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 - 启动nginx
# /usr/local/nginx/sbin/nginx
PS浏览器访问网站80端口,显示“Welcome to nginx!”,则安装OK - 配置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
}
} -
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。如果需要修改则一起修改,必须同步。 -
nginx 与 uwsgi 与 django 链接
# uwsgi --socket :8001 --module /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB.wsgi
运行到这里,访问浏览器时,出现“Internal Server Error”--500错误
PS:推测1:是权限问题 -
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 -
运行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! -
下一步是安装mysql
安装mysql
-
安装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 -
启动mysql
# service mysqld start
# service mysqld stop
启动mysql(推荐): # systemctl start mysqld
开机启动: # systemctl enable mysqld -
进入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; -
出现过的问题
-
在修改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 -
晚上还是还好好的,今早在登录的时候外地客户端显示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
- 安装pymysql
# pip3 install pymysql
# pip3 freeze
PS:查看pymysql版本号应该是7.11以上,5.0是错误的。
#pip3 uninstall pymysql3 -- 安装失败时执行删除。 - 配置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',
}
} - 因为mysqldb不再支持python3,所以将使用pymysql替代。
# vi /home/Django_Web/WXH_DJANGOWEB/WXH_DJANGOWEB/__init__.py
PS:目前是一个空的文件,不要担心。
插入内容:
import pymysql
pymysql.install_as_MySQLdb()
保存退出,注意,两行前面都不能留空额 - 跑起来吧~~·
没出问题,OY!~
到这里基本环境就搭建好了~等写完一些功能,再传服务器,再继续更新