配置权限用户

添加用户密码

  1. #创建用户
  2. adduser xxx
  3. # 设置密码
  4. passwd xxx

配置用户权限

个人用户的权限只可以在本home下有完整权限,其他目录要看别人授权。而经常需要root用户的权限,这时候sudo可以化身为root来操作。新创建的用户并不能使用sudo命令,需要给他添加授权。

找到 sudoers 文件,一般都在 /etc/sudoers

  1. whereis sudoers

添加root 的 w 权限

  1. chmod -v u+w /etc/sudoers

编辑用户权限

  1. vi /etc/sudoers

找到 ## Allow root to run any commands anywher 一行复制一遍 root 的指令
修改为对应的用户名称

收回写权限

  1. chmod -v u-w /etc/sudoers

配置 SSH 登陆

本地添加 rsa key

  1. ssh-keygen -t rsa

将公钥上传服务器

  1. ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<host>

:::info 注意事项:如果不是开放22端口,需要 加入 -p 参数调用端口信息不建议给 root 添加 SSH 权限 :::

指令优化

添加 Alias

.bash_profile 中添加 alias <alias>='ssh <user>@<host> -p <port> 然后 source ~/.bashrc 或重新打开 terminal 窗口

SSH Config

~/.ssh/config 中增加自己的服务端配置,如果文件不存在,则手动建立即可。使用 ssh <host> 即可快捷进入
服务器运维综合指南 - 图1

修改 SSH 连接端口

修改 SSH 配置文件

  1. vi /etc/ssh/sshd_config

修改 Port 22 为 Port 5050

添加端口到防火墙

开启防火墙(如果没有开启的话)

  1. systemctl start firewalld

修改firewall配置

  1. firewall-cmd --zone=public --add-port=5050/tcp --permanent
  2. firewall-cmd --zone=public --add-port=443/tcp --permanent
  3. firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙

  1. firewall-cmd --reload

查看添加端口是否成功

如果添加成功则会显示yes,否则no

  1. firewall-cmd --zone=public --query-port=4564/tcp

在网站添加安全组规则

服务器运维综合指南 - 图2

最后重启 SSH

  1. systemctl restart sshd.service

禁用 root 登陆权限

vi /etc/ssh/sshd_config 参数 PermitRootLogin 改为 no

  • 网站部署流程

· 配置防火墙
· CentOS 7 &以上
· 开启防火墙(如果没有开启的话)
systemctl start firewalld
· 开启端口
firewall-cmd —zone=public —add-port=80/tcp —permanent命令含义:—zone # 作用域—add-port=80/tcp # 添加端口,格式为:端口/通讯协议—permanent # 永久生效,没有此参数重启后失效
· 重启防火墙
firewall-cmd —reload
· 查询状态
systemctl status firewalld
· Unbuntu &CentOS 6
· iptables
· Ubuntu Server 14.04 Iptables简单实例配置)

配置 Node

  • 安装 NVM
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh| bash注意事项:要么重启终端 要么source .bashrc安装 Node
  • nvm install 8nvm install 9nvm alias stable 8nvm use 8从最近版本中导入包
  • nvm install 9 —reinstall-packages-from=8
  • 安装 pm2

  • 配置 Nginx

  • Nginx 开关

  • Ubuntu
    sudo service nginx stopsudo service nginx startsudo service nginx restartCentOS
    sudo systemctl start nginxsudo systemctl stop nginxsudo systemctl restart nginx开机自启动Nginx服务:sudo systemctl enable nginx.service提示:ln -s ‘/usr/lib/systemd/system/nginx.service’ ‘/etc/systemd/system/multi-user.target.wants/nginx.service’
  • Nginx 服务重启
  • Ubuntu
    service nginx -s reloadCentOS
    sudo nginx -s reload

· 测试配置文件正确性
· sudo nginx -t

  • 网站监听
  • 配置文档 /etc/nginx/conf.d/xxx.conf
  • 配置命名规范 - abc.domain.com-port.conf配置内容
  • 普通80端口版本
    upstream xxx{ server 127.0.0.1:3000;}server{ listen 80; server_name www.arvinlearn.com location / { proxy_set_header X-REAL-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_pass http://xxx; proxy_redirect off; }}SSL 443端口版本
    upstream xxx{ server 127.0.0.1:3000;}server{ listen 80; server_name www.arvinlearn.com; #填写绑定证书的域名 location / { proxy_set_header X-REAL-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_pass http://xxx; proxy_redirect off; }}server{ listen 443; server_name www.arvinlearn.com; #填写绑定证书的域名ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location / { proxy_set_header X-REAL-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_pass http://xxx; proxy_redirect off; }}

· 错误排查
· 查看监听 80 端口的 Nginx 进程
netstat -lnp | grep 80
· 查看进程的详细信息
ps <进程号>
· 杀掉 Nginx 进程
kill <进程号>
· 重启 Nginx
· 安装 MongoDB
· 官网安装 Monogodb
· CentOS
· 创建文件并编辑配置 MongoDB yum 源
· $ vim /etc/yum.repos.d/mongodb-org-3.6.repo
· 把下面的内容复制进去
· [mongodb-org-3.6]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
· 更新文件,安装
· $ yum update
· $ yum -y install mongodb-org
· 查看版本
· $ mongod —version
· 启动服务
· service mongod start
· 修改 mongodb 端口
· 进入MongoDB配置文件
vi /etc/mongodb.conf
· 更改net的 port 属性为合适的端口
· 重启服务
· service mongod restart
· 添加防火墙设置
· 数据库转移
· 数据库整体导入导出
· 导出数据库
mongodump -h host:port -d databasename -u -p -o
· 打包压缩
tar zcvf filename.tar.gz path/
· 上传
scp -P port filePath user@host:/savePath
· 解压
tar xvf koa_movies.tar.gz
· 导入数据库
mongorestore —host host:port -d dbName ./relative/path
· 单张表的导入导出
· 导出
mongoexport -h -d -c -q -u -p -o 查询语句 ‘{“name”:{$ne:null}}’
· 上传
scp -P @:
· 导入
mongoimport -h -d -c
· 数据库删除
· db.dropDatabase()
· 配置数据库用户
· use admin
· 创建用户
db.createUser({user: ‘owner’,pwd:’owner’,roles: [{role:’userAdminAnyDatabase’,db:’admin’}]})
· 授权
db.auth(‘owner’,’owner’)
· 创建单个数据库的用户角色
db.createUser({user: ‘movieUser’,pwd:’movie’,roles: [{role:’readWrite’,db:’movies’}]})
· 创建数据库的备份用户角色
db.createUser({user: ‘movieBackupUser’,pwd:’movieBackup’,roles: [{role:’read’,db:’movies’}]})
· 上线服务修改数据库
· Mongo端口连接
· mongo —port
· 配置 SSL 证书 HTTPS
· 下载证书
· 上传证书到服务器
· 配置 Nginx 跳转
server{ listen 443;server_name www.domain.com; #填写绑定证书的域名ssl on;ssl_certificate 1_www.domain.com_bundle.crt;ssl_certificate_key 2_www.domain.com.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置ssl_prefer_server_ciphers on;}

  • 上传 git
  • 给 git 仓库添加 pub key
  • PM2 进程运行
  • pm2 添加 pm2 配置文件
    ecosystem.json{ “apps”: [ { “name”: “name”, “script”: “./server/app.js”, “env”: { “COMMON_VARIABLE”: “true” }, “env_production”: { “NODE_ENV”: “production” } } ], “deploy”: { “production”: { “user”: “xxxx”, “host”: [“xxx”], “port”:”xxxx”, “ref”: “origin/master”, “repo”: “git@xxxxx.git”, “path”: “/xxxxxx”, “ssh_options”: “StrictHostKeyChecking=no”, “pre-deploy-local”: “echo ‘Deploy Done’”,”pre-setup” : “echo ‘commands or local script path to be run on the host before the setup process starts’”,”post-setup”: “echo ‘commands or a script path to be run on the host after cloning the repo’”,”post-deploy” : “npm install && pm2 startOrRestart ecosystem.json —env production” “env”: { “NODE_ENV”: “production” } } }}设置 pm2 setup
    pm2 deploy ecosystem.json production setup添加 pm2 设置
    注销服务器的 bashrc 的第一行# If not running interactively, don’t do anythingcase $- in i) ;; *) return;;esacNode 项目发布
    pm2 deploy ecosystem.json production服务器端设置pm2开机自动启动

· 错误检查
· 如果发现无法更新新的 head,查看 git 版本
· Git版本更新
· 使用传统方法安装 git 2 http://iyuluo.com/2017/08/29/CentOS-7-%E5%AE%89%E8%A3%85%E6%9C%80%E6%96%B0%E7%9A%84-Git/
· 在 CentOS 6/7 以 yum 安裝 git 2 https://medium.com/verybuy-dev/%E5%9C%A8-centos-7-3-%E4%B8%8A%E5%AE%89%E8%A3%9D-git-2-8052587dd1fd

  • 配置静态资源的访问规则
    新增location ~* ^.+.(jpg|jpeg|gif|png|ico|css|js|pdf|txt){root /path/to/public/}域名备案
  • 前面的内容走一遍基本上就全部搞定了,如果是国内服务器则需要备案备案没完成,但是需要开发测试:没备案过的在域名结尾加一个 . 就可以打开了 #奇技淫巧
    https://www.zhihu.com/question/62337502
  • Docker 的非root用户操作的步骤
  • 创建docker组
    sudo groupadd docker将当前用户加入docker组
    sudo gpasswd -a ${USER} docker重新启动docker服务(下面是CentOS7的命令)
    sudo systemctl restart docker运行docker命令
    docker ps
  • 解决Nginx下使用React-router出现404问题
    location / {try_files $uri $uri/ /index.html;}
  • Nginx 开启Gzip
  • 跨域解决
    https://segmentfault.com/a/1190000011145364https://juejin.im/post/5b505321f265da0f700709ea