在 CentOS 7 上添加 Swap 交换空间


how-to-add-swap-on-centos-7

Linux 中的 Swap 类似于 Windows 的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

Swap 从某种程度上相当于增加了服务器的可用内存。虽然从 Swap 读写比内存慢,但总比没有好,算是内存不够时的安全网。

本文介绍如何在 CentOS 7 服务器上创建并启用 Swap 文件。 继续阅读 “在 CentOS 7 上添加 Swap 交换空间”

Linux 技巧:利用 Alias 简化命令


Alias 是 Linux 中常用的别名命令,利用它我们可以为一些常用的相对复杂的命令创建一个简介的别名,这样在后续使用时会方便很多。

方法很简单,举个简单的例子:为常用的目录路径创建一个别名。

首先,使用 vi 打开 ~/.bashrc

vi  ~/.bashrc

然后添加一行:

alias cdt="cd /www/wordpress/wp-content/themes"

保存并退出,执行 source ~/.bash_profile 使命令生效。后续我们只要使用命令 cdt 就可以进入上面的路径了,就不用再输入完整的路径了!

CentOS 服务器使用 Certbot 安装配置 Let’s Encrypt SSL证书


lets-encrypt

Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。

申请 Let's Encript 证书主要有以下三种方式:

这里我们以 Certbot 脚本的方式为例,介绍 CentOS 下 Nginx 安装配置 Let's Encrypt 的过程。

安装 Certbot

sudo yum install certbot

自动安装配置

执行:

sudo certbot --nginx

Certbot 会查找当前服务器上的 Nginx 里面的虚拟主机,为你签发 SSL 证书,并且会自动修改主机的 Nginx 配置,让它支持 HTTPS,根据提示一步一步操作即可。

手动安装配置

申请证书

# 使用方法:certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos
# 例如:
certbot certonly --webroot -w /opt/www/mydomain.com -d mydomain.com -m myname@gmail.com --agree-tos

完成后,在 /etc/letsencrypt/live/ 会生成对应域名的文件夹,里面有指向证书的快捷方式。

配置 SSL 证书

server {
 server_name mydomain.com;
 listen 443;
 ssl on;
 ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
 ...

自动更新证书

Let's Encrypt 证书只有 90 天有效期,我们可以通过 cron 定期自动更新证书,(如果系统未安装 cronie,需先安装)执行:

crontab -e

如果我们希望每周一凌晨 2:30 自动执行证书更新操作,并自动重启nginx服务,添加一行:

30 2 * * 1 sudo /usr/bin/certbot renew --quiet && sudo /usr/bin/systemctl reload nginx

证书在到期前30天内才能更新,多余的更新会自动忽略掉的。

配置生阿里云 LEMP 产环境(二)


alibaba-cloud-logo

配置生产环境

配置网站目录

首先需要在 ECS 实例上创建我们网站的根目录,使用 mkdir -p 命令进行,比如我网站的根目录路径为 /public_html/iiryan.com

mkdir -p /public_html/iiryan.com

完成后,可以目录下新建一个 phpinfo.php 的文件,以方便我们后续测试,文件内容为:

<?php phpinfo(); ?>

配置 Nginx

在 Nginx 的配置目录 /etc/nginx/conf.d 下,新建一个名为 default.conf 的配置文件,文件内容为:

server {
        listen          80;
        server_name     iiiryan.com;
        root            /public_html/iiryan.com;
        index           index index.html index.php;

        location / {
                 try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
        }       
}

上面配置信息中,服务器地址、文件目录可以根据实际情况自己设置。完成后重新加载 Nginx:

systemctl reload nginx

因为,之前已经建了一个 phpinfo.php 的文件,我们可以在浏览器中打开:http://iiiryan.com/phpinfo.php ,如果能够正常打开 PHP 的信息页面,就说明配置成功了。 继续阅读 “配置生阿里云 LEMP 产环境(二)”

配置生阿里云 LEMP 产环境(一)


alibaba-cloud-logo

网站最终需要运行到正式生产环境上,我们需要一台云服务器,比如阿里云 ECS(https://aliyun.com)。搭建正式的生产环境与在本地流程基本一致,除此之外,还需要对服务器作一些安全性设置。

前提

  • 购买阿里云(或其他云服务器)ECS 实例
  • 实例系统为 CentOS 7.3 64位
  • 购买域名(国内节点需要完成备案)
  • 域名解析至服务器

初始化安全设置

购买完成后,可以在阿里云 ECS 实例控制台页面,实例的管理界面,在这个页面中可以看到实例的 ID/名称、所有可用区、IP 地址、配置信息以及一些控制操作(启动、停止、重启、重置密码、远程连接等等)。

本地化语言设置

默认情况下安装的 CentOS 系统语言为英文,为了使用方便可以将系统语言变量改为中文,系统配置文件的路径为 /etc/locale.conf

vi /etc/locale.conf

LANG=en_US.UTF-8 修改为:LANG=zh_CN.UTF-8

完成后重启实例,配置生效。

SSH 连接

我们可以直接使用控制台中的远程连接在浏览器中管理浏览器,但我们最常用的方式还是使用 SSH 工具连接控制,在终端执行:

ssh root@111.222.333.444

完成后会提示输入密码,此处密码为购买实例时设置的 root 账号密码(忘记密码可以控制台页面重置密码)。

输入密码,连接成功后,会返回信息:

Welcome to Alibaba Cloud Elastic Compute Service !

添加新用户并分配 root 权限

root 作为服务器的超级管理员账号,一般不建议作为常用账号,为此我们需要新建一个常用用户,并给这个用户分配 root 权限:

adduser test

完成后,为新用户设置登录密码,执行:

passwd test

按照提示给新用户设置密码后,将用户加入到 wheel 用户组中,这样 ryan 这个用户就可以使用 sudo 命令来获得 root 权限了:

gpasswd -a test wheel

完成后,之后就可以使用新创建的用户登录服务器了。

不过,在执行完上述设置后,会发现每次执行 sudo 命令时,都会提示需要输入密码,如果我们不想每次都输入密码,可以修改 sudo 配置文件:

vi /etc/sudoers

在配置文件中找到代码:

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

%wheel 前面的注释符号 # 删除,之后就执行 sudo 命令就不需要再输入密码了。

使用公钥身份验证:无密码登录

为服务器配置使用公钥进行身份验证,这样登录时就不需要密码了。

在本机使用 ssh-keygen 命令生成一组密钥,如果之前生成过可以查看用户主目录下的 .ssh 目录。

生成密钥后将 id_rsa.pub 文件中的内容复制到服务器用户主目录下的 .ssh/authorized_keys 文件中。

除了手动将公钥添加到服务器公钥文件中,也可以使用一个 ssh-copy-id 的小工具,在本机电脑中可以使用 Homebrew 来安装:

brew install ssh-copy-id

安装完成后,就可以使用 ssh-copy-id 命令来添加公钥到服务器中去了,执行:

ssh-copy-id test@111.222.333.444

根据提示输入密码,完成后就可以使用公钥身份验证登录服务了。

禁止 root 用户远程登录

禁止 root 用户远程登录,可以使我们的服务器更安全一些。为此需要对 SSH 进行一些配置,配置文件的路径为:/etc/ssh/sshd_config

使用 vi 来编辑这个配置文件:

vi /etc/ssh/sshd_config

在文件的最后,找到 PermitRootLogin yes,将其中的 yes 修改为 no

完成后,重新加载 SSH 使配置生效:

sudo systemctl reload sshd

禁止 SSH 使用密码登录服务器

因为我们已经设置了使用公钥进行身份验证,为了更安全一些,可以将 SSH 密码登录禁用。

使用 vi 来编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

在文件的最后,找到 PasswordAuthentication yes,将其中的 yes 修改为 no

完成后,重新加载 SSH 使配置生效。

修改 SSH 服务的端口号

SSH 默认使用的端口为 22,我们可以使用一个不常用的端口来替换默认的端口 22,这样服务器会更安全一些。

使用 vi 来编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

在文件中找到 #Port 22,将前面的注释符号 # 删除,然后将 22 修改为你想要的端口号(0-65536)。

完成后,使用命令 systemctl reload sshd 重新加载 sshd,使配置生效。

这样之后再连接 SSH 时,需要在 IP 地址后面加一个 -p 选项,指定端口号。

P.S. 需要先在实例控制台设置好安全组端口规则。

安全组

阿里云为了用户能更好的提高用户网络控制的灵活度。在操作系统上层提供了安全组功能。安全组类似虚拟防火墙功能,用于设置单个或多个 ECS 实例的网络访问控制,它是重要的安全隔离手段。

完整的安全组用户指南可以参考:https://help.aliyun.com/

常用的协议类型与端口关系:

协议类型 端口范围 应用场景
全部 显示为 -1/-1,表示不限制端口 可用于完全互相信任的应用场景
全部 ICMP 显示为 -1/-1,表示不限制端口 可用于检测实例所处的网络连接状况
自定义 TCP 自定义端口范围,有效的端口值是 1−65536,端口范围的合法格式是 开始端口/结束端口 可用于允许或拒绝一个或几个连续的端口
SSH 显示为 22/22。默认为 22 端口 用于 SSH 远程连接到 SSH 实例
HTTP 显示为 80/80 实例作为网站或 Web 应用的服务器
HTTPS 显示为 443/443 实例作为网站或 Web 应用的服务器,而且需要支持 HTTPS 协议

安装生产环境

正式生产环境的搭建与本地基本上是一样,此处正式生产环境也使用 LEMP 环境。

安装第三方仓库

为服务安装一些必需的包,需要先安装第三方仓库,一般我们使用 ius 和 epel 即可:

sudo yum install https://centos7.iuscommunity.org/ius-release.rpm

ius 的安装链接可以参考:Getting Started – IUS,epel 是 ius 仓库依赖的一个仓库,所以安装 ius 的时候也是 epel 一起安装好了。

安装 Nginx 服务器

执行以下命令,安装 Nginx 服务器:

sudo yum install nginx

启动 Nginx,并设置开机启动:

systemctl start nginx

systemclt enable nginx

安装 MySQL/MariaDB

我们使用 MariaDB(10.1) 代替 MySQL:

yum install mariadb101u mariadb101u-server

安装完成后启动 MariaDB,并且设置开机启动:

service mariadb start
systemctl enable mariadb.service

完成后,使用 mysql_secure_installation 进行安全设置。

安装 PHP-FPM

此处以安装 PHP7.1 为例:

sudo yum install php71u-fpm

完成后,可以继续安装一些常用的 PHP 扩展:

sudo yum install php71u-cli php71u-xml php71u-xmlrpc php71u-gd php71u-mysqlnd php71u-pdo php71u-mcrypt php71u-mbstring php71u-json

安装完成后启动 PHP-FPM,并设置开机启动:

service php-fpm start
systemctl enable php-fpm.service

安装配置 phpMyAdmin


phpmyadmin

为了更好的管理 MySQL/MariaDB 数据库,我们一般需要给服务器安装一个数据库图形管理界面,使用 WEB 页面管理数据库,phpMyAdmin 就是这样一个工具。

如果系统中安装了 epel 仓库,可以直接使用 yum install phpmyadmin 命令安装,不过这样直接安装会提示与之前安装的 php 有依赖冲突,所以建议使用手工安装方法。

安装 phpMyAdmin

官网 上可以找到 phpMyAdmin 的下载链接,使用 curl 命令下载它:

curl -O https://files.phpmyadmin.net/phpMyAdmin/4.7.6/phpMyAdmin-4.7.6-all-languages.zip

使用 unzip 命令解压刚下载的 zip 文件:

unzip phpMyAdmin*.zip

解压完成之后,之前下载的 zip 安装包就可使用 rm -rf phpMyAdmin*.zip 命令删除了。

我们需要将 phpMyAdmin 移动到 nginx 定义的服务根目录下,同时为了安全,可以给它修改成一个常用的名字(我配置有服务器目录为:/vagrant/www/public):

mv phpMyAdmin* /vagrant/www/public/phpMyAdmin

完成后,在浏览器中输入 Nginx 服务器绑定的主机名,加面加 /phpMyAdmin,如果正常的话,就能会看到 phpMyAdmin 的登陆界面了。 继续阅读 “安装配置 phpMyAdmin”

配置安装 WordPress


wordpress-install-config

一般情况下,我们可以在官网(https://wordpress.org)下载好 WordPress 安装包,然后上传到服务器安装,除了这个方法,我们也可以使用 WordPress 命令行工具 WP-CLI 用命令行安装。

配置服务器

首先需要为 WordPress 配置一个主机地址。

在电脑 hosts 文件中添加一条新记录:

192.168.33.10 iiiryan.dev

意思是将 iiiryan.dev 这个主机名指向我们虚拟机的 IP 地址,这样在配置 Nginx 时可以添加一个新的 server

然后我们在 Nginx 服务中配置文件目录中新建一个配置文件:iiiryan.dev.conf,配置内容为:

server {
  listen       80;
  server_name  iiiryan.dev;
  root         /vagrant/www/wordpress;
  index        index.php index.html index.htm;

  location / {
     try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include fastcgi_params;  
  }
}

/vagrant/www/wordpress 是网站的根目录,完成后重新加载 Nginx。

下载 WordPress

进行到上面设置的网站根目录下,执行命令:

wp core download

这个命令后可以使用 --locale--version 选项,指定下载的语言和版本。

创建数据库

如果已经安装了 phpMyAdmin,可以直接使用浏览器访问数据库管理页面,创建数据库,也可以使用命令行创建数据库。

先登录到 MySQL:

mysql -u root -p

登录后创建一个名为 wordpress 的数据库:

create database wordpress;

给数据库设定用户名、密码:

grant all grant all privileges on wordpress.* to 'ryan'@'localhost' identified by 'password';

为了安全,可以使用 openssl 生成一个随机密码。

完成后,退出 MySQL 控制台。

安装 WordPress

现在就可以直接在浏览器中输入我们设置的地址访问网站,并随着系统提示一步一步的进行安装了。

也可以使用 WP-CLI 命令行安装,首先需要设置 WordPress 的配置文件 wp-config.php

wp core config --dbname=wordpress --dbuser=ryan --password --dbhost=localhost --dbprefix=wp_ --locale=zh_CN

如果正常,返回信息:

Success: Generated wp-config.php file.

配置文件设置完成后就可使用 wp core install 命令进行安装了:

wp core install --url=http://iiiryan.dev --title='WordPress' --admin_user=ryan --admin_password=1234 --admin_email=mail@mail.com

成功后,返回信息:

Success: WordPress installed successfully.

如果一切顺利,在浏览器中输入设定的网址:http://iiiryan.dev 就能正常访问了。

项目版本控制工具:Git


git

Git 是一种为项目做版本控制的工具。

安装 Git

macOS 系统使用 Homebrew 安装,执行:

brew install git

CentOS 系统 yum 安装,执行:

sudo yum install git2u
  1. 系统仓库中如果没有最新版本,需要先安装第三方仓库。
  2. 如果系统里已经包含了低版本的 Git,需要先将系统中的删除才能继续安装。

基本流程

仓库 repository

使用 Git 为项目做版本控制,需要首先为项目添加一个 Git 仓库。

git init

这个命令可以为项目初始化一个仓库,初始化只需要执行一次,它会在项目目录下创建一个 .git 目录,Git 会把它需要的东西存储在这个 .git 目录下,这其实就是项目的仓库。

暂存区 staging area

把对项目做的修改、先放到暂存区,然后再做提交。

把对某个文件的所有修改添加到暂存区:

git add <file>

把在某个目录下做的所有修改添加到暂存区:

git add <directory>

把做的所有修改与新文件添加到暂存区(不包含删除文件):

git add .

把所有东西都添加到暂存区(修改、新文件、删除文件):

git add -A

把做的所有修改还有删除添加到暂存区:

git add -u

继续阅读 “项目版本控制工具:Git”

常用工具的安装


install-tools

本地开发环境搭建还成后,需要在服务器上安装一些常用的工具,如 Git,Composer,unzip,WP-CLI 等等。

Git

Git 可以为项目做版本控制。

安装 Git:

sudo yum install git2u

如果系统里已经包含了低版本的 Git,需要先将系统中的删除才能继续安装。

Git 的简单配置:

// 设置用户名
git config --global user.name "iiiRyan"

// 设置用户邮箱地址
git config --global user.email "85ryan.blue@gmail.com"

Composer

Composer 是 PHP 的包管理工具。

下载 Composer 安装:

curl -O https://getcomposer.org/installer

使用 Composer 安装器安装 Composer:

php installer

把 Composer 放在 /usr/local/bin 这个目录下,执行:

sudo mv composer.phar /usr/local/bin/composer

完成后,执行 composer 会返回一些帮助信息:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.4.2 2017-05-17 08:17:52

想让 composer 安装的东西在全局范围内使用,需要对配置文件进行修改:

vi ~/.bash_profile

PATH=$PATH:$HOME/.local/bin:$HOME/bin 的后面添加 :$HOME/.composer/vendor/bin

意思是在用户主目录下的 .composer/vendor/bin 里的东西,我们可以在任何地方执行。

让配置生效,执行:

source ~/.bash_profile

Composer 安装器现在没用了,可以删除掉:

rm -rf installer

设置中国镜像:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

unzip

解压 zip 格式的压缩文件,需要用到 unzip。

安装:

sudo yum install unzip

使用:

unzip FILE_TO_UNZIP.zip

WP-CLI

如果我们使用的 WordPress,并且希望使用命令行去安装、升级以及管理网站上的用户、评论、内容等,可以使用 WP-CLI(官方网站:http://wp-cli.org)。

首先下载安装包:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

下载完成后,可以验证一下是否能够正常工作:

php wp-cli.phar --info

如果安装成功,返回信息:

PHP binary: /usr/bin/php
PHP version:    7.1.6
php.ini used:   /etc/php.ini
WP-CLI root dir:    phar://wp-cli.phar
WP-CLI vendor dir:  phar://wp-cli.phar/vendor
WP_CLI phar path:   /home/vagrant
WP-CLI packages dir:    
WP-CLI global config:   
WP-CLI project config:  
WP-CLI version: 1.2.1

我们要在系统任何地方都可以使用 wp 这个命令,需要将 wp-cli.phar 移动到系统的环境变量目录里。首先需要先添加一个可执行的权限:

chmod +x wp-cli.phar

然后使用 mv 命令把它移动到 /usr/local/bin 这个目录下面,并且重命名为 wp,这样在系统的任何地方,都可使用 wp 这个命令了:

mv wp-cli.phar /usr/local/bin/wp

完成后可以使用 wp --info 命令测试一下,如果一切正常,则会返回信息:

PHP binary: /usr/bin/php
PHP version:    7.1.6
php.ini used:   /etc/php.ini
WP-CLI root dir:    phar://wp-cli.phar
WP-CLI vendor dir:  phar://wp-cli.phar/vendor
WP_CLI phar path:   /home/vagrant
WP-CLI packages dir:    
WP-CLI global config:   
WP-CLI project config:  
WP-CLI version: 1.2.1

默认情况下,升级 WP-CLI 可以使用以下命令:

wp cli update

但因为我们将 WP-CLI 移动到了系统变量下,使用 wp cli update 会遇到权限问题,可以使用以下命令:

sudo /usr/local/bin/wp cli update

WP-CLI 查看其他命令可以参考官方命令列表:http://wp-cli.org/commands

搭建本地开发环境:LEMP


lemp-centos-nginx-mysql-mariadb-php

我们需要在本机电脑搭建一个供学习、测试用的开发环境,此处我们选择 LEMP 开发环境,即 Linux(系统),Nginx(服务器),MariaDB/MySQL(数据库),PHP(开发语言)。

如果想完整的学习,请放弃 WAMP、MAMP、XAMPP 或者其他的一些一键速成的开发环境。

安装 Nginx

Nginx 是一种 web 服务器,接受 web 请求,并且把请求的内容发给用户。

安装 Nginx,执行:

sudo yum install nginx

启动 Nginx,执行:

sudo systemctl start nginx

设置 Nginx 开机启动,执行:

sudo systemctl enable nginx

在浏览器中访问 http://192.168.33.10 (或者其他你设置的服务器地址),如果看到 NGINX 的欢迎界面,则安装成功。

MariaDB / MySQL

MariaDB 是 MySQL 的一个分支,是加强版的 MySQL,它可以完全取代 MySQL。

CentOS 7.0 已经用 MariaDB 替换掉了 MySQL,所以默认只能使用包管理工具安装 MariaDB。

安装 MariaDB

使用包管理工具 yum 安装 MariaDB 执行以下命令(此处以安装 MariaDB 10.1 版本为例):

sudo yum install mariadb101u mariadb101u-server

安装过程中如果返回一个错误:Error: mariadb101u-errmsg conflicts with 1:mariadb-libs-5.5.52-1.el7.x86_64,说明系统安装 mariadb-libs-5.5.52-1.el7.x86_64 与现在安装的版本冲突,使用 sudo yum remove mariadb-libs-5.5.52-1.el7.x86_64 命令删除即可解决。

安装完成后,查看 MariaDB 的状态,执行:

service mariadb status

在返回信息中会发现:

Active: inactive (dead)

表示服务是停止的状态。

启动 MariaDB

service 命令启动 MariaDB 服务,执行:

sudo service mariadb start

想开机自动启动,用 systemctlenable 命令:

sudo systemctl enable mariadb.service

数据库安全设置

安装完 MariaDB 以后,可以执行一下安全设置,这样可以为 root(MariaDB 的超级管理员)用户添加密码,删除匿名用户还有 test 数据库等等。执行:

mysql_secure_installation

会返回以下信息:

  • Enter current password for root (enter for none):输入当前 root 用户的密码
  • Set root password? [Y/n]:想要设置 root 用户的密码吗?
  • New password:输入 root 用户的新密码
  • Re-enter new password:重新输入为 root 用户设置的密码
  • Remove anonymous users? [Y/n] :要删掉匿名用户吗?
  • Disallow root login remotely? [Y/n] :要禁用 root 用户远程登录吗?
  • Remove test database and access to it? [Y/n]:想要删掉 test 这个数据库吗?
  • Reload privilege tables now? [Y/n]:现在就要重新载入权限吗?

测试验证

登录数据库控制台,执行:

mysql -u root -p

输入密码后执行:

show databases;

会显示数据库系统的所有数据库:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

PHP-FPM

Web 应用如果是用 PHP 语言写的,比如 Drupal,WordPress,Laravel 等等,需要在服务器上安装 PHP 的解释工具。还需要让 Web 服务器可以跟 PHP 解释工具能够交流,这样 Web 服务器才能为用户输出请求的内容。因为我们选择使用 Nginx 服务器,它跟 PHP 的交流方式可以使用 PHP-FPM,因此首先来安装 PHP-FPM。 继续阅读 “搭建本地开发环境:LEMP”