安装一台服务器

  • 安装服务器
  • MacOS下使用证书登陆SSH腾讯云
  • 安装配置rsync
  • 安装Nginx和PHP7+MySQL
  • 安装node.js 和 npm
  • 安装 VUE
  • 安装Laravel 5.8
  • Rsync命令参数详解
  • 通过指令从腾讯云SSL的CRT文件生成PEM文件
  • ubuntu 下 安装 Let’s Encrypt 自动更新SSL证书
  • 白痴也会写Cron定时器表达式


安装服务器

MacOS下使用证书登陆SSH腾讯云

cd ~/.ssh

腾讯云证书复制进来

ssh-keygen -t rsa

看看config,里面应该是:

Host    aliasname1
        HostName        10.10.10.10
        Port            22
        User            ubuntu
        IdentityFile    ~/.ssh/zhengshumingzi
Host    aliasname2
        HostName        11.11.11.11
        Port            22
        User            ubuntu
        IdentityFile    ~/.ssh/zhengshumingzi

如果出错:
Permissions 0755 for ‘zhengshu’ are too open.
则:chmod 400 *

Warning: Permanently added '8.8.8.8 (ECDSA) to the list of known hosts.
则:ssh-keygen -R 8.8.8.8

然后直接 ssh aliasname1 就可以登陆服务器了。

安装配置rsync

ubuntu 16.04默认已安装rsync,rsync服务默认不是启动的,我们要修改rsync文件。

sudo vim /etc/default/rsync

修改配置项:

RSYNC_ENABLE=true   #false改true

创建配置文件,将rsyncd.conf 复制到 /etc目录下

sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
sudo vi /etc/rsyncd.conf

其中 path 是需要同步的路径,你可以暂时只对此项配置,然后即可测试。
启动 rsync

sudo /etc/init.d/rsync start

[ ok ] Starting rsync (via systemctl): rsync.service.

设置密码:

sudo vi /etc/rsyncd.conf

修改:

auth users = zhao
	secrets file = /etc/rsyncd.secrets

然后创建 密码文件:

sudo vi /etc/rsyncd.secrets

内容为:

zhao:password

保存后记得修改权限:

sudo chmod 600 /etc/rsyncd.secrets

然后重启Rsync

sudo /etc/init.d/rsync restart

客户端如果是MacOS,直接打开命令行

rsync -vzrtopag --progress --password-file=./rsync.pwd  .  zhao@8.8.8.8::ftp

本地的 ./rsync.pwd 的内容只需要密码即可。

要注意,如果有权限问题,可能是rsync.conf文件里的uid和gid与实际不符。

安装Nginx和PHP7+MySQL

sudo apt-get install nginx

然后

sudo apt-get install php7.0-fpm

如果需要安装php 7.3(Laravel 高版本需求)则需要更新下库,然后安装php7.3

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.3

安装MySQL

sudo apt-get install mysql-server-5.7

中途会输入root密码
然后
安装PHP7.0的各种模块:

sudo apt-get install php7.0-intl       php7.0-mysql      php7.0-pspell     php7.0-sqlite3    php7.0-xsl php7.0-bcmath     php7.0-curl       php7.0-gd         php7.0-json       php7.0-odbc       php7.0-readline   php7.0-sybase     php7.0-zip php7.0-bz2        php7.0-dba        php7.0-gmp        php7.0-ldap       php7.0-opcache    php7.0-recode     php7.0-tidy   php7.0-cgi        php7.0-dev        php7.0-imap       php7.0-mbstring   php7.0-pgsql      php7.0-snmp       php7.0-xml        php7.0-cli        php7.0-enchant    php7.0-interbase  php7.0-mcrypt     php7.0-phpdbg     php7.0-soap       php7.0-xmlrpc

如果要安装的PHP7.3
则可以搜一下有哪些模块:

sudo apt-cache search php7*

然后按需要或者全部安装php7.3模块:

sudo apt install php7.3-common php7.3-fpm php7.3-intl php7.3-odbc php7.3-readline php7.3-sybase php7.3-zip php7.3-bcmath php7.3-curl php7.3-gd php7.3-json php7.3-opcache php7.3-recode php7.3-tidy php7.3-bz2 php7.3-dba php7.3-gmp php7.3-ldap php7.3-pgsql php7.3-snmp php7.3-xml php7.3-cgi php7.3-dev php7.3-imap php7.3-mbstring php7.3-phpdbg php7.3-soap php7.3-xmlrpc php7.3-cli php7.3-enchant php7.3-interbase php7.3-mysql php7.3-pspell php7.3-sqlite3 php7.3-xsl

然后设置 php.ini

sudo vi /etc/php/7.0/fpm/php.ini
//找到 ;cgi.fix_pathinfo=1 
//改成 cgi.fix_pathinfo=0

修改nginx的配置:

sudo vi /etc/nginx/conf.d/my.conf

参照sites-available下的default写就好了。
关于PHP7.3+nginx的设置,范例如下:

server {
	listen 80;
	listen [::]:80;
	server_name api.xxx.cn;
	root /var/www/zhao/html_xxx;
	index index.html index.htm index.php;
	location / {
		try_files $uri $uri/ =404;
	}
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                # With php7.0-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php7.0-fpm:
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
}

snippets/fastcgi-php.conf里面的内容如下,原来的不需要改:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321?
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
include fastcgi.conf;

安装node.js 和 npm

sudo apt-get update

首先需要安装依赖包python-software-properties。

sudo apt-get install python-software-properties

安装ppa

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

如果提示没有安装curl,需要先安装curl。
接下来安装nodejs,安装完成之后npm也自动安装好了。

sudo apt-get install nodejs

安装完成之后我们查看一下nodejs和npm的版本

node -v
npm -v

因为国内的网络环境,直接从npm官方源安装软件包速度会比较慢,甚至导致安装不成功。我们可以安装nrm工具,用于管理软件源。

sudo npm install -g nrm

安装完成之后,列出可用的软件源:

sudo nrm ls

在国内,我们可以使用taobao的源,速度还相对不错。

sudo nrm use taobao

初始化一下 npm,创建 package.json

sudo npm init -y

安装 VUE

由于安装vue 是会出现提示, 更新一下package.json的内容:
npm warn package.json @1.0.0 no repository field.

{
    ...
    "repository": {
        "type": "git",
        "url": "http://baidu.com"
    },
    ...
}

或者声明私有化

{
    ...
    "private": true,
    ...
}

然后安装VUE

sudo npm install vue

Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程。只需一分钟即可启动带热重载、保存时静态检查以及可用于生产环境的构建配置的项目:

# 全局安装 vue-cli 脚手架
$ sudo npm install --global vue-cli

#如果输入vue,出现说明,说明正常了。

# 创建一个基于 webpack 模板的新项目
$ sudo vue init webpack my-project

# 按提示回车和输入就好了。。。。

$ cd my-project
$ sudo npm install
$ sudo npm run dev
#或者
$sudo npm run build

注意,npm run 后的 dist目录才是web访问的主目录。
如果出现空白页面,则查看config目录下面的config.js里面的路径是否配置正确。

重要: Github 仓库的 /dist 文件夹只有在新版本发布时才会更新。如果想要使用 Github 上 Vue 最新的源码,你需要自己构建。

sudo git clone https://github.com/vuejs/vue.git node_modules/vue
cd node_modules/vue
sudo npm install
sudo npm run build

然后访问网站吧~~

安装Laravel 5.8

首先安装 Composer

sudo curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/bin/composer

运行 composer 出现版本号和说明就可以了。

然后安装Laravel ,注意,不能在root和super user账号下安装。
可以新建一个账号:

useradd -m zhao
passwd zhao
su - zhao

然后再安装。

composer global require laravel/installer

如果安装报错,composer 报错:proc_open(): fork failed

解决方法:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 
/sbin/mkswap /var/swap.1 
/sbin/swapon /var/swap.1

安装完了laravel ,创建一个项目:

~/.config/composer/vendor/bin/laravel new myproject

laravel找不到的话,就看一下安装上一步时候提示的路径。

Changed current directory to /home/用户名/.config/composer

创建完成提示:


Package manifest generated successfully.
Application ready! Build something amazing.

如果之前已经安装过旧版本的 Laravel 安装器,需要更新后才能安装基于 Laravel 5.8 框架的新应用:

composer global update

安装完成后, myproject 目录就是项目目录。可以复制到指定地方,注意权限。
访问 目录中的 public/index.php 就是入口

Laravel 5.8 学院文档

Rsync命令参数详解

Rsync 的几种指令格式:

rsync [OPTION]... SRC DEST
#拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup

rsync [OPTION]... SRC [USER@]HOST:DEST
#使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src

rsync [OPTION]... [USER@]HOST:SRC DEST
#使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data

rsync [OPTION]... [USER@]HOST::SRC DEST
#从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@8.8.8.8::www /databack

rsync [OPTION]... SRC [USER@]HOST::DEST
#从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@8.8.8.8::www

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
#列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://8.8.8.8/www

rsync参数的具体解释如下:

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
–progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

通过指令从腾讯云SSL的CRT文件生成PEM文件

openssl x509 -in mycert.crt -out mycert.pem -outform PEM

ubuntu 下 安装 Let’s Encrypt 自动更新SSL证书

安装 letsencrypt

sudo apt-get install letsencrypt

生成证书

sudo letsencrypt certonly --webroot -w /var/www/html -d www.domain.com -d domain.com

注意:

********* 很重要 *******必须先配置 80端口可以访问该域名,才能够生成证书!!!!!
certonly 表示只颁发证书
–webroot 表示自动验证域名
-w 表示网站目录 (所以后面的路径,必须是该域名的主目录,需要验证域名有效性,要保证此目录可以通过http访问到。 )
-d 表示颁发证书的域名,可以配置该目录下的多个域名。

配置 nginx 服务器

#如果需要自动重生成证书,记得要有80端口访问,否则验证域名会失败。

server {
	listen 80;
	listen [::]:80;
	server_name www.domain.com domain.com;
	root ...... 省略
}

server {
        listen 443;
        listen [::]:443;
        server_name www.domain.com domain.com;
        
        ssl_certificate /etc/letsencrypt/live/www.a.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.a.com/privkey.pem;
        ssl on;
 ... 下面省略
}

然后重启动 Nginx

sudo service nginx restart

证书每三个月会失效,所以还要重新申请,重新申请很简单,一条指令即可:

sudo certbot renew
或者
sudo certbot renew --quiet --force-renewal

如果不想每三个月登陆服务器输入一次,那就配置一下 crontab ,每两个月自动执行一次。

sudo vi /etc/crontab

在开头加上:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 下面的是 ubuntu 自带。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 0 1 */2 * root certbot renew --quiet --force-renewal
... 后面原有的不变

白痴也会写Cron定时器表达式

到现在都记不住 cron定时器表达式怎么写,终于不用再动脑子了。
直接在线生成表达式吧~