前言:
经常要配置新的服务器,需要网上查找很多资料还经常是错的或者过时的,趁着现在又要搭2台服务器(一台桌面版,一台客户的云服务器)把需要的步骤写下来方便以后用。其中,inodes节点在最开始挂载硬盘的时候一定要多分配一点,血淋淋的教训。我的经验是100GB硬盘分配1千2百万个节点。
目录:
一、上传SSH公钥到服务器
二、vim设置永久显示行号和中文支持
三、Mysql 安装与配置
四、Pycharm 安装
五、磁盘挂载和inodes节点分配
六、MySQL数据库迁移
七、Nginx安装与配置
八、安装unrar解压
九、SCP拷贝文件到服务器并解压
十、安装PIP
十一、supervisor安装和配置
十二、安装redis
十三、FTP搭建
十四、修改Tornado让它支持GBK
十五、shadowsocks配置
十六、pptp VPN配置
正文:
前置步骤:
给root设置密码:
sudo passwd
一、上传SSH公钥到服务器
ssh-copy-id -i .ssh/id_rsa.pub root@172.xx.yy.zzz
如果服务器ssh不是默认端口22则通过 -p指定端口:
ssh-copy-id -i C:\\Users\31236\\.ssh/id_rsa.pub [email protected] -p 8022
二、vim设置永久显示行号和中文支持
vim ~/.vimrc
输入
set nu set encoding=utf-8 set fileencodings=cp936,gb2312,gb18030,ucs-bom,utf-8,big5,euc-jp,euc-kr,latin1 set termencoding=utf-8
保存退出
三、Mysql 安装与配置
1. 安装
sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
2. 访问
mysql -u root -p你的密码
如果在安装过程中没有提示设置密码,则通过以下文件的账号密码访问:
vim /etc/mysql/debian.cnf
3. 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
- host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符
%
CREATE USER 'sengo'@'%' IDENTIFIED BY 'password';
4. 授权
grant all on *.* to sengo@'%' identified by '你的密码' with grant option;
其中sengo是账号
flush privileges;
5. 设置远程访问并修改端口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到port 改成8847
port = 8847
注释掉下面这行:
bind-address = 127.0.0.1
四、Pycharm 安装
首先你需要安装umake。一般来说,umake已经在Ubuntu上预先安装好了,但是如果没有安装的话(我的系统没有),可以使用PPA来得到umake最新的稳定版本。
sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
sudo apt-get update
sudo apt-get install ubuntu-make
一旦你有了umake,可以使用以下命令来安装pycharm社区版:
umake ide pycharm
下面命令用来安装专业版:
umake ide pycharm-professional
五、磁盘挂载和inodes节点分配
之前小说站的数据盘inodes节点爆满了,但是实际只占用了69%的磁盘空间,于是挂载磁盘的时候有必要多分配点inodes节点。
查看inodes数量:
df -i
查看磁盘:
1. 卸载文件系统
umount /data0
fdisk -l
进入磁盘
fdisk /dev/sdb
1. p:列出当前操作硬盘的分区情况
2. d: 删除分区
3. n:增加一个分区
输入p,First cylinder (51-125, default 51): 注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费。
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10G
4. fdisk 的退出,用q或者 w
分配inodes节点:
sudo mkfs.ext4 /dev/sdb -N 26602718
-N 后面是节点数。我这里按照之前的服务器使用量计算大概需要1000万个节点每100GB。
创建目录 :
mkdir /data1
挂载磁盘:
mount /dev/sdb2 /data1
前面是磁盘名,后面是文件名
六、MySQL数据库迁移
我是将数据库移动到/data1目录下
1. 停用服务
service mysql stop
2. 将mysql文件移动到 数据盘/data1 目录下
mv /var/lib/mysql /data1
3. 修改配置文件
3.1
vim /etc/mysql/mysql.conf.d/mysqld.cnf
datadir = /data1/mysql
3.2 usr.bin.mysqld文件
由于Ubuntu使用了apparmor安全模块,就是类似于沙盒运行的一种机制,它可以限制软件在运行时的一些行为,比如对哪些目录和文件可以读写加锁等等。
由于修改了数据库文件路径,所以要修改mysql数据库的apparmor配置文件,在其中将新数据库文件目录和文件的读写及加锁权限添加上去,同时可以删除或者注释掉原先/var/lib/mysql数据库文件目录的权限。mysql数据库的apparmor配置文件路径在/etc/apparmor.d/usr.sbin.mysqld。使用下面命令编辑这个配置文件:
sudo vim /etc/apparmor.d/usr.sbin.mysqld
找到其中的
/var/lib/mysql/ r, /var/lib/mysql/** rwk,
两行权限声明,可以在前面加上#好注释掉。然后对照格式,加入新路径的权限声明:
/data1/mysql/ r, /data1/mysql/** rwk,
3.3 abstractions/mysql文件
由于usr.bin.mysqld文件中引用了abstractions/mysql文件,也就是会将abstractions/mysql文件中的权限声明导入进来。因此,也修改下这个文件:
sudo vim /etc/apparmor.d/abstractions/mysql
同样也是将新数据库文件路径中的socket文件权限添加进去,同时可以删除或者注释掉全路径中申请的权限,效果如图:
4、重启数据库
配置文件修改成功后就可以重启数据库,重启数据库之前需要先重新载入apparmor配置文件,使用下面命令重新载入:
sudo /etc/init.d/apparmor restart
重载成功就可以使用下面命令启动数据库:
sudo /etc/init.d/mysql start
进入数据库查看是否迁移成功:
show variables like '%dir'
5、权限问题
经过上诉步骤之后,你有可能数据库无法启动。忽略继续登录数据库出现下面关于sock的错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
查看数据库的启动错误日志,sudo vim /var/log/mysql/error.log,还能看到Table 'plugin' is read only这样的错误:
出现这种情况的原因还是在于新数据库文件目录的权限。
mysql数据库启动的时候需要以mysql用户的身份执行,所以mysql用户需要具备能读写数据库文件目录的权限。虽然上面迁移数据库文件的时候无论是使用mv还是cp -a命令都没有更改mysql目录的用户和用户组,上面也看到了/mnt/data/mysql所属的用户和用户组都还是mysql。因此可以肯定mysql用户具备读写/mnt/data/mysql的权限,但是这并没有保证上级目录/mnt/data和上上级目录/mnt也具备让mysql用户读取的权限。如果mysql用户不具备上级目录/mnt/data和上上级目录/mnt的读取权限,mysql用户一样读写不了自己的/mnt/data/mysql目录,因此就会出现上面的问题。
可以过头来看看原本数据库文件目录/var/lib/mysql的结构:
可以看出原本数据库文件目录/var/lib/mysql的上级目录/var/lib属于虽然属于root用户,但是它为同组用户和其它组用户都开放了’r'和‘x'权限,所以即使上级目录不属于mysql用户,mysql用户同样也能正常进入并访问到自己的数据库文件。
解决这个问题的方法说起来就是这么简单,只要保证mysql用户具备最终数据库文件目录的所有上级目录的'r'和‘x'权限就可以了。
例如,使用下面命令修改本文中/mnt/data的权限:
sudo chmod 755 /mnt/data
再上级目录/mnt是系统目录,归属于root用户,root用户默认的目录的权限都是755,所以不用修改。
权限修改后再次启动数据库sudo /etc/init.d/mysql start,应该就能成功启动了。
进入数据库,查看当前路径配置信息:
数据库已经正常启动, 并且数据库文件路径也已经替换到/mnt/data/mysql目标路径,数据库文件迁移成功。
七、Nginx安装与配置
基于APT源安装
sudo apt-get install nginx
安装好的文件位置:
- /usr/sbin/nginx:主程序
- /etc/nginx:存放配置文件
- /usr/share/nginx:存放静态文件
- /var/log/nginx:存放日志
1. 修改nginx.conf
cd /etc/nginx
/etc/nginx# vim nginx.conf替换为一下内容:(我这个是开启了gzip压缩的,具体的配置文件在 /etc/nginx/sites-available/m_xhj.conf 里面
worker_processes 4; pid /run/nginx.pid; events { worker_connections 1024; use epoll; } http { ## # Basic Settings ## keepalive_timeout 60; client_header_buffer_size 4k; include mime.types; default_type application/octet-stream; gzip on; gzip_min_length 1k; gzip_buffers 16 64k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x-javascript text/css application/xml text/javascript; gzip_vary on; gzip_disable "MSIE [1-6]\."; include /etc/nginx/sites-available/m_xhj.conf; }
修改 /etc/nginx/sites-available/m_xhj.conf
server { listen 80; server_name m.xhjbook.com; server_name_in_redirect off; location /static/{ root /data/project/bk_xhj/web/; if ($query_string) { expires max; } } location /pic/{ root /data; } location /new/{ root /data; } location / { root html; proxy_pass http://localhost:8888/m/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name www.xhjbook.com; server_name_in_redirect off; location /static/{ root /data/project/bk_xhj/web/; if ($query_string) { expires max; } } location /pic/{ root /data; } location / { root html; proxy_pass http://localhost:8888/pc/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80 default; rewrite ^/(.*) http://www.xhjbook.com/$1 permanent; } server { listen 80; server_name writer.xhjbook.com; server_name_in_redirect off; location /static/{ root /data/project/bk_xhj/web/; if ($query_string) { expires max; } } location /pic/{ root /data; } location / { root html; proxy_pass http://localhost:8888/writer/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
测试配置文件:
nginx -t
重启nginx
service nginx restart
八、安装unrar解压
sudo apt-get install unrar
九、SCP拷贝文件到服务器并解压
命令:
(1)将本地文件拷贝到远程:scp 文件名 用户名@计算机IP或者计算机名称:远程路径
(2)从远程将文件拷回本地:scp 用户名@计算机IP或者计算机名称:文件名本地路径
(3)将本地目录拷贝到远程:scp -r目录名 用户名@计算机IP或者计算机名称:远程路径
(4)从远程将目录拷回本地:scp-r 用户名@计算机IP或者计算机名称:目录名本地路径
(1)
scp E:\\workspaces\\transfer\\bk_xhj.rar [email protected]:/data/project/bk_xhj.rar
十、安装PIP
$ sudo apt-get install python-pip python-dev build-essential $ sudo pip install --upgrade pip $ sudo pip install --upgrade virtualenv
在安装第二台服务器的时候遇到报错,无法更新pip到新的版本:
root@VM-110-199-ubuntu:/data1# sudo pip install --upgrade pip Traceback (most recent call last): File "/usr/local/bin/pip", line 7, in <module> from pip._internal import main ImportError: No module named _internal
解决方法:
sudo apt remove python-pip
查看pip已安装模块,命令行下直接运行:
pydoc modules
一些我自己常用的模块:
sudo apt-get install libcurl4-gnutls-dev librtmp-dev
DBUtils MySQL-python futures gevent pycrypto pycurl pymysql requests tornado zerorpc redis urllib3 selenium beautifulsoup4 lxml==4.1.0 Image wheezy.captcha
十一、supervisor安装和配置
sudo apt-get install supervisor
修改配置文件:
配置文件在这里面
cd /etc/supervisor
在conf.d目录里面创建新的配置文件就行了,要以.conf结尾才能被外面的配置文件加载:
[program:bk-taget] directory=/data2/project/xhjyq-craw/ command=python -m startup_target autorestart=true autostart=false user=root stdout_logfile_maxbytes = 10MB stdout_logfile_backups = 1 redirect_stderr = true stdout_logfile = /data2/log/xhjyq-craw.log [program:bk-minor] directory=/data2/project/xhjyq-craw/ command=python -m startup_minor autorestart=true autostart=false user=root stdout_logfile_maxbytes = 10MB stdout_logfile_backups = 1 redirect_stderr = true stdout_logfile = /data2/log/xhjyq-minor.log
重新加载配置文件:
supervisorctl reload
十二、安装redis
在 Ubuntu 系统安装 Redi 可以使用以下命令:
$sudo apt-get update $sudo apt-get install redis-server
启动 Redis
$ redis-server
查看 redis 是否启动?
$ redis-cli
以上命令将打开以下终端:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
redis 127.0.0.1:6379> ping PONG
以上说明我们已经成功安装了redis。
十三、FTP搭建
1.安装FTP
sudo apt-get install vsftpd
2. 新建FTP用户并设置密码以及工作目录
Sengo为你为该ftp创建的用户名
/data2为FTP访问的目录
sudo useradd -d /data2 -s /bin/bash Sengo
为新建的用户设置密码
passwd ftpname
3. 修改配置
vim /etc/vsftpd.conf设置属性值
anonymous_enable=NO #禁止匿名访问
local_enable=YES
write_enable =YES
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/data2
#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755 local_umask=022
我直接给 000了,就是777的权限。
保存返回
4.启动vsftpd服务
service vsftpd restart
chmod 给文件夹权限
chmod 755 /data2
之后就可以直接访问,如果是在内网就再设置一下Port Forwarding, FTP是21端口
十四、修改Tornado让它支持GBK
cd /usr/local/lib/python2.7/dist-packages/tornado
vim template.py
然后在 Template类里面加入这句话:
template_string = template_string.decode()
十五、shadowsocks配置
安装
pip install shadowsocks
配置
sudo vim /etc/shadowsocks.json //这里的json文件是自己创建的,不是系统自带
{ "server":"服务器的ip", "server_port":19175, "local_address":"127.0.0.1", "local_port":1080, "password":"密码", "timeout":300, "method":"aes-256-cfb", "fast_open":false }启动ss客户端
sslocal -c /etc/shadowsocks.json
一条命令代理就可以启动了。
当端口被占用会显示如下报错:
[Errno 98] Address already in use
解决方法:lsof -i:1080
kill -9 对应pid
客户端下载地址:http://www.shadowsocks.org/en/download/clients.html
十六、PPTP VPN配置
这篇博客亲测可用:
https://blog.csdn.net/rainth/article/details/80373378