Ubuntu 新服务器配置整合

前言:

经常要配置新的服务器,需要网上查找很多资料还经常是错的或者过时的,趁着现在又要搭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最新的稳定版本。

  1. sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
  2. sudo apt-get update
  3. sudo apt-get install ubuntu-make

一旦你有了umake,可以使用以下命令来安装pycharm社区版:

 
 
  1. umake ide pycharm

下面命令用来安装专业版:

 
 
  1. 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


猜你喜欢

转载自blog.csdn.net/sengo_gwu/article/details/80359005